[
  {
    "path": ".devcontainer/devcontainer.json",
    "content": "// For format details, see https://aka.ms/devcontainer.json. For config options, see the\n// README at: https://github.com/devcontainers/templates/tree/main/src/python\n{\n\t\"name\": \"Data Formulator Dev\",\n\t// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile\n\t\"image\": \"mcr.microsoft.com/devcontainers/python:1-3.11-bullseye\",\n\n\t// Features to add to the dev container. More info: https://containers.dev/features.\n\t\"features\": {\n\t\t\"ghcr.io/devcontainers/features/node:1\": {\n\t\t\t\"version\": \"18\"\n\t\t},\n\t\t\"ghcr.io/devcontainers/features/azure-cli:1\": {},\n\t\t\"ghcr.io/astral-sh/uv:1\": {}\n\t},\n\t\n\t// Use 'forwardPorts' to make a list of ports inside the container available locally.\n\t\"forwardPorts\": [5000, 5173],\n\n\t// Use 'postCreateCommand' to run commands after the container is created.\n\t\"postCreateCommand\": \"cd /workspaces/data-formulator && npm install && npm run build && uv sync && uv run data_formulator\"\n\n\t// Configure tool-specific properties.\n\t// \"customizations\": {},\n\n\t// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.\n\t// \"remoteUser\": \"root\"\n}\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where the package manifests are located.\n# Please see the documentation for more information:\n# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates\n# https://containers.dev/guide/dependabot\n\nversion: 2\nupdates:\n - package-ecosystem: \"devcontainers\"\n   directory: \"/\"\n   schedule:\n     interval: weekly\n"
  },
  {
    "path": ".github/workflows/python-build.yml",
    "content": "# This workflow will install Python dependencies, run tests and lint with a variety of Python versions\n# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python\n\nname: build\n\non:\n  push:\n    branches: [ \"main\" ]\n  pull_request:\n    branches: [ \"main\" ]\n\n# Global permissions required for OIDC authentication\npermissions:\n  id-token: write\n  contents: read\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    strategy:\n      fail-fast: false\n    steps:\n    - uses: actions/checkout@v4\n    - name: Set Node.js 20\n      uses: actions/setup-node@v4\n      with:\n        node-version: 20\n        cache: 'yarn'\n    - name: Set up uv\n      uses: astral-sh/setup-uv@v4\n      with:\n        python-version: 3.12\n    - name: Install node dependencies\n      run: yarn install\n    - name: Build frontend\n      run: yarn build\n    - name: Build python artifact\n      run: uv build\n    - name: Archive production artifacts\n      uses: actions/upload-artifact@v4\n      with:\n        name: release-dist\n        path: dist\n\n  pypi-publish:\n    runs-on: ubuntu-latest\n    needs:\n      - build\n    if: github.event_name == 'push' && contains(github.event.head_commit.message, '[deploy]')\n    environment:\n      name: pypi\n      url: https://pypi.org/p/data-formulator\n    permissions:\n      id-token: write\n    steps:\n      - name: Retrieve release distributions\n        uses: actions/download-artifact@v4\n        with:\n          name: release-dist\n          path: dist/\n      - name: Publish package distributions to PyPI\n        uses: pypa/gh-action-pypi-publish@release/v1\n"
  },
  {
    "path": ".gitignore",
    "content": "\n*env\n.venv/\n.env\n**/*.ipynb_checkpoints/\n.DS_Store\nbuild/\ndist/\nexperiment_data/\n\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore\n\n# User-specific files\n*.rsuser\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Mono auto generated files\nmono_crash.*\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\n[Ww][Ii][Nn]32/\n[Aa][Rr][Mm]/\n[Aa][Rr][Mm]64/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n[Ll]ogs/\n\n# Visual Studio 2015/2017 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# Visual Studio 2017 auto generated files\nGenerated\\ Files/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUnit\n*.VisualState.xml\nTestResult.xml\nnunit-*.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# Benchmark Results\nBenchmarkDotNet.Artifacts/\n\n# .NET Core\nproject.lock.json\nproject.fragment.lock.json\nartifacts/\n\n# ASP.NET Scaffolding\nScaffoldingReadMe.txt\n\n# StyleCop\nStyleCopReport.xml\n\n# Files built by Visual Studio\n*_i.c\n*_p.c\n*_h.h\n*.ilk\n*.meta\n*.obj\n*.iobj\n*.pch\n*.pdb\n*.ipdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*_wpftmp.csproj\n*.log\n*.tlog\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# Visual Studio Trace Files\n*.e2e\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# AxoCover is a Code Coverage Tool\n.axoCover/*\n!.axoCover/settings.json\n\n# Coverlet is a free, cross platform Code Coverage Tool\ncoverage*.json\ncoverage*.xml\ncoverage*.info\n\n# Visual Studio code coverage results\n*.coverage\n*.coveragexml\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# Note: Comment the next line if you want to checkin your web deploy settings,\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# NuGet Symbol Packages\n*.snupkg\n# The packages folder can be ignored because of Package Restore\n**/[Pp]ackages/*\n# except build/, which is used as an MSBuild target.\n!**/[Pp]ackages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/[Pp]ackages/repositories.config\n# NuGet v3's project.json files produces more ignorable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n*.appx\n*.appxbundle\n*.appxupload\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!?*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.jfm\n*.pfx\n*.publishsettings\norleans.codegen.cs\n\n# Including strong name files can present a security risk\n# (https://github.com/github/gitignore/pull/2483#issue-259490424)\n#*.snk\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\nServiceFabricBackup/\n*.rptproj.bak\n\n# SQL Server files\n*.mdf\n*.ldf\n*.ndf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n*.rptproj.rsuser\n*- [Bb]ackup.rdl\n*- [Bb]ackup ([0-9]).rdl\n*- [Bb]ackup ([0-9][0-9]).rdl\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\nnode_modules/\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)\n*.vbw\n\n# Visual Studio 6 auto-generated project file (contains which files were open etc.)\n*.vbp\n\n# Visual Studio 6 workspace and project file (working project files containing files to include in project)\n*.dsw\n*.dsp\n\n# Visual Studio 6 technical files\n*.ncb\n*.aps\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# CodeRush personal settings\n.cr/personal\n\n# Python Tools for Visual Studio (PTVS)\n__pycache__/\n*.pyc\n\n# Cake - Uncomment if you are using it\n# tools/**\n# !tools/packages.config\n\n# Tabs Studio\n*.tss\n\n# Telerik's JustMock configuration file\n*.jmconfig\n\n# BizTalk build output\n*.btp.cs\n*.btm.cs\n*.odx.cs\n*.xsd.cs\n\n# OpenCover UI analysis results\nOpenCover/\n\n# Azure Stream Analytics local run output\nASALocalRun/\n\n# MSBuild Binary and Structured Log\n*.binlog\n\n# NVidia Nsight GPU debugger configuration file\n*.nvuser\n\n# MFractors (Xamarin productivity tool) working folder\n.mfractor/\n\n# Local History for Visual Studio\n.localhistory/\n\n# Visual Studio History (VSHistory) files\n.vshistory/\n\n# BeatPulse healthcheck temp database\nhealthchecksdb\n\n# Backup folder for Package Reference Convert tool in Visual Studio 2017\nMigrationBackup/\n\n# Ionide (cross platform F# VS Code tools) working folder\n.ionide/\n\n# Fody - auto-generated XML schema\nFodyWeavers.xsd\n\n# VS Code files for those working on multiple tools\n.vscode/*\n!.vscode/settings.json\n!.vscode/tasks.json\n!.vscode/launch.json\n!.vscode/extensions.json\n*.code-workspace\n\n# Local History for Visual Studio Code\n.history/\n\n# Windows Installer files from build outputs\n*.cab\n*.msi\n*.msix\n*.msm\n*.msp\n\n# JetBrains Rider\n*.sln.iml\nvenv\n\n\n\\.\\NUL\nNUL"
  },
  {
    "path": ".python-version",
    "content": "3.11\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"Flask\",\n            \"type\": \"debugpy\",\n            \"request\": \"launch\",\n            \"program\": \"${workspaceFolder}/py-src/data_formulator/app.py\",\n            \"args\": [\"run\", \"--no-debugger\", \"--no-reload\"],\n            \"env\": {\n                \"FLASK_APP\": \"app.py\",\n                \"FLASK_ENV\": \"development\",\n                \"FLASK_RUN_PORT\": \"5000\",\n                \"FLASK_RUN_HOST\": \"0.0.0.0\"\n            },\n            \"preLaunchTask\": \"Activate Virtual Environment\",\n        }\n    ]\n}\n"
  },
  {
    "path": ".vscode/tasks.json",
    "content": "{\n    \"version\": \"2.0.0\",\n    \"tasks\": [\n        {\n            \"label\": \"Activate Virtual Environment\",\n            \"type\": \"shell\",\n            \"command\": \"source /workspaces/data-formulator/venv/bin/activate\",\n            \"problemMatcher\": [],\n            \"group\": {\n                \"kind\": \"test\",\n                \"isDefault\": true\n            },\n            \"presentation\": {\n                \"reveal\": \"always\",\n                \"panel\": \"new\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "CODESPACES.md",
    "content": "# Set up Data Formulator on Codespaces\nUse a preconfigured Codespace to get Data Formulator up and running quickly.\n\n## Prerequisites\nYou will need a GitHub account and to be logged in to use Codespaces.\n\n### Step 1: Create a Codespace (~5 minutes)\n\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/data-formulator?quickstart=1)\n\n<kbd>\n  <img width=\"400\" alt=\"image\" src=\"https://github.com/user-attachments/assets/868d104f-c6e8-4b17-9963-f0d3e9270ea6\">\n</kbd>\n\n### Step 2: Run the app\nThe codespace is a VSCode development environment in the cloud. Once the Codespace is created, start Data Formuator with the following steps:\n\n* A toast about port forwarding will appear, click the **Open in Browser** button.\n* You will see the Data Formulator app!\n\n<kbd>\n  <img width=\"528\" alt=\"image\" src=\"https://github.com/user-attachments/assets/cb9e2123-4a42-4926-8b59-5bafb9be25fa\">\n</kbd>\n\n\n### Usage\nSee the [Usage section on the README.md page](README.md#usage).\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Microsoft Open Source Code of Conduct\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).\n\nResources:\n\n- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)\n- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)\n- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nThis project welcomes contributions and suggestions. Most contributions require you to\nagree to a Contributor License Agreement (CLA) declaring that you have the right to,\nand actually do, grant us the rights to use your contribution. For details, visit\nhttps://cla.microsoft.com.\n\nWhen you submit a pull request, a CLA-bot will automatically determine whether you need\nto provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the\ninstructions provided by the bot. You will only need to do this once across all repositories using our CLA.\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).\nFor more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)\nor contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments."
  },
  {
    "path": "DEVELOPMENT.md",
    "content": "# Set up a local Data Formulator development environment\nHow to set up your local machine.\n\n## Prerequisites\n* Python >= 3.11\n* Node.js\n* Yarn\n* [uv](https://docs.astral.sh/uv/) (recommended) or pip\n\n## Backend (Python)\n\n### Option 1: With uv (recommended)\n\nuv is faster and provides reproducible builds via lockfile.\n\n```bash\nuv sync                        # Creates .venv and installs all dependencies\nuv run data_formulator         # Run app (opens browser automatically)\nuv run data_formulator --dev   # Run backend only (for frontend development)\n```\n\n**Which command to use:**\n- **End users / testing the full app**: `uv run data_formulator` - starts server and opens browser to http://localhost:5567\n- **Frontend development**: `uv run data_formulator --dev` - starts backend server only, then run `yarn start` separately for the Vite dev server on http://localhost:5173\n\n### Option 2: With pip (fallback)\n\n- **Create a Virtual Environment**  \n    ```bash\n    python -m venv venv\n    source venv/bin/activate  # Unix\n    # or .\\venv\\Scripts\\activate  # Windows\n    ```\n\n- **Install Dependencies**  \n    ```bash\n    pip install -r requirements.txt\n    ```\n- **Configure environment variables (optional)**\n    - copy `.env.template` to `.env` and fill in your values:\n        - **API keys**: set `{PROVIDER}_ENABLED=true`, `{PROVIDER}_API_KEY=...`, and `{PROVIDER}_MODELS=...` for each LLM provider you want to use. See the [LiteLLM setup](https://docs.litellm.ai/docs#litellm-python-sdk) guide for provider-specific fields.\n        - **Server settings**: `DISABLE_DISPLAY_KEYS`, `SANDBOX`, etc.\n        - **Azure Blob workspace** (optional): see [Azure Blob Storage Workspace](#azure-blob-storage-workspace) below.\n    - this lets Data Formulator automatically load API keys at startup so you don't need to enter them in the UI.\n\n\n- **Run the app**\n    ```bash\n    # Unix\n    ./local_server.sh\n    \n    # Windows\n    .\\local_server.bat\n    \n    # Or directly\n    data_formulator         # Opens browser automatically\n    data_formulator --dev   # Backend only (for frontend development)\n    ```\n\n## Frontend (TypeScript)\n\n- **Install NPM packages**  \n    \n    ```bash\n    yarn\n    ```\n\n- **Development mode**\n\n    First, start the backend server (in a separate terminal):\n    ```bash\n    uv run data_formulator --dev   # or ./local_server.sh\n    ```\n\n    Then, run the frontend in development mode with hot reloading:\n    ```bash\n    yarn start\n    ```\n    Open [http://localhost:5173](http://localhost:5173) to view it in the browser.\n    The page will reload if you make edits. You will also see any lint errors in the console.\n\n## Build for Production\n\n- **Build the frontend and then the backend**\n\n    Compile the TypeScript files and bundle the project:\n    ```bash\n    yarn build\n    ```\n    This builds the app for production to the `py-src/data_formulator/dist` folder.  \n\n    Then, build python package:\n\n    ```bash\n    # With uv\n    uv build\n    \n    # Or with pip\n    pip install build\n    python -m build\n    ```\n    This will create a python wheel in the `dist/` folder. The name would be `data_formulator-<version>-py3-none-any.whl`\n\n- **Test the artifact**\n\n    You can then install the build result wheel (testing in a virtual environment is recommended):\n    ```bash\n    # replace <version> with the actual build version. \n    pip install dist/data_formulator-<version>-py3-none-any.whl \n    ```\n\n    Once installed, you can run Data Formulator with:\n    ```bash\n    data_formulator\n    ```\n    or \n    ```bash\n    python -m data_formulator\n    ```\n\n    Open [http://localhost:5567](http://localhost:5567) to view it in the browser.\n\n\n## Sandbox\n\nAI-generated Python code runs inside a **sandbox** to isolate it from the main server process. Two backends are available:\n\n| Backend | Flag | How it works | Overhead |\n|---------|------|--------------|----------|\n| **local** (default) | `--sandbox local` | Persistent warm subprocess with pre-imported pandas/numpy/duckdb. Audit hooks block file writes and dangerous operations (subprocess, shutil, etc.). | ~1 ms |\n| **docker** | `--sandbox docker` | Each execution runs in a disposable `docker run --rm` container. Workspace is mounted read-only; output is returned via a bind-mounted parquet file. Memory/CPU/PID limits enforced. | ~700 ms |\n\n```bash\n# Use the default local sandbox\npython -m data_formulator\n\n# Use Docker sandbox (requires Docker daemon)\npython -m data_formulator --sandbox docker\n```\n\nThe Docker sandbox image is built from `py-src/data_formulator/sandbox/Dockerfile.sandbox`:\n\n```bash\ndocker build -t data-formulator-sandbox -f py-src/data_formulator/sandbox/Dockerfile.sandbox .\n```\n\nSource: [`py-src/data_formulator/sandbox/`](py-src/data_formulator/sandbox/)\n\n\n## Azure Blob Storage Workspace\n\nBy default, workspace data (uploaded files, parquet tables, metadata) is stored on the **local filesystem** under `~/.data_formulator/workspaces/`. For cloud deployments you can switch to **Azure Blob Storage** so all workspace data lives in a blob container instead.\n\n### Quick start (local dev with connection string)\n\n1. **Install extra dependencies:**\n\n   ```bash\n   pip install azure-storage-blob\n   # or with uv:\n   uv pip install azure-storage-blob\n   ```\n\n2. **Create a storage account & container** (one-time setup):\n\n   ```bash\n   az storage account create -n <account> -g <resource-group> -l eastus --sku Standard_LRS\n   az storage container create -n data-formulator --account-name <account>\n   ```\n\n3. **Get the connection string:**\n\n   ```bash\n   az storage account show-connection-string -n <account> -g <resource-group> -o tsv\n   ```\n\n4. **Add to `.env`:**\n\n   ```env\n   WORKSPACE_BACKEND=azure_blob\n   AZURE_BLOB_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...\n   # AZURE_BLOB_CONTAINER=data-formulator   # default, change if needed\n   ```\n\n5. **Run normally:**\n\n   ```bash\n   uv run data_formulator --dev\n   ```\n\n   Or pass as CLI flags:\n\n   ```bash\n   data_formulator --workspace-backend azure_blob \\\n     --azure-blob-connection-string \"DefaultEndpointsProtocol=https;AccountName=...\"\n   ```\n\n### Production setup with Entra ID (no secrets)\n\nIn production (Azure App Service, AKS, etc.) you can authenticate the app to blob storage via **Managed Identity** instead of a connection string. This eliminates secrets entirely.\n\n1. **Install extra dependencies:**\n\n   ```bash\n   pip install azure-storage-blob azure-identity\n   ```\n\n2. **Assign a role to the app's Managed Identity:**\n\n   ```bash\n   # Get the App Service's principal ID\n   PRINCIPAL_ID=$(az webapp identity show -n <app-name> -g <rg> --query principalId -o tsv)\n\n   # Grant it \"Storage Blob Data Contributor\" on the storage account\n   az role assignment create \\\n     --assignee \"$PRINCIPAL_ID\" \\\n     --role \"Storage Blob Data Contributor\" \\\n     --scope \"/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<account>\"\n   ```\n\n3. **Set environment variables** (no secrets needed):\n\n   ```env\n   WORKSPACE_BACKEND=azure_blob\n   AZURE_BLOB_ACCOUNT_URL=https://<account>.blob.core.windows.net\n   # AZURE_BLOB_CONTAINER=data-formulator\n   ```\n\n   The app uses [`DefaultAzureCredential`](https://learn.microsoft.com/python/api/azure-identity/azure.identity.defaultazurecredential), which automatically picks up the Managed Identity.\n\n4. **For local development** with the same Entra ID path, log in with the Azure CLI:\n\n   ```bash\n   az login\n   # Grant your user the same \"Storage Blob Data Contributor\" role\n   az role assignment create \\\n     --assignee \"<your-email@example.com>\" \\\n     --role \"Storage Blob Data Contributor\" \\\n     --scope \"/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<account>\"\n   ```\n\n   Then set:\n\n   ```env\n   WORKSPACE_BACKEND=azure_blob\n   AZURE_BLOB_ACCOUNT_URL=https://<account>.blob.core.windows.net\n   ```\n\n   `DefaultAzureCredential` will use your `az login` session.\n\n### Authentication methods summary\n\n| Method | Env var | When to use |\n|--------|---------|-------------|\n| **Connection string** | `AZURE_BLOB_CONNECTION_STRING` | Local dev, quick tests |\n| **Entra ID (Managed Identity)** | `AZURE_BLOB_ACCOUNT_URL` | Azure App Service, AKS — no secrets |\n| **Entra ID (az login)** | `AZURE_BLOB_ACCOUNT_URL` | Local dev without secrets |\n| **Entra ID (service principal)** | `AZURE_BLOB_ACCOUNT_URL` + `AZURE_CLIENT_ID` / `AZURE_TENANT_ID` / `AZURE_CLIENT_SECRET` | CI/CD pipelines |\n\nIf both `AZURE_BLOB_CONNECTION_STRING` and `AZURE_BLOB_ACCOUNT_URL` are set, the connection string takes precedence.\n\n### Blob layout\n\nAll workspace data is stored under `<datalake_root>/<sanitized_identity_id>/` inside the container:\n\n```\ndata-formulator/                          ← container\n  workspaces/                             ← datalake_root (default)\n    browser_550e8400.../                  ← anonymous user workspace\n      workspace.yaml\n      sales_data.parquet\n    user_alice_example_com/               ← authenticated user workspace\n      workspace.yaml\n      quarterly_report.parquet\n```\n\n### CLI flags reference\n\n| Flag | Env var | Default | Description |\n|------|---------|---------|-------------|\n| `--workspace-backend` | `WORKSPACE_BACKEND` | `local` | `local` or `azure_blob` |\n| `--azure-blob-connection-string` | `AZURE_BLOB_CONNECTION_STRING` | — | Shared-key connection string |\n| `--azure-blob-account-url` | `AZURE_BLOB_ACCOUNT_URL` | — | Account URL for Entra ID auth |\n| `--azure-blob-container` | `AZURE_BLOB_CONTAINER` | `data-formulator` | Blob container name |\n\n\n## Security Considerations for Production Deployment\n\n⚠️ **IMPORTANT SECURITY WARNING FOR PRODUCTION DEPLOYMENT**\n\nWhen deploying Data Formulator to production, please be aware of the following security considerations:\n\n### Database and Data Storage Security\n\n1. **Workspace and table data**: Table data is stored in per-identity workspaces (e.g. parquet files). DuckDB is used only in-memory per request when needed (e.g. for SQL mode); no persistent DuckDB database files are created by the app.\n\n2. **Identity Management**: \n   - Each user's data is isolated by a namespaced identity key (e.g., `user:alice@example.com` or `browser:550e8400-...`)\n   - Anonymous users get a browser-based UUID stored in localStorage\n   - Authenticated users get their verified user ID from the auth provider\n\n3. **Data persistence**: User data may be written to workspace storage (e.g. parquet) on the server. In multi-tenant deployments, ensure workspace directories are isolated and access-controlled.\n\n### Recommended Security Measures\n\nFor production deployment, consider:\n\n1. **Use `--disable-database` flag** to disable table-connector routes when you do not need external or uploaded table support\n2. **Implement proper authentication, authorization, and other security measures** as needed for your specific use case, for example:\n   - User authentication (OAuth, JWT tokens, etc.)\n   - Role-based access control\n   - API rate limiting\n   - HTTPS/TLS encryption\n   - Input validation and sanitization \n\n### Configuration for Production\n\n```bash\n# For stateless deployment (recommended for public hosting)\npython -m data_formulator.app --disable-database\n```\n\n## Authentication Architecture\n\nData Formulator supports a **hybrid identity system** that supports both anonymous and authenticated users.\n\n### Identity Flow Overview\n\n```\n┌─────────────────────────────────────────────────────────────────────┐\n│                         Frontend Request                             │\n├─────────────────────────────────────────────────────────────────────┤\n│  Headers:                                                            │\n│    X-Identity-Id: \"browser:550e8400-...\" (namespace sent by client) │\n│    Authorization: Bearer <jwt>  (if custom auth implemented)         │\n│    (Azure also adds X-MS-CLIENT-PRINCIPAL-ID automatically)          │\n└─────────────────────────────────────────────────────────────────────┘\n                                │\n                                ▼\n┌─────────────────────────────────────────────────────────────────────┐\n│                    Backend Identity Resolution                       │\n│                       (auth.py: get_identity_id)                    │\n├─────────────────────────────────────────────────────────────────────┤\n│  Priority 1: Azure X-MS-CLIENT-PRINCIPAL-ID → \"user:<azure_id>\"     │\n│  Priority 2: JWT Bearer token (if implemented) → \"user:<jwt_sub>\"    │\n│  Priority 3: X-Identity-Id header → ALWAYS \"browser:<id>\"           │\n│              (client-provided namespace is IGNORED for security)     │\n└─────────────────────────────────────────────────────────────────────┘\n                                │\n                                ▼\n┌─────────────────────────────────────────────────────────────────────┐\n│                      Storage Isolation                               │\n├─────────────────────────────────────────────────────────────────────┤\n│  \"user:alice@example.com\"  → alice's DuckDB file (ONLY via auth)     │\n│  \"browser:550e8400-...\"    → anonymous user's DuckDB file            │\n└─────────────────────────────────────────────────────────────────────┘\n```\n\n### Security Model\n\n**Critical Security Rule:** The backend NEVER trusts the namespace prefix from the client-provided `X-Identity-Id` header. Even if a client sends `X-Identity-Id: \"user:alice@...\"`, the backend strips the prefix and forces `browser:alice@...`. Only verified authentication (Azure headers or JWT) can result in a `user:` prefixed identity.\n\nThe key security principle is **namespaced isolation with forced prefixing**:\n\n| Scenario | X-Identity-Id Sent | Backend Resolution | Storage Key |\n|----------|-------------------|-------------------|-------------|\n| Anonymous user | `browser:550e8400-...` | Strips prefix, forces `browser:` | `browser:550e8400-...` |\n| Azure logged-in user | `browser:550e8400-...` | Uses Azure header (priority 1) | `user:alice@...` |\n| Attacker spoofing | `user:alice@...` (forged) | No valid auth, strips & forces `browser:` | `browser:alice@...` |\n\n**Why this is secure:** An attacker sending `X-Identity-Id: user:alice@...` gets `browser:alice@...` as their storage key, which is completely separate from the real `user:alice@...` that only authenticated Alice can access.\n\n### Implementing Custom Authentication\n\nTo add JWT-based authentication:\n\n1. **Backend** (`tables_routes.py`): Uncomment and configure the JWT verification code in `get_identity_id()`\n2. **Frontend** (`utils.tsx`): Implement `getAuthToken()` to retrieve the JWT from your auth context\n3. **Add JWT secret** to Flask config: `current_app.config['JWT_SECRET']`\n\n### Azure App Service Authentication\n\nWhen deployed to Azure with EasyAuth enabled:\n- Azure automatically adds `X-MS-CLIENT-PRINCIPAL-ID` header to authenticated requests\n- The backend reads this header first (highest priority)\n- No frontend changes needed - Azure handles the auth flow\n\n### Frontend Identity Management\n\nThe frontend (`src/app/identity.ts`) manages identity as follows:\n\n```typescript\n// Identity is always initialized with browser ID\nidentity: { type: 'browser', id: getBrowserId() }\n\n// If user logs in (e.g., via Azure), it's updated to:\nidentity: { type: 'user', id: userInfo.userId }\n\n// All API requests send namespaced identity:\n// X-Identity-Id: \"browser:550e8400-...\" or \"user:alice@...\"\n```\n\nThis ensures:\n1. **Anonymous users**: Work immediately with localStorage-based browser ID\n2. **Logged-in users**: Get their verified user ID from the auth provider\n3. **Cross-tab consistency**: Browser ID is shared via localStorage across all tabs\n\n## Usage\nSee the [Usage section on the README.md page](README.md#usage).\n"
  },
  {
    "path": "LICENSE",
    "content": "    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n"
  },
  {
    "path": "MANIFEST.in",
    "content": "include py-src/data_formulator/dist/*\ninclude py-src/data_formulator/dist/assets/*\nglobal-exclude .DS_Store\nexclude py-src/examples"
  },
  {
    "path": "README.md",
    "content": "<h1 align=\"center\">\n  <img src=\"./public/favicon.ico\" alt=\"Data Formulator icon\" width=\"28\">&nbsp;\n  Data Formulator: AI-powered Data Visualization\n</h1>\n\n\n<p align=\"center\">\n  🪄 Explore data with visualizations, powered by AI agents.\n</p>\n\n<p align=\"center\">\n  <a href=\"https://data-formulator.ai\"><img src=\"https://img.shields.io/badge/🚀_Try_Online_Demo-data--formulator.ai-F59E0B?style=for-the-badge\" alt=\"Try Online Demo\"></a>\n  &nbsp;\n  <a href=\"#get-started\"><img src=\"https://img.shields.io/badge/💻_Install_Locally-uvx_|_pip-3776AB?style=for-the-badge\" alt=\"Install Locally\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://arxiv.org/abs/2408.16119\"><img src=\"https://img.shields.io/badge/Paper-arXiv:2408.16119-b31b1b.svg\" alt=\"arXiv\"></a>&ensp;\n  <a href=\"https://opensource.org/licenses/MIT\"><img src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" alt=\"License: MIT\"></a>&ensp;\n  <a href=\"https://www.youtube.com/watch?v=GfTE2FLyMrs\"><img src=\"https://img.shields.io/badge/YouTube-white?logo=youtube&logoColor=%23FF0000\" alt=\"YouTube\"></a>&ensp;\n  <a href=\"https://github.com/microsoft/data-formulator/actions/workflows/python-build.yml\"><img src=\"https://github.com/microsoft/data-formulator/actions/workflows/python-build.yml/badge.svg\" alt=\"build\"></a>&ensp;\n  <a href=\"https://discord.gg/mYCZMQKYZb\"><img src=\"https://img.shields.io/badge/discord-chat-green?logo=discord\" alt=\"Discord\"></a>\n</p>\n\n<!-- [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/data-formulator?quickstart=1) -->\n<!-- \nhttps://github.com/user-attachments/assets/8ca57b68-4d7a-42cb-bcce-43f8b1681ce2 -->\n\n<kbd>\n  <img src=\"https://github.com/user-attachments/assets/3ffb15aa-93ce-42b8-92cf-aaf321f9a06a\">\n</kbd>\n\n\n## News 🔥🔥🔥\n\n[03-02-2026] **Data Formulator 0.7 (alpha)** — More charts, new experience, enterprise-ready\n-  📊 **30 chart types** with a new semantic chart engine (area, streamgraph, candlestick, pie, radar, maps, and more).\n-  💬 **Hybrid chat + data thread** — chat woven into the exploration timeline with lineage, previews, and reasoning.\n-  🤖 **Unified `DataAgent`** replacing four separate agents, plus new recommendation and insight agents.\n-  🏗️ **Workspace / Data Lake** — persistent, identity-based data management with local and Azure Blob backends.\n-  🔒 **Security hardening** — code signing, sandboxed execution, authentication, and rate limiting.\n-  📦 **UV-first build** — reproducible builds via `uv.lock`; `uv sync` + `uv run data_formulator`.\n-  📝 Detailed writeup on the new architecture coming soon — stay tuned!\n\n## Previous Updates\n\nHere are milestones that lead to the current design:\n- **v0.6** ([Demo](https://github.com/microsoft/data-formulator/releases/tag/0.6)): Real-time insights from live data — connect to URLs and databases with automatic refresh\n- **uv support**: Faster installation with [uv](https://docs.astral.sh/uv/) — `uvx data_formulator` or `uv pip install data_formulator`\n- **v0.5.1** ([Demo](https://github.com/microsoft/data-formulator/pull/200#issue-3635408217)): Community data loaders, US Map & Pie Chart, editable reports, snappier UI\n- **v0.5**: Vibe with your data, in control — agent mode, data extraction, reports\n- **v0.2.2** ([Demo](https://github.com/microsoft/data-formulator/pull/176)): Goal-driven exploration with agent recommendations and performance improvements\n- **v0.2.1.3/4** ([Readme](https://github.com/microsoft/data-formulator/tree/main/py-src/data_formulator/data_loader) | [Demo](https://github.com/microsoft/data-formulator/pull/155)): External data loaders (MySQL, PostgreSQL, MSSQL, Azure Data Explorer, S3, Azure Blob)\n- **v0.2** ([Demos](https://github.com/microsoft/data-formulator/releases/tag/0.2)): Large data support with DuckDB integration\n- **v0.1.7** ([Demos](https://github.com/microsoft/data-formulator/releases/tag/0.1.7)): Dataset anchoring for cleaner workflows\n- **v0.1.6** ([Demo](https://github.com/microsoft/data-formulator/releases/tag/0.1.6)): Multi-table support with automatic joins\n- **Model Support**: OpenAI, Azure, Ollama, Anthropic via [LiteLLM](https://github.com/BerriAI/litellm) ([feedback](https://github.com/microsoft/data-formulator/issues/49))\n- **Python Package**: Easy local installation ([try it](#get-started))\n- **Visualization Challenges**: Test your skills ([challenges](https://github.com/microsoft/data-formulator/issues/53))\n- **Data Extraction**: Parse data from images and text ([demo](https://github.com/microsoft/data-formulator/pull/31#issuecomment-2403652717))\n- **Initial Release**: [Blog](https://www.microsoft.com/en-us/research/blog/data-formulator-exploring-how-ai-can-help-analysts-create-rich-data-visualizations/) | [Video](https://youtu.be/3ndlwt0Wi3c)\n\n<details>\n<summary><b>View detailed update history</b></summary>\n\n- [07-10-2025] Data Formulator 0.2.2: Start with an analysis goal\n  - Some key frontend performance updates. \n  - You can start your exploration with a goal, or, tab and see if the agent can recommend some good exploration ideas for you. [Demo](https://github.com/microsoft/data-formulator/pull/176)\n\n- [05-13-2025] Data Formulator 0.2.1.3/4: External Data Loader \n  - We introduced external data loader class to make import data easier. [Readme](https://github.com/microsoft/data-formulator/tree/main/py-src/data_formulator/data_loader) and [Demo](https://github.com/microsoft/data-formulator/pull/155)\n    - Current data loaders: MySQL, Azure Data Explorer (Kusto), Azure Blob and Amazon S3 (json, parquet, csv).\n    - [07-01-2025] Updated with: Postgresql, mssql.\n  - Call for action [link](https://github.com/microsoft/data-formulator/issues/156):\n    - Users: let us know which data source you'd like to load data from.\n    - Developers: let's build more data loaders.\n\n- [04-23-2025] Data Formulator 0.2: working with *large* data 📦📦📦\n  - Explore large data by:\n    1. Upload large data file to the local database (powered by [DuckDB](https://github.com/duckdb/duckdb)).\n    2. Use drag-and-drop to specify charts, and Data Formulator dynamically fetches data from the database to create visualizations (with ⚡️⚡️⚡️ speeds).\n    3. Work with AI agents: they generate SQL queries to transform the data to create rich visualizations!\n    4. Anchor the result / follow up / create a new branch / join tables; let's dive deeper. \n  - Checkout the demos at [[https://github.com/microsoft/data-formulator/releases/tag/0.2]](https://github.com/microsoft/data-formulator/releases/tag/0.2)\n  - Improved overall system performance, and enjoy the updated derive concept functionality.\n\n- [03-20-2025] Data Formulator 0.1.7: Anchoring ⚓︎\n  - Anchor an intermediate dataset, so that followup data analysis are built on top of the anchored data, not the original one.\n  - Clean a data and work with only the cleaned data; create a subset from the original data or join multiple data, and then go from there. AI agents will be less likely to get confused and work faster. ⚡️⚡️\n  - Check out the demos at [[https://github.com/microsoft/data-formulator/releases/tag/0.1.7]](https://github.com/microsoft/data-formulator/releases/tag/0.1.7)\n  - Don't forget to update Data Formulator to test it out!\n\n- [02-20-2025] Data Formulator 0.1.6 released! \n  - Now supports working with multiple datasets at once! Tell Data Formulator which data tables you would like to use in the encoding shelf, and it will figure out how to join the tables to create a visualization to answer your question. 🪄\n  - Checkout the demo at [[https://github.com/microsoft/data-formulator/releases/tag/0.1.6]](https://github.com/microsoft/data-formulator/releases/tag/0.1.6).\n  - Update your Data Formulator to the latest version to play with the new features.\n\n- [02-12-2025] More models supported now!\n  - Now supports OpenAI, Azure, Ollama, and Anthropic models (and more powered by [LiteLLM](https://github.com/BerriAI/litellm));\n  - Models with strong code generation and instruction following capabilities are recommended (gpt-4o, claude-3-5-sonnet etc.);\n  - You can store API keys in `.env` to avoid typing them every time (copy `.env.template` to `.env` and fill in your keys).\n  - Let us know which models you have good/bad experiences with, and what models you would like to see supported! [[comment here]](https://github.com/microsoft/data-formulator/issues/49)\n\n- [11-07-2024] Minor fun update: data visualization challenges!\n  - We added a few visualization challenges with the sample datasets. Can you complete them all? [[try them out!]](https://github.com/microsoft/data-formulator/issues/53#issue-2641841252)\n  - Comment in the issue when you did, or share your results/questions with others! [[comment here]](https://github.com/microsoft/data-formulator/issues/53)\n\n- [10-11-2024] Data Formulator python package released! \n  - You can now install Data Formulator using Python and run it locally, easily. [[check it out]](#get-started).\n  - Our Codespaces configuration is also updated for fast start up ⚡️. [[try it now!]](https://codespaces.new/microsoft/data-formulator?quickstart=1)\n  - New experimental feature: load an image or a messy text, and ask AI to parse and clean it for you(!). [[demo]](https://github.com/microsoft/data-formulator/pull/31#issuecomment-2403652717)\n  \n- [10-01-2024] Initial release of Data Formulator, check out our [[blog]](https://www.microsoft.com/en-us/research/blog/data-formulator-exploring-how-ai-can-help-analysts-create-rich-data-visualizations/) and [[video]](https://youtu.be/3ndlwt0Wi3c)!\n\n</details>\n\n## Overview\n\n**Data Formulator** is a Microsoft Research prototype for data exploration with visualizations powered by AI agents.\n\nData Formulator enables analysts to iteratively explore and visualize data. Started with data in any format (screenshot, text, csv, or database), users can work with AI agents with a novel blended interface that combines *user interface interactions (UI)* and *natural language (NL) inputs* to communicate their intents, control branching exploration directions, and create reports to share their insights. \n\n## Get Started\n\nPlay with Data Formulator with one of the following options:\n\n- **Option 1: Install via uv (recommended)**\n  \n  [uv](https://docs.astral.sh/uv/) is an extremely fast Python package manager. If you have uv installed, you can run Data Formulator directly without any setup:\n  \n  ```bash\n  # Run data formulator directly (no install needed)\n  uvx data_formulator\n  ```\n\n  Or install it in a project/virtual environment:\n  \n  ```bash\n  # Install data_formulator\n  uv pip install data_formulator\n\n  # Run data formulator\n  python -m data_formulator\n  ```\n\n  Data Formulator will be automatically opened in the browser at [http://localhost:5567](http://localhost:5567).\n\n- **Option 2: Install via pip**\n  \n  Use pip for installation (recommend: install it in a virtual environment).\n  \n  ```bash\n  # install data_formulator\n  pip install data_formulator\n\n  # Run data formulator with this command\n  python -m data_formulator\n  ```\n\n  Data Formulator will be automatically opened in the browser at [http://localhost:5567](http://localhost:5567).\n\n  *you can specify the port number (e.g., 8080) by `python -m data_formulator --port 8080` if the default port is occupied.*\n\n- **Option 3: Codespaces (5 minutes)**\n  \n  You can also run Data Formulator in Codespaces; we have everything pre-configured. For more details, see [CODESPACES.md](CODESPACES.md).\n  \n  [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/microsoft/data-formulator?quickstart=1)\n\n- **Option 4: Working in the developer mode**\n  \n  You can build Data Formulator locally if you prefer full control over your development environment and develop your own version on top. For detailed instructions, refer to [DEVELOPMENT.md](DEVELOPMENT.md).\n\n\n## Using Data Formulator\n\n### Load Data\n\nBesides uploading csv, tsv or xlsx files that contain structured data, you can ask Data Formulator to extract data from screenshots, text blocks or websites, or load data from databases use connectors. Then you are ready to explore.\n\n<img width=\"1920\" alt=\"image\" src=\"https://github.com/user-attachments/assets/e23cdb47-984c-4ce4-a014-8f36e025e393\" />\n\n### Explore Data\n\nThere are four levels to explore data based depending on whether you want more vibe or more control:\n\n- Level 1 (most control): Create charts with UI via drag-and-drop, if all fields to be visualized are already in the data.\n- Level 2: Specify chart designs with natural language + NL. Describe how new fields should be visualized in your chart, AI will automatically transform data to realize the design.\n- Level 3: Get recommendations: Ask AI agents to recommend charts directly from NL descriptions, or even directly ask for exploration ideas.\n- Level 4 (most vibe): In agent mode, provide a high-level goal and let AI agents automatically plan and explore data in multiple turns. Exploration threads will be created automatically.\n\nhttps://github.com/user-attachments/assets/164aff58-9f93-4792-b8ed-9944578fbb72\n\n- Level 5: In practice, leverage all of them to keep up with both vibe and control!\n\n### Create Reports\n\nUse the report builder to compose a report of the style you like, based on selected charts. Then share the reports to others!\n\n<!-- \n### The basics of data visualization\n* Set up model provider, for agentic experience, model with reasoning and strong code generation ablity is recommended.\n* Describe the exploration \n\nhttps://github.com/user-attachments/assets/0fbea012-1d2d-46c3-a923-b1fc5eb5e5b8\n\n\n### Create visualization beyond the initial dataset (powered by 🤖)\n* You can type names of **fields that do not exist in current data** in the encoding shelf:\n    - this tells Data Formulator that you want to create visualizations that require computation or transformation from existing data,\n    - you can optionally provide a natural language prompt to explain and clarify your intent (not necessary when field names are self-explanatory).\n* Click the **Formulate** button.\n    - Data Formulator will transform data and instantiate the visualization based on the encoding and prompt.\n* Inspect the data, chart and code.\n* To create a new chart based on existing ones, follow up in natural language:\n    - provide a follow up prompt (e.g., *``show only top 5!''*),\n    - you may also update visual encodings for the new chart.\n\nhttps://github.com/user-attachments/assets/160c69d2-f42d-435c-9ff3-b1229b5bddba\n\nhttps://github.com/user-attachments/assets/c93b3e84-8ca8-49ae-80ea-f91ceef34acb\n\nRepeat this process as needed to explore and understand your data. Your explorations are trackable in the **Data Threads** panel.  -->\n\n## Developers' Guide\n\nFollow the [developers' instructions](DEVELOPMENT.md) to build your new data analysis tools on top of Data Formulator.\n\nHelp wanted:\n\n* Add more database connectors (https://github.com/microsoft/data-formulator/issues/156)\n* Scaling up messy data extractor: more document types and larger files.\n* Adding more chart templates (e.g., maps).\n* other ideas?\n\n## Research Papers\n* [Data Formulator 2: Iteratively Creating Rich Visualizations with AI](https://arxiv.org/abs/2408.16119)\n\n```\n@article{wang2024dataformulator2iteratively,\n      title={Data Formulator 2: Iteratively Creating Rich Visualizations with AI}, \n      author={Chenglong Wang and Bongshin Lee and Steven Drucker and Dan Marshall and Jianfeng Gao},\n      year={2024},\n      booktitle={ArXiv preprint arXiv:2408.16119},\n}\n```\n\n* [Data Formulator: AI-powered Concept-driven Visualization Authoring](https://arxiv.org/abs/2309.10094)\n\n```\n@article{wang2023data,\n  title={Data Formulator: AI-powered Concept-driven Visualization Authoring},\n  author={Wang, Chenglong and Thompson, John and Lee, Bongshin},\n  journal={IEEE Transactions on Visualization and Computer Graphics},\n  year={2023},\n  publisher={IEEE}\n}\n```\n\n\n## Contributing\n\nThis project welcomes contributions and suggestions. Most contributions require you to\nagree to a Contributor License Agreement (CLA) declaring that you have the right to,\nand actually do, grant us the rights to use your contribution. For details, visit\nhttps://cla.microsoft.com.\n\nWhen you submit a pull request, a CLA-bot will automatically determine whether you need\nto provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the\ninstructions provided by the bot. You will only need to do this once across all repositories using our CLA.\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).\nFor more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)\nor contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.\n\n## Trademarks\n\nThis project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft \ntrademarks or logos is subject to and must follow \n[Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\nAny use of third-party trademarks or logos are subject to those third-party's policies.\n"
  },
  {
    "path": "SECURITY.md",
    "content": "<!-- BEGIN MICROSOFT SECURITY.MD V0.0.8 BLOCK -->\n\n## Security\n\nMicrosoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).\n\nIf you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.\n\n## Reporting Security Issues\n\n**Please do not report security vulnerabilities through public GitHub issues.**\n\nInstead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).\n\nIf you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com).  If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).\n\nYou should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). \n\nPlease include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:\n\n  * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)\n  * Full paths of source file(s) related to the manifestation of the issue\n  * The location of the affected source code (tag/branch/commit or direct URL)\n  * Any special configuration required to reproduce the issue\n  * Step-by-step instructions to reproduce the issue\n  * Proof-of-concept or exploit code (if possible)\n  * Impact of the issue, including how an attacker might exploit the issue\n\nThis information will help us triage your report more quickly.\n\nIf you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.\n\n## Preferred Languages\n\nWe prefer all communications to be in English.\n\n## Policy\n\nMicrosoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).\n\n<!-- END MICROSOFT SECURITY.MD BLOCK -->\n"
  },
  {
    "path": "SUPPORT.md",
    "content": "# Support\r\n\r\n## How to file issues and get help  \r\n\r\nThis project uses GitHub Issues to track bugs and feature requests. Please search the existing \r\nissues before filing new issues to avoid duplicates.  For new issues, file your bug or \r\nfeature request as a new Issue.\r\n\r\n## Microsoft Support Policy  \r\n\r\nSupport for this project is limited to the resources listed above.\r\n"
  },
  {
    "path": "embed/README.md",
    "content": "# Embed Data Formulator\n\nFirst you'll need to build the bundle:\n```\nyarn build\n```\n\nThis puts the complete js file in the `dist` folder.\n\n## Test bundle\n\nNext you can test to see the complete Data Formulator app by opening `/embed/index.html` in your browser. You can do this by double-clicking in your file explorer (this would use the `file://` protocol). \n\nTo test cross-frame messaging, launch `postMessageTest.html` which hosts the app in an iframe, and has buttons to send commands such as `load data`.\n\n## Use in Fabric Notebook\n\nYou willl need to enable access to your `dist` from the cloud. There are 2 ways to do this:\n* Publish the `dist` (e.g. pip, npm, or other)\n* Create a tunnel to your localhost\n\n### Tunnel to localhost\nOne way is to install [local-web-server](https://www.npmjs.com/package/local-web-server). This will serve a local folder as a website on http://localhost:8000. Next, you can set up a tunnel such as [ngrok](https://ngrok.com/download) which can provide a cloud-accesible url proxy to your local server.\n\nCopy the python function in a notebook cell:\n```py\ndef dfviz(df, tableName, serverUrl):\n    # df is a PySpark DataFrame\n\n    import json\n    from datetime import date, datetime\n\n    # Custom function to convert datetime objects to string\n    def json_serial(obj):\n        if isinstance(obj, (datetime, date)):\n            return obj.isoformat()\n        raise TypeError (\"Type %s not serializable\" % type(obj))\n\n    # Convert DataFrame rows to dictionaries and collect them into a list\n    data = [row.asDict() for row in df.collect()]\n\n    # Convert list of dictionaries to a single JSON array using the custom function\n    json_data = json.dumps(data, default=json_serial)\n\n    displayHTML(f\"\"\"<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<script>\n    const table = {json_data};\n    const embedPromise = new Promise((resolve, reject) => {{\n        const embedIframe = document.createElement('iframe');\n        embedIframe.style.height = '700px';\n        embedIframe.style.width = 'calc(100% - 4px)';\n        document.body.appendChild(embedIframe);\n        const closeScriptTag = '</'+'script>';\n        const htmlContent = `<!DOCTYPE html>\n<html><body>\n    <div id=\"root\"></div>\n    <script src=\"{serverUrl}/DataFormulator.js\" defer onload=\"parent.frameLoaded()\" onerror=\"parent.frameError()\">${{closeScriptTag}}\n</body></html>`;\n\n        // Define global functions for onload and onerror events of the script\n        window.frameLoaded = () => resolve(embedIframe);\n        window.frameError = () => reject(new Error('Script failed to load'));\n\n        // Write the HTML content to the iframe\n        embedIframe.contentWindow.document.open();\n        embedIframe.contentWindow.document.write(htmlContent);\n        embedIframe.contentWindow.document.close();\n    }});\n    embedPromise.then((embedIframe) => {{\n        embedIframe.contentWindow.postMessage({{ actionName: 'setConfig', actionParams: {{ serverUrl: '{serverUrl}', popupConfig: {{ allowPopup: true, jsUrl: '{serverUrl}/DataFormulator.js' }} }} }}, '*');\n        embedIframe.contentWindow.postMessage({{ actionName: 'loadData', actionParams: {{ tableName: '{tableName}', table }} }}, '*');\n    }});\n</script>\n\"\"\"\n)\n```\n\nGet a dataframe and pass it to the `dfviz` function:\n```py\ndf = spark.sql(\"SELECT * FROM Sample_lakehouse_475.publicholidays LIMIT 100\")\ndisplay(df)\ndfviz(df, 'Holidays', 'https://<your_tunnel_url>')\n```\n\n"
  },
  {
    "path": "embed/dynamic.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Data Formulator embedded dynamically</title>\n</head>\n\n<body>\n    <script>\n        const table = [\n            {\n                \"manufacturer\": \"Toyota\",\n                \"model\": \"Corolla\",\n                \"year\": 2019,\n                \"price\": 20000\n            },\n            {\n                \"manufacturer\": \"Toyota\",\n                \"model\": \"Camry\",\n                \"year\": 2019,\n                \"price\": 25000\n            },\n            {\n                \"manufacturer\": \"Toyota\",\n                \"model\": \"RAV4\",\n                \"year\": 2019,\n                \"price\": 30000\n            },\n            {\n                \"manufacturer\": \"Toyota\",\n                \"model\": \"Highlander\",\n                \"year\": 2019,\n                \"price\": 35000\n            },\n            {\n                \"manufacturer\": \"Toyota\",\n                \"model\": \"4Runner\",\n                \"year\": 2019,\n                \"price\": 40000\n            },\n            {\n                \"manufacturer\": \"Ford\",\n                \"model\": \"Fusion\",\n                \"year\": 2019,\n                \"price\": 20000\n            },\n            {\n                \"manufacturer\": \"Ford\",\n                \"model\": \"Focus\",\n                \"year\": 2019,\n                \"price\": 25000\n            },\n            {\n                \"manufacturer\": \"Ford\",\n                \"model\": \"Escape\",\n                \"year\": 2019,\n                \"price\": 30000\n            },\n            {\n                \"manufacturer\": \"Ford\",\n                \"model\": \"Explorer\",\n                \"year\": 2019,\n                \"price\": 35000\n            },\n            {\n                \"manufacturer\": \"Ford\",\n                \"model\": \"Expedition\",\n                \"year\": 2019,\n                \"price\": 40000\n            }\n        ];\n\n        const embedPromise = new Promise((resolve, reject) => {\n            const embedIframe = document.createElement('iframe');\n            embedIframe.style.height = '700px';\n            embedIframe.style.width = 'calc(100% - 4px)';\n            document.body.appendChild(embedIframe);\n\n            // Prepare the HTML content with the script tag.\n            const closeScriptTag = '</'+'script>';\n            const htmlContent = `\n<!DOCTYPE html>\n<html>\n<body>\n    <div id=\"root\"></div>\n    <script src=\"../dist/DataFormulator.js\" defer onload=\"console.log('my loc'+document.location);parent.frameLoaded()\" onerror=\"parent.frameError()\">${closeScriptTag}\n</body>\n</html>\n`;\n\n            // Define global functions for onload and onerror events of the script\n            window.frameLoaded = () => resolve(embedIframe);\n            window.frameError = () => reject(new Error('Script failed to load'));\n\n            // Write the HTML content to the iframe\n            embedIframe.contentWindow.document.open();\n            embedIframe.contentWindow.document.write(htmlContent);\n            embedIframe.contentWindow.document.close();\n        });\n        embedPromise.then((embedIframe) => {\n            embedIframe.contentWindow.postMessage({ actionName: 'setConfig', actionParams: { serverUrl: 'http://localhost:5567' } }, '*');\n            embedIframe.contentWindow.postMessage({ actionName: 'loadData', actionParams: { tableName: 'FabricTable', table } }, '*');\n        });\n\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "embed/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Data Formulator embedded</title>\n</head>\n<body>\n    <div id=\"root\"></div>\n    <script src=\"../dist/DataFormulator.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "embed/postMessageTest.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Data Formulator embedded iframe</title>\n</head>\n\n<body>\n    <iframe id=\"df\" src=\"./index.html\" style=\"width:1500px;height:1000px\"></iframe>\n    <div>\n        <button onclick=\"postMessageToIframe()\">Post Load Data message to iframe</button>\n    </div>\n    <script>\n        function postMessageToIframe() {\n            var iframe = document.getElementById('df');\n\n            //create 10 rows of fake data objects like cars dataset. make sure not every manufacturer od Toyota\n            const data = [\n                {\n                    \"manufacturer\": \"Toyota\",\n                    \"model\": \"Corolla\",\n                    \"year\": 2019,\n                    \"price\": 20000\n                },\n                {\n                    \"manufacturer\": \"Toyota\",\n                    \"model\": \"Camry\",\n                    \"year\": 2019,\n                    \"price\": 25000\n                },\n                {\n                    \"manufacturer\": \"Toyota\",\n                    \"model\": \"RAV4\",\n                    \"year\": 2019,\n                    \"price\": 30000\n                },\n                {\n                    \"manufacturer\": \"Toyota\",\n                    \"model\": \"Highlander\",\n                    \"year\": 2019,\n                    \"price\": 35000\n                },\n                {\n                    \"manufacturer\": \"Toyota\",\n                    \"model\": \"4Runner\",\n                    \"year\": 2019,\n                    \"price\": 40000\n                },\n                {\n                    \"manufacturer\": \"Ford\",\n                    \"model\": \"Fusion\",\n                    \"year\": 2019,\n                    \"price\": 20000\n                },\n                {\n                    \"manufacturer\": \"Ford\",\n                    \"model\": \"Focus\",\n                    \"year\": 2019,\n                    \"price\": 25000\n                },\n                {\n                    \"manufacturer\": \"Ford\",\n                    \"model\": \"Escape\",\n                    \"year\": 2019,\n                    \"price\": 30000\n                },\n                {\n                    \"manufacturer\": \"Ford\",\n                    \"model\": \"Explorer\",\n                    \"year\": 2019,\n                    \"price\": 35000\n                },\n                {\n                    \"manufacturer\": \"Ford\",\n                    \"model\": \"Expedition\",\n                    \"year\": 2019,\n                    \"price\": 40000\n                }\n            ];\n\n            //create a message object to send to the iframe\n            /* schema is:\n            interface LoadDataAction extends Action {\n                actionName: \"loadData\";\n                actionParams: {\n                    tableName: string;\n                    table: object[];\n                }\n            }\n            */\n\n            const configMessage = {\n                actionName: 'setConfig',\n                actionParams: {\n                    serverUrl: 'http://localhost:5567/',\n                }\n            };\n\n            iframe.contentWindow.postMessage(configMessage, '*');\n\n            const dataMessage = {\n                actionName: 'loadData',\n                actionParams: {\n                    tableName: 'cars',\n                    table: data,\n                }\n            };\n\n            iframe.contentWindow.postMessage(dataMessage, '*');\n        }\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "eslint.config.js",
    "content": "import globals from \"globals\";\nimport pluginJs from \"@eslint/js\";\nimport tseslint from \"typescript-eslint\";\nimport pluginReact from \"eslint-plugin-react\";\nimport jsxA11y from \"eslint-plugin-jsx-a11y\";\n\n/** @type {import('eslint').Linter.Config[]} */\nexport default [\n  {\n    languageOptions: { globals: globals.browser },\n    settings: {\n      react: {\n        version: \"detect\", // Automatically detect the React version\n      },\n    },\n  },\n  pluginJs.configs.recommended,\n  ...tseslint.configs.recommended,\n  pluginReact.configs.flat.recommended,\n  {\n    plugins: {\n      'jsx-a11y': jsxA11y,\n    },\n    rules: {\n      \"@typescript-eslint/ban-ts-comment\": \"off\",\n      \"@typescript-eslint/no-non-null-asserted-optional-chain\": \"off\",\n      \"@typescript-eslint/no-empty-object-type\": \"off\",\n      \"@typescript-eslint/no-explicit-any\": \"off\",\n      \"@typescript-eslint/no-unused-expressions\": \"off\",\n      \"@typescript-eslint/no-unused-vars\": \"off\",\n      \"no-empty-pattern\": \"off\",\n      \"no-empty\": \"off\",\n      \"no-unsafe-optional-chaining\": \"off\",\n      \"no-useless-escape\": \"off\",\n      \"prefer-const\": \"off\",\n      \"react/no-unescaped-entities\": \"off\",\n    }\n  }\n];"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta\n      name=\"Data Formulator\"\n      content=\"Concept-driven Visualization Authoring\"\n    />\n    \n    <!-- Preload critical images for faster initial load -->\n    <link rel=\"preload\" as=\"image\" href=\"/gas_prices-thumbnail.webp\" type=\"image/webp\" />\n    <link rel=\"preload\" as=\"image\" href=\"/global_energy-thumbnail.webp\" type=\"image/webp\" />\n    <link rel=\"preload\" as=\"image\" href=\"/movies-thumbnail.webp\" type=\"image/webp\" />\n    <link rel=\"preload\" as=\"image\" href=\"/unemployment-thumbnail.webp\" type=\"image/webp\" />\n    \n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>Data Formulator</title>\n  </head>\n  <body>\n    <noscript>Run this app with javascript</noscript>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/index.tsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "local_server.bat",
    "content": ":: Copyright (c) Microsoft Corporation.\n:: Licensed under the MIT License.\n\n@echo off\n:: Set HTTP proxy environment variables only (Flask doesn't support SOCKS5)\n:: set http_proxy=http://127.0.0.1:7890\n:: set https_proxy=http://127.0.0.1:7890\n\nset FLASK_RUN_PORT=5567\n\n:: Use uv if available, otherwise fall back to python\nwhere uv >nul 2>nul\nif %ERRORLEVEL% EQU 0 (\n    uv run data_formulator --port %FLASK_RUN_PORT% --dev\n) else (\n    python -m data_formulator.app --port %FLASK_RUN_PORT% --dev\n)\n"
  },
  {
    "path": "local_server.sh",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n# Set HTTP proxy environment variables only (Flask doesn't support SOCKS5)\n# export http_proxy=http://127.0.0.1:7890\n# export https_proxy=http://127.0.0.1:7890\n\nexport FLASK_RUN_PORT=5567\n\n# Use uv if available, otherwise fall back to python\nif command -v uv &> /dev/null; then\n    uv run data_formulator --port ${FLASK_RUN_PORT} --dev\nelse\n    python -m data_formulator.app --port ${FLASK_RUN_PORT} --dev\nfi"
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"data-formulator\",\n    \"type\": \"module\",\n    \"version\": \"0.1.0\",\n    \"private\": true,\n    \"dependencies\": {\n        \"@emotion/react\": \"^11.14.0\",\n        \"@emotion/styled\": \"^11.14.0\",\n        \"@fontsource/roboto\": \"^4.5.5\",\n        \"@mui/icons-material\": \"^7.1.1\",\n        \"@mui/lab\": \"^7.0.1-beta.18\",\n        \"@mui/material\": \"^7.1.1\",\n        \"@reduxjs/toolkit\": \"^1.8.6\",\n        \"@types/dompurify\": \"^3.0.5\",\n        \"@types/validator\": \"^13.12.2\",\n        \"allotment\": \"^1.20.4\",\n        \"canvas\": \"^3.2.1\",\n        \"chart.js\": \"^4.5.1\",\n        \"d3\": \"^7.3.0\",\n        \"dompurify\": \"^3.2.4\",\n        \"echarts\": \"^6.0.0\",\n        \"exceljs\": \"^4.4.0\",\n        \"gofish-graphics\": \"^0.0.22\",\n        \"html2canvas\": \"^1.4.1\",\n        \"js-yaml\": \"^4.1.1\",\n        \"katex\": \"^0.16.22\",\n        \"localforage\": \"^1.10.0\",\n        \"lodash\": \"^4.17.23\",\n        \"markdown-to-jsx\": \"^7.4.0\",\n        \"mui-markdown\": \"^2.0.3\",\n        \"prettier\": \"^2.8.3\",\n        \"prism-react-renderer\": \"^1.3.5\",\n        \"prismjs\": \"^1.30.0\",\n        \"prop-types\": \"^15.8.1\",\n        \"react\": \"^18.2.0\",\n        \"react-animate-height\": \"^3.0.4\",\n        \"react-animate-on-change\": \"^2.2.0\",\n        \"react-dnd\": \"^16.0.1\",\n        \"react-dnd-html5-backend\": \"^16.0.1\",\n        \"react-dom\": \"^18.2.0\",\n        \"react-katex\": \"^3.1.0\",\n        \"react-redux\": \"^8.0.4\",\n        \"react-router-dom\": \"^6.22.0\",\n        \"react-selectable-fast\": \"^3.4.0\",\n        \"react-simple-code-editor\": \"^0.13.1\",\n        \"react-vega\": \"^7.6.0\",\n        \"react-virtuoso\": \"^4.3.10\",\n        \"redux\": \"^4.2.0\",\n        \"redux-persist\": \"^6.0.0\",\n        \"typescript\": \"^4.9.5\",\n        \"validator\": \"^13.15.20\",\n        \"vega\": \"^6.2.0\",\n        \"vega-embed\": \"^6.21.0\",\n        \"vega-lite\": \"6.4.1\",\n        \"vm-browserify\": \"^1.1.2\"\n    },\n    \"scripts\": {\n        \"lint\": \"eslint -c eslint.config.js src/**/*.{ts,tsx} --fix\",\n        \"start\": \"vite\",\n        \"build\": \"vite build\"\n    },\n    \"browserslist\": {\n        \"production\": [\n            \">0.2%\",\n            \"not dead\",\n            \"not op_mini all\"\n        ],\n        \"development\": [\n            \"last 1 chrome version\",\n            \"last 1 firefox version\",\n            \"last 1 safari version\"\n        ]\n    },\n    \"devDependencies\": {\n        \"@eslint/js\": \"^9.15.0\",\n        \"@types/d3\": \"^7.4.3\",\n        \"@types/lodash\": \"^4.17.7\",\n        \"@types/node\": \"^20.14.10\",\n        \"@types/prismjs\": \"^1.26.0\",\n        \"@types/react\": \"^18.3.3\",\n        \"@types/react-dom\": \"^18.3.0\",\n        \"@types/react-katex\": \"^3.0.4\",\n        \"@typescript-eslint/eslint-plugin\": \"^8.16.0\",\n        \"@typescript-eslint/parser\": \"^8.16.0\",\n        \"@vitejs/plugin-react-swc\": \"^3.7.0\",\n        \"eslint\": \"^9.15.0\",\n        \"eslint-plugin-jsx-a11y\": \"^6.10.2\",\n        \"eslint-plugin-react\": \"^7.37.2\",\n        \"globals\": \"^15.12.0\",\n        \"sass\": \"^1.77.6\",\n        \"typescript-eslint\": \"^8.16.0\",\n        \"vite\": \"^5.4.21\"\n    }\n}\n"
  },
  {
    "path": "public/df_gas_prices.json",
    "content": "{\"tables\":[{\"id\":\"weekly_gas_prices\",\"displayId\":\"gas-prices\",\"names\":[\"date\",\"fuel\",\"grade\",\"formulation\",\"price\"],\"metadata\":{\"date\":{\"type\":\"date\",\"semanticType\":\"Date\"},\"fuel\":{\"type\":\"string\",\"semanticType\":\"String\"},\"grade\":{\"type\":\"string\",\"semanticType\":\"String\",\"levels\":[\"all\",\"regular\",\"midgrade\",\"premium\",\"low_sulfur\",\"ultra_low_sulfur\"]},\"formulation\":{\"type\":\"string\",\"semanticType\":\"String\",\"levels\":[\"all\",\"conventional\",\"reformulated\",\"NA\"]},\"price\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"rows\":[{\"date\":\"1990-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.191},{\"date\":\"1990-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.191},{\"date\":\"1990-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.245},{\"date\":\"1990-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.245},{\"date\":\"1990-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.242},{\"date\":\"1990-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.242},{\"date\":\"1990-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.252},{\"date\":\"1990-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.252},{\"date\":\"1990-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.266},{\"date\":\"1990-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.266},{\"date\":\"1990-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.272},{\"date\":\"1990-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.272},{\"date\":\"1990-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.321},{\"date\":\"1990-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.321},{\"date\":\"1990-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.333},{\"date\":\"1990-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.333},{\"date\":\"1990-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.339},{\"date\":\"1990-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.339},{\"date\":\"1990-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.345},{\"date\":\"1990-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.345},{\"date\":\"1990-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.339},{\"date\":\"1990-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.339},{\"date\":\"1990-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.334},{\"date\":\"1990-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.334},{\"date\":\"1990-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.328},{\"date\":\"1990-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.328},{\"date\":\"1990-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.323},{\"date\":\"1990-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.323},{\"date\":\"1990-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.311},{\"date\":\"1990-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.311},{\"date\":\"1990-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.341},{\"date\":\"1990-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.341},{\"date\":\"1991-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.192},{\"date\":\"1991-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.192},{\"date\":\"1991-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.168},{\"date\":\"1991-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.168},{\"date\":\"1991-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.139},{\"date\":\"1991-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.139},{\"date\":\"1991-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.106},{\"date\":\"1991-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.106},{\"date\":\"1991-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.078},{\"date\":\"1991-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.078},{\"date\":\"1991-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.054},{\"date\":\"1991-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.054},{\"date\":\"1991-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.025},{\"date\":\"1991-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.025},{\"date\":\"1991-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.045},{\"date\":\"1991-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.045},{\"date\":\"1991-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.043},{\"date\":\"1991-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.043},{\"date\":\"1991-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.047},{\"date\":\"1991-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.047},{\"date\":\"1991-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.052},{\"date\":\"1991-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.052},{\"date\":\"1991-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.066},{\"date\":\"1991-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.066},{\"date\":\"1991-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.069},{\"date\":\"1991-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.069},{\"date\":\"1991-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.09},{\"date\":\"1991-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.09},{\"date\":\"1991-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.104},{\"date\":\"1991-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.104},{\"date\":\"1991-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.113},{\"date\":\"1991-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.113},{\"date\":\"1991-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.121},{\"date\":\"1991-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.121},{\"date\":\"1991-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.129},{\"date\":\"1991-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.129},{\"date\":\"1991-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.14},{\"date\":\"1991-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.14},{\"date\":\"1991-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.138},{\"date\":\"1991-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.138},{\"date\":\"1991-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.135},{\"date\":\"1991-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.135},{\"date\":\"1991-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.126},{\"date\":\"1991-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.126},{\"date\":\"1991-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.114},{\"date\":\"1991-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.114},{\"date\":\"1991-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.104},{\"date\":\"1991-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.104},{\"date\":\"1991-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.098},{\"date\":\"1991-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.098},{\"date\":\"1991-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.094},{\"date\":\"1991-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.094},{\"date\":\"1991-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.091},{\"date\":\"1991-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.091},{\"date\":\"1991-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.091},{\"date\":\"1991-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.091},{\"date\":\"1991-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.099},{\"date\":\"1991-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.099},{\"date\":\"1991-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.112},{\"date\":\"1991-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.112},{\"date\":\"1991-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.124},{\"date\":\"1991-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.124},{\"date\":\"1991-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.124},{\"date\":\"1991-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.124},{\"date\":\"1991-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.127},{\"date\":\"1991-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.127},{\"date\":\"1991-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.12},{\"date\":\"1991-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.12},{\"date\":\"1991-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.11},{\"date\":\"1991-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.11},{\"date\":\"1991-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.097},{\"date\":\"1991-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.097},{\"date\":\"1991-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.092},{\"date\":\"1991-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.092},{\"date\":\"1991-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.089},{\"date\":\"1991-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.089},{\"date\":\"1991-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.084},{\"date\":\"1991-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.084},{\"date\":\"1991-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.088},{\"date\":\"1991-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.088},{\"date\":\"1991-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.091},{\"date\":\"1991-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.091},{\"date\":\"1991-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.091},{\"date\":\"1991-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.091},{\"date\":\"1991-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.102},{\"date\":\"1991-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.102},{\"date\":\"1991-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.104},{\"date\":\"1991-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.104},{\"date\":\"1991-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.099},{\"date\":\"1991-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.099},{\"date\":\"1991-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.099},{\"date\":\"1991-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.099},{\"date\":\"1991-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.091},{\"date\":\"1991-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.091},{\"date\":\"1991-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.075},{\"date\":\"1991-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.075},{\"date\":\"1991-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.063},{\"date\":\"1991-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.063},{\"date\":\"1991-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.053},{\"date\":\"1991-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.053},{\"date\":\"1992-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.042},{\"date\":\"1992-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.042},{\"date\":\"1992-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.026},{\"date\":\"1992-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.026},{\"date\":\"1992-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.014},{\"date\":\"1992-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.014},{\"date\":\"1992-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.006},{\"date\":\"1992-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.006},{\"date\":\"1992-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.995},{\"date\":\"1992-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.995},{\"date\":\"1992-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.004},{\"date\":\"1992-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.004},{\"date\":\"1992-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.011},{\"date\":\"1992-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.011},{\"date\":\"1992-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.014},{\"date\":\"1992-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.014},{\"date\":\"1992-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.012},{\"date\":\"1992-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.012},{\"date\":\"1992-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.013},{\"date\":\"1992-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.013},{\"date\":\"1992-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.01},{\"date\":\"1992-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.01},{\"date\":\"1992-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.015},{\"date\":\"1992-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.015},{\"date\":\"1992-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.013},{\"date\":\"1992-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.013},{\"date\":\"1992-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.026},{\"date\":\"1992-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.026},{\"date\":\"1992-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.051},{\"date\":\"1992-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.051},{\"date\":\"1992-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.058},{\"date\":\"1992-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.058},{\"date\":\"1992-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.072},{\"date\":\"1992-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.072},{\"date\":\"1992-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.089},{\"date\":\"1992-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.089},{\"date\":\"1992-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.102},{\"date\":\"1992-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.102},{\"date\":\"1992-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.118},{\"date\":\"1992-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.118},{\"date\":\"1992-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.12},{\"date\":\"1992-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.12},{\"date\":\"1992-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.128},{\"date\":\"1992-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.128},{\"date\":\"1992-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.143},{\"date\":\"1992-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.143},{\"date\":\"1992-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.151},{\"date\":\"1992-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.151},{\"date\":\"1992-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.153},{\"date\":\"1992-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.153},{\"date\":\"1992-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.149},{\"date\":\"1992-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.149},{\"date\":\"1992-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.147},{\"date\":\"1992-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.147},{\"date\":\"1992-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.139},{\"date\":\"1992-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.139},{\"date\":\"1992-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.132},{\"date\":\"1992-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.132},{\"date\":\"1992-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.128},{\"date\":\"1992-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.128},{\"date\":\"1992-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.126},{\"date\":\"1992-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.126},{\"date\":\"1992-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.123},{\"date\":\"1992-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.123},{\"date\":\"1992-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.116},{\"date\":\"1992-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.116},{\"date\":\"1992-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.123},{\"date\":\"1992-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.123},{\"date\":\"1992-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.121},{\"date\":\"1992-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.121},{\"date\":\"1992-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.121},{\"date\":\"1992-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.121},{\"date\":\"1992-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.124},{\"date\":\"1992-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.124},{\"date\":\"1992-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.123},{\"date\":\"1992-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.123},{\"date\":\"1992-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.118},{\"date\":\"1992-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.118},{\"date\":\"1992-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.115},{\"date\":\"1992-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.115},{\"date\":\"1992-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.115},{\"date\":\"1992-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.115},{\"date\":\"1992-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.113},{\"date\":\"1992-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.113},{\"date\":\"1992-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.113},{\"date\":\"1992-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.113},{\"date\":\"1992-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.12},{\"date\":\"1992-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.12},{\"date\":\"1992-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.12},{\"date\":\"1992-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.12},{\"date\":\"1992-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.112},{\"date\":\"1992-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.112},{\"date\":\"1992-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.106},{\"date\":\"1992-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.106},{\"date\":\"1992-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.098},{\"date\":\"1992-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.098},{\"date\":\"1992-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.089},{\"date\":\"1992-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.089},{\"date\":\"1992-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.078},{\"date\":\"1992-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.078},{\"date\":\"1992-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.074},{\"date\":\"1992-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.074},{\"date\":\"1992-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.069},{\"date\":\"1992-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.069},{\"date\":\"1993-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.065},{\"date\":\"1993-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.065},{\"date\":\"1993-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.066},{\"date\":\"1993-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.066},{\"date\":\"1993-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.061},{\"date\":\"1993-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.061},{\"date\":\"1993-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.055},{\"date\":\"1993-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.055},{\"date\":\"1993-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.055},{\"date\":\"1993-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.055},{\"date\":\"1993-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.062},{\"date\":\"1993-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.062},{\"date\":\"1993-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.053},{\"date\":\"1993-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.053},{\"date\":\"1993-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.047},{\"date\":\"1993-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.047},{\"date\":\"1993-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.042},{\"date\":\"1993-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.042},{\"date\":\"1993-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.048},{\"date\":\"1993-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.048},{\"date\":\"1993-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.058},{\"date\":\"1993-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.058},{\"date\":\"1993-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.056},{\"date\":\"1993-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.056},{\"date\":\"1993-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.057},{\"date\":\"1993-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.057},{\"date\":\"1993-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.068},{\"date\":\"1993-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.068},{\"date\":\"1993-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.068},{\"date\":\"1993-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.079},{\"date\":\"1993-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.079},{\"date\":\"1993-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.079},{\"date\":\"1993-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.079},{\"date\":\"1993-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.079},{\"date\":\"1993-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.079},{\"date\":\"1993-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.086},{\"date\":\"1993-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.086},{\"date\":\"1993-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.086},{\"date\":\"1993-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.086},{\"date\":\"1993-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.086},{\"date\":\"1993-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.086},{\"date\":\"1993-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.097},{\"date\":\"1993-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.097},{\"date\":\"1993-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.097},{\"date\":\"1993-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.106},{\"date\":\"1993-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.106},{\"date\":\"1993-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.106},{\"date\":\"1993-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.106},{\"date\":\"1993-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.106},{\"date\":\"1993-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.106},{\"date\":\"1993-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.107},{\"date\":\"1993-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.107},{\"date\":\"1993-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.107},{\"date\":\"1993-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.104},{\"date\":\"1993-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.104},{\"date\":\"1993-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.104},{\"date\":\"1993-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.101},{\"date\":\"1993-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.101},{\"date\":\"1993-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.101},{\"date\":\"1993-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.095},{\"date\":\"1993-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.095},{\"date\":\"1993-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.095},{\"date\":\"1993-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.089},{\"date\":\"1993-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.089},{\"date\":\"1993-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.089},{\"date\":\"1993-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.086},{\"date\":\"1993-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.086},{\"date\":\"1993-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.086},{\"date\":\"1993-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.081},{\"date\":\"1993-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.081},{\"date\":\"1993-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.081},{\"date\":\"1993-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.075},{\"date\":\"1993-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.075},{\"date\":\"1993-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.075},{\"date\":\"1993-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.069},{\"date\":\"1993-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.069},{\"date\":\"1993-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.069},{\"date\":\"1993-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.062},{\"date\":\"1993-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.062},{\"date\":\"1993-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.062},{\"date\":\"1993-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.06},{\"date\":\"1993-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.06},{\"date\":\"1993-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.06},{\"date\":\"1993-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.059},{\"date\":\"1993-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.059},{\"date\":\"1993-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.059},{\"date\":\"1993-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.065},{\"date\":\"1993-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.065},{\"date\":\"1993-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.065},{\"date\":\"1993-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.062},{\"date\":\"1993-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.062},{\"date\":\"1993-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.062},{\"date\":\"1993-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.055},{\"date\":\"1993-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.055},{\"date\":\"1993-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.055},{\"date\":\"1993-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.051},{\"date\":\"1993-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.051},{\"date\":\"1993-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.051},{\"date\":\"1993-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.045},{\"date\":\"1993-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.045},{\"date\":\"1993-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.045},{\"date\":\"1993-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.047},{\"date\":\"1993-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.047},{\"date\":\"1993-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.047},{\"date\":\"1993-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.092},{\"date\":\"1993-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.092},{\"date\":\"1993-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.092},{\"date\":\"1993-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.09},{\"date\":\"1993-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.09},{\"date\":\"1993-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.09},{\"date\":\"1993-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.093},{\"date\":\"1993-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.093},{\"date\":\"1993-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.093},{\"date\":\"1993-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.092},{\"date\":\"1993-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.092},{\"date\":\"1993-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.092},{\"date\":\"1993-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.084},{\"date\":\"1993-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.084},{\"date\":\"1993-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.084},{\"date\":\"1993-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.075},{\"date\":\"1993-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.075},{\"date\":\"1993-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.075},{\"date\":\"1993-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.064},{\"date\":\"1993-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.064},{\"date\":\"1993-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.064},{\"date\":\"1993-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.058},{\"date\":\"1993-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.058},{\"date\":\"1993-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.058},{\"date\":\"1993-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.051},{\"date\":\"1993-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.051},{\"date\":\"1993-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.051},{\"date\":\"1993-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.036},{\"date\":\"1993-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.036},{\"date\":\"1993-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.036},{\"date\":\"1993-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.018},{\"date\":\"1993-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.018},{\"date\":\"1993-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.018},{\"date\":\"1993-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.003},{\"date\":\"1993-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.003},{\"date\":\"1993-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.003},{\"date\":\"1993-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.999},{\"date\":\"1993-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.999},{\"date\":\"1993-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.999},{\"date\":\"1994-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.992},{\"date\":\"1994-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.992},{\"date\":\"1994-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.992},{\"date\":\"1994-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.995},{\"date\":\"1994-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.995},{\"date\":\"1994-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.995},{\"date\":\"1994-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.001},{\"date\":\"1994-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.001},{\"date\":\"1994-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.001},{\"date\":\"1994-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.999},{\"date\":\"1994-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.999},{\"date\":\"1994-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.999},{\"date\":\"1994-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.005},{\"date\":\"1994-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.005},{\"date\":\"1994-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.005},{\"date\":\"1994-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.007},{\"date\":\"1994-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.007},{\"date\":\"1994-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.007},{\"date\":\"1994-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.016},{\"date\":\"1994-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.016},{\"date\":\"1994-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.016},{\"date\":\"1994-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.009},{\"date\":\"1994-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.009},{\"date\":\"1994-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.009},{\"date\":\"1994-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.004},{\"date\":\"1994-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.004},{\"date\":\"1994-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.004},{\"date\":\"1994-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.007},{\"date\":\"1994-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.007},{\"date\":\"1994-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.007},{\"date\":\"1994-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.005},{\"date\":\"1994-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.005},{\"date\":\"1994-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.005},{\"date\":\"1994-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.007},{\"date\":\"1994-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.007},{\"date\":\"1994-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.007},{\"date\":\"1994-03-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.106},{\"date\":\"1994-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.012},{\"date\":\"1994-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.012},{\"date\":\"1994-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.012},{\"date\":\"1994-03-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.107},{\"date\":\"1994-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.011},{\"date\":\"1994-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.011},{\"date\":\"1994-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.011},{\"date\":\"1994-04-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.109},{\"date\":\"1994-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.028},{\"date\":\"1994-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.028},{\"date\":\"1994-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.028},{\"date\":\"1994-04-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.108},{\"date\":\"1994-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.033},{\"date\":\"1994-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.033},{\"date\":\"1994-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.033},{\"date\":\"1994-04-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.105},{\"date\":\"1994-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.037},{\"date\":\"1994-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.037},{\"date\":\"1994-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.037},{\"date\":\"1994-04-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.106},{\"date\":\"1994-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.04},{\"date\":\"1994-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.04},{\"date\":\"1994-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.04},{\"date\":\"1994-05-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.104},{\"date\":\"1994-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.045},{\"date\":\"1994-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.045},{\"date\":\"1994-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.045},{\"date\":\"1994-05-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.101},{\"date\":\"1994-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.046},{\"date\":\"1994-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.046},{\"date\":\"1994-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.046},{\"date\":\"1994-05-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.099},{\"date\":\"1994-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.05},{\"date\":\"1994-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.05},{\"date\":\"1994-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.05},{\"date\":\"1994-05-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.099},{\"date\":\"1994-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.056},{\"date\":\"1994-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.056},{\"date\":\"1994-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.056},{\"date\":\"1994-05-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.098},{\"date\":\"1994-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.065},{\"date\":\"1994-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.065},{\"date\":\"1994-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.065},{\"date\":\"1994-06-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.101},{\"date\":\"1994-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.073},{\"date\":\"1994-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.073},{\"date\":\"1994-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.073},{\"date\":\"1994-06-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.098},{\"date\":\"1994-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.079},{\"date\":\"1994-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.079},{\"date\":\"1994-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.079},{\"date\":\"1994-06-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.103},{\"date\":\"1994-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.095},{\"date\":\"1994-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.095},{\"date\":\"1994-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.095},{\"date\":\"1994-06-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.108},{\"date\":\"1994-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.097},{\"date\":\"1994-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.097},{\"date\":\"1994-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.097},{\"date\":\"1994-07-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.109},{\"date\":\"1994-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.103},{\"date\":\"1994-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.103},{\"date\":\"1994-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.103},{\"date\":\"1994-07-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.11},{\"date\":\"1994-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.109},{\"date\":\"1994-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.109},{\"date\":\"1994-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.109},{\"date\":\"1994-07-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.111},{\"date\":\"1994-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.114},{\"date\":\"1994-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.114},{\"date\":\"1994-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.114},{\"date\":\"1994-07-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.111},{\"date\":\"1994-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.13},{\"date\":\"1994-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.13},{\"date\":\"1994-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.13},{\"date\":\"1994-08-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.116},{\"date\":\"1994-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.157},{\"date\":\"1994-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.157},{\"date\":\"1994-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.157},{\"date\":\"1994-08-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.127},{\"date\":\"1994-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.161},{\"date\":\"1994-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.161},{\"date\":\"1994-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.161},{\"date\":\"1994-08-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.127},{\"date\":\"1994-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.165},{\"date\":\"1994-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.165},{\"date\":\"1994-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.165},{\"date\":\"1994-08-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.124},{\"date\":\"1994-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.161},{\"date\":\"1994-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.161},{\"date\":\"1994-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.161},{\"date\":\"1994-08-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.122},{\"date\":\"1994-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.156},{\"date\":\"1994-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.156},{\"date\":\"1994-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.156},{\"date\":\"1994-09-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.126},{\"date\":\"1994-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.15},{\"date\":\"1994-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.15},{\"date\":\"1994-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.15},{\"date\":\"1994-09-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.128},{\"date\":\"1994-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.14},{\"date\":\"1994-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.14},{\"date\":\"1994-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.14},{\"date\":\"1994-09-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.126},{\"date\":\"1994-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.129},{\"date\":\"1994-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.129},{\"date\":\"1994-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.129},{\"date\":\"1994-09-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.12},{\"date\":\"1994-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.12},{\"date\":\"1994-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.12},{\"date\":\"1994-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.12},{\"date\":\"1994-10-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.118},{\"date\":\"1994-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.114},{\"date\":\"1994-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.114},{\"date\":\"1994-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.114},{\"date\":\"1994-10-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.117},{\"date\":\"1994-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.106},{\"date\":\"1994-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.106},{\"date\":\"1994-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.106},{\"date\":\"1994-10-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.119},{\"date\":\"1994-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.107},{\"date\":\"1994-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.107},{\"date\":\"1994-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.107},{\"date\":\"1994-10-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.122},{\"date\":\"1994-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.121},{\"date\":\"1994-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.121},{\"date\":\"1994-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.121},{\"date\":\"1994-10-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.133},{\"date\":\"1994-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.123},{\"date\":\"1994-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.123},{\"date\":\"1994-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.123},{\"date\":\"1994-11-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.133},{\"date\":\"1994-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.122},{\"date\":\"1994-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.122},{\"date\":\"1994-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.122},{\"date\":\"1994-11-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.135},{\"date\":\"1994-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.113},{\"date\":\"1994-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.113},{\"date\":\"1994-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.113},{\"date\":\"1994-11-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.13},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.117},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.175},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.259},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.105},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.082},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.149},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.197},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.174},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.249},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.303},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.27},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.351},{\"date\":\"1994-11-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.126},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.127},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.143},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.254},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.103},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.075},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.169},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.197},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.167},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.272},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.301},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.26},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.37},{\"date\":\"1994-12-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.123},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.131},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.118},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.231},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.095},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.064},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.167},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.188},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.156},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.268},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.288},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.244},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.363},{\"date\":\"1994-12-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.114},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.134},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.099},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.216},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.087},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.056},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.167},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.179},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.147},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.262},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.279},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.233},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.36},{\"date\":\"1994-12-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.109},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.125},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.088},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.213},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.077},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.044},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.165},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.171},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.136},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.265},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.27},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.222},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.358},{\"date\":\"1994-12-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.106},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.127},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.104},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.231},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.079},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.063},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.167},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.17},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.159},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.298},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.272},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.25},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.386},{\"date\":\"1995-01-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.104},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.134},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.111},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.232},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.086},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.07},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.169},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.177},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.164},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.3},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.279},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.256},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.387},{\"date\":\"1995-01-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.102},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.126},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.102},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.231},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.078},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.062},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.169},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.168},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.155},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.299},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.271},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.249},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.385},{\"date\":\"1995-01-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.1},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.132},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.11},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.226},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.083},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.068},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.165},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.177},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.165},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.296},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.277},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.256},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.378},{\"date\":\"1995-01-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.095},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.131},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.109},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.221},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.083},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.068},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.162},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.176},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.163},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.291},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.275},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.255},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.37},{\"date\":\"1995-01-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.09},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.124},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.103},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.218},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.076},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.062},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.159},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.169},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.157},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.288},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.27},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.25},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.368},{\"date\":\"1995-02-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.086},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.121},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.099},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.218},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.074},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.058},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.158},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.166},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.153},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.285},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.265},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.243},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.367},{\"date\":\"1995-02-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.088},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.115},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.093},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.213},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.067},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.052},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.153},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.16},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.148},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.28},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.259},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.239},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.363},{\"date\":\"1995-02-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.088},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.121},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.101},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.211},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.073},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.06},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.152},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.164},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.153},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.276},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.265},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.246},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.362},{\"date\":\"1995-02-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.089},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.123},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.103},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.209},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.076},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.063},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.149},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.167},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.157},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.275},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.263},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.244},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.358},{\"date\":\"1995-03-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.089},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.116},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.096},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.202},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.069},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.056},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.141},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.158},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.15},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.268},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.256},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.238},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.353},{\"date\":\"1995-03-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.088},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.114},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.095},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.201},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.068},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.055},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.14},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.158},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.149},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.267},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.254},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.236},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.351},{\"date\":\"1995-03-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.085},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.121},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.102},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.198},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.075},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.063},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.138},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.162},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.153},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.265},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.259},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.241},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.349},{\"date\":\"1995-03-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.088},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.133},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.116},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.198},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.087},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.077},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.14},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.174},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.167},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.266},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.27},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.255},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.35},{\"date\":\"1995-04-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.094},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.149},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.134},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.207},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.103},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.094},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.149},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.19},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.186},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.273},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.286},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.273},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.357},{\"date\":\"1995-04-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.101},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.163},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.149},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.215},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.117},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.11},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.16},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.205},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.201},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.278},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.3},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.29},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.361},{\"date\":\"1995-04-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.106},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.184},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.173},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.231},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.138},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.133},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.176},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.226},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.224},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.291},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.323},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.315},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.377},{\"date\":\"1995-04-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.115},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.194},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.181},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.242},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.148},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.141},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.188},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.236},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.234},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.305},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.332},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.323},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.389},{\"date\":\"1995-05-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.119},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.216},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.204},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.261},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.169},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.164},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.205},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.259},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.257},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.324},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.356},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.349},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.408},{\"date\":\"1995-05-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.126},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.226},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.213},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.273},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.179},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.173},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.215},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.269},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.267},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.334},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.364},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.357},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.418},{\"date\":\"1995-05-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.126},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.244},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.232},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.285},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.197},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.191},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.233},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.288},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.285},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.344},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.383},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.376},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.429},{\"date\":\"1995-05-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.124},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.246},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.234},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.291},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.199},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.193},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.239},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.29},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.288},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.351},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.386},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.379},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.435},{\"date\":\"1995-05-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.13},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.246},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.234},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.289},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.199},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.194},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.238},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.29},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.288},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.349},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.386},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.38},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.434},{\"date\":\"1995-06-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.124},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.243},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.23},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.287},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.196},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.19},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.237},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.288},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.286},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.348},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.383},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.375},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.433},{\"date\":\"1995-06-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.122},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.236},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.224},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.285},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.189},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.183},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.234},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.28},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.277},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.345},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.376},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.368},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.432},{\"date\":\"1995-06-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.117},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.229},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.217},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.28},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.182},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.177},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.228},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.273},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.27},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.341},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.37},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.363},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.428},{\"date\":\"1995-06-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.112},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.222},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.209},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.275},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.175},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.169},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.223},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.266},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.262},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.337},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.362},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.354},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.423},{\"date\":\"1995-07-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.106},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.212},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.2},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.269},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.165},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.159},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.216},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.255},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.252},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.333},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.352},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.344},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.416},{\"date\":\"1995-07-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.103},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.2},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.189},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.26},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.153},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.148},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.207},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.244},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.243},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.325},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.342},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.335},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.409},{\"date\":\"1995-07-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.099},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.191},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.179},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.248},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.144},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.138},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.196},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.236},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.234},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.314},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.333},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.325},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.397},{\"date\":\"1995-07-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.098},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.179},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.166},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.237},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.132},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.126},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.183},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.222},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.22},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.304},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.319},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.311},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.387},{\"date\":\"1995-07-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.093},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.174},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.164},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.229},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.127},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.124},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.174},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.217},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.216},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.296},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.316},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.309},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.379},{\"date\":\"1995-08-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.099},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.172},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.162},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.221},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.125},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.121},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.166},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.215},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.214},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.288},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.312},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.306},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.372},{\"date\":\"1995-08-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.106},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.171},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.163},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.214},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.124},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.122},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.16},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.214},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.215},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.28},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.311},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.308},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.366},{\"date\":\"1995-08-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.106},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.163},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.154},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.209},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.117},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.113},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.156},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.205},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.206},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.275},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.305},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.3},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.356},{\"date\":\"1995-08-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.109},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.16},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.151},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.209},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.113},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.111},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.152},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.202},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.202},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.277},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.3},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.294},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.362},{\"date\":\"1995-09-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.115},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.158},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.148},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.203},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.111},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.107},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.148},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.201},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.201},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.268},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.298},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.292},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.356},{\"date\":\"1995-09-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.119},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.157},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.147},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.202},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.11},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.106},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.146},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.2},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.2},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.265},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.297},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.291},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.355},{\"date\":\"1995-09-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.122},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.156},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.146},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.198},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.109},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.106},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.142},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.198},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.197},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.26},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.296},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.29},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.352},{\"date\":\"1995-09-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.121},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.151},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.14},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.2},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.105},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.1},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.142},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.192},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.191},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.262},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.29},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.282},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.352},{\"date\":\"1995-10-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.117},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.144},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.132},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.198},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.097},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.092},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.139},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.185},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.182},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.261},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.283},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.275},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.351},{\"date\":\"1995-10-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.117},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.133},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.121},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.195},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.087},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.081},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.135},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.175},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.173},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.26},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.273},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.264},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.348},{\"date\":\"1995-10-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.117},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.125},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.113},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.19},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.079},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.073},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.129},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.165},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.163},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.254},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.263},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.254},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.341},{\"date\":\"1995-10-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.114},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.115},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.102},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.179},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.068},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.062},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.117},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.157},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.154},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.246},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.255},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.245},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.332},{\"date\":\"1995-10-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.11},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.112},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.1},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.171},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.065},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.06},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.11},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.153},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.151},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.24},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.252},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.245},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.318},{\"date\":\"1995-11-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.118},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.109},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.099},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.168},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.063},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.059},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.107},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.151},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.149},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.236},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.248},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.242},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.315},{\"date\":\"1995-11-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.118},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.106},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.095},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.162},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.06},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.056},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.1},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.149},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.146},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.231},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.244},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.238},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.309},{\"date\":\"1995-11-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.119},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.107},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.096},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.16},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.061},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.057},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.098},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.149},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.146},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.229},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.243},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.237},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.306},{\"date\":\"1995-11-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.124},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.108},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.097},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.16},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.062},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.058},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.101},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.151},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.147},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.229},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.246},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.238},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.307},{\"date\":\"1995-12-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.123},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.11},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.097},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.161},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.063},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.057},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.104},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.154},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.148},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.23},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.248},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.239},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.307},{\"date\":\"1995-12-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.124},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.124},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.111},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.169},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.078},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.072},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.113},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.167},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.161},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.236},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.262},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.253},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.314},{\"date\":\"1995-12-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.13},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.128},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.114},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.178},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.082},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.075},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.122},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.17},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.163},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.242},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.265},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.255},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.322},{\"date\":\"1995-12-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.141},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.129},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.116},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.178},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.083},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.077},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.122},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.171},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.164},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.244},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.268},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.258},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.326},{\"date\":\"1996-01-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.148},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.139},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.125},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.181},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.093},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.086},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.128},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.181},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.174},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.242},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.277},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.266},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.326},{\"date\":\"1996-01-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.146},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.145},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.131},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.189},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.098},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.092},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.135},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.186},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.18},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.252},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.285},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.274},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.335},{\"date\":\"1996-01-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.152},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.138},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.124},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.189},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.091},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.084},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.132},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.179},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.173},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.255},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.278},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.267},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.337},{\"date\":\"1996-01-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.144},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.133},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.118},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.185},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.087},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.079},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.128},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.176},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.168},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.253},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.272},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.26},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.334},{\"date\":\"1996-01-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.136},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.13},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.115},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.182},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.083},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.076},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.126},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.172},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.164},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.25},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.269},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.258},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.331},{\"date\":\"1996-02-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.13},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.126},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.112},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.18},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.08},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.073},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.123},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.169},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.161},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.249},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.265},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.252},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.329},{\"date\":\"1996-02-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.134},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.133},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.118},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.184},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.087},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.078},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.126},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.177},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.169},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.253},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.271},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.259},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.33},{\"date\":\"1996-02-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.151},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.153},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.138},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.2},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.107},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.099},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.142},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.197},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.189},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.269},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.291},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.279},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.345},{\"date\":\"1996-02-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.164},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.17},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.155},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.213},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.124},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.115},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.158},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.213},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.205},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.279},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.308},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.297},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.355},{\"date\":\"1996-03-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.175},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.171},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.156},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.221},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.125},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.116},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.165},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.213},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.206},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.284},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.308},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.296},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.361},{\"date\":\"1996-03-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.173},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.181},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.167},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.227},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.135},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.128},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.17},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.222},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.216},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.292},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.317},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.307},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.369},{\"date\":\"1996-03-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.172},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.21},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.196},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.247},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.164},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.158},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.192},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.25},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.244},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.314},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.345},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.334},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.39},{\"date\":\"1996-03-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.21},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.223},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.21},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.266},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.178},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.172},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.209},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.263},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.258},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.334},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.357},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.347},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.406},{\"date\":\"1996-04-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.222},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.248},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.233},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.293},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.204},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.195},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.236},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.289},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.282},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.36},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.381},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.37},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.429},{\"date\":\"1996-04-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.249},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.287},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.272},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.337},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.242},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.234},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.28},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.329},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.321},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.405},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.422},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.411},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.473},{\"date\":\"1996-04-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.305},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.301},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.282},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.386},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.256},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.243},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.32},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.341},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.333},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.458},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.438},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.422},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.519},{\"date\":\"1996-04-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.304},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.318},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.296},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.413},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.273},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.257},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.342},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.356},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.347},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.481},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.455},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.437},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.544},{\"date\":\"1996-04-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.285},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.321},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.298},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.422},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.275},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.259},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.351},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.359},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.349},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.49},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.458},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.439},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.553},{\"date\":\"1996-05-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.292},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.323},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.301},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.424},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.277},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.262},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.354},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.361},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.352},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.493},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.461},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.442},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.555},{\"date\":\"1996-05-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.285},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.33},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.308},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.425},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.285},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.269},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.357},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.369},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.359},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.494},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.468},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.45},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.556},{\"date\":\"1996-05-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.274},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.321},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.299},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.417},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.275},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.26},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.349},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.358},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.347},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.484},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.458},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.44},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.549},{\"date\":\"1996-05-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.254},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.315},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.292},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.419},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.269},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.252},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.367},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.353},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.342},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.49},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.454},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.434},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.556},{\"date\":\"1996-06-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.24},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.307},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.286},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.407},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.262},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.247},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.356},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.345},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.335},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.479},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.444},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.426},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.543},{\"date\":\"1996-06-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.215},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.302},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.28},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.397},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.258},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.241},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.344},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.34},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.329},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.469},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.438},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.419},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.533},{\"date\":\"1996-06-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.193},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.289},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.268},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.387},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.245},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.23},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.332},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.328},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.318},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.46},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.425},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.407},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.525},{\"date\":\"1996-06-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.179},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.279},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.258},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.375},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.234},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.219},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.319},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.317},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.307},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.448},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.416},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.397},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.514},{\"date\":\"1996-07-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.172},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.276},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.256},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.367},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.231},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.217},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.312},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.315},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.307},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.439},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.412},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.395},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.506},{\"date\":\"1996-07-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.173},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.273},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.254},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.36},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.228},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.215},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.305},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.311},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.304},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.432},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.409},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.394},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.499},{\"date\":\"1996-07-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.178},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.272},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.254},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.351},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.227},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.215},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.296},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.31},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.304},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.424},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.408},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.394},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.491},{\"date\":\"1996-07-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.184},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.263},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.247},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.34},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.218},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.209},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.284},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.302},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.297},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.414},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.399},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.386},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.48},{\"date\":\"1996-07-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.178},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.253},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.239},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.327},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.207},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.199},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.271},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.292},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.289},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.402},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.389},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.379},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.47},{\"date\":\"1996-08-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.184},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.248},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.235},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.315},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.203},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.196},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.259},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.287},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.284},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.389},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.384},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.374},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.458},{\"date\":\"1996-08-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.191},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.249},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.238},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.305},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.205},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.199},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.251},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.288},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.287},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.376},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.382},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.376},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.445},{\"date\":\"1996-08-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.206},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.253},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.24},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.307},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.209},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.201},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.252},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.29},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.288},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.378},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.386},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.378},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.447},{\"date\":\"1996-08-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.222},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.242},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.232},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.289},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.197},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.193},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.235},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.281},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.281},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.359},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.375},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.37},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.432},{\"date\":\"1996-09-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.231},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.247},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.239},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.287},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.203},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.201},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.235},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.286},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.287},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.357},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.38},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.375},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.429},{\"date\":\"1996-09-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.25},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.25},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.241},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.29},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.206},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.203},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.237},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.291},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.29},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.36},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.383},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.376},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.433},{\"date\":\"1996-09-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.276},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.251},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.241},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.29},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.206},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.203},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.238},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.29},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.29},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.359},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.383},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.378},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.432},{\"date\":\"1996-09-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.277},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.245},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.237},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.284},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.2},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.199},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.233},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.285},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.286},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.352},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.379},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.374},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.426},{\"date\":\"1996-09-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.289},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.239},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.23},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.278},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.194},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.191},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.227},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.279},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.279},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.348},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.373},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.367},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.421},{\"date\":\"1996-10-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.308},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.248},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.241},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.278},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.203},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.203},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.228},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.288},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.29},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.344},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.382},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.378},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.419},{\"date\":\"1996-10-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.326},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.249},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.244},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.273},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.204},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.205},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.222},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.29},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.292},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.339},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.384},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.382},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.416},{\"date\":\"1996-10-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.329},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.26},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.256},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.27},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.215},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.217},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.221},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.302},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.305},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.335},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.395},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.395},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.413},{\"date\":\"1996-10-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.329},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.268},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.264},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.273},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.223},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.225},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.225},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.31},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.312},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.336},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.403},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.403},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.416},{\"date\":\"1996-11-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.323},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.272},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.268},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.27},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.226},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.229},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.223},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.315},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.317},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.329},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.408},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.409},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.413},{\"date\":\"1996-11-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.316},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.282},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.277},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.277},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.236},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.238},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.23},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.326},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.326},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.338},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.418},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.419},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.422},{\"date\":\"1996-11-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.324},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.289},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.284},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.283},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.244},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.246},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.236},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.332},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.332},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.341},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.423},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.423},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.428},{\"date\":\"1996-11-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.327},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.287},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.281},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.288},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.241},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.242},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.24},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.332},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.33},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.345},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.423},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.421},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.433},{\"date\":\"1996-12-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.323},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.287},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.28},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.293},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.241},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.241},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.245},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.33},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.327},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.349},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.422},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.421},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.437},{\"date\":\"1996-12-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.32},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.283},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.272},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.297},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.236},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.233},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.248},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.327},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.322},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.354},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.419},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.415},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.443},{\"date\":\"1996-12-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.307},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.278},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.267},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.298},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.231},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.227},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.249},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.323},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.317},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.355},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.414},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.409},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.442},{\"date\":\"1996-12-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.3},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.274},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.263},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.299},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.227},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.224},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.25},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.318},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.313},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.355},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.412},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.407},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.443},{\"date\":\"1996-12-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.295},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.272},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.26},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.304},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.225},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.22},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.254},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.317},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.311},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.361},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.409},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.402},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.448},{\"date\":\"1997-01-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.291},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.287},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.275},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.316},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.241},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.235},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.266},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.332},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.326},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.375},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.423},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.418},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.458},{\"date\":\"1997-01-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.296},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.287},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.275},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.318},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.241},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.236},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.268},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.329},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.324},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.377},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.424},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.418},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.459},{\"date\":\"1997-01-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.293},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.284},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.271},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.316},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.238},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.232},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.265},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.325},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.321},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.376},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.421},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.415},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.458},{\"date\":\"1997-01-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.283},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.282},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.27},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.318},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.236},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.23},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.267},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.324},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.319},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.378},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.42},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.414},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.458},{\"date\":\"1997-02-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.288},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.28},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.266},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.32},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.234},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.227},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.271},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.321},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.315},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.379},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.414},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.405},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.46},{\"date\":\"1997-02-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.285},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.273},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.26},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.316},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.227},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.22},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.266},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.314},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.309},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.378},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.41},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.403},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.458},{\"date\":\"1997-02-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.278},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.27},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.257},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.313},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.223},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.217},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.26},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.312},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.307},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.377},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.408},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.401},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.454},{\"date\":\"1997-02-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.269},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.261},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.248},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.306},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.215},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.208},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.253},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.302},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.298},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.371},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.398},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.391},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.448},{\"date\":\"1997-03-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.252},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.253},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.24},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.306},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.206},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.199},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.252},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.296},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.292},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.373},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.393},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.385},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.448},{\"date\":\"1997-03-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.23},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.246},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.231},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.304},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.2},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.191},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.249},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.289},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.283},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.373},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.384},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.375},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.444},{\"date\":\"1997-03-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.22},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.25},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.235},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.305},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.204},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.196},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.252},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.291},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.285},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.374},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.385},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.376},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.442},{\"date\":\"1997-03-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.22},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.246},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.231},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.31},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.2},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.191},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.256},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.286},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.281},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.38},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.383},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.373},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.446},{\"date\":\"1997-03-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.225},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.248},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.232},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.314},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.203},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.192},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.259},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.288},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.282},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.388},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.386},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.374},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.453},{\"date\":\"1997-04-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.217},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.244},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.227},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.315},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.199},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.187},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.26},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.283},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.278},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.388},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.381},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.369},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.452},{\"date\":\"1997-04-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.216},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.245},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.228},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.31},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.199},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.188},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.256},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.284},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.278},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.381},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.381},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.369},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.447},{\"date\":\"1997-04-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.211},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.24},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.224},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.305},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.195},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.185},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.25},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.279},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.273},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.379},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.377},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.365},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.442},{\"date\":\"1997-04-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.205},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.238},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.221},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.305},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.193},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.182},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.249},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.276},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.269},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.379},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.374},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.363},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.442},{\"date\":\"1997-05-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.205},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.238},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.221},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.3},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.193},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.182},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.244},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.278},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.271},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.372},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.372},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.359},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.437},{\"date\":\"1997-05-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.191},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.247},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.233},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.301},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.203},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.195},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.246},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.286},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.28},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.371},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.38},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.37},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.436},{\"date\":\"1997-05-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.191},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.255},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.241},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.306},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.212},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.204},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.252},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.294},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.287},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.375},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.385},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.375},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.442},{\"date\":\"1997-05-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.196},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.258},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.243},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.304},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.215},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.206},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.25},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.297},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.29},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.373},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.388},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.378},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.439},{\"date\":\"1997-06-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.19},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.251},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.236},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.301},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.207},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.198},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.246},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.291},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.283},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.37},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.382},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.372},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.439},{\"date\":\"1997-06-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.187},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.242},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.227},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.296},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.198},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.189},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.241},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.282},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.274},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.365},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.373},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.362},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.435},{\"date\":\"1997-06-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.172},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.232},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.217},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.288},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.187},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.179},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.232},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.272},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.265},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.359},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.364},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.353},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.429},{\"date\":\"1997-06-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.162},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.226},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.21},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.273},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.181},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.171},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.22},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.267},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.259},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.347},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.359},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.348},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.417},{\"date\":\"1997-06-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.153},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.222},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.208},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.268},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.177},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.169},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.215},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.264},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.257},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.339},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.356},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.346},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.41},{\"date\":\"1997-07-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.159},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.219},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.203},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.262},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.173},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.165},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.208},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.261},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.254},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.333},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.352},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.342},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.405},{\"date\":\"1997-07-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.152},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.222},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.209},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.259},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.177},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.17},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.206},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.265},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.258},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.331},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.356},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.347},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.401},{\"date\":\"1997-07-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.147},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.216},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.203},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.254},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.17},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.164},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.201},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.259},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.252},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.327},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.351},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.342},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.4},{\"date\":\"1997-07-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.145},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.237},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.222},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.279},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.193},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.185},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.228},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.277},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.268},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.347},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.37},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.358},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.42},{\"date\":\"1997-08-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.155},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.272},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.256},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.316},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.228},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.219},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.265},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.311},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.302},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.385},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.404},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.393},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.455},{\"date\":\"1997-08-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.168},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.274},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.255},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.331},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.229},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.218},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.277},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.312},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.301},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.401},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.408},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.393},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.473},{\"date\":\"1997-08-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.167},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.288},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.268},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.357},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.244},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.23},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.302},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.327},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.314},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.428},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.422},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.406},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.498},{\"date\":\"1997-08-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.169},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.287},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.267},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.365},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.243},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.229},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.309},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.326},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.315},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.434},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.422},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.407},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.504},{\"date\":\"1997-09-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.165},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.288},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.266},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.369},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.243},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.227},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.313},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.326},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.313},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.44},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.423},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.406},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.509},{\"date\":\"1997-09-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.163},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.281},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.258},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.371},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.236},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.219},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.315},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.318},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.305},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.443},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.416},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.398},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.509},{\"date\":\"1997-09-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.156},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.269},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.247},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.363},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.225},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.208},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.305},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.306},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.294},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.437},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.404},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.387},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.502},{\"date\":\"1997-09-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.154},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.255},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.233},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.352},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.21},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.195},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.293},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.292},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.281},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.426},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.391},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.373},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.492},{\"date\":\"1997-09-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.16},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.254},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.234},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.347},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.209},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.195},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.288},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.292},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.283},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.42},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.39},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.374},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.486},{\"date\":\"1997-10-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.175},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.248},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.227},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.338},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.203},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.187},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.277},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.287},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.276},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.414},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.385},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.368},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.48},{\"date\":\"1997-10-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.185},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.238},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.218},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.33},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.193},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.178},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.269},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.278},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.268},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.407},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.376},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.36},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.472},{\"date\":\"1997-10-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.185},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.228},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.208},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.32},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.182},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.168},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.26},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.267},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.258},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.398},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.366},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.351},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.461},{\"date\":\"1997-10-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.185},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.221},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.202},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.311},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.176},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.163},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.254},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.259},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.251},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.387},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.357},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.344},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.452},{\"date\":\"1997-11-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.188},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.222},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.204},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.304},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.177},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.164},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.247},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.261},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.253},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.38},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.36},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.347},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.446},{\"date\":\"1997-11-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.19},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.213},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.195},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.296},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.168},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.156},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.238},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.251},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.244},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.372},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.352},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.339},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.437},{\"date\":\"1997-11-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.195},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.207},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.19},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.288},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.162},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.15},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.232},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.246},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.239},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.365},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.346},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.333},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.43},{\"date\":\"1997-11-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.193},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.197},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.18},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.282},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.152},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.14},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.226},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.236},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.23},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.358},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.336},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.324},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.424},{\"date\":\"1997-12-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.189},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.187},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.168},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.27},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.141},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.128},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.215},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.226},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.218},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.347},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.326},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.312},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.412},{\"date\":\"1997-12-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.174},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.176},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.158},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.26},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.131},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.118},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.207},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.215},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.208},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.337},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.315},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.301},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.401},{\"date\":\"1997-12-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.162},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.167},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.148},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.249},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.121},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.108},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.197},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.205},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.198},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.324},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.307},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.293},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.389},{\"date\":\"1997-12-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.155},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.158},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.139},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.243},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.112},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.099},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.19},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.196},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.189},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.319},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.298},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.284},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.384},{\"date\":\"1997-12-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.15},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.148},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.13},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.236},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.102},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.089},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.183},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.188},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.181},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.313},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.29},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.276},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.378},{\"date\":\"1998-01-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.147},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.14},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.123},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.222},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.094},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.083},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.169},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.181},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.174},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.299},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.281},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.268},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.365},{\"date\":\"1998-01-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.126},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.129},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.112},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.204},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.083},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.072},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.152},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.168},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.162},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.277},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.269},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.257},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.345},{\"date\":\"1998-01-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.109},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.112},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.095},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.19},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.066},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.055},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.138},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.152},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.146},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.263},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.253},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.241},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.333},{\"date\":\"1998-01-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.096},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.108},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.092},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.177},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.061},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.051},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.124},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.149},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.144},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.249},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.25},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.239},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.319},{\"date\":\"1998-02-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.091},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.101},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.086},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.165},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.053},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.045},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.113},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.143},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.138},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.237},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.243},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.233},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.307},{\"date\":\"1998-02-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.085},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.085},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.072},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.148},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.038},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.032},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.095},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.127},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.123},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.219},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.226},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.217},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.291},{\"date\":\"1998-02-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.082},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.09},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.078},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.137},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.044},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.038},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.086},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.132},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.128},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.209},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.23},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.221},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.279},{\"date\":\"1998-02-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.079},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.075},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.065},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.117},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.028},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.025},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.065},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.119},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.117},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.187},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.216},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.211},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.259},{\"date\":\"1998-03-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.074},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.065},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.057},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.098},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.018},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.017},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.045},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.111},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.11},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.17},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.205},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.203},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.241},{\"date\":\"1998-03-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.066},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.055},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.047},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.088},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.008},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.006},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.035},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.101},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.1},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.159},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.195},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.192},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.232},{\"date\":\"1998-03-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.057},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.047},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.038},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.081},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.998},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.029},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.091},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.09},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.151},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.185},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.181},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.225},{\"date\":\"1998-03-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.049},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.077},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.066},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.107},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.03},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.026},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.057},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.121},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.117},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.177},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.215},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.21},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.251},{\"date\":\"1998-03-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.068},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.074},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.063},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.108},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.028},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.023},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.059},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.118},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.114},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.176},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.212},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.206},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.248},{\"date\":\"1998-04-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.067},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.072},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.058},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.113},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.025},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.018},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.066},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.115},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.111},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.181},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.21},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.203},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.252},{\"date\":\"1998-04-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.065},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.075},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.062},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.112},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.028},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.021},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.065},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.118},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.114},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.18},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.214},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.208},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.251},{\"date\":\"1998-04-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.065},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.086},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.073},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.123},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.04},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.032},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.077},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.128},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.123},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.191},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.227},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.22},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.26},{\"date\":\"1998-04-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.07},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.095},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.079},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.149},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.049},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.038},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.101},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.137},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.131},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.221},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.236},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.227},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.283},{\"date\":\"1998-05-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.072},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.109},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.092},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.161},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.063},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.052},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.115},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.15},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.144},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.232},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.247},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.237},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.295},{\"date\":\"1998-05-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.075},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.109},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.092},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.175},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.072},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.055},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.12},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.161},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.137},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.24},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.246},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.228},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.308},{\"date\":\"1998-05-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.069},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.108},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.09},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.175},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.07},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.052},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.12},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.16},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.138},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.236},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.245},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.226},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.307},{\"date\":\"1998-05-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.06},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.104},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.086},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.172},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.066},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.047},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.119},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.156},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.132},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.234},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.242},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.224},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.304},{\"date\":\"1998-06-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.053},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.113},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.097},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.17},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.075},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.06},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.116},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.164},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.142},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.232},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.248},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.232},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.305},{\"date\":\"1998-06-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.045},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.104},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.087},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.166},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.066},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.049},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.111},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.156},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.134},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.23},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.243},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.226},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.302},{\"date\":\"1998-06-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.04},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.096},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.079},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.161},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.058},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.041},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.106},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.15},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.127},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.226},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.237},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.218},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.301},{\"date\":\"1998-06-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.033},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.096},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.081},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.156},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.057},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.042},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.099},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.149},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.128},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.22},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.237},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.22},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.296},{\"date\":\"1998-06-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.034},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.097},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.08},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.157},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.058},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.041},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.103},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.149},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.127},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.22},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.237},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.219},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.296},{\"date\":\"1998-07-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.036},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.092},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.076},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.154},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.054},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.037},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.099},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.146},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.123},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.218},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.233},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.215},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.294},{\"date\":\"1998-07-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.031},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.097},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.082},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.153},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.059},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.044},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.098},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.149},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.128},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.217},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.235},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.217},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.293},{\"date\":\"1998-07-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.027},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.088},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.073},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.147},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.05},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.035},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.09},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.14},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.118},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.212},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.229},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.211},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.289},{\"date\":\"1998-07-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.02},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.077},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.061},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.139},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.039},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.023},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.082},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.131},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.109},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.204},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.218},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.199},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.282},{\"date\":\"1998-08-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.016},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.072},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.056},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.134},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.033},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.018},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.076},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.124},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.102},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.199},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.214},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.195},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.278},{\"date\":\"1998-08-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.01},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.065},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.049},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.13},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.026},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.011},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.072},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.119},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.097},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.194},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.207},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.188},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.275},{\"date\":\"1998-08-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.007},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.058},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.042},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.123},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.019},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.004},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.065},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.113},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.09},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.19},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.2},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.181},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.268},{\"date\":\"1998-08-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.004},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.053},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.037},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.116},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.013},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.998},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.059},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.107},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.085},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.181},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.196},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.178},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.261},{\"date\":\"1998-08-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.046},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.03},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.112},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.007},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.991},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.054},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.101},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.079},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.177},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.191},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.172},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.258},{\"date\":\"1998-09-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.009},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.042},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.026},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.107},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.002},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.987},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.049},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.097},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.075},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.173},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.187},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.168},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.254},{\"date\":\"1998-09-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.019},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.053},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.038},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.114},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.014},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.999},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.055},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.108},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.086},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.182},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.197},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.179},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.261},{\"date\":\"1998-09-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.03},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.053},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.037},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.117},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.014},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.999},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.058},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.107},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.085},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.183},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.197},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.178},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.263},{\"date\":\"1998-09-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.039},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.059},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.045},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.116},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.019},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.006},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.057},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.113},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.093},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.181},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.202},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.186},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.261},{\"date\":\"1998-10-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.041},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.063},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.05},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.117},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.022},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.01},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.06},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.118},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.1},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.184},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.209},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.194},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.263},{\"date\":\"1998-10-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.041},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.058},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.046},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.113},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.019},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.007},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.055},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.113},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.095},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.179},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.204},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.19},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.257},{\"date\":\"1998-10-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.036},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.055},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.04},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.115},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.015},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.001},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.057},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.109},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.089},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.18},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.2},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.183},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.26},{\"date\":\"1998-10-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.036},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.05},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.037},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.11},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.01},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.997},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.052},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.105},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.086},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.176},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.196},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.18},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.255},{\"date\":\"1998-11-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.035},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.048},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.034},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.109},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.008},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.994},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.051},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.104},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.083},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.175},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.194},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.178},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.256},{\"date\":\"1998-11-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.034},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.037},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.022},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.103},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.996},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.981},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.045},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.094},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.073},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.17},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.183},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.166},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.248},{\"date\":\"1998-11-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.026},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.03},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.012},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.105},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.989},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.971},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.044},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.089},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.065},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.174},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.177},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.156},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.252},{\"date\":\"1998-11-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.012},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.015},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.995},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.099},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.974},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.954},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.035},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.074},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.048},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.169},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.164},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.141},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.248},{\"date\":\"1998-11-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.004},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.996},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.974},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.088},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.954},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.933},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.024},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.056},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.027},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.157},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.146},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.12},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.238},{\"date\":\"1998-12-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.986},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.987},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.964},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.081},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.945},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.923},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.017},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.046},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.016},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.152},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.139},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.112},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.233},{\"date\":\"1998-12-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.972},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.986},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.962},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.079},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.944},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.921},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.014},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.044},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.014},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.152},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.135},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.107},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.23},{\"date\":\"1998-12-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.968},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.979},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.955},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.074},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.937},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.914},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.009},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.038},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.008},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.147},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.129},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.1},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.226},{\"date\":\"1998-12-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.966},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.977},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.953},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.071},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.935},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.913},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.006},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.036},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.006},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.143},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.126},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.098},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.223},{\"date\":\"1999-01-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.965},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.982},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.96},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.068},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.941},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.92},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.005},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.039},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.011},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.139},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.129},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.102},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.219},{\"date\":\"1999-01-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.967},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.985},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.961},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.073},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.944},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.921},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.013},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.042},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.012},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.143},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.131},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.104},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.221},{\"date\":\"1999-01-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.97},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.977},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.954},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.067},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.936},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.913},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.006},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.035},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.006},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.137},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.125},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.098},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.216},{\"date\":\"1999-01-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.964},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.971},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.948},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.056},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.929},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.908},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":0.994},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.029},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.002},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.127},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.12},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.094},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.207},{\"date\":\"1999-02-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.962},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.968},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.947},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.05},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.927},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.907},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":0.987},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.026},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":0.999},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.122},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.117},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.092},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.203},{\"date\":\"1999-02-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.962},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.96},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.939},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.043},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.919},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.899},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":0.981},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.018},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":0.99},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.116},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.109},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.084},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.195},{\"date\":\"1999-02-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.959},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.949},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.926},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.039},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.907},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.885},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":0.974},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.008},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":0.979},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.112},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.1},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.074},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.191},{\"date\":\"1999-02-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.953},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.955},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.932},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.042},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.913},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.891},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":0.978},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.016},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":0.987},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.116},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.104},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.077},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.192},{\"date\":\"1999-03-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.956},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":0.963},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.941},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.051},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.921},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.9},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":0.985},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.024},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":0.995},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.126},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.11},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.085},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.198},{\"date\":\"1999-03-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":0.964},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.017},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":0.997},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.09},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":0.977},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.958},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.03},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.074},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.048},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.162},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.16},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.137},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.23},{\"date\":\"1999-03-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.056},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.038},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.126},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.017},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":0.999},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.067},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.112},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.086},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.197},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.199},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.178},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.262},{\"date\":\"1999-03-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.018},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.121},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.093},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.225},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.082},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.055},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.156},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.177},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.141},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.303},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.259},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.229},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.351},{\"date\":\"1999-03-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.046},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.158},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.125},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.287},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.118},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.087},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.21},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.216},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.172},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.374},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.296},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.26},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.412},{\"date\":\"1999-04-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.075},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.179},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.144},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.316},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.14},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.107},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.239},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.238},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.193},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.403},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.316},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.277},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.442},{\"date\":\"1999-04-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.084},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.175},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.14},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.311},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.135},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.103},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.234},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.234},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.19},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.397},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.314},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.275},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.442},{\"date\":\"1999-04-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.08},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.171},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.137},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.306},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.131},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.099},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.229},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.231},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.187},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.392},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.314},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.275},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.44},{\"date\":\"1999-04-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.078},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.176},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.145},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.3},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.136},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.107},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.224},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.234},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.194},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.383},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.316},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.28},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.433},{\"date\":\"1999-05-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.078},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.18},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.149},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.302},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.14},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.109},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.231},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.24},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.201},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.38},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.324},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.288},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.438},{\"date\":\"1999-05-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.083},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.18},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.151},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.291},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.14},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.112},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.221},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.239},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.203},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.369},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.323},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.291},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.427},{\"date\":\"1999-05-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.075},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.166},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.14},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.269},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.126},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.101},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.201},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.224},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.191},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.343},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.309},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.279},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.407},{\"date\":\"1999-05-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.066},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.151},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.128},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.248},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.111},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.088},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.182},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.21},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.18},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.319},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.297},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.27},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.389},{\"date\":\"1999-05-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.065},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.152},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.132},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.235},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.112},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.092},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.168},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.21},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.184},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.306},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.296},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.272},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.376},{\"date\":\"1999-06-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.059},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.148},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.127},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.233},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.108},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.088},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.169},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.205},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.178},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.301},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.292},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.268},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.371},{\"date\":\"1999-06-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.068},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.163},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.144},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.239},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.124},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.105},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.176},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.219},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.195},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.307},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.304},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.282},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.376},{\"date\":\"1999-06-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.082},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.153},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.134},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.233},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.113},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.095},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.168},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.21},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.185},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.304},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.296},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.274},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.371},{\"date\":\"1999-06-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.087},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.165},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.149},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.233},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.125},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.11},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.17},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.221},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.2},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.302},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.306},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.289},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.37},{\"date\":\"1999-07-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.102},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.182},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.161},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.267},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.143},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.123},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.203},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.236},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.21},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.334},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.322},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.299},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.402},{\"date\":\"1999-07-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.114},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.208},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.187},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.301},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.169},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.148},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.232},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.265},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.238},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.372},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.35},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.326},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.434},{\"date\":\"1999-07-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.133},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.232},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.211},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.32},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.193},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.172},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.252},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.288},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.261},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.39},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.371},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.348},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.451},{\"date\":\"1999-07-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.137},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.234},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.211},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.331},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.195},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.172},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.261},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.292},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.262},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.405},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.375},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.35},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.463},{\"date\":\"1999-08-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.146},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.246},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.222},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.349},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.206},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.183},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.275},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.302},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.27},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.424},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.387},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.361},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.482},{\"date\":\"1999-08-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.156},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.275},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.251},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.369},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.236},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.214},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.299},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.331},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.3},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.441},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.413},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.388},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.501},{\"date\":\"1999-08-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.178},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.273},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.25},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.368},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.234},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.212},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.298},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.33},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.301},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.441},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.414},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.389},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.501},{\"date\":\"1999-08-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.186},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.273},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.253},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.361},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.233},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.214},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.29},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.329},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.302},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.433},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.416},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.393},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.497},{\"date\":\"1999-08-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.194},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.282},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.262},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.362},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.242},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.223},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.297},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.338},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.311},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.432},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.423},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.401},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.499},{\"date\":\"1999-09-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.198},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.29},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.274},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.359},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.25},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.234},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.294},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.346},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.325},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.428},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.432},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.415},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.497},{\"date\":\"1999-09-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.209},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.307},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.292},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.369},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.268},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.252},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.311},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.365},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.345},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.433},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.448},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.431},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.506},{\"date\":\"1999-09-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.226},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.302},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.288},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.359},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.262},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.248},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.302},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.359},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.342},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.422},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.444},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.429},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.497},{\"date\":\"1999-09-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.226},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.296},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.282},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.357},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.255},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.242},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.297},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.353},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.335},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.421},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.441},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.425},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.5},{\"date\":\"1999-10-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.234},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.29},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.275},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.36},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.249},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.234},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.299},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.347},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.327},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.424},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.435},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.418},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.502},{\"date\":\"1999-10-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.228},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.277},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.261},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.352},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.236},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.22},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.288},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.334},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.314},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.416},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.424},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.407},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.495},{\"date\":\"1999-10-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.224},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.277},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.265},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.34},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.237},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.225},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.276},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.336},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.319},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.404},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.424},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.41},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.485},{\"date\":\"1999-10-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.226},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.271},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.258},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.334},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.23},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.218},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.272},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.329},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.312},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.398},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.417},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.403},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.477},{\"date\":\"1999-11-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.229},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.274},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.262},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.33},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.233},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.222},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.271},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.33},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.314},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.393},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.418},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.405},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.474},{\"date\":\"1999-11-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.234},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.292},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.281},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.341},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.251},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.24},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.284},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.35},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.334},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.404},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.436},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.425},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.481},{\"date\":\"1999-11-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.261},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.309},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.298},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.355},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.269},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.258},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.298},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.367},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.353},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.419},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.451},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.44},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.494},{\"date\":\"1999-11-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.289},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.315},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.303},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.369},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.274},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.262},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.312},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.372},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.357},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.432},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.457},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.445},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.508},{\"date\":\"1999-11-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.304},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.313},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.301},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.372},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.273},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.26},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.313},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.37},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.353},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.437},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.458},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.445},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.514},{\"date\":\"1999-12-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.294},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.315},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.303},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.371},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.275},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.263},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.312},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.372},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.356},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.435},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.459},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.446},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.51},{\"date\":\"1999-12-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.288},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.31},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.298},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.365},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.269},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.257},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.305},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.367},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.351},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.429},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.455},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.442},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.507},{\"date\":\"1999-12-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.287},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.314},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.304},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.363},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.273},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.263},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.303},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.372},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.358},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.428},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.459},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.448},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.505},{\"date\":\"1999-12-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.298},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.312},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.301},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.365},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.272},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.26},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.306},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.369},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.353},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.428},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.457},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.444},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.507},{\"date\":\"2000-01-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.309},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.304},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.292},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.36},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.264},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.252},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.301},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.361},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.345},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.423},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.45},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.437},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.502},{\"date\":\"2000-01-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.307},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.318},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.308},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.36},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.277},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.268},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.303},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.375},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.362},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.423},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.461},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.451},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.503},{\"date\":\"2000-01-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.307},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.354},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.346},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.385},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.315},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.307},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.335},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.409},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.397},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.445},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.493},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.484},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.524},{\"date\":\"2000-01-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.418},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.355},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.346},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.394},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.316},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.307},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.34},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.411},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.398},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.457},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.496},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.485},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.535},{\"date\":\"2000-01-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.439},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.364},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.358},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.397},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.325},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.319},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.343},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.417},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.406},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.458},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.504},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.496},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.538},{\"date\":\"2000-02-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.47},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.394},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.389},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.419},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.356},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.35},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.37},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.447},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.438},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.477},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.533},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.527},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.554},{\"date\":\"2000-02-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.456},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.443},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.438},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.46},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.406},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.4},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.414},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.495},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.487},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.519},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.577},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.573},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.59},{\"date\":\"2000-02-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.456},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.458},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.45},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.489},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.421},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.413},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.438},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.511},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.499},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.551},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.593},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.584},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.619},{\"date\":\"2000-02-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.461},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.539},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.528},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.582},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.501},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.49},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.529},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.593},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.579},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.643},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.674},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.663},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.709},{\"date\":\"2000-03-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.49},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.566},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.55},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.637},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.527},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.511},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.574},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.621},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.6},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.703},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.705},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.689},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.764},{\"date\":\"2000-03-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.496},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.569},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.548},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.662},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.529},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.508},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.592},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.624},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.597},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.731},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.711},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.689},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.791},{\"date\":\"2000-03-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.479},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.549},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.524},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.655},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.508},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.484},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.583},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.606},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.576},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.725},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.693},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.667},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.786},{\"date\":\"2000-03-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.451},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.543},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.518},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.647},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.503},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.478},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.578},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.602},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.572},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.717},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.687},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.661},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.776},{\"date\":\"2000-04-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.442},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.516},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.487},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.63},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.475},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.447},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.559},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.575},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.541},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.702},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.662},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.632},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.763},{\"date\":\"2000-04-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.419},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.486},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.455},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.608},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.444},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.415},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.534},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.544},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.508},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.68},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.634},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.601},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.745},{\"date\":\"2000-04-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.398},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.478},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.445},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.599},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.437},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.406},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.532},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.535},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.495},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.669},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.622},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.587},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.734},{\"date\":\"2000-04-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.428},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.461},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.426},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.587},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.42},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.386},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.522},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.517},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.477},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.655},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.607},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.57},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.723},{\"date\":\"2000-05-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.418},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.495},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.467},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.593},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.455},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.427},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.535},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.552},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.518},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.659},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.638},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.609},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.725},{\"date\":\"2000-05-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.402},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.531},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.505},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.609},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.492},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.466},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.562},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.586},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.556},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.67},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.672},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.646},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.738},{\"date\":\"2000-05-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.415},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.566},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.533},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.623},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.527},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.494},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.587},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.618},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.581},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.682},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.703},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.674},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.752},{\"date\":\"2000-05-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.432},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.579},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.547},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.642},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.54},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.509},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.603},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.63},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.594},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.697},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.713},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.684},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.767},{\"date\":\"2000-05-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.431},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.599},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.571},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.66},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.563},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.535},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.627},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.646},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.615},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.712},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.73},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.703},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.787},{\"date\":\"2000-06-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.419},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.664},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.64},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.692},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.631},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.607},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.669},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.706},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.68},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.74},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.785},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.763},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.816},{\"date\":\"2000-06-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.411},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.711},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.695},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.715},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.681},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.664},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.694},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.751},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.73},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.762},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.827},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.811},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.838},{\"date\":\"2000-06-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.423},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.691},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.674},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.712},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.658},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.641},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.679},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.733},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.712},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.762},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.813},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.796},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.839},{\"date\":\"2000-06-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.432},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.661},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.642},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.716},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.625},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.606},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.666},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.707},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.682},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.774},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.792},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.772},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.847},{\"date\":\"2000-07-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.453},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.63},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.608},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.709},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.593},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.571},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.651},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.682},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.654},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.769},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.769},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.745},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.843},{\"date\":\"2000-07-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.449},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.586},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.561},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.686},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.546},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.521},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.62},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.64},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.61},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.749},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.733},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.708},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.826},{\"date\":\"2000-07-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.435},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.562},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.539},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.663},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.52},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.499},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.59},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.619},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.591},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.728},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.711},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.687},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.807},{\"date\":\"2000-07-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.424},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.514},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.489},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.631},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.471},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.447},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.553},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.573},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.541},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.699},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.668},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.641},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.78},{\"date\":\"2000-07-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.408},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.504},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.479},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.619},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.462},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.437},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.54},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.564},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.532},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.686},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.656},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.627},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.77},{\"date\":\"2000-08-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.41},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.489},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.46},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.614},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.447},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.42},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.536},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.546},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.511},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.682},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.639},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.607},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.763},{\"date\":\"2000-08-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.447},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.508},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.484},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.614},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.468},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.444},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.54},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.565},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.534},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.679},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.654},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.626},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.759},{\"date\":\"2000-08-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.471},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.521},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.495},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.629},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.481},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.456},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.555},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.577},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.544},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.697},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.664},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.635},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.771},{\"date\":\"2000-08-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.536},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.568},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.539},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.675},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.53},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.502},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.605},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.622},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.586},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.743},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.706},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.674},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.808},{\"date\":\"2000-09-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.609},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.598},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.571},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.704},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.561},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.535},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.632},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.65},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.615},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.773},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.735},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.704},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.837},{\"date\":\"2000-09-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.629},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.599},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.575},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.696},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.562},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.539},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.624},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.65},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.619},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.765},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.733},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.706},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.827},{\"date\":\"2000-09-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.653},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.586},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.562},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.69},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.548},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.525},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.615},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.639},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.607},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.761},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.726},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.698},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.825},{\"date\":\"2000-09-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.657},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.563},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.536},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.68},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.524},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.498},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.601},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.616},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.58},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.754},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.704},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.674},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.817},{\"date\":\"2000-10-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.625},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.541},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.511},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.668},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.502},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.473},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.589},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.593},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.554},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.742},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.683},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.649},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.806},{\"date\":\"2000-10-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.614},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.578},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.554},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.675},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.539},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.516},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.603},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.631},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.6},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.746},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.717},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.691},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.811},{\"date\":\"2000-10-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.67},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.588},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.568},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.67},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.551},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.532},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.599},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.641},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.614},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.74},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.724},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.7},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.806},{\"date\":\"2000-10-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.648},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.584},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.561},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.675},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.545},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.523},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.606},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.637},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.608},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.743},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.722},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.696},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.811},{\"date\":\"2000-10-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.629},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.565},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.54},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.666},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.526},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.502},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.594},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.618},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.586},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.735},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.706},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.679},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.804},{\"date\":\"2000-11-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.61},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.562},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.539},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.657},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.523},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.501},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.587},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.616},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.587},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.727},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.701},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.677},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.792},{\"date\":\"2000-11-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.603},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.55},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.525},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.648},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.51},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.487},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.579},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.605},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.573},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.719},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.69},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.664},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.786},{\"date\":\"2000-11-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.627},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.549},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.527},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.64},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.51},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.489},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.571},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.603},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.575},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.708},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.69},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.666},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.779},{\"date\":\"2000-11-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.645},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.526},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.503},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.623},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.486},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.464},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.55},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.581},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.55},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.695},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.668},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.643},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.764},{\"date\":\"2000-12-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.622},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.49},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.465},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.598},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.449},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.425},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.524},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.547},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.514},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.672},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.636},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.608},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.743},{\"date\":\"2000-12-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.577},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.462},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.436},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.575},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.422},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.396},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.499},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.518},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.485},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.647},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.609},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.579},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.727},{\"date\":\"2000-12-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.545},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.453},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.426},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.564},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.414},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.388},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.491},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.502},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.467},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.633},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.597},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.566},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.711},{\"date\":\"2000-12-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.515},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.446},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.416},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.558},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.406},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.377},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.489},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.503},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.467},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.628},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.59},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.559},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.704},{\"date\":\"2001-01-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.522},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.465},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.439},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.558},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.425},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.4},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.492},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.523},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.492},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.628},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.606},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.581},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.696},{\"date\":\"2001-01-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.52},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.513},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.497},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.569},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.474},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.458},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.511},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.566},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.546},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.631},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.656},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.639},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.71},{\"date\":\"2001-01-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.509},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.511},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.496},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.565},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.471},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.456},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.509},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.562},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.543},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.627},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.656},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.64},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.708},{\"date\":\"2001-01-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.528},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.5},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.486},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.554},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.46},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.446},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.497},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.551},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.533},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.616},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.644},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.628},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.697},{\"date\":\"2001-01-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.539},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.483},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.466},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.551},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.443},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.426},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.489},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.538},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.517},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.617},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.63},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.611},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.696},{\"date\":\"2001-02-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.52},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.515},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.499},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.575},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.476},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.46},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.514},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.568},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.547},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.64},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.656},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.639},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.714},{\"date\":\"2001-02-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.518},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.489},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.468},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.573},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.449},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.429},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.507},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.543},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.517},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.641},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.634},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.611},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.713},{\"date\":\"2001-02-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.48},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.471},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.45},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.561},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.431},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.41},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.491},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.526},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.498},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.631},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.618},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.594},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.703},{\"date\":\"2001-02-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.451},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.457},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.433},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.562},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.417},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.393},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.489},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.513},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.482},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.633},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.605},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.578},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.701},{\"date\":\"2001-03-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.42},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.453},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.426},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.558},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.412},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.387},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.485},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.51},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.477},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.632},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.598},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.569},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.699},{\"date\":\"2001-03-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.406},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.444},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.416},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.553},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.404},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.377},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.482},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.5},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.464},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.628},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.589},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.558},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.695},{\"date\":\"2001-03-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.392},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.445},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.418},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.545},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.404},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.379},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.475},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.502},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.468},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.621},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.59},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.56},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.686},{\"date\":\"2001-03-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.379},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.482},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.451},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.581},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.442},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.411},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.518},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.54},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.502},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.656},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.624},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.591},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.718},{\"date\":\"2001-04-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.391},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.54},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.509},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.632},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.5},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.469},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.575},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.596},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.562},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.702},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.682},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.651},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.763},{\"date\":\"2001-04-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.397},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.61},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.575},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.673},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.571},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.535},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.631},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.665},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.625},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.736},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.753},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.718},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.817},{\"date\":\"2001-04-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.437},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.658},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.625},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.736},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.619},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.586},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.696},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.712},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.676},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.792},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.797},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.766},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.873},{\"date\":\"2001-04-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.443},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.665},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.624},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.765},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.626},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.585},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.724},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.717},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.671},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.823},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.806},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.765},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.907},{\"date\":\"2001-04-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.442},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.739},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.695},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.833},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.703},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.659},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.794},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.788},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.738},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.889},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.869},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.826},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.965},{\"date\":\"2001-05-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.47},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.748},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.697},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.861},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.713},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.663},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.821},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.793},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.735},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.918},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.876},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.824},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.995},{\"date\":\"2001-05-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.491},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.724},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.673},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.842},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.687},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.637},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.802},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.773},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.715},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.903},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.858},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.805},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.981},{\"date\":\"2001-05-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.494},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.739},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.691},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.849},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.704},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.656},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.807},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.787},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.73},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.91},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.871},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.819},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.991},{\"date\":\"2001-05-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.529},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.715},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.665},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.831},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.679},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.63},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.79},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.762},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.703},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.893},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.847},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.794},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.972},{\"date\":\"2001-06-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.514},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.688},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.617},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.828},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.647},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.58},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.783},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.741},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.66},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.897},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.829},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.754},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.968},{\"date\":\"2001-06-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.486},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.644},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.566},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.797},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.601},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.526},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.75},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.7},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.611},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.869},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.792},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.71},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.942},{\"date\":\"2001-06-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.48},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.583},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.495},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.757},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.538},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.454},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.708},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.644},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.546},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.833},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.737},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.645},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.907},{\"date\":\"2001-06-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.447},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.52},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.427},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.703},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.474},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.384},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.654},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.585},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.482},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.784},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.678},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.582},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.855},{\"date\":\"2001-07-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.407},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.484},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.392},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.664},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.437},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.35},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.613},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.55},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.448},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.746},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.641},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.544},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.821},{\"date\":\"2001-07-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.392},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.459},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.372},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.63},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.413},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.33},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.579},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.524},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.428},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.71},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.616},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.525},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.786},{\"date\":\"2001-07-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.38},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.44},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.358},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.601},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.395},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.318},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.55},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.5},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.408},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.677},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.595},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.505},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.761},{\"date\":\"2001-07-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.348},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.428},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.358},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.565},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.384},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.319},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.514},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.486},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.406},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.641},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.581},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.503},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.725},{\"date\":\"2001-07-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.347},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.419},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.358},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.539},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.376},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.319},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.49},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.476},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.406},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.611},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.57},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.501},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.696},{\"date\":\"2001-08-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.345},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.434},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.385},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.53},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.392},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.347},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.482},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.487},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.43},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.596},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.58},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.524},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.684},{\"date\":\"2001-08-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.367},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.467},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.435},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.53},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.427},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.399},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.485},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.516},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.476},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.591},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.608},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.57},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.677},{\"date\":\"2001-08-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.394},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.523},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.51},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.547},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.488},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.48},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.505},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.561},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.538},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.604},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.647},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.626},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.686},{\"date\":\"2001-08-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.452},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.579},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.568},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.6},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.545},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.538},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.559},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.619},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.599},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.659},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.698},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.683},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.728},{\"date\":\"2001-09-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.488},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.562},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.543},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.601},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.527},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.511},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.559},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.604},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.575},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.661},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.686},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.662},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.731},{\"date\":\"2001-09-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.492},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.564},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.548},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.595},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.529},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.516},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.554},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.607},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.58},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.658},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.689},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.668},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.727},{\"date\":\"2001-09-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.527},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.522},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.495},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.577},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.485},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.46},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.534},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.569},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.532},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.641},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.653},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.622},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.711},{\"date\":\"2001-09-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.473},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.455},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.417},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.531},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.416},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.381},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.487},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.503},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.455},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.596},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.591},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.549},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.669},{\"date\":\"2001-10-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.39},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.393},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.347},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.483},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.352},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.31},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.438},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.444},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.39},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.548},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.535},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.486},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.623},{\"date\":\"2001-10-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.371},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.351},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.303},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.445},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.309},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.264},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.401},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.405},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.349},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.512},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.495},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.447},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.585},{\"date\":\"2001-10-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.353},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.307},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.26},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.4},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.265},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.221},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.355},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.361},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.306},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.467},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.452},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.402},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.544},{\"date\":\"2001-10-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.318},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.277},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.233},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.365},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.235},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.193},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.319},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.331},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.278},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.432},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.423},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.376},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.509},{\"date\":\"2001-10-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.31},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.249},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.209},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.327},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.206},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.17},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.28},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.303},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.256},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.394},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.395},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.353},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.474},{\"date\":\"2001-11-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.291},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.224},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.186},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.298},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.182},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.147},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.253},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.278},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.233},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.365},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.368},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.328},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.442},{\"date\":\"2001-11-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.269},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.208},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.178},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.268},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.167},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.14},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.222},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.26},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.222},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.333},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.351},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.317},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.412},{\"date\":\"2001-11-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.252},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.168},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.136},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.231},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.127},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.097},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.186},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.219},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.18},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.295},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.312},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.277},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.376},{\"date\":\"2001-11-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.223},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.149},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.122},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.201},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.108},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.084},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.156},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.2},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.167},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.264},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.291},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.263},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.344},{\"date\":\"2001-12-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.194},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.136},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.114},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.179},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.095},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.075},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.134},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.187},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.161},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.239},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.28},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.257},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.322},{\"date\":\"2001-12-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.173},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.101},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.082},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.139},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.059},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.042},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.093},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.154},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.13},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.201},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.249},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.229},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.286},{\"date\":\"2001-12-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.143},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.113},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.103},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.133},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.072},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.063},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.088},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.165},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.151},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.192},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.257},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.245},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.279},{\"date\":\"2001-12-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.154},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.137},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.135},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.14},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.096},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.096},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.097},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.187},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.182},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.196},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.277},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.275},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.282},{\"date\":\"2001-12-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.169},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.152},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.148},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.16},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.112},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.109},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.117},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.202},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.194},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.217},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.293},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.289},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.301},{\"date\":\"2002-01-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.168},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.152},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.139},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.178},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.111},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.099},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.134},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.202},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.185},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.236},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.299},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.287},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.32},{\"date\":\"2002-01-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.159},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.146},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.127},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.185},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.105},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.087},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.141},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.198},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.175},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.244},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.289},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.27},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.325},{\"date\":\"2002-01-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.14},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.142},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.12},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.185},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.101},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.081},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.142},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.194},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.167},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.246},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.286},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.264},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.325},{\"date\":\"2002-01-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.144},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.157},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.137},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.196},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.116},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.098},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.154},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.209},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.184},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.258},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.297},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.278},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.333},{\"date\":\"2002-02-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.144},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.148},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.125},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.195},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.107},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.085},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.152},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.201},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.172},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.258},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.291},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.269},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.333},{\"date\":\"2002-02-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.153},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.157},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.129},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.213},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.116},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.089},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.169},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.21},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.175},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.277},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.3},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.272},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.352},{\"date\":\"2002-02-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.156},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.157},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.126},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.219},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.116},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.087},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.174},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.21},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.172},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.285},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.301},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.27},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.359},{\"date\":\"2002-02-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.154},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.185},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.157},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.239},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.144},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.118},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.196},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.238},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.204},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.304},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.326},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.299},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.377},{\"date\":\"2002-03-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.173},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.262},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.232},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.322},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.223},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.194},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.279},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.316},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.277},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.39},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.398},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.368},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.453},{\"date\":\"2002-03-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.216},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.328},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.3},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.384},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.288},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.262},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.341},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.382},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.346},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.451},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.466},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.439},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.516},{\"date\":\"2002-03-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.251},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.382},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.346},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.451},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.342},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.308},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.41},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.435},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.393},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.515},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.519},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.486},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.579},{\"date\":\"2002-03-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.281},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.412},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.379},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.479},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.371},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.339},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.436},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.468},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.428},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.545},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.554},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.522},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.613},{\"date\":\"2002-04-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.295},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.454},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.422},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.518},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.413},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.382},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.476},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.509},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.472},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.582},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.595},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.564},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.651},{\"date\":\"2002-04-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.323},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.446},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.408},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.522},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.404},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.368},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.478},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.502},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.457},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.588},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.591},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.555},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.659},{\"date\":\"2002-04-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.32},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.446},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.407},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.523},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.404},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.367},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.478},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.502},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.457},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.589},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.591},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.553},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.661},{\"date\":\"2002-04-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.304},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.435},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.393},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.519},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.393},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.353},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.475},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.49},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.44},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.584},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.581},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.54},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.659},{\"date\":\"2002-04-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.302},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.437},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.396},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.518},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.395},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.356},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.474},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.493},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.446},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.582},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.583},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.542},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.658},{\"date\":\"2002-05-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.305},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.431},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.389},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.512},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.388},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.349},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.467},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.487},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.439},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.578},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.577},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.535},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.655},{\"date\":\"2002-05-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.299},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.439},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.4},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.517},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.397},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.36},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.473},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.494},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.449},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.579},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.583},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.543},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.657},{\"date\":\"2002-05-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.309},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.429},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.389},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.509},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.387},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.348},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.465},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.484},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.438},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.572},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.576},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.536},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.65},{\"date\":\"2002-05-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.308},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.433},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.393},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.512},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.392},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.353},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.469},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.488},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.442},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.574},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.576},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.536},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.65},{\"date\":\"2002-06-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.3},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.417},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.372},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.505},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.375},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.332},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.462},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.47},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.42},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.566},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.561},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.518},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.642},{\"date\":\"2002-06-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.286},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.419},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.375},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.508},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.378},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.335},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.464},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.474},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.423},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.573},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.563},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.518},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.646},{\"date\":\"2002-06-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.275},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.425},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.381},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.512},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.384},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.342},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.468},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.48},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.428},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.579},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.567},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.523},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.65},{\"date\":\"2002-06-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.281},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.433},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.396},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.506},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.392},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.357},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.461},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.489},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.444},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.574},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.575},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.538},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.644},{\"date\":\"2002-07-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.289},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.423},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.384},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.501},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.382},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.345},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.456},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.478},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.431},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.569},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.567},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.527},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.641},{\"date\":\"2002-07-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.294},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.435},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.399},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.506},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.394},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.361},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.461},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.488},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.444},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.573},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.575},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.538},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.644},{\"date\":\"2002-07-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.3},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.451},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.419},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.513},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.41},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.381},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.469},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.503},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.465},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.578},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.592},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.559},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.653},{\"date\":\"2002-07-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.311},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.447},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.414},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.513},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.407},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.376},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.468},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.5},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.459},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.577},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.589},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.553},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.654},{\"date\":\"2002-07-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.303},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.437},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.395},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.52},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.395},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.355},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.475},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.491},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.443},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.584},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.582},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.538},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.662},{\"date\":\"2002-08-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.304},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.435},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.395},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.514},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.393},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.355},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.468},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.488},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.441},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.579},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.58},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.538},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.658},{\"date\":\"2002-08-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.303},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.434},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.397},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.508},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.392},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.357},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.462},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.488},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.443},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.574},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.58},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.54},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.652},{\"date\":\"2002-08-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.333},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.444},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.404},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.525},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.403},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.365},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.479},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.498},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.45},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.59},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.589},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.546},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.668},{\"date\":\"2002-08-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.37},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.436},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.393},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.521},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.394},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.353},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.476},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.489},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.438},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.586},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.581},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.536},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.665},{\"date\":\"2002-09-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.388},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.437},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.395},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.52},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.395},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.355},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.475},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.49},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.441},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.585},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.582},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.539},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.662},{\"date\":\"2002-09-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.396},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.442},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.406},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.515},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.401},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.367},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.469},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.496},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.452},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.58},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.587},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.549},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.658},{\"date\":\"2002-09-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.414},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.436},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.396},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.516},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.395},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.357},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.472},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.488},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.441},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.579},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.582},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.541},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.658},{\"date\":\"2002-09-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.417},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.455},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.424},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.515},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.413},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.385},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.47},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.508},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.471},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.579},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.6},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.568},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.658},{\"date\":\"2002-09-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.438},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.48},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.456},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.527},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.439},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.416},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.484},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.531},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.502},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.587},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.623},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.598},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.669},{\"date\":\"2002-10-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.46},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.481},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.461},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.522},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.44},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.422},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.478},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.533},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.507},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.581},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.625},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.603},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.665},{\"date\":\"2002-10-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.461},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.499},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.482},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.532},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.458},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.443},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.489},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.549},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.527},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.59},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.64},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.622},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.671},{\"date\":\"2002-10-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.469},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.485},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.466},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.524},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.444},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.427},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.48},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.535},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.51},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.583},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.629},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.609},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.668},{\"date\":\"2002-10-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.456},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.489},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.466},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.534},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.448},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.427},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.489},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.541},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.513},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.596},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.632},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.608},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.676},{\"date\":\"2002-11-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.442},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.48},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.445},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.55},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.439},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.406},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.505},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.531},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.489},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.612},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.624},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.588},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.693},{\"date\":\"2002-11-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.427},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.451},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.41},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.531},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.409},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.37},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.486},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.503},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.456},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.594},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.599},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.556},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.679},{\"date\":\"2002-11-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.405},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.423},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.376},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.515},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.38},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.336},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.468},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.476},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.423},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.579},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.573},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.524},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.665},{\"date\":\"2002-11-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.405},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.408},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.358},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.507},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.364},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.316},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.459},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.464},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.405},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.575},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.562},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.509},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.66},{\"date\":\"2002-12-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.407},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.404},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.357},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.497},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.36},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.316},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.448},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.459},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.405},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.563},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.557},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.506},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.651},{\"date\":\"2002-12-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.405},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.407},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.363},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.494},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.363},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.322},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.446},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.462},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.411},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.56},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.558},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.51},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.648},{\"date\":\"2002-12-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.401},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.443},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.411},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.507},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.401},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.371},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.46},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.497},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.459},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.569},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.592},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.557},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.658},{\"date\":\"2002-12-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.44},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.484},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.457},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.536},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.441},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.417},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.491},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.537},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.506},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.598},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.63},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.602},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.683},{\"date\":\"2002-12-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.491},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.487},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.453},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.554},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.444},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.412},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.507},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.541},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.502},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.616},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.639},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.603},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.704},{\"date\":\"2003-01-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.501},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.496},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.463},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.562},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.454},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.423},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.516},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.551},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.512},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.625},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.645},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.61},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.71},{\"date\":\"2003-01-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.478},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.502},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.463},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.579},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.459},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.422},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.534},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.557},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.512},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.643},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.651},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.612},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.724},{\"date\":\"2003-01-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.48},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.515},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.478},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.589},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.473},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.437},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.544},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.569},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.525},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.653},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.663},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.624},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.733},{\"date\":\"2003-01-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.492},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.569},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.539},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.629},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.527},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.499},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.585},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.623},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.588},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.69},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.713},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.683},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.769},{\"date\":\"2003-02-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.542},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.649},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.623},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.701},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.607},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.582},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.656},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.705},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.673},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.765},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.795},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.769},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.844},{\"date\":\"2003-02-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.662},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.701},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.668},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.766},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.66},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.63},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.722},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.754},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.716},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.83},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.841},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.809},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.903},{\"date\":\"2003-02-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.704},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.699},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.656},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.785},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.658},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.617},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.741},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.752},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.7},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.852},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.841},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.797},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.921},{\"date\":\"2003-02-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.709},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.726},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.679},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.821},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.686},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.641},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.778},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.782},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.725},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.893},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.865},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.819},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.952},{\"date\":\"2003-03-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.753},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.752},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.701},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.854},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.712},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.663},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.812},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.809},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.748},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.927},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.889},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.839},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.982},{\"date\":\"2003-03-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.771},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.768},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.712},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.881},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.728},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.673},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.838},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.826},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.758},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.956},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.906},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.852},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.009},{\"date\":\"2003-03-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.752},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.732},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.665},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.864},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.69},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.626},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.82},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.791},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.712},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.943},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.874},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.808},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.997},{\"date\":\"2003-03-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.662},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.692},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.618},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.841},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.649},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.577},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.795},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.753},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.666},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.92},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.84},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.766},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.977},{\"date\":\"2003-03-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.602},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.673},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.597},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.824},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.63},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.557},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.778},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.735},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.645},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.907},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.819},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.743},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.96},{\"date\":\"2003-04-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.554},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.639},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.561},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.794},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.595},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.521},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.747},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.702},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.611},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.876},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.788},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.71},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.934},{\"date\":\"2003-04-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.539},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.618},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.544},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.764},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.574},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.504},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.718},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.678},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.593},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.842},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.766},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.691},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.904},{\"date\":\"2003-04-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.529},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.6},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.526},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.748},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.557},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.486},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.701},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.659},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.574},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.824},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.748},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.673},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.888},{\"date\":\"2003-04-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.508},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.556},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.482},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.706},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.513},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.441},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.659},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.615},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.528},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.782},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.706},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.629},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.848},{\"date\":\"2003-05-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.484},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.534},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.467},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.668},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.491},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.427},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.62},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.592},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.514},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.743},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.682},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.612},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.813},{\"date\":\"2003-05-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.444},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.539},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.482},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.653},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.498},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.444},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.607},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.592},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.524},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.725},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.682},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.621},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.797},{\"date\":\"2003-05-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.443},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.528},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.477},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.63},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.487},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.439},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.584},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.58},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.517},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.699},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.672},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.618},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.772},{\"date\":\"2003-05-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.434},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.514},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.466},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.61},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.473},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.428},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.564},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.566},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.507},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.68},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.657},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.605},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.754},{\"date\":\"2003-06-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.423},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.53},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.492},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.605},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.49},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.456},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.56},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.58},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.534},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.671},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.668},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.626},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.745},{\"date\":\"2003-06-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.422},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.558},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.517},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.642},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.518},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.48},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.598},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.611},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.561},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.71},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.696},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.654},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.776},{\"date\":\"2003-06-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.432},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.537},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.489},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.636},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.496},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.451},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.591},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.591},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.532},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.707},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.678},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.63},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.769},{\"date\":\"2003-06-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.423},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.528},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.481},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.625},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.487},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.443},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.58},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.584},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.525},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.697},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.67},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.622},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.761},{\"date\":\"2003-06-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.42},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.53},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.485},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.622},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.489},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.448},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.577},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.585},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.529},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.693},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.672},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.626},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.757},{\"date\":\"2003-07-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.428},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.563},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.528},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.635},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.521},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.489},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.589},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.617},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.573},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.704},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.705},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.67},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.772},{\"date\":\"2003-07-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.435},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.566},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.534},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.63},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.524},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.496},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.584},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.621},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.582},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.697},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.71},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.677},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.771},{\"date\":\"2003-07-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.439},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.558},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.527},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.621},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.516},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.488},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.574},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.613},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.574},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.688},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.702},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.67},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.762},{\"date\":\"2003-07-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.438},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.576},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.553},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.625},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.536},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.516},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.579},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.628},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.596},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.691},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.716},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.69},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.765},{\"date\":\"2003-08-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.453},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.611},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.587},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.659},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.571},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.55},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.614},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.663},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.632},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.723},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.749},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.725},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.796},{\"date\":\"2003-08-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.492},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.668},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.631},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.742},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.627},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.594},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.699},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.721},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.676},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.81},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.805},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.769},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.873},{\"date\":\"2003-08-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.498},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.787},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.73},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.902},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.747},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.693},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.859},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.842},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.775},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.971},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.925},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.867},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.032},{\"date\":\"2003-08-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.503},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.786},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.724},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.913},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.746},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.688},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.868},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.841},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.767},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.984},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.924},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.858},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.047},{\"date\":\"2003-09-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.501},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.758},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.69},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.896},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.717},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.653},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.851},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.814},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.733},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.969},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.899},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.828},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.032},{\"date\":\"2003-09-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.488},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.739},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.674},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.869},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.697},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.636},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.824},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.795},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.721},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.938},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.88},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.814},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.004},{\"date\":\"2003-09-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.471},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.686},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.618},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.823},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.643},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.58},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.776},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.742},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.664},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.893},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.834},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.761},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.968},{\"date\":\"2003-09-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.444},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.635},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.564},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.78},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.591},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.524},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.732},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.693},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.613},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.849},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.787},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.713},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.926},{\"date\":\"2003-09-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.429},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.617},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.551},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.751},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.573},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.511},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.704},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.674},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.599},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.82},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.767},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.697},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.899},{\"date\":\"2003-10-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.445},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.611},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.553},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.727},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.568},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.515},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.68},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.664},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.597},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.793},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.758},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.696},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.874},{\"date\":\"2003-10-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.483},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.612},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.564},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.71},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.571},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.527},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.662},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.664},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.607},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.774},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.757},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.703},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.857},{\"date\":\"2003-10-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.502},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.584},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.536},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.682},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.542},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.499},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.634},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.637},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.579},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.747},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.73},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.676},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.832},{\"date\":\"2003-10-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.495},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.577},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.532},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.668},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.535},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.494},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.62},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.63},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.577},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.733},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.723},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.672},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.818},{\"date\":\"2003-11-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.481},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.547},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.502},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.638},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.504},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.464},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.59},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.6},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.547},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.704},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.694},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.643},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.789},{\"date\":\"2003-11-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.476},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.54},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.498},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.625},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.497},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.459},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.577},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.593},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.544},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.69},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.689},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.642},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.776},{\"date\":\"2003-11-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.481},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.554},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.517},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.631},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.512},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.478},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.584},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.608},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.563},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.695},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.701},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.66},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.778},{\"date\":\"2003-11-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.491},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.533},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.493},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.615},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.49},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.454},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.567},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.588},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.54},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.68},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.683},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.639},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.764},{\"date\":\"2003-12-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.476},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.519},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.481},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.597},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.476},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.441},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.549},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.574},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.528},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.662},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.67},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.628},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.747},{\"date\":\"2003-12-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.481},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.509},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.473},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.58},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.465},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.433},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.532},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.563},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.521},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.645},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.66},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.622},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.732},{\"date\":\"2003-12-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.486},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.528},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.499},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.586},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.485},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.459},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.538},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.583},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.549},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.649},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.678},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.647},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.737},{\"date\":\"2003-12-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.504},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.521},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.495},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.575},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.478},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.454},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.527},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.577},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.544},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.639},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.674},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.645},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.727},{\"date\":\"2003-12-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.502},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.552},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.532},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.595},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.51},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.492},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.547},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.605},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.578},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.659},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.701},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.677},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.744},{\"date\":\"2004-01-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.503},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.603},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.585},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.641},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.56},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.544},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.594},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.657},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.634},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.703},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.752},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.733},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.787},{\"date\":\"2004-01-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.551},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.637},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.619},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.674},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.595},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.579},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.628},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.69},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.667},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.735},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.785},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.767},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.819},{\"date\":\"2004-01-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.559},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.664},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.644},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.707},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.622},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.604},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.661},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.717},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.691},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.766},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.813},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.793},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.85},{\"date\":\"2004-01-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.591},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.66},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.632},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.717},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.616},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.591},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.67},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.713},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.679},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.779},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.811},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.783},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.862},{\"date\":\"2004-02-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.581},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.681},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.649},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.746},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.638},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.609},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.7},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.734},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.695},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.809},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.828},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.797},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.887},{\"date\":\"2004-02-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.568},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.69},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.656},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.758},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.648},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.617},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.714},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.744},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.703},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.824},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.836},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.804},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.895},{\"date\":\"2004-02-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.584},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.73},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.68},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.83},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.688},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.641},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.786},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.786},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.726},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.901},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.873},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.827},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.96},{\"date\":\"2004-02-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.595},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.758},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.703},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.871},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.717},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.664},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.826},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.816},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.749},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.945},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.902},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.848},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.001},{\"date\":\"2004-03-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.619},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.78},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.729},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.884},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.738},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.69},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.838},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.838},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.777},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.957},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.925},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.875},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.018},{\"date\":\"2004-03-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.628},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.767},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.714},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.874},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.724},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.675},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.828},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.826},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.762},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.949},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.912},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.86},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.008},{\"date\":\"2004-03-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.617},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.785},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.737},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.883},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.743},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.698},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.838},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.843},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.784},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.956},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.93},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.884},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.017},{\"date\":\"2004-03-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.641},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.8},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.755},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.892},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.758},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.716},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.847},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.857},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.802},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.963},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.944},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.901},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.024},{\"date\":\"2004-03-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.642},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.822},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.776},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.916},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.78},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.737},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.871},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.879},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.823},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.989},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.963},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.919},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.047},{\"date\":\"2004-04-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.648},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.827},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.778},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.927},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.786},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.74},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.883},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.885},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.826},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.001},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.969},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.921},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.057},{\"date\":\"2004-04-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.679},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.853},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.81},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.942},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.813},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.773},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.899},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.909},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.856},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.011},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.991},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.949},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.069},{\"date\":\"2004-04-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.724},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.853},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.812},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.935},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.812},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.774},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.891},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.908},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.859},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.005},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.992},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.952},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.066},{\"date\":\"2004-04-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.718},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.884},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.848},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.957},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.844},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.811},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.913},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.937},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.892},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.024},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.021},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.985},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.089},{\"date\":\"2004-05-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.717},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.979},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.939},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.06},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.941},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.904},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.017},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.031},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.981},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.128},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.111},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.07},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.188},{\"date\":\"2004-05-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.745},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.055},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.015},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.138},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.017},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.979},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.095},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.106},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.056},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.201},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.189},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.147},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.267},{\"date\":\"2004-05-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.763},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.104},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.063},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.189},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.064},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.026},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.145},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.155},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.104},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.253},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.242},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.199},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.322},{\"date\":\"2004-05-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.761},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.092},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.041},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.195},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.051},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.004},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.15},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.145},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.084},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.262},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.234},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.181},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.332},{\"date\":\"2004-05-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.746},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.075},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.021},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.186},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.034},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.983},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.14},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.128},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.064},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.253},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.219},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.163},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.324},{\"date\":\"2004-06-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.734},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.029},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.966},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.157},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.985},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.926},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.11},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.086},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.014},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.227},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.178},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.114},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.298},{\"date\":\"2004-06-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.711},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.981},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.914},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.12},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.937},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.873},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.072},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.039},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.961},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.189},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.134},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.064},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.265},{\"date\":\"2004-06-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.7},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.965},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.9},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.096},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.921},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.859},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.049},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.021},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.947},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.163},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.118},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.051},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.24},{\"date\":\"2004-06-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.7},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.939},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.875},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.068},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.895},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.835},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.02},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.995},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.922},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.136},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.091},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.025},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.215},{\"date\":\"2004-07-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.716},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.959},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.907},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.065},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.917},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.869},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.017},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.013},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.951},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.134},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.108},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.052},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.213},{\"date\":\"2004-07-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.74},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.971},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.926},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.062},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.928},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.888},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.014},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.025},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.971},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.13},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.119},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.07},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.208},{\"date\":\"2004-07-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.744},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.948},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.901},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.043},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.905},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.861},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.996},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.003},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.948},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.109},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.097},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.048},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.189},{\"date\":\"2004-07-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.754},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.93},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.885},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.022},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.888},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.846},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.975},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.985},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.931},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.089},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.078},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.029},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.168},{\"date\":\"2004-08-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.78},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.92},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.878},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.005},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.877},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.839},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.957},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.973},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.923},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.072},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.068},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.022},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.154},{\"date\":\"2004-08-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.814},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.917},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.881},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.992},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.875},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.842},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.945},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.97},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.925},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.056},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.064},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.023},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.139},{\"date\":\"2004-08-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.825},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.926},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.892},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.995},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.884},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.854},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.947},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.978},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.936},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.059},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.071},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.033},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.142},{\"date\":\"2004-08-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.874},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.909},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.866},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.997},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.866},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.827},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.949},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.964},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.911},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.067},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.056},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.01},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.142},{\"date\":\"2004-08-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.871},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.893},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.854},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.973},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.85},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.815},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.924},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.949},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.901},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.043},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.043},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.121},{\"date\":\"2004-09-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.869},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.889},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.852},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.963},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.846},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.813},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.915},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.945},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.9},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.03},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.037},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.998},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.11},{\"date\":\"2004-09-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.874},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.908},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.878},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.969},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.866},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.839},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.922},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.962},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.923},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.036},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.054},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.023},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.112},{\"date\":\"2004-09-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.912},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.959},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.934},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.009},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.917},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.895},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.963},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.012},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.979},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.076},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.103},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.077},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.151},{\"date\":\"2004-09-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.012},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.98},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.941},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.058},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.938},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.902},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.012},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.035},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.987},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.127},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.125},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.087},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.195},{\"date\":\"2004-10-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.053},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.035},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.988},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.13},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.993},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.949},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.086},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.091},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.035},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.2},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.179},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.134},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.263},{\"date\":\"2004-10-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.092},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.077},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.024},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.187},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.035},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.984},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.142},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.133},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.07},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.256},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.222},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.17},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.32},{\"date\":\"2004-10-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.18},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.074},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.02},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.185},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.032},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.98},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.14},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.133},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.068},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.258},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.221},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.169},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.317},{\"date\":\"2004-10-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.212},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.076},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.026},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.179},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.034},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.986},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.133},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.134},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.074},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.252},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.223},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.173},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.314},{\"date\":\"2004-11-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.206},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.045},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.992},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.154},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.001},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.951},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.107},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.105},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.042},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.226},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.196},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.144},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.292},{\"date\":\"2004-11-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.163},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.014},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.96},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.124},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.969},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.918},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.077},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.075},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.013},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.197},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.168},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.114},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.267},{\"date\":\"2004-11-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.132},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.992},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.943},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.094},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.948},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.901},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.046},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.051},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.993},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.165},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.146},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.097},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.238},{\"date\":\"2004-11-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.116},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.989},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.945},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.078},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.945},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.903},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.031},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.047},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.994},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.149},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.142},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.099},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.221},{\"date\":\"2004-11-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.116},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.956},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.91},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.05},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.911},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.868},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.002},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.014},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.96},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.12},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.111},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.065},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.196},{\"date\":\"2004-12-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.069},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.893},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.842},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.998},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.847},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.799},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.948},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.953},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.893},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.069},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.053},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.002},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.148},{\"date\":\"2004-12-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.997},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.861},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.82},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.944},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.815},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.777},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.894},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.921},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.873},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.014},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.02},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.978},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.099},{\"date\":\"2004-12-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.984},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.838},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.798},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.919},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.791},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.754},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.869},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.898},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.851},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.988},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.998},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.958},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.073},{\"date\":\"2004-12-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.987},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.824},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.788},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.898},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.778},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.745},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.848},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.882},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.839},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.965},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.985},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.948},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.055},{\"date\":\"2005-01-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.957},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.837},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.813},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.887},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.793},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.771},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.838},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.893},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.862},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.952},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.993},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.968},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.041},{\"date\":\"2005-01-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.934},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.863},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.843},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.902},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.819},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.802},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.854},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.918},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.893},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.965},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.017},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.997},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.056},{\"date\":\"2005-01-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.952},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.896},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.88},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.929},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.853},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.839},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.882},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.95},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.929},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.991},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.046},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.03},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.078},{\"date\":\"2005-01-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.959},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.953},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.936},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.988},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.911},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.896},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.941},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.006},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.982},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.052},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.103},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.087},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.133},{\"date\":\"2005-01-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.992},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.952},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.93},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.996},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.909},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.89},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.949},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.006},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.978},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.06},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.102},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.082},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.14},{\"date\":\"2005-02-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.983},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.941},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.914},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.996},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.898},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.873},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.949},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.995},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.96},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.062},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.091},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.065},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.139},{\"date\":\"2005-02-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.986},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.948},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.919},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.007},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.905},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.878},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.961},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.004},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.966},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.079},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.096},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.069},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.146},{\"date\":\"2005-02-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.02},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.969},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.943},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.023},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.928},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.904},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.978},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.025},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.989},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.094},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.113},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.088},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.16},{\"date\":\"2005-02-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.118},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.04},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.018},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.086},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.999},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.979},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.041},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.094},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.063},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.153},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.182},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.162},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.221},{\"date\":\"2005-03-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.168},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.098},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.078},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.138},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.056},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.039},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.094},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.151},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.123},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.206},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.241},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.224},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.273},{\"date\":\"2005-03-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.194},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.149},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.134},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.181},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.109},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.095},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.138},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.2},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.177},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.245},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.292},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.281},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.313},{\"date\":\"2005-03-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.244},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.194},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.177},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.229},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.153},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.137},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.186},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.25},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.225},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.297},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.336},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.322},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.362},{\"date\":\"2005-03-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.249},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.258},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.236},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.302},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.217},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.196},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.26},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.313},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.284},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.37},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.4},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.384},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.43},{\"date\":\"2005-04-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.303},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.321},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.29},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.384},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.28},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.251},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.34},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.377},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.337},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.455},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.464},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.436},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.515},{\"date\":\"2005-04-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.316},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.28},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.239},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.364},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.237},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.198},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.319},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.339},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.288},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.438},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.427},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.388},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.498},{\"date\":\"2005-04-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.259},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.279},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.237},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.364},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.236},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.197},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.319},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.337},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.285},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.437},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.426},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.386},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.499},{\"date\":\"2005-04-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.289},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.277},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.231},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.371},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.235},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.191},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.326},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.333},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.278},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.44},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.425},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.381},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.506},{\"date\":\"2005-05-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.262},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.231},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.179},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.336},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.186},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.137},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.29},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.291},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.23},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.407},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.385},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.336},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.476},{\"date\":\"2005-05-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.227},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.206},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.156},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.308},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.163},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.116},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.262},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.262},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.202},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.377},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.357},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.306},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.45},{\"date\":\"2005-05-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.189},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.169},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.118},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.274},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.125},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.077},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.226},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.226},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.165},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.344},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.322},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.27},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.418},{\"date\":\"2005-05-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.156},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.141},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.092},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.24},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.097},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.051},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.192},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.198},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.14},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.311},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.295},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.245},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.388},{\"date\":\"2005-05-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.16},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.159},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.118},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.242},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.116},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.078},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.195},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.214},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.165},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.308},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.309},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.267},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.388},{\"date\":\"2005-06-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.234},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.173},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.139},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.243},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.13},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.099},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.196},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.227},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.186},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.308},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.323},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.288},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.389},{\"date\":\"2005-06-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.276},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.204},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.167},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.278},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.161},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.128},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.232},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.257},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.213},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.342},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.353},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.314},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.425},{\"date\":\"2005-06-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.313},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.257},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.224},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.323},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.215},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.186},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.278},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.307},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.266},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.386},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.402},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.369},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.465},{\"date\":\"2005-06-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.336},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.268},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.228},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.35},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.226},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.189},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.304},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.321},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.273},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.413},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.414},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.374},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.49},{\"date\":\"2005-07-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.348},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.369},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.331},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.448},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.328},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.292},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.402},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.419},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.373},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.51},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.517},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.476},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.593},{\"date\":\"2005-07-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.408},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.36},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.312},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.458},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.317},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.272},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.411},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.41},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.354},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.519},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.511},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.46},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.606},{\"date\":\"2005-07-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.392},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.333},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.276},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.45},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.289},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.235},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.403},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.388},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.323},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.516},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.488},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.429},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.598},{\"date\":\"2005-07-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.342},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.335},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.279},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.449},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.291},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.239},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.402},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.389},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.324},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.514},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.49},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.433},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.597},{\"date\":\"2005-08-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.348},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.41},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.363},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.507},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.368},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.323},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.461},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.461},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.404},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.571},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.56},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.512},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.65},{\"date\":\"2005-08-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.407},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.592},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.56},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.659},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.55},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.519},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.613},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.643},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.603},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.718},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.742},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.711},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.8},{\"date\":\"2005-08-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.567},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.654},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.622},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.719},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.612},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.583},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.674},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.704},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.666},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.778},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.802},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.77},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.862},{\"date\":\"2005-08-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.588},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.653},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.621},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.718},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.61},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.581},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.672},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.705},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.665},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.781},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.801},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.768},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.863},{\"date\":\"2005-08-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.59},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.117},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.083},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.186},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.069},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.037},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.137},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.172},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.138},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.236},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.285},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.248},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.353},{\"date\":\"2005-09-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.898},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.002},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.956},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.096},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.955},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.912},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.045},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.054},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.003},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.151},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.171},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.121},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.265},{\"date\":\"2005-09-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.847},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.835},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.776},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.956},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.786},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.73},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.904},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.894},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.831},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.018},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.009},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.947},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.123},{\"date\":\"2005-09-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.732},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.851},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.812},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.929},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.803},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.767},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.878},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.909},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.865},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.995},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.018},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.978},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.092},{\"date\":\"2005-09-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.798},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.975},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.968},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.99},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.928},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.922},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.941},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.033},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.023},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.052},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.139},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.135},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.147},{\"date\":\"2005-10-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.144},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.896},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.875},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.939},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.848},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.828},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.889},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.959},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.936},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.004},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.064},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.046},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.097},{\"date\":\"2005-10-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.15},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.775},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.741},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.843},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.725},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.693},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.794},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.838},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.801},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.909},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.947},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.92},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.998},{\"date\":\"2005-10-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.148},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.652},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.612},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.732},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.603},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.564},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.683},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.716},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.672},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.8},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.822},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.787},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.886},{\"date\":\"2005-10-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.157},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.528},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.485},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.616},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.48},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.438},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.567},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.59},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.542},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.683},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.698},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.66},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.767},{\"date\":\"2005-10-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.876},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.424},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.382},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.51},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.376},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.336},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.461},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.485},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.436},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.58},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.59},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.552},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.66},{\"date\":\"2005-11-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.698},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.342},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.302},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.423},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.296},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.258},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.375},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.402},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.355},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.493},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.505},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.469},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.571},{\"date\":\"2005-11-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.602},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.247},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.211},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.32},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.201},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.168},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.27},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.306},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.263},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.391},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.408},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.373},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.473},{\"date\":\"2005-11-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.513},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.2},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.166},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.267},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.154},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.124},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.218},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.258},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.217},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.338},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.358},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.325},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.418},{\"date\":\"2005-11-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.479},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.191},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.168},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.238},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.147},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.127},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.19},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.245},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.214},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.306},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.345},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.322},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.387},{\"date\":\"2005-12-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.425},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.228},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.217},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.252},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.185},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.175},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.204},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.281},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.265},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.314},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.381},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.369},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.404},{\"date\":\"2005-12-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.436},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.255},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.247},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.272},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.211},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.205},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.224},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.308},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.296},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.33},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.409},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.4},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.426},{\"date\":\"2005-12-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.462},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.241},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.23},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.263},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.197},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.188},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.216},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.292},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.278},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.32},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.397},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.386},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.417},{\"date\":\"2005-12-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.448},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.281},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.277},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.29},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.238},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.236},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.242},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.329},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.321},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.344},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.437},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.432},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.446},{\"date\":\"2006-01-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.442},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.371},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.363},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.388},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.327},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.321},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.341},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.421},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.41},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.442},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.531},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.524},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.542},{\"date\":\"2006-01-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.485},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.366},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.342},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.416},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.32},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.297},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.368},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.421},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.392},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.476},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.531},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.51},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.571},{\"date\":\"2006-01-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.449},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.382},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.359},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.431},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.336},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.314},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.382},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.436},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.409},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.489},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.547},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.526},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.586},{\"date\":\"2006-01-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.472},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.402},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.375},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.458},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.357},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.332},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.409},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.456},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.422},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.521},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.564},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.538},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.612},{\"date\":\"2006-01-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.489},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.388},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.354},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.458},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.342},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.31},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.41},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.445},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.404},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.524},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.549},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.517},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.609},{\"date\":\"2006-02-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.499},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.331},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.29},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.413},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.284},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.246},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.364},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.391},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.344},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.482},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.494},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.455},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.566},{\"date\":\"2006-02-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.476},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.286},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.249},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.361},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.24},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.205},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.312},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.345},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.301},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.43},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.445},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.409},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.512},{\"date\":\"2006-02-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.455},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.298},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.277},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.34},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.254},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.236},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.293},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.351},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.323},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.406},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.45},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.429},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.488},{\"date\":\"2006-02-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.471},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.373},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.36},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.398},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.331},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.321},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.353},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.425},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.407},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.459},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.519},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.509},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.539},{\"date\":\"2006-03-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.545},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.408},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.395},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.435},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.366},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.355},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.389},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.46},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.44},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.5},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.556},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.545},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.577},{\"date\":\"2006-03-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.543},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.548},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.537},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.569},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.504},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.495},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.523},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.602},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.586},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.632},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.701},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.694},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.712},{\"date\":\"2006-03-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.581},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.542},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.522},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.583},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.498},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.479},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.537},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.597},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.57},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.649},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.695},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.679},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.726},{\"date\":\"2006-03-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.565},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.631},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.609},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.676},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.588},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.567},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.63},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.684},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.656},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.738},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.785},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.767},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.817},{\"date\":\"2006-04-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.617},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.727},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.706},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.77},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.683},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.663},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.724},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.781},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.756},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.83},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.883},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.868},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.911},{\"date\":\"2006-04-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.654},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.828},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.807},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.87},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.783},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.764},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.824},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.879},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.853},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.93},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.986},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.971},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.014},{\"date\":\"2006-04-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.765},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.96},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.924},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.033},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.914},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.881},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.984},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.014},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.972},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.095},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.121},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.085},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.188},{\"date\":\"2006-04-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.876},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.966},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.91},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.08},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.919},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.866},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.03},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.026},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.961},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.151},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.129},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.073},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.233},{\"date\":\"2006-05-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.896},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.955},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.876},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.116},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.909},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.834},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.067},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.017},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.926},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.193},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.117},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.036},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.266},{\"date\":\"2006-05-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.897},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.992},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.911},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.156},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.947},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.871},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.107},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.049},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.956},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.229},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.149},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.065},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.304},{\"date\":\"2006-05-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.92},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.938},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.842},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.132},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.892},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.801},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.082},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.998},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.889},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.208},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.098},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.998},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.285},{\"date\":\"2006-05-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.888},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.913},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.824},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.092},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.867},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.784},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.042},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.971},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.871},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.166},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.071},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.977},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.245},{\"date\":\"2006-05-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.882},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.937},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.852},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.112},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.892},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.811},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.062},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.995},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.898},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.183},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.095},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.005},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.262},{\"date\":\"2006-06-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.89},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.951},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.874},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.109},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.906},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.833},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.06},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.009},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.921},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.179},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.108},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.026},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.262},{\"date\":\"2006-06-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.918},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.917},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.834},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.084},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.871},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.793},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.034},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.977},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.884},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.156},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.077},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.989},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.241},{\"date\":\"2006-06-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.915},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.914},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.837},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.071},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.869},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.796},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.02},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.972},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.885},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.141},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.072},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.987},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.231},{\"date\":\"2006-06-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.867},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.979},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.914},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.111},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.934},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.873},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.063},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.034},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.961},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.177},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.133},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.063},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.264},{\"date\":\"2006-07-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.898},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.017},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.949},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.154},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.973},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.91},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.106},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.072},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.997},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.218},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.169},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.095},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.307},{\"date\":\"2006-07-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.918},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.033},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.968},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.165},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.989},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.928},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.116},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.089},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.016},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.231},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.186},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.116},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.318},{\"date\":\"2006-07-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.926},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.048},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.992},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.162},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.003},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.95},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.112},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.106},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.043},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.228},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.205},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.145},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.317},{\"date\":\"2006-07-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.946},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.05},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.997},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.157},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.004},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.955},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.107},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.106},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.046},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.223},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.211},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.155},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.316},{\"date\":\"2006-07-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.98},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.083},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.045},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.16},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.038},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.004},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.109},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.137},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.091},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.227},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.242},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.2},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.321},{\"date\":\"2006-08-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.055},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.047},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.142},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.958},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.089},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.104},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.047},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.215},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.21},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.157},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.31},{\"date\":\"2006-08-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.065},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.971},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.919},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.076},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.924},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.877},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.021},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.031},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.968},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.152},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.136},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.078},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.244},{\"date\":\"2006-08-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.033},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.893},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.843},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.996},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.845},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.8},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.94},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.953},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.891},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.073},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.064},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.008},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.168},{\"date\":\"2006-08-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.027},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.777},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.725},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.884},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.727},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.68},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.828},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.842},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.777},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.966},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.952},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.896},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.056},{\"date\":\"2006-09-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.967},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.67},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.611},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.79},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.618},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.563},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.734},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.739},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.669},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.873},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.847},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.788},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.957},{\"date\":\"2006-09-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.857},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.549},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.489},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.672},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.497},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.441},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.616},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.617},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.545},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.756},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.729},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.668},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.843},{\"date\":\"2006-09-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.713},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.429},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.368},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.554},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.378},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.32},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.499},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.498},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.425},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.64},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.605},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.542},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.722},{\"date\":\"2006-09-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.595},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.36},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.309},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.465},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.31},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.263},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.409},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.426},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.362},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.55},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.531},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.478},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.631},{\"date\":\"2006-10-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.546},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.31},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.266},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.399},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.261},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.222},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.345},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.373},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.316},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.483},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.478},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.433},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.563},{\"date\":\"2006-10-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.506},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.274},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.239},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.346},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.226},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.195},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.291},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.338},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.291},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.428},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.44},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.403},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.509},{\"date\":\"2006-10-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.503},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.255},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.229},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.307},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.208},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.186},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.254},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.315},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.278},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.386},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.418},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.391},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.467},{\"date\":\"2006-10-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.524},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.264},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.247},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.299},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.218},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.204},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.247},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.322},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.294},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.376},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.424},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.406},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.459},{\"date\":\"2006-10-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.517},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.246},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.232},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.276},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.2},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.189},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.222},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.306},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.281},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.354},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.407},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.39},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.438},{\"date\":\"2006-11-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.506},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.278},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.259},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.318},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.232},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.216},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.266},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.338},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.308},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.397},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.437},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.417},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.474},{\"date\":\"2006-11-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.552},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.285},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.261},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.336},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.239},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.218},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.283},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.346},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.31},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.416},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.445},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.418},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.494},{\"date\":\"2006-11-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.553},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.292},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.264},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.35},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.246},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.221},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.298},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.352},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.314},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.427},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.453},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.423},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.508},{\"date\":\"2006-11-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.567},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.342},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.32},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.388},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.297},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.277},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.338},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.399},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.368},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.46},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.502},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.479},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.545},{\"date\":\"2006-12-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.618},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.34},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.311},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.398},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.293},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.267},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.348},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.399},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.362},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.47},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.502},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.474},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.555},{\"date\":\"2006-12-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.621},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.366},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.333},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.433},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.32},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.29},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.382},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.424},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.382},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.505},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.527},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.494},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.589},{\"date\":\"2006-12-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.606},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.387},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.346},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.471},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.341},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.303},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.421},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.446},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.396},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.541},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.548},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.508},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.624},{\"date\":\"2006-12-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.596},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.382},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.34},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.465},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.334},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.296},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.414},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.442},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.392},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.54},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.547},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.505},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.624},{\"date\":\"2007-01-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.58},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.354},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.304},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.458},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.306},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.258},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.406},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.418},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.357},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.534},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.523},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.473},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.614},{\"date\":\"2007-01-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.537},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.28},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.22},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.401},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.229},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.173},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.348},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.347},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.279},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.48},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.453},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.394},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.561},{\"date\":\"2007-01-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.463},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.216},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.155},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.341},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.165},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.107},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.287},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.285},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.213},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.424},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.391},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.329},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.507},{\"date\":\"2007-01-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.43},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.213},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.164},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.313},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.165},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.119},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.261},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.277},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.217},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.392},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.381},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.331},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.473},{\"date\":\"2007-01-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.413},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.237},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.194},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.326},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.191},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.151},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.275},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.3},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.244},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.407},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.396},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.35},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.481},{\"date\":\"2007-02-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.435},{\"date\":\"2007-02-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.463},{\"date\":\"2007-02-05\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.379},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.287},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.24},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.382},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.241},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.198},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.332},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.35},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.292},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.463},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.442},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.395},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.531},{\"date\":\"2007-02-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.476},{\"date\":\"2007-02-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.502},{\"date\":\"2007-02-12\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.42},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.341},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.292},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.439},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.296},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.251},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.39},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.401},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.339},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.52},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.495},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.446},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.585},{\"date\":\"2007-02-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.491},{\"date\":\"2007-02-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.515},{\"date\":\"2007-02-19\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.437},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.428},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.379},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.526},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.383},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.338},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.477},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.488},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.426},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.608},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.581},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.533},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.67},{\"date\":\"2007-02-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.551},{\"date\":\"2007-02-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.571},{\"date\":\"2007-02-26\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.505},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.551},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.504},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.647},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.505},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.46},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.599},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.609},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.549},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.726},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.709},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.667},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.786},{\"date\":\"2007-03-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.626},{\"date\":\"2007-03-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.64},{\"date\":\"2007-03-05\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.584},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.605},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.542},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.734},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.559},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.499},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.686},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.667},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.589},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.817},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.763},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.704},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.873},{\"date\":\"2007-03-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.685},{\"date\":\"2007-03-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.695},{\"date\":\"2007-03-12\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.657},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.623},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.554},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.765},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.577},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.511},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.716},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.688},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.605},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.849},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.781},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.714},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.905},{\"date\":\"2007-03-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.681},{\"date\":\"2007-03-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.694},{\"date\":\"2007-03-19\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.644},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.655},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.582},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.804},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.61},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.54},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.755},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.716},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.628},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.887},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.812},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.74},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.945},{\"date\":\"2007-03-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.676},{\"date\":\"2007-03-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.69},{\"date\":\"2007-03-26\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.634},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.753},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.678},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.904},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.707},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.636},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.855},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.814},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.725},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.986},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.912},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.838},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.048},{\"date\":\"2007-04-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.79},{\"date\":\"2007-04-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.803},{\"date\":\"2007-04-02\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.751},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.848},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.79},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.968},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.802},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.746},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.92},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.909},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.838},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.047},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.007},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.953},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.108},{\"date\":\"2007-04-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.84},{\"date\":\"2007-04-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.853},{\"date\":\"2007-04-09\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.799},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.922},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.866},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.036},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.876},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.822},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.988},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.983},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.916},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.115},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.083},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.034},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.174},{\"date\":\"2007-04-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.877},{\"date\":\"2007-04-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.887},{\"date\":\"2007-04-16\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.845},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.917},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.857},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.038},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.869},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.811},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.988},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.98},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.908},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.12},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.082},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.028},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.181},{\"date\":\"2007-04-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.851},{\"date\":\"2007-04-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.863},{\"date\":\"2007-04-23\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.811},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.017},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.966},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.121},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.971},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.922},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.073},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.079},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.016},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.199},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.176},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.129},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.262},{\"date\":\"2007-04-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.811},{\"date\":\"2007-04-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.831},{\"date\":\"2007-04-30\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.746},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.097},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.043},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.208},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.054},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.002},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.162},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.155},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.089},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.284},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.247},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.194},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.345},{\"date\":\"2007-05-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.792},{\"date\":\"2007-05-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.816},{\"date\":\"2007-05-07\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.716},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.143},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.106},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.22},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.103},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.069},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.173},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.197},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.146},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.295},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.284},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.244},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.359},{\"date\":\"2007-05-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.773},{\"date\":\"2007-05-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.797},{\"date\":\"2007-05-14\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.695},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.258},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.247},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.28},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.218},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.211},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.233},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.308},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.286},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.352},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.398},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.385},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.422},{\"date\":\"2007-05-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.803},{\"date\":\"2007-05-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.822},{\"date\":\"2007-05-21\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.74},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.25},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.233},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.285},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.209},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.195},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.238},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.302},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.274},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.354},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.395},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.377},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.429},{\"date\":\"2007-05-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.817},{\"date\":\"2007-05-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.836},{\"date\":\"2007-05-28\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.752},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.2},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.172},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.257},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.157},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.132},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.208},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.255},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.218},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.328},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.351},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.323},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.405},{\"date\":\"2007-06-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.799},{\"date\":\"2007-06-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.819},{\"date\":\"2007-06-04\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.732},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.122},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.083},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.202},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.076},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.04},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.151},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.185},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.138},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.277},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.281},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.241},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.355},{\"date\":\"2007-06-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.792},{\"date\":\"2007-06-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.814},{\"date\":\"2007-06-11\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.716},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.057},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.018},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.135},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.009},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.974},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.083},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.116},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.068},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.209},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.222},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.182},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.297},{\"date\":\"2007-06-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.805},{\"date\":\"2007-06-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.822},{\"date\":\"2007-06-18\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.748},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.029},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.995},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.099},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.982},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.951},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.046},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.089},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.046},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.173},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.196},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.16},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.262},{\"date\":\"2007-06-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.835},{\"date\":\"2007-06-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.847},{\"date\":\"2007-06-25\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.786},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.005},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.976},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.066},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.959},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.933},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.012},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.064},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.025},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.141},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.168},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.134},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.233},{\"date\":\"2007-07-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.829},{\"date\":\"2007-07-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.842},{\"date\":\"2007-07-02\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.779},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.026},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.01},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.058},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.981},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.971},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.004},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.077},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.048},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.132},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.182},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.159},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.224},{\"date\":\"2007-07-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.849},{\"date\":\"2007-07-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.859},{\"date\":\"2007-07-09\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.809},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.092},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.084},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.107},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.049},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.046},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.055},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.143},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.125},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.177},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.242},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.229},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.267},{\"date\":\"2007-07-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.889},{\"date\":\"2007-07-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.902},{\"date\":\"2007-07-16\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.834},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.005},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.98},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.056},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.958},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.938},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.001},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.062},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.026},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.131},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.168},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.138},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.225},{\"date\":\"2007-07-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.889},{\"date\":\"2007-07-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.903},{\"date\":\"2007-07-23\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.829},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.926},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.894},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.99},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.876},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.849},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.934},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.987},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.944},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.069},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.099},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.065},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.164},{\"date\":\"2007-07-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.886},{\"date\":\"2007-07-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.899},{\"date\":\"2007-07-30\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.831},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.888},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.861},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.943},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.838},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.816},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.885},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.951},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.912},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.027},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.062},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.031},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.12},{\"date\":\"2007-08-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.898},{\"date\":\"2007-08-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.91},{\"date\":\"2007-08-06\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.846},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.821},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.797},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.869},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.771},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.752},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.813},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.88},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.845},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.948},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.995},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.969},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.044},{\"date\":\"2007-08-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.847},{\"date\":\"2007-08-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.861},{\"date\":\"2007-08-13\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.79},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.832},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.825},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.847},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.785},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.783},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.791},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.886},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.867},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.922},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.997},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.985},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.021},{\"date\":\"2007-08-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.868},{\"date\":\"2007-08-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.878},{\"date\":\"2007-08-20\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.826},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.796},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.799},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.79},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.749},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.756},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.734},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.851},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.843},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.866},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.963},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.96},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.968},{\"date\":\"2007-08-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.863},{\"date\":\"2007-08-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.873},{\"date\":\"2007-08-27\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.821},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.84},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.857},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.804},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.796},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.818},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.749},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.89},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.897},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.876},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.997},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.008},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.975},{\"date\":\"2007-09-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.893},{\"date\":\"2007-09-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.901},{\"date\":\"2007-09-03\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.859},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.862},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.879},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.827},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.818},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.84},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.773},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.912},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.918},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.901},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.018},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.03},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.994},{\"date\":\"2007-09-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.924},{\"date\":\"2007-09-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.932},{\"date\":\"2007-09-10\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.891},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.835},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.836},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.831},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.787},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.792},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.776},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.892},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.882},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.91},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.001},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.003},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.999},{\"date\":\"2007-09-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.964},{\"date\":\"2007-09-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.971},{\"date\":\"2007-09-17\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.934},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.86},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.861},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.858},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.812},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.816},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.804},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.917},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.906},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.938},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.029},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.032},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.023},{\"date\":\"2007-09-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.032},{\"date\":\"2007-09-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.038},{\"date\":\"2007-09-24\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.008},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.838},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.832},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.852},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.788},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.784},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.796},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.903},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.887},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.934},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.013},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.008},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.022},{\"date\":\"2007-10-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.048},{\"date\":\"2007-10-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.055},{\"date\":\"2007-10-01\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.017},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.821},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.809},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.846},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.77},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.761},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.789},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.887},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.863},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.932},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.997},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.987},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.017},{\"date\":\"2007-10-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.035},{\"date\":\"2007-10-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.046},{\"date\":\"2007-10-08\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.985},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.813},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.793},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.854},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.762},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.746},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.796},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.879},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.846},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.944},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.99},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.971},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.025},{\"date\":\"2007-10-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.039},{\"date\":\"2007-10-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.053},{\"date\":\"2007-10-15\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.976},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.873},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.853},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.914},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.823},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.806},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.859},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.937},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.904},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.001},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.046},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.029},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.077},{\"date\":\"2007-10-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.094},{\"date\":\"2007-10-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.11},{\"date\":\"2007-10-22\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.023},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.921},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.905},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.954},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.872},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.859},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.9},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.983},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.955},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.038},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.092},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.078},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.116},{\"date\":\"2007-10-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.157},{\"date\":\"2007-10-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.171},{\"date\":\"2007-10-29\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.095},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.06},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.051},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.077},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.013},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.007},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.025},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.117},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.097},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.154},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.224},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.219},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.234},{\"date\":\"2007-11-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.303},{\"date\":\"2007-11-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.314},{\"date\":\"2007-11-05\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.257},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.158},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.146},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.184},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.111},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.101},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.13},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.218},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.195},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.265},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.325},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.314},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.345},{\"date\":\"2007-11-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.425},{\"date\":\"2007-11-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.438},{\"date\":\"2007-11-12\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.368},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.148},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.123},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.199},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.099},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.077},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.144},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.208},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.17},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.281},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.32},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.297},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.362},{\"date\":\"2007-11-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.41},{\"date\":\"2007-11-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.426},{\"date\":\"2007-11-19\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.333},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.147},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.118},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.204},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.097},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.072},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.149},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.209},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.168},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.287},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.319},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.292},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.369},{\"date\":\"2007-11-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.444},{\"date\":\"2007-11-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.456},{\"date\":\"2007-11-26\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.382},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.113},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.077},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.184},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.061},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.029},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.128},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.178},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.131},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.267},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.292},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.259},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.354},{\"date\":\"2007-12-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.416},{\"date\":\"2007-12-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.433},{\"date\":\"2007-12-03\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.33},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.053},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.007},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.147},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.957},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.091},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.121},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.065},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.228},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.238},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.194},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.318},{\"date\":\"2007-12-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.325},{\"date\":\"2007-12-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.345},{\"date\":\"2007-12-10\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.219},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.05},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.011},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.131},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.998},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.962},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.075},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.116},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.066},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.212},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.232},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.194},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.303},{\"date\":\"2007-12-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.309},{\"date\":\"2007-12-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.325},{\"date\":\"2007-12-17\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.211},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.032},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.991},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.116},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.98},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.943},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.059},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.099},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.047},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.199},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.214},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.172},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.29},{\"date\":\"2007-12-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.308},{\"date\":\"2007-12-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.321},{\"date\":\"2007-12-24\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.225},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.104},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.076},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.161},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.053},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.028},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.106},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.167},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.129},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.24},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.283},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.257},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.33},{\"date\":\"2007-12-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.345},{\"date\":\"2007-12-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.356},{\"date\":\"2007-12-31\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.272},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.159},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.135},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.208},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.109},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.088},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.154},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.22},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.187},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.285},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.335},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.313},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.375},{\"date\":\"2008-01-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.376},{\"date\":\"2008-01-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.387},{\"date\":\"2008-01-07\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.301},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.119},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.09},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.179},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.068},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.041},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.123},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.185},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.147},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.257},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.3},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.272},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.35},{\"date\":\"2008-01-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.326},{\"date\":\"2008-01-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.341},{\"date\":\"2008-01-14\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.229},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.07},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.041},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.13},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.017},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.991},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.072},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.136},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.097},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.212},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.256},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.227},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.309},{\"date\":\"2008-01-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.27},{\"date\":\"2008-01-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.286},{\"date\":\"2008-01-21\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.169},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.03},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.004},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.083},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.977},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.953},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.026},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.097},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.063},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.162},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.217},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.194},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.261},{\"date\":\"2008-01-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.259},{\"date\":\"2008-01-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.272},{\"date\":\"2008-01-28\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.171},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.03},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.014},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.061},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.978},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.966},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.002},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.094},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.069},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.141},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.212},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.196},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.242},{\"date\":\"2008-02-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.28},{\"date\":\"2008-02-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.291},{\"date\":\"2008-02-04\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.207},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.011},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.995},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.043},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.96},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.947},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.986},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.074},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.049},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.123},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.19},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.173},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.223},{\"date\":\"2008-02-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.28},{\"date\":\"2008-02-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.291},{\"date\":\"2008-02-11\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.203},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.092},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.082},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.111},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.042},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.035},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.056},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.153},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.136},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.188},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.266},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.259},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.28},{\"date\":\"2008-02-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.396},{\"date\":\"2008-02-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.405},{\"date\":\"2008-02-18\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.335},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.18},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.163},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.213},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.13},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.115},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.159},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.243},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.218},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.29},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.354},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.341},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.379},{\"date\":\"2008-02-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.552},{\"date\":\"2008-02-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.558},{\"date\":\"2008-02-25\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.511},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.212},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.185},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.269},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.162},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.137},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.216},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.277},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.239},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.351},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.386},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.362},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.43},{\"date\":\"2008-03-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.658},{\"date\":\"2008-03-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.666},{\"date\":\"2008-03-03\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.597},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.273},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.246},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.329},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.225},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.2},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.277},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.334},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.294},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.412},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.443},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.42},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.487},{\"date\":\"2008-03-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.819},{\"date\":\"2008-03-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.825},{\"date\":\"2008-03-10\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.774},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.332},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.303},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.391},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.284},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.257},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.34},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.398},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.359},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.473},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.5},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.476},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.545},{\"date\":\"2008-03-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.974},{\"date\":\"2008-03-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.982},{\"date\":\"2008-03-17\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.924},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.31},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.273},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.386},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.259},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.224},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.333},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.378},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.33},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.469},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.486},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.454},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.544},{\"date\":\"2008-03-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.989},{\"date\":\"2008-03-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.998},{\"date\":\"2008-03-24\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.932},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.339},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.306},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.407},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.29},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.259},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.355},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.405},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.361},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.491},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.512},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.484},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.563},{\"date\":\"2008-03-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.964},{\"date\":\"2008-03-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.976},{\"date\":\"2008-03-31\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.885},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.381},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.346},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.453},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.332},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.299},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.403},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.444},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.396},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.536},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.55},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.522},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.602},{\"date\":\"2008-04-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.955},{\"date\":\"2008-04-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.966},{\"date\":\"2008-04-07\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.875},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.438},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.397},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.52},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.389},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.35},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.469},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.502},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.45},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.604},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.607},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.574},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.669},{\"date\":\"2008-04-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.059},{\"date\":\"2008-04-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.069},{\"date\":\"2008-04-14\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.987},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.557},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.515},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.645},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.508},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.467},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.595},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.621},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.569},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.722},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.729},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.693},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.795},{\"date\":\"2008-04-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.143},{\"date\":\"2008-04-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.153},{\"date\":\"2008-04-21\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.069},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.653},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.615},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.732},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.603},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.566},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.681},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.716},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.668},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.807},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.829},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.797},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.888},{\"date\":\"2008-04-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.177},{\"date\":\"2008-04-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.187},{\"date\":\"2008-04-28\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.098},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.663},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.62},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.751},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.613},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.571},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.699},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.725},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.673},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.825},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.842},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.804},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.911},{\"date\":\"2008-05-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.149},{\"date\":\"2008-05-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.162},{\"date\":\"2008-05-05\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.049},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.771},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.741},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.833},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.722},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.694},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.781},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.83},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.791},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.904},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.944},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.919},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.992},{\"date\":\"2008-05-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.331},{\"date\":\"2008-05-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.339},{\"date\":\"2008-05-12\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.264},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.84},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.81},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.903},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.791},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.762},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.851},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.897},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.86},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.97},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.017},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.991},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.066},{\"date\":\"2008-05-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.497},{\"date\":\"2008-05-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.504},{\"date\":\"2008-05-19\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.446},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.986},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.96},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.04},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.937},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.913},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.989},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.045},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.011},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.11},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.159},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.136},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.201},{\"date\":\"2008-05-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.723},{\"date\":\"2008-05-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.731},{\"date\":\"2008-05-26\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.659},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.026},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.98},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.118},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.976},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.932},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.066},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.086},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.032},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.191},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.201},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.161},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.276},{\"date\":\"2008-06-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.707},{\"date\":\"2008-06-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.716},{\"date\":\"2008-06-02\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.636},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.09},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.027},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.217},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.039},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.979},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.165},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.152},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.077},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.297},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.267},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.21},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.372},{\"date\":\"2008-06-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.692},{\"date\":\"2008-06-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.702},{\"date\":\"2008-06-09\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.61},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.134},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.056},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.293},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.082},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.007},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.24},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.199},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.105},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.382},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.314},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.242},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.448},{\"date\":\"2008-06-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.692},{\"date\":\"2008-06-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.702},{\"date\":\"2008-06-16\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.606},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.131},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.051},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.295},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.079},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.002},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.241},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.197},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.101},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.384},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.312},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.236},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.453},{\"date\":\"2008-06-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.648},{\"date\":\"2008-06-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.659},{\"date\":\"2008-06-23\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.552},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.146},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.075},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.292},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.095},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.027},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.238},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.209},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.121},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.38},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.326},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.259},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.45},{\"date\":\"2008-06-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.645},{\"date\":\"2008-06-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.657},{\"date\":\"2008-06-30\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.554},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.165},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.099},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.301},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.114},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.051},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.247},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.229},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.148},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.387},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.344},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.283},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.459},{\"date\":\"2008-07-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.727},{\"date\":\"2008-07-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.733},{\"date\":\"2008-07-07\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.676},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.164},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.102},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.289},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.113},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.054},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.235},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.228},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.153},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.374},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.341},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.283},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.449},{\"date\":\"2008-07-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.764},{\"date\":\"2008-07-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.771},{\"date\":\"2008-07-14\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.707},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.118},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.054},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.246},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.064},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.005},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.19},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.186},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.109},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.337},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.303},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.242},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.416},{\"date\":\"2008-07-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.718},{\"date\":\"2008-07-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.729},{\"date\":\"2008-07-21\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.629},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.01},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.948},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.137},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.955},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.896},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.077},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.082},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.005},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.23},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.205},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.145},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.317},{\"date\":\"2008-07-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.603},{\"date\":\"2008-07-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.614},{\"date\":\"2008-07-28\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.512},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.935},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.88},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.048},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.88},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.828},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.988},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.006},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.937},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.141},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.13},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.075},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.231},{\"date\":\"2008-08-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.502},{\"date\":\"2008-08-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.515},{\"date\":\"2008-08-04\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.395},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.864},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.815},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.963},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.809},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.764},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.903},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.932},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.868},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.056},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.055},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.005},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.148},{\"date\":\"2008-08-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.353},{\"date\":\"2008-08-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.368},{\"date\":\"2008-08-11\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.24},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.794},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.754},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.875},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.74},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.706},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.813},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.862},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.805},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.971},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.979},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.935},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.06},{\"date\":\"2008-08-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.207},{\"date\":\"2008-08-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.219},{\"date\":\"2008-08-18\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.102},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.738},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.707},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.799},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.685},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.66},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.736},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.806},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.758},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.898},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.922},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.886},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.989},{\"date\":\"2008-08-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.145},{\"date\":\"2008-08-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.158},{\"date\":\"2008-08-25\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.039},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.733},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.715},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.769},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.68},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.667},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.707},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.802},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.769},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.867},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.918},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.897},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.957},{\"date\":\"2008-09-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.121},{\"date\":\"2008-09-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.135},{\"date\":\"2008-09-01\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":4.015},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.701},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.686},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.731},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.648},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.637},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.67},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.769},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.742},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.822},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.885},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.87},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.915},{\"date\":\"2008-09-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.059},{\"date\":\"2008-09-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.075},{\"date\":\"2008-09-08\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.936},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.887},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.919},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.822},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.835},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.867},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.766},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.948},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.973},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.898},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.073},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.115},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.995},{\"date\":\"2008-09-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.023},{\"date\":\"2008-09-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.035},{\"date\":\"2008-09-15\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.933},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.772},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.785},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.746},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.718},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.732},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.687},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.839},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.847},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.825},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.963},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.982},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.929},{\"date\":\"2008-09-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.958},{\"date\":\"2008-09-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.967},{\"date\":\"2008-09-22\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.885},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.687},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.697},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.669},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.632},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.644},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.607},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.755},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.756},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.754},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.883},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.895},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.862},{\"date\":\"2008-09-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.959},{\"date\":\"2008-09-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.969},{\"date\":\"2008-09-29\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.887},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.543},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.541},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.545},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.484},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.485},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.482},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.618},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.609},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.636},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.746},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.752},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.735},{\"date\":\"2008-10-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.875},{\"date\":\"2008-10-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.887},{\"date\":\"2008-10-06\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.781},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.213},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.166},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.307},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.151},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.109},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.239},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.296},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.235},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.414},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.425},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.378},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.512},{\"date\":\"2008-10-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.659},{\"date\":\"2008-10-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.672},{\"date\":\"2008-10-13\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.558},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.974},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.909},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.107},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.914},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.855},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.04},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.053},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.968},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.219},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.182},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.115},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.306},{\"date\":\"2008-10-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.482},{\"date\":\"2008-10-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.497},{\"date\":\"2008-10-20\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.358},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.718},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.644},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.867},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.656},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.589},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.797},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.8},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.707},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.981},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.929},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.851},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.073},{\"date\":\"2008-10-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.288},{\"date\":\"2008-10-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.3},{\"date\":\"2008-10-27\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":3.189},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.462},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.395},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.597},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.4},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.34},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.525},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.543},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.457},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.709},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.677},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.603},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.813},{\"date\":\"2008-11-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.088},{\"date\":\"2008-11-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.1},{\"date\":\"2008-11-03\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.994},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.284},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.224},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.407},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.224},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.17},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.337},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.363},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.285},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.512},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.494},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.426},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.62},{\"date\":\"2008-11-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.944},{\"date\":\"2008-11-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.958},{\"date\":\"2008-11-10\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.829},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.132},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.081},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.236},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.072},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.027},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.166},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.211},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.144},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.34},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.339},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.281},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.447},{\"date\":\"2008-11-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.809},{\"date\":\"2008-11-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.822},{\"date\":\"2008-11-17\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.699},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.952},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.912},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.035},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.892},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.857},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.964},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.029},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.972},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.138},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.163},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.115},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.253},{\"date\":\"2008-11-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.664},{\"date\":\"2008-11-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.676},{\"date\":\"2008-11-24\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.571},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.87},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.844},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.924},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.811},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.79},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.854},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.945},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.906},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.021},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.077},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.044},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.141},{\"date\":\"2008-12-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.615},{\"date\":\"2008-12-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.624},{\"date\":\"2008-12-01\",\"fuel\":\"diesel\",\"grade\":\"low_sulfur\",\"formulation\":\"NA\",\"price\":2.544},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.758},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.734},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.808},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.699},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.681},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.738},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.832},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.797},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.901},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.965},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.933},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.025},{\"date\":\"2008-12-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.515},{\"date\":\"2008-12-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.523},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.716},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.699},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.749},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.659},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.648},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.682},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.785},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.758},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.838},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.915},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.892},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.958},{\"date\":\"2008-12-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.422},{\"date\":\"2008-12-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.43},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.71},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.685},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.758},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.653},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.635},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.692},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.781},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.744},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.852},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.907},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.875},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.965},{\"date\":\"2008-12-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.366},{\"date\":\"2008-12-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.373},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.67},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.642},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.727},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.613},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.59},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.662},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.743},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.702},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.823},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.866},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.831},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.929},{\"date\":\"2008-12-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.327},{\"date\":\"2008-12-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.335},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.737},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.72},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.772},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.684},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.672},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.711},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.8},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.769},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.861},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":1.922},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":1.902},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":1.96},{\"date\":\"2009-01-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.291},{\"date\":\"2009-01-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.299},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.835},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.82},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.866},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.784},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.772},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.808},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.9},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.873},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":1.951},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.015},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.043},{\"date\":\"2009-01-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.314},{\"date\":\"2009-01-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.324},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.898},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.88},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.935},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.847},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.832},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.878},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.961},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.931},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.02},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.077},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.061},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.105},{\"date\":\"2009-01-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.296},{\"date\":\"2009-01-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.307},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.89},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.862},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.947},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.838},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.813},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.892},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.954},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.915},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.029},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.07},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.046},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.115},{\"date\":\"2009-01-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.268},{\"date\":\"2009-01-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.278},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.944},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.92},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.992},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.892},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.871},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.936},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.007},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.974},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.071},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.126},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.107},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.162},{\"date\":\"2009-02-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.246},{\"date\":\"2009-02-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.256},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.978},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.946},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.043},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.926},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.897},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.986},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.044},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.002},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.127},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.161},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.133},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.214},{\"date\":\"2009-02-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.219},{\"date\":\"2009-02-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.23},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.016},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.981},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.089},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.964},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.931},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.034},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.083},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.036},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.174},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.198},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.168},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.255},{\"date\":\"2009-02-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.186},{\"date\":\"2009-02-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.197},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.963},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.919},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.052},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.909},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.868},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.995},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.032},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.976},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.141},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.153},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.113},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.227},{\"date\":\"2009-02-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.13},{\"date\":\"2009-02-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.138},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.988},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.961},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.043},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.934},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.91},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.984},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.057},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.016},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.137},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.174},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.151},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.218},{\"date\":\"2009-03-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.087},{\"date\":\"2009-03-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.095},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.993},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.967},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.046},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.941},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.918},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.99},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.059},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.022},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.131},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.175},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.154},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.215},{\"date\":\"2009-03-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.045},{\"date\":\"2009-03-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.051},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.964},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.937},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.02},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.91},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.885},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.962},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.034},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.996},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.108},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.151},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.127},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.195},{\"date\":\"2009-03-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.017},{\"date\":\"2009-03-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.023},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.014},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.993},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.056},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.962},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.944},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.001},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.079},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.049},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.137},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.193},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.175},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.226},{\"date\":\"2009-03-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.09},{\"date\":\"2009-03-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.093},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.097},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.079},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.135},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.046},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.03},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.08},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.163},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.136},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.216},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.275},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.259},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.304},{\"date\":\"2009-03-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.221},{\"date\":\"2009-03-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.225},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.09},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.061},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.148},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.037},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.011},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.092},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.158},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.119},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.234},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.271},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.245},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.319},{\"date\":\"2009-04-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.228},{\"date\":\"2009-04-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.233},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.104},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.075},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.163},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.051},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.025},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.107},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.172},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.132},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.248},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.284},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.26},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.33},{\"date\":\"2009-04-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.229},{\"date\":\"2009-04-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.234},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.112},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.081},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.174},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.059},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.031},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.118},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.181},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.14},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.259},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.294},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.268},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.343},{\"date\":\"2009-04-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.221},{\"date\":\"2009-04-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.226},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.102},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.066},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.175},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.049},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.016},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.118},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.171},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.124},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.262},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.285},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.251},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.348},{\"date\":\"2009-04-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.201},{\"date\":\"2009-04-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.207},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.129},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.093},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.202},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.078},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.045},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.147},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.195},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.149},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.284},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.308},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.275},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.369},{\"date\":\"2009-05-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.185},{\"date\":\"2009-05-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.192},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.29},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.267},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.337},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.24},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.218},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.285},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.352},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.322},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.411},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.467},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.45},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.499},{\"date\":\"2009-05-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.216},{\"date\":\"2009-05-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.223},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.36},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.331},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.421},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.309},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.281},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.368},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.424},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.387},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.495},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.54},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.517},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.583},{\"date\":\"2009-05-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.231},{\"date\":\"2009-05-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.237},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.485},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.463},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.531},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.435},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.414},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.477},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.547},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.516},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.608},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.661},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.644},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.693},{\"date\":\"2009-05-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.274},{\"date\":\"2009-05-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.278},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.572},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.548},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.621},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.524},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.502},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.57},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.63},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.595},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.698},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.741},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.721},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.778},{\"date\":\"2009-06-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.352},{\"date\":\"2009-06-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.354},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.673},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.646},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.728},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.624},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.6},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.676},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.731},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.692},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.806},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.843},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.82},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.885},{\"date\":\"2009-06-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.498},{\"date\":\"2009-06-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.501},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.722},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.686},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.794},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.672},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.639},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.742},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.784},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.737},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.875},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.896},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.866},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.952},{\"date\":\"2009-06-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.572},{\"date\":\"2009-06-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.575},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.743},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.7},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.831},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.691},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.65},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.777},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.808},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.755},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.91},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.924},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.887},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.992},{\"date\":\"2009-06-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.616},{\"date\":\"2009-06-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.619},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.695},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.644},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.799},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.642},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.593},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.744},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.763},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.701},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.882},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.883},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.839},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.966},{\"date\":\"2009-06-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.608},{\"date\":\"2009-06-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.612},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.666},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.615},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.77},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.612},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.563},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.713},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.736},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.673},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.856},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.855},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.81},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.94},{\"date\":\"2009-07-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.594},{\"date\":\"2009-07-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.598},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.584},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.532},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.69},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.528},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.479},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.631},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.656},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.593},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.78},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.779},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.731},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.869},{\"date\":\"2009-07-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.542},{\"date\":\"2009-07-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.546},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.519},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.463},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.633},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.463},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.411},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.572},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.591},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.522},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.725},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.714},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.659},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.815},{\"date\":\"2009-07-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.496},{\"date\":\"2009-07-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.501},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.557},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.51},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.652},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.503},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.46},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.594},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.625},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.564},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.742},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.744},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.698},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.829},{\"date\":\"2009-07-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.528},{\"date\":\"2009-07-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.532},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.61},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.561},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.71},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.557},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.511},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.653},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.676},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.613},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.796},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.793},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.747},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.88},{\"date\":\"2009-08-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.55},{\"date\":\"2009-08-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.554},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.7},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.645},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.81},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.647},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.596},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.755},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.767},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.7},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.896},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.883},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.833},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.975},{\"date\":\"2009-08-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.625},{\"date\":\"2009-08-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.628},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.691},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.631},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.813},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.637},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.58},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.757},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.761},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.688},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.901},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.877},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.821},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.98},{\"date\":\"2009-08-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.652},{\"date\":\"2009-08-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.656},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.682},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.622},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.802},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.628},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.572},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.746},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.751},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.677},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.893},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.869},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.813},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.972},{\"date\":\"2009-08-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.668},{\"date\":\"2009-08-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.672},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.667},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.605},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.795},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.613},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.553},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.737},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.739},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.662},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.887},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.857},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.797},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.967},{\"date\":\"2009-08-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.674},{\"date\":\"2009-08-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.679},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.642},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.569},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.792},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.588},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.519},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.733},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.711},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.619},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.89},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.831},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.759},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.965},{\"date\":\"2009-09-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.647},{\"date\":\"2009-09-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.65},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.632},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.55},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.799},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.577},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.499},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.741},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.704},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.603},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.899},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.818},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.739},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.964},{\"date\":\"2009-09-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.634},{\"date\":\"2009-09-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.638},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.607},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.526},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.771},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.552},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.477},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.712},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.68},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.58},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.874},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.793},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.714},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.941},{\"date\":\"2009-09-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.622},{\"date\":\"2009-09-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.626},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.554},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.475},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.715},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.499},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.425},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.655},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.631},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.531},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.823},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.741},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.663},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.886},{\"date\":\"2009-09-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.601},{\"date\":\"2009-09-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.606},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.523},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.446},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.681},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.468},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.396},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.621},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.6},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.502},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.788},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.711},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.634},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.853},{\"date\":\"2009-10-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.582},{\"date\":\"2009-10-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.588},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.543},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.48},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.67},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.489},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.432},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.611},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.614},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.532},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.774},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.727},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.665},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.841},{\"date\":\"2009-10-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.6},{\"date\":\"2009-10-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.604},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.626},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.58},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.719},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.574},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.532},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.663},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.694},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.633},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.812},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.807},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.763},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.887},{\"date\":\"2009-10-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.705},{\"date\":\"2009-10-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.708},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.727},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.691},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.8},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.674},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.641},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.744},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.792},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.744},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.886},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.909},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.878},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.968},{\"date\":\"2009-10-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.801},{\"date\":\"2009-10-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.805},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.746},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.71},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.822},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.694},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.66},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.766},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.812},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.764},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.907},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.93},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.897},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.991},{\"date\":\"2009-11-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.808},{\"date\":\"2009-11-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.811},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.72},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.678},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.805},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.666},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.627},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.748},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.787},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.733},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.891},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.908},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.871},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.977},{\"date\":\"2009-11-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.801},{\"date\":\"2009-11-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.805},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.684},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.638},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.778},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.629},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.585},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.72},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.755},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.697},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.867},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.877},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.835},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.955},{\"date\":\"2009-11-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.79},{\"date\":\"2009-11-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.795},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.694},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.655},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.773},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.639},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.603},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.714},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.764},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.713},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.862},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.883},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.846},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.951},{\"date\":\"2009-11-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.787},{\"date\":\"2009-11-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.792},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.684},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.646},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.763},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.629},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.594},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.704},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.754},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.704},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.851},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.875},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.84},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.941},{\"date\":\"2009-11-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.775},{\"date\":\"2009-11-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.78},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.689},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.653},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.763},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.634},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.601},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.703},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.761},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.715},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.851},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.882},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.849},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.942},{\"date\":\"2009-12-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.772},{\"date\":\"2009-12-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.777},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.655},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.613},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.742},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.599},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.56},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.681},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.727},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.672},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.835},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.849},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.809},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.925},{\"date\":\"2009-12-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.748},{\"date\":\"2009-12-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.753},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.645},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.599},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.739},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.589},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.546},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.679},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.717},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.658},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.829},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.839},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.796},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.918},{\"date\":\"2009-12-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.726},{\"date\":\"2009-12-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.731},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.662},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.616},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.754},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.607},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.564},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.696},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.731},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.673},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.843},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.853},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.811},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.93},{\"date\":\"2009-12-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.732},{\"date\":\"2009-12-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.736},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.718},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.677},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.802},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.665},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.627},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.745},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.784},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.73},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.889},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.905},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.869},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.972},{\"date\":\"2010-01-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.797},{\"date\":\"2010-01-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.801},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.804},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.768},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.877},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.751},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.717},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.822},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.869},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.823},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.958},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.988},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.959},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.042},{\"date\":\"2010-01-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.879},{\"date\":\"2010-01-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.882},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.793},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.755},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.87},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.739},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.703},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.813},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.861},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.813},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.954},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.983},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.951},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.041},{\"date\":\"2010-01-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.87},{\"date\":\"2010-01-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.874},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.76},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.719},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.844},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.705},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.666},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.787},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.832},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.78},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.932},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.953},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.918},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.018},{\"date\":\"2010-01-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.833},{\"date\":\"2010-01-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.838},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.717},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.672},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.809},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.661},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.618},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.75},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.787},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.731},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.897},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.911},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.871},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.984},{\"date\":\"2010-02-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.781},{\"date\":\"2010-02-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.787},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.707},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.664},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.796},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.652},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.611},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.738},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.778},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.723},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.885},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.9},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.862},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.973},{\"date\":\"2010-02-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.769},{\"date\":\"2010-02-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.775},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.664},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.617},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.761},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.608},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.563},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.701},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.738},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.678},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.853},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.862},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.818},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.943},{\"date\":\"2010-02-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.756},{\"date\":\"2010-02-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.761},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.709},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.673},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.783},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.655},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.621},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.726},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.778},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.731},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.869},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.899},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.867},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.958},{\"date\":\"2010-02-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.832},{\"date\":\"2010-02-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.834},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.756},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.723},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.824},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.702},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.671},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.768},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.827},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.784},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.911},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.943},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.917},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.992},{\"date\":\"2010-03-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.861},{\"date\":\"2010-03-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.865},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.804},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.773},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.868},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.751},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.721},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.813},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.871},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.829},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.952},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.988},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.964},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.034},{\"date\":\"2010-03-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.904},{\"date\":\"2010-03-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.906},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.841},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.812},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.9},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.788},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.76},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.846},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.908},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.87},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.982},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.024},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.002},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.063},{\"date\":\"2010-03-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.924},{\"date\":\"2010-03-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.926},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.87},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.842},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.928},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.819},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.792},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.875},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.936},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.897},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.012},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.05},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.028},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.09},{\"date\":\"2010-03-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.946},{\"date\":\"2010-03-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.949},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.851},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.816},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.921},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.798},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.765},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.867},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.918},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.873},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.006},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.034},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.006},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.086},{\"date\":\"2010-03-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.939},{\"date\":\"2010-03-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.942},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.877},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.844},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.944},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.826},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.795},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.891},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.94},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.897},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.024},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.056},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.029},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.106},{\"date\":\"2010-04-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.015},{\"date\":\"2010-04-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.017},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.909},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.879},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.97},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.858},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.829},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.917},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.972},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.933},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.048},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.088},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.065},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.131},{\"date\":\"2010-04-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.069},{\"date\":\"2010-04-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.073},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.911},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.881},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.973},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.86},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.831},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.92},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.974},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.935},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.051},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.091},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.068},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.135},{\"date\":\"2010-04-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.074},{\"date\":\"2010-04-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.078},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.901},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.865},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.976},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.849},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.815},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.922},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.966},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.92},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.054},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.083},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.053},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.141},{\"date\":\"2010-04-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.078},{\"date\":\"2010-04-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.082},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.95},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.914},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.023},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.898},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.864},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.97},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.011},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.967},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.096},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.131},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.103},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.185},{\"date\":\"2010-05-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.122},{\"date\":\"2010-05-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.126},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.958},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.921},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.034},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.905},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.87},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.979},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.023},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.976},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.113},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.142},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.109},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.202},{\"date\":\"2010-05-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.127},{\"date\":\"2010-05-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.131},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.918},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.874},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.007},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.864},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.823},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.95},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.985},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.932},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.088},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.107},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.067},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.181},{\"date\":\"2010-05-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.094},{\"date\":\"2010-05-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.098},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.842},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.794},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.939},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.786},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.741},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.88},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.914},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.856},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.026},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.037},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.993},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.12},{\"date\":\"2010-05-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.021},{\"date\":\"2010-05-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.025},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.784},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.731},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.891},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.728},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.679},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.83},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.855},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.789},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.981},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.98},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.929},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.074},{\"date\":\"2010-05-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.98},{\"date\":\"2010-05-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.983},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.78},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.725},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.892},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.725},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.674},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.831},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.849},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.778},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.986},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.972},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.917},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.075},{\"date\":\"2010-06-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.946},{\"date\":\"2010-06-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.949},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.756},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.703},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.864},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.701},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.652},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.803},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.825},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.756},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.958},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.947},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.894},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.047},{\"date\":\"2010-06-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.928},{\"date\":\"2010-06-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.93},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.795},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.745},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.898},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.743},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.696},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.84},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.861},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.794},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.989},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.98},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.931},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.071},{\"date\":\"2010-06-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.961},{\"date\":\"2010-06-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.962},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.809},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.76},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.91},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.757},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.712},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.852},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.873},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.807},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.992},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.944},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.081},{\"date\":\"2010-06-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.956},{\"date\":\"2010-06-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.957},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.779},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.724},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.889},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.726},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.676},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.83},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.846},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.774},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.984},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.964},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.91},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.066},{\"date\":\"2010-07-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.924},{\"date\":\"2010-07-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.925},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.771},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.715},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.885},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.718},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.666},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.826},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.838},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.765},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.98},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.956},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.901},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.059},{\"date\":\"2010-07-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.903},{\"date\":\"2010-07-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.904},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.775},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.72},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.886},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.722},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.672},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.827},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.843},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.771},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.981},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.958},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.904},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.058},{\"date\":\"2010-07-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.899},{\"date\":\"2010-07-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.899},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.801},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.751},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.901},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.749},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.703},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.843},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.867},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.801},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.995},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.982},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.933},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.072},{\"date\":\"2010-07-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.919},{\"date\":\"2010-07-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.919},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.788},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.736},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.894},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.735},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.687},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.836},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.856},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.788},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.988},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.973},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.922},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.067},{\"date\":\"2010-08-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.928},{\"date\":\"2010-08-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.928},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.835},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.789},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.929},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.783},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.74},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.873},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.903},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.842},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.021},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.016},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.973},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.095},{\"date\":\"2010-08-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.991},{\"date\":\"2010-08-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.991},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.798},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.746},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.904},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.745},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.696},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.847},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.869},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.802},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.982},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.933},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.073},{\"date\":\"2010-08-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.979},{\"date\":\"2010-08-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.979},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.759},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.703},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.872},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.704},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.653},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.812},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.831},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.758},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.972},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.945},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.891},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.046},{\"date\":\"2010-08-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.957},{\"date\":\"2010-08-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.957},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.736},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.69},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.831},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.682},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.64},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.771},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.806},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.743},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.93},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.922},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.875},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.009},{\"date\":\"2010-08-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.938},{\"date\":\"2010-08-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.938},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.735},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.695},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.815},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.682},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.647},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.755},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.803},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.748},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.911},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.917},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.877},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.992},{\"date\":\"2010-09-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.931},{\"date\":\"2010-09-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.931},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.772},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.742},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.834},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.721},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.695},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.776},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.836},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.79},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.926},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.95},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.92},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.006},{\"date\":\"2010-09-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.943},{\"date\":\"2010-09-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.943},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.775},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.751},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.824},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.723},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.703},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.766},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.844},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.806},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.917},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.954},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.931},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.999},{\"date\":\"2010-09-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.96},{\"date\":\"2010-09-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.96},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.747},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.718},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.807},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.694},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.668},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.747},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.818},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.775},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.9},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.932},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.903},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.985},{\"date\":\"2010-09-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.951},{\"date\":\"2010-09-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.951},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.784},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.754},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.845},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.732},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.705},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.787},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.85},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.807},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.933},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.966},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.938},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.019},{\"date\":\"2010-10-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3},{\"date\":\"2010-10-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.871},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.842},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.929},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.819},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.793},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.873},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.934},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.894},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.011},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.053},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.029},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.097},{\"date\":\"2010-10-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.066},{\"date\":\"2010-10-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.066},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.887},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.845},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.972},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.834},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.795},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.917},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.953},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.9},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.056},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.071},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.034},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.14},{\"date\":\"2010-10-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.073},{\"date\":\"2010-10-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.073},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.87},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.823},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.966},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.817},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.772},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.909},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.938},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.879},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.053},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.058},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.014},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.139},{\"date\":\"2010-10-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.067},{\"date\":\"2010-10-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.067},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.861},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.811},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.962},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.806},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.76},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.903},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.929},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.867},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.05},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.051},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.004},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.139},{\"date\":\"2010-11-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.067},{\"date\":\"2010-11-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.067},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.917},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.881},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.99},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.865},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.832},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.934},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.979},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.931},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.073},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.102},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.069},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.161},{\"date\":\"2010-11-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.116},{\"date\":\"2010-11-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.116},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.944},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.899},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.035},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.892},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.849},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.98},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.007},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.952},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.115},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.13},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.089},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.205},{\"date\":\"2010-11-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.184},{\"date\":\"2010-11-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.184},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.931},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.88},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.037},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.876},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.828},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.979},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.999},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.937},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.119},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.124},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.075},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.215},{\"date\":\"2010-11-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.171},{\"date\":\"2010-11-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.171},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.912},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.858},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.022},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.856},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.805},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.963},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.982},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.917},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.107},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.108},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.056},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.205},{\"date\":\"2010-11-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.162},{\"date\":\"2010-11-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.162},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.013},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.97},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.101},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.958},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.917},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.045},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.079},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.027},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.181},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.207},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.169},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.277},{\"date\":\"2010-12-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.197},{\"date\":\"2010-12-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.197},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.035},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.99},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.126},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.98},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.937},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.07},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.101},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.047},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.204},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.227},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.189},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.299},{\"date\":\"2010-12-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.231},{\"date\":\"2010-12-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.231},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.037},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.987},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.14},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.982},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.934},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.084},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.104},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.046},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.217},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.231},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.188},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.313},{\"date\":\"2010-12-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.248},{\"date\":\"2010-12-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.248},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.106},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.067},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.185},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.052},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.015},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.13},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.171},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.124},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.262},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.296},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.264},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.354},{\"date\":\"2010-12-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.294},{\"date\":\"2010-12-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.294},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.124},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.086},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.201},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.07},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.034},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.146},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.188},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.142},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.278},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.314},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.283},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.372},{\"date\":\"2011-01-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.331},{\"date\":\"2011-01-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.331},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.142},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.103},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.221},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.089},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.052},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.166},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.204},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.157},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.297},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.33},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.298},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.391},{\"date\":\"2011-01-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.333},{\"date\":\"2011-01-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.333},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.158},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.12},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.235},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.104},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.068},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.179},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.222},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.174},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.313},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.347},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.316},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.406},{\"date\":\"2011-01-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.407},{\"date\":\"2011-01-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.407},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.163},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.125},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.241},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.11},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.074},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.186},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.227},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.18},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.318},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.353},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.322},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.412},{\"date\":\"2011-01-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.43},{\"date\":\"2011-01-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.43},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.155},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.113},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.241},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.101},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.061},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.186},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.221},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.169},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.321},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.345},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.308},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.413},{\"date\":\"2011-01-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.438},{\"date\":\"2011-01-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.438},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.185},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.145},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.266},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.132},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.094},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.211},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.251},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.202},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.345},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.371},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.338},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.434},{\"date\":\"2011-02-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.513},{\"date\":\"2011-02-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.513},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.193},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.147},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.288},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.14},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.095},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.233},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.259},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.203},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.368},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.382},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.343},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.455},{\"date\":\"2011-02-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.534},{\"date\":\"2011-02-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.534},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.243},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.193},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.345},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.189},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.141},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.29},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.311},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.251},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.428},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.428},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.384},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.511},{\"date\":\"2011-02-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.573},{\"date\":\"2011-02-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.573},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.435},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.392},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.523},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.383},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.341},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.471},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.499},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.446},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.603},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.62},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.587},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.683},{\"date\":\"2011-02-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.716},{\"date\":\"2011-02-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.716},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.572},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.524},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.671},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.52},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.473},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.617},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.636},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.576},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.753},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.758},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.717},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.834},{\"date\":\"2011-03-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.871},{\"date\":\"2011-03-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.871},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.621},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.569},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.726},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.567},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.517},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.671},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.69},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.626},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.813},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.809},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.768},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.887},{\"date\":\"2011-03-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.908},{\"date\":\"2011-03-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.908},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.617},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.56},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.732},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.562},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.507},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.678},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.686},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.617},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.819},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.806},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.759},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.893},{\"date\":\"2011-03-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.907},{\"date\":\"2011-03-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.907},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.65},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.59},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.771},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.596},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.538},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.719},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.718},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.647},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.857},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.836},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.787},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.925},{\"date\":\"2011-03-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.932},{\"date\":\"2011-03-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.932},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.737},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.686},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.84},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.684},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.635},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.786},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.801},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.737},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.925},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.921},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.88},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.998},{\"date\":\"2011-04-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.976},{\"date\":\"2011-04-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.976},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.843},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.793},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.947},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.791},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.743},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.893},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.907},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.842},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.032},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.027},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.985},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.105},{\"date\":\"2011-04-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.078},{\"date\":\"2011-04-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.078},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.896},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.837},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.017},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.844},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.787},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.964},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.96},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.887},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.101},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.08},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.029},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.177},{\"date\":\"2011-04-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.105},{\"date\":\"2011-04-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.105},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.932},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.867},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.064},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.879},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.817},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.011},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.994},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.916},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.143},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.117},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.059},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.225},{\"date\":\"2011-04-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.098},{\"date\":\"2011-04-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.098},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.014},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.955},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.134},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.963},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.906},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.081},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.075},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.004},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.212},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.198},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.144},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.297},{\"date\":\"2011-05-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.124},{\"date\":\"2011-05-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.124},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.018},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.957},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.142},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.965},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.907},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.087},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.081},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.009},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.221},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.206},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.15},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.31},{\"date\":\"2011-05-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.104},{\"date\":\"2011-05-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.104},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.014},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.956},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.132},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.96},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.905},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.076},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.079},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.01},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.213},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.204},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.15},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.305},{\"date\":\"2011-05-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.061},{\"date\":\"2011-05-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.061},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.904},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.84},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.035},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.849},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.788},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.976},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.975},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.9},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.12},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.1},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.036},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.218},{\"date\":\"2011-05-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.997},{\"date\":\"2011-05-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.997},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.848},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.791},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.965},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.794},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.741},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.905},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.914},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.842},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.053},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.041},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.981},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.15},{\"date\":\"2011-05-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.948},{\"date\":\"2011-05-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.948},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.833},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.785},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.929},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.781},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.738},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.87},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.891},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.827},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.014},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.02},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.97},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.112},{\"date\":\"2011-06-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.94},{\"date\":\"2011-06-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.94},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.767},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.713},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.877},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.713},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.664},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.816},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.829},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.761},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.961},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.958},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.902},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.063},{\"date\":\"2011-06-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.954},{\"date\":\"2011-06-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.954},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.708},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.647},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.831},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.652},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.597},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.769},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.776},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.702},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.919},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.904},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.84},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.022},{\"date\":\"2011-06-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.95},{\"date\":\"2011-06-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.95},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.631},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.565},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.765},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.574},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.513},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.702},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.7},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.621},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.852},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.833},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.764},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.959},{\"date\":\"2011-06-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.888},{\"date\":\"2011-06-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.888},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.634},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.584},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.736},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.579},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.534},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.674},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.699},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.635},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.822},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.829},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.775},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.929},{\"date\":\"2011-07-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.85},{\"date\":\"2011-07-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.85},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.695},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.658},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.771},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.641},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.608},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.71},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.756},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.707},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.851},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.889},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.851},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.96},{\"date\":\"2011-07-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.899},{\"date\":\"2011-07-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.899},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.736},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.699},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.812},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.682},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.648},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.753},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.796},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.75},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.885},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.932},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.896},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.998},{\"date\":\"2011-07-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.923},{\"date\":\"2011-07-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.923},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.754},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.72},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.824},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.699},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.667},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.766},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.819},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.777},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.899},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.951},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.919},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.01},{\"date\":\"2011-07-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.949},{\"date\":\"2011-07-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.949},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.766},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.737},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.826},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.711},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.684},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.768},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.829},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.792},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.9},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.963},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.937},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.013},{\"date\":\"2011-08-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.937},{\"date\":\"2011-08-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.937},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.73},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.698},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.794},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.674},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.646},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.733},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.794},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.753},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.872},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.927},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.895},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.985},{\"date\":\"2011-08-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.897},{\"date\":\"2011-08-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.897},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.662},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.629},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.727},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.604},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.576},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.664},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.728},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.686},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.81},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.865},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.832},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.927},{\"date\":\"2011-08-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.835},{\"date\":\"2011-08-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.835},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.638},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.605},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.705},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.581},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.552},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.641},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.703},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.658},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.791},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.839},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.804},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.904},{\"date\":\"2011-08-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.81},{\"date\":\"2011-08-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.81},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.682},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.651},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.744},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.627},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.601},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.683},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.746},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.703},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.828},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.874},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.842},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.933},{\"date\":\"2011-08-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.82},{\"date\":\"2011-08-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.82},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.727},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.692},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.8},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.674},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.643},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.741},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.791},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.742},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.885},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.914},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.878},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.98},{\"date\":\"2011-09-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.868},{\"date\":\"2011-09-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.868},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.715},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.678},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.79},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.661},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.629},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.729},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.78},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.728},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.881},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.904},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.866},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.974},{\"date\":\"2011-09-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.862},{\"date\":\"2011-09-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.862},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.657},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.611},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.751},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.601},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.56},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.688},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.727},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.666},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.846},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.853},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.805},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.941},{\"date\":\"2011-09-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.833},{\"date\":\"2011-09-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.833},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.568},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.514},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.677},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.509},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.461},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.612},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.642},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.573},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.775},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.77},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.716},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.871},{\"date\":\"2011-09-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.786},{\"date\":\"2011-09-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.786},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.492},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.435},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.609},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.433},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.381},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.543},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.569},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.495},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.711},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.698},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.64},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.806},{\"date\":\"2011-10-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.749},{\"date\":\"2011-10-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.749},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.476},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.422},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.584},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.417},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.368},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.52},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.551},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.481},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.685},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.679},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.627},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.777},{\"date\":\"2011-10-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.721},{\"date\":\"2011-10-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.721},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.533},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.484},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.632},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.476},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.431},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.571},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.604},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.54},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.728},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.73},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.683},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.818},{\"date\":\"2011-10-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.801},{\"date\":\"2011-10-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.801},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.52},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.469},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.623},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.462},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.415},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.56},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.594},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.529},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.721},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.721},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.673},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.811},{\"date\":\"2011-10-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.825},{\"date\":\"2011-10-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.825},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.511},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.46},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.614},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.452},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.405},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.551},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.587},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.52},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.714},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.713},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.664},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.803},{\"date\":\"2011-10-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.892},{\"date\":\"2011-10-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.892},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.482},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.424},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.599},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.424},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.37},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.535},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.558},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.483},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.701},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.683},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.627},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.788},{\"date\":\"2011-11-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.887},{\"date\":\"2011-11-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.887},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.495},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.442},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.602},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.436},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.388},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.538},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.571},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.502},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.703},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.697},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.647},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.792},{\"date\":\"2011-11-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.987},{\"date\":\"2011-11-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.987},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.427},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.367},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.55},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.368},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.312},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.485},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.503},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.426},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.652},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.634},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.576},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.741},{\"date\":\"2011-11-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.01},{\"date\":\"2011-11-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.01},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.368},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.305},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.496},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.307},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.248},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.43},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.447},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.367},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.601},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.581},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.52},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.694},{\"date\":\"2011-11-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.964},{\"date\":\"2011-11-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.964},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.35},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.296},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.46},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.29},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.24},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.395},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.426},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.355},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.562},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.56},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.508},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.656},{\"date\":\"2011-12-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.931},{\"date\":\"2011-12-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.931},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.346},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.301},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.437},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.286},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.244},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.372},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.421},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.362},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.537},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.554},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.512},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.633},{\"date\":\"2011-12-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.894},{\"date\":\"2011-12-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.894},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.29},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.242},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.39},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.229},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.183},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.325},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.368},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.306},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.489},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.504},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.46},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.587},{\"date\":\"2011-12-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.828},{\"date\":\"2011-12-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.828},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.317},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.269},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.413},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.258},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.213},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.35},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.388},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.326},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.508},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.524},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.481},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.603},{\"date\":\"2011-12-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.791},{\"date\":\"2011-12-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.791},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.358},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.31},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.454},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.299},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.254},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.393},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.429},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.368},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.548},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.567},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.527},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.641},{\"date\":\"2012-01-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.783},{\"date\":\"2012-01-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.783},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.441},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.39},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.546},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.382},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.333},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.486},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.512},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.448},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.637},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.649},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.607},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.725},{\"date\":\"2012-01-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.828},{\"date\":\"2012-01-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.828},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.451},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.4},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.554},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.391},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.342},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.494},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.522},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.459},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.645},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.66},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.621},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.734},{\"date\":\"2012-01-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.854},{\"date\":\"2012-01-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.854},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.45},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.392},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.566},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.389},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.333},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.505},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.522},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.453},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.655},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.664},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.617},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.75},{\"date\":\"2012-01-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.848},{\"date\":\"2012-01-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.848},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.5},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.446},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.61},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.439},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.386},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.55},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.573},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.51},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.694},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.716},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.675},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.793},{\"date\":\"2012-01-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.85},{\"date\":\"2012-01-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.85},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.542},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.496},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.637},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.482},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.436},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.578},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.614},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.558},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.723},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.756},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.721},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.822},{\"date\":\"2012-02-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.856},{\"date\":\"2012-02-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.856},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.584},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.526},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.702},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.523},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.466},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.642},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.659},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.593},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.787},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.798},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.751},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.885},{\"date\":\"2012-02-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.943},{\"date\":\"2012-02-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.943},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.652},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.582},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.794},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.591},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.523},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.735},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.729},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.647},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.887},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.865},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.808},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.971},{\"date\":\"2012-02-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.96},{\"date\":\"2012-02-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.96},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.78},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.698},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.945},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.721},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.641},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.889},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.855},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.759},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.041},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.983},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.915},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.11},{\"date\":\"2012-02-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.051},{\"date\":\"2012-02-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.051},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.849},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.771},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.009},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.793},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.717},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.954},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.92},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.824},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.104},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.043},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.977},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.167},{\"date\":\"2012-03-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.094},{\"date\":\"2012-03-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.094},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.884},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.8},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.056},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.829},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.747},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.002},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.954},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.852},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.15},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.077},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.003},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.214},{\"date\":\"2012-03-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.123},{\"date\":\"2012-03-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.123},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.923},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.841},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.089},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.867},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.787},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.034},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.993},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.895},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.182},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.117},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.045},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.249},{\"date\":\"2012-03-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.142},{\"date\":\"2012-03-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.142},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.973},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.897},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.129},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.918},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.843},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.076},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.042},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.952},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.216},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.168},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.104},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.287},{\"date\":\"2012-03-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.147},{\"date\":\"2012-03-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.147},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.996},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.928},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.135},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.941},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.874},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.08},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.063},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.981},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.222},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.193},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.136},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.299},{\"date\":\"2012-04-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.142},{\"date\":\"2012-04-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.142},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.997},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.934},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.126},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.939},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.877},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.069},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.067},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.993},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.211},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.201},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.148},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.299},{\"date\":\"2012-04-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.148},{\"date\":\"2012-04-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.148},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.98},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.923},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.097},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.922},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.867},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.039},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.047},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.978},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.181},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.183},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.134},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.275},{\"date\":\"2012-04-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.127},{\"date\":\"2012-04-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.127},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.929},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.861},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.066},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.87},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.805},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.007},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.999},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.919},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.154},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.136},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.074},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.25},{\"date\":\"2012-04-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.085},{\"date\":\"2012-04-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.085},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.889},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.821},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.027},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.83},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.764},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.967},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.962},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.882},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.116},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.097},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.036},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.211},{\"date\":\"2012-04-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.073},{\"date\":\"2012-04-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.073},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.849},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.773},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.005},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.79},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.718},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.943},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.923},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.831},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.101},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.054},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.98},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.19},{\"date\":\"2012-05-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.057},{\"date\":\"2012-05-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.057},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.814},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.713},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.02},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.754},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.658},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.956},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.895},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.774},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.13},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.02},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.919},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.207},{\"date\":\"2012-05-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.004},{\"date\":\"2012-05-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.004},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.773},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.676},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.972},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.715},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.622},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.909},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.85},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.731},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.081},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.975},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.878},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.156},{\"date\":\"2012-05-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.956},{\"date\":\"2012-05-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.956},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.728},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.628},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.932},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.67},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.575},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.868},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.805},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.682},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.043},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.929},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.828},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.117},{\"date\":\"2012-05-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.897},{\"date\":\"2012-05-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.897},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.671},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.57},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.878},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.613},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.518},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.812},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.75},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.624},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.993},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.871},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.766},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.065},{\"date\":\"2012-06-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.846},{\"date\":\"2012-06-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.846},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.629},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.541},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.809},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.572},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.489},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.745},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.703},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.592},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.92},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.829},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.74},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.994},{\"date\":\"2012-06-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.781},{\"date\":\"2012-06-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.781},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.589},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.522},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.724},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.533},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.473},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.66},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.661},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.572},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.833},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.78},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.708},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.914},{\"date\":\"2012-06-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.729},{\"date\":\"2012-06-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.729},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.494},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.428},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.629},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.437},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.378},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.562},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.568},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.481},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.735},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.693},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.619},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.832},{\"date\":\"2012-06-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.678},{\"date\":\"2012-06-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.678},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.415},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.343},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.561},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.356},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.291},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.493},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.489},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.398},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.665},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.618},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.54},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.764},{\"date\":\"2012-07-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.648},{\"date\":\"2012-07-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.648},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.469},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.411},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.588},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.411},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.357},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.522},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.539},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.465},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.682},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.674},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.613},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.789},{\"date\":\"2012-07-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.683},{\"date\":\"2012-07-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.683},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.485},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.416},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.625},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.427},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.364},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.561},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.551},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.467},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.713},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.69},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.618},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.823},{\"date\":\"2012-07-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.695},{\"date\":\"2012-07-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.695},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.554},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.491},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.683},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.494},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.435},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.619},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.626},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.552},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.771},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.765},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.703},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.881},{\"date\":\"2012-07-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.783},{\"date\":\"2012-07-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.783},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.568},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.506},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.693},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.508},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.45},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.63},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.639},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.565},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.78},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.779},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.719},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.889},{\"date\":\"2012-07-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.796},{\"date\":\"2012-07-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.796},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.702},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.66},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.788},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.645},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.606},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.727},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.767},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.714},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.87},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.907},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.869},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.976},{\"date\":\"2012-08-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.85},{\"date\":\"2012-08-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.85},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.779},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.717},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.906},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.721},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.662},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.846},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.847},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.771},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.994},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.985},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.928},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.091},{\"date\":\"2012-08-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.965},{\"date\":\"2012-08-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.965},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.803},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.739},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.934},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.744},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.682},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.873},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.874},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.797},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.023},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.014},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.956},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.12},{\"date\":\"2012-08-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.026},{\"date\":\"2012-08-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.026},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.837},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.78},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.951},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.776},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.722},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.888},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.909},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.839},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.044},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.051},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.003},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.142},{\"date\":\"2012-08-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.089},{\"date\":\"2012-08-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.089},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.903},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.854},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.001},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.843},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.797},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.94},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.975},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.916},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.089},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.111},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.07},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.189},{\"date\":\"2012-09-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.127},{\"date\":\"2012-09-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.127},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.907},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.856},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.012},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.847},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.799},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.949},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.981},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.919},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.1},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.119},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.071},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.208},{\"date\":\"2012-09-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.132},{\"date\":\"2012-09-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.132},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.939},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.89},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.038},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.878},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.832},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.974},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.013},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.955},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.124},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.154},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.108},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.239},{\"date\":\"2012-09-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.135},{\"date\":\"2012-09-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.135},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.889},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.834},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.002},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.826},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.775},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.934},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.966},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.899},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.098},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.11},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.056},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.21},{\"date\":\"2012-09-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.086},{\"date\":\"2012-09-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.086},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.866},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.808},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.986},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.804},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.75},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.916},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.944},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.87},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.086},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.087},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.026},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.2},{\"date\":\"2012-10-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.079},{\"date\":\"2012-10-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.079},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.914},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.8},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.147},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.85},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.742},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.078},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.002},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.864},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.27},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.133},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.02},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.344},{\"date\":\"2012-10-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.094},{\"date\":\"2012-10-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.094},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.886},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.774},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.113},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.819},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.713},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.042},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.976},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.841},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.238},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.113},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.004},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.316},{\"date\":\"2012-10-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.15},{\"date\":\"2012-10-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.15},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.756},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.645},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.981},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.687},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.582},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.908},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.85},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.717},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.107},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.992},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.884},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.193},{\"date\":\"2012-10-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.116},{\"date\":\"2012-10-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.116},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.638},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.545},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.826},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.568},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.48},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.752},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.733},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.622},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.948},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.878},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.788},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.044},{\"date\":\"2012-10-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.03},{\"date\":\"2012-10-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.03},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.563},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.471},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.749},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.492},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.406},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.673},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.652},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.542},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.864},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.808},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.717},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.978},{\"date\":\"2012-11-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.01},{\"date\":\"2012-11-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.01},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.518},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.437},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.685},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.449},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.372},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.611},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.605},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.509},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.793},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.761},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.678},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.913},{\"date\":\"2012-11-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.98},{\"date\":\"2012-11-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.98},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.497},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.423},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.649},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.429},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.36},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.573},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.579},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.489},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.754},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.74},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.662},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.885},{\"date\":\"2012-11-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.976},{\"date\":\"2012-11-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.976},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.505},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.445},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.628},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.437},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.382},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.553},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.585},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.511},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.73},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.746},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.684},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.861},{\"date\":\"2012-11-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.034},{\"date\":\"2012-11-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.034},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.463},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.401},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.589},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.394},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.337},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.513},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.548},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.474},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.692},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.707},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.643},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.826},{\"date\":\"2012-12-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.027},{\"date\":\"2012-12-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.027},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.419},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.363},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.534},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.349},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.297},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.459},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.504},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.436},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.636},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.664},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.606},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.77},{\"date\":\"2012-12-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.991},{\"date\":\"2012-12-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.991},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.324},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.263},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.448},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.254},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.198},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.371},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.409},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.336},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.551},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.571},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.507},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.69},{\"date\":\"2012-12-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.945},{\"date\":\"2012-12-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.945},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.328},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.271},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.444},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.257},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.205},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.366},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.415},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.346},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.548},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.576},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.517},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.688},{\"date\":\"2012-12-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.923},{\"date\":\"2012-12-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.923},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.369},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.311},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.486},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.298},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.245},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.41},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.455},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.386},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.587},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.617},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.56},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.723},{\"date\":\"2012-12-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.918},{\"date\":\"2012-12-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.918},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.373},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.304},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.512},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.299},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.233},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.437},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.463},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.383},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.616},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.631},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.568},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.748},{\"date\":\"2013-01-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.911},{\"date\":\"2013-01-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.911},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.377},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.308},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.519},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.303},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.236},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.444},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.467},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.386},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.623},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.637},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.575},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.753},{\"date\":\"2013-01-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.894},{\"date\":\"2013-01-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.894},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.386},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.321},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.519},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.315},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.254},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.444},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.473},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.394},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.626},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.636},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.574},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.751},{\"date\":\"2013-01-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.902},{\"date\":\"2013-01-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.902},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.427},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.362},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.558},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.357},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.296},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.484},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.512},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.434},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.663},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.673},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.613},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.783},{\"date\":\"2013-01-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.927},{\"date\":\"2013-01-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.927},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.604},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.534},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.748},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.538},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.471},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.678},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.683},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.598},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.848},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.841},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.776},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.963},{\"date\":\"2013-02-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.022},{\"date\":\"2013-02-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.022},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.677},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.599},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.836},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.611},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.537},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.769},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.756},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.663},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.938},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.91},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.838},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.042},{\"date\":\"2013-02-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.104},{\"date\":\"2013-02-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.104},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.812},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.753},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.932},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.747},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.69},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.866},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.891},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.819},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.031},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.042},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.993},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.132},{\"date\":\"2013-02-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.157},{\"date\":\"2013-02-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.157},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.851},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.787},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.98},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.784},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.722},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.914},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.934},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.859},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.08},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.084},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.031},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.181},{\"date\":\"2013-02-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.159},{\"date\":\"2013-02-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.159},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.826},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.763},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.955},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.759},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.698},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.888},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.91},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.833},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.06},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.061},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.009},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.158},{\"date\":\"2013-03-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.13},{\"date\":\"2013-03-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.13},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.779},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.71},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.918},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.71},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.644},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.85},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.865},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.783},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.022},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.018},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.96},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.124},{\"date\":\"2013-03-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.088},{\"date\":\"2013-03-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.088},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.764},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.699},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.897},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.696},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.633},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.829},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.85},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.772},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.001},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.002},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.946},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.104},{\"date\":\"2013-03-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.047},{\"date\":\"2013-03-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.047},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.746},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.68},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.881},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.68},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.616},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.813},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.828},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.749},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.982},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.981},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.924},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.087},{\"date\":\"2013-03-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.006},{\"date\":\"2013-03-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.006},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.714},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.638},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.867},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.645},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.572},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.799},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.798},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.71},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.969},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.953},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.887},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.076},{\"date\":\"2013-04-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.993},{\"date\":\"2013-04-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.993},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.676},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.604},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.822},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.608},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.539},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.751},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.761},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.673},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.93},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.916},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.852},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.034},{\"date\":\"2013-04-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.977},{\"date\":\"2013-04-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.977},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.611},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.535},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.766},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.542},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.469},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.694},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.7},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.609},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.878},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.852},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.782},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.98},{\"date\":\"2013-04-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.942},{\"date\":\"2013-04-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.942},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.603},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.536},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.74},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.536},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.472},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.671},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.687},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.604},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.847},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.836},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.777},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.947},{\"date\":\"2013-04-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.887},{\"date\":\"2013-04-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.887},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.587},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.519},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.725},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.52},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.455},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.657},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.668},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.584},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.829},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.822},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.763},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.931},{\"date\":\"2013-04-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.851},{\"date\":\"2013-04-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.851},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.602},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.54},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.729},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.538},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.478},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.662},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.681},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.603},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.832},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.83},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.776},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.93},{\"date\":\"2013-05-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.845},{\"date\":\"2013-05-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.845},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.665},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.601},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.795},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.603},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.543},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.729},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.739},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.656},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.9},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.883},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.824},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.993},{\"date\":\"2013-05-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.866},{\"date\":\"2013-05-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.866},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.729},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.687},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.816},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.673},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.636},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.752},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.801},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.741},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.918},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.926},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.88},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.011},{\"date\":\"2013-05-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.89},{\"date\":\"2013-05-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.89},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.704},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.656},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.802},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.645},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.601},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.736},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.779},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.714},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.904},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.912},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.863},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.003},{\"date\":\"2013-05-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.88},{\"date\":\"2013-05-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.88},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.705},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.664},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.788},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.646},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.61},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.721},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.773},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.712},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.892},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.913},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.87},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.992},{\"date\":\"2013-06-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.869},{\"date\":\"2013-06-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.869},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.715},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.674},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.798},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.655},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.619},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.731},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.783},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.722},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.9},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.929},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.891},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4},{\"date\":\"2013-06-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.849},{\"date\":\"2013-06-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.849},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.689},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.636},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.798},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.626},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.577},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.73},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.764},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.692},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.901},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.912},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.863},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.005},{\"date\":\"2013-06-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.841},{\"date\":\"2013-06-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.841},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.645},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.563},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.81},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.577},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.498},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.741},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.733},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.635},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.922},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.88},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.807},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.015},{\"date\":\"2013-06-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.838},{\"date\":\"2013-06-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.838},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.567},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.478},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.748},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.496},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.41},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.676},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.66},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.557},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.86},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.813},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.732},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.964},{\"date\":\"2013-07-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.817},{\"date\":\"2013-07-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.817},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.563},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.481},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.729},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.492},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.413},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.657},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.654},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.558},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.84},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.81},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.737},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.947},{\"date\":\"2013-07-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.828},{\"date\":\"2013-07-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.828},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.706},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.634},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.853},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.639},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.57},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.786},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.786},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.701},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.952},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.943},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.88},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.059},{\"date\":\"2013-07-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.867},{\"date\":\"2013-07-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.867},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.751},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.678},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.898},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.682},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.612},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.831},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.831},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.746},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.995},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.993},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.932},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.105},{\"date\":\"2013-07-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.903},{\"date\":\"2013-07-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.903},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.716},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.638},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.876},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.646},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.57},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.806},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.801},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.71},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.975},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.963},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.895},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.091},{\"date\":\"2013-07-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.915},{\"date\":\"2013-07-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.915},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.701},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.633},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.84},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.632},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.566},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.769},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.781},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.7},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.938},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.947},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.887},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.059},{\"date\":\"2013-08-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.909},{\"date\":\"2013-08-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.909},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.633},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.562},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.778},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.561},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.493},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.703},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.719},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.635},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.883},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.886},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.82},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.01},{\"date\":\"2013-08-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.896},{\"date\":\"2013-08-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.896},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.622},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.565},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.738},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.55},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.496},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.664},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.707},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.638},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.841},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.874},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.824},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.967},{\"date\":\"2013-08-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.9},{\"date\":\"2013-08-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.9},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.623},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.573},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.727},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.552},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.504},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.653},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.707},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.644},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.829},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.875},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.832},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.956},{\"date\":\"2013-08-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.913},{\"date\":\"2013-08-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.913},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.678},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.641},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.751},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.608},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.575},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.679},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.76},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.713},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.851},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.922},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.893},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.977},{\"date\":\"2013-09-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.981},{\"date\":\"2013-09-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.981},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.658},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.607},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.761},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.587},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.54},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.687},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.741},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.678},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.864},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.906},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.862},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.987},{\"date\":\"2013-09-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.981},{\"date\":\"2013-09-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.981},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.619},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.544},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.773},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.547},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.475},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.698},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.709},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.617},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.887},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.87},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.802},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.995},{\"date\":\"2013-09-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.974},{\"date\":\"2013-09-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.974},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.567},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.493},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.717},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.495},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.425},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.641},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.656},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.564},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.833},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.819},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.751},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.945},{\"date\":\"2013-09-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.949},{\"date\":\"2013-09-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.949},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.499},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.425},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.651},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.425},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.354},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.574},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.596},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.507},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.77},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.758},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.691},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.881},{\"date\":\"2013-09-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.919},{\"date\":\"2013-09-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.919},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.441},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.369},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.589},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.367},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.298},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.511},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.535},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.445},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.708},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.701},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.635},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.824},{\"date\":\"2013-10-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.897},{\"date\":\"2013-10-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.897},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.43},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.368},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.557},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.354},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.296},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.478},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.527},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.451},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.676},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.694},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.638},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.798},{\"date\":\"2013-10-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.886},{\"date\":\"2013-10-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.886},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.435},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.382},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.542},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.36},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.31},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.464},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.531},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.463},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.663},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.696},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.652},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.779},{\"date\":\"2013-10-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.886},{\"date\":\"2013-10-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.886},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.372},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.311},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.498},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.294},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.235},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.417},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.475},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.4},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.621},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.644},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.591},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.742},{\"date\":\"2013-10-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.87},{\"date\":\"2013-10-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.87},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.343},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.284},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.463},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.265},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.209},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.382},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.441},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.366},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.584},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.614},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.564},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.708},{\"date\":\"2013-11-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.857},{\"date\":\"2013-11-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.857},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.274},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.21},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.405},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.194},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.133},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.323},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.38},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.303},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.528},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.552},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.498},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.651},{\"date\":\"2013-11-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.832},{\"date\":\"2013-11-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.832},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.298},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.239},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.419},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.219},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.161},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.341},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.401},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.333},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.532},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.573},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.526},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.661},{\"date\":\"2013-11-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.822},{\"date\":\"2013-11-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.822},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.372},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.32},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.478},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.293},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.241},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.401},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.47},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.413},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.581},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.649},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.611},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.719},{\"date\":\"2013-11-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.844},{\"date\":\"2013-11-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.844},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.353},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.29},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.482},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.272},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.209},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.403},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.457},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.387},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.592},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.635},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.585},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.729},{\"date\":\"2013-12-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.883},{\"date\":\"2013-12-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.883},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.35},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.287},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.478},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.269},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.208},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.397},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.453},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.381},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.591},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.632},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.579},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.73},{\"date\":\"2013-12-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.879},{\"date\":\"2013-12-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.879},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.321},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.245},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.475},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.239},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.165},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.395},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.423},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.339},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.585},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.605},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.541},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.725},{\"date\":\"2013-12-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.871},{\"date\":\"2013-12-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.871},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.351},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.277},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.502},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.271},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.198},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.422},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.451},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.368},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.613},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.632},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.567},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.751},{\"date\":\"2013-12-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.873},{\"date\":\"2013-12-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.873},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.409},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.34},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.548},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.331},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.264},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.471},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.503},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.425},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.654},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.682},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.625},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.789},{\"date\":\"2013-12-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.903},{\"date\":\"2013-12-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.903},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.411},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.34},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.557},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.332},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.261},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.48},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.513},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.434},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.665},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.69},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.633},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.796},{\"date\":\"2014-01-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.91},{\"date\":\"2014-01-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.91},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.406},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.345},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.53},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.327},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.267},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.452},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.505},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.435},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.641},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.683},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.636},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.771},{\"date\":\"2014-01-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.886},{\"date\":\"2014-01-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.886},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.376},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.319},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.494},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.296},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.24},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.414},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.477},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.41},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.607},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.657},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.611},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.741},{\"date\":\"2014-01-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.873},{\"date\":\"2014-01-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.873},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.375},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.32},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.486},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.295},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.241},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.407},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.474},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.41},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.598},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.654},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.612},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.731},{\"date\":\"2014-01-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.904},{\"date\":\"2014-01-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.904},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.372},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.322},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.475},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.292},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.243},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.395},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.475},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.415},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.59},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.651},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.612},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.723},{\"date\":\"2014-02-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.951},{\"date\":\"2014-02-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.951},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.388},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.335},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.496},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.309},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.257},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.417},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.487},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.423},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.61},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.664},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.623},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.739},{\"date\":\"2014-02-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.977},{\"date\":\"2014-02-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.977},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.457},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.402},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.569},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.38},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.326},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.492},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.555},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.491},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.678},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.728},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.686},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.806},{\"date\":\"2014-02-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.989},{\"date\":\"2014-02-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.989},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.52},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.469},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.624},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.444},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.394},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.55},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.615},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.555},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.73},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.783},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.747},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.85},{\"date\":\"2014-02-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.017},{\"date\":\"2014-02-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.017},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.553},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.494},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.673},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.479},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.421},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.601},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.648},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.58},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.779},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.812},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.768},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.893},{\"date\":\"2014-03-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.016},{\"date\":\"2014-03-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.016},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.584},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.523},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.707},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.512},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.452},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.637},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.674},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.605},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.81},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.835},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.788},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.923},{\"date\":\"2014-03-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.021},{\"date\":\"2014-03-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.021},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.619},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.56},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.74},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.547},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.489},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.669},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.71},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.638},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.848},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.871},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.825},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.956},{\"date\":\"2014-03-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.003},{\"date\":\"2014-03-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.003},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.622},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.559},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.751},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.549},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.487},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.68},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.716},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.642},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.859},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.876},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.828},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.965},{\"date\":\"2014-03-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.988},{\"date\":\"2014-03-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.988},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.651},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.592},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.771},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.579},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.521},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.701},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.743},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.673},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.879},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.904},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.86},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.984},{\"date\":\"2014-03-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.975},{\"date\":\"2014-03-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.975},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.67},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.607},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.798},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.596},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.533},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.728},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.769},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.697},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.907},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.928},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.884},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.009},{\"date\":\"2014-04-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.959},{\"date\":\"2014-04-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.959},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.725},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.655},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.867},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.651},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.581},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.798},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.823},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.743},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.978},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.976},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.927},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.068},{\"date\":\"2014-04-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.952},{\"date\":\"2014-04-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.952},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.758},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.687},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.901},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.683},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.612},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.832},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.857},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.779},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.01},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.014},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.966},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.104},{\"date\":\"2014-04-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.971},{\"date\":\"2014-04-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.971},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.788},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.71},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.947},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.713},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.635},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.879},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.888},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.802},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.055},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.047},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.991},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.152},{\"date\":\"2014-04-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.975},{\"date\":\"2014-04-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.975},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.761},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.683},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.92},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.684},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.606},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.849},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.864},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.777},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.033},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.027},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.971},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.13},{\"date\":\"2014-05-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.964},{\"date\":\"2014-05-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.964},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.746},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.675},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.89},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.668},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.597},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.817},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.85},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.771},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.003},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.015},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.966},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.107},{\"date\":\"2014-05-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.948},{\"date\":\"2014-05-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.948},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.743},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.671},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.889},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.665},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.593},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.816},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.844},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.763},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.002},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.011},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.96},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.106},{\"date\":\"2014-05-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.934},{\"date\":\"2014-05-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.934},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.75},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.683},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.887},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.674},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.607},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.815},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.85},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.773},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.998},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.014},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.966},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.102},{\"date\":\"2014-05-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.925},{\"date\":\"2014-05-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.925},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.765},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.699},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.9},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.69},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.624},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.83},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.862},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.786},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.009},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.024},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.977},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.113},{\"date\":\"2014-06-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.918},{\"date\":\"2014-06-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.918},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.749},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.683},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.882},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.674},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.61},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.811},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.844},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.768},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.992},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.008},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.959},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.098},{\"date\":\"2014-06-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.892},{\"date\":\"2014-06-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.892},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.76},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.694},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.894},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.686},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.621},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.824},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.853},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.777},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.016},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.966},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.109},{\"date\":\"2014-06-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.882},{\"date\":\"2014-06-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.882},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.778},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.713},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.911},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.704},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.639},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.84},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.873},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.8},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.016},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.036},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.988},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.126},{\"date\":\"2014-06-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.919},{\"date\":\"2014-06-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.919},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.778},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.708},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.921},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.704},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.635},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.85},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.872},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.793},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.024},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.036},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.981},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.137},{\"date\":\"2014-06-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.92},{\"date\":\"2014-06-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.92},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.753},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.68},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.903},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.678},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.605},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.831},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.849},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.766},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.01},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.015},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.957},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.123},{\"date\":\"2014-07-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.913},{\"date\":\"2014-07-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.913},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.712},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.635},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.868},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.635},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.56},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.793},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.811},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.725},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.979},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.978},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.915},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.094},{\"date\":\"2014-07-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.894},{\"date\":\"2014-07-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.894},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.671},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.599},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.816},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.593},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.523},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.741},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.773},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.692},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.93},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.938},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.881},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.045},{\"date\":\"2014-07-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.869},{\"date\":\"2014-07-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.869},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.617},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.544},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.766},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.539},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.468},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.687},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.723},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.639},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.886},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.888},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.825},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.005},{\"date\":\"2014-07-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.858},{\"date\":\"2014-07-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.858},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.595},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.526},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.734},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.515},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.449},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.655},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.701},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.622},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.854},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.866},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.81},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.971},{\"date\":\"2014-08-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.853},{\"date\":\"2014-08-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.853},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.582},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.522},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.705},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.505},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.447},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.628},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.684},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.612},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.822},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.85},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.8},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.941},{\"date\":\"2014-08-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.843},{\"date\":\"2014-08-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.843},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.549},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.484},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.682},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.472},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.408},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.605},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.653},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.577},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.8},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.816},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.764},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.915},{\"date\":\"2014-08-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.835},{\"date\":\"2014-08-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.835},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.532},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.473},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.653},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.454},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.397},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.574},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.635},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.563},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.773},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.8},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.753},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.889},{\"date\":\"2014-08-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.821},{\"date\":\"2014-08-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.821},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.536},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.486},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.638},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.459},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.41},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.561},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.638},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.577},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.755},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.803},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.767},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.871},{\"date\":\"2014-09-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.814},{\"date\":\"2014-09-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.814},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.534},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.482},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.639},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.457},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.406},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.563},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.632},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.571},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.751},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.801},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.763},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.871},{\"date\":\"2014-09-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.814},{\"date\":\"2014-09-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.814},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.485},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.428},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.601},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.408},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.352},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.525},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.585},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.518},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.713},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.754},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.712},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.833},{\"date\":\"2014-09-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.801},{\"date\":\"2014-09-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.801},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.432},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.375},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.549},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.353},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.296},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.472},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.536},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.47},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.662},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.707},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.666},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.784},{\"date\":\"2014-09-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.778},{\"date\":\"2014-09-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.778},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.434},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.384},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.537},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.354},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.304},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.459},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.537},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.478},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.652},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.71},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.677},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.773},{\"date\":\"2014-09-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.755},{\"date\":\"2014-09-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.755},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.382},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.329},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.49},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.299},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.246},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.41},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.492},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.432},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.609},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.667},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.631},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.733},{\"date\":\"2014-10-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.733},{\"date\":\"2014-10-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.733},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.292},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.229},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.418},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.207},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.147},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.334},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.406},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.335},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.544},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.581},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.532},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.673},{\"date\":\"2014-10-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.698},{\"date\":\"2014-10-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.698},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.205},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.154},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.309},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.12},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.07},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.223},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.319},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.257},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.439},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.499},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.46},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.571},{\"date\":\"2014-10-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.656},{\"date\":\"2014-10-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.656},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.139},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.094},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.231},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.056},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.016},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.142},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.248},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.188},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.364},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.425},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.385},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.5},{\"date\":\"2014-10-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.635},{\"date\":\"2014-10-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.635},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.077},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.037},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.16},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.993},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.956},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.071},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.187},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.133},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.29},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.369},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.335},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.432},{\"date\":\"2014-11-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.623},{\"date\":\"2014-11-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.623},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.025},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.988},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.1},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.941},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.907},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.012},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.134},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.085},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.229},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.315},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.286},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.37},{\"date\":\"2014-11-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.677},{\"date\":\"2014-11-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.677},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.978},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.938},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.06},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.894},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.856},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.973},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.088},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.037},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.186},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.27},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.239},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.328},{\"date\":\"2014-11-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.661},{\"date\":\"2014-11-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.661},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.907},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.864},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.994},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.821},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.781},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.904},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.019},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.964},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.125},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.205},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.17},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.271},{\"date\":\"2014-11-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.628},{\"date\":\"2014-11-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.628},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.864},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.821},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.953},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.778},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.738},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.861},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.978},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.922},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.086},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.164},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.127},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.234},{\"date\":\"2014-12-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.605},{\"date\":\"2014-12-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.605},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.767},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.718},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.869},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.679},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.634},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.776},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.882},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.819},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.003},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.072},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.028},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.153},{\"date\":\"2014-12-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.535},{\"date\":\"2014-12-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.535},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.643},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.586},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.76},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.554},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.499},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.667},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.763},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.694},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.895},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.951},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.902},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.041},{\"date\":\"2014-12-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.419},{\"date\":\"2014-12-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.419},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.496},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.43},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.629},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.403},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.341},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.535},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.619},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.544},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.766},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.813},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.757},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.917},{\"date\":\"2014-12-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.281},{\"date\":\"2014-12-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.281},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.392},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.32},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.539},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.299},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.229},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.445},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.517},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.436},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.675},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.713},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.651},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.828},{\"date\":\"2014-12-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.213},{\"date\":\"2014-12-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.213},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.308},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.228},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.472},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.214},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.136},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.378},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.437},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.346},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.614},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.631},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.562},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.759},{\"date\":\"2015-01-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.137},{\"date\":\"2015-01-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.137},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.232},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.157},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.386},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.139},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.066},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.293},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.358},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.273},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.524},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.553},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.492},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.668},{\"date\":\"2015-01-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.053},{\"date\":\"2015-01-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.053},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.157},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.089},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.295},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.066},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.999},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.204},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.277},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.198},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.43},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.473},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.42},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.573},{\"date\":\"2015-01-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.933},{\"date\":\"2015-01-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.933},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.133},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.069},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.264},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.044},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.982},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.174},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.25},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.173},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.399},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.444},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.393},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.538},{\"date\":\"2015-01-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.866},{\"date\":\"2015-01-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.866},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.154},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.097},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.271},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.068},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.013},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.183},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.268},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.198},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.402},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.454},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.409},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.536},{\"date\":\"2015-02-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.831},{\"date\":\"2015-02-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.831},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.276},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.216},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.397},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.191},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.133},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.313},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.388},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.318},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.524},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.568},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.524},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.648},{\"date\":\"2015-02-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.835},{\"date\":\"2015-02-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.835},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.358},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.29},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.498},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.274},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.206},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.416},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.467},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.384},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.627},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.651},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.6},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.746},{\"date\":\"2015-02-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.865},{\"date\":\"2015-02-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.865},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.415},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.338},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.573},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.332},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.256},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.491},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.526},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.432},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.708},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.704},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.645},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.815},{\"date\":\"2015-02-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.9},{\"date\":\"2015-02-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.9},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.556},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.441},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.79},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.473},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.36},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.71},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.671},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.534},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.937},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.837},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.741},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.017},{\"date\":\"2015-03-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.936},{\"date\":\"2015-03-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.936},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.57},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.448},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.819},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.487},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.367},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.739},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.686},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.542},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.964},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.853},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.749},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.045},{\"date\":\"2015-03-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.944},{\"date\":\"2015-03-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.944},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.537},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.42},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.776},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.453},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.339},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.693},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.652},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.514},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.919},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.824},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.721},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.015},{\"date\":\"2015-03-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.917},{\"date\":\"2015-03-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.917},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.538},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.427},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.764},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.457},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.347},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.685},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.65},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.519},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.903},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.817},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.725},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.987},{\"date\":\"2015-03-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.864},{\"date\":\"2015-03-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.864},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.531},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.43},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.737},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.448},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.348},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.658},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.649},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.53},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.877},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.814},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.733},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.964},{\"date\":\"2015-03-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.824},{\"date\":\"2015-03-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.824},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.499},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.399},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.701},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.413},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.315},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.619},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.617},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.502},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.839},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.789},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.709},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.938},{\"date\":\"2015-04-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.784},{\"date\":\"2015-04-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.784},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.494},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.402},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.68},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.408},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.317},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.598},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.616},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.51},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.821},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.786},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.714},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.919},{\"date\":\"2015-04-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.754},{\"date\":\"2015-04-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.754},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.57},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.477},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.759},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.485},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.393},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.679},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.686},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.582},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.888},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.857},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.785},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.992},{\"date\":\"2015-04-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.78},{\"date\":\"2015-04-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.78},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.656},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.536},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.899},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.57},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.451},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.821},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.777},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.643},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.036},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.947},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.85},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.126},{\"date\":\"2015-04-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.811},{\"date\":\"2015-04-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.811},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.749},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.601},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.049},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.664},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.517},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.971},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.87},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.703},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.192},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.036},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.911},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.269},{\"date\":\"2015-05-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.854},{\"date\":\"2015-05-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.854},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.776},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.631},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.072},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.691},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.547},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.995},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.9},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.738},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.214},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.063},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.94},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.291},{\"date\":\"2015-05-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.878},{\"date\":\"2015-05-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.878},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.827},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.687},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.114},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.744},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.604},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.037},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.949},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.789},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.26},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.109},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.991},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.328},{\"date\":\"2015-05-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.904},{\"date\":\"2015-05-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.904},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.857},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.724},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.129},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.774},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.642},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.051},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.975},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.825},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.267},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.14},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.026},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.351},{\"date\":\"2015-05-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.914},{\"date\":\"2015-05-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.914},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.863},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.738},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.118},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.78},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.656},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.041},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.978},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.837},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.25},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.143},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.038},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.338},{\"date\":\"2015-06-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.909},{\"date\":\"2015-06-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.909},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.863},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.751},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.093},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.78},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.668},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.014},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.977},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.849},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.224},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.15},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.057},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.323},{\"date\":\"2015-06-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.884},{\"date\":\"2015-06-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.884},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.918},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.825},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.105},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.835},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.744},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.028},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.025},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.922},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.225},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.202},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.128},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.338},{\"date\":\"2015-06-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.87},{\"date\":\"2015-06-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.87},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.895},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.803},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.082},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.812},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.72},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.004},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.006},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.902},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.206},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.182},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.109},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.317},{\"date\":\"2015-06-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.859},{\"date\":\"2015-06-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.859},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.885},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.796},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.066},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.801},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.713},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.985},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.997},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.896},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.193},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.175},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.103},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.31},{\"date\":\"2015-06-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.843},{\"date\":\"2015-06-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.843},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.877},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.786},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.063},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.793},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.702},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.982},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.99},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.887},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.188},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.168},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.093},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.307},{\"date\":\"2015-07-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.832},{\"date\":\"2015-07-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.832},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.92},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.778},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.21},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.834},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.694},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.127},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.044},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.878},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.364},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.213},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.087},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.446},{\"date\":\"2015-07-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.814},{\"date\":\"2015-07-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.814},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.888},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.744},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.183},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.802},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.661},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.098},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.012},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.841},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.343},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.179},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.049},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.419},{\"date\":\"2015-07-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.782},{\"date\":\"2015-07-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.782},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.833},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.69},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.124},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.745},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.605},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.037},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.96},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.792},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.286},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.129},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.002},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.365},{\"date\":\"2015-07-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.723},{\"date\":\"2015-07-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.723},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.779},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.641},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.06},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.689},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.555},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.971},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.909},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.745},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.225},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.083},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.959},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.314},{\"date\":\"2015-08-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.668},{\"date\":\"2015-08-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.668},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.72},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.594},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.977},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.629},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.505},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.888},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.85},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.703},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.134},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.03},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.92},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.236},{\"date\":\"2015-08-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.617},{\"date\":\"2015-08-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.617},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.803},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.691},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.029},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.716},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.608},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.943},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.927},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.794},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.184},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.096},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.999},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.276},{\"date\":\"2015-08-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.615},{\"date\":\"2015-08-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.615},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.726},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.62},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.941},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.637},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.534},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.853},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.854},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.728},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.098},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.027},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.936},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.197},{\"date\":\"2015-08-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.561},{\"date\":\"2015-08-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.561},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.602},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.496},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.819},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.51},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.406},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.727},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.734},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.606},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.981},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.916},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.824},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.087},{\"date\":\"2015-08-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.514},{\"date\":\"2015-08-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.514},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.532},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.428},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.743},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.437},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.337},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.648},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.662},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.536},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.908},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.853},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.764},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.02},{\"date\":\"2015-09-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.534},{\"date\":\"2015-09-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.534},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.471},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.374},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.67},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.375},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.28},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.573},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.605},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.488},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.833},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.801},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.72},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.952},{\"date\":\"2015-09-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.517},{\"date\":\"2015-09-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.517},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.425},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.332},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.615},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.327},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.237},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.518},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.561},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.449},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.778},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.759},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.682},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.9},{\"date\":\"2015-09-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.493},{\"date\":\"2015-09-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.493},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.418},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.34},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.579},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.322},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.246},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.482},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.551},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.454},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.739},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.748},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.685},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.864},{\"date\":\"2015-09-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.476},{\"date\":\"2015-09-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.476},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.415},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.347},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.554},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.318},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.252},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.456},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.545},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.459},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.712},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.748},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.697},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.842},{\"date\":\"2015-10-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.492},{\"date\":\"2015-10-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.492},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.432},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.376},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.545},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.337},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.283},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.448},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.561},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.487},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.703},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.757},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.717},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.832},{\"date\":\"2015-10-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.556},{\"date\":\"2015-10-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.556},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.374},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.314},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.494},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.277},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.22},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.396},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.505},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.429},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.653},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.705},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.662},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.786},{\"date\":\"2015-10-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.531},{\"date\":\"2015-10-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.531},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.326},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.262},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.457},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.228},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.166},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.357},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.46},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.379},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.617},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.663},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.614},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.755},{\"date\":\"2015-10-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.498},{\"date\":\"2015-10-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.498},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.322},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.265},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.439},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.224},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.17},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.337},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.455},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.379},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.602},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.66},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.617},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.741},{\"date\":\"2015-11-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.485},{\"date\":\"2015-11-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.485},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.335},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.269},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.468},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.235},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.172},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.367},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.468},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.387},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.626},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.678},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.629},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.769},{\"date\":\"2015-11-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.502},{\"date\":\"2015-11-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.502},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.281},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.21},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.424},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.178},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.11},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.322},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.42},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.335},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.585},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.633},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.58},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.731},{\"date\":\"2015-11-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.482},{\"date\":\"2015-11-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.482},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.198},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.117},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.362},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.094},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.015},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.258},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.338},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.243},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.522},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.556},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.492},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.675},{\"date\":\"2015-11-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.445},{\"date\":\"2015-11-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.445},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.165},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.079},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.34},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.059},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.974},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.236},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.308},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.209},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.501},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.529},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.462},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.655},{\"date\":\"2015-11-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.421},{\"date\":\"2015-11-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.421},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.159},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.074},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.334},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.053},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.969},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.231},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.303},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.206},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.49},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.523},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.457},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.647},{\"date\":\"2015-12-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.379},{\"date\":\"2015-12-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.379},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.144},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.059},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.317},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.037},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.953},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.214},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.287},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.191},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.474},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.509},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.446},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.626},{\"date\":\"2015-12-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.338},{\"date\":\"2015-12-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.338},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.133},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.035},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.332},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.026},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.929},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.23},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.28},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.169},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.495},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.499},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.425},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.638},{\"date\":\"2015-12-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.284},{\"date\":\"2015-12-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.284},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.141},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.039},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.348},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.034},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.933},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.244},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.29},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.172},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.519},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.506},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.427},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.653},{\"date\":\"2015-12-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.237},{\"date\":\"2015-12-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.237},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.135},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.027},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.354},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.028},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.922},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.25},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.285},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.161},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.525},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.498},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.413},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.656},{\"date\":\"2016-01-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.211},{\"date\":\"2016-01-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.211},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.104},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.994},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.327},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.996},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.888},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.224},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.253},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.126},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.499},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.469},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.382},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.631},{\"date\":\"2016-01-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.177},{\"date\":\"2016-01-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.177},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.022},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.917},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.235},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.914},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.81},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.131},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.172},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.052},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.404},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.39},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.308},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.544},{\"date\":\"2016-01-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.112},{\"date\":\"2016-01-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.112},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.965},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.859},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.182},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.856},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.752},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.076},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.118},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.996},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.352},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.337},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.252},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.495},{\"date\":\"2016-01-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.071},{\"date\":\"2016-01-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.071},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.932},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.837},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.124},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.822},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.729},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.017},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.085},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.976},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.294},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.307},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.233},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.443},{\"date\":\"2016-02-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.031},{\"date\":\"2016-02-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.031},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.87},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.773},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.068},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.759},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.663},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.961},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.025},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.915},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.237},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.247},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.172},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.388},{\"date\":\"2016-02-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.008},{\"date\":\"2016-02-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.008},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.834},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.747},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.01},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.724},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.638},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.904},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.984},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.885},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.176},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.209},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.144},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.33},{\"date\":\"2016-02-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.98},{\"date\":\"2016-02-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":1.98},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.837},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.767},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":1.98},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.73},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.661},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.874},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":1.983},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.902},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.14},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.205},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.154},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.3},{\"date\":\"2016-02-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.983},{\"date\":\"2016-02-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":1.983},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.887},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.817},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.03},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.783},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.715},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.925},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.029},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":1.943},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.196},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.244},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.191},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.342},{\"date\":\"2016-02-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":1.989},{\"date\":\"2016-02-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":1.989},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.943},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.882},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.067},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.841},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.782},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":1.964},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.081},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.005},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.227},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.294},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.25},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.374},{\"date\":\"2016-03-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.021},{\"date\":\"2016-03-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.021},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.062},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.988},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.214},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.961},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.888},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.116},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.2},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.114},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.366},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.409},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.357},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.505},{\"date\":\"2016-03-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.099},{\"date\":\"2016-03-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.099},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.109},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.036},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.258},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.007},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.935},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.159},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.248},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.163},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.413},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.461},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.41},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.555},{\"date\":\"2016-03-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.119},{\"date\":\"2016-03-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.119},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.169},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.079},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.353},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.066},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.976},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.255},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.31},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.208},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.507},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.521},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.454},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.645},{\"date\":\"2016-03-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.121},{\"date\":\"2016-03-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.121},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.185},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.095},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.367},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.083},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.994},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.271},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.323},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.222},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.52},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.532},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.465},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.655},{\"date\":\"2016-04-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.115},{\"date\":\"2016-04-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.115},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.173},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.085},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.351},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.069},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.981},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.253},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.315},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.217},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.504},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.527},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.463},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.645},{\"date\":\"2016-04-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.128},{\"date\":\"2016-04-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.128},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.24},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.155},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.411},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.137},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.053},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.314},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.378},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.283},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.562},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.59},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.528},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.706},{\"date\":\"2016-04-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.165},{\"date\":\"2016-04-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.165},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.265},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.182},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.432},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.162},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.08},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.335},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.405},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.313},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.582},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.616},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.557},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.725},{\"date\":\"2016-04-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.198},{\"date\":\"2016-04-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.198},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.342},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.271},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.487},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.24},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.168},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.391},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.482},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.404},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.633},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.693},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.647},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.778},{\"date\":\"2016-05-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.266},{\"date\":\"2016-05-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.266},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.325},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.249},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.481},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.22},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.143},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.384},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.469},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.387},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.627},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.683},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.633},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.775},{\"date\":\"2016-05-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.271},{\"date\":\"2016-05-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.271},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.345},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.274},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.489},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.242},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.17},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.392},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.485},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.41},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.631},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.7},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.655},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.785},{\"date\":\"2016-05-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.297},{\"date\":\"2016-05-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.297},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.403},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.339},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.532},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.3},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.235},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.435},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.541},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.472},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.674},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.756},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.717},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.828},{\"date\":\"2016-05-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.357},{\"date\":\"2016-05-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.357},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.44},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.382},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.557},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.339},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.281},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.461},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.574},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.511},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.696},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.788},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.753},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.852},{\"date\":\"2016-05-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.382},{\"date\":\"2016-05-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.382},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.482},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.43},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.586},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.381},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.328},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.491},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.616},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.56},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.725},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.83},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.804},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.876},{\"date\":\"2016-06-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.407},{\"date\":\"2016-06-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.407},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.499},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.444},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.61},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.399},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.343},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.516},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.632},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.573},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.748},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.842},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.812},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.896},{\"date\":\"2016-06-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.431},{\"date\":\"2016-06-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.431},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.455},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.393},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.581},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.353},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.29},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.484},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.592},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.523},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.725},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.805},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.77},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.872},{\"date\":\"2016-06-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.426},{\"date\":\"2016-06-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.426},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.432},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.353},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.593},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.329},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.25},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.496},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.57},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.481},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.742},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.785},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.732},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.885},{\"date\":\"2016-06-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.426},{\"date\":\"2016-06-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.426},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.396},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.311},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.57},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.291},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.205},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.472},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.537},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.442},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.72},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.755},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.696},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.865},{\"date\":\"2016-07-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.423},{\"date\":\"2016-07-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.423},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.359},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.276},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.527},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.253},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.171},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.426},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.501},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.408},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.682},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.721},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.663},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.83},{\"date\":\"2016-07-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.414},{\"date\":\"2016-07-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.414},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.336},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.254},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.503},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.23},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.148},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.402},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.479},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.386},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.657},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.701},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.645},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.806},{\"date\":\"2016-07-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.402},{\"date\":\"2016-07-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.402},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.289},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.211},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.447},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.182},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.105},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.344},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.434},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.345},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.606},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.656},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.602},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.757},{\"date\":\"2016-07-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.379},{\"date\":\"2016-07-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.379},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.267},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.198},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.406},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.159},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.091},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.302},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.413},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.335},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.565},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.635},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.591},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.716},{\"date\":\"2016-08-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.348},{\"date\":\"2016-08-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.348},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.256},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.193},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.384},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.15},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.087},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.281},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.398},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.325},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.539},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.621},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.582},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.693},{\"date\":\"2016-08-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.316},{\"date\":\"2016-08-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.316},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.256},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.203},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.364},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.149},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.096},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.262},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.401},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.34},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.518},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.622},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.593},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.674},{\"date\":\"2016-08-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.31},{\"date\":\"2016-08-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.31},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.299},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.243},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.413},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.193},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.136},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.312},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.441},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.378},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.563},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.664},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.635},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.718},{\"date\":\"2016-08-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.37},{\"date\":\"2016-08-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.37},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.341},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.292},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.441},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.237},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.187},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.341},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.481},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.424},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.589},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.701},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.677},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.747},{\"date\":\"2016-08-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.409},{\"date\":\"2016-08-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.409},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.329},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.277},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.436},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.223},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.17},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.333},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.468},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.405},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.588},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.698},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.671},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.749},{\"date\":\"2016-09-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.407},{\"date\":\"2016-09-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.407},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.31},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.246},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.439},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.202},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.138},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.336},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.454},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.38},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.597},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.68},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.642},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.751},{\"date\":\"2016-09-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.399},{\"date\":\"2016-09-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.399},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.333},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.28},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.443},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.225},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.17},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.339},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.481},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.419},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.6},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.706},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.679},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.756},{\"date\":\"2016-09-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.389},{\"date\":\"2016-09-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.389},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.334},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.276},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.451},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.224},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.166},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.348},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.484},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.419},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.609},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.708},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.679},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.762},{\"date\":\"2016-09-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.382},{\"date\":\"2016-09-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.382},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.354},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.295},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.476},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.245},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.184},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.375},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.506},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.441},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.631},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.726},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.696},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.782},{\"date\":\"2016-10-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.389},{\"date\":\"2016-10-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.389},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.381},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.327},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.491},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.272},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.216},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.389},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.529},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.469},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.644},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.754},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.728},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.802},{\"date\":\"2016-10-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.445},{\"date\":\"2016-10-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.445},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.367},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.309},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.484},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.257},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.198},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.381},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.516},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.452},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.64},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.742},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.712},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.797},{\"date\":\"2016-10-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.481},{\"date\":\"2016-10-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.481},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.353},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.286},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.49},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.243},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.175},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.386},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.502},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.429},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.644},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.73},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.689},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.804},{\"date\":\"2016-10-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.478},{\"date\":\"2016-10-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.478},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.341},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.27},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.484},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.23},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.159},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.379},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.493},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.415},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.645},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.719},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.675},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.801},{\"date\":\"2016-10-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.479},{\"date\":\"2016-10-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.479},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.345},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.27},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.499},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.233},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.157},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.392},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.498},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.416},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.656},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.732},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.681},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.826},{\"date\":\"2016-11-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.47},{\"date\":\"2016-11-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.47},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.298},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.22},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.458},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.184},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.105},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.349},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.455},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.37},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.618},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.691},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.64},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.787},{\"date\":\"2016-11-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.443},{\"date\":\"2016-11-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.443},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.269},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.192},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.427},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.155},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.078},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.318},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.423},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.341},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.582},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.66},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.605},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.762},{\"date\":\"2016-11-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.421},{\"date\":\"2016-11-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.421},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.268},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.193},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.42},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.154},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.079},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.312},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.423},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.342},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.578},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.657},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.607},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.75},{\"date\":\"2016-11-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.42},{\"date\":\"2016-11-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.42},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.321},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.25},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.464},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.208},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.137},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.356},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.471},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.397},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.615},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.71},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.664},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.795},{\"date\":\"2016-12-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.48},{\"date\":\"2016-12-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.48},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.347},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.286},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.473},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.236},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.174},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.366},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.494},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.428},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.622},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.732},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.695},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.801},{\"date\":\"2016-12-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.493},{\"date\":\"2016-12-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.493},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.375},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.316},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.496},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.264},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.203},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.391},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.522},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.461},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.639},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.761},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.727},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.824},{\"date\":\"2016-12-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.527},{\"date\":\"2016-12-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.527},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.419},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.364},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.531},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.309},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.254},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.426},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.561},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.502},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.673},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.799},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.768},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.858},{\"date\":\"2016-12-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.54},{\"date\":\"2016-12-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.54},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.485},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.429},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.601},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.377},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.319},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.497},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.622},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.56},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.742},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.865},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.832},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.927},{\"date\":\"2017-01-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.586},{\"date\":\"2017-01-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.586},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.496},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.437},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.618},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.388},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.328},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.514},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.636},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.571},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.76},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.874},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.838},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.941},{\"date\":\"2017-01-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.597},{\"date\":\"2017-01-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.597},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.467},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.407},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.59},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.358},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.298},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.486},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.607},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.542},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.732},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.845},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.807},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.914},{\"date\":\"2017-01-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.585},{\"date\":\"2017-01-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.585},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.436},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.368},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.573},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.326},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.258},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.468},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.578},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.505},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.719},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.817},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.771},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.901},{\"date\":\"2017-01-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.569},{\"date\":\"2017-01-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.569},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.408},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.337},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.552},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.296},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.224},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.446},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.553},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.476},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.703},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.795},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.749},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.882},{\"date\":\"2017-01-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.562},{\"date\":\"2017-01-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.562},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.405},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.333},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.552},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.293},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.221},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.446},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.552},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.474},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.703},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.79},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.743},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.878},{\"date\":\"2017-02-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.558},{\"date\":\"2017-02-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.558},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.418},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.34},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.578},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.307},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.228},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.472},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.566},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.48},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.733},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.801},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.747},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.903},{\"date\":\"2017-02-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.565},{\"date\":\"2017-02-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.565},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.414},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.336},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.573},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.302},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.224},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.467},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.564},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.477},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.731},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.798},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.744},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.897},{\"date\":\"2017-02-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.572},{\"date\":\"2017-02-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.572},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.427},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.346},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.592},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.314},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.233},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.484},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.579},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.489},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.753},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.812},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.756},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.917},{\"date\":\"2017-02-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.577},{\"date\":\"2017-02-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.577},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.452},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.375},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.61},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.341},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.264},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.504},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.604},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.515},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.775},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.833},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.781},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.929},{\"date\":\"2017-03-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.579},{\"date\":\"2017-03-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.579},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.434},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.353},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.601},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.323},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.242},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.494},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.586},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.492},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.768},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.816},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.759},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.923},{\"date\":\"2017-03-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.564},{\"date\":\"2017-03-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.564},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.433},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.35},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.602},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.321},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.238},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.495},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.587},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.494},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.766},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.816},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.758},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.923},{\"date\":\"2017-03-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.539},{\"date\":\"2017-03-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.539},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.428},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.341},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.605},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.315},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.228},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.499},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.583},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.487},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.767},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.812},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.752},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.925},{\"date\":\"2017-03-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.532},{\"date\":\"2017-03-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.532},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.471},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.393},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.631},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.36},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.281},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.527},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.622},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.537},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.785},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.851},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.799},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.948},{\"date\":\"2017-04-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.556},{\"date\":\"2017-04-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.556},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.534},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.463},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.68},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.424},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.351},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.577},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.683},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.606},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.831},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.912},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.869},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.991},{\"date\":\"2017-04-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.582},{\"date\":\"2017-04-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.582},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.546},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.468},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.706},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.436},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.356},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.602},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.694},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.609},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.858},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.927},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.876},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.021},{\"date\":\"2017-04-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.597},{\"date\":\"2017-04-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.597},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.559},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.484},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.711},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.449},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.372},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.609},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.706},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.627},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.859},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.938},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.893},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.023},{\"date\":\"2017-04-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.595},{\"date\":\"2017-04-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.595},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.522},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.444},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.683},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.411},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.331},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.578},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.673},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.588},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.837},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.907},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.855},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.002},{\"date\":\"2017-05-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.583},{\"date\":\"2017-05-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.583},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.484},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.401},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.654},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.372},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.288},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.549},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.635},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.545},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.809},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.87},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.814},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.974},{\"date\":\"2017-05-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.565},{\"date\":\"2017-05-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.565},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.481},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.396},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.656},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.369},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.283},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.55},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.634},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.54},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.816},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.867},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.807},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.979},{\"date\":\"2017-05-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.544},{\"date\":\"2017-05-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.544},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.51},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.418},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.698},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.399},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.306},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.594},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.663},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.562},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.857},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.889},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.822},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.013},{\"date\":\"2017-05-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.539},{\"date\":\"2017-05-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.539},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.516},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.418},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.716},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.406},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.308},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.612},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.665},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.558},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.874},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.894},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.821},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.03},{\"date\":\"2017-05-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.571},{\"date\":\"2017-05-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.571},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.525},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.437},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.705},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.414},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.325},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.601},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.677},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.579},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.864},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.906},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.843},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.022},{\"date\":\"2017-06-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.564},{\"date\":\"2017-06-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.564},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.479},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.389},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.661},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.366},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.276},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.554},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.633},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.535},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.823},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.865},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.8},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.984},{\"date\":\"2017-06-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.524},{\"date\":\"2017-06-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.524},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.433},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.339},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.623},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.318},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.224},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.514},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.593},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.492},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.789},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.825},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.756},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.952},{\"date\":\"2017-06-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.489},{\"date\":\"2017-06-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.489},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.404},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.316},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.583},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.288},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.201},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.473},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.565},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.468},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.753},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.799},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.735},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.916},{\"date\":\"2017-06-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.465},{\"date\":\"2017-06-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.465},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.376},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.278},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.574},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.26},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.163},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.464},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.536},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.43},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.742},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.77},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.696},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.907},{\"date\":\"2017-07-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.472},{\"date\":\"2017-07-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.472},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.411},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.324},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.588},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.297},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.21},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.481},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.569},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.475},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.749},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.798},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.736},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.912},{\"date\":\"2017-07-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.481},{\"date\":\"2017-07-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.481},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.392},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.303},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.574},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.278},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.188},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.466},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.551},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.455},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.736},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.781},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.719},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.898},{\"date\":\"2017-07-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.491},{\"date\":\"2017-07-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.491},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.426},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.34},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.601},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.312},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.224},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.495},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.582},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.492},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.757},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.816},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.76},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.92},{\"date\":\"2017-07-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.507},{\"date\":\"2017-07-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.507},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.467},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.386},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.631},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.352},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.269},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.526},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.623},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.538},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.787},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.86},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.81},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.952},{\"date\":\"2017-07-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.531},{\"date\":\"2017-07-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.531},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.492},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.405},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.668},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.378},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.29},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.564},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.644},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.553},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.821},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.882},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.825},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.987},{\"date\":\"2017-08-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.581},{\"date\":\"2017-08-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.581},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.497},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.416},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.664},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.384},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.301},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.558},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.653},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.565},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.823},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.886},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.834},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.983},{\"date\":\"2017-08-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.598},{\"date\":\"2017-08-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.598},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.474},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.389},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.649},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.36},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.273},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.543},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.631},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.539},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.811},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.865},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.81},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.968},{\"date\":\"2017-08-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.596},{\"date\":\"2017-08-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.596},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.513},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.438},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.665},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.399},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.322},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.561},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.668},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.588},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.825},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.901},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.859},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.981},{\"date\":\"2017-08-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.605},{\"date\":\"2017-08-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.605},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.794},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.722},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.939},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.679},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.604},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.835},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.946},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.875},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.085},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.191},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.153},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.262},{\"date\":\"2017-09-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.758},{\"date\":\"2017-09-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.758},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.8},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.728},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.946},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.685},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.61},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.842},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.953},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.88},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.092},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.197},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.158},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.268},{\"date\":\"2017-09-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.802},{\"date\":\"2017-09-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.802},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.75},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.678},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.897},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.634},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.559},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.791},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.906},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.831},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.05},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.151},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.112},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.224},{\"date\":\"2017-09-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.791},{\"date\":\"2017-09-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.791},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.701},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.629},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.846},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.583},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.508},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.74},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.859},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.785},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.001},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.105},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.069},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.171},{\"date\":\"2017-09-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.788},{\"date\":\"2017-09-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.788},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.682},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.614},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.82},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.565},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.493},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.715},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.841},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.772},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.975},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.085},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.055},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.142},{\"date\":\"2017-10-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.792},{\"date\":\"2017-10-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.792},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.622},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.547},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.774},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.504},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.426},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.668},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.78},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.702},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.932},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.025},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.986},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.098},{\"date\":\"2017-10-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.776},{\"date\":\"2017-10-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.776},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.605},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.532},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.754},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.489},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.413},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.648},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.764},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.687},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.913},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.003},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.964},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.077},{\"date\":\"2017-10-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.787},{\"date\":\"2017-10-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.787},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.594},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.523},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.739},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.479},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.406},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.632},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.75},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.672},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.902},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.987},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.946},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.064},{\"date\":\"2017-10-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.797},{\"date\":\"2017-10-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.797},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.602},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.526},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.758},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.488},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.41},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.652},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.76},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.679},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.918},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.994},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.947},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.081},{\"date\":\"2017-10-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.819},{\"date\":\"2017-10-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.819},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.673},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.583},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.858},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.561},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.468},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.754},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.829},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.732},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.018},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.059},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.999},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.17},{\"date\":\"2017-11-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.882},{\"date\":\"2017-11-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.882},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.706},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.619},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.881},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.592},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.504},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.777},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.865},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.771},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.046},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.092},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.037},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.194},{\"date\":\"2017-11-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.915},{\"date\":\"2017-11-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.915},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.683},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.597},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.858},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.568},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.48},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.753},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.843},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.75},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.022},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.075},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.021},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.174},{\"date\":\"2017-11-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.912},{\"date\":\"2017-11-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.912},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.648},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.562},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.825},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.533},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.444},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.719},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.81},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.717},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.99},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.043},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.988},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.146},{\"date\":\"2017-11-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.926},{\"date\":\"2017-11-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.926},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.617},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.528},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.797},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.5},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.41},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.689},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.778},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.683},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.962},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.014},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.957},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.122},{\"date\":\"2017-12-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.922},{\"date\":\"2017-12-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.922},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.601},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.519},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.769},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.485},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.401},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.661},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.763},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.675},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.933},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.949},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.095},{\"date\":\"2017-12-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.91},{\"date\":\"2017-12-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.91},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.568},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.478},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.75},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.45},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.358},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.642},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.731},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.636},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.914},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.969},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.912},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.076},{\"date\":\"2017-12-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.901},{\"date\":\"2017-12-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.901},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.589},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.502},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.765},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.472},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.384},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.658},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.749},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.655},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.931},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.985},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.929},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.09},{\"date\":\"2017-12-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.903},{\"date\":\"2017-12-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.903},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.637},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.554},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.804},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.52},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.436},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.697},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.798},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.711},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.965},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.035},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.983},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.129},{\"date\":\"2018-01-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.973},{\"date\":\"2018-01-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.973},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.639},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.548},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.824},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.522},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.429},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.716},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.802},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.705},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.989},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.04},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.981},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.15},{\"date\":\"2018-01-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.996},{\"date\":\"2018-01-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.996},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.673},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.589},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.843},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.557},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.473},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.735},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.831},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.74},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.009},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.068},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.013},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.169},{\"date\":\"2018-01-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.028},{\"date\":\"2018-01-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.028},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.684},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.601},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.854},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.567},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.482},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.744},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.845},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.754},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.022},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.085},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.031},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.184},{\"date\":\"2018-01-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.025},{\"date\":\"2018-01-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.025},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.723},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.634},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.905},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.607},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.516},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.797},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.882},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.784},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.07},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.122},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.064},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.229},{\"date\":\"2018-01-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.07},{\"date\":\"2018-01-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.07},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.753},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.661},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.94},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.637},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.544},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.832},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.914},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.813},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.109},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.149},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.089},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.262},{\"date\":\"2018-02-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.086},{\"date\":\"2018-02-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.086},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.724},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.63},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.915},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.607},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.511},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.806},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.888},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.785},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.086},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.125},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.063},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.239},{\"date\":\"2018-02-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.063},{\"date\":\"2018-02-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.063},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.676},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.576},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.881},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.557},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.455},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.77},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.843},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.732},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.056},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.082},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.013},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.21},{\"date\":\"2018-02-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.027},{\"date\":\"2018-02-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.027},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.666},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.561},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.88},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.548},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.442},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.77},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.83},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.713},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.055},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.069},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.996},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.205},{\"date\":\"2018-02-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.007},{\"date\":\"2018-02-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.007},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.679},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.582},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.877},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.56},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.462},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.767},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.845},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.738},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.053},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.084},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.02},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.204},{\"date\":\"2018-03-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.992},{\"date\":\"2018-03-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.992},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.677},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.574},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.887},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.559},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.455},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.777},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.843},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.728},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.065},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.078},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.007},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.21},{\"date\":\"2018-03-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.976},{\"date\":\"2018-03-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.976},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.716},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.612},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.926},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.598},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.494},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.817},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.881},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.765},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.105},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.114},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.043},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.247},{\"date\":\"2018-03-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.972},{\"date\":\"2018-03-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.972},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.764},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.659},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.979},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.648},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.541},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.871},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.928},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.81},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.157},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.161},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.086},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.299},{\"date\":\"2018-03-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.01},{\"date\":\"2018-03-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.01},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.817},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.71},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.033},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.7},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.592},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.927},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.979},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.863},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.205},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.212},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.14},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.345},{\"date\":\"2018-04-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.042},{\"date\":\"2018-04-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.042},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.811},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.707},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.024},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.694},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.587},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.918},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.977},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.864},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.196},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.209},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.14},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.338},{\"date\":\"2018-04-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.043},{\"date\":\"2018-04-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.043},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.863},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.762},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.068},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.747},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.644},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.963},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.025},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.915},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.238},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.256},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.189},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.381},{\"date\":\"2018-04-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.104},{\"date\":\"2018-04-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.104},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.914},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.814},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.119},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.798},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.696},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.014},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.075},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.967},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.284},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.31},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.243},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.433},{\"date\":\"2018-04-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.133},{\"date\":\"2018-04-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.133},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.961},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.858},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.17},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.846},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.741},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.068},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.117},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.008},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.33},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.353},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.285},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.479},{\"date\":\"2018-04-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.157},{\"date\":\"2018-04-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.157},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.96},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.851},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.182},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.845},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.733},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.078},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.119},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.003},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.343},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.354},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.28},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.491},{\"date\":\"2018-05-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.171},{\"date\":\"2018-05-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.171},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.949},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.846},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.148},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.873},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.786},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.055},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.212},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.076},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.405},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.452},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.347},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.574},{\"date\":\"2018-05-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.239},{\"date\":\"2018-05-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.239},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.999},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.893},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.201},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.923},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.834},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.109},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.257},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.121},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.448},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.497},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.391},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.617},{\"date\":\"2018-05-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.277},{\"date\":\"2018-05-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.277},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.039},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.937},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.235},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.962},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.877},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.142},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.296},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.165},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.482},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.536},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.435},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.653},{\"date\":\"2018-05-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.288},{\"date\":\"2018-05-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.288},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.018},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.91},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.226},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.94},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.849},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.131},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.285},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.146},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.482},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.524},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.417},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.647},{\"date\":\"2018-06-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.285},{\"date\":\"2018-06-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.285},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.989},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.883},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.194},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.911},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.822},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.099},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.259},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.122},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.453},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.495},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.387},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.619},{\"date\":\"2018-06-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.266},{\"date\":\"2018-06-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.266},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.958},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.852},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.161},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.879},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.79},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.064},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.23},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.093},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.422},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.47},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.359},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.598},{\"date\":\"2018-06-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.244},{\"date\":\"2018-06-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.244},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.913},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.808},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.116},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.833},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.745},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.018},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.189},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.055},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.38},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.432},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.324},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.557},{\"date\":\"2018-06-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.216},{\"date\":\"2018-06-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.216},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.924},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.824},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.117},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.844},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.762},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.019},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.197},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.068},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.382},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.439},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.335},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.559},{\"date\":\"2018-07-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.236},{\"date\":\"2018-07-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.236},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.937},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.837},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.132},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.857},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.774},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.034},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.207},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.08},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.389},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.454},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.354},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.571},{\"date\":\"2018-07-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.243},{\"date\":\"2018-07-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.243},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.943},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.852},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.12},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.865},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.79},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.023},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.209},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.093},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.377},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.451},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.362},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.555},{\"date\":\"2018-07-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.239},{\"date\":\"2018-07-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.239},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.911},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.818},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.092},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.831},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.754},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.994},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.18},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.06},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.352},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.426},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.338},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.529},{\"date\":\"2018-07-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.22},{\"date\":\"2018-07-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.22},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.924},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.834},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.102},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.846},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.772},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.006},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.189},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.075},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.357},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.433},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.349},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.533},{\"date\":\"2018-07-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.226},{\"date\":\"2018-07-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.226},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.93},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.843},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.101},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.852},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.781},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.004},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.191},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.08},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.352},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.435},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.354},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.53},{\"date\":\"2018-08-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.223},{\"date\":\"2018-08-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.223},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.921},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.836},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.089},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.843},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.774},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.993},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.184},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.077},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.339},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.428},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.351},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.518},{\"date\":\"2018-08-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.217},{\"date\":\"2018-08-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.217},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.9},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.818},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.062},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.821},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.755},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.964},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.171},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.066},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.323},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.407},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.334},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.494},{\"date\":\"2018-08-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.207},{\"date\":\"2018-08-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.207},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.906},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.824},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.068},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.827},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.761},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.969},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.176},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.069},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.329},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.412},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.336},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.502},{\"date\":\"2018-08-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.226},{\"date\":\"2018-08-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.226},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.903},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.822},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.064},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.824},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.759},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.964},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.175},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.069},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.328},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.416},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.34},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.505},{\"date\":\"2018-09-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.252},{\"date\":\"2018-09-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.252},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.912},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.829},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.079},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.833},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.765},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.98},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.184},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.08},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.336},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.426},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.351},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.516},{\"date\":\"2018-09-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.258},{\"date\":\"2018-09-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.258},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.921},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.834},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.091},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.841},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.771},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.991},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.194},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.081},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.355},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.435},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.35},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.534},{\"date\":\"2018-09-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.268},{\"date\":\"2018-09-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.268},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.923},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.841},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.082},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.844},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.779},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.982},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.195},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.086},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.349},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.436},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.356},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.528},{\"date\":\"2018-09-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.271},{\"date\":\"2018-09-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.271},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.947},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.859},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.117},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.866},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.796},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.014},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.223},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.106},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.39},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.468},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.378},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.573},{\"date\":\"2018-10-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.313},{\"date\":\"2018-10-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.313},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.984},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.892},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.161},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.903},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.829},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.057},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.263},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.136},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.44},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.504},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.405},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.618},{\"date\":\"2018-10-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.385},{\"date\":\"2018-10-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.385},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.961},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.869},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.141},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.879},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.806},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.034},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.249},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.119},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.431},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.488},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.387},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.603},{\"date\":\"2018-10-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.394},{\"date\":\"2018-10-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.394},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.925},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.828},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.113},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.841},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.763},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.005},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.221},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.084},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.414},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.463},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.357},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.585},{\"date\":\"2018-10-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.38},{\"date\":\"2018-10-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.38},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.896},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.799},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.083},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.811},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.732},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.975},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.196},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.064},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.381},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.437},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.334},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.555},{\"date\":\"2018-10-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.355},{\"date\":\"2018-10-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.355},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.84},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.738},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.036},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.753},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.67},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.927},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.146},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.008},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.34},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.389},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.281},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.514},{\"date\":\"2018-11-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.338},{\"date\":\"2018-11-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.338},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.773},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.672},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.971},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.686},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.604},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.86},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.086},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.949},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.28},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.326},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.22},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.448},{\"date\":\"2018-11-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.317},{\"date\":\"2018-11-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.317},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.7},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.594},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.903},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.611},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.525},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.793},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.022},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.883},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.219},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.258},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.151},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.383},{\"date\":\"2018-11-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.282},{\"date\":\"2018-11-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.282},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.63},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.517},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.85},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.539},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.445},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.736},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.965},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.819},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.171},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.203},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.088},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.335},{\"date\":\"2018-11-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.261},{\"date\":\"2018-11-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.261},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.544},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.422},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.777},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.451},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.35},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.665},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.883},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.731},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.098},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.119},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.998},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.258},{\"date\":\"2018-12-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.207},{\"date\":\"2018-12-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.207},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.511},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.395},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.734},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.421},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.325},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.622},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.842},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.696},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.047},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.079},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.959},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.217},{\"date\":\"2018-12-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.161},{\"date\":\"2018-12-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.161},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.46},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.338},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.694},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.369},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.268},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.583},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.793},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.643},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.004},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.03},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.903},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.176},{\"date\":\"2018-12-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.121},{\"date\":\"2018-12-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.121},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.413},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.287},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.653},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.321},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.216},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.54},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.75},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.588},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.974},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.987},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.848},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.143},{\"date\":\"2018-12-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.077},{\"date\":\"2018-12-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.077},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.358},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.227},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.608},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.266},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.156},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.496},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.697},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.532},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.928},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.934},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.793},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.096},{\"date\":\"2018-12-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.048},{\"date\":\"2018-12-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.048},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.329},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.199},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.578},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.237},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.128},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.465},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.662},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.496},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.895},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.906},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.764},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.069},{\"date\":\"2019-01-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.013},{\"date\":\"2019-01-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.013},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.338},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.212},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.578},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.247},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.143},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.466},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.66},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.496},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.888},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.907},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.764},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.069},{\"date\":\"2019-01-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.976},{\"date\":\"2019-01-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.976},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.34},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.216},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.577},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.251},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.147},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.468},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.661},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.5},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.885},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.902},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.769},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.055},{\"date\":\"2019-01-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.965},{\"date\":\"2019-01-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.965},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.343},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.229},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.567},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.256},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.162},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.458},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.65},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.5},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.866},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.899},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.773},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.045},{\"date\":\"2019-01-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.965},{\"date\":\"2019-01-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.965},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.341},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.228},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.561},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.254},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.162},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.451},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.644},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.488},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.867},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.895},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.77},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.04},{\"date\":\"2019-02-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.966},{\"date\":\"2019-02-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.966},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.361},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.251},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.577},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.276},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.187},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.466},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.657},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.5},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.883},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.912},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.783},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.062},{\"date\":\"2019-02-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.966},{\"date\":\"2019-02-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.966},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.4},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.293},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.61},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.317},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.23},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.502},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.688},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.535},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.906},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.94},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.817},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.081},{\"date\":\"2019-02-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.006},{\"date\":\"2019-02-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.006},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.471},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.372},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.664},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.39},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.311},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.56},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.739},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.601},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.937},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.998},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.887},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.124},{\"date\":\"2019-02-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.048},{\"date\":\"2019-02-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.048},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.502},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.412},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.678},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.422},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.352},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.574},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.768},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.638},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.956},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.02},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.919},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.137},{\"date\":\"2019-03-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.076},{\"date\":\"2019-03-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.076},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.549},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.458},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.726},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.471},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.399},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.625},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.807},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.674},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.999},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.059},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.959},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.175},{\"date\":\"2019-03-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.079},{\"date\":\"2019-03-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.079},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.625},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.537},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.8},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.548},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.477},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.7},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.879},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.75},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.064},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.135},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.041},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.244},{\"date\":\"2019-03-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.07},{\"date\":\"2019-03-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.07},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.701},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.604},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.893},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.623},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.544},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.793},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.96},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.819},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.162},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.212},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.105},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.337},{\"date\":\"2019-03-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.08},{\"date\":\"2019-03-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.08},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.77},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.67},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.967},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.691},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.611},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.863},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.034},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.885},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.25},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.286},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.172},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.419},{\"date\":\"2019-04-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.078},{\"date\":\"2019-04-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.078},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.826},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.71},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.055},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.745},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.65},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.949},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.103},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.93},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.355},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.354},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.214},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.518},{\"date\":\"2019-04-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.093},{\"date\":\"2019-04-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.093},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.912},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.785},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.162},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.828},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.725},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.052},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.198},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.006},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.478},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.449},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.29},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.635},{\"date\":\"2019-04-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.118},{\"date\":\"2019-04-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.118},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.926},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.785},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.206},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.841},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.723},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.097},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.221},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.019},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.515},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.474},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.301},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.677},{\"date\":\"2019-04-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.147},{\"date\":\"2019-04-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.147},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.972},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.824},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.264},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.887},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.761},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.156},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.27},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.062},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.571},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.523},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.343},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.734},{\"date\":\"2019-04-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.169},{\"date\":\"2019-04-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.169},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.983},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.834},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.279},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.897},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.771},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.171},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.286},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.083},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.583},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.537},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.357},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.748},{\"date\":\"2019-05-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.171},{\"date\":\"2019-05-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.171},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.954},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.8},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.256},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.866},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.735},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.149},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.258},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.054},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.554},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.514},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.331},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.726},{\"date\":\"2019-05-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.16},{\"date\":\"2019-05-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.16},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.939},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.789},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.236},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.852},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.723},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.129},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.245},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.045},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.536},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.499},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.323},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.706},{\"date\":\"2019-05-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.163},{\"date\":\"2019-05-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.163},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.909},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.762},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.2},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.822},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.696},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.094},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.212},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.022},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.493},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.471},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.3},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.67},{\"date\":\"2019-05-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.151},{\"date\":\"2019-05-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.151},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.893},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.757},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.164},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.807},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.691},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.058},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.194},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.015},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.458},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.447},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.295},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.627},{\"date\":\"2019-06-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.136},{\"date\":\"2019-06-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.136},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.821},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.687},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.086},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.732},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.62},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.976},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.134},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.955},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.398},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.383},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.231},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.561},{\"date\":\"2019-06-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.105},{\"date\":\"2019-06-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.105},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.759},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.621},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.032},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.67},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.553},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.923},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.079},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.897},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.344},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.326},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.174},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.505},{\"date\":\"2019-06-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.07},{\"date\":\"2019-06-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.07},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.741},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.608},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.002},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.654},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.541},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.896},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.051},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.881},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.299},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.3},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.154},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.471},{\"date\":\"2019-06-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.043},{\"date\":\"2019-06-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.043},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.798},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.674},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.043},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.713},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.608},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.938},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.095},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.931},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.336},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.343},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.205},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.505},{\"date\":\"2019-07-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.042},{\"date\":\"2019-07-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.042},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.827},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.708},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.06},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.743},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.644},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.956},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.117},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.959},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.348},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.366},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.237},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.517},{\"date\":\"2019-07-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.055},{\"date\":\"2019-07-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.055},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.86},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.745},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.089},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.779},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.682},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.987},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.137},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.982},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.365},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.392},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.266},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.539},{\"date\":\"2019-07-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.051},{\"date\":\"2019-07-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.051},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.833},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.716},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.062},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.75},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.653},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.959},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.116},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.958},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.345},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.368},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.244},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.513},{\"date\":\"2019-07-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.044},{\"date\":\"2019-07-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.044},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.798},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.68},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.032},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.715},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.615},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.928},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.084},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.924},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.318},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.339},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.21},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.491},{\"date\":\"2019-07-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.034},{\"date\":\"2019-07-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.034},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.772},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.653},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.007},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.688},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.588},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.902},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.062},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.899},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.3},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.317},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.187},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.469},{\"date\":\"2019-08-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.032},{\"date\":\"2019-08-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.032},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.71},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.59},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.946},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.624},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.524},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.839},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.01},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.851},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.242},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.266},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.137},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.417},{\"date\":\"2019-08-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.011},{\"date\":\"2019-08-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.011},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.684},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.567},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.914},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.598},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.501},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.807},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.982},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.826},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.21},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.24},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.115},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.387},{\"date\":\"2019-08-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.994},{\"date\":\"2019-08-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.994},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.661},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.538},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.905},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.574},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.471},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.797},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.965},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.799},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.206},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.219},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.087},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.374},{\"date\":\"2019-08-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.983},{\"date\":\"2019-08-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.983},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.651},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.527},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.893},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.563},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.461},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.782},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.96},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.789},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.207},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.215},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.076},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.377},{\"date\":\"2019-09-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.976},{\"date\":\"2019-09-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.976},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.638},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.517},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.876},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.55},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.45},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.765},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.95},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.783},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.194},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.202},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.069},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.357},{\"date\":\"2019-09-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.971},{\"date\":\"2019-09-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.971},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.64},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.521},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.874},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.552},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.454},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.763},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.95},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.787},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.186},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.203},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.07},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.359},{\"date\":\"2019-09-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.987},{\"date\":\"2019-09-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.987},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.741},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.627},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.964},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.654},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.561},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.852},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.048},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.883},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.286},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.296},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.164},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.45},{\"date\":\"2019-09-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.081},{\"date\":\"2019-09-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.081},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.737},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.586},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.033},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.642},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.518},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.907},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.082},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.855},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.409},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.341},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.142},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.571},{\"date\":\"2019-09-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.066},{\"date\":\"2019-09-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.066},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.742},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.581},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.058},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.645},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.513},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.929},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.097},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.855},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.449},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.356},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.14},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.61},{\"date\":\"2019-10-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.047},{\"date\":\"2019-10-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.047},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.727},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.565},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.048},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.629},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.495},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.919},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.085},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.843},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.438},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.345},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.129},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.597},{\"date\":\"2019-10-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.051},{\"date\":\"2019-10-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.051},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.735},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.581},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.036},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.638},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.512},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.91},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.089},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.861},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.419},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.34},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.144},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.568},{\"date\":\"2019-10-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.05},{\"date\":\"2019-10-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.05},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.692},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.539},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.995},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.596},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.469},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.871},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.046},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.825},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.366},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.298},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.106},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.522},{\"date\":\"2019-10-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.064},{\"date\":\"2019-10-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.064},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.702},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.555},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.994},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.605},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.485},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.866},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.064},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.847},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.379},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.313},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.123},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.535},{\"date\":\"2019-11-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.062},{\"date\":\"2019-11-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.062},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.711},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.563},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.004},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.615},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.493},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.879},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.067},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.855},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.379},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.321},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.136},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.535},{\"date\":\"2019-11-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.073},{\"date\":\"2019-11-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.073},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.688},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.544},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.971},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.592},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.473},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.851},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.036},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.84},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.323},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.291},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.12},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.49},{\"date\":\"2019-11-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.074},{\"date\":\"2019-11-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.074},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.672},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.539},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.936},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.579},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.469},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.817},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.015},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.83},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.287},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.264},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.106},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.449},{\"date\":\"2019-11-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.066},{\"date\":\"2019-11-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.066},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.667},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.554},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.894},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.575},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.485},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.775},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.999},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.84},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.236},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.249},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.116},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.406},{\"date\":\"2019-12-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.07},{\"date\":\"2019-12-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.07},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.652},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.548},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.863},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.561},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.478},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.745},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.981},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.837},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.197},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.23},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.111},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.372},{\"date\":\"2019-12-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.049},{\"date\":\"2019-12-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.049},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.627},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.518},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.845},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.536},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.448},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.73},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.955},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.811},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.17},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.204},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.081},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.351},{\"date\":\"2019-12-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.046},{\"date\":\"2019-12-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.046},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.621},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.516},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.833},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.532},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.447},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.718},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.943},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.802},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.153},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.191},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.074},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.33},{\"date\":\"2019-12-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.041},{\"date\":\"2019-12-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.041},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.658},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.555},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.862},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.571},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.488},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.751},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.968},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.827},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.176},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.209},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.099},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.338},{\"date\":\"2019-12-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.069},{\"date\":\"2019-12-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.069},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.665},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.561},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.87},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.578},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.494},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.761},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.973},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.833},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.176},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.214},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.103},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.342},{\"date\":\"2020-01-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.079},{\"date\":\"2020-01-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.079},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.657},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.549},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.871},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.57},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.482},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.762},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.964},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.817},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.178},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.209},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.093},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.345},{\"date\":\"2020-01-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.064},{\"date\":\"2020-01-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.064},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.625},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.516},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.841},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.537},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.448},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.731},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.94},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.792},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.155},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.183},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.068},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.318},{\"date\":\"2020-01-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.037},{\"date\":\"2020-01-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.037},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.595},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.482},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.818},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.506},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.412},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.706},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.911},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.761},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.129},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.163},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.042},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.304},{\"date\":\"2020-01-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.01},{\"date\":\"2020-01-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.01},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.546},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.428},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.779},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.455},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.358},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.664},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.872},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.709},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.11},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.125},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.998},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.274},{\"date\":\"2020-02-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.956},{\"date\":\"2020-02-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.956},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.511},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.396},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.74},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.419},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.324},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.624},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.842},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.684},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.075},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.095},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.972},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.241},{\"date\":\"2020-02-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.91},{\"date\":\"2020-02-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.91},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.518},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.405},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.742},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.428},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.337},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.626},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.841},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.68},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.077},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.091},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.963},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.241},{\"date\":\"2020-02-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.89},{\"date\":\"2020-02-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.89},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.555},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.441},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.78},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.466},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.373},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.666},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.868},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.709},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.101},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.122},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.996},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.27},{\"date\":\"2020-02-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.882},{\"date\":\"2020-02-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.882},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.514},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.394},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.754},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.423},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.324},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.639},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.838},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.671},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.085},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.093},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.961},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.248},{\"date\":\"2020-03-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.851},{\"date\":\"2020-03-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.851},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.468},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.344},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.713},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.375},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.272},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.597},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.798},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.626},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.049},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.054},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.921},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.209},{\"date\":\"2020-03-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.814},{\"date\":\"2020-03-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.814},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.343},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.213},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.6},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.248},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.139},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.483},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.689},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.516},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.942},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.941},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.805},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.098},{\"date\":\"2020-03-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.733},{\"date\":\"2020-03-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.733},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.217},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.083},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.478},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.12},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.007},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.361},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.58},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.409},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.828},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.817},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.684},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.97},{\"date\":\"2020-03-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.659},{\"date\":\"2020-03-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.659},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.103},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.962},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.378},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.005},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.886},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.26},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.473},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.295},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.731},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.716},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.576},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.875},{\"date\":\"2020-03-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.586},{\"date\":\"2020-03-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.586},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.022},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.877},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.304},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.924},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.8},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.185},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.392},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.207},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.658},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.635},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.485},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.806},{\"date\":\"2020-04-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.548},{\"date\":\"2020-04-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.548},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.951},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.811},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.224},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.853},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.735},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.106},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.316},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.142},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.568},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.562},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.418},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.729},{\"date\":\"2020-04-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.507},{\"date\":\"2020-04-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.507},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.91},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.77},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.186},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.812},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.694},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.068},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.275},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.1},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.529},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.519},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.375},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.687},{\"date\":\"2020-04-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.48},{\"date\":\"2020-04-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.48},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.87},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.731},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.141},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.773},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.655},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.025},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.226},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.053},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.477},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.478},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.334},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.644},{\"date\":\"2020-04-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.437},{\"date\":\"2020-04-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.437},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.883},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.753},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.136},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.789},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.68},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.02},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.221},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.052},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.465},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.479},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.339},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.639},{\"date\":\"2020-05-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.399},{\"date\":\"2020-05-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.399},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.941},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.818},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.182},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.851},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.75},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.069},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.257},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.089},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.5},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.519},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.383},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.677},{\"date\":\"2020-05-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.394},{\"date\":\"2020-05-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.394},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":1.969},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.845},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.211},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.878},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.776},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.095},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.286},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.113},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.536},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.553},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.415},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.712},{\"date\":\"2020-05-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.386},{\"date\":\"2020-05-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.386},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.049},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.938},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.267},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.96},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.87},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.153},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.363},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.205},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.588},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.618},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.493},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.761},{\"date\":\"2020-05-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.39},{\"date\":\"2020-05-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.39},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.064},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":1.952},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.285},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":1.974},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.883},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.169},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.38},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.227},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.601},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.638},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.512},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.784},{\"date\":\"2020-06-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.386},{\"date\":\"2020-06-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.386},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.123},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.014},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.338},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.036},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":1.947},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.226},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.434},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.283},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.652},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.686},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.565},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.824},{\"date\":\"2020-06-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.396},{\"date\":\"2020-06-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.396},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.185},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.084},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.384},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.098},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.017},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.272},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.495},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.357},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.695},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.745},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.636},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.869},{\"date\":\"2020-06-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.403},{\"date\":\"2020-06-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.403},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.216},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.115},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.414},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.129},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.048},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.303},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.521},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.383},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.721},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.773},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.663},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.901},{\"date\":\"2020-06-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.425},{\"date\":\"2020-06-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.425},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.26},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.162},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.456},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.174},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.094},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.346},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.563},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.428},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.761},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.812},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.707},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.935},{\"date\":\"2020-06-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.43},{\"date\":\"2020-06-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.43},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.265},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.168},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.456},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.177},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.1},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.344},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.571},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.438},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.764},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.821},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.719},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.94},{\"date\":\"2020-07-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.437},{\"date\":\"2020-07-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.437},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.283},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.181},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.482},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.195},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.113},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.372},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.589},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.454},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.786},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.842},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.737},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.963},{\"date\":\"2020-07-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.438},{\"date\":\"2020-07-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.438},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.275},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.168},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.484},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.186},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.099},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.373},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.584},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.443},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.789},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.836},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.726},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.964},{\"date\":\"2020-07-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.433},{\"date\":\"2020-07-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.433},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.265},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.155},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.482},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.175},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.085},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.369},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.582},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.436},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.793},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.838},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.724},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.97},{\"date\":\"2020-07-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.427},{\"date\":\"2020-07-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.427},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.266},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.156},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.481},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.176},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.085},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.37},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.587},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.445},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.793},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.834},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.723},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.964},{\"date\":\"2020-08-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.424},{\"date\":\"2020-08-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.424},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.256},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.149},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.466},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.166},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.078},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.354},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.578},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.437},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.782},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.826},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.716},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.954},{\"date\":\"2020-08-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.428},{\"date\":\"2020-08-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.428},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.256},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.147},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.473},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.166},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.077},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.359},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.577},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.433},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.791},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.829},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.714},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.966},{\"date\":\"2020-08-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.427},{\"date\":\"2020-08-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.427},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.272},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.161},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.491},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.182},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.09},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.378},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.595},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.442},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.817},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.842},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.725},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.981},{\"date\":\"2020-08-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.426},{\"date\":\"2020-08-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.426},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.311},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.204},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.523},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.222},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.135},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.411},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.629},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.484},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.84},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.877},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.763},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.011},{\"date\":\"2020-08-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.441},{\"date\":\"2020-08-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.441},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.302},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.193},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.518},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.211},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.122},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.405},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.624},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.481},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.836},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.872},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.758},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.008},{\"date\":\"2020-09-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.435},{\"date\":\"2020-09-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.435},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.274},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.162},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.497},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.183},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.091},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.383},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.6},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.451},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.82},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.851},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.733},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.992},{\"date\":\"2020-09-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.422},{\"date\":\"2020-09-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.422},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.259},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.149},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.478},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.168},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.078},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.365},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.582},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.432},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.803},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.836},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.721},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.972},{\"date\":\"2020-09-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.404},{\"date\":\"2020-09-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.404},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.259},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.157},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.463},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.169},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.088},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.346},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.583},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.438},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.799},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.831},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.719},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.966},{\"date\":\"2020-09-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.394},{\"date\":\"2020-09-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.394},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.262},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.161},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.464},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.172},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.091},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.349},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.583},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.442},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.793},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.833},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.723},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.965},{\"date\":\"2020-10-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.387},{\"date\":\"2020-10-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.387},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.257},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.154},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.465},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.167},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.084},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.35},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.579},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.434},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.794},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.829},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.716},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.965},{\"date\":\"2020-10-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.395},{\"date\":\"2020-10-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.395},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.24},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.134},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.454},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.15},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.064},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.338},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.565},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.416},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.787},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.815},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.698},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.957},{\"date\":\"2020-10-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.388},{\"date\":\"2020-10-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.388},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.234},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.124},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.455},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.143},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.053},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.34},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.559},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.407},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.785},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.81},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.69},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.955},{\"date\":\"2020-10-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.385},{\"date\":\"2020-10-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.385},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.204},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.092},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.43},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.112},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.021},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.314},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.533},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.378},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.765},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.786},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.661},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.936},{\"date\":\"2020-11-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.372},{\"date\":\"2020-11-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.372},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.188},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.074},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.417},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.096},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.004},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.3},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.517},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.358},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.755},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.771},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.643},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.926},{\"date\":\"2020-11-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.383},{\"date\":\"2020-11-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.383},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.202},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.089},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.429},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.111},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.018},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.312},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.532},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.377},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.765},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.783},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.656},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.936},{\"date\":\"2020-11-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.441},{\"date\":\"2020-11-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.441},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.194},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.08},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.422},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.102},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.009},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.305},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.525},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.369},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.759},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.779},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.652},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.933},{\"date\":\"2020-11-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.462},{\"date\":\"2020-11-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.462},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.211},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.093},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.444},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.12},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.022},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.329},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.54},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.379},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.778},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.792},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.661},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.947},{\"date\":\"2020-11-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.502},{\"date\":\"2020-11-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.502},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.246},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.133},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.469},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.156},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.063},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.355},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.567},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.412},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.798},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.82},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.694},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.968},{\"date\":\"2020-12-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.526},{\"date\":\"2020-12-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.526},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.247},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.132},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.474},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.158},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.063},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.361},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.565},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.407},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.8},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.821},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.693},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":2.973},{\"date\":\"2020-12-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.559},{\"date\":\"2020-12-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.559},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.311},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.204},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.522},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.224},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.137},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.41},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.618},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.466},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.843},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.871},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.749},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.015},{\"date\":\"2020-12-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.619},{\"date\":\"2020-12-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.619},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.33},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.225},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.535},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.243},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.158},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.423},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.634},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.482},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.858},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.889},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.77},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.031},{\"date\":\"2020-12-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.635},{\"date\":\"2020-12-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.635},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.336},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.227},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.549},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.249},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.16},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.437},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.639},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.484},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.867},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.895},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.771},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.042},{\"date\":\"2021-01-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.64},{\"date\":\"2021-01-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.64},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.403},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.298},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.61},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.317},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.232},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.498},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.702},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.55},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.927},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":2.959},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.839},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.101},{\"date\":\"2021-01-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.67},{\"date\":\"2021-01-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.67},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.464},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.351},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.688},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.379},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.285},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.579},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.759},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.601},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":2.995},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.014},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.885},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.166},{\"date\":\"2021-01-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.696},{\"date\":\"2021-01-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.696},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.478},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.363},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.703},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.392},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.298},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.593},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.776},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.615},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.014},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.033},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.9},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.191},{\"date\":\"2021-01-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.716},{\"date\":\"2021-01-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.716},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.495},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.382},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.72},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.409},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.316},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.608},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.792},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.63},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.034},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.051},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.917},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.21},{\"date\":\"2021-02-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.738},{\"date\":\"2021-02-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.738},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.548},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.438},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.766},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.461},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.372},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.653},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.847},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.69},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.083},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.104},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":2.975},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.258},{\"date\":\"2021-02-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.801},{\"date\":\"2021-02-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.801},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.588},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.475},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.812},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.501},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.409},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.701},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":2.89},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.73},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.13},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.141},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.011},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.297},{\"date\":\"2021-02-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.876},{\"date\":\"2021-02-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.876},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.717},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.613},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":2.926},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.633},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.549},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.815},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.006},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.854},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.235},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.263},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.14},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.411},{\"date\":\"2021-02-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":2.973},{\"date\":\"2021-02-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":2.973},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.796},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.689},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.012},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.711},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.625},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.899},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.084},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.926},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.324},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.344},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.213},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.501},{\"date\":\"2021-03-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.072},{\"date\":\"2021-03-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.072},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.857},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.749},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.072},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.771},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.684},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":2.961},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.15},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":2.997},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.38},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.41},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.284},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.56},{\"date\":\"2021-03-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.143},{\"date\":\"2021-03-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.143},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.94},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.832},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.156},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.853},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.766},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.044},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.241},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.088},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.472},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.495},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.369},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.646},{\"date\":\"2021-03-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.191},{\"date\":\"2021-03-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.191},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.954},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.849},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.164},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.865},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.78},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.051},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.265},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.119},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.485},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.516},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.399},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.655},{\"date\":\"2021-03-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.194},{\"date\":\"2021-03-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.194},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.941},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.839},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.146},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.852},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.771},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.032},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.251},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.113},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.465},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.506},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.39},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.645},{\"date\":\"2021-03-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.161},{\"date\":\"2021-03-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.161},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.945},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.845},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.147},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.857},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.777},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.032},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.259},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.118},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.472},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.511},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.395},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.649},{\"date\":\"2021-04-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.144},{\"date\":\"2021-04-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.144},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.939},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.832},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.152},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.849},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.763},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.036},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.259},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.104},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.49},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.51},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.385},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.656},{\"date\":\"2021-04-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.129},{\"date\":\"2021-04-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.129},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.945},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.836},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.162},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.855},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.767},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.045},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.267},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.106},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.507},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.517},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.391},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.666},{\"date\":\"2021-04-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.124},{\"date\":\"2021-04-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.124},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.962},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.844},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.197},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.872},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.776},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.08},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.283},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.113},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.536},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.536},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.4},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.698},{\"date\":\"2021-04-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.124},{\"date\":\"2021-04-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.124},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":2.981},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.859},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.223},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.89},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.79},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.106},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.303},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.132},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.559},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.557},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.415},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.725},{\"date\":\"2021-05-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.142},{\"date\":\"2021-05-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.142},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.051},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.929},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.296},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":2.961},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.86},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.181},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.372},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.2},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.628},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.624},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.482},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.793},{\"date\":\"2021-05-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.186},{\"date\":\"2021-05-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.186},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.118},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.996},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.355},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.028},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.928},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.241},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.44},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.273},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.684},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.688},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.552},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.846},{\"date\":\"2021-05-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.249},{\"date\":\"2021-05-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.249},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.112},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.99},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.353},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.02},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.92},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.237},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.445},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.277},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.695},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.69},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.554},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.85},{\"date\":\"2021-05-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.253},{\"date\":\"2021-05-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.253},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.119},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":2.997},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.362},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.027},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.927},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.244},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.45},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.278},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.706},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.699},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.558},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.866},{\"date\":\"2021-05-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.255},{\"date\":\"2021-05-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.255},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.128},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.005},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.373},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.035},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.935},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.255},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.463},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.293},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.715},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.712},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.568},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.882},{\"date\":\"2021-06-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.274},{\"date\":\"2021-06-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.274},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.161},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.041},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.401},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.069},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.97},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.283},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.488},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.322},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.737},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.744},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.606},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.909},{\"date\":\"2021-06-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.286},{\"date\":\"2021-06-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.286},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.153},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.033},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.395},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.06},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.961},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.276},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.489},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.326},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.735},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.744},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.606},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.907},{\"date\":\"2021-06-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.287},{\"date\":\"2021-06-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.287},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.185},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.062},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.43},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.091},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.99},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.309},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.524},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.357},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.775},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.777},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.635},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.947},{\"date\":\"2021-06-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.3},{\"date\":\"2021-06-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.3},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.216},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.104},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.441},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.122},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.032},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.321},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.559},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.407},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.787},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.806},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.681},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.955},{\"date\":\"2021-07-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.331},{\"date\":\"2021-07-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.331},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.227},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.112},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.459},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.133},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.039},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.339},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.573},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.416},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.807},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.819},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.691},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.971},{\"date\":\"2021-07-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.338},{\"date\":\"2021-07-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.338},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.247},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.135},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.473},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.153},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.061},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.354},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.592},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.443},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.815},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.839},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.717},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.984},{\"date\":\"2021-07-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.344},{\"date\":\"2021-07-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.344},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.232},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.118},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.46},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.136},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.044},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.34},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.584},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.434},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.81},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.829},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.706},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":3.976},{\"date\":\"2021-07-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.342},{\"date\":\"2021-07-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.342},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.256},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.134},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.5},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.159},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.059},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.378},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.607},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.448},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.846},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.861},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.725},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.023},{\"date\":\"2021-08-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.367},{\"date\":\"2021-08-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.367},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.269},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.157},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.494},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.172},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.081},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.372},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.624},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.479},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.841},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.874},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.752},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.019},{\"date\":\"2021-08-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.364},{\"date\":\"2021-08-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.364},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.272},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.155},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.505},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.174},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.079},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.381},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.629},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.478},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.857},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.882},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.752},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.037},{\"date\":\"2021-08-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.356},{\"date\":\"2021-08-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.356},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.243},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.125},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.479},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.145},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.048},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.356},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.606},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.452},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.838},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.853},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.729},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.002},{\"date\":\"2021-08-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.324},{\"date\":\"2021-08-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.324},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.237},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.118},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.476},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.139},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.041},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.352},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.599},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.444},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.832},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.853},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.724},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.007},{\"date\":\"2021-08-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.339},{\"date\":\"2021-08-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.339},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.273},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.156},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.507},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.176},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.08},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.385},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.628},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.474},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.858},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.879},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.751},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.032},{\"date\":\"2021-09-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.373},{\"date\":\"2021-09-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.373},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.262},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.143},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.499},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.165},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.068},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.378},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.618},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.464},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.849},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.868},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.739},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.021},{\"date\":\"2021-09-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.372},{\"date\":\"2021-09-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.372},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.28},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.169},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.504},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.184},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.094},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.382},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.632},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.486},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.851},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.883},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.762},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.026},{\"date\":\"2021-09-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.385},{\"date\":\"2021-09-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.385},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.271},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.155},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.505},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.175},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.08},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.382},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.625},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.472},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.855},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.876},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.747},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.029},{\"date\":\"2021-09-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.406},{\"date\":\"2021-09-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.406},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.285},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.168},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.521},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.19},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.093},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.4},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.635},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.48},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.869},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.886},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.757},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.041},{\"date\":\"2021-10-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.477},{\"date\":\"2021-10-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.477},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.36},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.247},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.59},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.267},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.173},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.474},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.697},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.551},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.925},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.952},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.829},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.101},{\"date\":\"2021-10-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.586},{\"date\":\"2021-10-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.586},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.416},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.297},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.655},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.322},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.225},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.537},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.751},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.592},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.99},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.007},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.871},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.17},{\"date\":\"2021-10-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.671},{\"date\":\"2021-10-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.671},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.476},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.351},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.73},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.383},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.279},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.611},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.809},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.643},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.063},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.071},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.926},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.246},{\"date\":\"2021-10-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.713},{\"date\":\"2021-10-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.713},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.484},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.352},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.751},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.39},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.28},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.632},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.822},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.648},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.085},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.084},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.929},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.271},{\"date\":\"2021-11-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.727},{\"date\":\"2021-11-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.727},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.505},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.366},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.783},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.41},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.294},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.665},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.842},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.66},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.117},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.101},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.935},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.3},{\"date\":\"2021-11-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.73},{\"date\":\"2021-11-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.73},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.495},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.349},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.789},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.399},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.277},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.668},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.841},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.647},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.134},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.103},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.927},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.316},{\"date\":\"2021-11-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.734},{\"date\":\"2021-11-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.734},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.493},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.344},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.791},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.395},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.271},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.668},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.843},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.645},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.143},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.107},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.93},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.319},{\"date\":\"2021-11-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.724},{\"date\":\"2021-11-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.724},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.478},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.326},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.783},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.38},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.253},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.66},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.831},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.626},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.141},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.095},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.913},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.314},{\"date\":\"2021-11-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.72},{\"date\":\"2021-11-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.72},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.44},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.279},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.761},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.341},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.204},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.639},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.8},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.587},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.12},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.063},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.875},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.288},{\"date\":\"2021-12-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.674},{\"date\":\"2021-12-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.674},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.414},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.252},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.738},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.315},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.178},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.614},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.776},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.558},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.106},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.039},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.846},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.27},{\"date\":\"2021-12-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.649},{\"date\":\"2021-12-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.649},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.395},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.229},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.727},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.295},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.154},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.602},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.763},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.539},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.099},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.024},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.826},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.261},{\"date\":\"2021-12-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.626},{\"date\":\"2021-12-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.626},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.375},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.211},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.704},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.275},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.136},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.577},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.743},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.521},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.078},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.008},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.81},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.244},{\"date\":\"2021-12-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.615},{\"date\":\"2021-12-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.615},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.381},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.216},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.71},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.281},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.141},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.585},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.746},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.524},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.079},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.012},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.813},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.249},{\"date\":\"2022-01-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.613},{\"date\":\"2022-01-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.613},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.394},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.238},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.708},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.295},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.164},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.582},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.752},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.535},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.078},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.02},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.829},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.248},{\"date\":\"2022-01-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.657},{\"date\":\"2022-01-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.657},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.404},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.255},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.707},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.306},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.182},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.581},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.758},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.548},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.076},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.028},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.847},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.246},{\"date\":\"2022-01-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.725},{\"date\":\"2022-01-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.725},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.421},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.271},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.722},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.323},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.199},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.597},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.769},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.56},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.086},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.04},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.858},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.26},{\"date\":\"2022-01-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.78},{\"date\":\"2022-01-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.78},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.464},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.321},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.754},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.368},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.249},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.63},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.804},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.604},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.105},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.078},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.904},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.288},{\"date\":\"2022-01-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.846},{\"date\":\"2022-01-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.846},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.538},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.401},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.812},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.444},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.33},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.69},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.867},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.673},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.158},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.141},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.974},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.34},{\"date\":\"2022-02-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.951},{\"date\":\"2022-02-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.951},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.581},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.441},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.859},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.487},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.372},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.738},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.908},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.71},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.204},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.18},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.009},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.384},{\"date\":\"2022-02-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.019},{\"date\":\"2022-02-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.019},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.624},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.48},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.911},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.53},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.41},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.79},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.954},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.752},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.256},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.221},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.045},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.43},{\"date\":\"2022-02-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.055},{\"date\":\"2022-02-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.055},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.701},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.554},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.994},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.608},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.486},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.874},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.025},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.814},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.341},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.296},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.114},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.513},{\"date\":\"2022-02-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.104},{\"date\":\"2022-02-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.104},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.196},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.031},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.527},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.102},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.963},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.407},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.524},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.292},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.872},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.798},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.592},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.044},{\"date\":\"2022-03-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.849},{\"date\":\"2022-03-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.849},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.414},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.252},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.737},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.315},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.18},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.61},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.765},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.538},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.106},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.038},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.833},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.284},{\"date\":\"2022-03-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.25},{\"date\":\"2022-03-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.25},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.343},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.165},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.697},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.239},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.091},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.562},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.719},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.462},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.107},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.992},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.759},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.269},{\"date\":\"2022-03-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.134},{\"date\":\"2022-03-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.134},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.334},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.152},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.697},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.231},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.078},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.562},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.714},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.447},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.116},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.985},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.749},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.27},{\"date\":\"2022-03-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.185},{\"date\":\"2022-03-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.185},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.274},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.096},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.629},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.17},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.021},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.495},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.659},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.403},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.046},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.931},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.703},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.204},{\"date\":\"2022-04-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.144},{\"date\":\"2022-04-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.144},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.196},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.019},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.552},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.091},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.943},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.417},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.587},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.331},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.976},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.854},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.627},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.133},{\"date\":\"2022-04-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.073},{\"date\":\"2022-04-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.073},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.17},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.992},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.528},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.066},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.915},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.395},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.557},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.303},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.945},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.831},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.605},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.107},{\"date\":\"2022-04-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.101},{\"date\":\"2022-04-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.101},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.211},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.035},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.565},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.107},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.959},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.433},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.587},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.344},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.96},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.869},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.646},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.139},{\"date\":\"2022-04-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.16},{\"date\":\"2022-04-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.16},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.285},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.105},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.646},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.182},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.031},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.512},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.657},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.401},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.047},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.939},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.707},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.221},{\"date\":\"2022-05-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.509},{\"date\":\"2022-05-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.509},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.428},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.233},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.821},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.328},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.161},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.695},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.779},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.508},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.193},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.07},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.819},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.377},{\"date\":\"2022-05-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.623},{\"date\":\"2022-05-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.623},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.591},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.392},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.99},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.491},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.32},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.862},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.941},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.662},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.365},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.24},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.979},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.555},{\"date\":\"2022-05-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.613},{\"date\":\"2022-05-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.613},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.694},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.481},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":5.121},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.593},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.41},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.994},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":5.04},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.747},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.485},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.346},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":5.069},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.683},{\"date\":\"2022-05-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.571},{\"date\":\"2022-05-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.571},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.727},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.513},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":5.158},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.624},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.439},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":5.027},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":5.083},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.79},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.528},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.399},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":5.118},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.738},{\"date\":\"2022-05-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.539},{\"date\":\"2022-05-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.539},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.977},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.773},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":5.387},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.876},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.702},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":5.256},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":5.32},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":5.037},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.752},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.635},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":5.363},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.964},{\"date\":\"2022-06-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.703},{\"date\":\"2022-06-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.703},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":5.107},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.916},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":5.491},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":5.006},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.844},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":5.362},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":5.455},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":5.191},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.858},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.762},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":5.513},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":6.064},{\"date\":\"2022-06-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.718},{\"date\":\"2022-06-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.718},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":5.066},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.874},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":5.451},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.962},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.798},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":5.319},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":5.428},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":5.167},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.826},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.736},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":5.49},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":6.033},{\"date\":\"2022-06-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.81},{\"date\":\"2022-06-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.81},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.979},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.788},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":5.36},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.872},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.71},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":5.225},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":5.355},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":5.098},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.745},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.664},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":5.421},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.955},{\"date\":\"2022-06-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.783},{\"date\":\"2022-06-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.783},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.879},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.699},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":5.242},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.771},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.619},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":5.103},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":5.261},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":5.016},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.635},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.575},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":5.344},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.853},{\"date\":\"2022-07-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.675},{\"date\":\"2022-07-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.675},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.754},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.582},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":5.099},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.646},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.501},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.963},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":5.147},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.915},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.501},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.442},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":5.233},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.695},{\"date\":\"2022-07-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.568},{\"date\":\"2022-07-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.568},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.599},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.432},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.934},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.49},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.35},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.798},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.994},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.771},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.33},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.285},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":5.084},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.529},{\"date\":\"2022-07-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.432},{\"date\":\"2022-07-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.432},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.44},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.266},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.789},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.33},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.183},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.652},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.836},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.609},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.182},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.14},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.933},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.39},{\"date\":\"2022-07-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.268},{\"date\":\"2022-07-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.268},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.304},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":4.119},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.674},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.192},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":4.034},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.536},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.703},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.467},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.062},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":5.017},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.794},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.285},{\"date\":\"2022-08-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.138},{\"date\":\"2022-08-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.138},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.151},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.964},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.526},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":4.038},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.879},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.386},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.553},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.312},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.92},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.87},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.645},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.143},{\"date\":\"2022-08-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.993},{\"date\":\"2022-08-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.993},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.051},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.863},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.424},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.938},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.78},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.28},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.453},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.2},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.831},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.774},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.539},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.055},{\"date\":\"2022-08-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.911},{\"date\":\"2022-08-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.911},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.993},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.808},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.358},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.88},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.724},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.214},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.394},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.143},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.77},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.713},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.481},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.991},{\"date\":\"2022-08-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.909},{\"date\":\"2022-08-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.909},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.938},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.774},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.265},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.827},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.691},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.121},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.334},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.1},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.686},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.654},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.449},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.903},{\"date\":\"2022-08-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.115},{\"date\":\"2022-08-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.115},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.859},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.7},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.176},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.746},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.617},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.026},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.262},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.026},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.618},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.585},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.378},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.835},{\"date\":\"2022-09-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.084},{\"date\":\"2022-09-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.084},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.805},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.635},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.144},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.69},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.551},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.989},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.217},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.965},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.597},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.549},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.319},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.828},{\"date\":\"2022-09-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.033},{\"date\":\"2022-09-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.033},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.771},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.597},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.118},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.654},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.513},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.96},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.194},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.929},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.592},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.523},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.283},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.813},{\"date\":\"2022-09-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.964},{\"date\":\"2022-09-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.964},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.832},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.653},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.186},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.711},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.569},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.018},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.275},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.984},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.707},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.598},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.34},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.906},{\"date\":\"2022-09-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.889},{\"date\":\"2022-09-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.889},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.909},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.676},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.367},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.782},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.592},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.188},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.371},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.996},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.932},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.718},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.371},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.13},{\"date\":\"2022-10-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.836},{\"date\":\"2022-10-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.836},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.034},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.805},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.486},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.912},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.723},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.318},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.47},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.114},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":5.002},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.811},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.477},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.208},{\"date\":\"2022-10-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.224},{\"date\":\"2022-10-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.224},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.99},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.774},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.416},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.871},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.692},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.255},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.425},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.096},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.917},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.751},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.45},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.108},{\"date\":\"2022-10-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.339},{\"date\":\"2022-10-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.339},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.887},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.693},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.271},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.769},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.609},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.113},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.314},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.021},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.752},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.639},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.374},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.953},{\"date\":\"2022-10-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.341},{\"date\":\"2022-10-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.341},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.857},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.652},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.263},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.742},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.57},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.112},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.262},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.968},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.707},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.6},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.327},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.93},{\"date\":\"2022-10-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.317},{\"date\":\"2022-10-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.317},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.909},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.708},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.312},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.796},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.628},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.162},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.296},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.003},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.735},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.641},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.368},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.968},{\"date\":\"2022-11-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.333},{\"date\":\"2022-11-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.333},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.876},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.688},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.253},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.762},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.606},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.102},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.27},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.996},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.687},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.615},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.364},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.92},{\"date\":\"2022-11-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.313},{\"date\":\"2022-11-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.313},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.763},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.582},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.126},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.648},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.498},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.973},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.167},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.901},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.568},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.507},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.265},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.8},{\"date\":\"2022-11-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.233},{\"date\":\"2022-11-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.233},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.649},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.473},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.997},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.534},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.389},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.848},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.053},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.802},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.432},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.383},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.157},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.657},{\"date\":\"2022-11-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":5.141},{\"date\":\"2022-11-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":5.141},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.504},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.345},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.82},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.39},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.26},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.673},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.901},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.677},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.242},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.232},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.03},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.476},{\"date\":\"2022-12-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.967},{\"date\":\"2022-12-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.967},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.353},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.194},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.669},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.239},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.109},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.522},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.748},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.531},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.077},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.08},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.881},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.32},{\"date\":\"2022-12-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.754},{\"date\":\"2022-12-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.754},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.234},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.08},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.541},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.12},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.994},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.396},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.628},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.418},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.945},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.96},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.772},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.188},{\"date\":\"2022-12-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.596},{\"date\":\"2022-12-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.596},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.203},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.055},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.501},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.091},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.971},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.352},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.593},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.381},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.916},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.925},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.732},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.158},{\"date\":\"2022-12-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.537},{\"date\":\"2022-12-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.537},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.331},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.203},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.588},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.223},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.123},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.441},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.7},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.506},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.995},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.028},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.855},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.237},{\"date\":\"2023-01-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.583},{\"date\":\"2023-01-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.583},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.366},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.246},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.604},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.259},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.167},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.46},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.727},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.549},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.998},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.055},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.893},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.25},{\"date\":\"2023-01-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.549},{\"date\":\"2023-01-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.549},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.416},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.306},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.635},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.31},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.225},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.494},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.782},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.62},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.027},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.096},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.957},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.265},{\"date\":\"2023-01-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.524},{\"date\":\"2023-01-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.524},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.519},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.42},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.715},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.415},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.34},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.577},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.88},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.741},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.09},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.189},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.069},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.333},{\"date\":\"2023-01-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.604},{\"date\":\"2023-01-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.604},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.594},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.499},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.784},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.489},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.417},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.645},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.954},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.819},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.157},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.27},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.151},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.413},{\"date\":\"2023-01-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.622},{\"date\":\"2023-01-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.622},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.552},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.446},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.763},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.444},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.362},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.622},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.931},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.793},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.143},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.246},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.116},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.402},{\"date\":\"2023-02-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.539},{\"date\":\"2023-02-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.539},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.502},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.397},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.712},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.39},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.311},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.563},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.902},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.754},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.126},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.212},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.079},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.373},{\"date\":\"2023-02-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.444},{\"date\":\"2023-02-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.444},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.494},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.381},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.718},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.379},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.293},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.566},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.908},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.752},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.145},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.215},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.07},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.391},{\"date\":\"2023-02-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.376},{\"date\":\"2023-02-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.376},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.457},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.338},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.694},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.342},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.25},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.54},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.874},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.707},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.124},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.189},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.034},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.374},{\"date\":\"2023-02-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.294},{\"date\":\"2023-02-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.294},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.505},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.374},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.767},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.389},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.288},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.61},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.916},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.724},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.205},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.239},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.055},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.461},{\"date\":\"2023-03-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.282},{\"date\":\"2023-03-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.282},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.568},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.434},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.838},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.456},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.35},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.688},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.97},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.778},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.262},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.284},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.105},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.499},{\"date\":\"2023-03-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.247},{\"date\":\"2023-03-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.247},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.534},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.405},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.794},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.422},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.321},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.644},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.935},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.749},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.215},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.247},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.075},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.454},{\"date\":\"2023-03-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.185},{\"date\":\"2023-03-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.185},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.533},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.389},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.822},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.421},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.304},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.676},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.934},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.735},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.234},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.247},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.066},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.464},{\"date\":\"2023-03-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.128},{\"date\":\"2023-03-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.128},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.606},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.465},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.887},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.497},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.384},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.743},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.988},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.788},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.288},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.305},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.125},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.52},{\"date\":\"2023-04-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.105},{\"date\":\"2023-04-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.105},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.703},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.572},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.965},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.596},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.493},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.822},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.069},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.878},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.36},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.391},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.216},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.6},{\"date\":\"2023-04-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.098},{\"date\":\"2023-04-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.098},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.769},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.632},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.044},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.663},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.553},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.902},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.134},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.936},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.435},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.458},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.278},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.674},{\"date\":\"2023-04-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.116},{\"date\":\"2023-04-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.116},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.765},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.623},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.05},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.656},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.542},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.905},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.142},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.935},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.454},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.469},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.285},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.688},{\"date\":\"2023-04-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.077},{\"date\":\"2023-04-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.077},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.711},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.562},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.009},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.6},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.48},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.864},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.094},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.884},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.411},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.424},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.235},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.65},{\"date\":\"2023-05-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.018},{\"date\":\"2023-05-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.018},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.644},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.491},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.952},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.533},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.407},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.808},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.033},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.825},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.348},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.362},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.173},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.589},{\"date\":\"2023-05-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.922},{\"date\":\"2023-05-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.922},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.647},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.499},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.944},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.536},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.415},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.8},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.031},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.826},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.343},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.359},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.175},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.579},{\"date\":\"2023-05-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.897},{\"date\":\"2023-05-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.897},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.645},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.5},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.938},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.534},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.416},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.794},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.029},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.83},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.335},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.361},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.181},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.58},{\"date\":\"2023-05-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.883},{\"date\":\"2023-05-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.883},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.684},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.526},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.571},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.443},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.854},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.072},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.855},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.401},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.406},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.206},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.645},{\"date\":\"2023-05-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.855},{\"date\":\"2023-05-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.855},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.655},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.5},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.965},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.541},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.414},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.818},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.051},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.84},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.372},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.384},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.189},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.618},{\"date\":\"2023-06-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.797},{\"date\":\"2023-06-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.797},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.707},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.559},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.005},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.595},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.475},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.857},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.105},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.897},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.419},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.428},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.237},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.656},{\"date\":\"2023-06-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.794},{\"date\":\"2023-06-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.794},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.69},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.535},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.577},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.449},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.855},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.091},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.887},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.4},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.414},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.223},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.642},{\"date\":\"2023-06-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.815},{\"date\":\"2023-06-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.815},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.685},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.533},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.989},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.571},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.445},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.845},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.089},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.891},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.39},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.41},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.233},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.623},{\"date\":\"2023-06-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.801},{\"date\":\"2023-06-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.801},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.643},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.486},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.957},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.527},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.397},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.811},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.054},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.853},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.36},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.379},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.194},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.602},{\"date\":\"2023-07-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.767},{\"date\":\"2023-07-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.767},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.663},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.51},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.971},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.546},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.42},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.822},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.081},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.876},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.394},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.405},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.223},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.625},{\"date\":\"2023-07-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.806},{\"date\":\"2023-07-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.806},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.676},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.527},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.973},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.559},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.438},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.825},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.087},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.889},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.39},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.412},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.232},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.63},{\"date\":\"2023-07-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.806},{\"date\":\"2023-07-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.806},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.711},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.568},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.999},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.596},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.479},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.852},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.118},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.928},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.407},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.443},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.273},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.649},{\"date\":\"2023-07-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.905},{\"date\":\"2023-07-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.905},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.869},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.736},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.136},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.757},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.65},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.99},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.263},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.078},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.545},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.582},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.419},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.779},{\"date\":\"2023-07-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.127},{\"date\":\"2023-07-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.127},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.94},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.816},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.189},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.828},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.731},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.041},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.332},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.155},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.6},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.655},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.502},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.837},{\"date\":\"2023-08-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.239},{\"date\":\"2023-08-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.239},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.962},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.831},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.225},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.85},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.746},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.076},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.353},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.166},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.637},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.683},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.516},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.884},{\"date\":\"2023-08-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.378},{\"date\":\"2023-08-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.378},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.984},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.833},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.285},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.868},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.746},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.134},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.393},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.183},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.71},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.717},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.526},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.946},{\"date\":\"2023-08-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.389},{\"date\":\"2023-08-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.389},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.931},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.772},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.249},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.813},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.684},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.094},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.349},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.125},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.687},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.683},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.477},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.929},{\"date\":\"2023-08-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.475},{\"date\":\"2023-08-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.475},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.925},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.768},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.238},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.807},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.68},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.082},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.347},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.125},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.685},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.672},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.468},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.918},{\"date\":\"2023-09-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.492},{\"date\":\"2023-09-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.492},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.941},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.78},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.263},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.822},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.692},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.105},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.367},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.13},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.727},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.694},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.479},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.953},{\"date\":\"2023-09-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.54},{\"date\":\"2023-09-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.54},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":4.001},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.811},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.381},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.878},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.724},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.215},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.446},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.161},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.88},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.775},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.51},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.094},{\"date\":\"2023-09-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.633},{\"date\":\"2023-09-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.633},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.963},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.752},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.387},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.837},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.663},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.216},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.423},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.101},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.912},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.758},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.463},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.115},{\"date\":\"2023-09-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.586},{\"date\":\"2023-09-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.586},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.93},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.688},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.412},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.798},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.598},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.233},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.414},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":4.048},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.969},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.759},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.415},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":5.171},{\"date\":\"2023-10-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.593},{\"date\":\"2023-10-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.593},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.814},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.597},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.248},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.684},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.506},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.073},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.293},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.965},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.797},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.627},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.327},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.988},{\"date\":\"2023-10-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.498},{\"date\":\"2023-10-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.498},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.706},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.496},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.125},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.576},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.404},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.951},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.177},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.862},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.659},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.522},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.231},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.873},{\"date\":\"2023-10-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.444},{\"date\":\"2023-10-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.444},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.66},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.461},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.059},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.533},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.369},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.89},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.117},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.826},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.571},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.465},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.192},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.794},{\"date\":\"2023-10-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.545},{\"date\":\"2023-10-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.545},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.6},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.411},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.978},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.473},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.32},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.809},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.053},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.773},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.48},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.4},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.141},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.711},{\"date\":\"2023-10-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.454},{\"date\":\"2023-10-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.454},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.52},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.334},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.894},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.396},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.245},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.725},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.962},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.684},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.388},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.312},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.05},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.628},{\"date\":\"2023-11-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.366},{\"date\":\"2023-11-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.366},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.473},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.3},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.816},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.349},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.212},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.646},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.908},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.645},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.289},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.262},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.016},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.552},{\"date\":\"2023-11-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.294},{\"date\":\"2023-11-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.294},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.414},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.233},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.77},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.289},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.144},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.602},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.85},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.583},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.236},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.209},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.959},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.502},{\"date\":\"2023-11-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.209},{\"date\":\"2023-11-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.209},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.363},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.178},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.727},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.238},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.088},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.562},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.801},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.535},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.187},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.157},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.91},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.448},{\"date\":\"2023-11-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.146},{\"date\":\"2023-11-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.146},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.355},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.194},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.67},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.231},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.104},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.503},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.791},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.548},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.142},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.138},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.925},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.387},{\"date\":\"2023-12-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.092},{\"date\":\"2023-12-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.092},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.259},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.104},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.563},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.136},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.014},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.399},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.682},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.454},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.014},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.042},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.837},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.281},{\"date\":\"2023-12-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.987},{\"date\":\"2023-12-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.987},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.176},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.023},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.476},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.053},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.931},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.312},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.602},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.378},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.924},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.957},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.761},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.185},{\"date\":\"2023-12-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.894},{\"date\":\"2023-12-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.894},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.238},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.094},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.522},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.116},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.005},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.357},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.663},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.447},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.976},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.014},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.822},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.237},{\"date\":\"2023-12-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.914},{\"date\":\"2023-12-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.914},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.213},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.055},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.522},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.089},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.966},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.354},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.646},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.408},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.987},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.784},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.25},{\"date\":\"2024-01-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.876},{\"date\":\"2024-01-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.876},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.197},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.035},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.514},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.073},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.945},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.347},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.632},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.394},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.974},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.983},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.764},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.237},{\"date\":\"2024-01-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.828},{\"date\":\"2024-01-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.828},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.179},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.032},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.466},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.058},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.944},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.302},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.599},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.377},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.916},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.947},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.75},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.176},{\"date\":\"2024-01-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.863},{\"date\":\"2024-01-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.863},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.181},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.037},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.464},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.062},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.95},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.304},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.591},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.375},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.901},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.942},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.75},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.165},{\"date\":\"2024-01-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.838},{\"date\":\"2024-01-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.838},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.214},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.066},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.507},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.095},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.979},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.347},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.626},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.403},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.948},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.971},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.772},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.203},{\"date\":\"2024-01-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.867},{\"date\":\"2024-01-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.867},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.254},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.107},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.545},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.136},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.021},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.385},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.663},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.438},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.988},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.009},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.811},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.24},{\"date\":\"2024-02-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.899},{\"date\":\"2024-02-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.899},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.309},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.168},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.585},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.192},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.083},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.424},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.707},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.488},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.022},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.059},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.867},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.283},{\"date\":\"2024-02-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.109},{\"date\":\"2024-02-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.109},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.385},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.244},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.661},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.269},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.159},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.504},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.782},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.566},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.093},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.128},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.941},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.346},{\"date\":\"2024-02-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.109},{\"date\":\"2024-02-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.109},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.365},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.231},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.629},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.249},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.145},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.471},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.763},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.553},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.066},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.11},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.934},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.316},{\"date\":\"2024-02-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.058},{\"date\":\"2024-02-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.058},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.466},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.327},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.74},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.35},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.243},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.578},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.866},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.641},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.189},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.214},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.022},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.438},{\"date\":\"2024-03-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.022},{\"date\":\"2024-03-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.022},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.492},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.355},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.762},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.376},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.27},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.602},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.889},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.67},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.205},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.24},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.052},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.459},{\"date\":\"2024-03-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.004},{\"date\":\"2024-03-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.004},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.569},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.433},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.836},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.453},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.348},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.679},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.963},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.751},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.266},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.31},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.131},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.519},{\"date\":\"2024-03-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.028},{\"date\":\"2024-03-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.028},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.639},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.494},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.923},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.523},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.409},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.767},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.033},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.815},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.347},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.381},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.187},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.608},{\"date\":\"2024-03-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.034},{\"date\":\"2024-03-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.034},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.636},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.487},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.926},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.517},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.401},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.766},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.041},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.818},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.364},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.393},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.196},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.623},{\"date\":\"2024-04-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.996},{\"date\":\"2024-04-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.996},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.712},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.534},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.06},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.591},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.448},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.897},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.124},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.863},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.501},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.485},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.241},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.77},{\"date\":\"2024-04-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.061},{\"date\":\"2024-04-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.061},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.751},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.567},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.111},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.628},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.479},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.947},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.171},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.903},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.557},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.536},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.285},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.83},{\"date\":\"2024-04-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":4.015},{\"date\":\"2024-04-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":4.015},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.791},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.594},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.177},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.668},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.506},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":4.015},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.211},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.931},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.617},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.574},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.31},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.881},{\"date\":\"2024-04-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.992},{\"date\":\"2024-04-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.992},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.777},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.587},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.149},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.653},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.498},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.987},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.195},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.926},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.583},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.566},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.314},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.86},{\"date\":\"2024-04-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.947},{\"date\":\"2024-04-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.947},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.766},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.577},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.137},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.643},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.487},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.976},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.194},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.927},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.579},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.55},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.303},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.838},{\"date\":\"2024-05-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.894},{\"date\":\"2024-05-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.894},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.731},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.551},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.084},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.608},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.463},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.922},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.15},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.893},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.523},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.513},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.272},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.795},{\"date\":\"2024-05-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.848},{\"date\":\"2024-05-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.848},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.706},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.54},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.033},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.584},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.451},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.871},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.126},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.885},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.474},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.485},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.264},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.742},{\"date\":\"2024-05-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.789},{\"date\":\"2024-05-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.789},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.698},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.522},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":4.052},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.577},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.434},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.894},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.112},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.864},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.471},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.479},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.25},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.758},{\"date\":\"2024-05-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.758},{\"date\":\"2024-05-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.758},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.638},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.466},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.975},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.516},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.376},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.816},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.059},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.82},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.405},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.417},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.198},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.672},{\"date\":\"2024-06-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.726},{\"date\":\"2024-06-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.726},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.551},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.387},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.874},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.429},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.297},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.713},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.97},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.738},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.306},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.331},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.118},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.581},{\"date\":\"2024-06-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.658},{\"date\":\"2024-06-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.658},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.556},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.399},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.863},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.435},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.31},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.704},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.976},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.752},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.298},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.326},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.129},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.556},{\"date\":\"2024-06-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.735},{\"date\":\"2024-06-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.735},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.557},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.41},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.846},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.438},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.322},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.688},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.965},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.753},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.273},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.319},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.131},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.539},{\"date\":\"2024-06-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.769},{\"date\":\"2024-06-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.769},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.595},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.458},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.865},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.479},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.371},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.71},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.99},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.79},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.28},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.344},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.169},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.547},{\"date\":\"2024-07-01\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.813},{\"date\":\"2024-07-01\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.813},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.608},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.472},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.876},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.489},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.384},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.717},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.013},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.818},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.295},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.367},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.191},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.573},{\"date\":\"2024-07-08\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.865},{\"date\":\"2024-07-08\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.865},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.614},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.476},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.887},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.496},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.388},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.731},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":4.014},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.822},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.294},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.371},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.197},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.576},{\"date\":\"2024-07-15\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.826},{\"date\":\"2024-07-15\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.826},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.587},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.451},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.855},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.471},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.364},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.703},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.974},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.781},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.254},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.331},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.162},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.528},{\"date\":\"2024-07-22\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.779},{\"date\":\"2024-07-22\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.779},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.598},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.467},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.856},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.484},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.381},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.706},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.982},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.797},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.251},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.333},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.177},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.516},{\"date\":\"2024-07-29\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.768},{\"date\":\"2024-07-29\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.768},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.563},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.444},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.797},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.448},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.357},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.644},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.955},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.784},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.202},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.302},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.159},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.47},{\"date\":\"2024-08-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.755},{\"date\":\"2024-08-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.755},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.53},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.414},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.761},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.414},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.326},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.606},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.926},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.757},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.17},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.274},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.132},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.44},{\"date\":\"2024-08-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.704},{\"date\":\"2024-08-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.704},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.5},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.375},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.747},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.382},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.286},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.592},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.906},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.727},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.167},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.252},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.101},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.429},{\"date\":\"2024-08-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.688},{\"date\":\"2024-08-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.688},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.433},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.301},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.693},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.313},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.212},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.534},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.842},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.652},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.119},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.201},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.036},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.394},{\"date\":\"2024-08-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.651},{\"date\":\"2024-08-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.651},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.411},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.281},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.674},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.289},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.191},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.509},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.835},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.642},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.116},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.196},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":4.023},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.407},{\"date\":\"2024-09-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.625},{\"date\":\"2024-09-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.625},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.36},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.211},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.654},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.236},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.12},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.488},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.791},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.576},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.103},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.153},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.957},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.383},{\"date\":\"2024-09-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.555},{\"date\":\"2024-09-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.555},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.307},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.15},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.618},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.18},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.057},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.447},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.755},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.527},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.087},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.119},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.911},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.363},{\"date\":\"2024-09-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.526},{\"date\":\"2024-09-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.526},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.311},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.166},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.597},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.185},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.074},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.426},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.751},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.532},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.068},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.108},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.913},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.338},{\"date\":\"2024-09-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.539},{\"date\":\"2024-09-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.539},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.303},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.179},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.548},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.179},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.087},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.378},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.738},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.549},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.015},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.094},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.926},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.292},{\"date\":\"2024-09-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.544},{\"date\":\"2024-09-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.544},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.26},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.117},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.545},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.136},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.026},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.377},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.692},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.474},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.014},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.049},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.857},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.276},{\"date\":\"2024-10-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.584},{\"date\":\"2024-10-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.584},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.294},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.158},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.562},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.171},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.069},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.394},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.719},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.513},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.021},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.077},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.89},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.297},{\"date\":\"2024-10-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.631},{\"date\":\"2024-10-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.631},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.268},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.135},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.53},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.144},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.044},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.361},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.7},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.501},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.993},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.058},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.881},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.267},{\"date\":\"2024-10-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.553},{\"date\":\"2024-10-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.553},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.22},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.097},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.466},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.097},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.005},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.296},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.654},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.465},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.933},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.012},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.843},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.211},{\"date\":\"2024-10-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.573},{\"date\":\"2024-10-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.573},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.191},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.065},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.441},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.069},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.975},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.272},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.616},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.423},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.902},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.977},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.805},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.18},{\"date\":\"2024-11-04\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.536},{\"date\":\"2024-11-04\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.536},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.176},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.054},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.416},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.052},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.962},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.245},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.613},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.421},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.89},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.964},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.799},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.155},{\"date\":\"2024-11-11\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.521},{\"date\":\"2024-11-11\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.521},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.168},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.042},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.414},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.046},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.95},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.249},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.593},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.402},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.867},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.946},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.788},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.128},{\"date\":\"2024-11-18\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.491},{\"date\":\"2024-11-18\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.491},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.166},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.037},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.421},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.044},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.946},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.254},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.586},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.39},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.871},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.95},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.779},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.149},{\"date\":\"2024-11-25\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.539},{\"date\":\"2024-11-25\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.539},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.156},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.027},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.408},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.034},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.936},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.242},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.574},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.375},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.861},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.937},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.767},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.134},{\"date\":\"2024-12-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.54},{\"date\":\"2024-12-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.54},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.131},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.004},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.379},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.008},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.912},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.213},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.558},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.364},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.835},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.914},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.751},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.103},{\"date\":\"2024-12-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.458},{\"date\":\"2024-12-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.458},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.137},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.023},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.362},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.016},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.933},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.196},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.556},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.379},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.813},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.911},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.76},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.086},{\"date\":\"2024-12-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.494},{\"date\":\"2024-12-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.494},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.145},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.025},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.382},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.024},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.935},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.216},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.564},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.374},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.838},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.915},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.753},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.103},{\"date\":\"2024-12-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.476},{\"date\":\"2024-12-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.476},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.128},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.005},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.37},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.006},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.914},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.203},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.554},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.365},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.827},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.907},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.745},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.096},{\"date\":\"2024-12-30\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.503},{\"date\":\"2024-12-30\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.503},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.168},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.047},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.406},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.047},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.958},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.239},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.587},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.395},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.865},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.935},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.77},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.128},{\"date\":\"2025-01-06\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.561},{\"date\":\"2025-01-06\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.561},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.164},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.04},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.408},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.043},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.95},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.242},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.585},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.394},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.862},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.939},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.77},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.136},{\"date\":\"2025-01-13\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.602},{\"date\":\"2025-01-13\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.602},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.229},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.099},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.485},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.109},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.011},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.32},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.642},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.444},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.928},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.998},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.821},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.206},{\"date\":\"2025-01-20\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.715},{\"date\":\"2025-01-20\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.715},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.224},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.096},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.478},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.103},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.006},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.313},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.644},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.45},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.923},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.999},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.825},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.203},{\"date\":\"2025-01-27\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.659},{\"date\":\"2025-01-27\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.659},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.205},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.062},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.486},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.082},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.972},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.32},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.633},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.42},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.941},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.99},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.799},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.212},{\"date\":\"2025-02-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.66},{\"date\":\"2025-02-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.66},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.253},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.113},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.529},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.128},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.022},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.357},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.685},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.471},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.995},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.05},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.853},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.278},{\"date\":\"2025-02-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.665},{\"date\":\"2025-02-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.665},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.276},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.113},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.597},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.148},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.021},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.422},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.723},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.477},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.078},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.088},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.855},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.359},{\"date\":\"2025-02-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.677},{\"date\":\"2025-02-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.677},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.255},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.09},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.577},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.125},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.997},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.399},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.706},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.457},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.064},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.075},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.839},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.349},{\"date\":\"2025-02-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.697},{\"date\":\"2025-02-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.697},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.206},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.043},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.524},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.078},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.951},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.349},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.654},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.406},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.012},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.022},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.795},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.286},{\"date\":\"2025-03-03\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.635},{\"date\":\"2025-03-03\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.635},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.197},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.039},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.505},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.069},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.947},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.332},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.64},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.4},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.986},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.005},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.791},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.254},{\"date\":\"2025-03-10\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.582},{\"date\":\"2025-03-10\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.582},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.184},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.035},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.475},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.058},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.943},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.303},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.627},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.401},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.95},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":3.989},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.788},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.221},{\"date\":\"2025-03-17\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.549},{\"date\":\"2025-03-17\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.549},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.24},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.09},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.531},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.115},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.999},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.362},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.674},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.45},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":3.995},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.032},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.83},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.265},{\"date\":\"2025-03-24\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.567},{\"date\":\"2025-03-24\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.567},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.288},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.131},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.594},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.162},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.04},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.422},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.73},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.492},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.07},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.093},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.876},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.344},{\"date\":\"2025-03-31\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.592},{\"date\":\"2025-03-31\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.592},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.37},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.209},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.683},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.243},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.118},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.511},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.815},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.573},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.158},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.174},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.952},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.43},{\"date\":\"2025-04-07\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.639},{\"date\":\"2025-04-07\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.639},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.295},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.135},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.607},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.168},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.043},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.435},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.743},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.503},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.085},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.103},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.888},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.351},{\"date\":\"2025-04-14\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.579},{\"date\":\"2025-04-14\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.579},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.268},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.112},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.572},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.141},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.02},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.4},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.718},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.482},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.056},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.074},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.862},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.318},{\"date\":\"2025-04-21\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.534},{\"date\":\"2025-04-21\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.534},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.261},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.107},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.561},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.133},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.013},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.388},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.713},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.485},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.039},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.071},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.864},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.31},{\"date\":\"2025-04-28\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.514},{\"date\":\"2025-04-28\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.514},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.273},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.123},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.564},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.147},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.031},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.393},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.715},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.488},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.041},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.072},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.869},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.306},{\"date\":\"2025-05-05\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.497},{\"date\":\"2025-05-05\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.497},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.249},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.08},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.578},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.12},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.986},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.404},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.703},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.449},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.066},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.068},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.84},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.331},{\"date\":\"2025-05-12\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.476},{\"date\":\"2025-05-12\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.476},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.302},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.135},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.628},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.173},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.041},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.455},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.756},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.507},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.113},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.116},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.892},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.375},{\"date\":\"2025-05-19\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.536},{\"date\":\"2025-05-19\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.536},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.288},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.124},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.608},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.16},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.03},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.436},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.74},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.498},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.084},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.102},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.884},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.353},{\"date\":\"2025-05-26\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.487},{\"date\":\"2025-05-26\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.487},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.256},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.103},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.552},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.127},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.008},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.38},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.712},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.49},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.029},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.069},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.871},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.299},{\"date\":\"2025-06-02\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.451},{\"date\":\"2025-06-02\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.451},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.235},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.084},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.529},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.108},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":2.99},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.36},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.687},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.465},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.003},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.037},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.843},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.261},{\"date\":\"2025-06-09\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.471},{\"date\":\"2025-06-09\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.471},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.265},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.117},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.552},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.139},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.023},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.384},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.711},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.496},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.016},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.062},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.877},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.276},{\"date\":\"2025-06-16\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.571},{\"date\":\"2025-06-16\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.571},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"all\",\"price\":3.338},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"conventional\",\"price\":3.196},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"formulation\":\"reformulated\",\"price\":3.614},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"all\",\"price\":3.213},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"conventional\",\"price\":3.102},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"regular\",\"formulation\":\"reformulated\",\"price\":3.449},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"all\",\"price\":3.775},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"conventional\",\"price\":3.568},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"formulation\":\"reformulated\",\"price\":4.069},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"all\",\"price\":4.128},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"conventional\",\"price\":3.95},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"formulation\":\"reformulated\",\"price\":4.333},{\"date\":\"2025-06-23\",\"fuel\":\"diesel\",\"grade\":\"all\",\"formulation\":\"NA\",\"price\":3.775},{\"date\":\"2025-06-23\",\"fuel\":\"diesel\",\"grade\":\"ultra_low_sulfur\",\"formulation\":\"NA\",\"price\":3.775}],\"anchored\":true,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-904593\",\"displayId\":\"fuel-prices\",\"names\":[\"date\",\"fuel\",\"avg_price\"],\"rows\":[{\"date\":\"1990-08-20\",\"fuel\":\"gasoline\",\"avg_price\":1.191},{\"date\":\"1990-08-27\",\"fuel\":\"gasoline\",\"avg_price\":1.245},{\"date\":\"1990-09-03\",\"fuel\":\"gasoline\",\"avg_price\":1.242},{\"date\":\"1990-09-10\",\"fuel\":\"gasoline\",\"avg_price\":1.252},{\"date\":\"1990-09-17\",\"fuel\":\"gasoline\",\"avg_price\":1.266},{\"date\":\"1990-09-24\",\"fuel\":\"gasoline\",\"avg_price\":1.272},{\"date\":\"1990-10-01\",\"fuel\":\"gasoline\",\"avg_price\":1.321},{\"date\":\"1990-10-08\",\"fuel\":\"gasoline\",\"avg_price\":1.333},{\"date\":\"1990-10-15\",\"fuel\":\"gasoline\",\"avg_price\":1.339},{\"date\":\"1990-10-22\",\"fuel\":\"gasoline\",\"avg_price\":1.345},{\"date\":\"1990-10-29\",\"fuel\":\"gasoline\",\"avg_price\":1.339},{\"date\":\"1990-11-05\",\"fuel\":\"gasoline\",\"avg_price\":1.334},{\"date\":\"1990-11-12\",\"fuel\":\"gasoline\",\"avg_price\":1.328},{\"date\":\"1990-11-19\",\"fuel\":\"gasoline\",\"avg_price\":1.323},{\"date\":\"1990-11-26\",\"fuel\":\"gasoline\",\"avg_price\":1.311},{\"date\":\"1990-12-03\",\"fuel\":\"gasoline\",\"avg_price\":1.341},{\"date\":\"1991-01-21\",\"fuel\":\"gasoline\",\"avg_price\":1.192},{\"date\":\"1991-01-28\",\"fuel\":\"gasoline\",\"avg_price\":1.168},{\"date\":\"1991-02-04\",\"fuel\":\"gasoline\",\"avg_price\":1.139},{\"date\":\"1991-02-11\",\"fuel\":\"gasoline\",\"avg_price\":1.106},{\"date\":\"1991-02-18\",\"fuel\":\"gasoline\",\"avg_price\":1.078},{\"date\":\"1991-02-25\",\"fuel\":\"gasoline\",\"avg_price\":1.054},{\"date\":\"1991-03-04\",\"fuel\":\"gasoline\",\"avg_price\":1.025},{\"date\":\"1991-03-11\",\"fuel\":\"gasoline\",\"avg_price\":1.045},{\"date\":\"1991-03-18\",\"fuel\":\"gasoline\",\"avg_price\":1.043},{\"date\":\"1991-03-25\",\"fuel\":\"gasoline\",\"avg_price\":1.047},{\"date\":\"1991-04-01\",\"fuel\":\"gasoline\",\"avg_price\":1.052},{\"date\":\"1991-04-08\",\"fuel\":\"gasoline\",\"avg_price\":1.066},{\"date\":\"1991-04-15\",\"fuel\":\"gasoline\",\"avg_price\":1.069},{\"date\":\"1991-04-22\",\"fuel\":\"gasoline\",\"avg_price\":1.09},{\"date\":\"1991-04-29\",\"fuel\":\"gasoline\",\"avg_price\":1.104},{\"date\":\"1991-05-06\",\"fuel\":\"gasoline\",\"avg_price\":1.113},{\"date\":\"1991-05-13\",\"fuel\":\"gasoline\",\"avg_price\":1.121},{\"date\":\"1991-05-20\",\"fuel\":\"gasoline\",\"avg_price\":1.129},{\"date\":\"1991-05-27\",\"fuel\":\"gasoline\",\"avg_price\":1.14},{\"date\":\"1991-06-03\",\"fuel\":\"gasoline\",\"avg_price\":1.138},{\"date\":\"1991-06-10\",\"fuel\":\"gasoline\",\"avg_price\":1.135},{\"date\":\"1991-06-17\",\"fuel\":\"gasoline\",\"avg_price\":1.126},{\"date\":\"1991-06-24\",\"fuel\":\"gasoline\",\"avg_price\":1.114},{\"date\":\"1991-07-01\",\"fuel\":\"gasoline\",\"avg_price\":1.104},{\"date\":\"1991-07-08\",\"fuel\":\"gasoline\",\"avg_price\":1.098},{\"date\":\"1991-07-15\",\"fuel\":\"gasoline\",\"avg_price\":1.094},{\"date\":\"1991-07-22\",\"fuel\":\"gasoline\",\"avg_price\":1.091},{\"date\":\"1991-07-29\",\"fuel\":\"gasoline\",\"avg_price\":1.091},{\"date\":\"1991-08-05\",\"fuel\":\"gasoline\",\"avg_price\":1.099},{\"date\":\"1991-08-12\",\"fuel\":\"gasoline\",\"avg_price\":1.112},{\"date\":\"1991-08-19\",\"fuel\":\"gasoline\",\"avg_price\":1.124},{\"date\":\"1991-08-26\",\"fuel\":\"gasoline\",\"avg_price\":1.124},{\"date\":\"1991-09-02\",\"fuel\":\"gasoline\",\"avg_price\":1.127},{\"date\":\"1991-09-09\",\"fuel\":\"gasoline\",\"avg_price\":1.12},{\"date\":\"1991-09-16\",\"fuel\":\"gasoline\",\"avg_price\":1.11},{\"date\":\"1991-09-23\",\"fuel\":\"gasoline\",\"avg_price\":1.097},{\"date\":\"1991-09-30\",\"fuel\":\"gasoline\",\"avg_price\":1.092},{\"date\":\"1991-10-07\",\"fuel\":\"gasoline\",\"avg_price\":1.089},{\"date\":\"1991-10-14\",\"fuel\":\"gasoline\",\"avg_price\":1.084},{\"date\":\"1991-10-21\",\"fuel\":\"gasoline\",\"avg_price\":1.088},{\"date\":\"1991-10-28\",\"fuel\":\"gasoline\",\"avg_price\":1.091},{\"date\":\"1991-11-04\",\"fuel\":\"gasoline\",\"avg_price\":1.091},{\"date\":\"1991-11-11\",\"fuel\":\"gasoline\",\"avg_price\":1.102},{\"date\":\"1991-11-18\",\"fuel\":\"gasoline\",\"avg_price\":1.104},{\"date\":\"1991-11-25\",\"fuel\":\"gasoline\",\"avg_price\":1.099},{\"date\":\"1991-12-02\",\"fuel\":\"gasoline\",\"avg_price\":1.099},{\"date\":\"1991-12-09\",\"fuel\":\"gasoline\",\"avg_price\":1.091},{\"date\":\"1991-12-16\",\"fuel\":\"gasoline\",\"avg_price\":1.075},{\"date\":\"1991-12-23\",\"fuel\":\"gasoline\",\"avg_price\":1.063},{\"date\":\"1991-12-30\",\"fuel\":\"gasoline\",\"avg_price\":1.053},{\"date\":\"1992-01-06\",\"fuel\":\"gasoline\",\"avg_price\":1.042},{\"date\":\"1992-01-13\",\"fuel\":\"gasoline\",\"avg_price\":1.026},{\"date\":\"1992-01-20\",\"fuel\":\"gasoline\",\"avg_price\":1.014},{\"date\":\"1992-01-27\",\"fuel\":\"gasoline\",\"avg_price\":1.006},{\"date\":\"1992-02-03\",\"fuel\":\"gasoline\",\"avg_price\":0.995},{\"date\":\"1992-02-10\",\"fuel\":\"gasoline\",\"avg_price\":1.004},{\"date\":\"1992-02-17\",\"fuel\":\"gasoline\",\"avg_price\":1.011},{\"date\":\"1992-02-24\",\"fuel\":\"gasoline\",\"avg_price\":1.014},{\"date\":\"1992-03-02\",\"fuel\":\"gasoline\",\"avg_price\":1.012},{\"date\":\"1992-03-09\",\"fuel\":\"gasoline\",\"avg_price\":1.013},{\"date\":\"1992-03-16\",\"fuel\":\"gasoline\",\"avg_price\":1.01},{\"date\":\"1992-03-23\",\"fuel\":\"gasoline\",\"avg_price\":1.015},{\"date\":\"1992-03-30\",\"fuel\":\"gasoline\",\"avg_price\":1.013},{\"date\":\"1992-04-06\",\"fuel\":\"gasoline\",\"avg_price\":1.026},{\"date\":\"1992-04-13\",\"fuel\":\"gasoline\",\"avg_price\":1.051},{\"date\":\"1992-04-20\",\"fuel\":\"gasoline\",\"avg_price\":1.058},{\"date\":\"1992-04-27\",\"fuel\":\"gasoline\",\"avg_price\":1.072},{\"date\":\"1992-05-04\",\"fuel\":\"gasoline\",\"avg_price\":1.089},{\"date\":\"1992-05-11\",\"fuel\":\"gasoline\",\"avg_price\":1.102},{\"date\":\"1992-05-18\",\"fuel\":\"gasoline\",\"avg_price\":1.118},{\"date\":\"1992-05-25\",\"fuel\":\"gasoline\",\"avg_price\":1.12},{\"date\":\"1992-06-01\",\"fuel\":\"gasoline\",\"avg_price\":1.128},{\"date\":\"1992-06-08\",\"fuel\":\"gasoline\",\"avg_price\":1.143},{\"date\":\"1992-06-15\",\"fuel\":\"gasoline\",\"avg_price\":1.151},{\"date\":\"1992-06-22\",\"fuel\":\"gasoline\",\"avg_price\":1.153},{\"date\":\"1992-06-29\",\"fuel\":\"gasoline\",\"avg_price\":1.149},{\"date\":\"1992-07-06\",\"fuel\":\"gasoline\",\"avg_price\":1.147},{\"date\":\"1992-07-13\",\"fuel\":\"gasoline\",\"avg_price\":1.139},{\"date\":\"1992-07-20\",\"fuel\":\"gasoline\",\"avg_price\":1.132},{\"date\":\"1992-07-27\",\"fuel\":\"gasoline\",\"avg_price\":1.128},{\"date\":\"1992-08-03\",\"fuel\":\"gasoline\",\"avg_price\":1.126},{\"date\":\"1992-08-10\",\"fuel\":\"gasoline\",\"avg_price\":1.123},{\"date\":\"1992-08-17\",\"fuel\":\"gasoline\",\"avg_price\":1.116},{\"date\":\"1992-08-24\",\"fuel\":\"gasoline\",\"avg_price\":1.123},{\"date\":\"1992-08-31\",\"fuel\":\"gasoline\",\"avg_price\":1.121},{\"date\":\"1992-09-07\",\"fuel\":\"gasoline\",\"avg_price\":1.121},{\"date\":\"1992-09-14\",\"fuel\":\"gasoline\",\"avg_price\":1.124},{\"date\":\"1992-09-21\",\"fuel\":\"gasoline\",\"avg_price\":1.123},{\"date\":\"1992-09-28\",\"fuel\":\"gasoline\",\"avg_price\":1.118},{\"date\":\"1992-10-05\",\"fuel\":\"gasoline\",\"avg_price\":1.115},{\"date\":\"1992-10-12\",\"fuel\":\"gasoline\",\"avg_price\":1.115},{\"date\":\"1992-10-19\",\"fuel\":\"gasoline\",\"avg_price\":1.113},{\"date\":\"1992-10-26\",\"fuel\":\"gasoline\",\"avg_price\":1.113},{\"date\":\"1992-11-02\",\"fuel\":\"gasoline\",\"avg_price\":1.12},{\"date\":\"1992-11-09\",\"fuel\":\"gasoline\",\"avg_price\":1.12},{\"date\":\"1992-11-16\",\"fuel\":\"gasoline\",\"avg_price\":1.112},{\"date\":\"1992-11-23\",\"fuel\":\"gasoline\",\"avg_price\":1.106},{\"date\":\"1992-11-30\",\"fuel\":\"gasoline\",\"avg_price\":1.098},{\"date\":\"1992-12-07\",\"fuel\":\"gasoline\",\"avg_price\":1.089},{\"date\":\"1992-12-14\",\"fuel\":\"gasoline\",\"avg_price\":1.078},{\"date\":\"1992-12-21\",\"fuel\":\"gasoline\",\"avg_price\":1.074},{\"date\":\"1992-12-28\",\"fuel\":\"gasoline\",\"avg_price\":1.069},{\"date\":\"1993-01-04\",\"fuel\":\"gasoline\",\"avg_price\":1.065},{\"date\":\"1993-01-11\",\"fuel\":\"gasoline\",\"avg_price\":1.066},{\"date\":\"1993-01-18\",\"fuel\":\"gasoline\",\"avg_price\":1.061},{\"date\":\"1993-01-25\",\"fuel\":\"gasoline\",\"avg_price\":1.055},{\"date\":\"1993-02-01\",\"fuel\":\"gasoline\",\"avg_price\":1.055},{\"date\":\"1993-02-08\",\"fuel\":\"gasoline\",\"avg_price\":1.062},{\"date\":\"1993-02-15\",\"fuel\":\"gasoline\",\"avg_price\":1.053},{\"date\":\"1993-02-22\",\"fuel\":\"gasoline\",\"avg_price\":1.047},{\"date\":\"1993-03-01\",\"fuel\":\"gasoline\",\"avg_price\":1.042},{\"date\":\"1993-03-08\",\"fuel\":\"gasoline\",\"avg_price\":1.048},{\"date\":\"1993-03-15\",\"fuel\":\"gasoline\",\"avg_price\":1.058},{\"date\":\"1993-03-22\",\"fuel\":\"gasoline\",\"avg_price\":1.056},{\"date\":\"1993-03-29\",\"fuel\":\"gasoline\",\"avg_price\":1.057},{\"date\":\"1993-04-05\",\"fuel\":\"gasoline\",\"avg_price\":1.068},{\"date\":\"1993-04-12\",\"fuel\":\"gasoline\",\"avg_price\":1.079},{\"date\":\"1993-04-19\",\"fuel\":\"gasoline\",\"avg_price\":1.079},{\"date\":\"1993-04-26\",\"fuel\":\"gasoline\",\"avg_price\":1.086},{\"date\":\"1993-05-03\",\"fuel\":\"gasoline\",\"avg_price\":1.086},{\"date\":\"1993-05-10\",\"fuel\":\"gasoline\",\"avg_price\":1.097},{\"date\":\"1993-05-17\",\"fuel\":\"gasoline\",\"avg_price\":1.106},{\"date\":\"1993-05-24\",\"fuel\":\"gasoline\",\"avg_price\":1.106},{\"date\":\"1993-05-31\",\"fuel\":\"gasoline\",\"avg_price\":1.107},{\"date\":\"1993-06-07\",\"fuel\":\"gasoline\",\"avg_price\":1.104},{\"date\":\"1993-06-14\",\"fuel\":\"gasoline\",\"avg_price\":1.101},{\"date\":\"1993-06-21\",\"fuel\":\"gasoline\",\"avg_price\":1.095},{\"date\":\"1993-06-28\",\"fuel\":\"gasoline\",\"avg_price\":1.089},{\"date\":\"1993-07-05\",\"fuel\":\"gasoline\",\"avg_price\":1.086},{\"date\":\"1993-07-12\",\"fuel\":\"gasoline\",\"avg_price\":1.081},{\"date\":\"1993-07-19\",\"fuel\":\"gasoline\",\"avg_price\":1.075},{\"date\":\"1993-07-26\",\"fuel\":\"gasoline\",\"avg_price\":1.069},{\"date\":\"1993-08-02\",\"fuel\":\"gasoline\",\"avg_price\":1.062},{\"date\":\"1993-08-09\",\"fuel\":\"gasoline\",\"avg_price\":1.06},{\"date\":\"1993-08-16\",\"fuel\":\"gasoline\",\"avg_price\":1.059},{\"date\":\"1993-08-23\",\"fuel\":\"gasoline\",\"avg_price\":1.065},{\"date\":\"1993-08-30\",\"fuel\":\"gasoline\",\"avg_price\":1.062},{\"date\":\"1993-09-06\",\"fuel\":\"gasoline\",\"avg_price\":1.055},{\"date\":\"1993-09-13\",\"fuel\":\"gasoline\",\"avg_price\":1.051},{\"date\":\"1993-09-20\",\"fuel\":\"gasoline\",\"avg_price\":1.045},{\"date\":\"1993-09-27\",\"fuel\":\"gasoline\",\"avg_price\":1.047},{\"date\":\"1993-10-04\",\"fuel\":\"gasoline\",\"avg_price\":1.092},{\"date\":\"1993-10-11\",\"fuel\":\"gasoline\",\"avg_price\":1.09},{\"date\":\"1993-10-18\",\"fuel\":\"gasoline\",\"avg_price\":1.093},{\"date\":\"1993-10-25\",\"fuel\":\"gasoline\",\"avg_price\":1.092},{\"date\":\"1993-11-01\",\"fuel\":\"gasoline\",\"avg_price\":1.084},{\"date\":\"1993-11-08\",\"fuel\":\"gasoline\",\"avg_price\":1.075},{\"date\":\"1993-11-15\",\"fuel\":\"gasoline\",\"avg_price\":1.064},{\"date\":\"1993-11-22\",\"fuel\":\"gasoline\",\"avg_price\":1.058},{\"date\":\"1993-11-29\",\"fuel\":\"gasoline\",\"avg_price\":1.051},{\"date\":\"1993-12-06\",\"fuel\":\"gasoline\",\"avg_price\":1.036},{\"date\":\"1993-12-13\",\"fuel\":\"gasoline\",\"avg_price\":1.018},{\"date\":\"1993-12-20\",\"fuel\":\"gasoline\",\"avg_price\":1.003},{\"date\":\"1993-12-27\",\"fuel\":\"gasoline\",\"avg_price\":0.999},{\"date\":\"1994-01-03\",\"fuel\":\"gasoline\",\"avg_price\":0.992},{\"date\":\"1994-01-10\",\"fuel\":\"gasoline\",\"avg_price\":0.995},{\"date\":\"1994-01-17\",\"fuel\":\"gasoline\",\"avg_price\":1.001},{\"date\":\"1994-01-24\",\"fuel\":\"gasoline\",\"avg_price\":0.999},{\"date\":\"1994-01-31\",\"fuel\":\"gasoline\",\"avg_price\":1.005},{\"date\":\"1994-02-07\",\"fuel\":\"gasoline\",\"avg_price\":1.007},{\"date\":\"1994-02-14\",\"fuel\":\"gasoline\",\"avg_price\":1.016},{\"date\":\"1994-02-21\",\"fuel\":\"gasoline\",\"avg_price\":1.009},{\"date\":\"1994-02-28\",\"fuel\":\"gasoline\",\"avg_price\":1.004},{\"date\":\"1994-03-07\",\"fuel\":\"gasoline\",\"avg_price\":1.007},{\"date\":\"1994-03-14\",\"fuel\":\"gasoline\",\"avg_price\":1.005},{\"date\":\"1994-03-21\",\"fuel\":\"diesel\",\"avg_price\":1.106},{\"date\":\"1994-03-21\",\"fuel\":\"gasoline\",\"avg_price\":1.007},{\"date\":\"1994-03-28\",\"fuel\":\"diesel\",\"avg_price\":1.107},{\"date\":\"1994-03-28\",\"fuel\":\"gasoline\",\"avg_price\":1.012},{\"date\":\"1994-04-04\",\"fuel\":\"gasoline\",\"avg_price\":1.011},{\"date\":\"1994-04-04\",\"fuel\":\"diesel\",\"avg_price\":1.109},{\"date\":\"1994-04-11\",\"fuel\":\"diesel\",\"avg_price\":1.108},{\"date\":\"1994-04-11\",\"fuel\":\"gasoline\",\"avg_price\":1.028},{\"date\":\"1994-04-18\",\"fuel\":\"diesel\",\"avg_price\":1.105},{\"date\":\"1994-04-18\",\"fuel\":\"gasoline\",\"avg_price\":1.033},{\"date\":\"1994-04-25\",\"fuel\":\"diesel\",\"avg_price\":1.106},{\"date\":\"1994-04-25\",\"fuel\":\"gasoline\",\"avg_price\":1.037},{\"date\":\"1994-05-02\",\"fuel\":\"diesel\",\"avg_price\":1.104},{\"date\":\"1994-05-02\",\"fuel\":\"gasoline\",\"avg_price\":1.04},{\"date\":\"1994-05-09\",\"fuel\":\"diesel\",\"avg_price\":1.101},{\"date\":\"1994-05-09\",\"fuel\":\"gasoline\",\"avg_price\":1.045},{\"date\":\"1994-05-16\",\"fuel\":\"gasoline\",\"avg_price\":1.046},{\"date\":\"1994-05-16\",\"fuel\":\"diesel\",\"avg_price\":1.099},{\"date\":\"1994-05-23\",\"fuel\":\"gasoline\",\"avg_price\":1.05},{\"date\":\"1994-05-23\",\"fuel\":\"diesel\",\"avg_price\":1.099},{\"date\":\"1994-05-30\",\"fuel\":\"diesel\",\"avg_price\":1.098},{\"date\":\"1994-05-30\",\"fuel\":\"gasoline\",\"avg_price\":1.056},{\"date\":\"1994-06-06\",\"fuel\":\"diesel\",\"avg_price\":1.101},{\"date\":\"1994-06-06\",\"fuel\":\"gasoline\",\"avg_price\":1.065},{\"date\":\"1994-06-13\",\"fuel\":\"diesel\",\"avg_price\":1.098},{\"date\":\"1994-06-13\",\"fuel\":\"gasoline\",\"avg_price\":1.073},{\"date\":\"1994-06-20\",\"fuel\":\"diesel\",\"avg_price\":1.103},{\"date\":\"1994-06-20\",\"fuel\":\"gasoline\",\"avg_price\":1.079},{\"date\":\"1994-06-27\",\"fuel\":\"diesel\",\"avg_price\":1.108},{\"date\":\"1994-06-27\",\"fuel\":\"gasoline\",\"avg_price\":1.095},{\"date\":\"1994-07-04\",\"fuel\":\"diesel\",\"avg_price\":1.109},{\"date\":\"1994-07-04\",\"fuel\":\"gasoline\",\"avg_price\":1.097},{\"date\":\"1994-07-11\",\"fuel\":\"gasoline\",\"avg_price\":1.103},{\"date\":\"1994-07-11\",\"fuel\":\"diesel\",\"avg_price\":1.11},{\"date\":\"1994-07-18\",\"fuel\":\"diesel\",\"avg_price\":1.111},{\"date\":\"1994-07-18\",\"fuel\":\"gasoline\",\"avg_price\":1.109},{\"date\":\"1994-07-25\",\"fuel\":\"diesel\",\"avg_price\":1.111},{\"date\":\"1994-07-25\",\"fuel\":\"gasoline\",\"avg_price\":1.114},{\"date\":\"1994-08-01\",\"fuel\":\"diesel\",\"avg_price\":1.116},{\"date\":\"1994-08-01\",\"fuel\":\"gasoline\",\"avg_price\":1.13},{\"date\":\"1994-08-08\",\"fuel\":\"diesel\",\"avg_price\":1.127},{\"date\":\"1994-08-08\",\"fuel\":\"gasoline\",\"avg_price\":1.157},{\"date\":\"1994-08-15\",\"fuel\":\"diesel\",\"avg_price\":1.127},{\"date\":\"1994-08-15\",\"fuel\":\"gasoline\",\"avg_price\":1.161},{\"date\":\"1994-08-22\",\"fuel\":\"gasoline\",\"avg_price\":1.165},{\"date\":\"1994-08-22\",\"fuel\":\"diesel\",\"avg_price\":1.124},{\"date\":\"1994-08-29\",\"fuel\":\"diesel\",\"avg_price\":1.122},{\"date\":\"1994-08-29\",\"fuel\":\"gasoline\",\"avg_price\":1.161},{\"date\":\"1994-09-05\",\"fuel\":\"diesel\",\"avg_price\":1.126},{\"date\":\"1994-09-05\",\"fuel\":\"gasoline\",\"avg_price\":1.156},{\"date\":\"1994-09-12\",\"fuel\":\"diesel\",\"avg_price\":1.128},{\"date\":\"1994-09-12\",\"fuel\":\"gasoline\",\"avg_price\":1.15},{\"date\":\"1994-09-19\",\"fuel\":\"diesel\",\"avg_price\":1.126},{\"date\":\"1994-09-19\",\"fuel\":\"gasoline\",\"avg_price\":1.14},{\"date\":\"1994-09-26\",\"fuel\":\"diesel\",\"avg_price\":1.12},{\"date\":\"1994-09-26\",\"fuel\":\"gasoline\",\"avg_price\":1.129},{\"date\":\"1994-10-03\",\"fuel\":\"diesel\",\"avg_price\":1.118},{\"date\":\"1994-10-03\",\"fuel\":\"gasoline\",\"avg_price\":1.12},{\"date\":\"1994-10-10\",\"fuel\":\"gasoline\",\"avg_price\":1.114},{\"date\":\"1994-10-10\",\"fuel\":\"diesel\",\"avg_price\":1.117},{\"date\":\"1994-10-17\",\"fuel\":\"diesel\",\"avg_price\":1.119},{\"date\":\"1994-10-17\",\"fuel\":\"gasoline\",\"avg_price\":1.106},{\"date\":\"1994-10-24\",\"fuel\":\"diesel\",\"avg_price\":1.122},{\"date\":\"1994-10-24\",\"fuel\":\"gasoline\",\"avg_price\":1.107},{\"date\":\"1994-10-31\",\"fuel\":\"diesel\",\"avg_price\":1.133},{\"date\":\"1994-10-31\",\"fuel\":\"gasoline\",\"avg_price\":1.121},{\"date\":\"1994-11-07\",\"fuel\":\"diesel\",\"avg_price\":1.133},{\"date\":\"1994-11-07\",\"fuel\":\"gasoline\",\"avg_price\":1.123},{\"date\":\"1994-11-14\",\"fuel\":\"diesel\",\"avg_price\":1.135},{\"date\":\"1994-11-14\",\"fuel\":\"gasoline\",\"avg_price\":1.122},{\"date\":\"1994-11-21\",\"fuel\":\"gasoline\",\"avg_price\":1.113},{\"date\":\"1994-11-21\",\"fuel\":\"diesel\",\"avg_price\":1.13},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"avg_price\":1.2025833333},{\"date\":\"1994-11-28\",\"fuel\":\"diesel\",\"avg_price\":1.126},{\"date\":\"1994-12-05\",\"fuel\":\"diesel\",\"avg_price\":1.123},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"avg_price\":1.2031666667},{\"date\":\"1994-12-12\",\"fuel\":\"diesel\",\"avg_price\":1.114},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"avg_price\":1.19275},{\"date\":\"1994-12-19\",\"fuel\":\"diesel\",\"avg_price\":1.109},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"avg_price\":1.1849166667},{\"date\":\"1994-12-26\",\"fuel\":\"diesel\",\"avg_price\":1.106},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"avg_price\":1.1778333333},{\"date\":\"1995-01-02\",\"fuel\":\"diesel\",\"avg_price\":1.104},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"avg_price\":1.1921666667},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"avg_price\":1.1970833333},{\"date\":\"1995-01-09\",\"fuel\":\"diesel\",\"avg_price\":1.102},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"avg_price\":1.19125},{\"date\":\"1995-01-16\",\"fuel\":\"diesel\",\"avg_price\":1.1},{\"date\":\"1995-01-23\",\"fuel\":\"diesel\",\"avg_price\":1.095},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"avg_price\":1.1944166667},{\"date\":\"1995-01-30\",\"fuel\":\"diesel\",\"avg_price\":1.09},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"avg_price\":1.192},{\"date\":\"1995-02-06\",\"fuel\":\"diesel\",\"avg_price\":1.086},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"avg_price\":1.187},{\"date\":\"1995-02-13\",\"fuel\":\"diesel\",\"avg_price\":1.088},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"avg_price\":1.1839166667},{\"date\":\"1995-02-20\",\"fuel\":\"diesel\",\"avg_price\":1.088},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"avg_price\":1.1785},{\"date\":\"1995-02-27\",\"fuel\":\"diesel\",\"avg_price\":1.089},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"avg_price\":1.182},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"avg_price\":1.18225},{\"date\":\"1995-03-06\",\"fuel\":\"diesel\",\"avg_price\":1.089},{\"date\":\"1995-03-13\",\"fuel\":\"diesel\",\"avg_price\":1.088},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"avg_price\":1.17525},{\"date\":\"1995-03-20\",\"fuel\":\"diesel\",\"avg_price\":1.085},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"avg_price\":1.174},{\"date\":\"1995-03-27\",\"fuel\":\"diesel\",\"avg_price\":1.088},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"avg_price\":1.1771666667},{\"date\":\"1995-04-03\",\"fuel\":\"diesel\",\"avg_price\":1.094},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"avg_price\":1.1860833333},{\"date\":\"1995-04-10\",\"fuel\":\"diesel\",\"avg_price\":1.101},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"avg_price\":1.2000833333},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"avg_price\":1.2124166667},{\"date\":\"1995-04-17\",\"fuel\":\"diesel\",\"avg_price\":1.106},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"avg_price\":1.2325833333},{\"date\":\"1995-04-24\",\"fuel\":\"diesel\",\"avg_price\":1.115},{\"date\":\"1995-05-01\",\"fuel\":\"diesel\",\"avg_price\":1.119},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"avg_price\":1.24275},{\"date\":\"1995-05-08\",\"fuel\":\"diesel\",\"avg_price\":1.126},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"avg_price\":1.2643333333},{\"date\":\"1995-05-15\",\"fuel\":\"diesel\",\"avg_price\":1.126},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"avg_price\":1.274},{\"date\":\"1995-05-22\",\"fuel\":\"diesel\",\"avg_price\":1.124},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"avg_price\":1.2905833333},{\"date\":\"1995-05-29\",\"fuel\":\"diesel\",\"avg_price\":1.13},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"avg_price\":1.29425},{\"date\":\"1995-06-05\",\"fuel\":\"diesel\",\"avg_price\":1.124},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"avg_price\":1.2939166667},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"avg_price\":1.2913333333},{\"date\":\"1995-06-12\",\"fuel\":\"diesel\",\"avg_price\":1.122},{\"date\":\"1995-06-19\",\"fuel\":\"diesel\",\"avg_price\":1.117},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"avg_price\":1.28575},{\"date\":\"1995-06-26\",\"fuel\":\"diesel\",\"avg_price\":1.112},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"avg_price\":1.2798333333},{\"date\":\"1995-07-03\",\"fuel\":\"diesel\",\"avg_price\":1.106},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"avg_price\":1.2730833333},{\"date\":\"1995-07-10\",\"fuel\":\"diesel\",\"avg_price\":1.103},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"avg_price\":1.2644166667},{\"date\":\"1995-07-17\",\"fuel\":\"diesel\",\"avg_price\":1.099},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"avg_price\":1.2545833333},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"avg_price\":1.2445833333},{\"date\":\"1995-07-24\",\"fuel\":\"diesel\",\"avg_price\":1.098},{\"date\":\"1995-07-31\",\"fuel\":\"diesel\",\"avg_price\":1.093},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"avg_price\":1.2321666667},{\"date\":\"1995-08-07\",\"fuel\":\"diesel\",\"avg_price\":1.099},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"avg_price\":1.2270833333},{\"date\":\"1995-08-14\",\"fuel\":\"diesel\",\"avg_price\":1.106},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"avg_price\":1.2228333333},{\"date\":\"1995-08-21\",\"fuel\":\"diesel\",\"avg_price\":1.106},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"avg_price\":1.2206666667},{\"date\":\"1995-08-28\",\"fuel\":\"diesel\",\"avg_price\":1.109},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"avg_price\":1.21325},{\"date\":\"1995-09-04\",\"fuel\":\"diesel\",\"avg_price\":1.115},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"avg_price\":1.2110833333},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"avg_price\":1.2075833333},{\"date\":\"1995-09-11\",\"fuel\":\"diesel\",\"avg_price\":1.119},{\"date\":\"1995-09-18\",\"fuel\":\"diesel\",\"avg_price\":1.122},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"avg_price\":1.2063333333},{\"date\":\"1995-09-25\",\"fuel\":\"diesel\",\"avg_price\":1.121},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"avg_price\":1.2041666667},{\"date\":\"1995-10-02\",\"fuel\":\"diesel\",\"avg_price\":1.117},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"avg_price\":1.2005833333},{\"date\":\"1995-10-09\",\"fuel\":\"diesel\",\"avg_price\":1.117},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"avg_price\":1.1949166667},{\"date\":\"1995-10-16\",\"fuel\":\"diesel\",\"avg_price\":1.117},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"avg_price\":1.1870833333},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"avg_price\":1.1790833333},{\"date\":\"1995-10-23\",\"fuel\":\"diesel\",\"avg_price\":1.114},{\"date\":\"1995-10-30\",\"fuel\":\"diesel\",\"avg_price\":1.11},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"avg_price\":1.1693333333},{\"date\":\"1995-11-06\",\"fuel\":\"diesel\",\"avg_price\":1.118},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"avg_price\":1.16475},{\"date\":\"1995-11-13\",\"fuel\":\"diesel\",\"avg_price\":1.118},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"avg_price\":1.1621666667},{\"date\":\"1995-11-20\",\"fuel\":\"diesel\",\"avg_price\":1.119},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"avg_price\":1.158},{\"date\":\"1995-11-27\",\"fuel\":\"diesel\",\"avg_price\":1.124},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"avg_price\":1.1574166667},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"avg_price\":1.1586666667},{\"date\":\"1995-12-04\",\"fuel\":\"diesel\",\"avg_price\":1.123},{\"date\":\"1995-12-11\",\"fuel\":\"diesel\",\"avg_price\":1.124},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"avg_price\":1.1598333333},{\"date\":\"1995-12-18\",\"fuel\":\"diesel\",\"avg_price\":1.13},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"avg_price\":1.1716666667},{\"date\":\"1995-12-25\",\"fuel\":\"diesel\",\"avg_price\":1.141},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"avg_price\":1.1763333333},{\"date\":\"1996-01-01\",\"fuel\":\"diesel\",\"avg_price\":1.148},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"avg_price\":1.178},{\"date\":\"1996-01-08\",\"fuel\":\"diesel\",\"avg_price\":1.146},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"avg_price\":1.1848333333},{\"date\":\"1996-01-15\",\"fuel\":\"diesel\",\"avg_price\":1.152},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"avg_price\":1.1918333333},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"avg_price\":1.18725},{\"date\":\"1996-01-22\",\"fuel\":\"diesel\",\"avg_price\":1.144},{\"date\":\"1996-01-29\",\"fuel\":\"diesel\",\"avg_price\":1.136},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"avg_price\":1.18275},{\"date\":\"1996-02-05\",\"fuel\":\"diesel\",\"avg_price\":1.13},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"avg_price\":1.1796666667},{\"date\":\"1996-02-12\",\"fuel\":\"diesel\",\"avg_price\":1.134},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"avg_price\":1.1765833333},{\"date\":\"1996-02-19\",\"fuel\":\"diesel\",\"avg_price\":1.151},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"avg_price\":1.1820833333},{\"date\":\"1996-02-26\",\"fuel\":\"diesel\",\"avg_price\":1.164},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"avg_price\":1.20075},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"avg_price\":1.216},{\"date\":\"1996-03-04\",\"fuel\":\"diesel\",\"avg_price\":1.175},{\"date\":\"1996-03-11\",\"fuel\":\"diesel\",\"avg_price\":1.173},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"avg_price\":1.2185},{\"date\":\"1996-03-18\",\"fuel\":\"diesel\",\"avg_price\":1.172},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"avg_price\":1.2275833333},{\"date\":\"1996-03-25\",\"fuel\":\"diesel\",\"avg_price\":1.21},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"avg_price\":1.2536666667},{\"date\":\"1996-04-01\",\"fuel\":\"diesel\",\"avg_price\":1.222},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"avg_price\":1.2685833333},{\"date\":\"1996-04-08\",\"fuel\":\"diesel\",\"avg_price\":1.249},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"avg_price\":1.2933333333},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"avg_price\":1.3344166667},{\"date\":\"1996-04-15\",\"fuel\":\"diesel\",\"avg_price\":1.305},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"avg_price\":1.35825},{\"date\":\"1996-04-22\",\"fuel\":\"diesel\",\"avg_price\":1.304},{\"date\":\"1996-04-29\",\"fuel\":\"diesel\",\"avg_price\":1.285},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"avg_price\":1.3765833333},{\"date\":\"1996-05-06\",\"fuel\":\"diesel\",\"avg_price\":1.292},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"avg_price\":1.3811666667},{\"date\":\"1996-05-13\",\"fuel\":\"diesel\",\"avg_price\":1.285},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"avg_price\":1.38375},{\"date\":\"1996-05-20\",\"fuel\":\"diesel\",\"avg_price\":1.274},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"avg_price\":1.3891666667},{\"date\":\"1996-05-27\",\"fuel\":\"diesel\",\"avg_price\":1.254},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"avg_price\":1.37975},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"avg_price\":1.3785833333},{\"date\":\"1996-06-03\",\"fuel\":\"diesel\",\"avg_price\":1.24},{\"date\":\"1996-06-10\",\"fuel\":\"diesel\",\"avg_price\":1.215},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"avg_price\":1.36975},{\"date\":\"1996-06-17\",\"fuel\":\"diesel\",\"avg_price\":1.193},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"avg_price\":1.3625},{\"date\":\"1996-06-24\",\"fuel\":\"diesel\",\"avg_price\":1.179},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"avg_price\":1.3511666667},{\"date\":\"1996-07-01\",\"fuel\":\"diesel\",\"avg_price\":1.172},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"avg_price\":1.34025},{\"date\":\"1996-07-08\",\"fuel\":\"diesel\",\"avg_price\":1.173},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"avg_price\":1.3360833333},{\"date\":\"1996-07-15\",\"fuel\":\"diesel\",\"avg_price\":1.178},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"avg_price\":1.332},{\"date\":\"1996-07-22\",\"fuel\":\"diesel\",\"avg_price\":1.184},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"avg_price\":1.3288333333},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"avg_price\":1.3199166667},{\"date\":\"1996-07-29\",\"fuel\":\"diesel\",\"avg_price\":1.178},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"avg_price\":1.30975},{\"date\":\"1996-08-05\",\"fuel\":\"diesel\",\"avg_price\":1.184},{\"date\":\"1996-08-12\",\"fuel\":\"diesel\",\"avg_price\":1.191},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"avg_price\":1.3026666667},{\"date\":\"1996-08-19\",\"fuel\":\"diesel\",\"avg_price\":1.206},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"avg_price\":1.3000833333},{\"date\":\"1996-08-26\",\"fuel\":\"diesel\",\"avg_price\":1.222},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"avg_price\":1.3024166667},{\"date\":\"1996-09-02\",\"fuel\":\"diesel\",\"avg_price\":1.231},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"avg_price\":1.2905},{\"date\":\"1996-09-09\",\"fuel\":\"diesel\",\"avg_price\":1.25},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"avg_price\":1.2938333333},{\"date\":\"1996-09-16\",\"fuel\":\"diesel\",\"avg_price\":1.276},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"avg_price\":1.2966666667},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"avg_price\":1.29675},{\"date\":\"1996-09-23\",\"fuel\":\"diesel\",\"avg_price\":1.277},{\"date\":\"1996-09-30\",\"fuel\":\"diesel\",\"avg_price\":1.289},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"avg_price\":1.2916666667},{\"date\":\"1996-10-07\",\"fuel\":\"diesel\",\"avg_price\":1.308},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"avg_price\":1.2855},{\"date\":\"1996-10-14\",\"fuel\":\"diesel\",\"avg_price\":1.326},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"avg_price\":1.2918333333},{\"date\":\"1996-10-21\",\"fuel\":\"diesel\",\"avg_price\":1.329},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"avg_price\":1.2916666667},{\"date\":\"1996-10-28\",\"fuel\":\"diesel\",\"avg_price\":1.329},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"avg_price\":1.2986666667},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"avg_price\":1.3048333333},{\"date\":\"1996-11-04\",\"fuel\":\"diesel\",\"avg_price\":1.323},{\"date\":\"1996-11-11\",\"fuel\":\"diesel\",\"avg_price\":1.316},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"avg_price\":1.3065833333},{\"date\":\"1996-11-18\",\"fuel\":\"diesel\",\"avg_price\":1.324},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"avg_price\":1.31575},{\"date\":\"1996-11-25\",\"fuel\":\"diesel\",\"avg_price\":1.327},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"avg_price\":1.32175},{\"date\":\"1996-12-02\",\"fuel\":\"diesel\",\"avg_price\":1.323},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"avg_price\":1.3219166667},{\"date\":\"1996-12-09\",\"fuel\":\"diesel\",\"avg_price\":1.32},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"avg_price\":1.32275},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"avg_price\":1.32075},{\"date\":\"1996-12-16\",\"fuel\":\"diesel\",\"avg_price\":1.307},{\"date\":\"1996-12-23\",\"fuel\":\"diesel\",\"avg_price\":1.3},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"avg_price\":1.3175},{\"date\":\"1996-12-30\",\"fuel\":\"diesel\",\"avg_price\":1.295},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"avg_price\":1.3154166667},{\"date\":\"1997-01-06\",\"fuel\":\"diesel\",\"avg_price\":1.291},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"avg_price\":1.31525},{\"date\":\"1997-01-13\",\"fuel\":\"diesel\",\"avg_price\":1.296},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"avg_price\":1.3293333333},{\"date\":\"1997-01-20\",\"fuel\":\"diesel\",\"avg_price\":1.293},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"avg_price\":1.3296666667},{\"date\":\"1997-01-27\",\"fuel\":\"diesel\",\"avg_price\":1.283},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"avg_price\":1.3268333333},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"avg_price\":1.3263333333},{\"date\":\"1997-02-03\",\"fuel\":\"diesel\",\"avg_price\":1.288},{\"date\":\"1997-02-10\",\"fuel\":\"diesel\",\"avg_price\":1.285},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"avg_price\":1.3243333333},{\"date\":\"1997-02-17\",\"fuel\":\"diesel\",\"avg_price\":1.278},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"avg_price\":1.3195},{\"date\":\"1997-02-24\",\"fuel\":\"diesel\",\"avg_price\":1.269},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"avg_price\":1.3165833333},{\"date\":\"1997-03-03\",\"fuel\":\"diesel\",\"avg_price\":1.252},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"avg_price\":1.30825},{\"date\":\"1997-03-10\",\"fuel\":\"diesel\",\"avg_price\":1.23},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"avg_price\":1.3035833333},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"avg_price\":1.2974166667},{\"date\":\"1997-03-17\",\"fuel\":\"diesel\",\"avg_price\":1.22},{\"date\":\"1997-03-24\",\"fuel\":\"diesel\",\"avg_price\":1.22},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"avg_price\":1.2995833333},{\"date\":\"1997-03-31\",\"fuel\":\"diesel\",\"avg_price\":1.225},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"avg_price\":1.2985833333},{\"date\":\"1997-04-07\",\"fuel\":\"diesel\",\"avg_price\":1.217},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"avg_price\":1.3015833333},{\"date\":\"1997-04-14\",\"fuel\":\"diesel\",\"avg_price\":1.216},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"avg_price\":1.2985833333},{\"date\":\"1997-04-21\",\"fuel\":\"diesel\",\"avg_price\":1.211},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"avg_price\":1.2971666667},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"avg_price\":1.2928333333},{\"date\":\"1997-04-28\",\"fuel\":\"diesel\",\"avg_price\":1.205},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"avg_price\":1.2909166667},{\"date\":\"1997-05-05\",\"fuel\":\"diesel\",\"avg_price\":1.205},{\"date\":\"1997-05-12\",\"fuel\":\"diesel\",\"avg_price\":1.191},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"avg_price\":1.2889166667},{\"date\":\"1997-05-19\",\"fuel\":\"diesel\",\"avg_price\":1.191},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"avg_price\":1.2956666667},{\"date\":\"1997-05-26\",\"fuel\":\"diesel\",\"avg_price\":1.196},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"avg_price\":1.3023333333},{\"date\":\"1997-06-02\",\"fuel\":\"diesel\",\"avg_price\":1.19},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"avg_price\":1.3034166667},{\"date\":\"1997-06-09\",\"fuel\":\"diesel\",\"avg_price\":1.187},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"avg_price\":1.298},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"avg_price\":1.2903333333},{\"date\":\"1997-06-16\",\"fuel\":\"diesel\",\"avg_price\":1.172},{\"date\":\"1997-06-23\",\"fuel\":\"diesel\",\"avg_price\":1.162},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"avg_price\":1.2814166667},{\"date\":\"1997-06-30\",\"fuel\":\"diesel\",\"avg_price\":1.153},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"avg_price\":1.2731666667},{\"date\":\"1997-07-07\",\"fuel\":\"diesel\",\"avg_price\":1.159},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"avg_price\":1.26925},{\"date\":\"1997-07-14\",\"fuel\":\"diesel\",\"avg_price\":1.152},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"avg_price\":1.26475},{\"date\":\"1997-07-21\",\"fuel\":\"diesel\",\"avg_price\":1.147},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"avg_price\":1.26675},{\"date\":\"1997-07-28\",\"fuel\":\"diesel\",\"avg_price\":1.145},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"avg_price\":1.2615833333},{\"date\":\"1997-08-04\",\"fuel\":\"diesel\",\"avg_price\":1.155},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"avg_price\":1.282},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"avg_price\":1.3171666667},{\"date\":\"1997-08-11\",\"fuel\":\"diesel\",\"avg_price\":1.168},{\"date\":\"1997-08-18\",\"fuel\":\"diesel\",\"avg_price\":1.167},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"avg_price\":1.3226666667},{\"date\":\"1997-08-25\",\"fuel\":\"diesel\",\"avg_price\":1.169},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"avg_price\":1.3403333333},{\"date\":\"1997-09-01\",\"fuel\":\"diesel\",\"avg_price\":1.165},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"avg_price\":1.3423333333},{\"date\":\"1997-09-08\",\"fuel\":\"diesel\",\"avg_price\":1.163},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"avg_price\":1.3435833333},{\"date\":\"1997-09-15\",\"fuel\":\"diesel\",\"avg_price\":1.156},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"avg_price\":1.3390833333},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"avg_price\":1.3289166667},{\"date\":\"1997-09-22\",\"fuel\":\"diesel\",\"avg_price\":1.154},{\"date\":\"1997-09-29\",\"fuel\":\"diesel\",\"avg_price\":1.16},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"avg_price\":1.3160833333},{\"date\":\"1997-10-06\",\"fuel\":\"diesel\",\"avg_price\":1.175},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"avg_price\":1.3143333333},{\"date\":\"1997-10-13\",\"fuel\":\"diesel\",\"avg_price\":1.185},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"avg_price\":1.3075},{\"date\":\"1997-10-20\",\"fuel\":\"diesel\",\"avg_price\":1.185},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"avg_price\":1.2989166667},{\"date\":\"1997-10-27\",\"fuel\":\"diesel\",\"avg_price\":1.185},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"avg_price\":1.2889166667},{\"date\":\"1997-11-03\",\"fuel\":\"diesel\",\"avg_price\":1.188},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"avg_price\":1.2814166667},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"avg_price\":1.2804166667},{\"date\":\"1997-11-10\",\"fuel\":\"diesel\",\"avg_price\":1.19},{\"date\":\"1997-11-17\",\"fuel\":\"diesel\",\"avg_price\":1.195},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"avg_price\":1.27175},{\"date\":\"1997-11-24\",\"fuel\":\"diesel\",\"avg_price\":1.193},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"avg_price\":1.2656666667},{\"date\":\"1997-12-01\",\"fuel\":\"diesel\",\"avg_price\":1.189},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"avg_price\":1.2570833333},{\"date\":\"1997-12-08\",\"fuel\":\"diesel\",\"avg_price\":1.174},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"avg_price\":1.2458333333},{\"date\":\"1997-12-15\",\"fuel\":\"diesel\",\"avg_price\":1.162},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"avg_price\":1.2355833333},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"avg_price\":1.2255},{\"date\":\"1997-12-22\",\"fuel\":\"diesel\",\"avg_price\":1.155},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"avg_price\":1.2175833333},{\"date\":\"1997-12-29\",\"fuel\":\"diesel\",\"avg_price\":1.15},{\"date\":\"1998-01-05\",\"fuel\":\"diesel\",\"avg_price\":1.147},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"avg_price\":1.2095},{\"date\":\"1998-01-12\",\"fuel\":\"diesel\",\"avg_price\":1.126},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"avg_price\":1.1999166667},{\"date\":\"1998-01-19\",\"fuel\":\"diesel\",\"avg_price\":1.109},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"avg_price\":1.1858333333},{\"date\":\"1998-01-26\",\"fuel\":\"diesel\",\"avg_price\":1.096},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"avg_price\":1.1703333333},{\"date\":\"1998-02-02\",\"fuel\":\"diesel\",\"avg_price\":1.091},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"avg_price\":1.1635833333},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"avg_price\":1.1553333333},{\"date\":\"1998-02-09\",\"fuel\":\"diesel\",\"avg_price\":1.085},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"avg_price\":1.1394166667},{\"date\":\"1998-02-16\",\"fuel\":\"diesel\",\"avg_price\":1.082},{\"date\":\"1998-02-23\",\"fuel\":\"diesel\",\"avg_price\":1.079},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"avg_price\":1.1393333333},{\"date\":\"1998-03-02\",\"fuel\":\"diesel\",\"avg_price\":1.074},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"avg_price\":1.1236666667},{\"date\":\"1998-03-09\",\"fuel\":\"diesel\",\"avg_price\":1.066},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"avg_price\":1.1116666667},{\"date\":\"1998-03-16\",\"fuel\":\"diesel\",\"avg_price\":1.057},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"avg_price\":1.1015},{\"date\":\"1998-03-23\",\"fuel\":\"diesel\",\"avg_price\":1.049},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"avg_price\":1.093},{\"date\":\"1998-03-30\",\"fuel\":\"diesel\",\"avg_price\":1.068},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"avg_price\":1.1211666667},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"avg_price\":1.1190833333},{\"date\":\"1998-04-06\",\"fuel\":\"diesel\",\"avg_price\":1.067},{\"date\":\"1998-04-13\",\"fuel\":\"diesel\",\"avg_price\":1.065},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"avg_price\":1.1186666667},{\"date\":\"1998-04-20\",\"fuel\":\"diesel\",\"avg_price\":1.065},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"avg_price\":1.1206666667},{\"date\":\"1998-04-27\",\"fuel\":\"diesel\",\"avg_price\":1.07},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"avg_price\":1.1316666667},{\"date\":\"1998-05-04\",\"fuel\":\"diesel\",\"avg_price\":1.072},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"avg_price\":1.1455},{\"date\":\"1998-05-11\",\"fuel\":\"diesel\",\"avg_price\":1.075},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"avg_price\":1.1580833333},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"avg_price\":1.1619166667},{\"date\":\"1998-05-18\",\"fuel\":\"diesel\",\"avg_price\":1.069},{\"date\":\"1998-05-25\",\"fuel\":\"diesel\",\"avg_price\":1.06},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"avg_price\":1.1605833333},{\"date\":\"1998-06-01\",\"fuel\":\"diesel\",\"avg_price\":1.053},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"avg_price\":1.1571666667},{\"date\":\"1998-06-08\",\"fuel\":\"diesel\",\"avg_price\":1.045},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"avg_price\":1.1628333333},{\"date\":\"1998-06-15\",\"fuel\":\"diesel\",\"avg_price\":1.04},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"avg_price\":1.1561666667},{\"date\":\"1998-06-22\",\"fuel\":\"diesel\",\"avg_price\":1.033},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"avg_price\":1.15},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"avg_price\":1.1484166667},{\"date\":\"1998-06-29\",\"fuel\":\"diesel\",\"avg_price\":1.034},{\"date\":\"1998-07-06\",\"fuel\":\"diesel\",\"avg_price\":1.036},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"avg_price\":1.1486666667},{\"date\":\"1998-07-13\",\"fuel\":\"diesel\",\"avg_price\":1.031},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"avg_price\":1.1450833333},{\"date\":\"1998-07-20\",\"fuel\":\"diesel\",\"avg_price\":1.027},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"avg_price\":1.1476666667},{\"date\":\"1998-07-27\",\"fuel\":\"diesel\",\"avg_price\":1.02},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"avg_price\":1.1401666667},{\"date\":\"1998-08-03\",\"fuel\":\"diesel\",\"avg_price\":1.016},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"avg_price\":1.1303333333},{\"date\":\"1998-08-10\",\"fuel\":\"diesel\",\"avg_price\":1.01},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"avg_price\":1.1250833333},{\"date\":\"1998-08-17\",\"fuel\":\"diesel\",\"avg_price\":1.007},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"avg_price\":1.1194166667},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"avg_price\":1.11275},{\"date\":\"1998-08-24\",\"fuel\":\"diesel\",\"avg_price\":1.004},{\"date\":\"1998-08-31\",\"fuel\":\"diesel\",\"avg_price\":1},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"avg_price\":1.107},{\"date\":\"1998-09-07\",\"fuel\":\"diesel\",\"avg_price\":1.009},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"avg_price\":1.1015},{\"date\":\"1998-09-14\",\"fuel\":\"diesel\",\"avg_price\":1.019},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"avg_price\":1.09725},{\"date\":\"1998-09-21\",\"fuel\":\"diesel\",\"avg_price\":1.03},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"avg_price\":1.1071666667},{\"date\":\"1998-09-28\",\"fuel\":\"diesel\",\"avg_price\":1.039},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"avg_price\":1.1075833333},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"avg_price\":1.1115},{\"date\":\"1998-10-05\",\"fuel\":\"diesel\",\"avg_price\":1.041},{\"date\":\"1998-10-12\",\"fuel\":\"diesel\",\"avg_price\":1.041},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"avg_price\":1.1158333333},{\"date\":\"1998-10-19\",\"fuel\":\"diesel\",\"avg_price\":1.036},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"avg_price\":1.1113333333},{\"date\":\"1998-10-26\",\"fuel\":\"diesel\",\"avg_price\":1.036},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"avg_price\":1.1086666667},{\"date\":\"1998-11-02\",\"fuel\":\"diesel\",\"avg_price\":1.035},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"avg_price\":1.1045},{\"date\":\"1998-11-09\",\"fuel\":\"diesel\",\"avg_price\":1.034},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"avg_price\":1.1028333333},{\"date\":\"1998-11-16\",\"fuel\":\"diesel\",\"avg_price\":1.026},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"avg_price\":1.0931666667},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"avg_price\":1.0886666667},{\"date\":\"1998-11-23\",\"fuel\":\"diesel\",\"avg_price\":1.012},{\"date\":\"1998-11-30\",\"fuel\":\"diesel\",\"avg_price\":1.004},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"avg_price\":1.0763333333},{\"date\":\"1998-12-07\",\"fuel\":\"diesel\",\"avg_price\":0.986},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"avg_price\":1.0594166667},{\"date\":\"1998-12-14\",\"fuel\":\"diesel\",\"avg_price\":0.972},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"avg_price\":1.05125},{\"date\":\"1998-12-21\",\"fuel\":\"diesel\",\"avg_price\":0.968},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"avg_price\":1.049},{\"date\":\"1998-12-28\",\"fuel\":\"diesel\",\"avg_price\":0.966},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"avg_price\":1.043},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"avg_price\":1.0405833333},{\"date\":\"1999-01-04\",\"fuel\":\"diesel\",\"avg_price\":0.965},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"avg_price\":1.0429166667},{\"date\":\"1999-01-11\",\"fuel\":\"diesel\",\"avg_price\":0.967},{\"date\":\"1999-01-18\",\"fuel\":\"diesel\",\"avg_price\":0.97},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"avg_price\":1.0458333333},{\"date\":\"1999-01-25\",\"fuel\":\"diesel\",\"avg_price\":0.964},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"avg_price\":1.0391666667},{\"date\":\"1999-02-01\",\"fuel\":\"diesel\",\"avg_price\":0.962},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"avg_price\":1.0320833333},{\"date\":\"1999-02-08\",\"fuel\":\"diesel\",\"avg_price\":0.962},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"avg_price\":1.02875},{\"date\":\"1999-02-15\",\"fuel\":\"diesel\",\"avg_price\":0.959},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"avg_price\":1.0210833333},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"avg_price\":1.012},{\"date\":\"1999-02-22\",\"fuel\":\"diesel\",\"avg_price\":0.953},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"avg_price\":1.0169166667},{\"date\":\"1999-03-01\",\"fuel\":\"diesel\",\"avg_price\":0.956},{\"date\":\"1999-03-08\",\"fuel\":\"diesel\",\"avg_price\":0.964},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"avg_price\":1.0249166667},{\"date\":\"1999-03-15\",\"fuel\":\"diesel\",\"avg_price\":1},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"avg_price\":1.0733333333},{\"date\":\"1999-03-22\",\"fuel\":\"diesel\",\"avg_price\":1.018},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"avg_price\":1.1114166667},{\"date\":\"1999-03-29\",\"fuel\":\"diesel\",\"avg_price\":1.046},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"avg_price\":1.1826666667},{\"date\":\"1999-04-05\",\"fuel\":\"diesel\",\"avg_price\":1.075},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"avg_price\":1.22625},{\"date\":\"1999-04-12\",\"fuel\":\"diesel\",\"avg_price\":1.084},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"avg_price\":1.2495},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"avg_price\":1.2458333333},{\"date\":\"1999-04-19\",\"fuel\":\"diesel\",\"avg_price\":1.08},{\"date\":\"1999-04-26\",\"fuel\":\"diesel\",\"avg_price\":1.078},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"avg_price\":1.2426666667},{\"date\":\"1999-05-03\",\"fuel\":\"diesel\",\"avg_price\":1.078},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"avg_price\":1.244},{\"date\":\"1999-05-10\",\"fuel\":\"diesel\",\"avg_price\":1.083},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"avg_price\":1.2485},{\"date\":\"1999-05-17\",\"fuel\":\"diesel\",\"avg_price\":1.075},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"avg_price\":1.2455833333},{\"date\":\"1999-05-24\",\"fuel\":\"diesel\",\"avg_price\":1.066},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"avg_price\":1.2296666667},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"avg_price\":1.2144166667},{\"date\":\"1999-05-31\",\"fuel\":\"diesel\",\"avg_price\":1.065},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"avg_price\":1.21125},{\"date\":\"1999-06-07\",\"fuel\":\"diesel\",\"avg_price\":1.059},{\"date\":\"1999-06-14\",\"fuel\":\"diesel\",\"avg_price\":1.068},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"avg_price\":1.2073333333},{\"date\":\"1999-06-21\",\"fuel\":\"diesel\",\"avg_price\":1.082},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"avg_price\":1.2195},{\"date\":\"1999-06-28\",\"fuel\":\"diesel\",\"avg_price\":1.087},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"avg_price\":1.2113333333},{\"date\":\"1999-07-05\",\"fuel\":\"diesel\",\"avg_price\":1.102},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"avg_price\":1.22},{\"date\":\"1999-07-12\",\"fuel\":\"diesel\",\"avg_price\":1.114},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"avg_price\":1.2401666667},{\"date\":\"1999-07-19\",\"fuel\":\"diesel\",\"avg_price\":1.133},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"avg_price\":1.2691666667},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"avg_price\":1.29075},{\"date\":\"1999-07-26\",\"fuel\":\"diesel\",\"avg_price\":1.137},{\"date\":\"1999-08-02\",\"fuel\":\"diesel\",\"avg_price\":1.146},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"avg_price\":1.2959166667},{\"date\":\"1999-08-09\",\"fuel\":\"diesel\",\"avg_price\":1.156},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"avg_price\":1.3089166667},{\"date\":\"1999-08-16\",\"fuel\":\"diesel\",\"avg_price\":1.178},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"avg_price\":1.3348333333},{\"date\":\"1999-08-23\",\"fuel\":\"diesel\",\"avg_price\":1.186},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"avg_price\":1.33425},{\"date\":\"1999-08-30\",\"fuel\":\"diesel\",\"avg_price\":1.194},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"avg_price\":1.3328333333},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"avg_price\":1.3393333333},{\"date\":\"1999-09-06\",\"fuel\":\"diesel\",\"avg_price\":1.198},{\"date\":\"1999-09-13\",\"fuel\":\"diesel\",\"avg_price\":1.209},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"avg_price\":1.3453333333},{\"date\":\"1999-09-20\",\"fuel\":\"diesel\",\"avg_price\":1.226},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"avg_price\":1.3605833333},{\"date\":\"1999-09-27\",\"fuel\":\"diesel\",\"avg_price\":1.226},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"avg_price\":1.3545},{\"date\":\"1999-10-04\",\"fuel\":\"diesel\",\"avg_price\":1.234},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"avg_price\":1.3503333333},{\"date\":\"1999-10-11\",\"fuel\":\"diesel\",\"avg_price\":1.228},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"avg_price\":1.3466666667},{\"date\":\"1999-10-18\",\"fuel\":\"diesel\",\"avg_price\":1.224},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"avg_price\":1.3353333333},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"avg_price\":1.3331666667},{\"date\":\"1999-10-25\",\"fuel\":\"diesel\",\"avg_price\":1.226},{\"date\":\"1999-11-01\",\"fuel\":\"diesel\",\"avg_price\":1.229},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"avg_price\":1.3265833333},{\"date\":\"1999-11-08\",\"fuel\":\"diesel\",\"avg_price\":1.234},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"avg_price\":1.3271666667},{\"date\":\"1999-11-15\",\"fuel\":\"diesel\",\"avg_price\":1.261},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"avg_price\":1.34325},{\"date\":\"1999-11-22\",\"fuel\":\"diesel\",\"avg_price\":1.289},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"avg_price\":1.35925},{\"date\":\"1999-11-29\",\"fuel\":\"diesel\",\"avg_price\":1.304},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"avg_price\":1.3671666667},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"avg_price\":1.3674166667},{\"date\":\"1999-12-06\",\"fuel\":\"diesel\",\"avg_price\":1.294},{\"date\":\"1999-12-13\",\"fuel\":\"diesel\",\"avg_price\":1.288},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"avg_price\":1.3680833333},{\"date\":\"1999-12-20\",\"fuel\":\"diesel\",\"avg_price\":1.287},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"avg_price\":1.3629166667},{\"date\":\"1999-12-27\",\"fuel\":\"diesel\",\"avg_price\":1.298},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"avg_price\":1.3658333333},{\"date\":\"2000-01-03\",\"fuel\":\"diesel\",\"avg_price\":1.309},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"avg_price\":1.3645},{\"date\":\"2000-01-10\",\"fuel\":\"diesel\",\"avg_price\":1.307},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"avg_price\":1.3575833333},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"avg_price\":1.3674166667},{\"date\":\"2000-01-17\",\"fuel\":\"diesel\",\"avg_price\":1.307},{\"date\":\"2000-01-24\",\"fuel\":\"diesel\",\"avg_price\":1.418},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"avg_price\":1.3995},{\"date\":\"2000-01-31\",\"fuel\":\"diesel\",\"avg_price\":1.439},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"avg_price\":1.4033333333},{\"date\":\"2000-02-07\",\"fuel\":\"diesel\",\"avg_price\":1.47},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"avg_price\":1.4104166667},{\"date\":\"2000-02-14\",\"fuel\":\"diesel\",\"avg_price\":1.456},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"avg_price\":1.4378333333},{\"date\":\"2000-02-21\",\"fuel\":\"diesel\",\"avg_price\":1.456},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"avg_price\":1.4835},{\"date\":\"2000-02-28\",\"fuel\":\"diesel\",\"avg_price\":1.461},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"avg_price\":1.5021666667},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"avg_price\":1.5858333333},{\"date\":\"2000-03-06\",\"fuel\":\"diesel\",\"avg_price\":1.49},{\"date\":\"2000-03-13\",\"fuel\":\"diesel\",\"avg_price\":1.496},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"avg_price\":1.6205833333},{\"date\":\"2000-03-20\",\"fuel\":\"diesel\",\"avg_price\":1.479},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"avg_price\":1.62925},{\"date\":\"2000-03-27\",\"fuel\":\"diesel\",\"avg_price\":1.451},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"avg_price\":1.613},{\"date\":\"2000-04-03\",\"fuel\":\"diesel\",\"avg_price\":1.442},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"avg_price\":1.6068333333},{\"date\":\"2000-04-10\",\"fuel\":\"diesel\",\"avg_price\":1.419},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"avg_price\":1.5824166667},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"avg_price\":1.5545},{\"date\":\"2000-04-17\",\"fuel\":\"diesel\",\"avg_price\":1.398},{\"date\":\"2000-04-24\",\"fuel\":\"diesel\",\"avg_price\":1.428},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"avg_price\":1.5449166667},{\"date\":\"2000-05-01\",\"fuel\":\"diesel\",\"avg_price\":1.418},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"avg_price\":1.52925},{\"date\":\"2000-05-08\",\"fuel\":\"diesel\",\"avg_price\":1.402},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"avg_price\":1.5560833333},{\"date\":\"2000-05-15\",\"fuel\":\"diesel\",\"avg_price\":1.415},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"avg_price\":1.5860833333},{\"date\":\"2000-05-22\",\"fuel\":\"diesel\",\"avg_price\":1.432},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"avg_price\":1.6116666667},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"avg_price\":1.6254166667},{\"date\":\"2000-05-29\",\"fuel\":\"diesel\",\"avg_price\":1.431},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"avg_price\":1.6456666667},{\"date\":\"2000-06-05\",\"fuel\":\"diesel\",\"avg_price\":1.419},{\"date\":\"2000-06-12\",\"fuel\":\"diesel\",\"avg_price\":1.411},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"avg_price\":1.6994166667},{\"date\":\"2000-06-19\",\"fuel\":\"diesel\",\"avg_price\":1.423},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"avg_price\":1.7399166667},{\"date\":\"2000-06-26\",\"fuel\":\"diesel\",\"avg_price\":1.432},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"avg_price\":1.7258333333},{\"date\":\"2000-07-03\",\"fuel\":\"diesel\",\"avg_price\":1.453},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"avg_price\":1.7075},{\"date\":\"2000-07-10\",\"fuel\":\"diesel\",\"avg_price\":1.449},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"avg_price\":1.6853333333},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"avg_price\":1.6488333333},{\"date\":\"2000-07-17\",\"fuel\":\"diesel\",\"avg_price\":1.435},{\"date\":\"2000-07-24\",\"fuel\":\"diesel\",\"avg_price\":1.424},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"avg_price\":1.6263333333},{\"date\":\"2000-07-31\",\"fuel\":\"diesel\",\"avg_price\":1.408},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"avg_price\":1.5839166667},{\"date\":\"2000-08-07\",\"fuel\":\"diesel\",\"avg_price\":1.41},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"avg_price\":1.573},{\"date\":\"2000-08-14\",\"fuel\":\"diesel\",\"avg_price\":1.447},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"avg_price\":1.5595},{\"date\":\"2000-08-21\",\"fuel\":\"diesel\",\"avg_price\":1.471},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"avg_price\":1.5729166667},{\"date\":\"2000-08-28\",\"fuel\":\"diesel\",\"avg_price\":1.536},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"avg_price\":1.5854166667},{\"date\":\"2000-09-04\",\"fuel\":\"diesel\",\"avg_price\":1.609},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"avg_price\":1.6298333333},{\"date\":\"2000-09-11\",\"fuel\":\"diesel\",\"avg_price\":1.629},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"avg_price\":1.6595833333},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"avg_price\":1.6579166667},{\"date\":\"2000-09-18\",\"fuel\":\"diesel\",\"avg_price\":1.653},{\"date\":\"2000-09-25\",\"fuel\":\"diesel\",\"avg_price\":1.657},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"avg_price\":1.6485},{\"date\":\"2000-10-02\",\"fuel\":\"diesel\",\"avg_price\":1.625},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"avg_price\":1.6289166667},{\"date\":\"2000-10-09\",\"fuel\":\"diesel\",\"avg_price\":1.614},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"avg_price\":1.60925},{\"date\":\"2000-10-16\",\"fuel\":\"diesel\",\"avg_price\":1.67},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"avg_price\":1.6384166667},{\"date\":\"2000-10-23\",\"fuel\":\"diesel\",\"avg_price\":1.648},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"avg_price\":1.6444166667},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"avg_price\":1.6425833333},{\"date\":\"2000-10-30\",\"fuel\":\"diesel\",\"avg_price\":1.629},{\"date\":\"2000-11-06\",\"fuel\":\"diesel\",\"avg_price\":1.61},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"avg_price\":1.62675},{\"date\":\"2000-11-13\",\"fuel\":\"diesel\",\"avg_price\":1.603},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"avg_price\":1.6224166667},{\"date\":\"2000-11-20\",\"fuel\":\"diesel\",\"avg_price\":1.627},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"avg_price\":1.6113333333},{\"date\":\"2000-11-27\",\"fuel\":\"diesel\",\"avg_price\":1.645},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"avg_price\":1.6089166667},{\"date\":\"2000-12-04\",\"fuel\":\"diesel\",\"avg_price\":1.622},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"avg_price\":1.58775},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"avg_price\":1.5559166667},{\"date\":\"2000-12-11\",\"fuel\":\"diesel\",\"avg_price\":1.577},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"avg_price\":1.5295833333},{\"date\":\"2000-12-18\",\"fuel\":\"diesel\",\"avg_price\":1.545},{\"date\":\"2000-12-25\",\"fuel\":\"diesel\",\"avg_price\":1.515},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"avg_price\":1.5176666667},{\"date\":\"2001-01-01\",\"fuel\":\"diesel\",\"avg_price\":1.522},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"avg_price\":1.5119166667},{\"date\":\"2001-01-08\",\"fuel\":\"diesel\",\"avg_price\":1.52},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"avg_price\":1.5254166667},{\"date\":\"2001-01-15\",\"fuel\":\"diesel\",\"avg_price\":1.509},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"avg_price\":1.5641666667},{\"date\":\"2001-01-22\",\"fuel\":\"diesel\",\"avg_price\":1.528},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"avg_price\":1.562},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"avg_price\":1.551},{\"date\":\"2001-01-29\",\"fuel\":\"diesel\",\"avg_price\":1.539},{\"date\":\"2001-02-05\",\"fuel\":\"diesel\",\"avg_price\":1.52},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"avg_price\":1.5389166667},{\"date\":\"2001-02-12\",\"fuel\":\"diesel\",\"avg_price\":1.518},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"avg_price\":1.5669166667},{\"date\":\"2001-02-19\",\"fuel\":\"diesel\",\"avg_price\":1.48},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"avg_price\":1.5478333333},{\"date\":\"2001-02-26\",\"fuel\":\"diesel\",\"avg_price\":1.451},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"avg_price\":1.532},{\"date\":\"2001-03-05\",\"fuel\":\"diesel\",\"avg_price\":1.42},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"avg_price\":1.5219166667},{\"date\":\"2001-03-12\",\"fuel\":\"diesel\",\"avg_price\":1.406},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"avg_price\":1.5171666667},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"avg_price\":1.5091666667},{\"date\":\"2001-03-19\",\"fuel\":\"diesel\",\"avg_price\":1.392},{\"date\":\"2001-03-26\",\"fuel\":\"diesel\",\"avg_price\":1.379},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"avg_price\":1.50775},{\"date\":\"2001-04-02\",\"fuel\":\"diesel\",\"avg_price\":1.391},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"avg_price\":1.543},{\"date\":\"2001-04-09\",\"fuel\":\"diesel\",\"avg_price\":1.397},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"avg_price\":1.5984166667},{\"date\":\"2001-04-16\",\"fuel\":\"diesel\",\"avg_price\":1.437},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"avg_price\":1.6590833333},{\"date\":\"2001-04-23\",\"fuel\":\"diesel\",\"avg_price\":1.443},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"avg_price\":1.7113333333},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"avg_price\":1.7231666667},{\"date\":\"2001-04-30\",\"fuel\":\"diesel\",\"avg_price\":1.442},{\"date\":\"2001-05-07\",\"fuel\":\"diesel\",\"avg_price\":1.47},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"avg_price\":1.7915},{\"date\":\"2001-05-14\",\"fuel\":\"diesel\",\"avg_price\":1.491},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"avg_price\":1.8036666667},{\"date\":\"2001-05-21\",\"fuel\":\"diesel\",\"avg_price\":1.494},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"avg_price\":1.7833333333},{\"date\":\"2001-05-28\",\"fuel\":\"diesel\",\"avg_price\":1.529},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"avg_price\":1.7961666667},{\"date\":\"2001-06-04\",\"fuel\":\"diesel\",\"avg_price\":1.514},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"avg_price\":1.7734166667},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"avg_price\":1.7493333333},{\"date\":\"2001-06-11\",\"fuel\":\"diesel\",\"avg_price\":1.486},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"avg_price\":1.709},{\"date\":\"2001-06-18\",\"fuel\":\"diesel\",\"avg_price\":1.48},{\"date\":\"2001-06-25\",\"fuel\":\"diesel\",\"avg_price\":1.447},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"avg_price\":1.6539166667},{\"date\":\"2001-07-02\",\"fuel\":\"diesel\",\"avg_price\":1.407},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"avg_price\":1.594},{\"date\":\"2001-07-09\",\"fuel\":\"diesel\",\"avg_price\":1.392},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"avg_price\":1.5575},{\"date\":\"2001-07-16\",\"fuel\":\"diesel\",\"avg_price\":1.38},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"avg_price\":1.531},{\"date\":\"2001-07-23\",\"fuel\":\"diesel\",\"avg_price\":1.348},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"avg_price\":1.509},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"avg_price\":1.4925},{\"date\":\"2001-07-30\",\"fuel\":\"diesel\",\"avg_price\":1.347},{\"date\":\"2001-08-06\",\"fuel\":\"diesel\",\"avg_price\":1.345},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"avg_price\":1.4800833333},{\"date\":\"2001-08-13\",\"fuel\":\"diesel\",\"avg_price\":1.367},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"avg_price\":1.48925},{\"date\":\"2001-08-20\",\"fuel\":\"diesel\",\"avg_price\":1.394},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"avg_price\":1.5150833333},{\"date\":\"2001-08-27\",\"fuel\":\"diesel\",\"avg_price\":1.452},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"avg_price\":1.5595833333},{\"date\":\"2001-09-03\",\"fuel\":\"diesel\",\"avg_price\":1.488},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"avg_price\":1.6145833333},{\"date\":\"2001-09-10\",\"fuel\":\"diesel\",\"avg_price\":1.492},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"avg_price\":1.6018333333},{\"date\":\"2001-09-17\",\"fuel\":\"diesel\",\"avg_price\":1.527},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"avg_price\":1.6029166667},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"avg_price\":1.56675},{\"date\":\"2001-09-24\",\"fuel\":\"diesel\",\"avg_price\":1.473},{\"date\":\"2001-10-01\",\"fuel\":\"diesel\",\"avg_price\":1.39},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"avg_price\":1.5041666667},{\"date\":\"2001-10-08\",\"fuel\":\"diesel\",\"avg_price\":1.371},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"avg_price\":1.44575},{\"date\":\"2001-10-15\",\"fuel\":\"diesel\",\"avg_price\":1.353},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"avg_price\":1.4055},{\"date\":\"2001-10-22\",\"fuel\":\"diesel\",\"avg_price\":1.318},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"avg_price\":1.3616666667},{\"date\":\"2001-10-29\",\"fuel\":\"diesel\",\"avg_price\":1.31},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"avg_price\":1.3309166667},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"avg_price\":1.3013333333},{\"date\":\"2001-11-05\",\"fuel\":\"diesel\",\"avg_price\":1.291},{\"date\":\"2001-11-12\",\"fuel\":\"diesel\",\"avg_price\":1.269},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"avg_price\":1.2753333333},{\"date\":\"2001-11-19\",\"fuel\":\"diesel\",\"avg_price\":1.252},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"avg_price\":1.2565},{\"date\":\"2001-11-26\",\"fuel\":\"diesel\",\"avg_price\":1.223},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"avg_price\":1.217},{\"date\":\"2001-12-03\",\"fuel\":\"diesel\",\"avg_price\":1.194},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"avg_price\":1.19575},{\"date\":\"2001-12-10\",\"fuel\":\"diesel\",\"avg_price\":1.173},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"avg_price\":1.1815833333},{\"date\":\"2001-12-17\",\"fuel\":\"diesel\",\"avg_price\":1.143},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"avg_price\":1.1470833333},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"avg_price\":1.1550833333},{\"date\":\"2001-12-24\",\"fuel\":\"diesel\",\"avg_price\":1.154},{\"date\":\"2001-12-31\",\"fuel\":\"diesel\",\"avg_price\":1.169},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"avg_price\":1.175},{\"date\":\"2002-01-07\",\"fuel\":\"diesel\",\"avg_price\":1.168},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"avg_price\":1.1911666667},{\"date\":\"2002-01-14\",\"fuel\":\"diesel\",\"avg_price\":1.159},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"avg_price\":1.1951666667},{\"date\":\"2002-01-21\",\"fuel\":\"diesel\",\"avg_price\":1.14},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"avg_price\":1.191},{\"date\":\"2002-01-28\",\"fuel\":\"diesel\",\"avg_price\":1.144},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"avg_price\":1.18775},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"avg_price\":1.2014166667},{\"date\":\"2002-02-04\",\"fuel\":\"diesel\",\"avg_price\":1.144},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"avg_price\":1.1946666667},{\"date\":\"2002-02-11\",\"fuel\":\"diesel\",\"avg_price\":1.153},{\"date\":\"2002-02-18\",\"fuel\":\"diesel\",\"avg_price\":1.156},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"avg_price\":1.2049166667},{\"date\":\"2002-02-25\",\"fuel\":\"diesel\",\"avg_price\":1.154},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"avg_price\":1.2063333333},{\"date\":\"2002-03-04\",\"fuel\":\"diesel\",\"avg_price\":1.173},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"avg_price\":1.23225},{\"date\":\"2002-03-11\",\"fuel\":\"diesel\",\"avg_price\":1.216},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"avg_price\":1.3095},{\"date\":\"2002-03-18\",\"fuel\":\"diesel\",\"avg_price\":1.251},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"avg_price\":1.37525},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"avg_price\":1.4305},{\"date\":\"2002-03-25\",\"fuel\":\"diesel\",\"avg_price\":1.281},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"avg_price\":1.4621666667},{\"date\":\"2002-04-01\",\"fuel\":\"diesel\",\"avg_price\":1.295},{\"date\":\"2002-04-08\",\"fuel\":\"diesel\",\"avg_price\":1.323},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"avg_price\":1.5031666667},{\"date\":\"2002-04-15\",\"fuel\":\"diesel\",\"avg_price\":1.32},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"avg_price\":1.4981666667},{\"date\":\"2002-04-22\",\"fuel\":\"diesel\",\"avg_price\":1.304},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"avg_price\":1.4981666667},{\"date\":\"2002-04-29\",\"fuel\":\"diesel\",\"avg_price\":1.302},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"avg_price\":1.4885},{\"date\":\"2002-05-06\",\"fuel\":\"diesel\",\"avg_price\":1.305},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"avg_price\":1.49},{\"date\":\"2002-05-13\",\"fuel\":\"diesel\",\"avg_price\":1.299},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"avg_price\":1.4839166667},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"avg_price\":1.4909166667},{\"date\":\"2002-05-20\",\"fuel\":\"diesel\",\"avg_price\":1.309},{\"date\":\"2002-05-27\",\"fuel\":\"diesel\",\"avg_price\":1.308},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"avg_price\":1.4819166667},{\"date\":\"2002-06-03\",\"fuel\":\"diesel\",\"avg_price\":1.3},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"avg_price\":1.4848333333},{\"date\":\"2002-06-10\",\"fuel\":\"diesel\",\"avg_price\":1.286},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"avg_price\":1.47},{\"date\":\"2002-06-17\",\"fuel\":\"diesel\",\"avg_price\":1.275},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"avg_price\":1.473},{\"date\":\"2002-06-24\",\"fuel\":\"diesel\",\"avg_price\":1.281},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"avg_price\":1.47825},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"avg_price\":1.4840833333},{\"date\":\"2002-07-01\",\"fuel\":\"diesel\",\"avg_price\":1.289},{\"date\":\"2002-07-08\",\"fuel\":\"diesel\",\"avg_price\":1.294},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"avg_price\":1.4753333333},{\"date\":\"2002-07-15\",\"fuel\":\"diesel\",\"avg_price\":1.3},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"avg_price\":1.4848333333},{\"date\":\"2002-07-22\",\"fuel\":\"diesel\",\"avg_price\":1.311},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"avg_price\":1.4994166667},{\"date\":\"2002-07-29\",\"fuel\":\"diesel\",\"avg_price\":1.303},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"avg_price\":1.4964166667},{\"date\":\"2002-08-05\",\"fuel\":\"diesel\",\"avg_price\":1.304},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"avg_price\":1.48975},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"avg_price\":1.487},{\"date\":\"2002-08-12\",\"fuel\":\"diesel\",\"avg_price\":1.303},{\"date\":\"2002-08-19\",\"fuel\":\"diesel\",\"avg_price\":1.333},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"avg_price\":1.4855833333},{\"date\":\"2002-08-26\",\"fuel\":\"diesel\",\"avg_price\":1.37},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"avg_price\":1.49675},{\"date\":\"2002-09-02\",\"fuel\":\"diesel\",\"avg_price\":1.388},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"avg_price\":1.489},{\"date\":\"2002-09-09\",\"fuel\":\"diesel\",\"avg_price\":1.396},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"avg_price\":1.4896666667},{\"date\":\"2002-09-16\",\"fuel\":\"diesel\",\"avg_price\":1.414},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"avg_price\":1.4935},{\"date\":\"2002-09-23\",\"fuel\":\"diesel\",\"avg_price\":1.417},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"avg_price\":1.4884166667},{\"date\":\"2002-09-30\",\"fuel\":\"diesel\",\"avg_price\":1.438},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"avg_price\":1.5038333333},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"avg_price\":1.526},{\"date\":\"2002-10-07\",\"fuel\":\"diesel\",\"avg_price\":1.46},{\"date\":\"2002-10-14\",\"fuel\":\"diesel\",\"avg_price\":1.461},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"avg_price\":1.5265},{\"date\":\"2002-10-21\",\"fuel\":\"diesel\",\"avg_price\":1.469},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"avg_price\":1.5418333333},{\"date\":\"2002-10-28\",\"fuel\":\"diesel\",\"avg_price\":1.456},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"avg_price\":1.53},{\"date\":\"2002-11-04\",\"fuel\":\"diesel\",\"avg_price\":1.442},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"avg_price\":1.5349166667},{\"date\":\"2002-11-11\",\"fuel\":\"diesel\",\"avg_price\":1.427},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"avg_price\":1.5301666667},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"avg_price\":1.5036666667},{\"date\":\"2002-11-18\",\"fuel\":\"diesel\",\"avg_price\":1.405},{\"date\":\"2002-11-25\",\"fuel\":\"diesel\",\"avg_price\":1.405},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"avg_price\":1.4781666667},{\"date\":\"2002-12-02\",\"fuel\":\"diesel\",\"avg_price\":1.407},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"avg_price\":1.4655833333},{\"date\":\"2002-12-09\",\"fuel\":\"diesel\",\"avg_price\":1.405},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"avg_price\":1.46025},{\"date\":\"2002-12-16\",\"fuel\":\"diesel\",\"avg_price\":1.401},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"avg_price\":1.462},{\"date\":\"2002-12-23\",\"fuel\":\"diesel\",\"avg_price\":1.44},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"avg_price\":1.49375},{\"date\":\"2002-12-30\",\"fuel\":\"diesel\",\"avg_price\":1.491},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"avg_price\":1.5318333333},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"avg_price\":1.5385},{\"date\":\"2003-01-06\",\"fuel\":\"diesel\",\"avg_price\":1.501},{\"date\":\"2003-01-13\",\"fuel\":\"diesel\",\"avg_price\":1.478},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"avg_price\":1.54725},{\"date\":\"2003-01-20\",\"fuel\":\"diesel\",\"avg_price\":1.48},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"avg_price\":1.5548333333},{\"date\":\"2003-01-27\",\"fuel\":\"diesel\",\"avg_price\":1.492},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"avg_price\":1.5669166667},{\"date\":\"2003-02-03\",\"fuel\":\"diesel\",\"avg_price\":1.542},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"avg_price\":1.6178333333},{\"date\":\"2003-02-10\",\"fuel\":\"diesel\",\"avg_price\":1.662},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"avg_price\":1.6974166667},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"avg_price\":1.75},{\"date\":\"2003-02-17\",\"fuel\":\"diesel\",\"avg_price\":1.704},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"avg_price\":1.7515833333},{\"date\":\"2003-02-24\",\"fuel\":\"diesel\",\"avg_price\":1.709},{\"date\":\"2003-03-03\",\"fuel\":\"diesel\",\"avg_price\":1.753},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"avg_price\":1.7805833333},{\"date\":\"2003-03-10\",\"fuel\":\"diesel\",\"avg_price\":1.771},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"avg_price\":1.8073333333},{\"date\":\"2003-03-17\",\"fuel\":\"diesel\",\"avg_price\":1.752},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"avg_price\":1.8255833333},{\"date\":\"2003-03-24\",\"fuel\":\"diesel\",\"avg_price\":1.662},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"avg_price\":1.7935},{\"date\":\"2003-03-31\",\"fuel\":\"diesel\",\"avg_price\":1.602},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"avg_price\":1.7578333333},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"avg_price\":1.739},{\"date\":\"2003-04-07\",\"fuel\":\"diesel\",\"avg_price\":1.554},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"avg_price\":1.7065},{\"date\":\"2003-04-14\",\"fuel\":\"diesel\",\"avg_price\":1.539},{\"date\":\"2003-04-21\",\"fuel\":\"diesel\",\"avg_price\":1.529},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"avg_price\":1.683},{\"date\":\"2003-04-28\",\"fuel\":\"diesel\",\"avg_price\":1.508},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"avg_price\":1.6653333333},{\"date\":\"2003-05-05\",\"fuel\":\"diesel\",\"avg_price\":1.484},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"avg_price\":1.6220833333},{\"date\":\"2003-05-12\",\"fuel\":\"diesel\",\"avg_price\":1.444},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"avg_price\":1.5969166667},{\"date\":\"2003-05-19\",\"fuel\":\"diesel\",\"avg_price\":1.443},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"avg_price\":1.597},{\"date\":\"2003-05-26\",\"fuel\":\"diesel\",\"avg_price\":1.434},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"avg_price\":1.5835833333},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"avg_price\":1.5686666667},{\"date\":\"2003-06-02\",\"fuel\":\"diesel\",\"avg_price\":1.423},{\"date\":\"2003-06-09\",\"fuel\":\"diesel\",\"avg_price\":1.422},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"avg_price\":1.57975},{\"date\":\"2003-06-16\",\"fuel\":\"diesel\",\"avg_price\":1.432},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"avg_price\":1.6100833333},{\"date\":\"2003-06-23\",\"fuel\":\"diesel\",\"avg_price\":1.423},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"avg_price\":1.59225},{\"date\":\"2003-06-30\",\"fuel\":\"diesel\",\"avg_price\":1.42},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"avg_price\":1.5835833333},{\"date\":\"2003-07-07\",\"fuel\":\"diesel\",\"avg_price\":1.428},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"avg_price\":1.5844166667},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"avg_price\":1.6138333333},{\"date\":\"2003-07-14\",\"fuel\":\"diesel\",\"avg_price\":1.435},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"avg_price\":1.616},{\"date\":\"2003-07-21\",\"fuel\":\"diesel\",\"avg_price\":1.439},{\"date\":\"2003-07-28\",\"fuel\":\"diesel\",\"avg_price\":1.438},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"avg_price\":1.60775},{\"date\":\"2003-08-04\",\"fuel\":\"diesel\",\"avg_price\":1.453},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"avg_price\":1.6225833333},{\"date\":\"2003-08-11\",\"fuel\":\"diesel\",\"avg_price\":1.492},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"avg_price\":1.6566666667},{\"date\":\"2003-08-18\",\"fuel\":\"diesel\",\"avg_price\":1.498},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"avg_price\":1.7179166667},{\"date\":\"2003-08-25\",\"fuel\":\"diesel\",\"avg_price\":1.503},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"avg_price\":1.8441666667},{\"date\":\"2003-09-01\",\"fuel\":\"diesel\",\"avg_price\":1.501},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"avg_price\":1.8455},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"avg_price\":1.82},{\"date\":\"2003-09-08\",\"fuel\":\"diesel\",\"avg_price\":1.488},{\"date\":\"2003-09-15\",\"fuel\":\"diesel\",\"avg_price\":1.471},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"avg_price\":1.79925},{\"date\":\"2003-09-22\",\"fuel\":\"diesel\",\"avg_price\":1.444},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"avg_price\":1.749},{\"date\":\"2003-09-29\",\"fuel\":\"diesel\",\"avg_price\":1.429},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"avg_price\":1.7005833333},{\"date\":\"2003-10-06\",\"fuel\":\"diesel\",\"avg_price\":1.445},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"avg_price\":1.68025},{\"date\":\"2003-10-13\",\"fuel\":\"diesel\",\"avg_price\":1.483},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"avg_price\":1.6696666667},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"avg_price\":1.6673333333},{\"date\":\"2003-10-20\",\"fuel\":\"diesel\",\"avg_price\":1.502},{\"date\":\"2003-10-27\",\"fuel\":\"diesel\",\"avg_price\":1.495},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"avg_price\":1.6398333333},{\"date\":\"2003-11-03\",\"fuel\":\"diesel\",\"avg_price\":1.481},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"avg_price\":1.6315833333},{\"date\":\"2003-11-10\",\"fuel\":\"diesel\",\"avg_price\":1.476},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"avg_price\":1.6018333333},{\"date\":\"2003-11-17\",\"fuel\":\"diesel\",\"avg_price\":1.481},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"avg_price\":1.5941666667},{\"date\":\"2003-11-24\",\"fuel\":\"diesel\",\"avg_price\":1.491},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"avg_price\":1.60675},{\"date\":\"2003-12-01\",\"fuel\":\"diesel\",\"avg_price\":1.476},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"avg_price\":1.5871666667},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"avg_price\":1.5726666667},{\"date\":\"2003-12-08\",\"fuel\":\"diesel\",\"avg_price\":1.481},{\"date\":\"2003-12-15\",\"fuel\":\"diesel\",\"avg_price\":1.486},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"avg_price\":1.56125},{\"date\":\"2003-12-22\",\"fuel\":\"diesel\",\"avg_price\":1.504},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"avg_price\":1.5781666667},{\"date\":\"2003-12-29\",\"fuel\":\"diesel\",\"avg_price\":1.502},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"avg_price\":1.5713333333},{\"date\":\"2004-01-05\",\"fuel\":\"diesel\",\"avg_price\":1.503},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"avg_price\":1.5993333333},{\"date\":\"2004-01-12\",\"fuel\":\"diesel\",\"avg_price\":1.551},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"avg_price\":1.6494166667},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"avg_price\":1.6829166667},{\"date\":\"2004-01-19\",\"fuel\":\"diesel\",\"avg_price\":1.559},{\"date\":\"2004-01-26\",\"fuel\":\"diesel\",\"avg_price\":1.591},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"avg_price\":1.711},{\"date\":\"2004-02-02\",\"fuel\":\"diesel\",\"avg_price\":1.581},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"avg_price\":1.7094166667},{\"date\":\"2004-02-09\",\"fuel\":\"diesel\",\"avg_price\":1.568},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"avg_price\":1.7310833333},{\"date\":\"2004-02-16\",\"fuel\":\"diesel\",\"avg_price\":1.584},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"avg_price\":1.74075},{\"date\":\"2004-02-23\",\"fuel\":\"diesel\",\"avg_price\":1.595},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"avg_price\":1.7856666667},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"avg_price\":1.8166666667},{\"date\":\"2004-03-01\",\"fuel\":\"diesel\",\"avg_price\":1.619},{\"date\":\"2004-03-08\",\"fuel\":\"diesel\",\"avg_price\":1.628},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"avg_price\":1.8374166667},{\"date\":\"2004-03-15\",\"fuel\":\"diesel\",\"avg_price\":1.617},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"avg_price\":1.8249166667},{\"date\":\"2004-03-22\",\"fuel\":\"diesel\",\"avg_price\":1.641},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"avg_price\":1.8415},{\"date\":\"2004-03-29\",\"fuel\":\"diesel\",\"avg_price\":1.642},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"avg_price\":1.8549166667},{\"date\":\"2004-04-05\",\"fuel\":\"diesel\",\"avg_price\":1.648},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"avg_price\":1.8768333333},{\"date\":\"2004-04-12\",\"fuel\":\"diesel\",\"avg_price\":1.679},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"avg_price\":1.8833333333},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"avg_price\":1.90625},{\"date\":\"2004-04-19\",\"fuel\":\"diesel\",\"avg_price\":1.724},{\"date\":\"2004-04-26\",\"fuel\":\"diesel\",\"avg_price\":1.718},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"avg_price\":1.9049166667},{\"date\":\"2004-05-03\",\"fuel\":\"diesel\",\"avg_price\":1.717},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"avg_price\":1.93375},{\"date\":\"2004-05-10\",\"fuel\":\"diesel\",\"avg_price\":1.745},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"avg_price\":2.0290833333},{\"date\":\"2004-05-17\",\"fuel\":\"diesel\",\"avg_price\":1.763},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"avg_price\":2.1054166667},{\"date\":\"2004-05-24\",\"fuel\":\"diesel\",\"avg_price\":1.761},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"avg_price\":2.1555},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"avg_price\":2.1475833333},{\"date\":\"2004-05-31\",\"fuel\":\"diesel\",\"avg_price\":1.746},{\"date\":\"2004-06-07\",\"fuel\":\"diesel\",\"avg_price\":1.734},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"avg_price\":2.1325},{\"date\":\"2004-06-14\",\"fuel\":\"diesel\",\"avg_price\":1.711},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"avg_price\":2.0908333333},{\"date\":\"2004-06-21\",\"fuel\":\"diesel\",\"avg_price\":1.7},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"avg_price\":2.04575},{\"date\":\"2004-06-28\",\"fuel\":\"diesel\",\"avg_price\":1.7},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"avg_price\":2.0275},{\"date\":\"2004-07-05\",\"fuel\":\"diesel\",\"avg_price\":1.716},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"avg_price\":2.0013333333},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"avg_price\":2.0170833333},{\"date\":\"2004-07-12\",\"fuel\":\"diesel\",\"avg_price\":1.74},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"avg_price\":2.026},{\"date\":\"2004-07-19\",\"fuel\":\"diesel\",\"avg_price\":1.744},{\"date\":\"2004-07-26\",\"fuel\":\"diesel\",\"avg_price\":1.754},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"avg_price\":2.004},{\"date\":\"2004-08-02\",\"fuel\":\"diesel\",\"avg_price\":1.78},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"avg_price\":1.9855},{\"date\":\"2004-08-09\",\"fuel\":\"diesel\",\"avg_price\":1.814},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"avg_price\":1.974},{\"date\":\"2004-08-16\",\"fuel\":\"diesel\",\"avg_price\":1.825},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"avg_price\":1.9690833333},{\"date\":\"2004-08-23\",\"fuel\":\"diesel\",\"avg_price\":1.874},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"avg_price\":1.9764166667},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"avg_price\":1.9636666667},{\"date\":\"2004-08-30\",\"fuel\":\"diesel\",\"avg_price\":1.871},{\"date\":\"2004-09-06\",\"fuel\":\"diesel\",\"avg_price\":1.869},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"avg_price\":1.9471666667},{\"date\":\"2004-09-13\",\"fuel\":\"diesel\",\"avg_price\":1.874},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"avg_price\":1.9415},{\"date\":\"2004-09-20\",\"fuel\":\"diesel\",\"avg_price\":1.912},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"avg_price\":1.9576666667},{\"date\":\"2004-09-27\",\"fuel\":\"diesel\",\"avg_price\":2.012},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"avg_price\":2.00625},{\"date\":\"2004-10-04\",\"fuel\":\"diesel\",\"avg_price\":2.053},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"avg_price\":2.03225},{\"date\":\"2004-10-11\",\"fuel\":\"diesel\",\"avg_price\":2.092},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"avg_price\":2.09025},{\"date\":\"2004-10-18\",\"fuel\":\"diesel\",\"avg_price\":2.18},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"avg_price\":2.135},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"avg_price\":2.1330833333},{\"date\":\"2004-10-25\",\"fuel\":\"diesel\",\"avg_price\":2.212},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"avg_price\":2.1336666667},{\"date\":\"2004-11-01\",\"fuel\":\"diesel\",\"avg_price\":2.206},{\"date\":\"2004-11-08\",\"fuel\":\"diesel\",\"avg_price\":2.163},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"avg_price\":2.1045833333},{\"date\":\"2004-11-15\",\"fuel\":\"diesel\",\"avg_price\":2.132},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"avg_price\":2.0746666667},{\"date\":\"2004-11-22\",\"fuel\":\"diesel\",\"avg_price\":2.116},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"avg_price\":2.0511666667},{\"date\":\"2004-11-29\",\"fuel\":\"diesel\",\"avg_price\":2.116},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"avg_price\":2.04525},{\"date\":\"2004-12-06\",\"fuel\":\"diesel\",\"avg_price\":2.069},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"avg_price\":2.0135833333},{\"date\":\"2004-12-13\",\"fuel\":\"diesel\",\"avg_price\":1.997},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"avg_price\":1.95375},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"avg_price\":1.918},{\"date\":\"2004-12-20\",\"fuel\":\"diesel\",\"avg_price\":1.984},{\"date\":\"2004-12-27\",\"fuel\":\"diesel\",\"avg_price\":1.987},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"avg_price\":1.8945833333},{\"date\":\"2005-01-03\",\"fuel\":\"diesel\",\"avg_price\":1.957},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"avg_price\":1.8795833333},{\"date\":\"2005-01-10\",\"fuel\":\"diesel\",\"avg_price\":1.934},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"avg_price\":1.8873333333},{\"date\":\"2005-01-17\",\"fuel\":\"diesel\",\"avg_price\":1.952},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"avg_price\":1.91075},{\"date\":\"2005-01-24\",\"fuel\":\"diesel\",\"avg_price\":1.959},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"avg_price\":1.9419166667},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"avg_price\":1.999},{\"date\":\"2005-01-31\",\"fuel\":\"diesel\",\"avg_price\":1.992},{\"date\":\"2005-02-07\",\"fuel\":\"diesel\",\"avg_price\":1.983},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"avg_price\":1.9995},{\"date\":\"2005-02-14\",\"fuel\":\"diesel\",\"avg_price\":1.986},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"avg_price\":1.99025},{\"date\":\"2005-02-21\",\"fuel\":\"diesel\",\"avg_price\":2.02},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"avg_price\":1.9981666667},{\"date\":\"2005-02-28\",\"fuel\":\"diesel\",\"avg_price\":2.118},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"avg_price\":2.0178333333},{\"date\":\"2005-03-07\",\"fuel\":\"diesel\",\"avg_price\":2.168},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"avg_price\":2.0865},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"avg_price\":2.1434166667},{\"date\":\"2005-03-14\",\"fuel\":\"diesel\",\"avg_price\":2.194},{\"date\":\"2005-03-21\",\"fuel\":\"diesel\",\"avg_price\":2.244},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"avg_price\":2.1928333333},{\"date\":\"2005-03-28\",\"fuel\":\"diesel\",\"avg_price\":2.249},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"avg_price\":2.239},{\"date\":\"2005-04-04\",\"fuel\":\"diesel\",\"avg_price\":2.303},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"avg_price\":2.3041666667},{\"date\":\"2005-04-11\",\"fuel\":\"diesel\",\"avg_price\":2.316},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"avg_price\":2.3708333333},{\"date\":\"2005-04-18\",\"fuel\":\"diesel\",\"avg_price\":2.259},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"avg_price\":2.3345833333},{\"date\":\"2005-04-25\",\"fuel\":\"diesel\",\"avg_price\":2.289},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"avg_price\":2.3335},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"avg_price\":2.3328333333},{\"date\":\"2005-05-02\",\"fuel\":\"diesel\",\"avg_price\":2.262},{\"date\":\"2005-05-09\",\"fuel\":\"diesel\",\"avg_price\":2.227},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"avg_price\":2.2903333333},{\"date\":\"2005-05-16\",\"fuel\":\"diesel\",\"avg_price\":2.189},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"avg_price\":2.26375},{\"date\":\"2005-05-23\",\"fuel\":\"diesel\",\"avg_price\":2.156},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"avg_price\":2.2278333333},{\"date\":\"2005-05-30\",\"fuel\":\"diesel\",\"avg_price\":2.16},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"avg_price\":2.1991666667},{\"date\":\"2005-06-06\",\"fuel\":\"diesel\",\"avg_price\":2.234},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"avg_price\":2.21325},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"avg_price\":2.2250833333},{\"date\":\"2005-06-13\",\"fuel\":\"diesel\",\"avg_price\":2.276},{\"date\":\"2005-06-20\",\"fuel\":\"diesel\",\"avg_price\":2.313},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"avg_price\":2.2561666667},{\"date\":\"2005-06-27\",\"fuel\":\"diesel\",\"avg_price\":2.336},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"avg_price\":2.3065},{\"date\":\"2005-07-04\",\"fuel\":\"diesel\",\"avg_price\":2.348},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"avg_price\":2.3208333333},{\"date\":\"2005-07-11\",\"fuel\":\"diesel\",\"avg_price\":2.408},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"avg_price\":2.4215},{\"date\":\"2005-07-18\",\"fuel\":\"diesel\",\"avg_price\":2.392},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"avg_price\":2.4158333333},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"avg_price\":2.394},{\"date\":\"2005-07-25\",\"fuel\":\"diesel\",\"avg_price\":2.342},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"avg_price\":2.3951666667},{\"date\":\"2005-08-01\",\"fuel\":\"diesel\",\"avg_price\":2.348},{\"date\":\"2005-08-08\",\"fuel\":\"diesel\",\"avg_price\":2.407},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"avg_price\":2.4658333333},{\"date\":\"2005-08-15\",\"fuel\":\"diesel\",\"avg_price\":2.567},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"avg_price\":2.6425},{\"date\":\"2005-08-22\",\"fuel\":\"diesel\",\"avg_price\":2.588},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"avg_price\":2.7038333333},{\"date\":\"2005-08-29\",\"fuel\":\"diesel\",\"avg_price\":2.59},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"avg_price\":2.7031666667},{\"date\":\"2005-09-05\",\"fuel\":\"diesel\",\"avg_price\":2.898},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"avg_price\":3.17175},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"avg_price\":3.0609166667},{\"date\":\"2005-09-12\",\"fuel\":\"diesel\",\"avg_price\":2.847},{\"date\":\"2005-09-19\",\"fuel\":\"diesel\",\"avg_price\":2.732},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"avg_price\":2.90075},{\"date\":\"2005-09-26\",\"fuel\":\"diesel\",\"avg_price\":2.798},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"avg_price\":2.9080833333},{\"date\":\"2005-10-03\",\"fuel\":\"diesel\",\"avg_price\":3.144},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"avg_price\":3.0210833333},{\"date\":\"2005-10-10\",\"fuel\":\"diesel\",\"avg_price\":3.15},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"avg_price\":2.9484166667},{\"date\":\"2005-10-17\",\"fuel\":\"diesel\",\"avg_price\":3.148},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"avg_price\":2.832},{\"date\":\"2005-10-24\",\"fuel\":\"diesel\",\"avg_price\":3.157},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"avg_price\":2.71075},{\"date\":\"2005-10-31\",\"fuel\":\"diesel\",\"avg_price\":2.876},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"avg_price\":2.5878333333},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"avg_price\":2.4826666667},{\"date\":\"2005-11-07\",\"fuel\":\"diesel\",\"avg_price\":2.698},{\"date\":\"2005-11-14\",\"fuel\":\"diesel\",\"avg_price\":2.602},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"avg_price\":2.39925},{\"date\":\"2005-11-21\",\"fuel\":\"diesel\",\"avg_price\":2.513},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"avg_price\":2.3025833333},{\"date\":\"2005-11-28\",\"fuel\":\"diesel\",\"avg_price\":2.479},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"avg_price\":2.2535833333},{\"date\":\"2005-12-05\",\"fuel\":\"diesel\",\"avg_price\":2.425},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"avg_price\":2.24},{\"date\":\"2005-12-12\",\"fuel\":\"diesel\",\"avg_price\":2.436},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"avg_price\":2.2729166667},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"avg_price\":2.2985833333},{\"date\":\"2005-12-19\",\"fuel\":\"diesel\",\"avg_price\":2.462},{\"date\":\"2005-12-26\",\"fuel\":\"diesel\",\"avg_price\":2.448},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"avg_price\":2.2854166667},{\"date\":\"2006-01-02\",\"fuel\":\"diesel\",\"avg_price\":2.442},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"avg_price\":2.32275},{\"date\":\"2006-01-09\",\"fuel\":\"diesel\",\"avg_price\":2.485},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"avg_price\":2.4150833333},{\"date\":\"2006-01-16\",\"fuel\":\"diesel\",\"avg_price\":2.449},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"avg_price\":2.4175},{\"date\":\"2006-01-23\",\"fuel\":\"diesel\",\"avg_price\":2.472},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"avg_price\":2.4330833333},{\"date\":\"2006-01-30\",\"fuel\":\"diesel\",\"avg_price\":2.489},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"avg_price\":2.4538333333},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"avg_price\":2.4425},{\"date\":\"2006-02-06\",\"fuel\":\"diesel\",\"avg_price\":2.499},{\"date\":\"2006-02-13\",\"fuel\":\"diesel\",\"avg_price\":2.476},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"avg_price\":2.3883333333},{\"date\":\"2006-02-20\",\"fuel\":\"diesel\",\"avg_price\":2.455},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"avg_price\":2.34125},{\"date\":\"2006-02-27\",\"fuel\":\"diesel\",\"avg_price\":2.471},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"avg_price\":2.3454166667},{\"date\":\"2006-03-06\",\"fuel\":\"diesel\",\"avg_price\":2.545},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"avg_price\":2.4161666667},{\"date\":\"2006-03-13\",\"fuel\":\"diesel\",\"avg_price\":2.543},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"avg_price\":2.4521666667},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"avg_price\":2.5919166667},{\"date\":\"2006-03-20\",\"fuel\":\"diesel\",\"avg_price\":2.581},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"avg_price\":2.58975},{\"date\":\"2006-03-27\",\"fuel\":\"diesel\",\"avg_price\":2.565},{\"date\":\"2006-04-03\",\"fuel\":\"diesel\",\"avg_price\":2.617},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"avg_price\":2.679},{\"date\":\"2006-04-10\",\"fuel\":\"diesel\",\"avg_price\":2.654},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"avg_price\":2.7751666667},{\"date\":\"2006-04-17\",\"fuel\":\"diesel\",\"avg_price\":2.765},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"avg_price\":2.87575},{\"date\":\"2006-04-24\",\"fuel\":\"diesel\",\"avg_price\":2.876},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"avg_price\":3.01425},{\"date\":\"2006-05-01\",\"fuel\":\"diesel\",\"avg_price\":2.896},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"avg_price\":3.0286666667},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"avg_price\":3.026},{\"date\":\"2006-05-08\",\"fuel\":\"diesel\",\"avg_price\":2.897},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"avg_price\":3.0613333333},{\"date\":\"2006-05-15\",\"fuel\":\"diesel\",\"avg_price\":2.92},{\"date\":\"2006-05-22\",\"fuel\":\"diesel\",\"avg_price\":2.888},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"avg_price\":3.0135833333},{\"date\":\"2006-05-29\",\"fuel\":\"diesel\",\"avg_price\":2.882},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"avg_price\":2.98525},{\"date\":\"2006-06-05\",\"fuel\":\"diesel\",\"avg_price\":2.89},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"avg_price\":3.0086666667},{\"date\":\"2006-06-12\",\"fuel\":\"diesel\",\"avg_price\":2.918},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"avg_price\":3.0198333333},{\"date\":\"2006-06-19\",\"fuel\":\"diesel\",\"avg_price\":2.915},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"avg_price\":2.9880833333},{\"date\":\"2006-06-26\",\"fuel\":\"diesel\",\"avg_price\":2.867},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"avg_price\":2.9829166667},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"avg_price\":3.0421666667},{\"date\":\"2006-07-03\",\"fuel\":\"diesel\",\"avg_price\":2.898},{\"date\":\"2006-07-10\",\"fuel\":\"diesel\",\"avg_price\":2.918},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"avg_price\":3.0805833333},{\"date\":\"2006-07-17\",\"fuel\":\"diesel\",\"avg_price\":2.926},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"avg_price\":3.09625},{\"date\":\"2006-07-24\",\"fuel\":\"diesel\",\"avg_price\":2.946},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"avg_price\":3.10925},{\"date\":\"2006-07-31\",\"fuel\":\"diesel\",\"avg_price\":2.98},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"avg_price\":3.1105833333},{\"date\":\"2006-08-07\",\"fuel\":\"diesel\",\"avg_price\":3.055},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"avg_price\":3.1380833333},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"avg_price\":3.1065833333},{\"date\":\"2006-08-14\",\"fuel\":\"diesel\",\"avg_price\":3.065},{\"date\":\"2006-08-21\",\"fuel\":\"diesel\",\"avg_price\":3.033},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"avg_price\":3.0330833333},{\"date\":\"2006-08-28\",\"fuel\":\"diesel\",\"avg_price\":3.027},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"avg_price\":2.9561666667},{\"date\":\"2006-09-04\",\"fuel\":\"diesel\",\"avg_price\":2.967},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"avg_price\":2.8425},{\"date\":\"2006-09-11\",\"fuel\":\"diesel\",\"avg_price\":2.857},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"avg_price\":2.73825},{\"date\":\"2006-09-18\",\"fuel\":\"diesel\",\"avg_price\":2.713},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"avg_price\":2.6185},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"avg_price\":2.4983333333},{\"date\":\"2006-09-25\",\"fuel\":\"diesel\",\"avg_price\":2.595},{\"date\":\"2006-10-02\",\"fuel\":\"diesel\",\"avg_price\":2.546},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"avg_price\":2.4245},{\"date\":\"2006-10-09\",\"fuel\":\"diesel\",\"avg_price\":2.506},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"avg_price\":2.37075},{\"date\":\"2006-10-16\",\"fuel\":\"diesel\",\"avg_price\":2.503},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"avg_price\":2.3316666667},{\"date\":\"2006-10-23\",\"fuel\":\"diesel\",\"avg_price\":2.524},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"avg_price\":2.3078333333},{\"date\":\"2006-10-30\",\"fuel\":\"diesel\",\"avg_price\":2.517},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"avg_price\":2.3133333333},{\"date\":\"2006-11-06\",\"fuel\":\"diesel\",\"avg_price\":2.506},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"avg_price\":2.2950833333},{\"date\":\"2006-11-13\",\"fuel\":\"diesel\",\"avg_price\":2.552},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"avg_price\":2.3283333333},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"avg_price\":2.3375833333},{\"date\":\"2006-11-20\",\"fuel\":\"diesel\",\"avg_price\":2.553},{\"date\":\"2006-11-27\",\"fuel\":\"diesel\",\"avg_price\":2.567},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"avg_price\":2.3456666667},{\"date\":\"2006-12-04\",\"fuel\":\"diesel\",\"avg_price\":2.618},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"avg_price\":2.3929166667},{\"date\":\"2006-12-11\",\"fuel\":\"diesel\",\"avg_price\":2.621},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"avg_price\":2.39325},{\"date\":\"2006-12-18\",\"fuel\":\"diesel\",\"avg_price\":2.606},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"avg_price\":2.4204166667},{\"date\":\"2006-12-25\",\"fuel\":\"diesel\",\"avg_price\":2.596},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"avg_price\":2.4443333333},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"avg_price\":2.4400833333},{\"date\":\"2007-01-01\",\"fuel\":\"diesel\",\"avg_price\":2.58},{\"date\":\"2007-01-08\",\"fuel\":\"diesel\",\"avg_price\":2.537},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"avg_price\":2.4170833333},{\"date\":\"2007-01-15\",\"fuel\":\"diesel\",\"avg_price\":2.463},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"avg_price\":2.3470833333},{\"date\":\"2007-01-22\",\"fuel\":\"diesel\",\"avg_price\":2.43},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"avg_price\":2.285},{\"date\":\"2007-01-29\",\"fuel\":\"diesel\",\"avg_price\":2.413},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"avg_price\":2.2755},{\"date\":\"2007-02-05\",\"fuel\":\"diesel\",\"avg_price\":2.4256666667},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"avg_price\":2.296},{\"date\":\"2007-02-12\",\"fuel\":\"diesel\",\"avg_price\":2.466},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"avg_price\":2.3460833333},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"avg_price\":2.3995833333},{\"date\":\"2007-02-19\",\"fuel\":\"diesel\",\"avg_price\":2.481},{\"date\":\"2007-02-26\",\"fuel\":\"diesel\",\"avg_price\":2.5423333333},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"avg_price\":2.4864166667},{\"date\":\"2007-03-05\",\"fuel\":\"diesel\",\"avg_price\":2.6166666667},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"avg_price\":2.6093333333},{\"date\":\"2007-03-12\",\"fuel\":\"diesel\",\"avg_price\":2.679},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"avg_price\":2.6698333333},{\"date\":\"2007-03-19\",\"fuel\":\"diesel\",\"avg_price\":2.673},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"avg_price\":2.6906666667},{\"date\":\"2007-03-26\",\"fuel\":\"diesel\",\"avg_price\":2.6666666667},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"avg_price\":2.7228333333},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"avg_price\":2.8213333333},{\"date\":\"2007-04-02\",\"fuel\":\"diesel\",\"avg_price\":2.7813333333},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"avg_price\":2.9113333333},{\"date\":\"2007-04-09\",\"fuel\":\"diesel\",\"avg_price\":2.8306666667},{\"date\":\"2007-04-16\",\"fuel\":\"diesel\",\"avg_price\":2.8696666667},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"avg_price\":2.9845833333},{\"date\":\"2007-04-23\",\"fuel\":\"diesel\",\"avg_price\":2.8416666667},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"avg_price\":2.9815833333},{\"date\":\"2007-04-30\",\"fuel\":\"diesel\",\"avg_price\":2.796},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"avg_price\":3.0775833333},{\"date\":\"2007-05-07\",\"fuel\":\"diesel\",\"avg_price\":2.7746666667},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"avg_price\":3.1566666667},{\"date\":\"2007-05-14\",\"fuel\":\"diesel\",\"avg_price\":2.755},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"avg_price\":3.1949166667},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"avg_price\":3.2998333333},{\"date\":\"2007-05-21\",\"fuel\":\"diesel\",\"avg_price\":2.7883333333},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"avg_price\":3.2950833333},{\"date\":\"2007-05-28\",\"fuel\":\"diesel\",\"avg_price\":2.8016666667},{\"date\":\"2007-06-04\",\"fuel\":\"diesel\",\"avg_price\":2.7833333333},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"avg_price\":3.2505},{\"date\":\"2007-06-11\",\"fuel\":\"diesel\",\"avg_price\":2.774},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"avg_price\":3.17925},{\"date\":\"2007-06-18\",\"fuel\":\"diesel\",\"avg_price\":2.7916666667},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"avg_price\":3.1141666667},{\"date\":\"2007-06-25\",\"fuel\":\"diesel\",\"avg_price\":2.8226666667},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"avg_price\":3.0856666667},{\"date\":\"2007-07-02\",\"fuel\":\"diesel\",\"avg_price\":2.8166666667},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"avg_price\":3.0596666667},{\"date\":\"2007-07-09\",\"fuel\":\"diesel\",\"avg_price\":2.839},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"avg_price\":3.0726666667},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"avg_price\":3.1346666667},{\"date\":\"2007-07-16\",\"fuel\":\"diesel\",\"avg_price\":2.875},{\"date\":\"2007-07-23\",\"fuel\":\"diesel\",\"avg_price\":2.8736666667},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"avg_price\":3.0573333333},{\"date\":\"2007-07-30\",\"fuel\":\"diesel\",\"avg_price\":2.872},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"avg_price\":2.9830833333},{\"date\":\"2007-08-06\",\"fuel\":\"diesel\",\"avg_price\":2.8846666667},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"avg_price\":2.9445},{\"date\":\"2007-08-13\",\"fuel\":\"diesel\",\"avg_price\":2.8326666667},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"avg_price\":2.8753333333},{\"date\":\"2007-08-20\",\"fuel\":\"diesel\",\"avg_price\":2.8573333333},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"avg_price\":2.8784166667},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"avg_price\":2.8395833333},{\"date\":\"2007-08-27\",\"fuel\":\"diesel\",\"avg_price\":2.8523333333},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"avg_price\":2.8755833333},{\"date\":\"2007-09-03\",\"fuel\":\"diesel\",\"avg_price\":2.8843333333},{\"date\":\"2007-09-10\",\"fuel\":\"diesel\",\"avg_price\":2.9156666667},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"avg_price\":2.8976666667},{\"date\":\"2007-09-17\",\"fuel\":\"diesel\",\"avg_price\":2.9563333333},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"avg_price\":2.8786666667},{\"date\":\"2007-09-24\",\"fuel\":\"diesel\",\"avg_price\":3.026},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"avg_price\":2.9046666667},{\"date\":\"2007-10-01\",\"fuel\":\"diesel\",\"avg_price\":3.04},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"avg_price\":2.8880833333},{\"date\":\"2007-10-08\",\"fuel\":\"diesel\",\"avg_price\":3.022},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"avg_price\":2.87325},{\"date\":\"2007-10-15\",\"fuel\":\"diesel\",\"avg_price\":3.0226666667},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"avg_price\":2.86825},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"avg_price\":2.9268333333},{\"date\":\"2007-10-22\",\"fuel\":\"diesel\",\"avg_price\":3.0756666667},{\"date\":\"2007-10-29\",\"fuel\":\"diesel\",\"avg_price\":3.141},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"avg_price\":2.97275},{\"date\":\"2007-11-05\",\"fuel\":\"diesel\",\"avg_price\":3.2913333333},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"avg_price\":3.1065},{\"date\":\"2007-11-12\",\"fuel\":\"diesel\",\"avg_price\":3.4103333333},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"avg_price\":3.2076666667},{\"date\":\"2007-11-19\",\"fuel\":\"diesel\",\"avg_price\":3.3896666667},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"avg_price\":3.2023333333},{\"date\":\"2007-11-26\",\"fuel\":\"diesel\",\"avg_price\":3.4273333333},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"avg_price\":3.2025833333},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"avg_price\":3.17275},{\"date\":\"2007-12-03\",\"fuel\":\"diesel\",\"avg_price\":3.393},{\"date\":\"2007-12-10\",\"fuel\":\"diesel\",\"avg_price\":3.2963333333},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"avg_price\":3.11825},{\"date\":\"2007-12-17\",\"fuel\":\"diesel\",\"avg_price\":3.2816666667},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"avg_price\":3.1125},{\"date\":\"2007-12-24\",\"fuel\":\"diesel\",\"avg_price\":3.2846666667},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"avg_price\":3.0951666667},{\"date\":\"2007-12-31\",\"fuel\":\"diesel\",\"avg_price\":3.3243333333},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"avg_price\":3.1611666667},{\"date\":\"2008-01-07\",\"fuel\":\"diesel\",\"avg_price\":3.3546666667},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"avg_price\":3.214},{\"date\":\"2008-01-14\",\"fuel\":\"diesel\",\"avg_price\":3.2986666667},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"avg_price\":3.1775833333},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"avg_price\":3.1298333333},{\"date\":\"2008-01-21\",\"fuel\":\"diesel\",\"avg_price\":3.2416666667},{\"date\":\"2008-01-28\",\"fuel\":\"diesel\",\"avg_price\":3.234},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"avg_price\":3.0889166667},{\"date\":\"2008-02-04\",\"fuel\":\"diesel\",\"avg_price\":3.2593333333},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"avg_price\":3.08375},{\"date\":\"2008-02-11\",\"fuel\":\"diesel\",\"avg_price\":3.258},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"avg_price\":3.0645},{\"date\":\"2008-02-18\",\"fuel\":\"diesel\",\"avg_price\":3.3786666667},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"avg_price\":3.1416666667},{\"date\":\"2008-02-25\",\"fuel\":\"diesel\",\"avg_price\":3.5403333333},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"avg_price\":3.2320833333},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"avg_price\":3.2688333333},{\"date\":\"2008-03-03\",\"fuel\":\"diesel\",\"avg_price\":3.6403333333},{\"date\":\"2008-03-10\",\"fuel\":\"diesel\",\"avg_price\":3.806},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"avg_price\":3.3283333333},{\"date\":\"2008-03-17\",\"fuel\":\"diesel\",\"avg_price\":3.96},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"avg_price\":3.3881666667},{\"date\":\"2008-03-24\",\"fuel\":\"diesel\",\"avg_price\":3.973},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"avg_price\":3.3705},{\"date\":\"2008-03-31\",\"fuel\":\"diesel\",\"avg_price\":3.9416666667},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"avg_price\":3.3976666667},{\"date\":\"2008-04-07\",\"fuel\":\"diesel\",\"avg_price\":3.932},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"avg_price\":3.4386666667},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"avg_price\":3.4974166667},{\"date\":\"2008-04-14\",\"fuel\":\"diesel\",\"avg_price\":4.0383333333},{\"date\":\"2008-04-21\",\"fuel\":\"diesel\",\"avg_price\":4.1216666667},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"avg_price\":3.618},{\"date\":\"2008-04-28\",\"fuel\":\"diesel\",\"avg_price\":4.154},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"avg_price\":3.7129166667},{\"date\":\"2008-05-05\",\"fuel\":\"diesel\",\"avg_price\":4.12},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"avg_price\":3.72475},{\"date\":\"2008-05-12\",\"fuel\":\"diesel\",\"avg_price\":4.3113333333},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"avg_price\":3.8268333333},{\"date\":\"2008-05-19\",\"fuel\":\"diesel\",\"avg_price\":4.4823333333},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"avg_price\":3.8965},{\"date\":\"2008-05-26\",\"fuel\":\"diesel\",\"avg_price\":4.7043333333},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"avg_price\":4.0405833333},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"avg_price\":4.0870833333},{\"date\":\"2008-06-02\",\"fuel\":\"diesel\",\"avg_price\":4.6863333333},{\"date\":\"2008-06-09\",\"fuel\":\"diesel\",\"avg_price\":4.668},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"avg_price\":4.1576666667},{\"date\":\"2008-06-16\",\"fuel\":\"diesel\",\"avg_price\":4.6666666667},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"avg_price\":4.2085},{\"date\":\"2008-06-23\",\"fuel\":\"diesel\",\"avg_price\":4.6196666667},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"avg_price\":4.2068333333},{\"date\":\"2008-06-30\",\"fuel\":\"diesel\",\"avg_price\":4.6186666667},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"avg_price\":4.2181666667},{\"date\":\"2008-07-07\",\"fuel\":\"diesel\",\"avg_price\":4.712},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"avg_price\":4.2355833333},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"avg_price\":4.2320833333},{\"date\":\"2008-07-14\",\"fuel\":\"diesel\",\"avg_price\":4.7473333333},{\"date\":\"2008-07-21\",\"fuel\":\"diesel\",\"avg_price\":4.692},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"avg_price\":4.1891666667},{\"date\":\"2008-07-28\",\"fuel\":\"diesel\",\"avg_price\":4.5763333333},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"avg_price\":4.0839166667},{\"date\":\"2008-08-04\",\"fuel\":\"diesel\",\"avg_price\":4.4706666667},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"avg_price\":4.0065833333},{\"date\":\"2008-08-11\",\"fuel\":\"diesel\",\"avg_price\":4.3203333333},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"avg_price\":3.9318333333},{\"date\":\"2008-08-18\",\"fuel\":\"diesel\",\"avg_price\":4.176},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"avg_price\":3.8578333333},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"avg_price\":3.7986666667},{\"date\":\"2008-08-25\",\"fuel\":\"diesel\",\"avg_price\":4.114},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"avg_price\":3.7900833333},{\"date\":\"2008-09-01\",\"fuel\":\"diesel\",\"avg_price\":4.0903333333},{\"date\":\"2008-09-08\",\"fuel\":\"diesel\",\"avg_price\":4.0233333333},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"avg_price\":3.7563333333},{\"date\":\"2008-09-15\",\"fuel\":\"diesel\",\"avg_price\":3.997},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"avg_price\":3.9248333333},{\"date\":\"2008-09-22\",\"fuel\":\"diesel\",\"avg_price\":3.9366666667},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"avg_price\":3.81875},{\"date\":\"2008-09-29\",\"fuel\":\"diesel\",\"avg_price\":3.9383333333},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"avg_price\":3.73675},{\"date\":\"2008-10-06\",\"fuel\":\"diesel\",\"avg_price\":3.8476666667},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"avg_price\":3.598},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"avg_price\":3.2870833333},{\"date\":\"2008-10-13\",\"fuel\":\"diesel\",\"avg_price\":3.6296666667},{\"date\":\"2008-10-20\",\"fuel\":\"diesel\",\"avg_price\":3.4456666667},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"avg_price\":3.0535},{\"date\":\"2008-10-27\",\"fuel\":\"diesel\",\"avg_price\":3.259},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"avg_price\":2.801},{\"date\":\"2008-11-03\",\"fuel\":\"diesel\",\"avg_price\":3.0606666667},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"avg_price\":2.5434166667},{\"date\":\"2008-11-10\",\"fuel\":\"diesel\",\"avg_price\":2.9103333333},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"avg_price\":2.3621666667},{\"date\":\"2008-11-17\",\"fuel\":\"diesel\",\"avg_price\":2.7766666667},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"avg_price\":2.2063333333},{\"date\":\"2008-11-24\",\"fuel\":\"diesel\",\"avg_price\":2.637},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"avg_price\":2.0235},{\"date\":\"2008-12-01\",\"fuel\":\"diesel\",\"avg_price\":2.5943333333},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"avg_price\":1.9355833333},{\"date\":\"2008-12-08\",\"fuel\":\"diesel\",\"avg_price\":2.519},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"avg_price\":1.8225833333},{\"date\":\"2008-12-15\",\"fuel\":\"diesel\",\"avg_price\":2.426},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"avg_price\":1.7749166667},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"avg_price\":1.7714166667},{\"date\":\"2008-12-22\",\"fuel\":\"diesel\",\"avg_price\":2.3695},{\"date\":\"2008-12-29\",\"fuel\":\"diesel\",\"avg_price\":2.331},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"avg_price\":1.7331666667},{\"date\":\"2009-01-05\",\"fuel\":\"diesel\",\"avg_price\":2.295},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"avg_price\":1.7925},{\"date\":\"2009-01-12\",\"fuel\":\"diesel\",\"avg_price\":2.319},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"avg_price\":1.8889166667},{\"date\":\"2009-01-19\",\"fuel\":\"diesel\",\"avg_price\":2.3015},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"avg_price\":1.9520833333},{\"date\":\"2009-01-26\",\"fuel\":\"diesel\",\"avg_price\":2.273},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"avg_price\":1.9475833333},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"avg_price\":2.0001666667},{\"date\":\"2009-02-02\",\"fuel\":\"diesel\",\"avg_price\":2.251},{\"date\":\"2009-02-09\",\"fuel\":\"diesel\",\"avg_price\":2.2245},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"avg_price\":2.0380833333},{\"date\":\"2009-02-16\",\"fuel\":\"diesel\",\"avg_price\":2.1915},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"avg_price\":2.0774166667},{\"date\":\"2009-02-23\",\"fuel\":\"diesel\",\"avg_price\":2.134},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"avg_price\":2.029},{\"date\":\"2009-03-02\",\"fuel\":\"diesel\",\"avg_price\":2.091},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"avg_price\":2.04775},{\"date\":\"2009-03-09\",\"fuel\":\"diesel\",\"avg_price\":2.048},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"avg_price\":2.0509166667},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"avg_price\":2.0240833333},{\"date\":\"2009-03-16\",\"fuel\":\"diesel\",\"avg_price\":2.02},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"avg_price\":2.0690833333},{\"date\":\"2009-03-23\",\"fuel\":\"diesel\",\"avg_price\":2.0915},{\"date\":\"2009-03-30\",\"fuel\":\"diesel\",\"avg_price\":2.223},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"avg_price\":2.1516666667},{\"date\":\"2009-04-06\",\"fuel\":\"diesel\",\"avg_price\":2.2305},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"avg_price\":2.14875},{\"date\":\"2009-04-13\",\"fuel\":\"diesel\",\"avg_price\":2.2315},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"avg_price\":2.1625833333},{\"date\":\"2009-04-20\",\"fuel\":\"diesel\",\"avg_price\":2.2235},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"avg_price\":2.1716666667},{\"date\":\"2009-04-27\",\"fuel\":\"diesel\",\"avg_price\":2.204},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"avg_price\":2.1639166667},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"avg_price\":2.1895},{\"date\":\"2009-05-04\",\"fuel\":\"diesel\",\"avg_price\":2.1885},{\"date\":\"2009-05-11\",\"fuel\":\"diesel\",\"avg_price\":2.2195},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"avg_price\":2.3448333333},{\"date\":\"2009-05-18\",\"fuel\":\"diesel\",\"avg_price\":2.234},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"avg_price\":2.418},{\"date\":\"2009-05-25\",\"fuel\":\"diesel\",\"avg_price\":2.276},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"avg_price\":2.5395},{\"date\":\"2009-06-01\",\"fuel\":\"diesel\",\"avg_price\":2.353},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"avg_price\":2.625},{\"date\":\"2009-06-08\",\"fuel\":\"diesel\",\"avg_price\":2.4995},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"avg_price\":2.727},{\"date\":\"2009-06-15\",\"fuel\":\"diesel\",\"avg_price\":2.5735},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"avg_price\":2.7804166667},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"avg_price\":2.8056666667},{\"date\":\"2009-06-22\",\"fuel\":\"diesel\",\"avg_price\":2.6175},{\"date\":\"2009-06-29\",\"fuel\":\"diesel\",\"avg_price\":2.61},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"avg_price\":2.7625833333},{\"date\":\"2009-07-06\",\"fuel\":\"diesel\",\"avg_price\":2.596},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"avg_price\":2.7340833333},{\"date\":\"2009-07-13\",\"fuel\":\"diesel\",\"avg_price\":2.544},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"avg_price\":2.6543333333},{\"date\":\"2009-07-20\",\"fuel\":\"diesel\",\"avg_price\":2.4985},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"avg_price\":2.5905833333},{\"date\":\"2009-07-27\",\"fuel\":\"diesel\",\"avg_price\":2.53},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"avg_price\":2.6231666667},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"avg_price\":2.6755833333},{\"date\":\"2009-08-03\",\"fuel\":\"diesel\",\"avg_price\":2.552},{\"date\":\"2009-08-10\",\"fuel\":\"diesel\",\"avg_price\":2.6265},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"avg_price\":2.76725},{\"date\":\"2009-08-17\",\"fuel\":\"diesel\",\"avg_price\":2.654},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"avg_price\":2.7614166667},{\"date\":\"2009-08-24\",\"fuel\":\"diesel\",\"avg_price\":2.67},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"avg_price\":2.75225},{\"date\":\"2009-08-31\",\"fuel\":\"diesel\",\"avg_price\":2.6765},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"avg_price\":2.7399166667},{\"date\":\"2009-09-07\",\"fuel\":\"diesel\",\"avg_price\":2.6485},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"avg_price\":2.7181666667},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"avg_price\":2.7104166667},{\"date\":\"2009-09-14\",\"fuel\":\"diesel\",\"avg_price\":2.636},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"avg_price\":2.6855833333},{\"date\":\"2009-09-21\",\"fuel\":\"diesel\",\"avg_price\":2.624},{\"date\":\"2009-09-28\",\"fuel\":\"diesel\",\"avg_price\":2.6035},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"avg_price\":2.6331666667},{\"date\":\"2009-10-05\",\"fuel\":\"diesel\",\"avg_price\":2.585},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"avg_price\":2.6019166667},{\"date\":\"2009-10-12\",\"fuel\":\"diesel\",\"avg_price\":2.602},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"avg_price\":2.6148333333},{\"date\":\"2009-10-19\",\"fuel\":\"diesel\",\"avg_price\":2.7065},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"avg_price\":2.6908333333},{\"date\":\"2009-10-26\",\"fuel\":\"diesel\",\"avg_price\":2.803},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"avg_price\":2.7878333333},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"avg_price\":2.80825},{\"date\":\"2009-11-02\",\"fuel\":\"diesel\",\"avg_price\":2.8095},{\"date\":\"2009-11-09\",\"fuel\":\"diesel\",\"avg_price\":2.803},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"avg_price\":2.78425},{\"date\":\"2009-11-16\",\"fuel\":\"diesel\",\"avg_price\":2.7925},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"avg_price\":2.7516666667},{\"date\":\"2009-11-23\",\"fuel\":\"diesel\",\"avg_price\":2.7895},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"avg_price\":2.7580833333},{\"date\":\"2009-11-30\",\"fuel\":\"diesel\",\"avg_price\":2.7775},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"avg_price\":2.74875},{\"date\":\"2009-12-07\",\"fuel\":\"diesel\",\"avg_price\":2.7745},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"avg_price\":2.7535833333},{\"date\":\"2009-12-14\",\"fuel\":\"diesel\",\"avg_price\":2.7505},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"avg_price\":2.72225},{\"date\":\"2009-12-21\",\"fuel\":\"diesel\",\"avg_price\":2.7285},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"avg_price\":2.7128333333},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"avg_price\":2.7283333333},{\"date\":\"2009-12-28\",\"fuel\":\"diesel\",\"avg_price\":2.734},{\"date\":\"2010-01-04\",\"fuel\":\"diesel\",\"avg_price\":2.799},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"avg_price\":2.7819166667},{\"date\":\"2010-01-11\",\"fuel\":\"diesel\",\"avg_price\":2.8805},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"avg_price\":2.8648333333},{\"date\":\"2010-01-18\",\"fuel\":\"diesel\",\"avg_price\":2.872},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"avg_price\":2.8563333333},{\"date\":\"2010-01-25\",\"fuel\":\"diesel\",\"avg_price\":2.8355},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"avg_price\":2.8261666667},{\"date\":\"2010-02-01\",\"fuel\":\"diesel\",\"avg_price\":2.784},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"avg_price\":2.784},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"avg_price\":2.7740833333},{\"date\":\"2010-02-08\",\"fuel\":\"diesel\",\"avg_price\":2.772},{\"date\":\"2010-02-15\",\"fuel\":\"diesel\",\"avg_price\":2.7585},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"avg_price\":2.7338333333},{\"date\":\"2010-02-22\",\"fuel\":\"diesel\",\"avg_price\":2.833},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"avg_price\":2.7724166667},{\"date\":\"2010-03-01\",\"fuel\":\"diesel\",\"avg_price\":2.863},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"avg_price\":2.8181666667},{\"date\":\"2010-03-08\",\"fuel\":\"diesel\",\"avg_price\":2.905},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"avg_price\":2.864},{\"date\":\"2010-03-15\",\"fuel\":\"diesel\",\"avg_price\":2.925},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"avg_price\":2.8996666667},{\"date\":\"2010-03-22\",\"fuel\":\"diesel\",\"avg_price\":2.9475},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"avg_price\":2.92825},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"avg_price\":2.91175},{\"date\":\"2010-03-29\",\"fuel\":\"diesel\",\"avg_price\":2.9405},{\"date\":\"2010-04-05\",\"fuel\":\"diesel\",\"avg_price\":3.016},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"avg_price\":2.93575},{\"date\":\"2010-04-12\",\"fuel\":\"diesel\",\"avg_price\":3.071},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"avg_price\":2.9665833333},{\"date\":\"2010-04-19\",\"fuel\":\"diesel\",\"avg_price\":3.076},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"avg_price\":2.9691666667},{\"date\":\"2010-04-26\",\"fuel\":\"diesel\",\"avg_price\":3.08},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"avg_price\":2.9620833333},{\"date\":\"2010-05-03\",\"fuel\":\"diesel\",\"avg_price\":3.124},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"avg_price\":3.0093333333},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"avg_price\":3.0193333333},{\"date\":\"2010-05-10\",\"fuel\":\"diesel\",\"avg_price\":3.129},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"avg_price\":2.983},{\"date\":\"2010-05-17\",\"fuel\":\"diesel\",\"avg_price\":3.096},{\"date\":\"2010-05-24\",\"fuel\":\"diesel\",\"avg_price\":3.023},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"avg_price\":2.9106666667},{\"date\":\"2010-05-31\",\"fuel\":\"diesel\",\"avg_price\":2.9815},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"avg_price\":2.85425},{\"date\":\"2010-06-07\",\"fuel\":\"diesel\",\"avg_price\":2.9475},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"avg_price\":2.8503333333},{\"date\":\"2010-06-14\",\"fuel\":\"diesel\",\"avg_price\":2.929},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"avg_price\":2.8255},{\"date\":\"2010-06-21\",\"fuel\":\"diesel\",\"avg_price\":2.9615},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"avg_price\":2.8619166667},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"avg_price\":2.87475},{\"date\":\"2010-06-28\",\"fuel\":\"diesel\",\"avg_price\":2.9565},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"avg_price\":2.8473333333},{\"date\":\"2010-07-05\",\"fuel\":\"diesel\",\"avg_price\":2.9245},{\"date\":\"2010-07-12\",\"fuel\":\"diesel\",\"avg_price\":2.9035},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"avg_price\":2.84},{\"date\":\"2010-07-19\",\"fuel\":\"diesel\",\"avg_price\":2.899},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"avg_price\":2.8430833333},{\"date\":\"2010-07-26\",\"fuel\":\"diesel\",\"avg_price\":2.919},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"avg_price\":2.8665},{\"date\":\"2010-08-02\",\"fuel\":\"diesel\",\"avg_price\":2.928},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"avg_price\":2.8558333333},{\"date\":\"2010-08-09\",\"fuel\":\"diesel\",\"avg_price\":2.991},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"avg_price\":2.8999166667},{\"date\":\"2010-08-16\",\"fuel\":\"diesel\",\"avg_price\":2.979},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"avg_price\":2.86625},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"avg_price\":2.8288333333},{\"date\":\"2010-08-23\",\"fuel\":\"diesel\",\"avg_price\":2.957},{\"date\":\"2010-08-30\",\"fuel\":\"diesel\",\"avg_price\":2.938},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"avg_price\":2.8029166667},{\"date\":\"2010-09-06\",\"fuel\":\"diesel\",\"avg_price\":2.931},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"avg_price\":2.7980833333},{\"date\":\"2010-09-13\",\"fuel\":\"diesel\",\"avg_price\":2.943},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"avg_price\":2.8306666667},{\"date\":\"2010-09-20\",\"fuel\":\"diesel\",\"avg_price\":2.96},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"avg_price\":2.83275},{\"date\":\"2010-09-27\",\"fuel\":\"diesel\",\"avg_price\":2.951},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"avg_price\":2.8078333333},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"avg_price\":2.8433333333},{\"date\":\"2010-10-04\",\"fuel\":\"diesel\",\"avg_price\":3},{\"date\":\"2010-10-11\",\"fuel\":\"diesel\",\"avg_price\":3.066},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"avg_price\":2.92875},{\"date\":\"2010-10-18\",\"fuel\":\"diesel\",\"avg_price\":3.073},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"avg_price\":2.9503333333},{\"date\":\"2010-10-25\",\"fuel\":\"diesel\",\"avg_price\":3.067},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"avg_price\":2.9365},{\"date\":\"2010-11-01\",\"fuel\":\"diesel\",\"avg_price\":3.067},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"avg_price\":2.9285833333},{\"date\":\"2010-11-08\",\"fuel\":\"diesel\",\"avg_price\":3.116},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"avg_price\":2.9778333333},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"avg_price\":3.0080833333},{\"date\":\"2010-11-15\",\"fuel\":\"diesel\",\"avg_price\":3.184},{\"date\":\"2010-11-22\",\"fuel\":\"diesel\",\"avg_price\":3.171},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"avg_price\":3},{\"date\":\"2010-11-29\",\"fuel\":\"diesel\",\"avg_price\":3.162},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"avg_price\":2.9825833333},{\"date\":\"2010-12-06\",\"fuel\":\"diesel\",\"avg_price\":3.197},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"avg_price\":3.0786666667},{\"date\":\"2010-12-13\",\"fuel\":\"diesel\",\"avg_price\":3.231},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"avg_price\":3.1004166667},{\"date\":\"2010-12-20\",\"fuel\":\"diesel\",\"avg_price\":3.248},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"avg_price\":3.10525},{\"date\":\"2010-12-27\",\"fuel\":\"diesel\",\"avg_price\":3.294},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"avg_price\":3.1688333333},{\"date\":\"2011-01-03\",\"fuel\":\"diesel\",\"avg_price\":3.331},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"avg_price\":3.1865},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"avg_price\":3.2041666667},{\"date\":\"2011-01-10\",\"fuel\":\"diesel\",\"avg_price\":3.333},{\"date\":\"2011-01-17\",\"fuel\":\"diesel\",\"avg_price\":3.407},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"avg_price\":3.2201666667},{\"date\":\"2011-01-24\",\"fuel\":\"diesel\",\"avg_price\":3.43},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"avg_price\":3.2259166667},{\"date\":\"2011-01-31\",\"fuel\":\"diesel\",\"avg_price\":3.438},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"avg_price\":3.2195},{\"date\":\"2011-02-07\",\"fuel\":\"diesel\",\"avg_price\":3.513},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"avg_price\":3.2478333333},{\"date\":\"2011-02-14\",\"fuel\":\"diesel\",\"avg_price\":3.534},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"avg_price\":3.2588333333},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"avg_price\":3.3095},{\"date\":\"2011-02-21\",\"fuel\":\"diesel\",\"avg_price\":3.573},{\"date\":\"2011-02-28\",\"fuel\":\"diesel\",\"avg_price\":3.716},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"avg_price\":3.4985833333},{\"date\":\"2011-03-07\",\"fuel\":\"diesel\",\"avg_price\":3.871},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"avg_price\":3.6375833333},{\"date\":\"2011-03-14\",\"fuel\":\"diesel\",\"avg_price\":3.908},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"avg_price\":3.6886666667},{\"date\":\"2011-03-21\",\"fuel\":\"diesel\",\"avg_price\":3.907},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"avg_price\":3.6863333333},{\"date\":\"2011-03-28\",\"fuel\":\"diesel\",\"avg_price\":3.932},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"avg_price\":3.7195},{\"date\":\"2011-04-04\",\"fuel\":\"diesel\",\"avg_price\":3.976},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"avg_price\":3.8025},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"avg_price\":3.909},{\"date\":\"2011-04-11\",\"fuel\":\"diesel\",\"avg_price\":4.078},{\"date\":\"2011-04-18\",\"fuel\":\"diesel\",\"avg_price\":4.105},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"avg_price\":3.9649166667},{\"date\":\"2011-04-25\",\"fuel\":\"diesel\",\"avg_price\":4.098},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"avg_price\":4.002},{\"date\":\"2011-05-02\",\"fuel\":\"diesel\",\"avg_price\":4.124},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"avg_price\":4.0819166667},{\"date\":\"2011-05-09\",\"fuel\":\"diesel\",\"avg_price\":4.104},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"avg_price\":4.08775},{\"date\":\"2011-05-16\",\"fuel\":\"diesel\",\"avg_price\":4.061},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"avg_price\":4.0836666667},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"avg_price\":3.9784166667},{\"date\":\"2011-05-23\",\"fuel\":\"diesel\",\"avg_price\":3.997},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"avg_price\":3.91875},{\"date\":\"2011-05-30\",\"fuel\":\"diesel\",\"avg_price\":3.948},{\"date\":\"2011-06-06\",\"fuel\":\"diesel\",\"avg_price\":3.94},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"avg_price\":3.8975},{\"date\":\"2011-06-13\",\"fuel\":\"diesel\",\"avg_price\":3.954},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"avg_price\":3.8353333333},{\"date\":\"2011-06-20\",\"fuel\":\"diesel\",\"avg_price\":3.95},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"avg_price\":3.7805833333},{\"date\":\"2011-06-27\",\"fuel\":\"diesel\",\"avg_price\":3.888},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"avg_price\":3.7065833333},{\"date\":\"2011-07-04\",\"fuel\":\"diesel\",\"avg_price\":3.85},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"avg_price\":3.7025},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"avg_price\":3.7580833333},{\"date\":\"2011-07-11\",\"fuel\":\"diesel\",\"avg_price\":3.899},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"avg_price\":3.7989166667},{\"date\":\"2011-07-18\",\"fuel\":\"diesel\",\"avg_price\":3.923},{\"date\":\"2011-07-25\",\"fuel\":\"diesel\",\"avg_price\":3.949},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"avg_price\":3.8170833333},{\"date\":\"2011-08-01\",\"fuel\":\"diesel\",\"avg_price\":3.937},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"avg_price\":3.8271666667},{\"date\":\"2011-08-08\",\"fuel\":\"diesel\",\"avg_price\":3.897},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"avg_price\":3.79175},{\"date\":\"2011-08-15\",\"fuel\":\"diesel\",\"avg_price\":3.835},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"avg_price\":3.7258333333},{\"date\":\"2011-08-22\",\"fuel\":\"diesel\",\"avg_price\":3.81},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"avg_price\":3.70175},{\"date\":\"2011-08-29\",\"fuel\":\"diesel\",\"avg_price\":3.82},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"avg_price\":3.7428333333},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"avg_price\":3.7889166667},{\"date\":\"2011-09-05\",\"fuel\":\"diesel\",\"avg_price\":3.868},{\"date\":\"2011-09-12\",\"fuel\":\"diesel\",\"avg_price\":3.862},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"avg_price\":3.7779166667},{\"date\":\"2011-09-19\",\"fuel\":\"diesel\",\"avg_price\":3.833},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"avg_price\":3.7255},{\"date\":\"2011-09-26\",\"fuel\":\"diesel\",\"avg_price\":3.786},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"avg_price\":3.6406666667},{\"date\":\"2011-10-03\",\"fuel\":\"diesel\",\"avg_price\":3.749},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"avg_price\":3.5676666667},{\"date\":\"2011-10-10\",\"fuel\":\"diesel\",\"avg_price\":3.721},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"avg_price\":3.5489166667},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"avg_price\":3.6025},{\"date\":\"2011-10-17\",\"fuel\":\"diesel\",\"avg_price\":3.801},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"avg_price\":3.5915},{\"date\":\"2011-10-24\",\"fuel\":\"diesel\",\"avg_price\":3.825},{\"date\":\"2011-10-31\",\"fuel\":\"diesel\",\"avg_price\":3.892},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"avg_price\":3.5828333333},{\"date\":\"2011-11-07\",\"fuel\":\"diesel\",\"avg_price\":3.887},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"avg_price\":3.5561666667},{\"date\":\"2011-11-14\",\"fuel\":\"diesel\",\"avg_price\":3.987},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"avg_price\":3.56775},{\"date\":\"2011-11-21\",\"fuel\":\"diesel\",\"avg_price\":4.01},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"avg_price\":3.5034166667},{\"date\":\"2011-11-28\",\"fuel\":\"diesel\",\"avg_price\":3.964},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"avg_price\":3.447},{\"date\":\"2011-12-05\",\"fuel\":\"diesel\",\"avg_price\":3.931},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"avg_price\":3.4248333333},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"avg_price\":3.4170833333},{\"date\":\"2011-12-12\",\"fuel\":\"diesel\",\"avg_price\":3.894},{\"date\":\"2011-12-19\",\"fuel\":\"diesel\",\"avg_price\":3.828},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"avg_price\":3.3644166667},{\"date\":\"2011-12-26\",\"fuel\":\"diesel\",\"avg_price\":3.791},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"avg_price\":3.3875},{\"date\":\"2012-01-02\",\"fuel\":\"diesel\",\"avg_price\":3.783},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"avg_price\":3.429},{\"date\":\"2012-01-09\",\"fuel\":\"diesel\",\"avg_price\":3.828},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"avg_price\":3.513},{\"date\":\"2012-01-16\",\"fuel\":\"diesel\",\"avg_price\":3.854},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"avg_price\":3.52275},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"avg_price\":3.5246666667},{\"date\":\"2012-01-23\",\"fuel\":\"diesel\",\"avg_price\":3.848},{\"date\":\"2012-01-30\",\"fuel\":\"diesel\",\"avg_price\":3.85},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"avg_price\":3.5743333333},{\"date\":\"2012-02-06\",\"fuel\":\"diesel\",\"avg_price\":3.856},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"avg_price\":3.61375},{\"date\":\"2012-02-13\",\"fuel\":\"diesel\",\"avg_price\":3.943},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"avg_price\":3.6596666667},{\"date\":\"2012-02-20\",\"fuel\":\"diesel\",\"avg_price\":3.96},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"avg_price\":3.732},{\"date\":\"2012-02-27\",\"fuel\":\"diesel\",\"avg_price\":4.051},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"avg_price\":3.8614166667},{\"date\":\"2012-03-05\",\"fuel\":\"diesel\",\"avg_price\":4.094},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"avg_price\":3.9273333333},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"avg_price\":3.964},{\"date\":\"2012-03-12\",\"fuel\":\"diesel\",\"avg_price\":4.123},{\"date\":\"2012-03-19\",\"fuel\":\"diesel\",\"avg_price\":4.142},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"avg_price\":4.0018333333},{\"date\":\"2012-03-26\",\"fuel\":\"diesel\",\"avg_price\":4.147},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"avg_price\":4.0504166667},{\"date\":\"2012-04-02\",\"fuel\":\"diesel\",\"avg_price\":4.142},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"avg_price\":4.0706666667},{\"date\":\"2012-04-09\",\"fuel\":\"diesel\",\"avg_price\":4.148},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"avg_price\":4.07175},{\"date\":\"2012-04-16\",\"fuel\":\"diesel\",\"avg_price\":4.127},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"avg_price\":4.0521666667},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"avg_price\":4.0058333333},{\"date\":\"2012-04-23\",\"fuel\":\"diesel\",\"avg_price\":4.085},{\"date\":\"2012-04-30\",\"fuel\":\"diesel\",\"avg_price\":4.073},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"avg_price\":3.9668333333},{\"date\":\"2012-05-07\",\"fuel\":\"diesel\",\"avg_price\":4.057},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"avg_price\":3.92975},{\"date\":\"2012-05-14\",\"fuel\":\"diesel\",\"avg_price\":4.004},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"avg_price\":3.905},{\"date\":\"2012-05-21\",\"fuel\":\"diesel\",\"avg_price\":3.956},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"avg_price\":3.8615},{\"date\":\"2012-05-28\",\"fuel\":\"diesel\",\"avg_price\":3.897},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"avg_price\":3.8170833333},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"avg_price\":3.7609166667},{\"date\":\"2012-06-04\",\"fuel\":\"diesel\",\"avg_price\":3.846},{\"date\":\"2012-06-11\",\"fuel\":\"diesel\",\"avg_price\":3.781},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"avg_price\":3.7135833333},{\"date\":\"2012-06-18\",\"fuel\":\"diesel\",\"avg_price\":3.729},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"avg_price\":3.6640833333},{\"date\":\"2012-06-25\",\"fuel\":\"diesel\",\"avg_price\":3.678},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"avg_price\":3.5713333333},{\"date\":\"2012-07-02\",\"fuel\":\"diesel\",\"avg_price\":3.648},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"avg_price\":3.4944166667},{\"date\":\"2012-07-09\",\"fuel\":\"diesel\",\"avg_price\":3.683},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"avg_price\":3.5433333333},{\"date\":\"2012-07-16\",\"fuel\":\"diesel\",\"avg_price\":3.695},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"avg_price\":3.5616666667},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"avg_price\":3.6311666667},{\"date\":\"2012-07-23\",\"fuel\":\"diesel\",\"avg_price\":3.783},{\"date\":\"2012-07-30\",\"fuel\":\"diesel\",\"avg_price\":3.796},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"avg_price\":3.6438333333},{\"date\":\"2012-08-06\",\"fuel\":\"diesel\",\"avg_price\":3.85},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"avg_price\":3.76925},{\"date\":\"2012-08-13\",\"fuel\":\"diesel\",\"avg_price\":3.965},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"avg_price\":3.8539166667},{\"date\":\"2012-08-20\",\"fuel\":\"diesel\",\"avg_price\":4.026},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"avg_price\":3.8799166667},{\"date\":\"2012-08-27\",\"fuel\":\"diesel\",\"avg_price\":4.089},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"avg_price\":3.9118333333},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"avg_price\":3.974},{\"date\":\"2012-09-03\",\"fuel\":\"diesel\",\"avg_price\":4.127},{\"date\":\"2012-09-10\",\"fuel\":\"diesel\",\"avg_price\":4.132},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"avg_price\":3.9806666667},{\"date\":\"2012-09-17\",\"fuel\":\"diesel\",\"avg_price\":4.135},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"avg_price\":4.012},{\"date\":\"2012-09-24\",\"fuel\":\"diesel\",\"avg_price\":4.086},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"avg_price\":3.9665833333},{\"date\":\"2012-10-01\",\"fuel\":\"diesel\",\"avg_price\":4.079},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"avg_price\":3.94525},{\"date\":\"2012-10-08\",\"fuel\":\"diesel\",\"avg_price\":4.094},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"avg_price\":4.0136666667},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"avg_price\":3.98625},{\"date\":\"2012-10-15\",\"fuel\":\"diesel\",\"avg_price\":4.15},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"avg_price\":3.8585},{\"date\":\"2012-10-22\",\"fuel\":\"diesel\",\"avg_price\":4.116},{\"date\":\"2012-10-29\",\"fuel\":\"diesel\",\"avg_price\":4.03},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"avg_price\":3.7351666667},{\"date\":\"2012-11-05\",\"fuel\":\"diesel\",\"avg_price\":4.01},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"avg_price\":3.6595833333},{\"date\":\"2012-11-12\",\"fuel\":\"diesel\",\"avg_price\":3.98},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"avg_price\":3.6109166667},{\"date\":\"2012-11-19\",\"fuel\":\"diesel\",\"avg_price\":3.976},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"avg_price\":3.5866666667},{\"date\":\"2012-11-26\",\"fuel\":\"diesel\",\"avg_price\":4.034},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"avg_price\":3.5889166667},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"avg_price\":3.5489166667},{\"date\":\"2012-12-03\",\"fuel\":\"diesel\",\"avg_price\":4.027},{\"date\":\"2012-12-10\",\"fuel\":\"diesel\",\"avg_price\":3.991},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"avg_price\":3.5030833333},{\"date\":\"2012-12-17\",\"fuel\":\"diesel\",\"avg_price\":3.945},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"avg_price\":3.4101666667},{\"date\":\"2012-12-24\",\"fuel\":\"diesel\",\"avg_price\":3.923},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"avg_price\":3.4134166667},{\"date\":\"2012-12-31\",\"fuel\":\"diesel\",\"avg_price\":3.918},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"avg_price\":3.4539166667},{\"date\":\"2013-01-07\",\"fuel\":\"diesel\",\"avg_price\":3.911},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"avg_price\":3.4639166667},{\"date\":\"2013-01-14\",\"fuel\":\"diesel\",\"avg_price\":3.894},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"avg_price\":3.469},{\"date\":\"2013-01-21\",\"fuel\":\"diesel\",\"avg_price\":3.902},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"avg_price\":3.4744166667},{\"date\":\"2013-01-28\",\"fuel\":\"diesel\",\"avg_price\":3.927},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"avg_price\":3.5135},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"avg_price\":3.6901666667},{\"date\":\"2013-02-04\",\"fuel\":\"diesel\",\"avg_price\":4.022},{\"date\":\"2013-02-11\",\"fuel\":\"diesel\",\"avg_price\":4.104},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"avg_price\":3.7646666667},{\"date\":\"2013-02-18\",\"fuel\":\"diesel\",\"avg_price\":4.157},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"avg_price\":3.8923333333},{\"date\":\"2013-02-25\",\"fuel\":\"diesel\",\"avg_price\":4.159},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"avg_price\":3.9339166667},{\"date\":\"2013-03-04\",\"fuel\":\"diesel\",\"avg_price\":4.13},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"avg_price\":3.91},{\"date\":\"2013-03-11\",\"fuel\":\"diesel\",\"avg_price\":4.088},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"avg_price\":3.86525},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"avg_price\":3.8494166667},{\"date\":\"2013-03-18\",\"fuel\":\"diesel\",\"avg_price\":4.047},{\"date\":\"2013-03-25\",\"fuel\":\"diesel\",\"avg_price\":4.006},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"avg_price\":3.8305833333},{\"date\":\"2013-04-01\",\"fuel\":\"diesel\",\"avg_price\":3.993},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"avg_price\":3.8023333333},{\"date\":\"2013-04-08\",\"fuel\":\"diesel\",\"avg_price\":3.977},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"avg_price\":3.7638333333},{\"date\":\"2013-04-15\",\"fuel\":\"diesel\",\"avg_price\":3.942},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"avg_price\":3.7015},{\"date\":\"2013-04-22\",\"fuel\":\"diesel\",\"avg_price\":3.887},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"avg_price\":3.688},{\"date\":\"2013-04-29\",\"fuel\":\"diesel\",\"avg_price\":3.851},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"avg_price\":3.6716666667},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"avg_price\":3.6834166667},{\"date\":\"2013-05-06\",\"fuel\":\"diesel\",\"avg_price\":3.845},{\"date\":\"2013-05-13\",\"fuel\":\"diesel\",\"avg_price\":3.866},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"avg_price\":3.74425},{\"date\":\"2013-05-20\",\"fuel\":\"diesel\",\"avg_price\":3.89},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"avg_price\":3.7975},{\"date\":\"2013-05-27\",\"fuel\":\"diesel\",\"avg_price\":3.88},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"avg_price\":3.7765833333},{\"date\":\"2013-06-03\",\"fuel\":\"diesel\",\"avg_price\":3.869},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"avg_price\":3.7738333333},{\"date\":\"2013-06-10\",\"fuel\":\"diesel\",\"avg_price\":3.849},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"avg_price\":3.78475},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"avg_price\":3.7660833333},{\"date\":\"2013-06-17\",\"fuel\":\"diesel\",\"avg_price\":3.841},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"avg_price\":3.7355},{\"date\":\"2013-06-24\",\"fuel\":\"diesel\",\"avg_price\":3.838},{\"date\":\"2013-07-01\",\"fuel\":\"diesel\",\"avg_price\":3.817},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"avg_price\":3.6634166667},{\"date\":\"2013-07-08\",\"fuel\":\"diesel\",\"avg_price\":3.828},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"avg_price\":3.65675},{\"date\":\"2013-07-15\",\"fuel\":\"diesel\",\"avg_price\":3.867},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"avg_price\":3.7924166667},{\"date\":\"2013-07-22\",\"fuel\":\"diesel\",\"avg_price\":3.903},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"avg_price\":3.8378333333},{\"date\":\"2013-07-29\",\"fuel\":\"diesel\",\"avg_price\":3.915},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"avg_price\":3.80725},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"avg_price\":3.78775},{\"date\":\"2013-08-05\",\"fuel\":\"diesel\",\"avg_price\":3.909},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"avg_price\":3.7235833333},{\"date\":\"2013-08-12\",\"fuel\":\"diesel\",\"avg_price\":3.896},{\"date\":\"2013-08-19\",\"fuel\":\"diesel\",\"avg_price\":3.9},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"avg_price\":3.7071666667},{\"date\":\"2013-08-26\",\"fuel\":\"diesel\",\"avg_price\":3.913},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"avg_price\":3.70625},{\"date\":\"2013-09-02\",\"fuel\":\"diesel\",\"avg_price\":3.981},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"avg_price\":3.754},{\"date\":\"2013-09-09\",\"fuel\":\"diesel\",\"avg_price\":3.981},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"avg_price\":3.7398333333},{\"date\":\"2013-09-16\",\"fuel\":\"diesel\",\"avg_price\":3.974},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"avg_price\":3.7113333333},{\"date\":\"2013-09-23\",\"fuel\":\"diesel\",\"avg_price\":3.949},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"avg_price\":3.6588333333},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"avg_price\":3.59425},{\"date\":\"2013-09-30\",\"fuel\":\"diesel\",\"avg_price\":3.919},{\"date\":\"2013-10-07\",\"fuel\":\"diesel\",\"avg_price\":3.897},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"avg_price\":3.53525},{\"date\":\"2013-10-14\",\"fuel\":\"diesel\",\"avg_price\":3.886},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"avg_price\":3.52225},{\"date\":\"2013-10-21\",\"fuel\":\"diesel\",\"avg_price\":3.886},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"avg_price\":3.5230833333},{\"date\":\"2013-10-28\",\"fuel\":\"diesel\",\"avg_price\":3.87},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"avg_price\":3.4666666667},{\"date\":\"2013-11-04\",\"fuel\":\"diesel\",\"avg_price\":3.857},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"avg_price\":3.43525},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"avg_price\":3.3709166667},{\"date\":\"2013-11-11\",\"fuel\":\"diesel\",\"avg_price\":3.832},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"avg_price\":3.3919166667},{\"date\":\"2013-11-18\",\"fuel\":\"diesel\",\"avg_price\":3.822},{\"date\":\"2013-11-25\",\"fuel\":\"diesel\",\"avg_price\":3.844},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"avg_price\":3.4623333333},{\"date\":\"2013-12-02\",\"fuel\":\"diesel\",\"avg_price\":3.883},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"avg_price\":3.4495},{\"date\":\"2013-12-09\",\"fuel\":\"diesel\",\"avg_price\":3.879},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"avg_price\":3.44625},{\"date\":\"2013-12-16\",\"fuel\":\"diesel\",\"avg_price\":3.871},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"avg_price\":3.4215},{\"date\":\"2013-12-23\",\"fuel\":\"diesel\",\"avg_price\":3.873},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"avg_price\":3.45025},{\"date\":\"2013-12-30\",\"fuel\":\"diesel\",\"avg_price\":3.903},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"avg_price\":3.5034166667},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"avg_price\":3.5093333333},{\"date\":\"2014-01-06\",\"fuel\":\"diesel\",\"avg_price\":3.91},{\"date\":\"2014-01-13\",\"fuel\":\"diesel\",\"avg_price\":3.886},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"avg_price\":3.4998333333},{\"date\":\"2014-01-20\",\"fuel\":\"diesel\",\"avg_price\":3.873},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"avg_price\":3.4701666667},{\"date\":\"2014-01-27\",\"fuel\":\"diesel\",\"avg_price\":3.904},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"avg_price\":3.4669166667},{\"date\":\"2014-02-03\",\"fuel\":\"diesel\",\"avg_price\":3.951},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"avg_price\":3.46375},{\"date\":\"2014-02-10\",\"fuel\":\"diesel\",\"avg_price\":3.977},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"avg_price\":3.479},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"avg_price\":3.5475},{\"date\":\"2014-02-17\",\"fuel\":\"diesel\",\"avg_price\":3.989},{\"date\":\"2014-02-24\",\"fuel\":\"diesel\",\"avg_price\":4.017},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"avg_price\":3.60675},{\"date\":\"2014-03-03\",\"fuel\":\"diesel\",\"avg_price\":4.016},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"avg_price\":3.64175},{\"date\":\"2014-03-10\",\"fuel\":\"diesel\",\"avg_price\":4.021},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"avg_price\":3.6708333333},{\"date\":\"2014-03-17\",\"fuel\":\"diesel\",\"avg_price\":4.003},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"avg_price\":3.706},{\"date\":\"2014-03-24\",\"fuel\":\"diesel\",\"avg_price\":3.988},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"avg_price\":3.7111666667},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"avg_price\":3.7381666667},{\"date\":\"2014-03-31\",\"fuel\":\"diesel\",\"avg_price\":3.975},{\"date\":\"2014-04-07\",\"fuel\":\"diesel\",\"avg_price\":3.959},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"avg_price\":3.7605},{\"date\":\"2014-04-14\",\"fuel\":\"diesel\",\"avg_price\":3.952},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"avg_price\":3.816},{\"date\":\"2014-04-21\",\"fuel\":\"diesel\",\"avg_price\":3.971},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"avg_price\":3.85025},{\"date\":\"2014-04-28\",\"fuel\":\"diesel\",\"avg_price\":3.975},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"avg_price\":3.8839166667},{\"date\":\"2014-05-05\",\"fuel\":\"diesel\",\"avg_price\":3.964},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"avg_price\":3.85875},{\"date\":\"2014-05-12\",\"fuel\":\"diesel\",\"avg_price\":3.948},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"avg_price\":3.8420833333},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"avg_price\":3.8385833333},{\"date\":\"2014-05-19\",\"fuel\":\"diesel\",\"avg_price\":3.934},{\"date\":\"2014-05-26\",\"fuel\":\"diesel\",\"avg_price\":3.925},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"avg_price\":3.84325},{\"date\":\"2014-06-02\",\"fuel\":\"diesel\",\"avg_price\":3.918},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"avg_price\":3.8565833333},{\"date\":\"2014-06-09\",\"fuel\":\"diesel\",\"avg_price\":3.892},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"avg_price\":3.8398333333},{\"date\":\"2014-06-16\",\"fuel\":\"diesel\",\"avg_price\":3.882},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"avg_price\":3.85},{\"date\":\"2014-06-23\",\"fuel\":\"diesel\",\"avg_price\":3.919},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"avg_price\":3.8686666667},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"avg_price\":3.8699166667},{\"date\":\"2014-06-30\",\"fuel\":\"diesel\",\"avg_price\":3.92},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"avg_price\":3.8475},{\"date\":\"2014-07-07\",\"fuel\":\"diesel\",\"avg_price\":3.913},{\"date\":\"2014-07-14\",\"fuel\":\"diesel\",\"avg_price\":3.894},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"avg_price\":3.80875},{\"date\":\"2014-07-21\",\"fuel\":\"diesel\",\"avg_price\":3.869},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"avg_price\":3.7668333333},{\"date\":\"2014-07-28\",\"fuel\":\"diesel\",\"avg_price\":3.858},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"avg_price\":3.7155833333},{\"date\":\"2014-08-04\",\"fuel\":\"diesel\",\"avg_price\":3.853},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"avg_price\":3.6915},{\"date\":\"2014-08-11\",\"fuel\":\"diesel\",\"avg_price\":3.843},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"avg_price\":3.6748333333},{\"date\":\"2014-08-18\",\"fuel\":\"diesel\",\"avg_price\":3.835},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"avg_price\":3.64375},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"avg_price\":3.6246666667},{\"date\":\"2014-08-25\",\"fuel\":\"diesel\",\"avg_price\":3.821},{\"date\":\"2014-09-01\",\"fuel\":\"diesel\",\"avg_price\":3.814},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"avg_price\":3.6250833333},{\"date\":\"2014-09-08\",\"fuel\":\"diesel\",\"avg_price\":3.814},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"avg_price\":3.6225},{\"date\":\"2014-09-15\",\"fuel\":\"diesel\",\"avg_price\":3.801},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"avg_price\":3.5761666667},{\"date\":\"2014-09-22\",\"fuel\":\"diesel\",\"avg_price\":3.778},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"avg_price\":3.5251666667},{\"date\":\"2014-09-29\",\"fuel\":\"diesel\",\"avg_price\":3.755},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"avg_price\":3.5249166667},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"avg_price\":3.4766666667},{\"date\":\"2014-10-06\",\"fuel\":\"diesel\",\"avg_price\":3.733},{\"date\":\"2014-10-13\",\"fuel\":\"diesel\",\"avg_price\":3.698},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"avg_price\":3.3915},{\"date\":\"2014-10-20\",\"fuel\":\"diesel\",\"avg_price\":3.656},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"avg_price\":3.3021666667},{\"date\":\"2014-10-27\",\"fuel\":\"diesel\",\"avg_price\":3.635},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"avg_price\":3.2323333333},{\"date\":\"2014-11-03\",\"fuel\":\"diesel\",\"avg_price\":3.623},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"avg_price\":3.17},{\"date\":\"2014-11-10\",\"fuel\":\"diesel\",\"avg_price\":3.677},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"avg_price\":3.116},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"avg_price\":3.0705833333},{\"date\":\"2014-11-17\",\"fuel\":\"diesel\",\"avg_price\":3.661},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"avg_price\":3.0020833333},{\"date\":\"2014-11-24\",\"fuel\":\"diesel\",\"avg_price\":3.628},{\"date\":\"2014-12-01\",\"fuel\":\"diesel\",\"avg_price\":3.605},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"avg_price\":2.9605},{\"date\":\"2014-12-08\",\"fuel\":\"diesel\",\"avg_price\":3.535},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"avg_price\":2.8666666667},{\"date\":\"2014-12-15\",\"fuel\":\"diesel\",\"avg_price\":3.419},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"avg_price\":2.74625},{\"date\":\"2014-12-22\",\"fuel\":\"diesel\",\"avg_price\":3.281},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"avg_price\":2.6041666667},{\"date\":\"2014-12-29\",\"fuel\":\"diesel\",\"avg_price\":3.213},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"avg_price\":2.5036666667},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"avg_price\":2.42375},{\"date\":\"2015-01-05\",\"fuel\":\"diesel\",\"avg_price\":3.137},{\"date\":\"2015-01-12\",\"fuel\":\"diesel\",\"avg_price\":3.053},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"avg_price\":2.3450833333},{\"date\":\"2015-01-19\",\"fuel\":\"diesel\",\"avg_price\":2.933},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"avg_price\":2.2650833333},{\"date\":\"2015-01-26\",\"fuel\":\"diesel\",\"avg_price\":2.866},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"avg_price\":2.2385833333},{\"date\":\"2015-02-02\",\"fuel\":\"diesel\",\"avg_price\":2.831},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"avg_price\":2.2544166667},{\"date\":\"2015-02-09\",\"fuel\":\"diesel\",\"avg_price\":2.835},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"avg_price\":2.3746666667},{\"date\":\"2015-02-16\",\"fuel\":\"diesel\",\"avg_price\":2.865},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"avg_price\":2.45975},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"avg_price\":2.5195833333},{\"date\":\"2015-02-23\",\"fuel\":\"diesel\",\"avg_price\":2.9},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"avg_price\":2.67225},{\"date\":\"2015-03-02\",\"fuel\":\"diesel\",\"avg_price\":2.936},{\"date\":\"2015-03-09\",\"fuel\":\"diesel\",\"avg_price\":2.944},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"avg_price\":2.6890833333},{\"date\":\"2015-03-16\",\"fuel\":\"diesel\",\"avg_price\":2.917},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"avg_price\":2.65525},{\"date\":\"2015-03-23\",\"fuel\":\"diesel\",\"avg_price\":2.864},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"avg_price\":2.6515833333},{\"date\":\"2015-03-30\",\"fuel\":\"diesel\",\"avg_price\":2.824},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"avg_price\":2.64325},{\"date\":\"2015-04-06\",\"fuel\":\"diesel\",\"avg_price\":2.784},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"avg_price\":2.6116666667},{\"date\":\"2015-04-13\",\"fuel\":\"diesel\",\"avg_price\":2.754},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"avg_price\":2.6054166667},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"avg_price\":2.6794166667},{\"date\":\"2015-04-20\",\"fuel\":\"diesel\",\"avg_price\":2.78},{\"date\":\"2015-04-27\",\"fuel\":\"diesel\",\"avg_price\":2.811},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"avg_price\":2.776},{\"date\":\"2015-05-04\",\"fuel\":\"diesel\",\"avg_price\":2.854},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"avg_price\":2.8776666667},{\"date\":\"2015-05-11\",\"fuel\":\"diesel\",\"avg_price\":2.878},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"avg_price\":2.9048333333},{\"date\":\"2015-05-18\",\"fuel\":\"diesel\",\"avg_price\":2.904},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"avg_price\":2.95325},{\"date\":\"2015-05-25\",\"fuel\":\"diesel\",\"avg_price\":2.914},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"avg_price\":2.9800833333},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"avg_price\":2.9816666667},{\"date\":\"2015-06-01\",\"fuel\":\"diesel\",\"avg_price\":2.909},{\"date\":\"2015-06-08\",\"fuel\":\"diesel\",\"avg_price\":2.884},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"avg_price\":2.9790833333},{\"date\":\"2015-06-15\",\"fuel\":\"diesel\",\"avg_price\":2.87},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"avg_price\":3.0245833333},{\"date\":\"2015-06-22\",\"fuel\":\"diesel\",\"avg_price\":2.859},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"avg_price\":3.0031666667},{\"date\":\"2015-06-29\",\"fuel\":\"diesel\",\"avg_price\":2.843},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"avg_price\":2.9933333333},{\"date\":\"2015-07-06\",\"fuel\":\"diesel\",\"avg_price\":2.832},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"avg_price\":2.9863333333},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"avg_price\":3.0495833333},{\"date\":\"2015-07-13\",\"fuel\":\"diesel\",\"avg_price\":2.814},{\"date\":\"2015-07-20\",\"fuel\":\"diesel\",\"avg_price\":2.782},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"avg_price\":3.01825},{\"date\":\"2015-07-27\",\"fuel\":\"diesel\",\"avg_price\":2.723},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"avg_price\":2.964},{\"date\":\"2015-08-03\",\"fuel\":\"diesel\",\"avg_price\":2.668},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"avg_price\":2.9108333333},{\"date\":\"2015-08-10\",\"fuel\":\"diesel\",\"avg_price\":2.617},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"avg_price\":2.8488333333},{\"date\":\"2015-08-17\",\"fuel\":\"diesel\",\"avg_price\":2.615},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"avg_price\":2.9221666667},{\"date\":\"2015-08-24\",\"fuel\":\"diesel\",\"avg_price\":2.561},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"avg_price\":2.8459166667},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"avg_price\":2.7256666667},{\"date\":\"2015-08-31\",\"fuel\":\"diesel\",\"avg_price\":2.514},{\"date\":\"2015-09-07\",\"fuel\":\"diesel\",\"avg_price\":2.534},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"avg_price\":2.6556666667},{\"date\":\"2015-09-14\",\"fuel\":\"diesel\",\"avg_price\":2.517},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"avg_price\":2.5951666667},{\"date\":\"2015-09-21\",\"fuel\":\"diesel\",\"avg_price\":2.493},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"avg_price\":2.5485833333},{\"date\":\"2015-09-28\",\"fuel\":\"diesel\",\"avg_price\":2.476},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"avg_price\":2.5356666667},{\"date\":\"2015-10-05\",\"fuel\":\"diesel\",\"avg_price\":2.492},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"avg_price\":2.52875},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"avg_price\":2.5398333333},{\"date\":\"2015-10-12\",\"fuel\":\"diesel\",\"avg_price\":2.556},{\"date\":\"2015-10-19\",\"fuel\":\"diesel\",\"avg_price\":2.531},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"avg_price\":2.4845833333},{\"date\":\"2015-10-26\",\"fuel\":\"diesel\",\"avg_price\":2.498},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"avg_price\":2.4403333333},{\"date\":\"2015-11-02\",\"fuel\":\"diesel\",\"avg_price\":2.485},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"avg_price\":2.43425},{\"date\":\"2015-11-09\",\"fuel\":\"diesel\",\"avg_price\":2.502},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"avg_price\":2.45025},{\"date\":\"2015-11-16\",\"fuel\":\"diesel\",\"avg_price\":2.482},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"avg_price\":2.40075},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"avg_price\":2.3225},{\"date\":\"2015-11-23\",\"fuel\":\"diesel\",\"avg_price\":2.445},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"avg_price\":2.2930833333},{\"date\":\"2015-11-30\",\"fuel\":\"diesel\",\"avg_price\":2.421},{\"date\":\"2015-12-07\",\"fuel\":\"diesel\",\"avg_price\":2.379},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"avg_price\":2.2871666667},{\"date\":\"2015-12-14\",\"fuel\":\"diesel\",\"avg_price\":2.338},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"avg_price\":2.2714166667},{\"date\":\"2015-12-21\",\"fuel\":\"diesel\",\"avg_price\":2.284},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"avg_price\":2.2659166667},{\"date\":\"2015-12-28\",\"fuel\":\"diesel\",\"avg_price\":2.237},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"avg_price\":2.2755},{\"date\":\"2016-01-04\",\"fuel\":\"diesel\",\"avg_price\":2.211},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"avg_price\":2.2711666667},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"avg_price\":2.2410833333},{\"date\":\"2016-01-11\",\"fuel\":\"diesel\",\"avg_price\":2.177},{\"date\":\"2016-01-18\",\"fuel\":\"diesel\",\"avg_price\":2.112},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"avg_price\":2.15825},{\"date\":\"2016-01-25\",\"fuel\":\"diesel\",\"avg_price\":2.071},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"avg_price\":2.1033333333},{\"date\":\"2016-02-01\",\"fuel\":\"diesel\",\"avg_price\":2.031},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"avg_price\":2.0665833333},{\"date\":\"2016-02-08\",\"fuel\":\"diesel\",\"avg_price\":2.008},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"avg_price\":2.0065},{\"date\":\"2016-02-15\",\"fuel\":\"diesel\",\"avg_price\":1.98},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"avg_price\":1.9654166667},{\"date\":\"2016-02-22\",\"fuel\":\"diesel\",\"avg_price\":1.983},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"avg_price\":1.9610833333},{\"date\":\"2016-02-29\",\"fuel\":\"diesel\",\"avg_price\":1.989},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"avg_price\":2.0085},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"avg_price\":2.0591666667},{\"date\":\"2016-03-07\",\"fuel\":\"diesel\",\"avg_price\":2.021},{\"date\":\"2016-03-14\",\"fuel\":\"diesel\",\"avg_price\":2.099},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"avg_price\":2.1816666667},{\"date\":\"2016-03-21\",\"fuel\":\"diesel\",\"avg_price\":2.119},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"avg_price\":2.2295},{\"date\":\"2016-03-28\",\"fuel\":\"diesel\",\"avg_price\":2.121},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"avg_price\":2.29525},{\"date\":\"2016-04-04\",\"fuel\":\"diesel\",\"avg_price\":2.115},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"avg_price\":2.3093333333},{\"date\":\"2016-04-11\",\"fuel\":\"diesel\",\"avg_price\":2.128},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"avg_price\":2.2985833333},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"avg_price\":2.3630833333},{\"date\":\"2016-04-18\",\"fuel\":\"diesel\",\"avg_price\":2.165},{\"date\":\"2016-04-25\",\"fuel\":\"diesel\",\"avg_price\":2.198},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"avg_price\":2.3878333333},{\"date\":\"2016-05-02\",\"fuel\":\"diesel\",\"avg_price\":2.266},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"avg_price\":2.4613333333},{\"date\":\"2016-05-09\",\"fuel\":\"diesel\",\"avg_price\":2.271},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"avg_price\":2.448},{\"date\":\"2016-05-16\",\"fuel\":\"diesel\",\"avg_price\":2.297},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"avg_price\":2.4648333333},{\"date\":\"2016-05-23\",\"fuel\":\"diesel\",\"avg_price\":2.357},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"avg_price\":2.5193333333},{\"date\":\"2016-05-30\",\"fuel\":\"diesel\",\"avg_price\":2.382},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"avg_price\":2.5528333333},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"avg_price\":2.5924166667},{\"date\":\"2016-06-06\",\"fuel\":\"diesel\",\"avg_price\":2.407},{\"date\":\"2016-06-13\",\"fuel\":\"diesel\",\"avg_price\":2.431},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"avg_price\":2.6095},{\"date\":\"2016-06-20\",\"fuel\":\"diesel\",\"avg_price\":2.426},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"avg_price\":2.57025},{\"date\":\"2016-06-27\",\"fuel\":\"diesel\",\"avg_price\":2.426},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"avg_price\":2.554},{\"date\":\"2016-07-04\",\"fuel\":\"diesel\",\"avg_price\":2.423},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"avg_price\":2.5216666667},{\"date\":\"2016-07-11\",\"fuel\":\"diesel\",\"avg_price\":2.414},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"avg_price\":2.48475},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"avg_price\":2.46225},{\"date\":\"2016-07-18\",\"fuel\":\"diesel\",\"avg_price\":2.402},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"avg_price\":2.4148333333},{\"date\":\"2016-07-25\",\"fuel\":\"diesel\",\"avg_price\":2.379},{\"date\":\"2016-08-01\",\"fuel\":\"diesel\",\"avg_price\":2.348},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"avg_price\":2.3898333333},{\"date\":\"2016-08-08\",\"fuel\":\"diesel\",\"avg_price\":2.316},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"avg_price\":2.37575},{\"date\":\"2016-08-15\",\"fuel\":\"diesel\",\"avg_price\":2.31},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"avg_price\":2.3731666667},{\"date\":\"2016-08-22\",\"fuel\":\"diesel\",\"avg_price\":2.37},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"avg_price\":2.41625},{\"date\":\"2016-08-29\",\"fuel\":\"diesel\",\"avg_price\":2.409},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"avg_price\":2.4548333333},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"avg_price\":2.4455833333},{\"date\":\"2016-09-05\",\"fuel\":\"diesel\",\"avg_price\":2.407},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"avg_price\":2.43125},{\"date\":\"2016-09-12\",\"fuel\":\"diesel\",\"avg_price\":2.399},{\"date\":\"2016-09-19\",\"fuel\":\"diesel\",\"avg_price\":2.389},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"avg_price\":2.4525833333},{\"date\":\"2016-09-26\",\"fuel\":\"diesel\",\"avg_price\":2.382},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"avg_price\":2.455},{\"date\":\"2016-10-03\",\"fuel\":\"diesel\",\"avg_price\":2.389},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"avg_price\":2.4759166667},{\"date\":\"2016-10-10\",\"fuel\":\"diesel\",\"avg_price\":2.445},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"avg_price\":2.5001666667},{\"date\":\"2016-10-17\",\"fuel\":\"diesel\",\"avg_price\":2.481},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"avg_price\":2.4879166667},{\"date\":\"2016-10-24\",\"fuel\":\"diesel\",\"avg_price\":2.478},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"avg_price\":2.4775833333},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"avg_price\":2.4675833333},{\"date\":\"2016-10-31\",\"fuel\":\"diesel\",\"avg_price\":2.479},{\"date\":\"2016-11-07\",\"fuel\":\"diesel\",\"avg_price\":2.47},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"avg_price\":2.4754166667},{\"date\":\"2016-11-14\",\"fuel\":\"diesel\",\"avg_price\":2.443},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"avg_price\":2.43125},{\"date\":\"2016-11-21\",\"fuel\":\"diesel\",\"avg_price\":2.421},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"avg_price\":2.401},{\"date\":\"2016-11-28\",\"fuel\":\"diesel\",\"avg_price\":2.42},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"avg_price\":2.3985833333},{\"date\":\"2016-12-05\",\"fuel\":\"diesel\",\"avg_price\":2.48},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"avg_price\":2.449},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"avg_price\":2.4711666667},{\"date\":\"2016-12-12\",\"fuel\":\"diesel\",\"avg_price\":2.493},{\"date\":\"2016-12-19\",\"fuel\":\"diesel\",\"avg_price\":2.527},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"avg_price\":2.49825},{\"date\":\"2016-12-26\",\"fuel\":\"diesel\",\"avg_price\":2.54},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"avg_price\":2.5386666667},{\"date\":\"2017-01-02\",\"fuel\":\"diesel\",\"avg_price\":2.586},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"avg_price\":2.6046666667},{\"date\":\"2017-01-09\",\"fuel\":\"diesel\",\"avg_price\":2.597},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"avg_price\":2.61675},{\"date\":\"2017-01-16\",\"fuel\":\"diesel\",\"avg_price\":2.585},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"avg_price\":2.58775},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"avg_price\":2.56},{\"date\":\"2017-01-23\",\"fuel\":\"diesel\",\"avg_price\":2.569},{\"date\":\"2017-01-30\",\"fuel\":\"diesel\",\"avg_price\":2.562},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"avg_price\":2.5350833333},{\"date\":\"2017-02-06\",\"fuel\":\"diesel\",\"avg_price\":2.558},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"avg_price\":2.5325},{\"date\":\"2017-02-13\",\"fuel\":\"diesel\",\"avg_price\":2.565},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"avg_price\":2.54775},{\"date\":\"2017-02-20\",\"fuel\":\"diesel\",\"avg_price\":2.572},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"avg_price\":2.5439166667},{\"date\":\"2017-02-27\",\"fuel\":\"diesel\",\"avg_price\":2.577},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"avg_price\":2.5585},{\"date\":\"2017-03-06\",\"fuel\":\"diesel\",\"avg_price\":2.579},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"avg_price\":2.5819166667},{\"date\":\"2017-03-13\",\"fuel\":\"diesel\",\"avg_price\":2.564},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"avg_price\":2.5659166667},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"avg_price\":2.56525},{\"date\":\"2017-03-20\",\"fuel\":\"diesel\",\"avg_price\":2.539},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"avg_price\":2.5618333333},{\"date\":\"2017-03-27\",\"fuel\":\"diesel\",\"avg_price\":2.532},{\"date\":\"2017-04-03\",\"fuel\":\"diesel\",\"avg_price\":2.556},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"avg_price\":2.6004166667},{\"date\":\"2017-04-10\",\"fuel\":\"diesel\",\"avg_price\":2.582},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"avg_price\":2.6600833333},{\"date\":\"2017-04-17\",\"fuel\":\"diesel\",\"avg_price\":2.597},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"avg_price\":2.6749166667},{\"date\":\"2017-04-24\",\"fuel\":\"diesel\",\"avg_price\":2.595},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"avg_price\":2.6858333333},{\"date\":\"2017-05-01\",\"fuel\":\"diesel\",\"avg_price\":2.583},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"avg_price\":2.6525833333},{\"date\":\"2017-05-08\",\"fuel\":\"diesel\",\"avg_price\":2.565},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"avg_price\":2.61625},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"avg_price\":2.6148333333},{\"date\":\"2017-05-15\",\"fuel\":\"diesel\",\"avg_price\":2.544},{\"date\":\"2017-05-22\",\"fuel\":\"diesel\",\"avg_price\":2.539},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"avg_price\":2.64425},{\"date\":\"2017-05-29\",\"fuel\":\"diesel\",\"avg_price\":2.571},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"avg_price\":2.6515},{\"date\":\"2017-06-05\",\"fuel\":\"diesel\",\"avg_price\":2.564},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"avg_price\":2.6581666667},{\"date\":\"2017-06-12\",\"fuel\":\"diesel\",\"avg_price\":2.524},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"avg_price\":2.61375},{\"date\":\"2017-06-19\",\"fuel\":\"diesel\",\"avg_price\":2.489},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"avg_price\":2.5715},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"avg_price\":2.54175},{\"date\":\"2017-06-26\",\"fuel\":\"diesel\",\"avg_price\":2.465},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"avg_price\":2.5163333333},{\"date\":\"2017-07-03\",\"fuel\":\"diesel\",\"avg_price\":2.472},{\"date\":\"2017-07-10\",\"fuel\":\"diesel\",\"avg_price\":2.481},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"avg_price\":2.5458333333},{\"date\":\"2017-07-17\",\"fuel\":\"diesel\",\"avg_price\":2.491},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"avg_price\":2.5284166667},{\"date\":\"2017-07-24\",\"fuel\":\"diesel\",\"avg_price\":2.507},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"avg_price\":2.5604166667},{\"date\":\"2017-07-31\",\"fuel\":\"diesel\",\"avg_price\":2.531},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"avg_price\":2.6000833333},{\"date\":\"2017-08-07\",\"fuel\":\"diesel\",\"avg_price\":2.581},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"avg_price\":2.62575},{\"date\":\"2017-08-14\",\"fuel\":\"diesel\",\"avg_price\":2.598},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"avg_price\":2.6303333333},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"avg_price\":2.6093333333},{\"date\":\"2017-08-21\",\"fuel\":\"diesel\",\"avg_price\":2.596},{\"date\":\"2017-08-28\",\"fuel\":\"diesel\",\"avg_price\":2.605},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"avg_price\":2.6433333333},{\"date\":\"2017-09-04\",\"fuel\":\"diesel\",\"avg_price\":2.758},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"avg_price\":2.92375},{\"date\":\"2017-09-11\",\"fuel\":\"diesel\",\"avg_price\":2.802},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"avg_price\":2.9299166667},{\"date\":\"2017-09-18\",\"fuel\":\"diesel\",\"avg_price\":2.791},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"avg_price\":2.8819166667},{\"date\":\"2017-09-25\",\"fuel\":\"diesel\",\"avg_price\":2.788},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"avg_price\":2.8330833333},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"avg_price\":2.81325},{\"date\":\"2017-10-02\",\"fuel\":\"diesel\",\"avg_price\":2.792},{\"date\":\"2017-10-09\",\"fuel\":\"diesel\",\"avg_price\":2.776},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"avg_price\":2.7553333333},{\"date\":\"2017-10-16\",\"fuel\":\"diesel\",\"avg_price\":2.787},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"avg_price\":2.7374166667},{\"date\":\"2017-10-23\",\"fuel\":\"diesel\",\"avg_price\":2.797},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"avg_price\":2.7245},{\"date\":\"2017-10-30\",\"fuel\":\"diesel\",\"avg_price\":2.819},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"avg_price\":2.7345833333},{\"date\":\"2017-11-06\",\"fuel\":\"diesel\",\"avg_price\":2.882},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"avg_price\":2.8086666667},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"avg_price\":2.8403333333},{\"date\":\"2017-11-13\",\"fuel\":\"diesel\",\"avg_price\":2.915},{\"date\":\"2017-11-20\",\"fuel\":\"diesel\",\"avg_price\":2.912},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"avg_price\":2.8186666667},{\"date\":\"2017-11-27\",\"fuel\":\"diesel\",\"avg_price\":2.926},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"avg_price\":2.7854166667},{\"date\":\"2017-12-04\",\"fuel\":\"diesel\",\"avg_price\":2.922},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"avg_price\":2.75475},{\"date\":\"2017-12-11\",\"fuel\":\"diesel\",\"avg_price\":2.91},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"avg_price\":2.7375833333},{\"date\":\"2017-12-18\",\"fuel\":\"diesel\",\"avg_price\":2.901},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"avg_price\":2.707},{\"date\":\"2017-12-25\",\"fuel\":\"diesel\",\"avg_price\":2.903},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"avg_price\":2.72575},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"avg_price\":2.7724166667},{\"date\":\"2018-01-01\",\"fuel\":\"diesel\",\"avg_price\":2.973},{\"date\":\"2018-01-08\",\"fuel\":\"diesel\",\"avg_price\":2.996},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"avg_price\":2.77875},{\"date\":\"2018-01-15\",\"fuel\":\"diesel\",\"avg_price\":3.028},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"avg_price\":2.8083333333},{\"date\":\"2018-01-22\",\"fuel\":\"diesel\",\"avg_price\":3.025},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"avg_price\":2.8210833333},{\"date\":\"2018-01-29\",\"fuel\":\"diesel\",\"avg_price\":3.07},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"avg_price\":2.8610833333},{\"date\":\"2018-02-05\",\"fuel\":\"diesel\",\"avg_price\":3.086},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"avg_price\":2.8919166667},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"avg_price\":2.8649166667},{\"date\":\"2018-02-12\",\"fuel\":\"diesel\",\"avg_price\":3.063},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"avg_price\":2.8209166667},{\"date\":\"2018-02-19\",\"fuel\":\"diesel\",\"avg_price\":3.027},{\"date\":\"2018-02-26\",\"fuel\":\"diesel\",\"avg_price\":3.007},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"avg_price\":2.81125},{\"date\":\"2018-03-05\",\"fuel\":\"diesel\",\"avg_price\":2.992},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"avg_price\":2.8225833333},{\"date\":\"2018-03-12\",\"fuel\":\"diesel\",\"avg_price\":2.976},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"avg_price\":2.8216666667},{\"date\":\"2018-03-19\",\"fuel\":\"diesel\",\"avg_price\":2.972},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"avg_price\":2.8598333333},{\"date\":\"2018-03-26\",\"fuel\":\"diesel\",\"avg_price\":3.01},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"avg_price\":2.9085833333},{\"date\":\"2018-04-02\",\"fuel\":\"diesel\",\"avg_price\":3.042},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"avg_price\":2.96025},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"avg_price\":2.9554166667},{\"date\":\"2018-04-09\",\"fuel\":\"diesel\",\"avg_price\":3.043},{\"date\":\"2018-04-16\",\"fuel\":\"diesel\",\"avg_price\":3.104},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"avg_price\":3.00425},{\"date\":\"2018-04-23\",\"fuel\":\"diesel\",\"avg_price\":3.133},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"avg_price\":3.0555833333},{\"date\":\"2018-04-30\",\"fuel\":\"diesel\",\"avg_price\":3.157},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"avg_price\":3.1013333333},{\"date\":\"2018-05-07\",\"fuel\":\"diesel\",\"avg_price\":3.171},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"avg_price\":3.10325},{\"date\":\"2018-05-14\",\"fuel\":\"diesel\",\"avg_price\":3.239},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"avg_price\":3.1435833333},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"avg_price\":3.1908333333},{\"date\":\"2018-05-21\",\"fuel\":\"diesel\",\"avg_price\":3.277},{\"date\":\"2018-05-28\",\"fuel\":\"diesel\",\"avg_price\":3.288},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"avg_price\":3.2299166667},{\"date\":\"2018-06-04\",\"fuel\":\"diesel\",\"avg_price\":3.285},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"avg_price\":3.2145833333},{\"date\":\"2018-06-11\",\"fuel\":\"diesel\",\"avg_price\":3.266},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"avg_price\":3.1860833333},{\"date\":\"2018-06-18\",\"fuel\":\"diesel\",\"avg_price\":3.244},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"avg_price\":3.1563333333},{\"date\":\"2018-06-25\",\"fuel\":\"diesel\",\"avg_price\":3.216},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"avg_price\":3.1141666667},{\"date\":\"2018-07-02\",\"fuel\":\"diesel\",\"avg_price\":3.236},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"avg_price\":3.1225},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"avg_price\":3.1355},{\"date\":\"2018-07-09\",\"fuel\":\"diesel\",\"avg_price\":3.243},{\"date\":\"2018-07-16\",\"fuel\":\"diesel\",\"avg_price\":3.239},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"avg_price\":3.1366666667},{\"date\":\"2018-07-23\",\"fuel\":\"diesel\",\"avg_price\":3.22},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"avg_price\":3.1070833333},{\"date\":\"2018-07-30\",\"fuel\":\"diesel\",\"avg_price\":3.226},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"avg_price\":3.1183333333},{\"date\":\"2018-08-06\",\"fuel\":\"diesel\",\"avg_price\":3.223},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"avg_price\":3.1210833333},{\"date\":\"2018-08-13\",\"fuel\":\"diesel\",\"avg_price\":3.217},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"avg_price\":3.11275},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"avg_price\":3.0929166667},{\"date\":\"2018-08-20\",\"fuel\":\"diesel\",\"avg_price\":3.207},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"avg_price\":3.09825},{\"date\":\"2018-08-27\",\"fuel\":\"diesel\",\"avg_price\":3.226},{\"date\":\"2018-09-03\",\"fuel\":\"diesel\",\"avg_price\":3.252},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"avg_price\":3.0974166667},{\"date\":\"2018-09-10\",\"fuel\":\"diesel\",\"avg_price\":3.258},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"avg_price\":3.1075833333},{\"date\":\"2018-09-17\",\"fuel\":\"diesel\",\"avg_price\":3.268},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"avg_price\":3.1165},{\"date\":\"2018-09-24\",\"fuel\":\"diesel\",\"avg_price\":3.271},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"avg_price\":3.11675},{\"date\":\"2018-10-01\",\"fuel\":\"diesel\",\"avg_price\":3.313},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"avg_price\":3.14475},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"avg_price\":3.1826666667},{\"date\":\"2018-10-08\",\"fuel\":\"diesel\",\"avg_price\":3.385},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"avg_price\":3.1639166667},{\"date\":\"2018-10-15\",\"fuel\":\"diesel\",\"avg_price\":3.394},{\"date\":\"2018-10-22\",\"fuel\":\"diesel\",\"avg_price\":3.38},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"avg_price\":3.13325},{\"date\":\"2018-10-29\",\"fuel\":\"diesel\",\"avg_price\":3.355},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"avg_price\":3.10525},{\"date\":\"2018-11-05\",\"fuel\":\"diesel\",\"avg_price\":3.338},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"avg_price\":3.0535},{\"date\":\"2018-11-12\",\"fuel\":\"diesel\",\"avg_price\":3.317},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"avg_price\":2.9895833333},{\"date\":\"2018-11-19\",\"fuel\":\"diesel\",\"avg_price\":3.282},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"avg_price\":2.9201666667},{\"date\":\"2018-11-26\",\"fuel\":\"diesel\",\"avg_price\":3.261},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"avg_price\":2.8581666667},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"avg_price\":2.7746666667},{\"date\":\"2018-12-03\",\"fuel\":\"diesel\",\"avg_price\":3.207},{\"date\":\"2018-12-10\",\"fuel\":\"diesel\",\"avg_price\":3.161},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"avg_price\":2.7373333333},{\"date\":\"2018-12-17\",\"fuel\":\"diesel\",\"avg_price\":3.121},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"avg_price\":2.6884166667},{\"date\":\"2018-12-24\",\"fuel\":\"diesel\",\"avg_price\":3.077},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"avg_price\":2.6433333333},{\"date\":\"2018-12-31\",\"fuel\":\"diesel\",\"avg_price\":3.048},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"avg_price\":2.5909166667},{\"date\":\"2019-01-07\",\"fuel\":\"diesel\",\"avg_price\":3.013},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"avg_price\":2.5606666667},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"avg_price\":2.564},{\"date\":\"2019-01-14\",\"fuel\":\"diesel\",\"avg_price\":2.976},{\"date\":\"2019-01-21\",\"fuel\":\"diesel\",\"avg_price\":2.965},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"avg_price\":2.56425},{\"date\":\"2019-01-28\",\"fuel\":\"diesel\",\"avg_price\":2.965},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"avg_price\":2.5623333333},{\"date\":\"2019-02-04\",\"fuel\":\"diesel\",\"avg_price\":2.966},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"avg_price\":2.5584166667},{\"date\":\"2019-02-11\",\"fuel\":\"diesel\",\"avg_price\":2.966},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"avg_price\":2.57625},{\"date\":\"2019-02-18\",\"fuel\":\"diesel\",\"avg_price\":3.006},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"avg_price\":2.6099166667},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"avg_price\":2.6711666667},{\"date\":\"2019-02-25\",\"fuel\":\"diesel\",\"avg_price\":3.048},{\"date\":\"2019-03-04\",\"fuel\":\"diesel\",\"avg_price\":3.076},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"avg_price\":2.6981666667},{\"date\":\"2019-03-11\",\"fuel\":\"diesel\",\"avg_price\":3.079},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"avg_price\":2.74175},{\"date\":\"2019-03-18\",\"fuel\":\"diesel\",\"avg_price\":3.07},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"avg_price\":2.8166666667},{\"date\":\"2019-03-25\",\"fuel\":\"diesel\",\"avg_price\":3.08},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"avg_price\":2.8960833333},{\"date\":\"2019-04-01\",\"fuel\":\"diesel\",\"avg_price\":3.078},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"avg_price\":2.9681666667},{\"date\":\"2019-04-08\",\"fuel\":\"diesel\",\"avg_price\":3.093},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"avg_price\":3.0340833333},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"avg_price\":3.1266666667},{\"date\":\"2019-04-15\",\"fuel\":\"diesel\",\"avg_price\":3.118},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"avg_price\":3.14875},{\"date\":\"2019-04-22\",\"fuel\":\"diesel\",\"avg_price\":3.147},{\"date\":\"2019-04-29\",\"fuel\":\"diesel\",\"avg_price\":3.169},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"avg_price\":3.19725},{\"date\":\"2019-05-06\",\"fuel\":\"diesel\",\"avg_price\":3.171},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"avg_price\":3.21075},{\"date\":\"2019-05-13\",\"fuel\":\"diesel\",\"avg_price\":3.16},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"avg_price\":3.1830833333},{\"date\":\"2019-05-20\",\"fuel\":\"diesel\",\"avg_price\":3.163},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"avg_price\":3.1685},{\"date\":\"2019-05-27\",\"fuel\":\"diesel\",\"avg_price\":3.151},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"avg_price\":3.1375833333},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"avg_price\":3.1171666667},{\"date\":\"2019-06-03\",\"fuel\":\"diesel\",\"avg_price\":3.136},{\"date\":\"2019-06-10\",\"fuel\":\"diesel\",\"avg_price\":3.105},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"avg_price\":3.0486666667},{\"date\":\"2019-06-17\",\"fuel\":\"diesel\",\"avg_price\":3.07},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"avg_price\":2.99025},{\"date\":\"2019-06-24\",\"fuel\":\"diesel\",\"avg_price\":3.043},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"avg_price\":2.9665},{\"date\":\"2019-07-01\",\"fuel\":\"diesel\",\"avg_price\":3.042},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"avg_price\":3.01575},{\"date\":\"2019-07-08\",\"fuel\":\"diesel\",\"avg_price\":3.055},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"avg_price\":3.0401666667},{\"date\":\"2019-07-15\",\"fuel\":\"diesel\",\"avg_price\":3.051},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"avg_price\":3.0685833333},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"avg_price\":3.0430833333},{\"date\":\"2019-07-22\",\"fuel\":\"diesel\",\"avg_price\":3.044},{\"date\":\"2019-07-29\",\"fuel\":\"diesel\",\"avg_price\":3.034},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"avg_price\":3.0111666667},{\"date\":\"2019-08-05\",\"fuel\":\"diesel\",\"avg_price\":3.032},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"avg_price\":2.987},{\"date\":\"2019-08-12\",\"fuel\":\"diesel\",\"avg_price\":3.011},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"avg_price\":2.9296666667},{\"date\":\"2019-08-19\",\"fuel\":\"diesel\",\"avg_price\":2.994},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"avg_price\":2.9025833333},{\"date\":\"2019-08-26\",\"fuel\":\"diesel\",\"avg_price\":2.983},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"avg_price\":2.883},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"avg_price\":2.8750833333},{\"date\":\"2019-09-02\",\"fuel\":\"diesel\",\"avg_price\":2.976},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"avg_price\":2.8625833333},{\"date\":\"2019-09-09\",\"fuel\":\"diesel\",\"avg_price\":2.971},{\"date\":\"2019-09-16\",\"fuel\":\"diesel\",\"avg_price\":2.987},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"avg_price\":2.86325},{\"date\":\"2019-09-23\",\"fuel\":\"diesel\",\"avg_price\":3.081},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"avg_price\":2.9605},{\"date\":\"2019-09-30\",\"fuel\":\"diesel\",\"avg_price\":3.066},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"avg_price\":2.98525},{\"date\":\"2019-10-07\",\"fuel\":\"diesel\",\"avg_price\":3.047},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"avg_price\":2.9979166667},{\"date\":\"2019-10-14\",\"fuel\":\"diesel\",\"avg_price\":3.051},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"avg_price\":2.985},{\"date\":\"2019-10-21\",\"fuel\":\"diesel\",\"avg_price\":3.05},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"avg_price\":2.9860833333},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"avg_price\":2.94375},{\"date\":\"2019-10-28\",\"fuel\":\"diesel\",\"avg_price\":3.064},{\"date\":\"2019-11-04\",\"fuel\":\"diesel\",\"avg_price\":3.062},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"avg_price\":2.9556666667},{\"date\":\"2019-11-11\",\"fuel\":\"diesel\",\"avg_price\":3.073},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"avg_price\":2.9631666667},{\"date\":\"2019-11-18\",\"fuel\":\"diesel\",\"avg_price\":3.074},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"avg_price\":2.9349166667},{\"date\":\"2019-11-25\",\"fuel\":\"diesel\",\"avg_price\":3.066},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"avg_price\":2.9135833333},{\"date\":\"2019-12-02\",\"fuel\":\"diesel\",\"avg_price\":3.07},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"avg_price\":2.8996666667},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"avg_price\":2.88125},{\"date\":\"2019-12-09\",\"fuel\":\"diesel\",\"avg_price\":3.049},{\"date\":\"2019-12-16\",\"fuel\":\"diesel\",\"avg_price\":3.046},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"avg_price\":2.8563333333},{\"date\":\"2019-12-23\",\"fuel\":\"diesel\",\"avg_price\":3.041},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"avg_price\":2.8466666667},{\"date\":\"2019-12-30\",\"fuel\":\"diesel\",\"avg_price\":3.069},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"avg_price\":2.8751666667},{\"date\":\"2020-01-06\",\"fuel\":\"diesel\",\"avg_price\":3.079},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"avg_price\":2.8808333333},{\"date\":\"2020-01-13\",\"fuel\":\"diesel\",\"avg_price\":3.064},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"avg_price\":2.87475},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"avg_price\":2.8461666667},{\"date\":\"2020-01-20\",\"fuel\":\"diesel\",\"avg_price\":3.037},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"avg_price\":2.8190833333},{\"date\":\"2020-01-27\",\"fuel\":\"diesel\",\"avg_price\":3.01},{\"date\":\"2020-02-03\",\"fuel\":\"diesel\",\"avg_price\":2.956},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"avg_price\":2.7765},{\"date\":\"2020-02-10\",\"fuel\":\"diesel\",\"avg_price\":2.91},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"avg_price\":2.7435833333},{\"date\":\"2020-02-17\",\"fuel\":\"diesel\",\"avg_price\":2.89},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"avg_price\":2.74575},{\"date\":\"2020-02-24\",\"fuel\":\"diesel\",\"avg_price\":2.882},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"avg_price\":2.7789166667},{\"date\":\"2020-03-02\",\"fuel\":\"diesel\",\"avg_price\":2.851},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"avg_price\":2.7453333333},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"avg_price\":2.7021666667},{\"date\":\"2020-03-09\",\"fuel\":\"diesel\",\"avg_price\":2.814},{\"date\":\"2020-03-16\",\"fuel\":\"diesel\",\"avg_price\":2.733},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"avg_price\":2.58475},{\"date\":\"2020-03-23\",\"fuel\":\"diesel\",\"avg_price\":2.659},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"avg_price\":2.4628333333},{\"date\":\"2020-03-30\",\"fuel\":\"diesel\",\"avg_price\":2.586},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"avg_price\":2.355},{\"date\":\"2020-04-06\",\"fuel\":\"diesel\",\"avg_price\":2.548},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"avg_price\":2.2745833333},{\"date\":\"2020-04-13\",\"fuel\":\"diesel\",\"avg_price\":2.507},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"avg_price\":2.20125},{\"date\":\"2020-04-20\",\"fuel\":\"diesel\",\"avg_price\":2.48},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"avg_price\":2.1604166667},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"avg_price\":2.11725},{\"date\":\"2020-04-27\",\"fuel\":\"diesel\",\"avg_price\":2.437},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"avg_price\":2.1213333333},{\"date\":\"2020-05-04\",\"fuel\":\"diesel\",\"avg_price\":2.399},{\"date\":\"2020-05-11\",\"fuel\":\"diesel\",\"avg_price\":2.394},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"avg_price\":2.1696666667},{\"date\":\"2020-05-18\",\"fuel\":\"diesel\",\"avg_price\":2.386},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"avg_price\":2.1990833333},{\"date\":\"2020-05-25\",\"fuel\":\"diesel\",\"avg_price\":2.39},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"avg_price\":2.2720833333},{\"date\":\"2020-06-01\",\"fuel\":\"diesel\",\"avg_price\":2.386},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"avg_price\":2.2890833333},{\"date\":\"2020-06-08\",\"fuel\":\"diesel\",\"avg_price\":2.396},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"avg_price\":2.344},{\"date\":\"2020-06-15\",\"fuel\":\"diesel\",\"avg_price\":2.403},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"avg_price\":2.4030833333},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"avg_price\":2.43225},{\"date\":\"2020-06-22\",\"fuel\":\"diesel\",\"avg_price\":2.425},{\"date\":\"2020-06-29\",\"fuel\":\"diesel\",\"avg_price\":2.43},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"avg_price\":2.4748333333},{\"date\":\"2020-07-06\",\"fuel\":\"diesel\",\"avg_price\":2.437},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"avg_price\":2.48025},{\"date\":\"2020-07-13\",\"fuel\":\"diesel\",\"avg_price\":2.438},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"avg_price\":2.49975},{\"date\":\"2020-07-20\",\"fuel\":\"diesel\",\"avg_price\":2.433},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"avg_price\":2.4939166667},{\"date\":\"2020-07-27\",\"fuel\":\"diesel\",\"avg_price\":2.427},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"avg_price\":2.4895},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"avg_price\":2.49},{\"date\":\"2020-08-03\",\"fuel\":\"diesel\",\"avg_price\":2.424},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"avg_price\":2.4801666667},{\"date\":\"2020-08-10\",\"fuel\":\"diesel\",\"avg_price\":2.428},{\"date\":\"2020-08-17\",\"fuel\":\"diesel\",\"avg_price\":2.427},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"avg_price\":2.4823333333},{\"date\":\"2020-08-24\",\"fuel\":\"diesel\",\"avg_price\":2.426},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"avg_price\":2.498},{\"date\":\"2020-08-31\",\"fuel\":\"diesel\",\"avg_price\":2.441},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"avg_price\":2.5341666667},{\"date\":\"2020-09-07\",\"fuel\":\"diesel\",\"avg_price\":2.435},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"avg_price\":2.5275},{\"date\":\"2020-09-14\",\"fuel\":\"diesel\",\"avg_price\":2.422},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"avg_price\":2.5030833333},{\"date\":\"2020-09-21\",\"fuel\":\"diesel\",\"avg_price\":2.404},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"avg_price\":2.4869166667},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"avg_price\":2.4848333333},{\"date\":\"2020-09-28\",\"fuel\":\"diesel\",\"avg_price\":2.394},{\"date\":\"2020-10-05\",\"fuel\":\"diesel\",\"avg_price\":2.387},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"avg_price\":2.4865},{\"date\":\"2020-10-12\",\"fuel\":\"diesel\",\"avg_price\":2.395},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"avg_price\":2.4828333333},{\"date\":\"2020-10-19\",\"fuel\":\"diesel\",\"avg_price\":2.388},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"avg_price\":2.4681666667},{\"date\":\"2020-10-26\",\"fuel\":\"diesel\",\"avg_price\":2.385},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"avg_price\":2.4629166667},{\"date\":\"2020-11-02\",\"fuel\":\"diesel\",\"avg_price\":2.372},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"avg_price\":2.436},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"avg_price\":2.42075},{\"date\":\"2020-11-09\",\"fuel\":\"diesel\",\"avg_price\":2.383},{\"date\":\"2020-11-16\",\"fuel\":\"diesel\",\"avg_price\":2.441},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"avg_price\":2.4341666667},{\"date\":\"2020-11-23\",\"fuel\":\"diesel\",\"avg_price\":2.462},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"avg_price\":2.4274166667},{\"date\":\"2020-11-30\",\"fuel\":\"diesel\",\"avg_price\":2.502},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"avg_price\":2.443},{\"date\":\"2020-12-07\",\"fuel\":\"diesel\",\"avg_price\":2.526},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"avg_price\":2.4734166667},{\"date\":\"2020-12-14\",\"fuel\":\"diesel\",\"avg_price\":2.559},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"avg_price\":2.4745},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"avg_price\":2.5308333333},{\"date\":\"2020-12-21\",\"fuel\":\"diesel\",\"avg_price\":2.619},{\"date\":\"2020-12-28\",\"fuel\":\"diesel\",\"avg_price\":2.635},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"avg_price\":2.5481666667},{\"date\":\"2021-01-04\",\"fuel\":\"diesel\",\"avg_price\":2.64},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"avg_price\":2.5546666667},{\"date\":\"2021-01-11\",\"fuel\":\"diesel\",\"avg_price\":2.67},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"avg_price\":2.6196666667},{\"date\":\"2021-01-18\",\"fuel\":\"diesel\",\"avg_price\":2.696},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"avg_price\":2.6805},{\"date\":\"2021-01-25\",\"fuel\":\"diesel\",\"avg_price\":2.716},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"avg_price\":2.6963333333},{\"date\":\"2021-02-01\",\"fuel\":\"diesel\",\"avg_price\":2.738},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"avg_price\":2.7136666667},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"avg_price\":2.76625},{\"date\":\"2021-02-08\",\"fuel\":\"diesel\",\"avg_price\":2.801},{\"date\":\"2021-02-15\",\"fuel\":\"diesel\",\"avg_price\":2.876},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"avg_price\":2.8070833333},{\"date\":\"2021-02-22\",\"fuel\":\"diesel\",\"avg_price\":2.973},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"avg_price\":2.9301666667},{\"date\":\"2021-03-01\",\"fuel\":\"diesel\",\"avg_price\":3.072},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"avg_price\":3.0103333333},{\"date\":\"2021-03-08\",\"fuel\":\"diesel\",\"avg_price\":3.143},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"avg_price\":3.0729166667},{\"date\":\"2021-03-15\",\"fuel\":\"diesel\",\"avg_price\":3.191},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"avg_price\":3.1585},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"avg_price\":3.1751666667},{\"date\":\"2021-03-22\",\"fuel\":\"diesel\",\"avg_price\":3.194},{\"date\":\"2021-03-29\",\"fuel\":\"diesel\",\"avg_price\":3.161},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"avg_price\":3.1625833333},{\"date\":\"2021-04-05\",\"fuel\":\"diesel\",\"avg_price\":3.144},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"avg_price\":3.16725},{\"date\":\"2021-04-12\",\"fuel\":\"diesel\",\"avg_price\":3.129},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"avg_price\":3.1645833333},{\"date\":\"2021-04-19\",\"fuel\":\"diesel\",\"avg_price\":3.124},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"avg_price\":3.172},{\"date\":\"2021-04-26\",\"fuel\":\"diesel\",\"avg_price\":3.124},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"avg_price\":3.1914166667},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"avg_price\":3.2116666667},{\"date\":\"2021-05-03\",\"fuel\":\"diesel\",\"avg_price\":3.142},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"avg_price\":3.2814166667},{\"date\":\"2021-05-10\",\"fuel\":\"diesel\",\"avg_price\":3.186},{\"date\":\"2021-05-17\",\"fuel\":\"diesel\",\"avg_price\":3.249},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"avg_price\":3.34575},{\"date\":\"2021-05-24\",\"fuel\":\"diesel\",\"avg_price\":3.253},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"avg_price\":3.34525},{\"date\":\"2021-05-31\",\"fuel\":\"diesel\",\"avg_price\":3.255},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"avg_price\":3.35275},{\"date\":\"2021-06-07\",\"fuel\":\"diesel\",\"avg_price\":3.274},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"avg_price\":3.3636666667},{\"date\":\"2021-06-14\",\"fuel\":\"diesel\",\"avg_price\":3.286},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"avg_price\":3.39425},{\"date\":\"2021-06-21\",\"fuel\":\"diesel\",\"avg_price\":3.287},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"avg_price\":3.3904166667},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"avg_price\":3.4235},{\"date\":\"2021-06-28\",\"fuel\":\"diesel\",\"avg_price\":3.3},{\"date\":\"2021-07-05\",\"fuel\":\"diesel\",\"avg_price\":3.331},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"avg_price\":3.4525833333},{\"date\":\"2021-07-12\",\"fuel\":\"diesel\",\"avg_price\":3.338},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"avg_price\":3.4655},{\"date\":\"2021-07-19\",\"fuel\":\"diesel\",\"avg_price\":3.344},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"avg_price\":3.4844166667},{\"date\":\"2021-07-26\",\"fuel\":\"diesel\",\"avg_price\":3.342},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"avg_price\":3.4724166667},{\"date\":\"2021-08-02\",\"fuel\":\"diesel\",\"avg_price\":3.367},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"avg_price\":3.4996666667},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"avg_price\":3.5111666667},{\"date\":\"2021-08-09\",\"fuel\":\"diesel\",\"avg_price\":3.364},{\"date\":\"2021-08-16\",\"fuel\":\"diesel\",\"avg_price\":3.356},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"avg_price\":3.51675},{\"date\":\"2021-08-23\",\"fuel\":\"diesel\",\"avg_price\":3.324},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"avg_price\":3.4896666667},{\"date\":\"2021-08-30\",\"fuel\":\"diesel\",\"avg_price\":3.339},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"avg_price\":3.4851666667},{\"date\":\"2021-09-06\",\"fuel\":\"diesel\",\"avg_price\":3.373},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"avg_price\":3.5165833333},{\"date\":\"2021-09-13\",\"fuel\":\"diesel\",\"avg_price\":3.372},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"avg_price\":3.5061666667},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"avg_price\":3.5210833333},{\"date\":\"2021-09-20\",\"fuel\":\"diesel\",\"avg_price\":3.385},{\"date\":\"2021-09-27\",\"fuel\":\"diesel\",\"avg_price\":3.406},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"avg_price\":3.5143333333},{\"date\":\"2021-10-04\",\"fuel\":\"diesel\",\"avg_price\":3.477},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"avg_price\":3.5270833333},{\"date\":\"2021-10-11\",\"fuel\":\"diesel\",\"avg_price\":3.586},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"avg_price\":3.5971666667},{\"date\":\"2021-10-18\",\"fuel\":\"diesel\",\"avg_price\":3.671},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"avg_price\":3.65275},{\"date\":\"2021-10-25\",\"fuel\":\"diesel\",\"avg_price\":3.713},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"avg_price\":3.7156666667},{\"date\":\"2021-11-01\",\"fuel\":\"diesel\",\"avg_price\":3.727},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"avg_price\":3.7273333333},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"avg_price\":3.7481666667},{\"date\":\"2021-11-08\",\"fuel\":\"diesel\",\"avg_price\":3.73},{\"date\":\"2021-11-15\",\"fuel\":\"diesel\",\"avg_price\":3.734},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"avg_price\":3.7454166667},{\"date\":\"2021-11-22\",\"fuel\":\"diesel\",\"avg_price\":3.724},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"avg_price\":3.74575},{\"date\":\"2021-11-29\",\"fuel\":\"diesel\",\"avg_price\":3.72},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"avg_price\":3.7333333333},{\"date\":\"2021-12-06\",\"fuel\":\"diesel\",\"avg_price\":3.674},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"avg_price\":3.69975},{\"date\":\"2021-12-13\",\"fuel\":\"diesel\",\"avg_price\":3.649},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"avg_price\":3.6755},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"avg_price\":3.6595},{\"date\":\"2021-12-20\",\"fuel\":\"diesel\",\"avg_price\":3.626},{\"date\":\"2021-12-27\",\"fuel\":\"diesel\",\"avg_price\":3.615},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"avg_price\":3.6401666667},{\"date\":\"2022-01-03\",\"fuel\":\"diesel\",\"avg_price\":3.613},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"avg_price\":3.64475},{\"date\":\"2022-01-10\",\"fuel\":\"diesel\",\"avg_price\":3.657},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"avg_price\":3.6535833333},{\"date\":\"2022-01-17\",\"fuel\":\"diesel\",\"avg_price\":3.725},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"avg_price\":3.6615},{\"date\":\"2022-01-24\",\"fuel\":\"diesel\",\"avg_price\":3.78},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"avg_price\":3.6755},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"avg_price\":3.7140833333},{\"date\":\"2022-01-31\",\"fuel\":\"diesel\",\"avg_price\":3.846},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"avg_price\":3.7806666667},{\"date\":\"2022-02-07\",\"fuel\":\"diesel\",\"avg_price\":3.951},{\"date\":\"2022-02-14\",\"fuel\":\"diesel\",\"avg_price\":4.019},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"avg_price\":3.82275},{\"date\":\"2022-02-21\",\"fuel\":\"diesel\",\"avg_price\":4.055},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"avg_price\":3.8669166667},{\"date\":\"2022-02-28\",\"fuel\":\"diesel\",\"avg_price\":4.104},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"avg_price\":3.9433333333},{\"date\":\"2022-03-07\",\"fuel\":\"diesel\",\"avg_price\":4.849},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"avg_price\":4.4456666667},{\"date\":\"2022-03-14\",\"fuel\":\"diesel\",\"avg_price\":5.25},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"avg_price\":4.6726666667},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"avg_price\":4.6170833333},{\"date\":\"2022-03-21\",\"fuel\":\"diesel\",\"avg_price\":5.134},{\"date\":\"2022-03-28\",\"fuel\":\"diesel\",\"avg_price\":5.185},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"avg_price\":4.61125},{\"date\":\"2022-04-04\",\"fuel\":\"diesel\",\"avg_price\":5.144},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"avg_price\":4.5525833333},{\"date\":\"2022-04-11\",\"fuel\":\"diesel\",\"avg_price\":5.073},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"avg_price\":4.4771666667},{\"date\":\"2022-04-18\",\"fuel\":\"diesel\",\"avg_price\":5.101},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"avg_price\":4.4511666667},{\"date\":\"2022-04-25\",\"fuel\":\"diesel\",\"avg_price\":5.16},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"avg_price\":4.4879166667},{\"date\":\"2022-05-02\",\"fuel\":\"diesel\",\"avg_price\":5.509},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"avg_price\":4.5610833333},{\"date\":\"2022-05-09\",\"fuel\":\"diesel\",\"avg_price\":5.623},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"avg_price\":4.701},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"avg_price\":4.8656666667},{\"date\":\"2022-05-16\",\"fuel\":\"diesel\",\"avg_price\":5.613},{\"date\":\"2022-05-23\",\"fuel\":\"diesel\",\"avg_price\":5.571},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"avg_price\":4.9719166667},{\"date\":\"2022-05-30\",\"fuel\":\"diesel\",\"avg_price\":5.539},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"avg_price\":5.012},{\"date\":\"2022-06-06\",\"fuel\":\"diesel\",\"avg_price\":5.703},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"avg_price\":5.2535},{\"date\":\"2022-06-13\",\"fuel\":\"diesel\",\"avg_price\":5.718},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"avg_price\":5.38075},{\"date\":\"2022-06-20\",\"fuel\":\"diesel\",\"avg_price\":5.81},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"avg_price\":5.3458333333},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"avg_price\":5.2643333333},{\"date\":\"2022-06-27\",\"fuel\":\"diesel\",\"avg_price\":5.783},{\"date\":\"2022-07-04\",\"fuel\":\"diesel\",\"avg_price\":5.675},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"avg_price\":5.1664166667},{\"date\":\"2022-07-11\",\"fuel\":\"diesel\",\"avg_price\":5.568},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"avg_price\":5.0398333333},{\"date\":\"2022-07-18\",\"fuel\":\"diesel\",\"avg_price\":5.432},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"avg_price\":4.883},{\"date\":\"2022-07-25\",\"fuel\":\"diesel\",\"avg_price\":5.268},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"avg_price\":4.7291666667},{\"date\":\"2022-08-01\",\"fuel\":\"diesel\",\"avg_price\":5.138},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"avg_price\":4.5989166667},{\"date\":\"2022-08-08\",\"fuel\":\"diesel\",\"avg_price\":4.993},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"avg_price\":4.4489166667},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"avg_price\":4.349},{\"date\":\"2022-08-15\",\"fuel\":\"diesel\",\"avg_price\":4.911},{\"date\":\"2022-08-22\",\"fuel\":\"diesel\",\"avg_price\":4.909},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"avg_price\":4.2890833333},{\"date\":\"2022-08-29\",\"fuel\":\"diesel\",\"avg_price\":5.115},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"avg_price\":4.2285},{\"date\":\"2022-09-05\",\"fuel\":\"diesel\",\"avg_price\":5.084},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"avg_price\":4.1523333333},{\"date\":\"2022-09-12\",\"fuel\":\"diesel\",\"avg_price\":5.033},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"avg_price\":4.1074166667},{\"date\":\"2022-09-19\",\"fuel\":\"diesel\",\"avg_price\":4.964},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"avg_price\":4.0789166667},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"avg_price\":4.14825},{\"date\":\"2022-09-26\",\"fuel\":\"diesel\",\"avg_price\":4.889},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"avg_price\":4.2526666667},{\"date\":\"2022-10-03\",\"fuel\":\"diesel\",\"avg_price\":4.836},{\"date\":\"2022-10-10\",\"fuel\":\"diesel\",\"avg_price\":5.224},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"avg_price\":4.3633333333},{\"date\":\"2022-10-17\",\"fuel\":\"diesel\",\"avg_price\":5.339},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"avg_price\":4.3120833333},{\"date\":\"2022-10-24\",\"fuel\":\"diesel\",\"avg_price\":5.341},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"avg_price\":4.1995833333},{\"date\":\"2022-10-31\",\"fuel\":\"diesel\",\"avg_price\":5.317},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"avg_price\":4.1658333333},{\"date\":\"2022-11-07\",\"fuel\":\"diesel\",\"avg_price\":5.333},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"avg_price\":4.2105},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"avg_price\":4.17825},{\"date\":\"2022-11-14\",\"fuel\":\"diesel\",\"avg_price\":5.313},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"avg_price\":4.0665},{\"date\":\"2022-11-21\",\"fuel\":\"diesel\",\"avg_price\":5.233},{\"date\":\"2022-11-28\",\"fuel\":\"diesel\",\"avg_price\":5.141},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"avg_price\":3.9478333333},{\"date\":\"2022-12-05\",\"fuel\":\"diesel\",\"avg_price\":4.967},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"avg_price\":3.7958333333},{\"date\":\"2022-12-12\",\"fuel\":\"diesel\",\"avg_price\":4.754},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"avg_price\":3.6435833333},{\"date\":\"2022-12-19\",\"fuel\":\"diesel\",\"avg_price\":4.596},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"avg_price\":3.523},{\"date\":\"2022-12-26\",\"fuel\":\"diesel\",\"avg_price\":4.537},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"avg_price\":3.4898333333},{\"date\":\"2023-01-02\",\"fuel\":\"diesel\",\"avg_price\":4.583},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"avg_price\":3.6025},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"avg_price\":3.6311666667},{\"date\":\"2023-01-09\",\"fuel\":\"diesel\",\"avg_price\":4.549},{\"date\":\"2023-01-16\",\"fuel\":\"diesel\",\"avg_price\":4.524},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"avg_price\":3.67775},{\"date\":\"2023-01-23\",\"fuel\":\"diesel\",\"avg_price\":4.604},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"avg_price\":3.774},{\"date\":\"2023-01-30\",\"fuel\":\"diesel\",\"avg_price\":4.622},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"avg_price\":3.8493333333},{\"date\":\"2023-02-06\",\"fuel\":\"diesel\",\"avg_price\":4.539},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"avg_price\":3.8183333333},{\"date\":\"2023-02-13\",\"fuel\":\"diesel\",\"avg_price\":4.444},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"avg_price\":3.77675},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"avg_price\":3.776},{\"date\":\"2023-02-20\",\"fuel\":\"diesel\",\"avg_price\":4.376},{\"date\":\"2023-02-27\",\"fuel\":\"diesel\",\"avg_price\":4.294},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"avg_price\":3.7435833333},{\"date\":\"2023-03-06\",\"fuel\":\"diesel\",\"avg_price\":4.282},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"avg_price\":3.7944166667},{\"date\":\"2023-03-13\",\"fuel\":\"diesel\",\"avg_price\":4.247},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"avg_price\":3.8526666667},{\"date\":\"2023-03-20\",\"fuel\":\"diesel\",\"avg_price\":4.185},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"avg_price\":3.81625},{\"date\":\"2023-03-27\",\"fuel\":\"diesel\",\"avg_price\":4.128},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"avg_price\":3.81875},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"avg_price\":3.883},{\"date\":\"2023-04-03\",\"fuel\":\"diesel\",\"avg_price\":4.105},{\"date\":\"2023-04-10\",\"fuel\":\"diesel\",\"avg_price\":4.098},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"avg_price\":3.9720833333},{\"date\":\"2023-04-17\",\"fuel\":\"diesel\",\"avg_price\":4.116},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"avg_price\":4.0398333333},{\"date\":\"2023-04-24\",\"fuel\":\"diesel\",\"avg_price\":4.077},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"avg_price\":4.0428333333},{\"date\":\"2023-05-01\",\"fuel\":\"diesel\",\"avg_price\":4.018},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"avg_price\":3.9936666667},{\"date\":\"2023-05-08\",\"fuel\":\"diesel\",\"avg_price\":3.922},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"avg_price\":3.9304166667},{\"date\":\"2023-05-15\",\"fuel\":\"diesel\",\"avg_price\":3.897},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"avg_price\":3.9295},{\"date\":\"2023-05-22\",\"fuel\":\"diesel\",\"avg_price\":3.883},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"avg_price\":3.9285833333},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"avg_price\":3.9719166667},{\"date\":\"2023-05-29\",\"fuel\":\"diesel\",\"avg_price\":3.855},{\"date\":\"2023-06-05\",\"fuel\":\"diesel\",\"avg_price\":3.797},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"avg_price\":3.9455833333},{\"date\":\"2023-06-12\",\"fuel\":\"diesel\",\"avg_price\":3.794},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"avg_price\":3.995},{\"date\":\"2023-06-19\",\"fuel\":\"diesel\",\"avg_price\":3.815},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"avg_price\":3.98025},{\"date\":\"2023-06-26\",\"fuel\":\"diesel\",\"avg_price\":3.801},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"avg_price\":3.9753333333},{\"date\":\"2023-07-03\",\"fuel\":\"diesel\",\"avg_price\":3.767},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"avg_price\":3.9385833333},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"avg_price\":3.9613333333},{\"date\":\"2023-07-10\",\"fuel\":\"diesel\",\"avg_price\":3.806},{\"date\":\"2023-07-17\",\"fuel\":\"diesel\",\"avg_price\":3.806},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"avg_price\":3.9698333333},{\"date\":\"2023-07-24\",\"fuel\":\"diesel\",\"avg_price\":3.905},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"avg_price\":4.0019166667},{\"date\":\"2023-07-31\",\"fuel\":\"diesel\",\"avg_price\":4.127},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"avg_price\":4.1503333333},{\"date\":\"2023-08-07\",\"fuel\":\"diesel\",\"avg_price\":4.239},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"avg_price\":4.2188333333},{\"date\":\"2023-08-14\",\"fuel\":\"diesel\",\"avg_price\":4.378},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"avg_price\":4.2440833333},{\"date\":\"2023-08-21\",\"fuel\":\"diesel\",\"avg_price\":4.389},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"avg_price\":4.2770833333},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"avg_price\":4.23275},{\"date\":\"2023-08-28\",\"fuel\":\"diesel\",\"avg_price\":4.475},{\"date\":\"2023-09-04\",\"fuel\":\"diesel\",\"avg_price\":4.492},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"avg_price\":4.22625},{\"date\":\"2023-09-11\",\"fuel\":\"diesel\",\"avg_price\":4.54},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"avg_price\":4.2460833333},{\"date\":\"2023-09-18\",\"fuel\":\"diesel\",\"avg_price\":4.633},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"avg_price\":4.323},{\"date\":\"2023-09-25\",\"fuel\":\"diesel\",\"avg_price\":4.586},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"avg_price\":4.2991666667},{\"date\":\"2023-10-02\",\"fuel\":\"diesel\",\"avg_price\":4.593},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"avg_price\":4.28625},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"avg_price\":4.1599166667},{\"date\":\"2023-10-09\",\"fuel\":\"diesel\",\"avg_price\":4.498},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"avg_price\":4.0485},{\"date\":\"2023-10-16\",\"fuel\":\"diesel\",\"avg_price\":4.444},{\"date\":\"2023-10-23\",\"fuel\":\"diesel\",\"avg_price\":4.545},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"avg_price\":3.99475},{\"date\":\"2023-10-30\",\"fuel\":\"diesel\",\"avg_price\":4.454},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"avg_price\":3.9290833333},{\"date\":\"2023-11-06\",\"fuel\":\"diesel\",\"avg_price\":4.366},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"avg_price\":3.8448333333},{\"date\":\"2023-11-13\",\"fuel\":\"diesel\",\"avg_price\":4.294},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"avg_price\":3.789},{\"date\":\"2023-11-20\",\"fuel\":\"diesel\",\"avg_price\":4.209},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"avg_price\":3.7325833333},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"avg_price\":3.6828333333},{\"date\":\"2023-11-27\",\"fuel\":\"diesel\",\"avg_price\":4.146},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"avg_price\":3.6656666667},{\"date\":\"2023-12-04\",\"fuel\":\"diesel\",\"avg_price\":4.092},{\"date\":\"2023-12-11\",\"fuel\":\"diesel\",\"avg_price\":3.987},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"avg_price\":3.5654166667},{\"date\":\"2023-12-18\",\"fuel\":\"diesel\",\"avg_price\":3.894},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"avg_price\":3.4815},{\"date\":\"2023-12-25\",\"fuel\":\"diesel\",\"avg_price\":3.914},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"avg_price\":3.5409166667},{\"date\":\"2024-01-01\",\"fuel\":\"diesel\",\"avg_price\":3.876},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"avg_price\":3.5228333333},{\"date\":\"2024-01-08\",\"fuel\":\"diesel\",\"avg_price\":3.828},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"avg_price\":3.5079166667},{\"date\":\"2024-01-15\",\"fuel\":\"diesel\",\"avg_price\":3.863},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"avg_price\":3.4788333333},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"avg_price\":3.4768333333},{\"date\":\"2024-01-22\",\"fuel\":\"diesel\",\"avg_price\":3.838},{\"date\":\"2024-01-29\",\"fuel\":\"diesel\",\"avg_price\":3.867},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"avg_price\":3.5109166667},{\"date\":\"2024-02-05\",\"fuel\":\"diesel\",\"avg_price\":3.899},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"avg_price\":3.54975},{\"date\":\"2024-02-12\",\"fuel\":\"diesel\",\"avg_price\":4.109},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"avg_price\":3.5989166667},{\"date\":\"2024-02-19\",\"fuel\":\"diesel\",\"avg_price\":4.109},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"avg_price\":3.6731666667},{\"date\":\"2024-02-26\",\"fuel\":\"diesel\",\"avg_price\":4.058},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"avg_price\":3.6526666667},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"avg_price\":3.7561666667},{\"date\":\"2024-03-04\",\"fuel\":\"diesel\",\"avg_price\":4.022},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"avg_price\":3.781},{\"date\":\"2024-03-11\",\"fuel\":\"diesel\",\"avg_price\":4.004},{\"date\":\"2024-03-18\",\"fuel\":\"diesel\",\"avg_price\":4.028},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"avg_price\":3.8548333333},{\"date\":\"2024-03-25\",\"fuel\":\"diesel\",\"avg_price\":4.034},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"avg_price\":3.9271666667},{\"date\":\"2024-04-01\",\"fuel\":\"diesel\",\"avg_price\":3.996},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"avg_price\":3.9306666667},{\"date\":\"2024-04-08\",\"fuel\":\"diesel\",\"avg_price\":4.061},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"avg_price\":4.0188333333},{\"date\":\"2024-04-15\",\"fuel\":\"diesel\",\"avg_price\":4.015},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"avg_price\":4.06375},{\"date\":\"2024-04-22\",\"fuel\":\"diesel\",\"avg_price\":3.992},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"avg_price\":4.10625},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"avg_price\":4.09125},{\"date\":\"2024-04-29\",\"fuel\":\"diesel\",\"avg_price\":3.947},{\"date\":\"2024-05-06\",\"fuel\":\"diesel\",\"avg_price\":3.894},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"avg_price\":4.0814166667},{\"date\":\"2024-05-13\",\"fuel\":\"diesel\",\"avg_price\":3.848},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"avg_price\":4.0420833333},{\"date\":\"2024-05-20\",\"fuel\":\"diesel\",\"avg_price\":3.789},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"avg_price\":4.0134166667},{\"date\":\"2024-05-27\",\"fuel\":\"diesel\",\"avg_price\":3.758},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"avg_price\":4.00925},{\"date\":\"2024-06-03\",\"fuel\":\"diesel\",\"avg_price\":3.726},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"avg_price\":3.9465},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"avg_price\":3.8579166667},{\"date\":\"2024-06-10\",\"fuel\":\"diesel\",\"avg_price\":3.658},{\"date\":\"2024-06-17\",\"fuel\":\"diesel\",\"avg_price\":3.735},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"avg_price\":3.8586666667},{\"date\":\"2024-06-24\",\"fuel\":\"diesel\",\"avg_price\":3.769},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"avg_price\":3.8534166667},{\"date\":\"2024-07-01\",\"fuel\":\"diesel\",\"avg_price\":3.813},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"avg_price\":3.8831666667},{\"date\":\"2024-07-08\",\"fuel\":\"diesel\",\"avg_price\":3.865},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"avg_price\":3.90025},{\"date\":\"2024-07-15\",\"fuel\":\"diesel\",\"avg_price\":3.826},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"avg_price\":3.9055},{\"date\":\"2024-07-22\",\"fuel\":\"diesel\",\"avg_price\":3.779},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"avg_price\":3.87175},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"avg_price\":3.879},{\"date\":\"2024-07-29\",\"fuel\":\"diesel\",\"avg_price\":3.768},{\"date\":\"2024-08-05\",\"fuel\":\"diesel\",\"avg_price\":3.755},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"avg_price\":3.84375},{\"date\":\"2024-08-12\",\"fuel\":\"diesel\",\"avg_price\":3.704},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"avg_price\":3.8125},{\"date\":\"2024-08-19\",\"fuel\":\"diesel\",\"avg_price\":3.688},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"avg_price\":3.7886666667},{\"date\":\"2024-08-26\",\"fuel\":\"diesel\",\"avg_price\":3.651},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"avg_price\":3.7275},{\"date\":\"2024-09-02\",\"fuel\":\"diesel\",\"avg_price\":3.625},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"avg_price\":3.7145},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"avg_price\":3.6693333333},{\"date\":\"2024-09-09\",\"fuel\":\"diesel\",\"avg_price\":3.555},{\"date\":\"2024-09-16\",\"fuel\":\"diesel\",\"avg_price\":3.526},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"avg_price\":3.62675},{\"date\":\"2024-09-23\",\"fuel\":\"diesel\",\"avg_price\":3.539},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"avg_price\":3.6224166667},{\"date\":\"2024-09-30\",\"fuel\":\"diesel\",\"avg_price\":3.544},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"avg_price\":3.6073333333},{\"date\":\"2024-10-07\",\"fuel\":\"diesel\",\"avg_price\":3.584},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"avg_price\":3.5685833333},{\"date\":\"2024-10-14\",\"fuel\":\"diesel\",\"avg_price\":3.631},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"avg_price\":3.5970833333},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"avg_price\":3.5735},{\"date\":\"2024-10-21\",\"fuel\":\"diesel\",\"avg_price\":3.553},{\"date\":\"2024-10-28\",\"fuel\":\"diesel\",\"avg_price\":3.573},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"avg_price\":3.5249166667},{\"date\":\"2024-11-04\",\"fuel\":\"diesel\",\"avg_price\":3.536},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"avg_price\":3.493},{\"date\":\"2024-11-11\",\"fuel\":\"diesel\",\"avg_price\":3.521},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"avg_price\":3.4789166667},{\"date\":\"2024-11-18\",\"fuel\":\"diesel\",\"avg_price\":3.491},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"avg_price\":3.4660833333},{\"date\":\"2024-11-25\",\"fuel\":\"diesel\",\"avg_price\":3.539},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"avg_price\":3.4660833333},{\"date\":\"2024-12-02\",\"fuel\":\"diesel\",\"avg_price\":3.54},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"avg_price\":3.45425},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"avg_price\":3.431},{\"date\":\"2024-12-09\",\"fuel\":\"diesel\",\"avg_price\":3.458},{\"date\":\"2024-12-16\",\"fuel\":\"diesel\",\"avg_price\":3.494},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"avg_price\":3.431},{\"date\":\"2024-12-23\",\"fuel\":\"diesel\",\"avg_price\":3.476},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"avg_price\":3.4395},{\"date\":\"2024-12-30\",\"fuel\":\"diesel\",\"avg_price\":3.503},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"avg_price\":3.4266666667},{\"date\":\"2025-01-06\",\"fuel\":\"diesel\",\"avg_price\":3.561},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"avg_price\":3.4620833333},{\"date\":\"2025-01-13\",\"fuel\":\"diesel\",\"avg_price\":3.602},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"avg_price\":3.4610833333},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"avg_price\":3.5243333333},{\"date\":\"2025-01-20\",\"fuel\":\"diesel\",\"avg_price\":3.715},{\"date\":\"2025-01-27\",\"fuel\":\"diesel\",\"avg_price\":3.659},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"avg_price\":3.522},{\"date\":\"2025-02-03\",\"fuel\":\"diesel\",\"avg_price\":3.66},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"avg_price\":3.5101666667},{\"date\":\"2025-02-10\",\"fuel\":\"diesel\",\"avg_price\":3.665},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"avg_price\":3.5611666667},{\"date\":\"2025-02-17\",\"fuel\":\"diesel\",\"avg_price\":3.677},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"avg_price\":3.5964166667},{\"date\":\"2025-02-24\",\"fuel\":\"diesel\",\"avg_price\":3.697},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"avg_price\":3.57775},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"avg_price\":3.5271666667},{\"date\":\"2025-03-03\",\"fuel\":\"diesel\",\"avg_price\":3.635},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"avg_price\":3.51375},{\"date\":\"2025-03-10\",\"fuel\":\"diesel\",\"avg_price\":3.582},{\"date\":\"2025-03-17\",\"fuel\":\"diesel\",\"avg_price\":3.549},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"avg_price\":3.4978333333},{\"date\":\"2025-03-24\",\"fuel\":\"diesel\",\"avg_price\":3.567},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"avg_price\":3.5485833333},{\"date\":\"2025-03-31\",\"fuel\":\"diesel\",\"avg_price\":3.592},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"avg_price\":3.6035},{\"date\":\"2025-04-07\",\"fuel\":\"diesel\",\"avg_price\":3.639},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"avg_price\":3.6863333333},{\"date\":\"2025-04-14\",\"fuel\":\"diesel\",\"avg_price\":3.579},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"avg_price\":3.613},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"avg_price\":3.58525},{\"date\":\"2025-04-21\",\"fuel\":\"diesel\",\"avg_price\":3.534},{\"date\":\"2025-04-28\",\"fuel\":\"diesel\",\"avg_price\":3.514},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"avg_price\":3.57875},{\"date\":\"2025-05-05\",\"fuel\":\"diesel\",\"avg_price\":3.497},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"avg_price\":3.5851666667},{\"date\":\"2025-05-12\",\"fuel\":\"diesel\",\"avg_price\":3.476},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"avg_price\":3.5728333333},{\"date\":\"2025-05-19\",\"fuel\":\"diesel\",\"avg_price\":3.536},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"avg_price\":3.6244166667},{\"date\":\"2025-05-26\",\"fuel\":\"diesel\",\"avg_price\":3.487},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"avg_price\":3.6089166667},{\"date\":\"2025-06-02\",\"fuel\":\"diesel\",\"avg_price\":3.451},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"avg_price\":3.5746666667},{\"date\":\"2025-06-09\",\"fuel\":\"diesel\",\"avg_price\":3.471},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"avg_price\":3.5501666667},{\"date\":\"2025-06-16\",\"fuel\":\"diesel\",\"avg_price\":3.571},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"avg_price\":3.5765},{\"date\":\"2025-06-23\",\"fuel\":\"diesel\",\"avg_price\":3.775},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"avg_price\":3.6445833333}],\"metadata\":{\"date\":{\"type\":\"date\",\"semanticType\":\"Date\"},\"fuel\":{\"type\":\"string\",\"semanticType\":\"String\"},\"avg_price\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    transformed_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Rename the price column to avg_price for clarity\\n    transformed_df = transformed_df.rename(columns={'price': 'avg_price'})\\n    \\n    # Sort by date for proper line chart rendering\\n    transformed_df = transformed_df.sort_values('date')\\n    \\n    return transformed_df\\n\",\"source\":[\"weekly_gas_prices\"],\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\". \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- you can use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (weekly_gas_prices)\\n\\n## fields\\n\\t*date -- type: object, values: 1990-08-20, 1990-08-27, 1990-09-03, ..., 2025-06-02, 2025-06-09, 2025-06-16, 2025-06-23\\n\\t*fuel -- type: object, values: diesel, gasoline\\n\\t*grade -- type: object, values: all, low_sulfur, midgrade, premium, regular, ultra_low_sulfur\\n\\t*formulation -- type: object, values: NA, all, conventional, reformulated\\n\\t*price -- type: float64, values: 0.885, 0.891, 0.899, ..., 5.955, 5.964, 6.033, 6.064\\n\\n## sample\\n         date      fuel    grade   formulation  price\\n0  1990-08-20  gasoline  regular           all  1.191\\n1  1990-08-20  gasoline  regular  conventional  1.191\\n2  1990-08-27  gasoline  regular           all  1.245\\n3  1990-08-27  gasoline  regular  conventional  1.245\\n4  1990-09-03  gasoline  regular           all  1.242\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nWhat are the major **price trends** across all fuel types from 1990 to 2025?\"},{\"role\":\"assistant\",\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to visualize the major price trends across all fuel types from 1990 to 2025 to understand how fuel prices have evolved over time.\\\",\\n    \\\"display_instruction\\\": \\\"Show **price** trends over time for different **fuel** types\\\",\\n    \\\"recommendation\\\": \\\"To visualize price trends over time across fuel types, we should aggregate the data by date and fuel type. Since there are multiple grades and formulations for each fuel type, we'll calculate the average price for each fuel type on each date. A line chart with date on the x-axis, average price on the y-axis, and different colored lines for each fuel type will clearly show the trends and allow easy comparison.\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"fuel\\\", \\\"avg_price\\\"],\\n    \\\"chart_type\\\": \\\"line\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"avg_price\\\",\\n        \\\"color\\\": \\\"fuel\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    transformed_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Rename the price column to avg_price for clarity\\n    transformed_df = transformed_df.rename(columns={'price': 'avg_price'})\\n    \\n    # Sort by date for proper line chart rendering\\n    transformed_df = transformed_df.sort_values('date')\\n    \\n    return transformed_df\\n```\"}],\"trigger\":{\"tableId\":\"weekly_gas_prices\",\"sourceTableIds\":[\"weekly_gas_prices\"],\"instruction\":\"What are the major **price trends** across all fuel types from 1990 to 2025?\",\"displayInstruction\":\"Show **price** trends over time for different **fuel** types\",\"chart\":{\"id\":\"chart-1760744901532\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"weekly_gas_prices\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-904593\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"The code transforms weekly gas price data by performing the following steps:\\n\\n- **Groups** the data by `date` and `fuel` type (gasoline or diesel)\\n- **Calculates** the mean `price` across all `grade` categories (regular, premium, midgrade, etc.) and `formulation` types (conventional, reformulated, etc.) for each date-fuel combination\\n- **Renames** the aggregated price column to `avg_price` for clarity\\n- **Sorts** the resulting data chronologically by `date` to ensure proper time-series visualization\",\"concepts\":[],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (weekly_gas_prices)\\n\\n## fields\\n\\t*date -- type: object, values: 1990-08-20, 1990-08-27, 1990-09-03, ..., 2025-06-02, 2025-06-09, 2025-06-16, 2025-06-23\\n\\t*fuel -- type: object, values: diesel, gasoline\\n\\t*grade -- type: object, values: all, low_sulfur, midgrade, premium, regular, ultra_low_sulfur\\n\\t*formulation -- type: object, values: NA, all, conventional, reformulated\\n\\t*price -- type: float64, values: 0.885, 0.891, 0.899, ..., 5.955, 5.964, 6.033, 6.064\\n\\n## sample\\n         date      fuel    grade   formulation  price\\n0  1990-08-20  gasoline  regular           all  1.191\\n1  1990-08-20  gasoline  regular  conventional  1.191\\n2  1990-08-27  gasoline  regular           all  1.245\\n3  1990-08-27  gasoline  regular  conventional  1.245\\n4  1990-09-03  gasoline  regular           all  1.242\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    transformed_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Rename the price column to avg_price for clarity\\n    transformed_df = transformed_df.rename(columns={'price': 'avg_price'})\\n    \\n    # Sort by date for proper line chart rendering\\n    transformed_df = transformed_df.sort_values('date')\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThe code transforms weekly gas price data by performing the following steps:\\n\\n- **Groups** the data by `date` and `fuel` type (gasoline or diesel)\\n- **Calculates** the mean `price` across all `grade` categories (regular, premium, midgrade, etc.) and `formulation` types (conventional, reformulated, etc.) for each date-fuel combination\\n- **Renames** the aggregated price column to `avg_price` for clarity\\n- **Sorts** the resulting data chronologically by `date` to ensure proper time-series visualization\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-906894\",\"displayId\":\"gas-price-prem\",\"names\":[\"date\",\"fuel\",\"grade\",\"price_premium\"],\"rows\":[{\"date\":\"1993-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1993-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.012},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.198},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.024},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.198},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.036},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.194},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.194},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.086},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.086},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.082},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.081},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.086},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.086},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.082},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.173},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.082},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.173},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.175},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.175},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.086},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.176},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.082},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.081},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.082},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.086},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.086},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.037},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.174},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.175},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.176},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.173},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.176},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.194},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.103},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.103},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.176},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.037},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.171},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.037},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.172},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.173},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.176},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.173},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.036},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.167},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.033},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.075},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.154},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.03},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.07},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.146},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.033},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.075},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.155},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.036},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.082},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.167},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.037},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.176},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.197},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.194},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.176},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.037},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.174},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.037},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.171},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.037},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.173},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.088},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.036},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.085},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.166},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.035},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.08},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.163},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.037},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.086},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.171},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.035},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.167},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.036},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.083},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.168},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.199},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.111},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.204},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.113},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.204},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.111},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.203},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.105},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.2},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.197},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.194},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.035},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.073},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.159},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.034},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.074},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.153},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.035},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.077},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.159},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.035},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.078},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.16},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.037},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.084},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.168},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.087},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.175},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.039},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.175},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.198},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.197},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.195},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.195},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.179},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.104},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.105},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.104},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.182},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.196},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.194},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.194},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.195},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.196},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.195},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.177},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.17},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.038},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.089},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.172},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.178},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.197},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.197},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.196},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.104},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.195},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.199},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.103},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.198},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.197},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.103},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.2},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.206},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.205},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.207},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.104},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.207},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.2},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.198},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.185},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.183},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.184},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.105},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.199},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.194},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.197},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.198},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.187},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.189},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.194},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.199},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.199},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.192},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.092},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.191},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.103},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.216},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.216},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.108},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.223},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.215},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.105},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.211},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.111},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.216},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.113},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.222},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.113},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.219},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.11},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.218},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.109},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.214},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.209},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.105},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.207},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.104},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.204},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.198},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.196},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.198},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.095},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.2},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.091},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.199},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.204},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.211},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.211},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.207},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.103},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.207},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.21},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.105},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.205},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.097},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.196},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.188},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.042},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.19},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.197},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.197},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.197},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.2},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.203},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.207},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.21},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.108},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.208},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.202},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.206},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.104},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.204},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.103},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.203},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.103},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.202},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.206},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.103},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.203},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.199},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.196},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.1},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.197},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.103},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.202},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.207},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.099},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.204},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.104},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.21},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.212},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.108},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.219},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.225},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.229},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.232},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.227},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.116},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.221},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.112},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.217},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.112},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.214},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.21},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.104},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.206},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.207},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.205},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.206},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.207},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.205},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.209},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.104},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.207},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.105},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.207},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.108},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.213},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.112},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.217},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.224},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.226},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.112},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.216},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.109},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.205},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.109},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.201},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.105},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.199},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.105},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.198},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.104},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.204},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.108},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.204},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.111},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.204},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.202},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.205},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.205},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.207},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.111},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.213},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.108},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.205},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.181},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.04},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.09},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.18},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.041},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.093},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.186},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.098},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.194},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.109},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.205},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.213},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.214},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.046},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.105},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.209},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.045},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.096},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.201},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.043},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.193},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.104},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.21},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.111},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.223},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.113},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.224},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.109},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.224},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.101},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.212},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.102},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.214},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.201},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.044},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.094},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.2},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.105},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.214},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.105},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.217},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.225},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.227},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.228},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.114},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.223},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.111},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.22},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.104},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.211},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.047},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.214},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.109},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.221},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.112},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.222},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.231},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.238},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.234},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.234},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.114},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.23},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.111},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.226},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.232},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.239},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.24},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.116},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.234},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.114},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.23},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.111},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.224},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.113},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.224},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.224},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.109},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.218},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.114},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.216},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.227},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.222},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.112},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.218},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.113},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.218},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.113},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.221},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.113},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.226},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.112},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.229},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.108},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.222},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.226},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.108},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.222},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.11},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.225},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.113},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.228},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.232},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.233},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.114},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.231},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.23},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.228},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.239},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.127},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.25},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.126},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.25},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.123},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.246},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.239},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.237},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.238},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.237},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.113},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.238},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.245},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.123},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.251},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.134},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.262},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.062},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.145},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.274},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.139},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.268},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.062},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.144},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.273},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.062},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.143},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.277},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.139},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.27},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.139},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.267},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.137},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.271},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.134},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.266},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.133},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.266},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.057},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.126},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.256},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.057},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.254},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.057},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.13},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.253},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.116},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.238},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.116},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.231},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.114},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.23},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.116},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.232},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.234},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.235},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.234},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.123},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.244},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.123},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.24},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.234},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.241},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.231},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.229},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.234},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.233},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.235},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.236},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.23},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.112},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.227},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.231},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.112},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.226},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.048},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.106},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.217},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.049},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.107},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.219},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.05},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.112},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.224},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.233},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.241},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.243},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.251},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.251},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.241},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.236},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.236},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.24},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.123},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.241},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.126},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.244},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.123},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.243},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.127},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.241},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.241},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.132},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.242},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.132},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.243},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.125},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.238},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.233},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.235},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.236},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.242},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.126},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.248},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.125},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.244},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.125},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.246},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.127},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.248},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.25},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.25},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.246},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.24},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.237},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.244},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.127},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.248},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.126},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.25},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.126},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.248},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.13},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.254},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.123},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.244},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.125},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.241},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.237},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.236},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.231},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.236},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.114},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.23},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.114},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.23},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.114},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.231},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.234},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.113},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.233},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.237},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.243},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.251},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.127},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.252},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.247},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.246},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.237},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.116},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.235},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.238},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.238},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.236},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.233},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.238},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.233},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.237},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.127},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.241},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.24},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.235},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.229},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.231},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.238},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.234},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.234},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.237},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.241},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.123},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.245},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.114},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.237},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.238},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.123},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.248},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.126},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.252},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.249},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.121},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.247},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.249},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.244},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.244},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.241},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.243},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.243},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.244},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.239},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.242},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.239},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.116},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.237},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.116},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.238},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.123},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.242},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.244},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.24},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.237},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.116},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.236},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.116},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.236},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.238},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.051},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.112},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.235},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.116},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.241},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.244},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.126},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.251},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.247},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.052},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.11},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.239},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.116},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.245},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.252},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.057},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.126},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.259},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.25},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.115},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.248},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.114},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.25},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.252},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.118},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.252},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.12},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.253},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.058},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.261},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.057},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.258},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.247},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.053},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.117},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.24},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.054},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.119},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.243},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.126},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.252},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.133},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.261},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.136},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.265},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.134},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.262},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.057},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.254},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.058},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.132},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.259},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.135},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.261},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.058},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.134},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.259},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.135},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.261},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.135},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.266},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.061},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.14},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.274},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.136},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.27},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.135},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.268},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.061},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.139},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.275},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.13},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.266},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.13},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.268},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.13},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.267},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.131},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.269},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.061},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.133},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.275},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.061},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.134},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.277},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.132},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.274},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.061},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.136},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.275},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.061},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.138},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.274},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.134},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.262},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.127},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.25},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.125},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.248},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.126},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.25},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.25},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.055},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.252},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.058},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.262},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.058},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.125},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.261},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.129},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.266},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.132},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.267},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.133},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.264},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.141},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.266},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.058},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.135},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.26},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.058},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.135},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.259},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.058},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.137},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.258},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.057},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.131},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.257},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.247},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.057},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.131},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.256},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.133},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.262},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.058},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.263},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.058},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.124},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.263},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.132},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.271},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.131},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.271},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.057},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.122},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.262},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.058},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.126},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.264},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.13},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.27},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.061},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.133},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.275},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.132},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.268},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.134},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.272},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.061},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.135},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.276},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.063},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.14},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.284},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.062},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.14},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.283},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.064},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.152},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.283},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.067},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.157},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.294},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.069},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.163},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.305},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.07},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.165},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.31},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.071},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.16},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.316},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.069},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.156},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.312},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.068},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.15},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.311},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.068},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.148},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.309},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.069},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.154},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.313},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.07},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.155},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.315},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.07},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.155},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.317},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.071},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.158},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.319},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.071},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.157},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.319},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.074},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.164},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.332},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.074},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.164},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.334},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.071},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.158},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.321},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.07},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.155},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.316},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.066},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.145},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.303},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.066},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.145},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.299},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.065},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.144},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.295},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.067},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.15},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.3},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.067},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.151},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.302},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.069},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.155},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.308},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.068},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.154},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.306},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.066},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.148},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.301},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.069},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.153},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.308},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.068},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.153},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.308},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.069},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.158},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.31},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.067},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.151},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.3},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.067},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.148},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.302},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.064},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.143},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.292},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.062},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.136},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.28},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.056},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.253},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.134},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.267},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.059},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.127},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.267},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.06},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.128},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.274},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.063},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.138},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.286},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.068},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.156},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.303},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.071},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.164},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.317},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.071},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.162},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.318},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.067},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.147},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.304},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.069},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.149},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.311},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.07},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.155},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.317},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.069},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.149},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.315},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.072},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.158},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.325},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.072},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.157},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.324},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.071},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.155},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.323},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.07},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.152},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.314},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.071},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.154},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.319},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.072},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.162},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.323},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.072},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.161},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.324},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.074},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.171},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.333},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.074},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.168},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.334},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.076},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.173},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.34},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.075},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.171},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.336},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.181},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.35},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.176},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.349},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.186},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.358},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.182},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.354},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.177},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.356},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.081},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.185},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.363},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.081},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.184},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.363},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.082},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.184},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.366},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.18},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.361},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.172},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.351},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.181},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.358},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.178},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.356},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.181},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.361},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.179},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.359},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.183},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.359},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.178},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.355},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.077},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.175},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.348},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.076},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.171},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.339},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.074},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.169},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.333},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.072},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.162},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.323},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.072},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.163},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.324},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.073},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.167},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.327},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.072},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.164},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.325},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.074},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.173},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.332},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.074},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.172},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.325},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.075},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.174},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.331},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.075},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.175},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.334},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.077},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.18},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.343},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.182},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.347},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.179},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.346},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.076},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.176},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.34},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.075},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.172},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.334},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.075},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.17},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.334},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.074},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.167},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.33},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.074},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.169},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.332},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.074},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.168},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.332},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.075},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.171},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.337},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.077},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.176},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.343},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.18},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.345},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.184},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.349},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.186},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.351},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.077},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.179},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.345},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.077},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.181},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.344},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.181},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.346},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.077},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.179},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.344},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.077},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.175},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.344},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.077},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.177},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.346},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.183},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.354},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.183},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.356},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.193},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.368},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.199},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.374},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.199},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.379},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.192},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.369},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.084},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.194},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.376},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.084},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.193},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.374},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.084},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.194},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.376},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.198},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.384},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.2},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.386},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.088},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.203},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.393},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.209},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.397},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.093},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.216},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.41},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.093},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.218},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.414},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.094},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.223},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.417},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.093},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.219},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.414},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.211},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.407},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.206},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.4},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.2},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.386},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.197},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.377},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.084},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.193},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.377},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.194},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.372},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.198},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.364},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.199},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.366},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.084},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.199},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.371},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.081},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.193},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.36},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.201},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.366},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.204},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.376},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.208},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.378},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.201},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.372},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.207},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.377},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.206},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.372},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.209},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.372},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.205},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.365},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.201},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.366},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.198},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.363},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.197},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.37},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.19},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.367},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.194},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.37},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.084},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.196},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.374},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.084},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.197},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.375},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.21},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.379},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.21},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.377},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.088},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.215},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.384},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.22},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.394},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.221},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.401},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.211},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.38},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.217},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.39},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.092},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.224},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.406},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.095},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.225},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.416},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.096},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.23},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.426},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.234},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.432},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.096},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.229},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.426},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.097},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.227},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.43},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.095},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.224},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.42},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.097},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.228},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.428},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.232},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.435},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.231},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.436},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.1},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.233},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.443},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.103},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.242},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.455},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.104},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.244},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.462},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.106},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.249},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.47},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.106},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.25},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.47},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.107},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.25},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.472},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.107},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.254},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.473},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.107},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.256},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.472},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.107},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.257},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.47},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.108},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.257},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.473},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.108},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.258},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.476},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.109},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.262},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.481},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.11},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.263},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.485},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.266},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.488},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.11},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.26},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.485},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.107},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.253},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.475},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.104},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.246},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.461},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.102},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.24},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.453},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.101},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.239},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.448},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.102},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.241},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.454},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.103},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.244},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.455},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.102},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.24},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.449},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.104},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.246},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.458},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.103},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.241},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.453},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.103},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.243},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.454},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.102},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.242},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.453},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.105},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.249},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.463},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.103},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.243},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.458},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.103},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.241},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.456},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.101},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.235},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.449},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.101},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.235},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.449},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.1},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.233},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.443},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.102},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.239},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.452},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.103},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.241},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.456},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.105},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.246},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.464},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.106},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.248},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.468},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.106},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.249},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.471},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.107},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.252},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.474},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.108},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.254},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.476},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.106},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.248},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.471},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.107},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.252},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.473},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.106},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.248},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.471},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.104},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.244},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.464},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.106},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.245},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.475},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.108},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.252},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.478},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.108},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.256},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.481},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.11},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.26},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.484},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.109},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.261},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.481},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.109},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.257},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.482},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.11},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.259},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.485},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.11},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.259},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.487},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.263},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.489},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.265},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.499},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.271},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.507},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.268},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.505},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.269},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.503},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.113},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.263},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.502},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.258},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.496},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.258},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.497},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.11},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.252},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.49},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.108},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.245},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.488},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.108},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.248},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.486},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.109},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.249},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.487},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.11},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.252},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.491},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.257},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.499},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.259},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.497},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.259},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.494},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.262},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.496},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.113},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.265},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.498},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.263},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.492},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.263},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.493},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.266},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.495},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.113},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.268},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.497},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.262},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.491},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.11},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.259},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.488},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.11},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.258},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.491},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.11},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.257},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.489},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.262},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.496},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.263},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.498},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.265},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.498},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.264},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.49},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.11},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.259},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.488},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.263},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.492},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.113},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.267},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.499},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.275},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.507},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.277},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.511},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.276},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.51},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.272},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.501},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.273},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.503},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.27},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.504},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.271},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.508},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.266},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.504},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.113},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.269},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.502},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.271},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.505},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.269},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.502},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.267},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.512},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.268},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.512},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.272},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.517},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.118},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.276},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.522},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.276},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.52},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.118},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.276},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.521},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.275},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.514},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.271},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.508},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.272},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.506},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.268},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.498},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.273},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.5},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.275},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.507},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.277},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.51},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.278},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.514},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.278},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.515},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.118},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.281},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.519},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.277},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.513},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.278},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.515},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.28},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.518},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.274},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.511},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.278},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.518},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.275},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.515},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.277},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.512},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.281},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.518},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.119},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.286},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.525},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.118},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.282},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.521},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.119},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.285},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.524},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.118},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.284},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.519},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.118},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.283},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.516},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.28},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.513},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.279},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.512},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.283},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.515},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.278},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.509},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.277},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.512},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.271},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.507},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.274},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.509},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.076},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.339},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.579},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.076},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.334},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.574},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.077},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.334},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.574},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.345},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.584},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.348},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.584},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.351},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.591},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.356},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.599},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.353},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.595},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.35},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.597},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.344},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.586},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.349},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.595},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.343},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.587},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.339},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.583},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.341},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.585},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.35},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.586},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.349},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.585},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.351},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.592},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.351},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.593},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.353},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.594},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.351},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.592},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.081},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.357},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.602},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.081},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.36},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.601},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.082},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.37},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.609},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.084},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.38},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.622},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.385},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.626},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.393},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.636},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.4},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.64},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.411},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.647},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.426},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.664},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.093},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.432},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.668},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.421},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.658},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.424},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.661},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.092},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.429},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.666},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.092},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.431},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.668},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.092},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.425},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.669},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.413},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.66},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.41},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.651},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.394},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.643},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.39},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.641},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.381},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.636},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.371},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.623},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.081},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.349},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.608},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.08},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.346},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.598},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.336},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.588},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.077},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.331},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.587},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.078},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.337},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.589},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.079},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.343},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.595},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.081},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.358},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.609},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.084},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.37},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.621},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.38},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.633},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.383},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.636},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.389},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.64},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.088},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.392},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.648},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.393},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.647},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.39},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.649},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.387},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.64},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.402},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.651},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.409},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.656},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.397},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.646},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.382},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.63},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.084},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.374},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.623},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.081},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.358},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.613},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.366},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.618},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.083},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.369},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.624},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.084},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.374},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.629},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.386},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.642},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.384},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.642},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.391},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.645},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.088},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.397},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.652},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.088},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.4},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.652},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.088},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.398},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.651},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.394},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.642},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.095},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.44},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.699},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.097},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.452},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.711},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.456},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.716},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.097},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.451},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.702},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.096},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.45},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.702},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.097},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.459},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.708},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.096},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.452},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.706},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.096},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.444},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.699},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.093},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.436},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.685},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.092},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.424},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.674},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.42},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.669},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.419},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.668},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.411},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.659},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.397},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.638},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.395},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.636},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.394},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.639},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.088},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.403},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.646},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.405},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.657},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.417},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.67},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.092},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.423},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.676},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.413},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.663},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.402},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.656},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.415},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.67},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.093},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.423},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.679},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.095},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.441},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.693},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.097},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.46},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.697},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.468},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.711},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.468},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.711},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.463},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.709},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.463},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.707},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.097},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.453},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.705},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.094},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.432},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.69},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.406},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.668},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.408},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.675},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.403},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.658},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.406},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.664},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.398},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.65},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.397},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.647},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.392},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.644},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.389},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.638},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.088},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.394},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.644},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.088},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.394},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.647},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.398},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.65},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.407},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.663},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.411},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.658},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.412},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.66},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.411},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.663},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.413},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.66},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.407},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.655},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.413},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.661},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.417},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.668},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.414},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.668},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.414},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.662},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.411},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.661},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.412},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.662},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.415},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.665},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.416},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.667},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.092},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.421},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.674},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.092},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.421},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.675},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.421},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.672},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.092},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.423},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.677},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.42},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.672},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.411},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.664},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.407},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.663},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.394},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.647},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.391},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.646},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.39},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.646},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.385},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.642},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.38},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.635},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.384},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.641},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.383},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.642},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.386},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.643},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.389},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.64},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.084},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.373},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.63},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.085},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.373},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.633},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.086},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.379},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.639},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.087},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.388},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.642},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.4},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.651},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.089},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.399},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.654},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.088},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.402},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.654},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.41},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.661},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.412},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.662},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.411},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.664},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.091},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.413},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.667},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.411},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.663},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.09},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.412},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.66},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.092},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.425},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.67},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.092},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.423},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.672},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.093},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.428},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.677},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.092},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.419},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.675},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.093},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.429},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.684},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.094},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.433},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.686},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.094},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.437},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.684},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.094},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.44},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.686},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.094},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.439},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.686},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.096},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.448},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.693},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.097},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.448},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.702},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.097},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.452},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.702},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.455},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.708},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.461},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.708},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.46},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.714},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.097},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.452},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.703},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.097},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.453},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.703},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.096},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.448},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.699},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.096},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.45},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.701},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.095},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.445},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.696},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.093},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.43},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.685},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.094},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.429},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.685},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.093},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.426},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.688},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.094},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.432},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.694},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.095},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.432},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.691},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.096},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.442},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.704},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.448},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.712},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.451},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.715},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.099},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.459},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.722},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.099},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.461},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.724},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.1},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.468},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.729},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.1},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.468},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.733},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.1},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.465},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.731},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.099},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.457},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.725},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.452},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.722},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.098},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.446},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.717},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.096},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.436},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.71},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.094},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.423},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.697},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.094},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.421},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.693},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.094},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.424},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.691},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.093},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.417},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.688},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.094},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.422},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.696},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.099},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.45},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.723},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.104},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.48},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.753},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.103},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.483},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.754},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.104},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.489},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.761},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.105},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.496},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.763},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.104},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.491},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.765},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.104},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.48},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.762},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.103},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.475},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.757},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.1},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.451},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.742},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.1},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.45},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.749},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.101},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.447},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.753},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.103},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.459},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.775},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.101},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.444},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.759},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.101},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.449},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.756},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.104},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.466},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.774},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.107},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.483},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.792},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.108},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.49},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.804},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.108},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.501},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.796},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.109},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.504},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.795},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.11},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.506},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.81},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.511},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.825},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.113},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.515},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.832},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.113},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.515},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.836},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.113},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.514},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.833},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.507},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.827},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.113},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.516},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.839},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.527},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.859},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.54},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.869},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.121},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.564},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.887},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.127},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.589},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.936},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.122},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.558},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.899},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.119},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.554},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.88},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.118},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.545},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.87},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.52},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.858},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.113},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.5},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.845},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.508},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.853},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.519},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.859},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.519},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.849},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.511},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.842},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.509},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.841},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.508},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.84},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.502},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.834},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.108},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.477},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.805},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.107},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.468},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.796},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.106},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.472},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.786},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.104},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.465},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.774},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.105},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.465},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.781},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.108},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.487},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.802},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.512},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.822},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.529},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.836},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.532},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.847},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.527},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.85},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.514},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.828},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.513},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.825},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.513},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.826},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.109},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.491},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.808},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.107},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.473},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.795},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.106},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.471},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.795},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.109},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.486},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.813},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.494},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.824},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.5},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.829},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.495},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.823},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.111},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.495},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.827},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.113},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.501},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.835},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.51},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.843},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.51},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.833},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.113},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.514},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.837},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.518},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.839},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.527},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.852},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.535},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.859},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.528},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.853},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.522},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.847},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.506},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.825},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.504},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.827},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.112},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.503},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.833},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.525},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.849},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.118},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.536},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.87},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.118},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.54},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.865},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.119},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.545},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.872},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.123},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.568},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.897},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.126},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.586},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.921},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.132},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.616},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.961},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.13},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.609},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.943},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.13},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.601},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.946},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.127},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.584},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.932},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.127},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.58},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.927},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.124},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.566},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.916},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.124},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.559},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.913},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.125},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.561},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.92},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.125},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.563},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.919},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.124},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.56},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.907},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.123},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.546},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.906},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.123},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.549},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.904},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.122},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.547},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.898},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.124},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.557},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.911},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.124},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.559},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.91},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.121},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.541},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.889},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.119},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.529},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.88},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.119},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.531},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.876},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.118},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.527},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.873},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.117},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.515},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.867},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.513},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.859},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.514},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.861},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.516},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.864},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.513},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.864},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.51},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.857},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.51},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.858},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.119},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.524},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.876},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.121},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.533},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.894},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.123},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.543},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.908},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.123},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.543},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.906},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.124},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.542},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.913},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.123},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.551},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.907},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.123},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.542},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.905},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.122},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.542},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.901},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.121},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.535},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.902},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.122},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.543},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.901},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.122},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.541},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.902},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.121},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.541},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.891},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.119},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.527},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.881},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.511},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.865},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.119},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.524},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.878},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.118},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.518},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.875},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.503},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.86},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.114},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.498},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.849},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.115},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.507},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.854},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.116},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.512},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.86},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.118},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.524},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.87},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.12},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.529},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.888},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.122},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.546},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.907},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.124},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.555},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.917},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.127},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.575},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.939},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.126},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.566},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.923},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.124},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.559},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.915},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.124},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.556},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.913},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.123},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.548},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.906},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.124},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.556},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.914},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.123},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.557},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.915},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.122},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.547},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.908},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.124},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.561},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.912},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.122},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.547},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.9},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.122},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.542},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.906},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.122},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.54},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.903},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.123},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.55},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.906},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.121},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.54},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.895},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.121},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.54},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.891},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.122},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.548},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.901},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.121},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.54},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.888},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.121},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.542},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.896},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.12},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.533},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.889},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.121},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.541},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.896},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.123},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.551},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.908},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.125},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.557},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.922},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.128},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.575},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.94},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.13},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.581},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.95},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.128},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.576},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.944},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.128},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.571},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.936},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.126},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.569},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.931},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.125},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.559},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.917},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.126},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.568},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.931},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.127},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.572},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.931},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.127},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.575},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.935},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.127},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.577},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.933},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.128},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.58},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.938},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.126},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.568},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.925},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.129},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.583},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.948},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.129},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.583},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.943},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.128},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.58},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.942},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.129},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.585},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.942},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.127},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.579},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.929},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.126},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.572},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.923},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"all\",\"price_premium\":0.125},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"midgrade\",\"price_premium\":0.562},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"grade\":\"premium\",\"price_premium\":0.915}],\"metadata\":{\"date\":{\"type\":\"date\",\"semanticType\":\"Date\"},\"fuel\":{\"type\":\"string\",\"semanticType\":\"String\"},\"grade\":{\"type\":\"string\",\"semanticType\":\"String\",\"levels\":[\"all\",\"midgrade\",\"premium\"]},\"price_premium\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas):\\n    # Filter for 'all' formulation to avoid duplicates and focus on overall prices\\n    df_filtered = df_gas[df_gas['formulation'] == 'all'].copy()\\n    \\n    # Get regular grade prices as baseline\\n    df_regular = df_filtered[df_filtered['grade'] == 'regular'][['date', 'fuel', 'price']].rename(columns={'price': 'regular_price'})\\n    \\n    # Get all non-regular grades\\n    df_premium_grades = df_filtered[df_filtered['grade'] != 'regular'][['date', 'fuel', 'grade', 'price']].copy()\\n    \\n    # Merge to calculate premium\\n    df_merged = df_premium_grades.merge(df_regular, on=['date', 'fuel'], how='left')\\n    \\n    # Calculate price premium\\n    df_merged['price_premium'] = df_merged['price'] - df_merged['regular_price']\\n    \\n    # Select output fields\\n    transformed_df = df_merged[['date', 'fuel', 'grade', 'price_premium']].copy()\\n    \\n    # Remove rows with missing premium values\\n    transformed_df = transformed_df.dropna(subset=['price_premium'])\\n    \\n    return transformed_df\\n\",\"source\":[\"weekly_gas_prices\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\". \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- you can use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (weekly_gas_prices)\\n\\n## fields\\n\\t*date -- type: object, values: 1990-08-20, 1990-08-27, 1990-09-03, ..., 2025-06-02, 2025-06-09, 2025-06-16, 2025-06-23\\n\\t*fuel -- type: object, values: diesel, gasoline\\n\\t*grade -- type: object, values: all, low_sulfur, midgrade, premium, regular, ultra_low_sulfur\\n\\t*formulation -- type: object, values: NA, all, conventional, reformulated\\n\\t*price -- type: float64, values: 0.885, 0.891, 0.899, ..., 5.955, 5.964, 6.033, 6.064\\n\\n## sample\\n         date      fuel    grade   formulation  price\\n0  1990-08-20  gasoline  regular           all  1.191\\n1  1990-08-20  gasoline  regular  conventional  1.191\\n2  1990-08-27  gasoline  regular           all  1.245\\n3  1990-08-27  gasoline  regular  conventional  1.245\\n4  1990-09-03  gasoline  regular           all  1.242\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nWhich **fuel grade** commands the highest **price premium** and how has this premium evolved?\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"Analyze which fuel grade commands the highest price premium compared to regular grade, and visualize how this premium has evolved over time.\\\",\\n    \\\"display_instruction\\\": \\\"Compare **price premium** across **fuel grades** over time\\\",\\n    \\\"recommendation\\\": \\\"Calculate the price premium for each fuel grade by comparing it to the regular grade baseline for the same date and fuel type. This will show both the absolute premium values and their trends over time.\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"fuel\\\", \\\"grade\\\", \\\"price_premium\\\"],\\n    \\\"chart_type\\\": \\\"line\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"price_premium\\\",\\n        \\\"color\\\": \\\"grade\\\",\\n        \\\"facet\\\": \\\"fuel\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas):\\n    # Filter for 'all' formulation to avoid duplicates and focus on overall prices\\n    df_filtered = df_gas[df_gas['formulation'] == 'all'].copy()\\n    \\n    # Get regular grade prices as baseline\\n    df_regular = df_filtered[df_filtered['grade'] == 'regular'][['date', 'fuel', 'price']].rename(columns={'price': 'regular_price'})\\n    \\n    # Get all non-regular grades\\n    df_premium_grades = df_filtered[df_filtered['grade'] != 'regular'][['date', 'fuel', 'grade', 'price']].copy()\\n    \\n    # Merge to calculate premium\\n    df_merged = df_premium_grades.merge(df_regular, on=['date', 'fuel'], how='left')\\n    \\n    # Calculate price premium\\n    df_merged['price_premium'] = df_merged['price'] - df_merged['regular_price']\\n    \\n    # Select output fields\\n    transformed_df = df_merged[['date', 'fuel', 'grade', 'price_premium']].copy()\\n    \\n    # Remove rows with missing premium values\\n    transformed_df = transformed_df.dropna(subset=['price_premium'])\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"weekly_gas_prices\",\"sourceTableIds\":[\"weekly_gas_prices\"],\"instruction\":\"Which **fuel grade** commands the highest **price premium** and how has this premium evolved?\",\"displayInstruction\":\"Compare **price premium** across **fuel grades** over time\",\"chart\":{\"id\":\"chart-1760744911829\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"weekly_gas_prices\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-906894\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"- Filter the dataset to only include entries where **formulation** is `'all'` to avoid duplicate records and focus on overall price data\\n- Extract **regular grade** prices as a baseline, creating a reference table with **date**, **fuel**, and **regular_price**\\n- Extract all **non-regular grades** (such as **premium**, **midgrade**, etc.) with their corresponding **date**, **fuel**, **grade**, and **price**\\n- Merge the non-regular grades with the regular grade baseline by matching on **date** and **fuel** type\\n- Calculate the **price_premium** for each non-regular grade by subtracting the **regular_price** from the grade's **price**\\n- Select the final output fields: **date**, **fuel**, **grade**, and **price_premium**\\n- Remove any rows with missing **price_premium** values to ensure data completeness\",\"concepts\":[{\"explanation\":\"The additional cost of a specific fuel grade compared to regular grade fuel. Calculated as: \\\\( \\\\text{price\\\\_premium} = \\\\text{price}_{\\\\text{grade}} - \\\\text{price}_{\\\\text{regular}} \\\\). This metric indicates how much more consumers pay for higher-quality fuel grades (premium, midgrade, etc.) relative to the baseline regular grade on the same date and for the same fuel type.\",\"field\":\"price_premium\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (weekly_gas_prices)\\n\\n## fields\\n\\t*date -- type: object, values: 1990-08-20, 1990-08-27, 1990-09-03, ..., 2025-06-02, 2025-06-09, 2025-06-16, 2025-06-23\\n\\t*fuel -- type: object, values: diesel, gasoline\\n\\t*grade -- type: object, values: all, low_sulfur, midgrade, premium, regular, ultra_low_sulfur\\n\\t*formulation -- type: object, values: NA, all, conventional, reformulated\\n\\t*price -- type: float64, values: 0.885, 0.891, 0.899, ..., 5.955, 5.964, 6.033, 6.064\\n\\n## sample\\n         date      fuel    grade   formulation  price\\n0  1990-08-20  gasoline  regular           all  1.191\\n1  1990-08-20  gasoline  regular  conventional  1.191\\n2  1990-08-27  gasoline  regular           all  1.245\\n3  1990-08-27  gasoline  regular  conventional  1.245\\n4  1990-09-03  gasoline  regular           all  1.242\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas):\\n    # Filter for 'all' formulation to avoid duplicates and focus on overall prices\\n    df_filtered = df_gas[df_gas['formulation'] == 'all'].copy()\\n    \\n    # Get regular grade prices as baseline\\n    df_regular = df_filtered[df_filtered['grade'] == 'regular'][['date', 'fuel', 'price']].rename(columns={'price': 'regular_price'})\\n    \\n    # Get all non-regular grades\\n    df_premium_grades = df_filtered[df_filtered['grade'] != 'regular'][['date', 'fuel', 'grade', 'price']].copy()\\n    \\n    # Merge to calculate premium\\n    df_merged = df_premium_grades.merge(df_regular, on=['date', 'fuel'], how='left')\\n    \\n    # Calculate price premium\\n    df_merged['price_premium'] = df_merged['price'] - df_merged['regular_price']\\n    \\n    # Select output fields\\n    transformed_df = df_merged[['date', 'fuel', 'grade', 'price_premium']].copy()\\n    \\n    # Remove rows with missing premium values\\n    transformed_df = transformed_df.dropna(subset=['price_premium'])\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\n- Filter the dataset to only include entries where **formulation** is `'all'` to avoid duplicate records and focus on overall price data\\n- Extract **regular grade** prices as a baseline, creating a reference table with **date**, **fuel**, and **regular_price**\\n- Extract all **non-regular grades** (such as **premium**, **midgrade**, etc.) with their corresponding **date**, **fuel**, **grade**, and **price**\\n- Merge the non-regular grades with the regular grade baseline by matching on **date** and **fuel** type\\n- Calculate the **price_premium** for each non-regular grade by subtracting the **regular_price** from the grade's **price**\\n- Select the final output fields: **date**, **fuel**, **grade**, and **price_premium**\\n- Remove any rows with missing **price_premium** values to ensure data completeness\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"price_premium\\\",\\n        \\\"explanation\\\": \\\"The additional cost of a specific fuel grade compared to regular grade fuel. Calculated as: \\\\\\\\( \\\\\\\\text{price\\\\\\\\_premium} = \\\\\\\\text{price}_{\\\\\\\\text{grade}} - \\\\\\\\text{price}_{\\\\\\\\text{regular}} \\\\\\\\). This metric indicates how much more consumers pay for higher-quality fuel grades (premium, midgrade, etc.) relative to the baseline regular grade on the same date and for the same fuel type.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-922023\",\"displayId\":\"fuel-price-yoy\",\"names\":[\"date\",\"fuel\",\"current_price\",\"yoy_price\",\"absolute_change\",\"percentage_change\"],\"rows\":[{\"date\":\"1995-03-20\",\"fuel\":\"diesel\",\"current_price\":1.085,\"yoy_price\":1.106,\"absolute_change\":-0.021,\"percentage_change\":-1.8987341772},{\"date\":\"1995-03-27\",\"fuel\":\"diesel\",\"current_price\":1.088,\"yoy_price\":1.107,\"absolute_change\":-0.019,\"percentage_change\":-1.7163504968},{\"date\":\"1995-04-03\",\"fuel\":\"diesel\",\"current_price\":1.094,\"yoy_price\":1.109,\"absolute_change\":-0.015,\"percentage_change\":-1.3525698828},{\"date\":\"1995-04-10\",\"fuel\":\"diesel\",\"current_price\":1.101,\"yoy_price\":1.108,\"absolute_change\":-0.007,\"percentage_change\":-0.6317689531},{\"date\":\"1995-04-17\",\"fuel\":\"diesel\",\"current_price\":1.106,\"yoy_price\":1.105,\"absolute_change\":0.001,\"percentage_change\":0.0904977376},{\"date\":\"1995-04-24\",\"fuel\":\"diesel\",\"current_price\":1.115,\"yoy_price\":1.106,\"absolute_change\":0.009,\"percentage_change\":0.8137432188},{\"date\":\"1995-05-01\",\"fuel\":\"diesel\",\"current_price\":1.119,\"yoy_price\":1.104,\"absolute_change\":0.015,\"percentage_change\":1.3586956522},{\"date\":\"1995-05-08\",\"fuel\":\"diesel\",\"current_price\":1.126,\"yoy_price\":1.101,\"absolute_change\":0.025,\"percentage_change\":2.2706630336},{\"date\":\"1995-05-15\",\"fuel\":\"diesel\",\"current_price\":1.126,\"yoy_price\":1.099,\"absolute_change\":0.027,\"percentage_change\":2.4567788899},{\"date\":\"1995-05-22\",\"fuel\":\"diesel\",\"current_price\":1.124,\"yoy_price\":1.099,\"absolute_change\":0.025,\"percentage_change\":2.2747952684},{\"date\":\"1995-05-29\",\"fuel\":\"diesel\",\"current_price\":1.13,\"yoy_price\":1.098,\"absolute_change\":0.032,\"percentage_change\":2.9143897996},{\"date\":\"1995-06-05\",\"fuel\":\"diesel\",\"current_price\":1.124,\"yoy_price\":1.101,\"absolute_change\":0.023,\"percentage_change\":2.0890099909},{\"date\":\"1995-06-12\",\"fuel\":\"diesel\",\"current_price\":1.122,\"yoy_price\":1.098,\"absolute_change\":0.024,\"percentage_change\":2.1857923497},{\"date\":\"1995-06-19\",\"fuel\":\"diesel\",\"current_price\":1.117,\"yoy_price\":1.103,\"absolute_change\":0.014,\"percentage_change\":1.2692656392},{\"date\":\"1995-06-26\",\"fuel\":\"diesel\",\"current_price\":1.112,\"yoy_price\":1.108,\"absolute_change\":0.004,\"percentage_change\":0.3610108303},{\"date\":\"1995-07-03\",\"fuel\":\"diesel\",\"current_price\":1.106,\"yoy_price\":1.109,\"absolute_change\":-0.003,\"percentage_change\":-0.2705139766},{\"date\":\"1995-07-10\",\"fuel\":\"diesel\",\"current_price\":1.103,\"yoy_price\":1.11,\"absolute_change\":-0.007,\"percentage_change\":-0.6306306306},{\"date\":\"1995-07-17\",\"fuel\":\"diesel\",\"current_price\":1.099,\"yoy_price\":1.111,\"absolute_change\":-0.012,\"percentage_change\":-1.0801080108},{\"date\":\"1995-07-24\",\"fuel\":\"diesel\",\"current_price\":1.098,\"yoy_price\":1.111,\"absolute_change\":-0.013,\"percentage_change\":-1.1701170117},{\"date\":\"1995-07-31\",\"fuel\":\"diesel\",\"current_price\":1.093,\"yoy_price\":1.116,\"absolute_change\":-0.023,\"percentage_change\":-2.0609318996},{\"date\":\"1995-08-07\",\"fuel\":\"diesel\",\"current_price\":1.099,\"yoy_price\":1.127,\"absolute_change\":-0.028,\"percentage_change\":-2.4844720497},{\"date\":\"1995-08-14\",\"fuel\":\"diesel\",\"current_price\":1.106,\"yoy_price\":1.127,\"absolute_change\":-0.021,\"percentage_change\":-1.8633540373},{\"date\":\"1995-08-21\",\"fuel\":\"diesel\",\"current_price\":1.106,\"yoy_price\":1.124,\"absolute_change\":-0.018,\"percentage_change\":-1.6014234875},{\"date\":\"1995-08-28\",\"fuel\":\"diesel\",\"current_price\":1.109,\"yoy_price\":1.122,\"absolute_change\":-0.013,\"percentage_change\":-1.1586452763},{\"date\":\"1995-09-04\",\"fuel\":\"diesel\",\"current_price\":1.115,\"yoy_price\":1.126,\"absolute_change\":-0.011,\"percentage_change\":-0.9769094139},{\"date\":\"1995-09-11\",\"fuel\":\"diesel\",\"current_price\":1.119,\"yoy_price\":1.128,\"absolute_change\":-0.009,\"percentage_change\":-0.7978723404},{\"date\":\"1995-09-18\",\"fuel\":\"diesel\",\"current_price\":1.122,\"yoy_price\":1.126,\"absolute_change\":-0.004,\"percentage_change\":-0.3552397869},{\"date\":\"1995-09-25\",\"fuel\":\"diesel\",\"current_price\":1.121,\"yoy_price\":1.12,\"absolute_change\":0.001,\"percentage_change\":0.0892857143},{\"date\":\"1995-10-02\",\"fuel\":\"diesel\",\"current_price\":1.117,\"yoy_price\":1.118,\"absolute_change\":-0.001,\"percentage_change\":-0.0894454383},{\"date\":\"1995-10-09\",\"fuel\":\"diesel\",\"current_price\":1.117,\"yoy_price\":1.117,\"absolute_change\":0,\"percentage_change\":0},{\"date\":\"1995-10-16\",\"fuel\":\"diesel\",\"current_price\":1.117,\"yoy_price\":1.119,\"absolute_change\":-0.002,\"percentage_change\":-0.1787310098},{\"date\":\"1995-10-23\",\"fuel\":\"diesel\",\"current_price\":1.114,\"yoy_price\":1.122,\"absolute_change\":-0.008,\"percentage_change\":-0.7130124777},{\"date\":\"1995-10-30\",\"fuel\":\"diesel\",\"current_price\":1.11,\"yoy_price\":1.133,\"absolute_change\":-0.023,\"percentage_change\":-2.0300088261},{\"date\":\"1995-11-06\",\"fuel\":\"diesel\",\"current_price\":1.118,\"yoy_price\":1.133,\"absolute_change\":-0.015,\"percentage_change\":-1.3239187996},{\"date\":\"1995-11-13\",\"fuel\":\"diesel\",\"current_price\":1.118,\"yoy_price\":1.135,\"absolute_change\":-0.017,\"percentage_change\":-1.4977973568},{\"date\":\"1995-11-20\",\"fuel\":\"diesel\",\"current_price\":1.119,\"yoy_price\":1.13,\"absolute_change\":-0.011,\"percentage_change\":-0.9734513274},{\"date\":\"1995-11-27\",\"fuel\":\"diesel\",\"current_price\":1.124,\"yoy_price\":1.126,\"absolute_change\":-0.002,\"percentage_change\":-0.1776198934},{\"date\":\"1995-12-04\",\"fuel\":\"diesel\",\"current_price\":1.123,\"yoy_price\":1.123,\"absolute_change\":0,\"percentage_change\":0},{\"date\":\"1995-12-11\",\"fuel\":\"diesel\",\"current_price\":1.124,\"yoy_price\":1.114,\"absolute_change\":0.01,\"percentage_change\":0.8976660682},{\"date\":\"1995-12-18\",\"fuel\":\"diesel\",\"current_price\":1.13,\"yoy_price\":1.109,\"absolute_change\":0.021,\"percentage_change\":1.8935978359},{\"date\":\"1995-12-25\",\"fuel\":\"diesel\",\"current_price\":1.141,\"yoy_price\":1.106,\"absolute_change\":0.035,\"percentage_change\":3.164556962},{\"date\":\"1996-01-01\",\"fuel\":\"diesel\",\"current_price\":1.148,\"yoy_price\":1.104,\"absolute_change\":0.044,\"percentage_change\":3.9855072464},{\"date\":\"1996-01-08\",\"fuel\":\"diesel\",\"current_price\":1.146,\"yoy_price\":1.102,\"absolute_change\":0.044,\"percentage_change\":3.9927404719},{\"date\":\"1996-01-15\",\"fuel\":\"diesel\",\"current_price\":1.152,\"yoy_price\":1.1,\"absolute_change\":0.052,\"percentage_change\":4.7272727273},{\"date\":\"1996-01-22\",\"fuel\":\"diesel\",\"current_price\":1.144,\"yoy_price\":1.095,\"absolute_change\":0.049,\"percentage_change\":4.4748858447},{\"date\":\"1996-01-29\",\"fuel\":\"diesel\",\"current_price\":1.136,\"yoy_price\":1.09,\"absolute_change\":0.046,\"percentage_change\":4.2201834862},{\"date\":\"1996-02-05\",\"fuel\":\"diesel\",\"current_price\":1.13,\"yoy_price\":1.086,\"absolute_change\":0.044,\"percentage_change\":4.0515653775},{\"date\":\"1996-02-12\",\"fuel\":\"diesel\",\"current_price\":1.134,\"yoy_price\":1.088,\"absolute_change\":0.046,\"percentage_change\":4.2279411765},{\"date\":\"1996-02-19\",\"fuel\":\"diesel\",\"current_price\":1.151,\"yoy_price\":1.088,\"absolute_change\":0.063,\"percentage_change\":5.7904411765},{\"date\":\"1996-02-26\",\"fuel\":\"diesel\",\"current_price\":1.164,\"yoy_price\":1.089,\"absolute_change\":0.075,\"percentage_change\":6.8870523416},{\"date\":\"1996-03-04\",\"fuel\":\"diesel\",\"current_price\":1.175,\"yoy_price\":1.089,\"absolute_change\":0.086,\"percentage_change\":7.8971533517},{\"date\":\"1996-03-11\",\"fuel\":\"diesel\",\"current_price\":1.173,\"yoy_price\":1.088,\"absolute_change\":0.085,\"percentage_change\":7.8125},{\"date\":\"1996-03-18\",\"fuel\":\"diesel\",\"current_price\":1.172,\"yoy_price\":1.085,\"absolute_change\":0.087,\"percentage_change\":8.0184331797},{\"date\":\"1996-03-25\",\"fuel\":\"diesel\",\"current_price\":1.21,\"yoy_price\":1.088,\"absolute_change\":0.122,\"percentage_change\":11.2132352941},{\"date\":\"1996-04-01\",\"fuel\":\"diesel\",\"current_price\":1.222,\"yoy_price\":1.094,\"absolute_change\":0.128,\"percentage_change\":11.7001828154},{\"date\":\"1996-04-08\",\"fuel\":\"diesel\",\"current_price\":1.249,\"yoy_price\":1.101,\"absolute_change\":0.148,\"percentage_change\":13.4423251589},{\"date\":\"1996-04-15\",\"fuel\":\"diesel\",\"current_price\":1.305,\"yoy_price\":1.106,\"absolute_change\":0.199,\"percentage_change\":17.9927667269},{\"date\":\"1996-04-22\",\"fuel\":\"diesel\",\"current_price\":1.304,\"yoy_price\":1.115,\"absolute_change\":0.189,\"percentage_change\":16.9506726457},{\"date\":\"1996-04-29\",\"fuel\":\"diesel\",\"current_price\":1.285,\"yoy_price\":1.119,\"absolute_change\":0.166,\"percentage_change\":14.8346738159},{\"date\":\"1996-05-06\",\"fuel\":\"diesel\",\"current_price\":1.292,\"yoy_price\":1.126,\"absolute_change\":0.166,\"percentage_change\":14.7424511545},{\"date\":\"1996-05-13\",\"fuel\":\"diesel\",\"current_price\":1.285,\"yoy_price\":1.126,\"absolute_change\":0.159,\"percentage_change\":14.1207815275},{\"date\":\"1996-05-20\",\"fuel\":\"diesel\",\"current_price\":1.274,\"yoy_price\":1.124,\"absolute_change\":0.15,\"percentage_change\":13.3451957295},{\"date\":\"1996-05-27\",\"fuel\":\"diesel\",\"current_price\":1.254,\"yoy_price\":1.13,\"absolute_change\":0.124,\"percentage_change\":10.9734513274},{\"date\":\"1996-06-03\",\"fuel\":\"diesel\",\"current_price\":1.24,\"yoy_price\":1.124,\"absolute_change\":0.116,\"percentage_change\":10.3202846975},{\"date\":\"1996-06-10\",\"fuel\":\"diesel\",\"current_price\":1.215,\"yoy_price\":1.122,\"absolute_change\":0.093,\"percentage_change\":8.2887700535},{\"date\":\"1996-06-17\",\"fuel\":\"diesel\",\"current_price\":1.193,\"yoy_price\":1.117,\"absolute_change\":0.076,\"percentage_change\":6.8039391226},{\"date\":\"1996-06-24\",\"fuel\":\"diesel\",\"current_price\":1.179,\"yoy_price\":1.112,\"absolute_change\":0.067,\"percentage_change\":6.0251798561},{\"date\":\"1996-07-01\",\"fuel\":\"diesel\",\"current_price\":1.172,\"yoy_price\":1.106,\"absolute_change\":0.066,\"percentage_change\":5.9674502712},{\"date\":\"1996-07-08\",\"fuel\":\"diesel\",\"current_price\":1.173,\"yoy_price\":1.103,\"absolute_change\":0.07,\"percentage_change\":6.3463281958},{\"date\":\"1996-07-15\",\"fuel\":\"diesel\",\"current_price\":1.178,\"yoy_price\":1.099,\"absolute_change\":0.079,\"percentage_change\":7.1883530482},{\"date\":\"1996-07-22\",\"fuel\":\"diesel\",\"current_price\":1.184,\"yoy_price\":1.098,\"absolute_change\":0.086,\"percentage_change\":7.8324225865},{\"date\":\"1996-07-29\",\"fuel\":\"diesel\",\"current_price\":1.178,\"yoy_price\":1.093,\"absolute_change\":0.085,\"percentage_change\":7.7767612077},{\"date\":\"1996-08-05\",\"fuel\":\"diesel\",\"current_price\":1.184,\"yoy_price\":1.099,\"absolute_change\":0.085,\"percentage_change\":7.7343039126},{\"date\":\"1996-08-12\",\"fuel\":\"diesel\",\"current_price\":1.191,\"yoy_price\":1.106,\"absolute_change\":0.085,\"percentage_change\":7.6853526221},{\"date\":\"1996-08-19\",\"fuel\":\"diesel\",\"current_price\":1.206,\"yoy_price\":1.106,\"absolute_change\":0.1,\"percentage_change\":9.0415913201},{\"date\":\"1996-08-26\",\"fuel\":\"diesel\",\"current_price\":1.222,\"yoy_price\":1.109,\"absolute_change\":0.113,\"percentage_change\":10.1893597836},{\"date\":\"1996-09-02\",\"fuel\":\"diesel\",\"current_price\":1.231,\"yoy_price\":1.115,\"absolute_change\":0.116,\"percentage_change\":10.4035874439},{\"date\":\"1996-09-09\",\"fuel\":\"diesel\",\"current_price\":1.25,\"yoy_price\":1.119,\"absolute_change\":0.131,\"percentage_change\":11.7068811439},{\"date\":\"1996-09-16\",\"fuel\":\"diesel\",\"current_price\":1.276,\"yoy_price\":1.122,\"absolute_change\":0.154,\"percentage_change\":13.7254901961},{\"date\":\"1996-09-23\",\"fuel\":\"diesel\",\"current_price\":1.277,\"yoy_price\":1.121,\"absolute_change\":0.156,\"percentage_change\":13.9161462979},{\"date\":\"1996-09-30\",\"fuel\":\"diesel\",\"current_price\":1.289,\"yoy_price\":1.117,\"absolute_change\":0.172,\"percentage_change\":15.3983885407},{\"date\":\"1996-10-07\",\"fuel\":\"diesel\",\"current_price\":1.308,\"yoy_price\":1.117,\"absolute_change\":0.191,\"percentage_change\":17.0993733214},{\"date\":\"1996-10-14\",\"fuel\":\"diesel\",\"current_price\":1.326,\"yoy_price\":1.117,\"absolute_change\":0.209,\"percentage_change\":18.7108325873},{\"date\":\"1996-10-21\",\"fuel\":\"diesel\",\"current_price\":1.329,\"yoy_price\":1.114,\"absolute_change\":0.215,\"percentage_change\":19.2998204668},{\"date\":\"1996-10-28\",\"fuel\":\"diesel\",\"current_price\":1.329,\"yoy_price\":1.11,\"absolute_change\":0.219,\"percentage_change\":19.7297297297},{\"date\":\"1996-11-04\",\"fuel\":\"diesel\",\"current_price\":1.323,\"yoy_price\":1.118,\"absolute_change\":0.205,\"percentage_change\":18.3363148479},{\"date\":\"1996-11-11\",\"fuel\":\"diesel\",\"current_price\":1.316,\"yoy_price\":1.118,\"absolute_change\":0.198,\"percentage_change\":17.71019678},{\"date\":\"1996-11-18\",\"fuel\":\"diesel\",\"current_price\":1.324,\"yoy_price\":1.119,\"absolute_change\":0.205,\"percentage_change\":18.3199285076},{\"date\":\"1996-11-25\",\"fuel\":\"diesel\",\"current_price\":1.327,\"yoy_price\":1.124,\"absolute_change\":0.203,\"percentage_change\":18.0604982206},{\"date\":\"1996-12-02\",\"fuel\":\"diesel\",\"current_price\":1.323,\"yoy_price\":1.123,\"absolute_change\":0.2,\"percentage_change\":17.8094390027},{\"date\":\"1996-12-09\",\"fuel\":\"diesel\",\"current_price\":1.32,\"yoy_price\":1.124,\"absolute_change\":0.196,\"percentage_change\":17.4377224199},{\"date\":\"1996-12-16\",\"fuel\":\"diesel\",\"current_price\":1.307,\"yoy_price\":1.13,\"absolute_change\":0.177,\"percentage_change\":15.6637168142},{\"date\":\"1996-12-23\",\"fuel\":\"diesel\",\"current_price\":1.3,\"yoy_price\":1.141,\"absolute_change\":0.159,\"percentage_change\":13.93514461},{\"date\":\"1996-12-30\",\"fuel\":\"diesel\",\"current_price\":1.295,\"yoy_price\":1.148,\"absolute_change\":0.147,\"percentage_change\":12.8048780488},{\"date\":\"1997-01-06\",\"fuel\":\"diesel\",\"current_price\":1.291,\"yoy_price\":1.146,\"absolute_change\":0.145,\"percentage_change\":12.6527050611},{\"date\":\"1997-01-13\",\"fuel\":\"diesel\",\"current_price\":1.296,\"yoy_price\":1.152,\"absolute_change\":0.144,\"percentage_change\":12.5},{\"date\":\"1997-01-20\",\"fuel\":\"diesel\",\"current_price\":1.293,\"yoy_price\":1.144,\"absolute_change\":0.149,\"percentage_change\":13.0244755245},{\"date\":\"1997-01-27\",\"fuel\":\"diesel\",\"current_price\":1.283,\"yoy_price\":1.136,\"absolute_change\":0.147,\"percentage_change\":12.9401408451},{\"date\":\"1997-02-03\",\"fuel\":\"diesel\",\"current_price\":1.288,\"yoy_price\":1.13,\"absolute_change\":0.158,\"percentage_change\":13.982300885},{\"date\":\"1997-02-10\",\"fuel\":\"diesel\",\"current_price\":1.285,\"yoy_price\":1.134,\"absolute_change\":0.151,\"percentage_change\":13.315696649},{\"date\":\"1997-02-17\",\"fuel\":\"diesel\",\"current_price\":1.278,\"yoy_price\":1.151,\"absolute_change\":0.127,\"percentage_change\":11.0338835795},{\"date\":\"1997-02-24\",\"fuel\":\"diesel\",\"current_price\":1.269,\"yoy_price\":1.164,\"absolute_change\":0.105,\"percentage_change\":9.0206185567},{\"date\":\"1997-03-03\",\"fuel\":\"diesel\",\"current_price\":1.252,\"yoy_price\":1.175,\"absolute_change\":0.077,\"percentage_change\":6.5531914894},{\"date\":\"1997-03-10\",\"fuel\":\"diesel\",\"current_price\":1.23,\"yoy_price\":1.173,\"absolute_change\":0.057,\"percentage_change\":4.8593350384},{\"date\":\"1997-03-17\",\"fuel\":\"diesel\",\"current_price\":1.22,\"yoy_price\":1.172,\"absolute_change\":0.048,\"percentage_change\":4.0955631399},{\"date\":\"1997-03-24\",\"fuel\":\"diesel\",\"current_price\":1.22,\"yoy_price\":1.21,\"absolute_change\":0.01,\"percentage_change\":0.826446281},{\"date\":\"1997-03-31\",\"fuel\":\"diesel\",\"current_price\":1.225,\"yoy_price\":1.222,\"absolute_change\":0.003,\"percentage_change\":0.2454991817},{\"date\":\"1997-04-07\",\"fuel\":\"diesel\",\"current_price\":1.217,\"yoy_price\":1.249,\"absolute_change\":-0.032,\"percentage_change\":-2.5620496397},{\"date\":\"1997-04-14\",\"fuel\":\"diesel\",\"current_price\":1.216,\"yoy_price\":1.305,\"absolute_change\":-0.089,\"percentage_change\":-6.8199233716},{\"date\":\"1997-04-21\",\"fuel\":\"diesel\",\"current_price\":1.211,\"yoy_price\":1.304,\"absolute_change\":-0.093,\"percentage_change\":-7.1319018405},{\"date\":\"1997-04-28\",\"fuel\":\"diesel\",\"current_price\":1.205,\"yoy_price\":1.285,\"absolute_change\":-0.08,\"percentage_change\":-6.2256809339},{\"date\":\"1997-05-05\",\"fuel\":\"diesel\",\"current_price\":1.205,\"yoy_price\":1.292,\"absolute_change\":-0.087,\"percentage_change\":-6.73374613},{\"date\":\"1997-05-12\",\"fuel\":\"diesel\",\"current_price\":1.191,\"yoy_price\":1.285,\"absolute_change\":-0.094,\"percentage_change\":-7.3151750973},{\"date\":\"1997-05-19\",\"fuel\":\"diesel\",\"current_price\":1.191,\"yoy_price\":1.274,\"absolute_change\":-0.083,\"percentage_change\":-6.5149136578},{\"date\":\"1997-05-26\",\"fuel\":\"diesel\",\"current_price\":1.196,\"yoy_price\":1.254,\"absolute_change\":-0.058,\"percentage_change\":-4.625199362},{\"date\":\"1997-06-02\",\"fuel\":\"diesel\",\"current_price\":1.19,\"yoy_price\":1.24,\"absolute_change\":-0.05,\"percentage_change\":-4.0322580645},{\"date\":\"1997-06-09\",\"fuel\":\"diesel\",\"current_price\":1.187,\"yoy_price\":1.215,\"absolute_change\":-0.028,\"percentage_change\":-2.304526749},{\"date\":\"1997-06-16\",\"fuel\":\"diesel\",\"current_price\":1.172,\"yoy_price\":1.193,\"absolute_change\":-0.021,\"percentage_change\":-1.7602682313},{\"date\":\"1997-06-23\",\"fuel\":\"diesel\",\"current_price\":1.162,\"yoy_price\":1.179,\"absolute_change\":-0.017,\"percentage_change\":-1.4418999152},{\"date\":\"1997-06-30\",\"fuel\":\"diesel\",\"current_price\":1.153,\"yoy_price\":1.172,\"absolute_change\":-0.019,\"percentage_change\":-1.6211604096},{\"date\":\"1997-07-07\",\"fuel\":\"diesel\",\"current_price\":1.159,\"yoy_price\":1.173,\"absolute_change\":-0.014,\"percentage_change\":-1.1935208866},{\"date\":\"1997-07-14\",\"fuel\":\"diesel\",\"current_price\":1.152,\"yoy_price\":1.178,\"absolute_change\":-0.026,\"percentage_change\":-2.2071307301},{\"date\":\"1997-07-21\",\"fuel\":\"diesel\",\"current_price\":1.147,\"yoy_price\":1.184,\"absolute_change\":-0.037,\"percentage_change\":-3.125},{\"date\":\"1997-07-28\",\"fuel\":\"diesel\",\"current_price\":1.145,\"yoy_price\":1.178,\"absolute_change\":-0.033,\"percentage_change\":-2.8013582343},{\"date\":\"1997-08-04\",\"fuel\":\"diesel\",\"current_price\":1.155,\"yoy_price\":1.184,\"absolute_change\":-0.029,\"percentage_change\":-2.4493243243},{\"date\":\"1997-08-11\",\"fuel\":\"diesel\",\"current_price\":1.168,\"yoy_price\":1.191,\"absolute_change\":-0.023,\"percentage_change\":-1.9311502939},{\"date\":\"1997-08-18\",\"fuel\":\"diesel\",\"current_price\":1.167,\"yoy_price\":1.206,\"absolute_change\":-0.039,\"percentage_change\":-3.2338308458},{\"date\":\"1997-08-25\",\"fuel\":\"diesel\",\"current_price\":1.169,\"yoy_price\":1.222,\"absolute_change\":-0.053,\"percentage_change\":-4.3371522095},{\"date\":\"1997-09-01\",\"fuel\":\"diesel\",\"current_price\":1.165,\"yoy_price\":1.231,\"absolute_change\":-0.066,\"percentage_change\":-5.3614947197},{\"date\":\"1997-09-08\",\"fuel\":\"diesel\",\"current_price\":1.163,\"yoy_price\":1.25,\"absolute_change\":-0.087,\"percentage_change\":-6.96},{\"date\":\"1997-09-15\",\"fuel\":\"diesel\",\"current_price\":1.156,\"yoy_price\":1.276,\"absolute_change\":-0.12,\"percentage_change\":-9.4043887147},{\"date\":\"1997-09-22\",\"fuel\":\"diesel\",\"current_price\":1.154,\"yoy_price\":1.277,\"absolute_change\":-0.123,\"percentage_change\":-9.6319498825},{\"date\":\"1997-09-29\",\"fuel\":\"diesel\",\"current_price\":1.16,\"yoy_price\":1.289,\"absolute_change\":-0.129,\"percentage_change\":-10.0077579519},{\"date\":\"1997-10-06\",\"fuel\":\"diesel\",\"current_price\":1.175,\"yoy_price\":1.308,\"absolute_change\":-0.133,\"percentage_change\":-10.1681957187},{\"date\":\"1997-10-13\",\"fuel\":\"diesel\",\"current_price\":1.185,\"yoy_price\":1.326,\"absolute_change\":-0.141,\"percentage_change\":-10.6334841629},{\"date\":\"1997-10-20\",\"fuel\":\"diesel\",\"current_price\":1.185,\"yoy_price\":1.329,\"absolute_change\":-0.144,\"percentage_change\":-10.835214447},{\"date\":\"1997-10-27\",\"fuel\":\"diesel\",\"current_price\":1.185,\"yoy_price\":1.329,\"absolute_change\":-0.144,\"percentage_change\":-10.835214447},{\"date\":\"1997-11-03\",\"fuel\":\"diesel\",\"current_price\":1.188,\"yoy_price\":1.323,\"absolute_change\":-0.135,\"percentage_change\":-10.2040816327},{\"date\":\"1997-11-10\",\"fuel\":\"diesel\",\"current_price\":1.19,\"yoy_price\":1.316,\"absolute_change\":-0.126,\"percentage_change\":-9.5744680851},{\"date\":\"1997-11-17\",\"fuel\":\"diesel\",\"current_price\":1.195,\"yoy_price\":1.324,\"absolute_change\":-0.129,\"percentage_change\":-9.7432024169},{\"date\":\"1997-11-24\",\"fuel\":\"diesel\",\"current_price\":1.193,\"yoy_price\":1.327,\"absolute_change\":-0.134,\"percentage_change\":-10.0979653353},{\"date\":\"1997-12-01\",\"fuel\":\"diesel\",\"current_price\":1.189,\"yoy_price\":1.323,\"absolute_change\":-0.134,\"percentage_change\":-10.1284958428},{\"date\":\"1997-12-08\",\"fuel\":\"diesel\",\"current_price\":1.174,\"yoy_price\":1.32,\"absolute_change\":-0.146,\"percentage_change\":-11.0606060606},{\"date\":\"1997-12-15\",\"fuel\":\"diesel\",\"current_price\":1.162,\"yoy_price\":1.307,\"absolute_change\":-0.145,\"percentage_change\":-11.0941086458},{\"date\":\"1997-12-22\",\"fuel\":\"diesel\",\"current_price\":1.155,\"yoy_price\":1.3,\"absolute_change\":-0.145,\"percentage_change\":-11.1538461538},{\"date\":\"1997-12-29\",\"fuel\":\"diesel\",\"current_price\":1.15,\"yoy_price\":1.295,\"absolute_change\":-0.145,\"percentage_change\":-11.1969111969},{\"date\":\"1998-01-05\",\"fuel\":\"diesel\",\"current_price\":1.147,\"yoy_price\":1.291,\"absolute_change\":-0.144,\"percentage_change\":-11.1541440744},{\"date\":\"1998-01-12\",\"fuel\":\"diesel\",\"current_price\":1.126,\"yoy_price\":1.296,\"absolute_change\":-0.17,\"percentage_change\":-13.1172839506},{\"date\":\"1998-01-19\",\"fuel\":\"diesel\",\"current_price\":1.109,\"yoy_price\":1.293,\"absolute_change\":-0.184,\"percentage_change\":-14.2304717711},{\"date\":\"1998-01-26\",\"fuel\":\"diesel\",\"current_price\":1.096,\"yoy_price\":1.283,\"absolute_change\":-0.187,\"percentage_change\":-14.5752143414},{\"date\":\"1998-02-02\",\"fuel\":\"diesel\",\"current_price\":1.091,\"yoy_price\":1.288,\"absolute_change\":-0.197,\"percentage_change\":-15.2950310559},{\"date\":\"1998-02-09\",\"fuel\":\"diesel\",\"current_price\":1.085,\"yoy_price\":1.285,\"absolute_change\":-0.2,\"percentage_change\":-15.5642023346},{\"date\":\"1998-02-16\",\"fuel\":\"diesel\",\"current_price\":1.082,\"yoy_price\":1.278,\"absolute_change\":-0.196,\"percentage_change\":-15.3364632238},{\"date\":\"1998-02-23\",\"fuel\":\"diesel\",\"current_price\":1.079,\"yoy_price\":1.269,\"absolute_change\":-0.19,\"percentage_change\":-14.9724192277},{\"date\":\"1998-03-02\",\"fuel\":\"diesel\",\"current_price\":1.074,\"yoy_price\":1.252,\"absolute_change\":-0.178,\"percentage_change\":-14.2172523962},{\"date\":\"1998-03-09\",\"fuel\":\"diesel\",\"current_price\":1.066,\"yoy_price\":1.23,\"absolute_change\":-0.164,\"percentage_change\":-13.3333333333},{\"date\":\"1998-03-16\",\"fuel\":\"diesel\",\"current_price\":1.057,\"yoy_price\":1.22,\"absolute_change\":-0.163,\"percentage_change\":-13.3606557377},{\"date\":\"1998-03-23\",\"fuel\":\"diesel\",\"current_price\":1.049,\"yoy_price\":1.22,\"absolute_change\":-0.171,\"percentage_change\":-14.0163934426},{\"date\":\"1998-03-30\",\"fuel\":\"diesel\",\"current_price\":1.068,\"yoy_price\":1.225,\"absolute_change\":-0.157,\"percentage_change\":-12.8163265306},{\"date\":\"1998-04-06\",\"fuel\":\"diesel\",\"current_price\":1.067,\"yoy_price\":1.217,\"absolute_change\":-0.15,\"percentage_change\":-12.325390304},{\"date\":\"1998-04-13\",\"fuel\":\"diesel\",\"current_price\":1.065,\"yoy_price\":1.216,\"absolute_change\":-0.151,\"percentage_change\":-12.4177631579},{\"date\":\"1998-04-20\",\"fuel\":\"diesel\",\"current_price\":1.065,\"yoy_price\":1.211,\"absolute_change\":-0.146,\"percentage_change\":-12.0561519405},{\"date\":\"1998-04-27\",\"fuel\":\"diesel\",\"current_price\":1.07,\"yoy_price\":1.205,\"absolute_change\":-0.135,\"percentage_change\":-11.2033195021},{\"date\":\"1998-05-04\",\"fuel\":\"diesel\",\"current_price\":1.072,\"yoy_price\":1.205,\"absolute_change\":-0.133,\"percentage_change\":-11.0373443983},{\"date\":\"1998-05-11\",\"fuel\":\"diesel\",\"current_price\":1.075,\"yoy_price\":1.191,\"absolute_change\":-0.116,\"percentage_change\":-9.7397145256},{\"date\":\"1998-05-18\",\"fuel\":\"diesel\",\"current_price\":1.069,\"yoy_price\":1.191,\"absolute_change\":-0.122,\"percentage_change\":-10.2434928631},{\"date\":\"1998-05-25\",\"fuel\":\"diesel\",\"current_price\":1.06,\"yoy_price\":1.196,\"absolute_change\":-0.136,\"percentage_change\":-11.3712374582},{\"date\":\"1998-06-01\",\"fuel\":\"diesel\",\"current_price\":1.053,\"yoy_price\":1.19,\"absolute_change\":-0.137,\"percentage_change\":-11.512605042},{\"date\":\"1998-06-08\",\"fuel\":\"diesel\",\"current_price\":1.045,\"yoy_price\":1.187,\"absolute_change\":-0.142,\"percentage_change\":-11.9629317607},{\"date\":\"1998-06-15\",\"fuel\":\"diesel\",\"current_price\":1.04,\"yoy_price\":1.172,\"absolute_change\":-0.132,\"percentage_change\":-11.2627986348},{\"date\":\"1998-06-22\",\"fuel\":\"diesel\",\"current_price\":1.033,\"yoy_price\":1.162,\"absolute_change\":-0.129,\"percentage_change\":-11.1015490534},{\"date\":\"1998-06-29\",\"fuel\":\"diesel\",\"current_price\":1.034,\"yoy_price\":1.153,\"absolute_change\":-0.119,\"percentage_change\":-10.3209019948},{\"date\":\"1998-07-06\",\"fuel\":\"diesel\",\"current_price\":1.036,\"yoy_price\":1.159,\"absolute_change\":-0.123,\"percentage_change\":-10.6125970664},{\"date\":\"1998-07-13\",\"fuel\":\"diesel\",\"current_price\":1.031,\"yoy_price\":1.152,\"absolute_change\":-0.121,\"percentage_change\":-10.5034722222},{\"date\":\"1998-07-20\",\"fuel\":\"diesel\",\"current_price\":1.027,\"yoy_price\":1.147,\"absolute_change\":-0.12,\"percentage_change\":-10.4620749782},{\"date\":\"1998-07-27\",\"fuel\":\"diesel\",\"current_price\":1.02,\"yoy_price\":1.145,\"absolute_change\":-0.125,\"percentage_change\":-10.9170305677},{\"date\":\"1998-08-03\",\"fuel\":\"diesel\",\"current_price\":1.016,\"yoy_price\":1.155,\"absolute_change\":-0.139,\"percentage_change\":-12.0346320346},{\"date\":\"1998-08-10\",\"fuel\":\"diesel\",\"current_price\":1.01,\"yoy_price\":1.168,\"absolute_change\":-0.158,\"percentage_change\":-13.5273972603},{\"date\":\"1998-08-17\",\"fuel\":\"diesel\",\"current_price\":1.007,\"yoy_price\":1.167,\"absolute_change\":-0.16,\"percentage_change\":-13.7103684662},{\"date\":\"1998-08-24\",\"fuel\":\"diesel\",\"current_price\":1.004,\"yoy_price\":1.169,\"absolute_change\":-0.165,\"percentage_change\":-14.1146278871},{\"date\":\"1998-08-31\",\"fuel\":\"diesel\",\"current_price\":1,\"yoy_price\":1.165,\"absolute_change\":-0.165,\"percentage_change\":-14.1630901288},{\"date\":\"1998-09-07\",\"fuel\":\"diesel\",\"current_price\":1.009,\"yoy_price\":1.163,\"absolute_change\":-0.154,\"percentage_change\":-13.241616509},{\"date\":\"1998-09-14\",\"fuel\":\"diesel\",\"current_price\":1.019,\"yoy_price\":1.156,\"absolute_change\":-0.137,\"percentage_change\":-11.8512110727},{\"date\":\"1998-09-21\",\"fuel\":\"diesel\",\"current_price\":1.03,\"yoy_price\":1.154,\"absolute_change\":-0.124,\"percentage_change\":-10.7452339688},{\"date\":\"1998-09-28\",\"fuel\":\"diesel\",\"current_price\":1.039,\"yoy_price\":1.16,\"absolute_change\":-0.121,\"percentage_change\":-10.4310344828},{\"date\":\"1998-10-05\",\"fuel\":\"diesel\",\"current_price\":1.041,\"yoy_price\":1.175,\"absolute_change\":-0.134,\"percentage_change\":-11.4042553191},{\"date\":\"1998-10-12\",\"fuel\":\"diesel\",\"current_price\":1.041,\"yoy_price\":1.185,\"absolute_change\":-0.144,\"percentage_change\":-12.1518987342},{\"date\":\"1998-10-19\",\"fuel\":\"diesel\",\"current_price\":1.036,\"yoy_price\":1.185,\"absolute_change\":-0.149,\"percentage_change\":-12.5738396624},{\"date\":\"1998-10-26\",\"fuel\":\"diesel\",\"current_price\":1.036,\"yoy_price\":1.185,\"absolute_change\":-0.149,\"percentage_change\":-12.5738396624},{\"date\":\"1998-11-02\",\"fuel\":\"diesel\",\"current_price\":1.035,\"yoy_price\":1.188,\"absolute_change\":-0.153,\"percentage_change\":-12.8787878788},{\"date\":\"1998-11-09\",\"fuel\":\"diesel\",\"current_price\":1.034,\"yoy_price\":1.19,\"absolute_change\":-0.156,\"percentage_change\":-13.1092436975},{\"date\":\"1998-11-16\",\"fuel\":\"diesel\",\"current_price\":1.026,\"yoy_price\":1.195,\"absolute_change\":-0.169,\"percentage_change\":-14.1422594142},{\"date\":\"1998-11-23\",\"fuel\":\"diesel\",\"current_price\":1.012,\"yoy_price\":1.193,\"absolute_change\":-0.181,\"percentage_change\":-15.1718357083},{\"date\":\"1998-11-30\",\"fuel\":\"diesel\",\"current_price\":1.004,\"yoy_price\":1.189,\"absolute_change\":-0.185,\"percentage_change\":-15.559293524},{\"date\":\"1998-12-07\",\"fuel\":\"diesel\",\"current_price\":0.986,\"yoy_price\":1.174,\"absolute_change\":-0.188,\"percentage_change\":-16.0136286201},{\"date\":\"1998-12-14\",\"fuel\":\"diesel\",\"current_price\":0.972,\"yoy_price\":1.162,\"absolute_change\":-0.19,\"percentage_change\":-16.3511187608},{\"date\":\"1998-12-21\",\"fuel\":\"diesel\",\"current_price\":0.968,\"yoy_price\":1.155,\"absolute_change\":-0.187,\"percentage_change\":-16.1904761905},{\"date\":\"1998-12-28\",\"fuel\":\"diesel\",\"current_price\":0.966,\"yoy_price\":1.15,\"absolute_change\":-0.184,\"percentage_change\":-16},{\"date\":\"1999-01-04\",\"fuel\":\"diesel\",\"current_price\":0.965,\"yoy_price\":1.147,\"absolute_change\":-0.182,\"percentage_change\":-15.8674803836},{\"date\":\"1999-01-11\",\"fuel\":\"diesel\",\"current_price\":0.967,\"yoy_price\":1.126,\"absolute_change\":-0.159,\"percentage_change\":-14.1207815275},{\"date\":\"1999-01-18\",\"fuel\":\"diesel\",\"current_price\":0.97,\"yoy_price\":1.109,\"absolute_change\":-0.139,\"percentage_change\":-12.5338142471},{\"date\":\"1999-01-25\",\"fuel\":\"diesel\",\"current_price\":0.964,\"yoy_price\":1.096,\"absolute_change\":-0.132,\"percentage_change\":-12.0437956204},{\"date\":\"1999-02-01\",\"fuel\":\"diesel\",\"current_price\":0.962,\"yoy_price\":1.091,\"absolute_change\":-0.129,\"percentage_change\":-11.8240146654},{\"date\":\"1999-02-08\",\"fuel\":\"diesel\",\"current_price\":0.962,\"yoy_price\":1.085,\"absolute_change\":-0.123,\"percentage_change\":-11.33640553},{\"date\":\"1999-02-15\",\"fuel\":\"diesel\",\"current_price\":0.959,\"yoy_price\":1.082,\"absolute_change\":-0.123,\"percentage_change\":-11.3678373383},{\"date\":\"1999-02-22\",\"fuel\":\"diesel\",\"current_price\":0.953,\"yoy_price\":1.079,\"absolute_change\":-0.126,\"percentage_change\":-11.6774791474},{\"date\":\"1999-03-01\",\"fuel\":\"diesel\",\"current_price\":0.956,\"yoy_price\":1.074,\"absolute_change\":-0.118,\"percentage_change\":-10.9869646182},{\"date\":\"1999-03-08\",\"fuel\":\"diesel\",\"current_price\":0.964,\"yoy_price\":1.066,\"absolute_change\":-0.102,\"percentage_change\":-9.5684803002},{\"date\":\"1999-03-15\",\"fuel\":\"diesel\",\"current_price\":1,\"yoy_price\":1.057,\"absolute_change\":-0.057,\"percentage_change\":-5.3926206244},{\"date\":\"1999-03-22\",\"fuel\":\"diesel\",\"current_price\":1.018,\"yoy_price\":1.049,\"absolute_change\":-0.031,\"percentage_change\":-2.9551954242},{\"date\":\"1999-03-29\",\"fuel\":\"diesel\",\"current_price\":1.046,\"yoy_price\":1.068,\"absolute_change\":-0.022,\"percentage_change\":-2.0599250936},{\"date\":\"1999-04-05\",\"fuel\":\"diesel\",\"current_price\":1.075,\"yoy_price\":1.067,\"absolute_change\":0.008,\"percentage_change\":0.7497656982},{\"date\":\"1999-04-12\",\"fuel\":\"diesel\",\"current_price\":1.084,\"yoy_price\":1.065,\"absolute_change\":0.019,\"percentage_change\":1.7840375587},{\"date\":\"1999-04-19\",\"fuel\":\"diesel\",\"current_price\":1.08,\"yoy_price\":1.065,\"absolute_change\":0.015,\"percentage_change\":1.4084507042},{\"date\":\"1999-04-26\",\"fuel\":\"diesel\",\"current_price\":1.078,\"yoy_price\":1.07,\"absolute_change\":0.008,\"percentage_change\":0.7476635514},{\"date\":\"1999-05-03\",\"fuel\":\"diesel\",\"current_price\":1.078,\"yoy_price\":1.072,\"absolute_change\":0.006,\"percentage_change\":0.5597014925},{\"date\":\"1999-05-10\",\"fuel\":\"diesel\",\"current_price\":1.083,\"yoy_price\":1.075,\"absolute_change\":0.008,\"percentage_change\":0.7441860465},{\"date\":\"1999-05-17\",\"fuel\":\"diesel\",\"current_price\":1.075,\"yoy_price\":1.069,\"absolute_change\":0.006,\"percentage_change\":0.561272217},{\"date\":\"1999-05-24\",\"fuel\":\"diesel\",\"current_price\":1.066,\"yoy_price\":1.06,\"absolute_change\":0.006,\"percentage_change\":0.5660377358},{\"date\":\"1999-05-31\",\"fuel\":\"diesel\",\"current_price\":1.065,\"yoy_price\":1.053,\"absolute_change\":0.012,\"percentage_change\":1.1396011396},{\"date\":\"1999-06-07\",\"fuel\":\"diesel\",\"current_price\":1.059,\"yoy_price\":1.045,\"absolute_change\":0.014,\"percentage_change\":1.3397129187},{\"date\":\"1999-06-14\",\"fuel\":\"diesel\",\"current_price\":1.068,\"yoy_price\":1.04,\"absolute_change\":0.028,\"percentage_change\":2.6923076923},{\"date\":\"1999-06-21\",\"fuel\":\"diesel\",\"current_price\":1.082,\"yoy_price\":1.033,\"absolute_change\":0.049,\"percentage_change\":4.7434656341},{\"date\":\"1999-06-28\",\"fuel\":\"diesel\",\"current_price\":1.087,\"yoy_price\":1.034,\"absolute_change\":0.053,\"percentage_change\":5.1257253385},{\"date\":\"1999-07-05\",\"fuel\":\"diesel\",\"current_price\":1.102,\"yoy_price\":1.036,\"absolute_change\":0.066,\"percentage_change\":6.3706563707},{\"date\":\"1999-07-12\",\"fuel\":\"diesel\",\"current_price\":1.114,\"yoy_price\":1.031,\"absolute_change\":0.083,\"percentage_change\":8.0504364694},{\"date\":\"1999-07-19\",\"fuel\":\"diesel\",\"current_price\":1.133,\"yoy_price\":1.027,\"absolute_change\":0.106,\"percentage_change\":10.3213242454},{\"date\":\"1999-07-26\",\"fuel\":\"diesel\",\"current_price\":1.137,\"yoy_price\":1.02,\"absolute_change\":0.117,\"percentage_change\":11.4705882353},{\"date\":\"1999-08-02\",\"fuel\":\"diesel\",\"current_price\":1.146,\"yoy_price\":1.016,\"absolute_change\":0.13,\"percentage_change\":12.7952755906},{\"date\":\"1999-08-09\",\"fuel\":\"diesel\",\"current_price\":1.156,\"yoy_price\":1.01,\"absolute_change\":0.146,\"percentage_change\":14.4554455446},{\"date\":\"1999-08-16\",\"fuel\":\"diesel\",\"current_price\":1.178,\"yoy_price\":1.007,\"absolute_change\":0.171,\"percentage_change\":16.9811320755},{\"date\":\"1999-08-23\",\"fuel\":\"diesel\",\"current_price\":1.186,\"yoy_price\":1.004,\"absolute_change\":0.182,\"percentage_change\":18.1274900398},{\"date\":\"1999-08-30\",\"fuel\":\"diesel\",\"current_price\":1.194,\"yoy_price\":1,\"absolute_change\":0.194,\"percentage_change\":19.4},{\"date\":\"1999-09-06\",\"fuel\":\"diesel\",\"current_price\":1.198,\"yoy_price\":1.009,\"absolute_change\":0.189,\"percentage_change\":18.7314172448},{\"date\":\"1999-09-13\",\"fuel\":\"diesel\",\"current_price\":1.209,\"yoy_price\":1.019,\"absolute_change\":0.19,\"percentage_change\":18.6457311089},{\"date\":\"1999-09-20\",\"fuel\":\"diesel\",\"current_price\":1.226,\"yoy_price\":1.03,\"absolute_change\":0.196,\"percentage_change\":19.0291262136},{\"date\":\"1999-09-27\",\"fuel\":\"diesel\",\"current_price\":1.226,\"yoy_price\":1.039,\"absolute_change\":0.187,\"percentage_change\":17.9980750722},{\"date\":\"1999-10-04\",\"fuel\":\"diesel\",\"current_price\":1.234,\"yoy_price\":1.041,\"absolute_change\":0.193,\"percentage_change\":18.5398655139},{\"date\":\"1999-10-11\",\"fuel\":\"diesel\",\"current_price\":1.228,\"yoy_price\":1.041,\"absolute_change\":0.187,\"percentage_change\":17.9634966378},{\"date\":\"1999-10-18\",\"fuel\":\"diesel\",\"current_price\":1.224,\"yoy_price\":1.036,\"absolute_change\":0.188,\"percentage_change\":18.1467181467},{\"date\":\"1999-10-25\",\"fuel\":\"diesel\",\"current_price\":1.226,\"yoy_price\":1.036,\"absolute_change\":0.19,\"percentage_change\":18.3397683398},{\"date\":\"1999-11-01\",\"fuel\":\"diesel\",\"current_price\":1.229,\"yoy_price\":1.035,\"absolute_change\":0.194,\"percentage_change\":18.7439613527},{\"date\":\"1999-11-08\",\"fuel\":\"diesel\",\"current_price\":1.234,\"yoy_price\":1.034,\"absolute_change\":0.2,\"percentage_change\":19.3423597679},{\"date\":\"1999-11-15\",\"fuel\":\"diesel\",\"current_price\":1.261,\"yoy_price\":1.026,\"absolute_change\":0.235,\"percentage_change\":22.9044834308},{\"date\":\"1999-11-22\",\"fuel\":\"diesel\",\"current_price\":1.289,\"yoy_price\":1.012,\"absolute_change\":0.277,\"percentage_change\":27.371541502},{\"date\":\"1999-11-29\",\"fuel\":\"diesel\",\"current_price\":1.304,\"yoy_price\":1.004,\"absolute_change\":0.3,\"percentage_change\":29.8804780876},{\"date\":\"1999-12-06\",\"fuel\":\"diesel\",\"current_price\":1.294,\"yoy_price\":0.986,\"absolute_change\":0.308,\"percentage_change\":31.2373225152},{\"date\":\"1999-12-13\",\"fuel\":\"diesel\",\"current_price\":1.288,\"yoy_price\":0.972,\"absolute_change\":0.316,\"percentage_change\":32.5102880658},{\"date\":\"1999-12-20\",\"fuel\":\"diesel\",\"current_price\":1.287,\"yoy_price\":0.968,\"absolute_change\":0.319,\"percentage_change\":32.9545454545},{\"date\":\"1999-12-27\",\"fuel\":\"diesel\",\"current_price\":1.298,\"yoy_price\":0.966,\"absolute_change\":0.332,\"percentage_change\":34.3685300207},{\"date\":\"2000-01-03\",\"fuel\":\"diesel\",\"current_price\":1.309,\"yoy_price\":0.965,\"absolute_change\":0.344,\"percentage_change\":35.6476683938},{\"date\":\"2000-01-10\",\"fuel\":\"diesel\",\"current_price\":1.307,\"yoy_price\":0.967,\"absolute_change\":0.34,\"percentage_change\":35.1602895553},{\"date\":\"2000-01-17\",\"fuel\":\"diesel\",\"current_price\":1.307,\"yoy_price\":0.97,\"absolute_change\":0.337,\"percentage_change\":34.7422680412},{\"date\":\"2000-01-24\",\"fuel\":\"diesel\",\"current_price\":1.418,\"yoy_price\":0.964,\"absolute_change\":0.454,\"percentage_change\":47.0954356846},{\"date\":\"2000-01-31\",\"fuel\":\"diesel\",\"current_price\":1.439,\"yoy_price\":0.962,\"absolute_change\":0.477,\"percentage_change\":49.5841995842},{\"date\":\"2000-02-07\",\"fuel\":\"diesel\",\"current_price\":1.47,\"yoy_price\":0.962,\"absolute_change\":0.508,\"percentage_change\":52.8066528067},{\"date\":\"2000-02-14\",\"fuel\":\"diesel\",\"current_price\":1.456,\"yoy_price\":0.959,\"absolute_change\":0.497,\"percentage_change\":51.8248175182},{\"date\":\"2000-02-21\",\"fuel\":\"diesel\",\"current_price\":1.456,\"yoy_price\":0.953,\"absolute_change\":0.503,\"percentage_change\":52.7806925498},{\"date\":\"2000-02-28\",\"fuel\":\"diesel\",\"current_price\":1.461,\"yoy_price\":0.956,\"absolute_change\":0.505,\"percentage_change\":52.8242677824},{\"date\":\"2000-03-06\",\"fuel\":\"diesel\",\"current_price\":1.49,\"yoy_price\":0.964,\"absolute_change\":0.526,\"percentage_change\":54.5643153527},{\"date\":\"2000-03-13\",\"fuel\":\"diesel\",\"current_price\":1.496,\"yoy_price\":1,\"absolute_change\":0.496,\"percentage_change\":49.6},{\"date\":\"2000-03-20\",\"fuel\":\"diesel\",\"current_price\":1.479,\"yoy_price\":1.018,\"absolute_change\":0.461,\"percentage_change\":45.2848722986},{\"date\":\"2000-03-27\",\"fuel\":\"diesel\",\"current_price\":1.451,\"yoy_price\":1.046,\"absolute_change\":0.405,\"percentage_change\":38.7189292543},{\"date\":\"2000-04-03\",\"fuel\":\"diesel\",\"current_price\":1.442,\"yoy_price\":1.075,\"absolute_change\":0.367,\"percentage_change\":34.1395348837},{\"date\":\"2000-04-10\",\"fuel\":\"diesel\",\"current_price\":1.419,\"yoy_price\":1.084,\"absolute_change\":0.335,\"percentage_change\":30.9040590406},{\"date\":\"2000-04-17\",\"fuel\":\"diesel\",\"current_price\":1.398,\"yoy_price\":1.08,\"absolute_change\":0.318,\"percentage_change\":29.4444444444},{\"date\":\"2000-04-24\",\"fuel\":\"diesel\",\"current_price\":1.428,\"yoy_price\":1.078,\"absolute_change\":0.35,\"percentage_change\":32.4675324675},{\"date\":\"2000-05-01\",\"fuel\":\"diesel\",\"current_price\":1.418,\"yoy_price\":1.078,\"absolute_change\":0.34,\"percentage_change\":31.5398886827},{\"date\":\"2000-05-08\",\"fuel\":\"diesel\",\"current_price\":1.402,\"yoy_price\":1.083,\"absolute_change\":0.319,\"percentage_change\":29.4552169898},{\"date\":\"2000-05-15\",\"fuel\":\"diesel\",\"current_price\":1.415,\"yoy_price\":1.075,\"absolute_change\":0.34,\"percentage_change\":31.6279069767},{\"date\":\"2000-05-22\",\"fuel\":\"diesel\",\"current_price\":1.432,\"yoy_price\":1.066,\"absolute_change\":0.366,\"percentage_change\":34.3339587242},{\"date\":\"2000-05-29\",\"fuel\":\"diesel\",\"current_price\":1.431,\"yoy_price\":1.065,\"absolute_change\":0.366,\"percentage_change\":34.3661971831},{\"date\":\"2000-06-05\",\"fuel\":\"diesel\",\"current_price\":1.419,\"yoy_price\":1.059,\"absolute_change\":0.36,\"percentage_change\":33.9943342776},{\"date\":\"2000-06-12\",\"fuel\":\"diesel\",\"current_price\":1.411,\"yoy_price\":1.068,\"absolute_change\":0.343,\"percentage_change\":32.1161048689},{\"date\":\"2000-06-19\",\"fuel\":\"diesel\",\"current_price\":1.423,\"yoy_price\":1.082,\"absolute_change\":0.341,\"percentage_change\":31.5157116451},{\"date\":\"2000-06-26\",\"fuel\":\"diesel\",\"current_price\":1.432,\"yoy_price\":1.087,\"absolute_change\":0.345,\"percentage_change\":31.7387304508},{\"date\":\"2000-07-03\",\"fuel\":\"diesel\",\"current_price\":1.453,\"yoy_price\":1.102,\"absolute_change\":0.351,\"percentage_change\":31.8511796733},{\"date\":\"2000-07-10\",\"fuel\":\"diesel\",\"current_price\":1.449,\"yoy_price\":1.114,\"absolute_change\":0.335,\"percentage_change\":30.0718132855},{\"date\":\"2000-07-17\",\"fuel\":\"diesel\",\"current_price\":1.435,\"yoy_price\":1.133,\"absolute_change\":0.302,\"percentage_change\":26.6548984996},{\"date\":\"2000-07-24\",\"fuel\":\"diesel\",\"current_price\":1.424,\"yoy_price\":1.137,\"absolute_change\":0.287,\"percentage_change\":25.2418645558},{\"date\":\"2000-07-31\",\"fuel\":\"diesel\",\"current_price\":1.408,\"yoy_price\":1.146,\"absolute_change\":0.262,\"percentage_change\":22.8621291449},{\"date\":\"2000-08-07\",\"fuel\":\"diesel\",\"current_price\":1.41,\"yoy_price\":1.156,\"absolute_change\":0.254,\"percentage_change\":21.9723183391},{\"date\":\"2000-08-14\",\"fuel\":\"diesel\",\"current_price\":1.447,\"yoy_price\":1.178,\"absolute_change\":0.269,\"percentage_change\":22.8353140917},{\"date\":\"2000-08-21\",\"fuel\":\"diesel\",\"current_price\":1.471,\"yoy_price\":1.186,\"absolute_change\":0.285,\"percentage_change\":24.0303541315},{\"date\":\"2000-08-28\",\"fuel\":\"diesel\",\"current_price\":1.536,\"yoy_price\":1.194,\"absolute_change\":0.342,\"percentage_change\":28.6432160804},{\"date\":\"2000-09-04\",\"fuel\":\"diesel\",\"current_price\":1.609,\"yoy_price\":1.198,\"absolute_change\":0.411,\"percentage_change\":34.3071786311},{\"date\":\"2000-09-11\",\"fuel\":\"diesel\",\"current_price\":1.629,\"yoy_price\":1.209,\"absolute_change\":0.42,\"percentage_change\":34.7394540943},{\"date\":\"2000-09-18\",\"fuel\":\"diesel\",\"current_price\":1.653,\"yoy_price\":1.226,\"absolute_change\":0.427,\"percentage_change\":34.8287112561},{\"date\":\"2000-09-25\",\"fuel\":\"diesel\",\"current_price\":1.657,\"yoy_price\":1.226,\"absolute_change\":0.431,\"percentage_change\":35.1549755302},{\"date\":\"2000-10-02\",\"fuel\":\"diesel\",\"current_price\":1.625,\"yoy_price\":1.234,\"absolute_change\":0.391,\"percentage_change\":31.6855753647},{\"date\":\"2000-10-09\",\"fuel\":\"diesel\",\"current_price\":1.614,\"yoy_price\":1.228,\"absolute_change\":0.386,\"percentage_change\":31.4332247557},{\"date\":\"2000-10-16\",\"fuel\":\"diesel\",\"current_price\":1.67,\"yoy_price\":1.224,\"absolute_change\":0.446,\"percentage_change\":36.4379084967},{\"date\":\"2000-10-23\",\"fuel\":\"diesel\",\"current_price\":1.648,\"yoy_price\":1.226,\"absolute_change\":0.422,\"percentage_change\":34.4208809135},{\"date\":\"2000-10-30\",\"fuel\":\"diesel\",\"current_price\":1.629,\"yoy_price\":1.229,\"absolute_change\":0.4,\"percentage_change\":32.5467860049},{\"date\":\"2000-11-06\",\"fuel\":\"diesel\",\"current_price\":1.61,\"yoy_price\":1.234,\"absolute_change\":0.376,\"percentage_change\":30.4700162075},{\"date\":\"2000-11-13\",\"fuel\":\"diesel\",\"current_price\":1.603,\"yoy_price\":1.261,\"absolute_change\":0.342,\"percentage_change\":27.121332276},{\"date\":\"2000-11-20\",\"fuel\":\"diesel\",\"current_price\":1.627,\"yoy_price\":1.289,\"absolute_change\":0.338,\"percentage_change\":26.2218774244},{\"date\":\"2000-11-27\",\"fuel\":\"diesel\",\"current_price\":1.645,\"yoy_price\":1.304,\"absolute_change\":0.341,\"percentage_change\":26.1503067485},{\"date\":\"2000-12-04\",\"fuel\":\"diesel\",\"current_price\":1.622,\"yoy_price\":1.294,\"absolute_change\":0.328,\"percentage_change\":25.3477588872},{\"date\":\"2000-12-11\",\"fuel\":\"diesel\",\"current_price\":1.577,\"yoy_price\":1.288,\"absolute_change\":0.289,\"percentage_change\":22.4378881988},{\"date\":\"2000-12-18\",\"fuel\":\"diesel\",\"current_price\":1.545,\"yoy_price\":1.287,\"absolute_change\":0.258,\"percentage_change\":20.0466200466},{\"date\":\"2000-12-25\",\"fuel\":\"diesel\",\"current_price\":1.515,\"yoy_price\":1.298,\"absolute_change\":0.217,\"percentage_change\":16.718027735},{\"date\":\"2001-01-01\",\"fuel\":\"diesel\",\"current_price\":1.522,\"yoy_price\":1.309,\"absolute_change\":0.213,\"percentage_change\":16.2719633308},{\"date\":\"2001-01-08\",\"fuel\":\"diesel\",\"current_price\":1.52,\"yoy_price\":1.307,\"absolute_change\":0.213,\"percentage_change\":16.2968630451},{\"date\":\"2001-01-15\",\"fuel\":\"diesel\",\"current_price\":1.509,\"yoy_price\":1.307,\"absolute_change\":0.202,\"percentage_change\":15.4552410099},{\"date\":\"2001-01-22\",\"fuel\":\"diesel\",\"current_price\":1.528,\"yoy_price\":1.418,\"absolute_change\":0.11,\"percentage_change\":7.7574047955},{\"date\":\"2001-01-29\",\"fuel\":\"diesel\",\"current_price\":1.539,\"yoy_price\":1.439,\"absolute_change\":0.1,\"percentage_change\":6.9492703266},{\"date\":\"2001-02-05\",\"fuel\":\"diesel\",\"current_price\":1.52,\"yoy_price\":1.47,\"absolute_change\":0.05,\"percentage_change\":3.4013605442},{\"date\":\"2001-02-12\",\"fuel\":\"diesel\",\"current_price\":1.518,\"yoy_price\":1.456,\"absolute_change\":0.062,\"percentage_change\":4.2582417582},{\"date\":\"2001-02-19\",\"fuel\":\"diesel\",\"current_price\":1.48,\"yoy_price\":1.456,\"absolute_change\":0.024,\"percentage_change\":1.6483516484},{\"date\":\"2001-02-26\",\"fuel\":\"diesel\",\"current_price\":1.451,\"yoy_price\":1.461,\"absolute_change\":-0.01,\"percentage_change\":-0.6844626968},{\"date\":\"2001-03-05\",\"fuel\":\"diesel\",\"current_price\":1.42,\"yoy_price\":1.49,\"absolute_change\":-0.07,\"percentage_change\":-4.6979865772},{\"date\":\"2001-03-12\",\"fuel\":\"diesel\",\"current_price\":1.406,\"yoy_price\":1.496,\"absolute_change\":-0.09,\"percentage_change\":-6.0160427807},{\"date\":\"2001-03-19\",\"fuel\":\"diesel\",\"current_price\":1.392,\"yoy_price\":1.479,\"absolute_change\":-0.087,\"percentage_change\":-5.8823529412},{\"date\":\"2001-03-26\",\"fuel\":\"diesel\",\"current_price\":1.379,\"yoy_price\":1.451,\"absolute_change\":-0.072,\"percentage_change\":-4.9620951068},{\"date\":\"2001-04-02\",\"fuel\":\"diesel\",\"current_price\":1.391,\"yoy_price\":1.442,\"absolute_change\":-0.051,\"percentage_change\":-3.5367545076},{\"date\":\"2001-04-09\",\"fuel\":\"diesel\",\"current_price\":1.397,\"yoy_price\":1.419,\"absolute_change\":-0.022,\"percentage_change\":-1.5503875969},{\"date\":\"2001-04-16\",\"fuel\":\"diesel\",\"current_price\":1.437,\"yoy_price\":1.398,\"absolute_change\":0.039,\"percentage_change\":2.7896995708},{\"date\":\"2001-04-23\",\"fuel\":\"diesel\",\"current_price\":1.443,\"yoy_price\":1.428,\"absolute_change\":0.015,\"percentage_change\":1.0504201681},{\"date\":\"2001-04-30\",\"fuel\":\"diesel\",\"current_price\":1.442,\"yoy_price\":1.418,\"absolute_change\":0.024,\"percentage_change\":1.6925246827},{\"date\":\"2001-05-07\",\"fuel\":\"diesel\",\"current_price\":1.47,\"yoy_price\":1.402,\"absolute_change\":0.068,\"percentage_change\":4.85021398},{\"date\":\"2001-05-14\",\"fuel\":\"diesel\",\"current_price\":1.491,\"yoy_price\":1.415,\"absolute_change\":0.076,\"percentage_change\":5.371024735},{\"date\":\"2001-05-21\",\"fuel\":\"diesel\",\"current_price\":1.494,\"yoy_price\":1.432,\"absolute_change\":0.062,\"percentage_change\":4.3296089385},{\"date\":\"2001-05-28\",\"fuel\":\"diesel\",\"current_price\":1.529,\"yoy_price\":1.431,\"absolute_change\":0.098,\"percentage_change\":6.8483577918},{\"date\":\"2001-06-04\",\"fuel\":\"diesel\",\"current_price\":1.514,\"yoy_price\":1.419,\"absolute_change\":0.095,\"percentage_change\":6.6948555321},{\"date\":\"2001-06-11\",\"fuel\":\"diesel\",\"current_price\":1.486,\"yoy_price\":1.411,\"absolute_change\":0.075,\"percentage_change\":5.3153791637},{\"date\":\"2001-06-18\",\"fuel\":\"diesel\",\"current_price\":1.48,\"yoy_price\":1.423,\"absolute_change\":0.057,\"percentage_change\":4.0056219255},{\"date\":\"2001-06-25\",\"fuel\":\"diesel\",\"current_price\":1.447,\"yoy_price\":1.432,\"absolute_change\":0.015,\"percentage_change\":1.0474860335},{\"date\":\"2001-07-02\",\"fuel\":\"diesel\",\"current_price\":1.407,\"yoy_price\":1.453,\"absolute_change\":-0.046,\"percentage_change\":-3.1658637302},{\"date\":\"2001-07-09\",\"fuel\":\"diesel\",\"current_price\":1.392,\"yoy_price\":1.449,\"absolute_change\":-0.057,\"percentage_change\":-3.933747412},{\"date\":\"2001-07-16\",\"fuel\":\"diesel\",\"current_price\":1.38,\"yoy_price\":1.435,\"absolute_change\":-0.055,\"percentage_change\":-3.8327526132},{\"date\":\"2001-07-23\",\"fuel\":\"diesel\",\"current_price\":1.348,\"yoy_price\":1.424,\"absolute_change\":-0.076,\"percentage_change\":-5.3370786517},{\"date\":\"2001-07-30\",\"fuel\":\"diesel\",\"current_price\":1.347,\"yoy_price\":1.408,\"absolute_change\":-0.061,\"percentage_change\":-4.3323863636},{\"date\":\"2001-08-06\",\"fuel\":\"diesel\",\"current_price\":1.345,\"yoy_price\":1.41,\"absolute_change\":-0.065,\"percentage_change\":-4.609929078},{\"date\":\"2001-08-13\",\"fuel\":\"diesel\",\"current_price\":1.367,\"yoy_price\":1.447,\"absolute_change\":-0.08,\"percentage_change\":-5.5286800276},{\"date\":\"2001-08-20\",\"fuel\":\"diesel\",\"current_price\":1.394,\"yoy_price\":1.471,\"absolute_change\":-0.077,\"percentage_change\":-5.2345343304},{\"date\":\"2001-08-27\",\"fuel\":\"diesel\",\"current_price\":1.452,\"yoy_price\":1.536,\"absolute_change\":-0.084,\"percentage_change\":-5.46875},{\"date\":\"2001-09-03\",\"fuel\":\"diesel\",\"current_price\":1.488,\"yoy_price\":1.609,\"absolute_change\":-0.121,\"percentage_change\":-7.5201988813},{\"date\":\"2001-09-10\",\"fuel\":\"diesel\",\"current_price\":1.492,\"yoy_price\":1.629,\"absolute_change\":-0.137,\"percentage_change\":-8.4100675261},{\"date\":\"2001-09-17\",\"fuel\":\"diesel\",\"current_price\":1.527,\"yoy_price\":1.653,\"absolute_change\":-0.126,\"percentage_change\":-7.6225045372},{\"date\":\"2001-09-24\",\"fuel\":\"diesel\",\"current_price\":1.473,\"yoy_price\":1.657,\"absolute_change\":-0.184,\"percentage_change\":-11.1044055522},{\"date\":\"2001-10-01\",\"fuel\":\"diesel\",\"current_price\":1.39,\"yoy_price\":1.625,\"absolute_change\":-0.235,\"percentage_change\":-14.4615384615},{\"date\":\"2001-10-08\",\"fuel\":\"diesel\",\"current_price\":1.371,\"yoy_price\":1.614,\"absolute_change\":-0.243,\"percentage_change\":-15.0557620818},{\"date\":\"2001-10-15\",\"fuel\":\"diesel\",\"current_price\":1.353,\"yoy_price\":1.67,\"absolute_change\":-0.317,\"percentage_change\":-18.9820359281},{\"date\":\"2001-10-22\",\"fuel\":\"diesel\",\"current_price\":1.318,\"yoy_price\":1.648,\"absolute_change\":-0.33,\"percentage_change\":-20.0242718447},{\"date\":\"2001-10-29\",\"fuel\":\"diesel\",\"current_price\":1.31,\"yoy_price\":1.629,\"absolute_change\":-0.319,\"percentage_change\":-19.5825659914},{\"date\":\"2001-11-05\",\"fuel\":\"diesel\",\"current_price\":1.291,\"yoy_price\":1.61,\"absolute_change\":-0.319,\"percentage_change\":-19.8136645963},{\"date\":\"2001-11-12\",\"fuel\":\"diesel\",\"current_price\":1.269,\"yoy_price\":1.603,\"absolute_change\":-0.334,\"percentage_change\":-20.8359326263},{\"date\":\"2001-11-19\",\"fuel\":\"diesel\",\"current_price\":1.252,\"yoy_price\":1.627,\"absolute_change\":-0.375,\"percentage_change\":-23.0485556238},{\"date\":\"2001-11-26\",\"fuel\":\"diesel\",\"current_price\":1.223,\"yoy_price\":1.645,\"absolute_change\":-0.422,\"percentage_change\":-25.6534954407},{\"date\":\"2001-12-03\",\"fuel\":\"diesel\",\"current_price\":1.194,\"yoy_price\":1.622,\"absolute_change\":-0.428,\"percentage_change\":-26.3871763255},{\"date\":\"2001-12-10\",\"fuel\":\"diesel\",\"current_price\":1.173,\"yoy_price\":1.577,\"absolute_change\":-0.404,\"percentage_change\":-25.6182625238},{\"date\":\"2001-12-17\",\"fuel\":\"diesel\",\"current_price\":1.143,\"yoy_price\":1.545,\"absolute_change\":-0.402,\"percentage_change\":-26.0194174757},{\"date\":\"2001-12-24\",\"fuel\":\"diesel\",\"current_price\":1.154,\"yoy_price\":1.515,\"absolute_change\":-0.361,\"percentage_change\":-23.8283828383},{\"date\":\"2001-12-31\",\"fuel\":\"diesel\",\"current_price\":1.169,\"yoy_price\":1.522,\"absolute_change\":-0.353,\"percentage_change\":-23.1931668857},{\"date\":\"2002-01-07\",\"fuel\":\"diesel\",\"current_price\":1.168,\"yoy_price\":1.52,\"absolute_change\":-0.352,\"percentage_change\":-23.1578947368},{\"date\":\"2002-01-14\",\"fuel\":\"diesel\",\"current_price\":1.159,\"yoy_price\":1.509,\"absolute_change\":-0.35,\"percentage_change\":-23.1941683234},{\"date\":\"2002-01-21\",\"fuel\":\"diesel\",\"current_price\":1.14,\"yoy_price\":1.528,\"absolute_change\":-0.388,\"percentage_change\":-25.3926701571},{\"date\":\"2002-01-28\",\"fuel\":\"diesel\",\"current_price\":1.144,\"yoy_price\":1.539,\"absolute_change\":-0.395,\"percentage_change\":-25.6660168941},{\"date\":\"2002-02-04\",\"fuel\":\"diesel\",\"current_price\":1.144,\"yoy_price\":1.52,\"absolute_change\":-0.376,\"percentage_change\":-24.7368421053},{\"date\":\"2002-02-11\",\"fuel\":\"diesel\",\"current_price\":1.153,\"yoy_price\":1.518,\"absolute_change\":-0.365,\"percentage_change\":-24.0447957839},{\"date\":\"2002-02-18\",\"fuel\":\"diesel\",\"current_price\":1.156,\"yoy_price\":1.48,\"absolute_change\":-0.324,\"percentage_change\":-21.8918918919},{\"date\":\"2002-02-25\",\"fuel\":\"diesel\",\"current_price\":1.154,\"yoy_price\":1.451,\"absolute_change\":-0.297,\"percentage_change\":-20.4686423156},{\"date\":\"2002-03-04\",\"fuel\":\"diesel\",\"current_price\":1.173,\"yoy_price\":1.42,\"absolute_change\":-0.247,\"percentage_change\":-17.3943661972},{\"date\":\"2002-03-11\",\"fuel\":\"diesel\",\"current_price\":1.216,\"yoy_price\":1.406,\"absolute_change\":-0.19,\"percentage_change\":-13.5135135135},{\"date\":\"2002-03-18\",\"fuel\":\"diesel\",\"current_price\":1.251,\"yoy_price\":1.392,\"absolute_change\":-0.141,\"percentage_change\":-10.1293103448},{\"date\":\"2002-03-25\",\"fuel\":\"diesel\",\"current_price\":1.281,\"yoy_price\":1.379,\"absolute_change\":-0.098,\"percentage_change\":-7.1065989848},{\"date\":\"2002-04-01\",\"fuel\":\"diesel\",\"current_price\":1.295,\"yoy_price\":1.391,\"absolute_change\":-0.096,\"percentage_change\":-6.9015097052},{\"date\":\"2002-04-08\",\"fuel\":\"diesel\",\"current_price\":1.323,\"yoy_price\":1.397,\"absolute_change\":-0.074,\"percentage_change\":-5.2970651396},{\"date\":\"2002-04-15\",\"fuel\":\"diesel\",\"current_price\":1.32,\"yoy_price\":1.437,\"absolute_change\":-0.117,\"percentage_change\":-8.1419624217},{\"date\":\"2002-04-22\",\"fuel\":\"diesel\",\"current_price\":1.304,\"yoy_price\":1.443,\"absolute_change\":-0.139,\"percentage_change\":-9.6327096327},{\"date\":\"2002-04-29\",\"fuel\":\"diesel\",\"current_price\":1.302,\"yoy_price\":1.442,\"absolute_change\":-0.14,\"percentage_change\":-9.7087378641},{\"date\":\"2002-05-06\",\"fuel\":\"diesel\",\"current_price\":1.305,\"yoy_price\":1.47,\"absolute_change\":-0.165,\"percentage_change\":-11.2244897959},{\"date\":\"2002-05-13\",\"fuel\":\"diesel\",\"current_price\":1.299,\"yoy_price\":1.491,\"absolute_change\":-0.192,\"percentage_change\":-12.8772635815},{\"date\":\"2002-05-20\",\"fuel\":\"diesel\",\"current_price\":1.309,\"yoy_price\":1.494,\"absolute_change\":-0.185,\"percentage_change\":-12.3828647925},{\"date\":\"2002-05-27\",\"fuel\":\"diesel\",\"current_price\":1.308,\"yoy_price\":1.529,\"absolute_change\":-0.221,\"percentage_change\":-14.4538914323},{\"date\":\"2002-06-03\",\"fuel\":\"diesel\",\"current_price\":1.3,\"yoy_price\":1.514,\"absolute_change\":-0.214,\"percentage_change\":-14.1347424042},{\"date\":\"2002-06-10\",\"fuel\":\"diesel\",\"current_price\":1.286,\"yoy_price\":1.486,\"absolute_change\":-0.2,\"percentage_change\":-13.4589502019},{\"date\":\"2002-06-17\",\"fuel\":\"diesel\",\"current_price\":1.275,\"yoy_price\":1.48,\"absolute_change\":-0.205,\"percentage_change\":-13.8513513514},{\"date\":\"2002-06-24\",\"fuel\":\"diesel\",\"current_price\":1.281,\"yoy_price\":1.447,\"absolute_change\":-0.166,\"percentage_change\":-11.4720110574},{\"date\":\"2002-07-01\",\"fuel\":\"diesel\",\"current_price\":1.289,\"yoy_price\":1.407,\"absolute_change\":-0.118,\"percentage_change\":-8.3866382374},{\"date\":\"2002-07-08\",\"fuel\":\"diesel\",\"current_price\":1.294,\"yoy_price\":1.392,\"absolute_change\":-0.098,\"percentage_change\":-7.0402298851},{\"date\":\"2002-07-15\",\"fuel\":\"diesel\",\"current_price\":1.3,\"yoy_price\":1.38,\"absolute_change\":-0.08,\"percentage_change\":-5.7971014493},{\"date\":\"2002-07-22\",\"fuel\":\"diesel\",\"current_price\":1.311,\"yoy_price\":1.348,\"absolute_change\":-0.037,\"percentage_change\":-2.7448071217},{\"date\":\"2002-07-29\",\"fuel\":\"diesel\",\"current_price\":1.303,\"yoy_price\":1.347,\"absolute_change\":-0.044,\"percentage_change\":-3.2665181886},{\"date\":\"2002-08-05\",\"fuel\":\"diesel\",\"current_price\":1.304,\"yoy_price\":1.345,\"absolute_change\":-0.041,\"percentage_change\":-3.0483271375},{\"date\":\"2002-08-12\",\"fuel\":\"diesel\",\"current_price\":1.303,\"yoy_price\":1.367,\"absolute_change\":-0.064,\"percentage_change\":-4.6817849305},{\"date\":\"2002-08-19\",\"fuel\":\"diesel\",\"current_price\":1.333,\"yoy_price\":1.394,\"absolute_change\":-0.061,\"percentage_change\":-4.3758967001},{\"date\":\"2002-08-26\",\"fuel\":\"diesel\",\"current_price\":1.37,\"yoy_price\":1.452,\"absolute_change\":-0.082,\"percentage_change\":-5.6473829201},{\"date\":\"2002-09-02\",\"fuel\":\"diesel\",\"current_price\":1.388,\"yoy_price\":1.488,\"absolute_change\":-0.1,\"percentage_change\":-6.7204301075},{\"date\":\"2002-09-09\",\"fuel\":\"diesel\",\"current_price\":1.396,\"yoy_price\":1.492,\"absolute_change\":-0.096,\"percentage_change\":-6.4343163539},{\"date\":\"2002-09-16\",\"fuel\":\"diesel\",\"current_price\":1.414,\"yoy_price\":1.527,\"absolute_change\":-0.113,\"percentage_change\":-7.4001309758},{\"date\":\"2002-09-23\",\"fuel\":\"diesel\",\"current_price\":1.417,\"yoy_price\":1.473,\"absolute_change\":-0.056,\"percentage_change\":-3.8017651052},{\"date\":\"2002-09-30\",\"fuel\":\"diesel\",\"current_price\":1.438,\"yoy_price\":1.39,\"absolute_change\":0.048,\"percentage_change\":3.4532374101},{\"date\":\"2002-10-07\",\"fuel\":\"diesel\",\"current_price\":1.46,\"yoy_price\":1.371,\"absolute_change\":0.089,\"percentage_change\":6.4916119621},{\"date\":\"2002-10-14\",\"fuel\":\"diesel\",\"current_price\":1.461,\"yoy_price\":1.353,\"absolute_change\":0.108,\"percentage_change\":7.9822616408},{\"date\":\"2002-10-21\",\"fuel\":\"diesel\",\"current_price\":1.469,\"yoy_price\":1.318,\"absolute_change\":0.151,\"percentage_change\":11.4567526555},{\"date\":\"2002-10-28\",\"fuel\":\"diesel\",\"current_price\":1.456,\"yoy_price\":1.31,\"absolute_change\":0.146,\"percentage_change\":11.1450381679},{\"date\":\"2002-11-04\",\"fuel\":\"diesel\",\"current_price\":1.442,\"yoy_price\":1.291,\"absolute_change\":0.151,\"percentage_change\":11.6963594113},{\"date\":\"2002-11-11\",\"fuel\":\"diesel\",\"current_price\":1.427,\"yoy_price\":1.269,\"absolute_change\":0.158,\"percentage_change\":12.450748621},{\"date\":\"2002-11-18\",\"fuel\":\"diesel\",\"current_price\":1.405,\"yoy_price\":1.252,\"absolute_change\":0.153,\"percentage_change\":12.2204472843},{\"date\":\"2002-11-25\",\"fuel\":\"diesel\",\"current_price\":1.405,\"yoy_price\":1.223,\"absolute_change\":0.182,\"percentage_change\":14.8814390842},{\"date\":\"2002-12-02\",\"fuel\":\"diesel\",\"current_price\":1.407,\"yoy_price\":1.194,\"absolute_change\":0.213,\"percentage_change\":17.8391959799},{\"date\":\"2002-12-09\",\"fuel\":\"diesel\",\"current_price\":1.405,\"yoy_price\":1.173,\"absolute_change\":0.232,\"percentage_change\":19.7783461211},{\"date\":\"2002-12-16\",\"fuel\":\"diesel\",\"current_price\":1.401,\"yoy_price\":1.143,\"absolute_change\":0.258,\"percentage_change\":22.5721784777},{\"date\":\"2002-12-23\",\"fuel\":\"diesel\",\"current_price\":1.44,\"yoy_price\":1.154,\"absolute_change\":0.286,\"percentage_change\":24.7833622184},{\"date\":\"2002-12-30\",\"fuel\":\"diesel\",\"current_price\":1.491,\"yoy_price\":1.169,\"absolute_change\":0.322,\"percentage_change\":27.5449101796},{\"date\":\"2003-01-06\",\"fuel\":\"diesel\",\"current_price\":1.501,\"yoy_price\":1.168,\"absolute_change\":0.333,\"percentage_change\":28.5102739726},{\"date\":\"2003-01-13\",\"fuel\":\"diesel\",\"current_price\":1.478,\"yoy_price\":1.159,\"absolute_change\":0.319,\"percentage_change\":27.5237273512},{\"date\":\"2003-01-20\",\"fuel\":\"diesel\",\"current_price\":1.48,\"yoy_price\":1.14,\"absolute_change\":0.34,\"percentage_change\":29.8245614035},{\"date\":\"2003-01-27\",\"fuel\":\"diesel\",\"current_price\":1.492,\"yoy_price\":1.144,\"absolute_change\":0.348,\"percentage_change\":30.4195804196},{\"date\":\"2003-02-03\",\"fuel\":\"diesel\",\"current_price\":1.542,\"yoy_price\":1.144,\"absolute_change\":0.398,\"percentage_change\":34.7902097902},{\"date\":\"2003-02-10\",\"fuel\":\"diesel\",\"current_price\":1.662,\"yoy_price\":1.153,\"absolute_change\":0.509,\"percentage_change\":44.1457068517},{\"date\":\"2003-02-17\",\"fuel\":\"diesel\",\"current_price\":1.704,\"yoy_price\":1.156,\"absolute_change\":0.548,\"percentage_change\":47.4048442907},{\"date\":\"2003-02-24\",\"fuel\":\"diesel\",\"current_price\":1.709,\"yoy_price\":1.154,\"absolute_change\":0.555,\"percentage_change\":48.0935875217},{\"date\":\"2003-03-03\",\"fuel\":\"diesel\",\"current_price\":1.753,\"yoy_price\":1.173,\"absolute_change\":0.58,\"percentage_change\":49.4458653026},{\"date\":\"2003-03-10\",\"fuel\":\"diesel\",\"current_price\":1.771,\"yoy_price\":1.216,\"absolute_change\":0.555,\"percentage_change\":45.6414473684},{\"date\":\"2003-03-17\",\"fuel\":\"diesel\",\"current_price\":1.752,\"yoy_price\":1.251,\"absolute_change\":0.501,\"percentage_change\":40.0479616307},{\"date\":\"2003-03-24\",\"fuel\":\"diesel\",\"current_price\":1.662,\"yoy_price\":1.281,\"absolute_change\":0.381,\"percentage_change\":29.7423887588},{\"date\":\"2003-03-31\",\"fuel\":\"diesel\",\"current_price\":1.602,\"yoy_price\":1.295,\"absolute_change\":0.307,\"percentage_change\":23.7065637066},{\"date\":\"2003-04-07\",\"fuel\":\"diesel\",\"current_price\":1.554,\"yoy_price\":1.323,\"absolute_change\":0.231,\"percentage_change\":17.4603174603},{\"date\":\"2003-04-14\",\"fuel\":\"diesel\",\"current_price\":1.539,\"yoy_price\":1.32,\"absolute_change\":0.219,\"percentage_change\":16.5909090909},{\"date\":\"2003-04-21\",\"fuel\":\"diesel\",\"current_price\":1.529,\"yoy_price\":1.304,\"absolute_change\":0.225,\"percentage_change\":17.254601227},{\"date\":\"2003-04-28\",\"fuel\":\"diesel\",\"current_price\":1.508,\"yoy_price\":1.302,\"absolute_change\":0.206,\"percentage_change\":15.821812596},{\"date\":\"2003-05-05\",\"fuel\":\"diesel\",\"current_price\":1.484,\"yoy_price\":1.305,\"absolute_change\":0.179,\"percentage_change\":13.7164750958},{\"date\":\"2003-05-12\",\"fuel\":\"diesel\",\"current_price\":1.444,\"yoy_price\":1.299,\"absolute_change\":0.145,\"percentage_change\":11.1624326405},{\"date\":\"2003-05-19\",\"fuel\":\"diesel\",\"current_price\":1.443,\"yoy_price\":1.309,\"absolute_change\":0.134,\"percentage_change\":10.2368220015},{\"date\":\"2003-05-26\",\"fuel\":\"diesel\",\"current_price\":1.434,\"yoy_price\":1.308,\"absolute_change\":0.126,\"percentage_change\":9.6330275229},{\"date\":\"2003-06-02\",\"fuel\":\"diesel\",\"current_price\":1.423,\"yoy_price\":1.3,\"absolute_change\":0.123,\"percentage_change\":9.4615384615},{\"date\":\"2003-06-09\",\"fuel\":\"diesel\",\"current_price\":1.422,\"yoy_price\":1.286,\"absolute_change\":0.136,\"percentage_change\":10.5754276827},{\"date\":\"2003-06-16\",\"fuel\":\"diesel\",\"current_price\":1.432,\"yoy_price\":1.275,\"absolute_change\":0.157,\"percentage_change\":12.3137254902},{\"date\":\"2003-06-23\",\"fuel\":\"diesel\",\"current_price\":1.423,\"yoy_price\":1.281,\"absolute_change\":0.142,\"percentage_change\":11.0850897736},{\"date\":\"2003-06-30\",\"fuel\":\"diesel\",\"current_price\":1.42,\"yoy_price\":1.289,\"absolute_change\":0.131,\"percentage_change\":10.1629169899},{\"date\":\"2003-07-07\",\"fuel\":\"diesel\",\"current_price\":1.428,\"yoy_price\":1.294,\"absolute_change\":0.134,\"percentage_change\":10.3554868624},{\"date\":\"2003-07-14\",\"fuel\":\"diesel\",\"current_price\":1.435,\"yoy_price\":1.3,\"absolute_change\":0.135,\"percentage_change\":10.3846153846},{\"date\":\"2003-07-21\",\"fuel\":\"diesel\",\"current_price\":1.439,\"yoy_price\":1.311,\"absolute_change\":0.128,\"percentage_change\":9.763539283},{\"date\":\"2003-07-28\",\"fuel\":\"diesel\",\"current_price\":1.438,\"yoy_price\":1.303,\"absolute_change\":0.135,\"percentage_change\":10.3607060629},{\"date\":\"2003-08-04\",\"fuel\":\"diesel\",\"current_price\":1.453,\"yoy_price\":1.304,\"absolute_change\":0.149,\"percentage_change\":11.4263803681},{\"date\":\"2003-08-11\",\"fuel\":\"diesel\",\"current_price\":1.492,\"yoy_price\":1.303,\"absolute_change\":0.189,\"percentage_change\":14.5049884881},{\"date\":\"2003-08-18\",\"fuel\":\"diesel\",\"current_price\":1.498,\"yoy_price\":1.333,\"absolute_change\":0.165,\"percentage_change\":12.3780945236},{\"date\":\"2003-08-25\",\"fuel\":\"diesel\",\"current_price\":1.503,\"yoy_price\":1.37,\"absolute_change\":0.133,\"percentage_change\":9.7080291971},{\"date\":\"2003-09-01\",\"fuel\":\"diesel\",\"current_price\":1.501,\"yoy_price\":1.388,\"absolute_change\":0.113,\"percentage_change\":8.1412103746},{\"date\":\"2003-09-08\",\"fuel\":\"diesel\",\"current_price\":1.488,\"yoy_price\":1.396,\"absolute_change\":0.092,\"percentage_change\":6.5902578797},{\"date\":\"2003-09-15\",\"fuel\":\"diesel\",\"current_price\":1.471,\"yoy_price\":1.414,\"absolute_change\":0.057,\"percentage_change\":4.0311173975},{\"date\":\"2003-09-22\",\"fuel\":\"diesel\",\"current_price\":1.444,\"yoy_price\":1.417,\"absolute_change\":0.027,\"percentage_change\":1.9054340155},{\"date\":\"2003-09-29\",\"fuel\":\"diesel\",\"current_price\":1.429,\"yoy_price\":1.438,\"absolute_change\":-0.009,\"percentage_change\":-0.6258692629},{\"date\":\"2003-10-06\",\"fuel\":\"diesel\",\"current_price\":1.445,\"yoy_price\":1.46,\"absolute_change\":-0.015,\"percentage_change\":-1.0273972603},{\"date\":\"2003-10-13\",\"fuel\":\"diesel\",\"current_price\":1.483,\"yoy_price\":1.461,\"absolute_change\":0.022,\"percentage_change\":1.5058179329},{\"date\":\"2003-10-20\",\"fuel\":\"diesel\",\"current_price\":1.502,\"yoy_price\":1.469,\"absolute_change\":0.033,\"percentage_change\":2.2464261402},{\"date\":\"2003-10-27\",\"fuel\":\"diesel\",\"current_price\":1.495,\"yoy_price\":1.456,\"absolute_change\":0.039,\"percentage_change\":2.6785714286},{\"date\":\"2003-11-03\",\"fuel\":\"diesel\",\"current_price\":1.481,\"yoy_price\":1.442,\"absolute_change\":0.039,\"percentage_change\":2.7045769764},{\"date\":\"2003-11-10\",\"fuel\":\"diesel\",\"current_price\":1.476,\"yoy_price\":1.427,\"absolute_change\":0.049,\"percentage_change\":3.4337771549},{\"date\":\"2003-11-17\",\"fuel\":\"diesel\",\"current_price\":1.481,\"yoy_price\":1.405,\"absolute_change\":0.076,\"percentage_change\":5.409252669},{\"date\":\"2003-11-24\",\"fuel\":\"diesel\",\"current_price\":1.491,\"yoy_price\":1.405,\"absolute_change\":0.086,\"percentage_change\":6.1209964413},{\"date\":\"2003-12-01\",\"fuel\":\"diesel\",\"current_price\":1.476,\"yoy_price\":1.407,\"absolute_change\":0.069,\"percentage_change\":4.9040511727},{\"date\":\"2003-12-08\",\"fuel\":\"diesel\",\"current_price\":1.481,\"yoy_price\":1.405,\"absolute_change\":0.076,\"percentage_change\":5.409252669},{\"date\":\"2003-12-15\",\"fuel\":\"diesel\",\"current_price\":1.486,\"yoy_price\":1.401,\"absolute_change\":0.085,\"percentage_change\":6.0670949322},{\"date\":\"2003-12-22\",\"fuel\":\"diesel\",\"current_price\":1.504,\"yoy_price\":1.44,\"absolute_change\":0.064,\"percentage_change\":4.4444444444},{\"date\":\"2003-12-29\",\"fuel\":\"diesel\",\"current_price\":1.502,\"yoy_price\":1.491,\"absolute_change\":0.011,\"percentage_change\":0.7377598927},{\"date\":\"2004-01-05\",\"fuel\":\"diesel\",\"current_price\":1.503,\"yoy_price\":1.501,\"absolute_change\":0.002,\"percentage_change\":0.1332445037},{\"date\":\"2004-01-12\",\"fuel\":\"diesel\",\"current_price\":1.551,\"yoy_price\":1.478,\"absolute_change\":0.073,\"percentage_change\":4.9391069012},{\"date\":\"2004-01-19\",\"fuel\":\"diesel\",\"current_price\":1.559,\"yoy_price\":1.48,\"absolute_change\":0.079,\"percentage_change\":5.3378378378},{\"date\":\"2004-01-26\",\"fuel\":\"diesel\",\"current_price\":1.591,\"yoy_price\":1.492,\"absolute_change\":0.099,\"percentage_change\":6.6353887399},{\"date\":\"2004-02-02\",\"fuel\":\"diesel\",\"current_price\":1.581,\"yoy_price\":1.542,\"absolute_change\":0.039,\"percentage_change\":2.5291828794},{\"date\":\"2004-02-09\",\"fuel\":\"diesel\",\"current_price\":1.568,\"yoy_price\":1.662,\"absolute_change\":-0.094,\"percentage_change\":-5.6558363418},{\"date\":\"2004-02-16\",\"fuel\":\"diesel\",\"current_price\":1.584,\"yoy_price\":1.704,\"absolute_change\":-0.12,\"percentage_change\":-7.0422535211},{\"date\":\"2004-02-23\",\"fuel\":\"diesel\",\"current_price\":1.595,\"yoy_price\":1.709,\"absolute_change\":-0.114,\"percentage_change\":-6.6705675834},{\"date\":\"2004-03-01\",\"fuel\":\"diesel\",\"current_price\":1.619,\"yoy_price\":1.753,\"absolute_change\":-0.134,\"percentage_change\":-7.6440387906},{\"date\":\"2004-03-08\",\"fuel\":\"diesel\",\"current_price\":1.628,\"yoy_price\":1.771,\"absolute_change\":-0.143,\"percentage_change\":-8.0745341615},{\"date\":\"2004-03-15\",\"fuel\":\"diesel\",\"current_price\":1.617,\"yoy_price\":1.752,\"absolute_change\":-0.135,\"percentage_change\":-7.7054794521},{\"date\":\"2004-03-22\",\"fuel\":\"diesel\",\"current_price\":1.641,\"yoy_price\":1.662,\"absolute_change\":-0.021,\"percentage_change\":-1.2635379061},{\"date\":\"2004-03-29\",\"fuel\":\"diesel\",\"current_price\":1.642,\"yoy_price\":1.602,\"absolute_change\":0.04,\"percentage_change\":2.4968789014},{\"date\":\"2004-04-05\",\"fuel\":\"diesel\",\"current_price\":1.648,\"yoy_price\":1.554,\"absolute_change\":0.094,\"percentage_change\":6.0489060489},{\"date\":\"2004-04-12\",\"fuel\":\"diesel\",\"current_price\":1.679,\"yoy_price\":1.539,\"absolute_change\":0.14,\"percentage_change\":9.0968161144},{\"date\":\"2004-04-19\",\"fuel\":\"diesel\",\"current_price\":1.724,\"yoy_price\":1.529,\"absolute_change\":0.195,\"percentage_change\":12.7534336167},{\"date\":\"2004-04-26\",\"fuel\":\"diesel\",\"current_price\":1.718,\"yoy_price\":1.508,\"absolute_change\":0.21,\"percentage_change\":13.925729443},{\"date\":\"2004-05-03\",\"fuel\":\"diesel\",\"current_price\":1.717,\"yoy_price\":1.484,\"absolute_change\":0.233,\"percentage_change\":15.7008086253},{\"date\":\"2004-05-10\",\"fuel\":\"diesel\",\"current_price\":1.745,\"yoy_price\":1.444,\"absolute_change\":0.301,\"percentage_change\":20.8448753463},{\"date\":\"2004-05-17\",\"fuel\":\"diesel\",\"current_price\":1.763,\"yoy_price\":1.443,\"absolute_change\":0.32,\"percentage_change\":22.176022176},{\"date\":\"2004-05-24\",\"fuel\":\"diesel\",\"current_price\":1.761,\"yoy_price\":1.434,\"absolute_change\":0.327,\"percentage_change\":22.8033472803},{\"date\":\"2004-05-31\",\"fuel\":\"diesel\",\"current_price\":1.746,\"yoy_price\":1.423,\"absolute_change\":0.323,\"percentage_change\":22.6985242446},{\"date\":\"2004-06-07\",\"fuel\":\"diesel\",\"current_price\":1.734,\"yoy_price\":1.422,\"absolute_change\":0.312,\"percentage_change\":21.94092827},{\"date\":\"2004-06-14\",\"fuel\":\"diesel\",\"current_price\":1.711,\"yoy_price\":1.432,\"absolute_change\":0.279,\"percentage_change\":19.4832402235},{\"date\":\"2004-06-21\",\"fuel\":\"diesel\",\"current_price\":1.7,\"yoy_price\":1.423,\"absolute_change\":0.277,\"percentage_change\":19.4659170766},{\"date\":\"2004-06-28\",\"fuel\":\"diesel\",\"current_price\":1.7,\"yoy_price\":1.42,\"absolute_change\":0.28,\"percentage_change\":19.7183098592},{\"date\":\"2004-07-05\",\"fuel\":\"diesel\",\"current_price\":1.716,\"yoy_price\":1.428,\"absolute_change\":0.288,\"percentage_change\":20.1680672269},{\"date\":\"2004-07-12\",\"fuel\":\"diesel\",\"current_price\":1.74,\"yoy_price\":1.435,\"absolute_change\":0.305,\"percentage_change\":21.2543554007},{\"date\":\"2004-07-19\",\"fuel\":\"diesel\",\"current_price\":1.744,\"yoy_price\":1.439,\"absolute_change\":0.305,\"percentage_change\":21.1952744962},{\"date\":\"2004-07-26\",\"fuel\":\"diesel\",\"current_price\":1.754,\"yoy_price\":1.438,\"absolute_change\":0.316,\"percentage_change\":21.9749652295},{\"date\":\"2004-08-02\",\"fuel\":\"diesel\",\"current_price\":1.78,\"yoy_price\":1.453,\"absolute_change\":0.327,\"percentage_change\":22.5051617343},{\"date\":\"2004-08-09\",\"fuel\":\"diesel\",\"current_price\":1.814,\"yoy_price\":1.492,\"absolute_change\":0.322,\"percentage_change\":21.581769437},{\"date\":\"2004-08-16\",\"fuel\":\"diesel\",\"current_price\":1.825,\"yoy_price\":1.498,\"absolute_change\":0.327,\"percentage_change\":21.829105474},{\"date\":\"2004-08-23\",\"fuel\":\"diesel\",\"current_price\":1.874,\"yoy_price\":1.503,\"absolute_change\":0.371,\"percentage_change\":24.6839654025},{\"date\":\"2004-08-30\",\"fuel\":\"diesel\",\"current_price\":1.871,\"yoy_price\":1.501,\"absolute_change\":0.37,\"percentage_change\":24.6502331779},{\"date\":\"2004-09-06\",\"fuel\":\"diesel\",\"current_price\":1.869,\"yoy_price\":1.488,\"absolute_change\":0.381,\"percentage_change\":25.6048387097},{\"date\":\"2004-09-13\",\"fuel\":\"diesel\",\"current_price\":1.874,\"yoy_price\":1.471,\"absolute_change\":0.403,\"percentage_change\":27.3963290279},{\"date\":\"2004-09-20\",\"fuel\":\"diesel\",\"current_price\":1.912,\"yoy_price\":1.444,\"absolute_change\":0.468,\"percentage_change\":32.4099722992},{\"date\":\"2004-09-27\",\"fuel\":\"diesel\",\"current_price\":2.012,\"yoy_price\":1.429,\"absolute_change\":0.583,\"percentage_change\":40.7977606718},{\"date\":\"2004-10-04\",\"fuel\":\"diesel\",\"current_price\":2.053,\"yoy_price\":1.445,\"absolute_change\":0.608,\"percentage_change\":42.0761245675},{\"date\":\"2004-10-11\",\"fuel\":\"diesel\",\"current_price\":2.092,\"yoy_price\":1.483,\"absolute_change\":0.609,\"percentage_change\":41.0654079568},{\"date\":\"2004-10-18\",\"fuel\":\"diesel\",\"current_price\":2.18,\"yoy_price\":1.502,\"absolute_change\":0.678,\"percentage_change\":45.1398135819},{\"date\":\"2004-10-25\",\"fuel\":\"diesel\",\"current_price\":2.212,\"yoy_price\":1.495,\"absolute_change\":0.717,\"percentage_change\":47.9598662207},{\"date\":\"2004-11-01\",\"fuel\":\"diesel\",\"current_price\":2.206,\"yoy_price\":1.481,\"absolute_change\":0.725,\"percentage_change\":48.9534098582},{\"date\":\"2004-11-08\",\"fuel\":\"diesel\",\"current_price\":2.163,\"yoy_price\":1.476,\"absolute_change\":0.687,\"percentage_change\":46.5447154472},{\"date\":\"2004-11-15\",\"fuel\":\"diesel\",\"current_price\":2.132,\"yoy_price\":1.481,\"absolute_change\":0.651,\"percentage_change\":43.9567859554},{\"date\":\"2004-11-22\",\"fuel\":\"diesel\",\"current_price\":2.116,\"yoy_price\":1.491,\"absolute_change\":0.625,\"percentage_change\":41.918175721},{\"date\":\"2004-11-29\",\"fuel\":\"diesel\",\"current_price\":2.116,\"yoy_price\":1.476,\"absolute_change\":0.64,\"percentage_change\":43.3604336043},{\"date\":\"2004-12-06\",\"fuel\":\"diesel\",\"current_price\":2.069,\"yoy_price\":1.481,\"absolute_change\":0.588,\"percentage_change\":39.7029034436},{\"date\":\"2004-12-13\",\"fuel\":\"diesel\",\"current_price\":1.997,\"yoy_price\":1.486,\"absolute_change\":0.511,\"percentage_change\":34.3876177658},{\"date\":\"2004-12-20\",\"fuel\":\"diesel\",\"current_price\":1.984,\"yoy_price\":1.504,\"absolute_change\":0.48,\"percentage_change\":31.914893617},{\"date\":\"2004-12-27\",\"fuel\":\"diesel\",\"current_price\":1.987,\"yoy_price\":1.502,\"absolute_change\":0.485,\"percentage_change\":32.2902796272},{\"date\":\"2005-01-03\",\"fuel\":\"diesel\",\"current_price\":1.957,\"yoy_price\":1.503,\"absolute_change\":0.454,\"percentage_change\":30.2062541583},{\"date\":\"2005-01-10\",\"fuel\":\"diesel\",\"current_price\":1.934,\"yoy_price\":1.551,\"absolute_change\":0.383,\"percentage_change\":24.6937459703},{\"date\":\"2005-01-17\",\"fuel\":\"diesel\",\"current_price\":1.952,\"yoy_price\":1.559,\"absolute_change\":0.393,\"percentage_change\":25.208466966},{\"date\":\"2005-01-24\",\"fuel\":\"diesel\",\"current_price\":1.959,\"yoy_price\":1.591,\"absolute_change\":0.368,\"percentage_change\":23.130106851},{\"date\":\"2005-01-31\",\"fuel\":\"diesel\",\"current_price\":1.992,\"yoy_price\":1.581,\"absolute_change\":0.411,\"percentage_change\":25.9962049336},{\"date\":\"2005-02-07\",\"fuel\":\"diesel\",\"current_price\":1.983,\"yoy_price\":1.568,\"absolute_change\":0.415,\"percentage_change\":26.4668367347},{\"date\":\"2005-02-14\",\"fuel\":\"diesel\",\"current_price\":1.986,\"yoy_price\":1.584,\"absolute_change\":0.402,\"percentage_change\":25.3787878788},{\"date\":\"2005-02-21\",\"fuel\":\"diesel\",\"current_price\":2.02,\"yoy_price\":1.595,\"absolute_change\":0.425,\"percentage_change\":26.6457680251},{\"date\":\"2005-02-28\",\"fuel\":\"diesel\",\"current_price\":2.118,\"yoy_price\":1.619,\"absolute_change\":0.499,\"percentage_change\":30.8214947498},{\"date\":\"2005-03-07\",\"fuel\":\"diesel\",\"current_price\":2.168,\"yoy_price\":1.628,\"absolute_change\":0.54,\"percentage_change\":33.1695331695},{\"date\":\"2005-03-14\",\"fuel\":\"diesel\",\"current_price\":2.194,\"yoy_price\":1.617,\"absolute_change\":0.577,\"percentage_change\":35.6833642548},{\"date\":\"2005-03-21\",\"fuel\":\"diesel\",\"current_price\":2.244,\"yoy_price\":1.641,\"absolute_change\":0.603,\"percentage_change\":36.7458866545},{\"date\":\"2005-03-28\",\"fuel\":\"diesel\",\"current_price\":2.249,\"yoy_price\":1.642,\"absolute_change\":0.607,\"percentage_change\":36.9671132765},{\"date\":\"2005-04-04\",\"fuel\":\"diesel\",\"current_price\":2.303,\"yoy_price\":1.648,\"absolute_change\":0.655,\"percentage_change\":39.7451456311},{\"date\":\"2005-04-11\",\"fuel\":\"diesel\",\"current_price\":2.316,\"yoy_price\":1.679,\"absolute_change\":0.637,\"percentage_change\":37.9392495533},{\"date\":\"2005-04-18\",\"fuel\":\"diesel\",\"current_price\":2.259,\"yoy_price\":1.724,\"absolute_change\":0.535,\"percentage_change\":31.0324825986},{\"date\":\"2005-04-25\",\"fuel\":\"diesel\",\"current_price\":2.289,\"yoy_price\":1.718,\"absolute_change\":0.571,\"percentage_change\":33.2363213038},{\"date\":\"2005-05-02\",\"fuel\":\"diesel\",\"current_price\":2.262,\"yoy_price\":1.717,\"absolute_change\":0.545,\"percentage_change\":31.7414094351},{\"date\":\"2005-05-09\",\"fuel\":\"diesel\",\"current_price\":2.227,\"yoy_price\":1.745,\"absolute_change\":0.482,\"percentage_change\":27.6217765043},{\"date\":\"2005-05-16\",\"fuel\":\"diesel\",\"current_price\":2.189,\"yoy_price\":1.763,\"absolute_change\":0.426,\"percentage_change\":24.1633579126},{\"date\":\"2005-05-23\",\"fuel\":\"diesel\",\"current_price\":2.156,\"yoy_price\":1.761,\"absolute_change\":0.395,\"percentage_change\":22.4304372516},{\"date\":\"2005-05-30\",\"fuel\":\"diesel\",\"current_price\":2.16,\"yoy_price\":1.746,\"absolute_change\":0.414,\"percentage_change\":23.7113402062},{\"date\":\"2005-06-06\",\"fuel\":\"diesel\",\"current_price\":2.234,\"yoy_price\":1.734,\"absolute_change\":0.5,\"percentage_change\":28.8350634371},{\"date\":\"2005-06-13\",\"fuel\":\"diesel\",\"current_price\":2.276,\"yoy_price\":1.711,\"absolute_change\":0.565,\"percentage_change\":33.0216247808},{\"date\":\"2005-06-20\",\"fuel\":\"diesel\",\"current_price\":2.313,\"yoy_price\":1.7,\"absolute_change\":0.613,\"percentage_change\":36.0588235294},{\"date\":\"2005-06-27\",\"fuel\":\"diesel\",\"current_price\":2.336,\"yoy_price\":1.7,\"absolute_change\":0.636,\"percentage_change\":37.4117647059},{\"date\":\"2005-07-04\",\"fuel\":\"diesel\",\"current_price\":2.348,\"yoy_price\":1.716,\"absolute_change\":0.632,\"percentage_change\":36.8298368298},{\"date\":\"2005-07-11\",\"fuel\":\"diesel\",\"current_price\":2.408,\"yoy_price\":1.74,\"absolute_change\":0.668,\"percentage_change\":38.3908045977},{\"date\":\"2005-07-18\",\"fuel\":\"diesel\",\"current_price\":2.392,\"yoy_price\":1.744,\"absolute_change\":0.648,\"percentage_change\":37.1559633028},{\"date\":\"2005-07-25\",\"fuel\":\"diesel\",\"current_price\":2.342,\"yoy_price\":1.754,\"absolute_change\":0.588,\"percentage_change\":33.5233751425},{\"date\":\"2005-08-01\",\"fuel\":\"diesel\",\"current_price\":2.348,\"yoy_price\":1.78,\"absolute_change\":0.568,\"percentage_change\":31.9101123596},{\"date\":\"2005-08-08\",\"fuel\":\"diesel\",\"current_price\":2.407,\"yoy_price\":1.814,\"absolute_change\":0.593,\"percentage_change\":32.6901874311},{\"date\":\"2005-08-15\",\"fuel\":\"diesel\",\"current_price\":2.567,\"yoy_price\":1.825,\"absolute_change\":0.742,\"percentage_change\":40.6575342466},{\"date\":\"2005-08-22\",\"fuel\":\"diesel\",\"current_price\":2.588,\"yoy_price\":1.874,\"absolute_change\":0.714,\"percentage_change\":38.1003201708},{\"date\":\"2005-08-29\",\"fuel\":\"diesel\",\"current_price\":2.59,\"yoy_price\":1.871,\"absolute_change\":0.719,\"percentage_change\":38.4286477819},{\"date\":\"2005-09-05\",\"fuel\":\"diesel\",\"current_price\":2.898,\"yoy_price\":1.869,\"absolute_change\":1.029,\"percentage_change\":55.0561797753},{\"date\":\"2005-09-12\",\"fuel\":\"diesel\",\"current_price\":2.847,\"yoy_price\":1.874,\"absolute_change\":0.973,\"percentage_change\":51.9210245464},{\"date\":\"2005-09-19\",\"fuel\":\"diesel\",\"current_price\":2.732,\"yoy_price\":1.912,\"absolute_change\":0.82,\"percentage_change\":42.8870292887},{\"date\":\"2005-09-26\",\"fuel\":\"diesel\",\"current_price\":2.798,\"yoy_price\":2.012,\"absolute_change\":0.786,\"percentage_change\":39.0656063618},{\"date\":\"2005-10-03\",\"fuel\":\"diesel\",\"current_price\":3.144,\"yoy_price\":2.053,\"absolute_change\":1.091,\"percentage_change\":53.1417437896},{\"date\":\"2005-10-10\",\"fuel\":\"diesel\",\"current_price\":3.15,\"yoy_price\":2.092,\"absolute_change\":1.058,\"percentage_change\":50.5736137667},{\"date\":\"2005-10-17\",\"fuel\":\"diesel\",\"current_price\":3.148,\"yoy_price\":2.18,\"absolute_change\":0.968,\"percentage_change\":44.4036697248},{\"date\":\"2005-10-24\",\"fuel\":\"diesel\",\"current_price\":3.157,\"yoy_price\":2.212,\"absolute_change\":0.945,\"percentage_change\":42.7215189873},{\"date\":\"2005-10-31\",\"fuel\":\"diesel\",\"current_price\":2.876,\"yoy_price\":2.206,\"absolute_change\":0.67,\"percentage_change\":30.3717135086},{\"date\":\"2005-11-07\",\"fuel\":\"diesel\",\"current_price\":2.698,\"yoy_price\":2.163,\"absolute_change\":0.535,\"percentage_change\":24.7341655109},{\"date\":\"2005-11-14\",\"fuel\":\"diesel\",\"current_price\":2.602,\"yoy_price\":2.132,\"absolute_change\":0.47,\"percentage_change\":22.0450281426},{\"date\":\"2005-11-21\",\"fuel\":\"diesel\",\"current_price\":2.513,\"yoy_price\":2.116,\"absolute_change\":0.397,\"percentage_change\":18.7618147448},{\"date\":\"2005-11-28\",\"fuel\":\"diesel\",\"current_price\":2.479,\"yoy_price\":2.116,\"absolute_change\":0.363,\"percentage_change\":17.1550094518},{\"date\":\"2005-12-05\",\"fuel\":\"diesel\",\"current_price\":2.425,\"yoy_price\":2.069,\"absolute_change\":0.356,\"percentage_change\":17.2063798937},{\"date\":\"2005-12-12\",\"fuel\":\"diesel\",\"current_price\":2.436,\"yoy_price\":1.997,\"absolute_change\":0.439,\"percentage_change\":21.9829744617},{\"date\":\"2005-12-19\",\"fuel\":\"diesel\",\"current_price\":2.462,\"yoy_price\":1.984,\"absolute_change\":0.478,\"percentage_change\":24.0927419355},{\"date\":\"2005-12-26\",\"fuel\":\"diesel\",\"current_price\":2.448,\"yoy_price\":1.987,\"absolute_change\":0.461,\"percentage_change\":23.200805234},{\"date\":\"2006-01-02\",\"fuel\":\"diesel\",\"current_price\":2.442,\"yoy_price\":1.957,\"absolute_change\":0.485,\"percentage_change\":24.7828308636},{\"date\":\"2006-01-09\",\"fuel\":\"diesel\",\"current_price\":2.485,\"yoy_price\":1.934,\"absolute_change\":0.551,\"percentage_change\":28.4901758014},{\"date\":\"2006-01-16\",\"fuel\":\"diesel\",\"current_price\":2.449,\"yoy_price\":1.952,\"absolute_change\":0.497,\"percentage_change\":25.4610655738},{\"date\":\"2006-01-23\",\"fuel\":\"diesel\",\"current_price\":2.472,\"yoy_price\":1.959,\"absolute_change\":0.513,\"percentage_change\":26.1868300153},{\"date\":\"2006-01-30\",\"fuel\":\"diesel\",\"current_price\":2.489,\"yoy_price\":1.992,\"absolute_change\":0.497,\"percentage_change\":24.9497991968},{\"date\":\"2006-02-06\",\"fuel\":\"diesel\",\"current_price\":2.499,\"yoy_price\":1.983,\"absolute_change\":0.516,\"percentage_change\":26.0211800303},{\"date\":\"2006-02-13\",\"fuel\":\"diesel\",\"current_price\":2.476,\"yoy_price\":1.986,\"absolute_change\":0.49,\"percentage_change\":24.6727089627},{\"date\":\"2006-02-20\",\"fuel\":\"diesel\",\"current_price\":2.455,\"yoy_price\":2.02,\"absolute_change\":0.435,\"percentage_change\":21.5346534653},{\"date\":\"2006-02-27\",\"fuel\":\"diesel\",\"current_price\":2.471,\"yoy_price\":2.118,\"absolute_change\":0.353,\"percentage_change\":16.6666666667},{\"date\":\"2006-03-06\",\"fuel\":\"diesel\",\"current_price\":2.545,\"yoy_price\":2.168,\"absolute_change\":0.377,\"percentage_change\":17.389298893},{\"date\":\"2006-03-13\",\"fuel\":\"diesel\",\"current_price\":2.543,\"yoy_price\":2.194,\"absolute_change\":0.349,\"percentage_change\":15.9070191431},{\"date\":\"2006-03-20\",\"fuel\":\"diesel\",\"current_price\":2.581,\"yoy_price\":2.244,\"absolute_change\":0.337,\"percentage_change\":15.0178253119},{\"date\":\"2006-03-27\",\"fuel\":\"diesel\",\"current_price\":2.565,\"yoy_price\":2.249,\"absolute_change\":0.316,\"percentage_change\":14.0506891952},{\"date\":\"2006-04-03\",\"fuel\":\"diesel\",\"current_price\":2.617,\"yoy_price\":2.303,\"absolute_change\":0.314,\"percentage_change\":13.6343899262},{\"date\":\"2006-04-10\",\"fuel\":\"diesel\",\"current_price\":2.654,\"yoy_price\":2.316,\"absolute_change\":0.338,\"percentage_change\":14.5941278066},{\"date\":\"2006-04-17\",\"fuel\":\"diesel\",\"current_price\":2.765,\"yoy_price\":2.259,\"absolute_change\":0.506,\"percentage_change\":22.399291722},{\"date\":\"2006-04-24\",\"fuel\":\"diesel\",\"current_price\":2.876,\"yoy_price\":2.289,\"absolute_change\":0.587,\"percentage_change\":25.6443861948},{\"date\":\"2006-05-01\",\"fuel\":\"diesel\",\"current_price\":2.896,\"yoy_price\":2.262,\"absolute_change\":0.634,\"percentage_change\":28.0282935455},{\"date\":\"2006-05-08\",\"fuel\":\"diesel\",\"current_price\":2.897,\"yoy_price\":2.227,\"absolute_change\":0.67,\"percentage_change\":30.0853165694},{\"date\":\"2006-05-15\",\"fuel\":\"diesel\",\"current_price\":2.92,\"yoy_price\":2.189,\"absolute_change\":0.731,\"percentage_change\":33.394243947},{\"date\":\"2006-05-22\",\"fuel\":\"diesel\",\"current_price\":2.888,\"yoy_price\":2.156,\"absolute_change\":0.732,\"percentage_change\":33.9517625232},{\"date\":\"2006-05-29\",\"fuel\":\"diesel\",\"current_price\":2.882,\"yoy_price\":2.16,\"absolute_change\":0.722,\"percentage_change\":33.4259259259},{\"date\":\"2006-06-05\",\"fuel\":\"diesel\",\"current_price\":2.89,\"yoy_price\":2.234,\"absolute_change\":0.656,\"percentage_change\":29.3643688451},{\"date\":\"2006-06-12\",\"fuel\":\"diesel\",\"current_price\":2.918,\"yoy_price\":2.276,\"absolute_change\":0.642,\"percentage_change\":28.2073813708},{\"date\":\"2006-06-19\",\"fuel\":\"diesel\",\"current_price\":2.915,\"yoy_price\":2.313,\"absolute_change\":0.602,\"percentage_change\":26.0268050151},{\"date\":\"2006-06-26\",\"fuel\":\"diesel\",\"current_price\":2.867,\"yoy_price\":2.336,\"absolute_change\":0.531,\"percentage_change\":22.7311643836},{\"date\":\"2006-07-03\",\"fuel\":\"diesel\",\"current_price\":2.898,\"yoy_price\":2.348,\"absolute_change\":0.55,\"percentage_change\":23.4241908007},{\"date\":\"2006-07-10\",\"fuel\":\"diesel\",\"current_price\":2.918,\"yoy_price\":2.408,\"absolute_change\":0.51,\"percentage_change\":21.1794019934},{\"date\":\"2006-07-17\",\"fuel\":\"diesel\",\"current_price\":2.926,\"yoy_price\":2.392,\"absolute_change\":0.534,\"percentage_change\":22.3244147157},{\"date\":\"2006-07-24\",\"fuel\":\"diesel\",\"current_price\":2.946,\"yoy_price\":2.342,\"absolute_change\":0.604,\"percentage_change\":25.7899231426},{\"date\":\"2006-07-31\",\"fuel\":\"diesel\",\"current_price\":2.98,\"yoy_price\":2.348,\"absolute_change\":0.632,\"percentage_change\":26.9165247019},{\"date\":\"2006-08-07\",\"fuel\":\"diesel\",\"current_price\":3.055,\"yoy_price\":2.407,\"absolute_change\":0.648,\"percentage_change\":26.9214790195},{\"date\":\"2006-08-14\",\"fuel\":\"diesel\",\"current_price\":3.065,\"yoy_price\":2.567,\"absolute_change\":0.498,\"percentage_change\":19.400077912},{\"date\":\"2006-08-21\",\"fuel\":\"diesel\",\"current_price\":3.033,\"yoy_price\":2.588,\"absolute_change\":0.445,\"percentage_change\":17.1947449768},{\"date\":\"2006-08-28\",\"fuel\":\"diesel\",\"current_price\":3.027,\"yoy_price\":2.59,\"absolute_change\":0.437,\"percentage_change\":16.8725868726},{\"date\":\"2006-09-04\",\"fuel\":\"diesel\",\"current_price\":2.967,\"yoy_price\":2.898,\"absolute_change\":0.069,\"percentage_change\":2.380952381},{\"date\":\"2006-09-11\",\"fuel\":\"diesel\",\"current_price\":2.857,\"yoy_price\":2.847,\"absolute_change\":0.01,\"percentage_change\":0.3512469266},{\"date\":\"2006-09-18\",\"fuel\":\"diesel\",\"current_price\":2.713,\"yoy_price\":2.732,\"absolute_change\":-0.019,\"percentage_change\":-0.6954612006},{\"date\":\"2006-09-25\",\"fuel\":\"diesel\",\"current_price\":2.595,\"yoy_price\":2.798,\"absolute_change\":-0.203,\"percentage_change\":-7.2551822731},{\"date\":\"2006-10-02\",\"fuel\":\"diesel\",\"current_price\":2.546,\"yoy_price\":3.144,\"absolute_change\":-0.598,\"percentage_change\":-19.0203562341},{\"date\":\"2006-10-09\",\"fuel\":\"diesel\",\"current_price\":2.506,\"yoy_price\":3.15,\"absolute_change\":-0.644,\"percentage_change\":-20.4444444444},{\"date\":\"2006-10-16\",\"fuel\":\"diesel\",\"current_price\":2.503,\"yoy_price\":3.148,\"absolute_change\":-0.645,\"percentage_change\":-20.4891994917},{\"date\":\"2006-10-23\",\"fuel\":\"diesel\",\"current_price\":2.524,\"yoy_price\":3.157,\"absolute_change\":-0.633,\"percentage_change\":-20.0506810263},{\"date\":\"2006-10-30\",\"fuel\":\"diesel\",\"current_price\":2.517,\"yoy_price\":2.876,\"absolute_change\":-0.359,\"percentage_change\":-12.4826147427},{\"date\":\"2006-11-06\",\"fuel\":\"diesel\",\"current_price\":2.506,\"yoy_price\":2.698,\"absolute_change\":-0.192,\"percentage_change\":-7.1163825056},{\"date\":\"2006-11-13\",\"fuel\":\"diesel\",\"current_price\":2.552,\"yoy_price\":2.602,\"absolute_change\":-0.05,\"percentage_change\":-1.9215987702},{\"date\":\"2006-11-20\",\"fuel\":\"diesel\",\"current_price\":2.553,\"yoy_price\":2.513,\"absolute_change\":0.04,\"percentage_change\":1.5917230402},{\"date\":\"2006-11-27\",\"fuel\":\"diesel\",\"current_price\":2.567,\"yoy_price\":2.479,\"absolute_change\":0.088,\"percentage_change\":3.5498184752},{\"date\":\"2006-12-04\",\"fuel\":\"diesel\",\"current_price\":2.618,\"yoy_price\":2.425,\"absolute_change\":0.193,\"percentage_change\":7.9587628866},{\"date\":\"2006-12-11\",\"fuel\":\"diesel\",\"current_price\":2.621,\"yoy_price\":2.436,\"absolute_change\":0.185,\"percentage_change\":7.5944170772},{\"date\":\"2006-12-18\",\"fuel\":\"diesel\",\"current_price\":2.606,\"yoy_price\":2.462,\"absolute_change\":0.144,\"percentage_change\":5.8489033306},{\"date\":\"2006-12-25\",\"fuel\":\"diesel\",\"current_price\":2.596,\"yoy_price\":2.448,\"absolute_change\":0.148,\"percentage_change\":6.045751634},{\"date\":\"2007-01-01\",\"fuel\":\"diesel\",\"current_price\":2.58,\"yoy_price\":2.442,\"absolute_change\":0.138,\"percentage_change\":5.6511056511},{\"date\":\"2007-01-08\",\"fuel\":\"diesel\",\"current_price\":2.537,\"yoy_price\":2.485,\"absolute_change\":0.052,\"percentage_change\":2.092555332},{\"date\":\"2007-01-15\",\"fuel\":\"diesel\",\"current_price\":2.463,\"yoy_price\":2.449,\"absolute_change\":0.014,\"percentage_change\":0.5716619028},{\"date\":\"2007-01-22\",\"fuel\":\"diesel\",\"current_price\":2.43,\"yoy_price\":2.472,\"absolute_change\":-0.042,\"percentage_change\":-1.6990291262},{\"date\":\"2007-01-29\",\"fuel\":\"diesel\",\"current_price\":2.413,\"yoy_price\":2.489,\"absolute_change\":-0.076,\"percentage_change\":-3.0534351145},{\"date\":\"2007-02-05\",\"fuel\":\"diesel\",\"current_price\":2.4256666667,\"yoy_price\":2.499,\"absolute_change\":-0.0733333333,\"percentage_change\":-2.9345071362},{\"date\":\"2007-02-12\",\"fuel\":\"diesel\",\"current_price\":2.466,\"yoy_price\":2.476,\"absolute_change\":-0.01,\"percentage_change\":-0.4038772213},{\"date\":\"2007-02-19\",\"fuel\":\"diesel\",\"current_price\":2.481,\"yoy_price\":2.455,\"absolute_change\":0.026,\"percentage_change\":1.0590631365},{\"date\":\"2007-02-26\",\"fuel\":\"diesel\",\"current_price\":2.5423333333,\"yoy_price\":2.471,\"absolute_change\":0.0713333333,\"percentage_change\":2.8868204506},{\"date\":\"2007-03-05\",\"fuel\":\"diesel\",\"current_price\":2.6166666667,\"yoy_price\":2.545,\"absolute_change\":0.0716666667,\"percentage_change\":2.8159790439},{\"date\":\"2007-03-12\",\"fuel\":\"diesel\",\"current_price\":2.679,\"yoy_price\":2.543,\"absolute_change\":0.136,\"percentage_change\":5.3480141565},{\"date\":\"2007-03-19\",\"fuel\":\"diesel\",\"current_price\":2.673,\"yoy_price\":2.581,\"absolute_change\":0.092,\"percentage_change\":3.5645098799},{\"date\":\"2007-03-26\",\"fuel\":\"diesel\",\"current_price\":2.6666666667,\"yoy_price\":2.565,\"absolute_change\":0.1016666667,\"percentage_change\":3.9636127355},{\"date\":\"2007-04-02\",\"fuel\":\"diesel\",\"current_price\":2.7813333333,\"yoy_price\":2.617,\"absolute_change\":0.1643333333,\"percentage_change\":6.2794548465},{\"date\":\"2007-04-09\",\"fuel\":\"diesel\",\"current_price\":2.8306666667,\"yoy_price\":2.654,\"absolute_change\":0.1766666667,\"percentage_change\":6.65661894},{\"date\":\"2007-04-16\",\"fuel\":\"diesel\",\"current_price\":2.8696666667,\"yoy_price\":2.765,\"absolute_change\":0.1046666667,\"percentage_change\":3.7854128993},{\"date\":\"2007-04-23\",\"fuel\":\"diesel\",\"current_price\":2.8416666667,\"yoy_price\":2.876,\"absolute_change\":-0.0343333333,\"percentage_change\":-1.1937876681},{\"date\":\"2007-04-30\",\"fuel\":\"diesel\",\"current_price\":2.796,\"yoy_price\":2.896,\"absolute_change\":-0.1,\"percentage_change\":-3.453038674},{\"date\":\"2007-05-07\",\"fuel\":\"diesel\",\"current_price\":2.7746666667,\"yoy_price\":2.897,\"absolute_change\":-0.1223333333,\"percentage_change\":-4.2227591762},{\"date\":\"2007-05-14\",\"fuel\":\"diesel\",\"current_price\":2.755,\"yoy_price\":2.92,\"absolute_change\":-0.165,\"percentage_change\":-5.6506849315},{\"date\":\"2007-05-21\",\"fuel\":\"diesel\",\"current_price\":2.7883333333,\"yoy_price\":2.888,\"absolute_change\":-0.0996666667,\"percentage_change\":-3.4510618652},{\"date\":\"2007-05-28\",\"fuel\":\"diesel\",\"current_price\":2.8016666667,\"yoy_price\":2.882,\"absolute_change\":-0.0803333333,\"percentage_change\":-2.7874161462},{\"date\":\"2007-06-04\",\"fuel\":\"diesel\",\"current_price\":2.7833333333,\"yoy_price\":2.89,\"absolute_change\":-0.1066666667,\"percentage_change\":-3.69088812},{\"date\":\"2007-06-11\",\"fuel\":\"diesel\",\"current_price\":2.774,\"yoy_price\":2.918,\"absolute_change\":-0.144,\"percentage_change\":-4.9348869088},{\"date\":\"2007-06-18\",\"fuel\":\"diesel\",\"current_price\":2.7916666667,\"yoy_price\":2.915,\"absolute_change\":-0.1233333333,\"percentage_change\":-4.2309891366},{\"date\":\"2007-06-25\",\"fuel\":\"diesel\",\"current_price\":2.8226666667,\"yoy_price\":2.867,\"absolute_change\":-0.0443333333,\"percentage_change\":-1.5463318219},{\"date\":\"2007-07-02\",\"fuel\":\"diesel\",\"current_price\":2.8166666667,\"yoy_price\":2.898,\"absolute_change\":-0.0813333333,\"percentage_change\":-2.8065332413},{\"date\":\"2007-07-09\",\"fuel\":\"diesel\",\"current_price\":2.839,\"yoy_price\":2.918,\"absolute_change\":-0.079,\"percentage_change\":-2.7073337903},{\"date\":\"2007-07-16\",\"fuel\":\"diesel\",\"current_price\":2.875,\"yoy_price\":2.926,\"absolute_change\":-0.051,\"percentage_change\":-1.7429938483},{\"date\":\"2007-07-23\",\"fuel\":\"diesel\",\"current_price\":2.8736666667,\"yoy_price\":2.946,\"absolute_change\":-0.0723333333,\"percentage_change\":-2.4553066305},{\"date\":\"2007-07-30\",\"fuel\":\"diesel\",\"current_price\":2.872,\"yoy_price\":2.98,\"absolute_change\":-0.108,\"percentage_change\":-3.6241610738},{\"date\":\"2007-08-06\",\"fuel\":\"diesel\",\"current_price\":2.8846666667,\"yoy_price\":3.055,\"absolute_change\":-0.1703333333,\"percentage_change\":-5.5755591926},{\"date\":\"2007-08-13\",\"fuel\":\"diesel\",\"current_price\":2.8326666667,\"yoy_price\":3.065,\"absolute_change\":-0.2323333333,\"percentage_change\":-7.580206634},{\"date\":\"2007-08-20\",\"fuel\":\"diesel\",\"current_price\":2.8573333333,\"yoy_price\":3.033,\"absolute_change\":-0.1756666667,\"percentage_change\":-5.7918452577},{\"date\":\"2007-08-27\",\"fuel\":\"diesel\",\"current_price\":2.8523333333,\"yoy_price\":3.027,\"absolute_change\":-0.1746666667,\"percentage_change\":-5.7702896157},{\"date\":\"2007-09-03\",\"fuel\":\"diesel\",\"current_price\":2.8843333333,\"yoy_price\":2.967,\"absolute_change\":-0.0826666667,\"percentage_change\":-2.7862037973},{\"date\":\"2007-09-10\",\"fuel\":\"diesel\",\"current_price\":2.9156666667,\"yoy_price\":2.857,\"absolute_change\":0.0586666667,\"percentage_change\":2.0534360051},{\"date\":\"2007-09-17\",\"fuel\":\"diesel\",\"current_price\":2.9563333333,\"yoy_price\":2.713,\"absolute_change\":0.2433333333,\"percentage_change\":8.9691608306},{\"date\":\"2007-09-24\",\"fuel\":\"diesel\",\"current_price\":3.026,\"yoy_price\":2.595,\"absolute_change\":0.431,\"percentage_change\":16.6088631985},{\"date\":\"2007-10-01\",\"fuel\":\"diesel\",\"current_price\":3.04,\"yoy_price\":2.546,\"absolute_change\":0.494,\"percentage_change\":19.4029850746},{\"date\":\"2007-10-08\",\"fuel\":\"diesel\",\"current_price\":3.022,\"yoy_price\":2.506,\"absolute_change\":0.516,\"percentage_change\":20.5905826018},{\"date\":\"2007-10-15\",\"fuel\":\"diesel\",\"current_price\":3.0226666667,\"yoy_price\":2.503,\"absolute_change\":0.5196666667,\"percentage_change\":20.7617525636},{\"date\":\"2007-10-22\",\"fuel\":\"diesel\",\"current_price\":3.0756666667,\"yoy_price\":2.524,\"absolute_change\":0.5516666667,\"percentage_change\":21.8568409931},{\"date\":\"2007-10-29\",\"fuel\":\"diesel\",\"current_price\":3.141,\"yoy_price\":2.517,\"absolute_change\":0.624,\"percentage_change\":24.7914183552},{\"date\":\"2007-11-05\",\"fuel\":\"diesel\",\"current_price\":3.2913333333,\"yoy_price\":2.506,\"absolute_change\":0.7853333333,\"percentage_change\":31.3381218409},{\"date\":\"2007-11-12\",\"fuel\":\"diesel\",\"current_price\":3.4103333333,\"yoy_price\":2.552,\"absolute_change\":0.8583333333,\"percentage_change\":33.6337513062},{\"date\":\"2007-11-19\",\"fuel\":\"diesel\",\"current_price\":3.3896666667,\"yoy_price\":2.553,\"absolute_change\":0.8366666667,\"percentage_change\":32.7719023371},{\"date\":\"2007-11-26\",\"fuel\":\"diesel\",\"current_price\":3.4273333333,\"yoy_price\":2.567,\"absolute_change\":0.8603333333,\"percentage_change\":33.5151279055},{\"date\":\"2007-12-03\",\"fuel\":\"diesel\",\"current_price\":3.393,\"yoy_price\":2.618,\"absolute_change\":0.775,\"percentage_change\":29.602750191},{\"date\":\"2007-12-10\",\"fuel\":\"diesel\",\"current_price\":3.2963333333,\"yoy_price\":2.621,\"absolute_change\":0.6753333333,\"percentage_change\":25.7662469795},{\"date\":\"2007-12-17\",\"fuel\":\"diesel\",\"current_price\":3.2816666667,\"yoy_price\":2.606,\"absolute_change\":0.6756666667,\"percentage_change\":25.9273471476},{\"date\":\"2007-12-24\",\"fuel\":\"diesel\",\"current_price\":3.2846666667,\"yoy_price\":2.596,\"absolute_change\":0.6886666667,\"percentage_change\":26.5279917822},{\"date\":\"2007-12-31\",\"fuel\":\"diesel\",\"current_price\":3.3243333333,\"yoy_price\":2.58,\"absolute_change\":0.7443333333,\"percentage_change\":28.850129199},{\"date\":\"2008-01-07\",\"fuel\":\"diesel\",\"current_price\":3.3546666667,\"yoy_price\":2.537,\"absolute_change\":0.8176666667,\"percentage_change\":32.2296675864},{\"date\":\"2008-01-14\",\"fuel\":\"diesel\",\"current_price\":3.2986666667,\"yoy_price\":2.463,\"absolute_change\":0.8356666667,\"percentage_change\":33.9288131006},{\"date\":\"2008-01-21\",\"fuel\":\"diesel\",\"current_price\":3.2416666667,\"yoy_price\":2.43,\"absolute_change\":0.8116666667,\"percentage_change\":33.401920439},{\"date\":\"2008-01-28\",\"fuel\":\"diesel\",\"current_price\":3.234,\"yoy_price\":2.413,\"absolute_change\":0.821,\"percentage_change\":34.0240364691},{\"date\":\"2008-02-04\",\"fuel\":\"diesel\",\"current_price\":3.2593333333,\"yoy_price\":2.4256666667,\"absolute_change\":0.8336666667,\"percentage_change\":34.3685584719},{\"date\":\"2008-02-11\",\"fuel\":\"diesel\",\"current_price\":3.258,\"yoy_price\":2.466,\"absolute_change\":0.792,\"percentage_change\":32.1167883212},{\"date\":\"2008-02-18\",\"fuel\":\"diesel\",\"current_price\":3.3786666667,\"yoy_price\":2.481,\"absolute_change\":0.8976666667,\"percentage_change\":36.1816471853},{\"date\":\"2008-02-25\",\"fuel\":\"diesel\",\"current_price\":3.5403333333,\"yoy_price\":2.5423333333,\"absolute_change\":0.998,\"percentage_change\":39.2552773043},{\"date\":\"2008-03-03\",\"fuel\":\"diesel\",\"current_price\":3.6403333333,\"yoy_price\":2.6166666667,\"absolute_change\":1.0236666667,\"percentage_change\":39.1210191083},{\"date\":\"2008-03-10\",\"fuel\":\"diesel\",\"current_price\":3.806,\"yoy_price\":2.679,\"absolute_change\":1.127,\"percentage_change\":42.0679357969},{\"date\":\"2008-03-17\",\"fuel\":\"diesel\",\"current_price\":3.96,\"yoy_price\":2.673,\"absolute_change\":1.287,\"percentage_change\":48.1481481481},{\"date\":\"2008-03-24\",\"fuel\":\"diesel\",\"current_price\":3.973,\"yoy_price\":2.6666666667,\"absolute_change\":1.3063333333,\"percentage_change\":48.9875},{\"date\":\"2008-03-31\",\"fuel\":\"diesel\",\"current_price\":3.9416666667,\"yoy_price\":2.7813333333,\"absolute_change\":1.1603333333,\"percentage_change\":41.7186001918},{\"date\":\"2008-04-07\",\"fuel\":\"diesel\",\"current_price\":3.932,\"yoy_price\":2.8306666667,\"absolute_change\":1.1013333333,\"percentage_change\":38.9072067829},{\"date\":\"2008-04-14\",\"fuel\":\"diesel\",\"current_price\":4.0383333333,\"yoy_price\":2.8696666667,\"absolute_change\":1.1686666667,\"percentage_change\":40.7248228598},{\"date\":\"2008-04-21\",\"fuel\":\"diesel\",\"current_price\":4.1216666667,\"yoy_price\":2.8416666667,\"absolute_change\":1.28,\"percentage_change\":45.0439882698},{\"date\":\"2008-04-28\",\"fuel\":\"diesel\",\"current_price\":4.154,\"yoy_price\":2.796,\"absolute_change\":1.358,\"percentage_change\":48.5693848355},{\"date\":\"2008-05-05\",\"fuel\":\"diesel\",\"current_price\":4.12,\"yoy_price\":2.7746666667,\"absolute_change\":1.3453333333,\"percentage_change\":48.4863046612},{\"date\":\"2008-05-12\",\"fuel\":\"diesel\",\"current_price\":4.3113333333,\"yoy_price\":2.755,\"absolute_change\":1.5563333333,\"percentage_change\":56.4912280702},{\"date\":\"2008-05-19\",\"fuel\":\"diesel\",\"current_price\":4.4823333333,\"yoy_price\":2.7883333333,\"absolute_change\":1.694,\"percentage_change\":60.7531380753},{\"date\":\"2008-05-26\",\"fuel\":\"diesel\",\"current_price\":4.7043333333,\"yoy_price\":2.8016666667,\"absolute_change\":1.9026666667,\"percentage_change\":67.9119571684},{\"date\":\"2008-06-02\",\"fuel\":\"diesel\",\"current_price\":4.6863333333,\"yoy_price\":2.7833333333,\"absolute_change\":1.903,\"percentage_change\":68.371257485},{\"date\":\"2008-06-09\",\"fuel\":\"diesel\",\"current_price\":4.668,\"yoy_price\":2.774,\"absolute_change\":1.894,\"percentage_change\":68.2768565249},{\"date\":\"2008-06-16\",\"fuel\":\"diesel\",\"current_price\":4.6666666667,\"yoy_price\":2.7916666667,\"absolute_change\":1.875,\"percentage_change\":67.1641791045},{\"date\":\"2008-06-23\",\"fuel\":\"diesel\",\"current_price\":4.6196666667,\"yoy_price\":2.8226666667,\"absolute_change\":1.797,\"percentage_change\":63.6632026453},{\"date\":\"2008-06-30\",\"fuel\":\"diesel\",\"current_price\":4.6186666667,\"yoy_price\":2.8166666667,\"absolute_change\":1.802,\"percentage_change\":63.9763313609},{\"date\":\"2008-07-07\",\"fuel\":\"diesel\",\"current_price\":4.712,\"yoy_price\":2.839,\"absolute_change\":1.873,\"percentage_change\":65.973934484},{\"date\":\"2008-07-14\",\"fuel\":\"diesel\",\"current_price\":4.7473333333,\"yoy_price\":2.875,\"absolute_change\":1.8723333333,\"percentage_change\":65.1246376812},{\"date\":\"2008-07-21\",\"fuel\":\"diesel\",\"current_price\":4.692,\"yoy_price\":2.8736666667,\"absolute_change\":1.8183333333,\"percentage_change\":63.275722074},{\"date\":\"2008-07-28\",\"fuel\":\"diesel\",\"current_price\":4.5763333333,\"yoy_price\":2.872,\"absolute_change\":1.7043333333,\"percentage_change\":59.343082637},{\"date\":\"2008-08-04\",\"fuel\":\"diesel\",\"current_price\":4.4706666667,\"yoy_price\":2.8846666667,\"absolute_change\":1.586,\"percentage_change\":54.9803559048},{\"date\":\"2008-08-11\",\"fuel\":\"diesel\",\"current_price\":4.3203333333,\"yoy_price\":2.8326666667,\"absolute_change\":1.4876666667,\"percentage_change\":52.5182395858},{\"date\":\"2008-08-18\",\"fuel\":\"diesel\",\"current_price\":4.176,\"yoy_price\":2.8573333333,\"absolute_change\":1.3186666667,\"percentage_change\":46.1502566496},{\"date\":\"2008-08-25\",\"fuel\":\"diesel\",\"current_price\":4.114,\"yoy_price\":2.8523333333,\"absolute_change\":1.2616666667,\"percentage_change\":44.2327918663},{\"date\":\"2008-09-01\",\"fuel\":\"diesel\",\"current_price\":4.0903333333,\"yoy_price\":2.8843333333,\"absolute_change\":1.206,\"percentage_change\":41.8120882931},{\"date\":\"2008-09-08\",\"fuel\":\"diesel\",\"current_price\":4.0233333333,\"yoy_price\":2.9156666667,\"absolute_change\":1.1076666667,\"percentage_change\":37.9901680576},{\"date\":\"2008-09-15\",\"fuel\":\"diesel\",\"current_price\":3.997,\"yoy_price\":2.9563333333,\"absolute_change\":1.0406666667,\"percentage_change\":35.2012628256},{\"date\":\"2008-09-22\",\"fuel\":\"diesel\",\"current_price\":3.9366666667,\"yoy_price\":3.026,\"absolute_change\":0.9106666667,\"percentage_change\":30.094734523},{\"date\":\"2008-09-29\",\"fuel\":\"diesel\",\"current_price\":3.9383333333,\"yoy_price\":3.04,\"absolute_change\":0.8983333333,\"percentage_change\":29.5504385965},{\"date\":\"2008-10-06\",\"fuel\":\"diesel\",\"current_price\":3.8476666667,\"yoy_price\":3.022,\"absolute_change\":0.8256666667,\"percentage_change\":27.3218619016},{\"date\":\"2008-10-13\",\"fuel\":\"diesel\",\"current_price\":3.6296666667,\"yoy_price\":3.0226666667,\"absolute_change\":0.607,\"percentage_change\":20.0816056462},{\"date\":\"2008-10-20\",\"fuel\":\"diesel\",\"current_price\":3.4456666667,\"yoy_price\":3.0756666667,\"absolute_change\":0.37,\"percentage_change\":12.0299122142},{\"date\":\"2008-10-27\",\"fuel\":\"diesel\",\"current_price\":3.259,\"yoy_price\":3.141,\"absolute_change\":0.118,\"percentage_change\":3.7567653613},{\"date\":\"2008-11-03\",\"fuel\":\"diesel\",\"current_price\":3.0606666667,\"yoy_price\":3.2913333333,\"absolute_change\":-0.2306666667,\"percentage_change\":-7.0083046384},{\"date\":\"2008-11-10\",\"fuel\":\"diesel\",\"current_price\":2.9103333333,\"yoy_price\":3.4103333333,\"absolute_change\":-0.5,\"percentage_change\":-14.6613234288},{\"date\":\"2008-11-17\",\"fuel\":\"diesel\",\"current_price\":2.7766666667,\"yoy_price\":3.3896666667,\"absolute_change\":-0.613,\"percentage_change\":-18.0843740781},{\"date\":\"2008-11-24\",\"fuel\":\"diesel\",\"current_price\":2.637,\"yoy_price\":3.4273333333,\"absolute_change\":-0.7903333333,\"percentage_change\":-23.0597160086},{\"date\":\"2008-12-01\",\"fuel\":\"diesel\",\"current_price\":2.5943333333,\"yoy_price\":3.393,\"absolute_change\":-0.7986666667,\"percentage_change\":-23.5386580214},{\"date\":\"2008-12-08\",\"fuel\":\"diesel\",\"current_price\":2.519,\"yoy_price\":3.2963333333,\"absolute_change\":-0.7773333333,\"percentage_change\":-23.5817575083},{\"date\":\"2008-12-15\",\"fuel\":\"diesel\",\"current_price\":2.426,\"yoy_price\":3.2816666667,\"absolute_change\":-0.8556666667,\"percentage_change\":-26.0741493144},{\"date\":\"2008-12-22\",\"fuel\":\"diesel\",\"current_price\":2.3695,\"yoy_price\":3.2846666667,\"absolute_change\":-0.9151666667,\"percentage_change\":-27.8617820175},{\"date\":\"2008-12-29\",\"fuel\":\"diesel\",\"current_price\":2.331,\"yoy_price\":3.3243333333,\"absolute_change\":-0.9933333333,\"percentage_change\":-29.8806778301},{\"date\":\"2009-01-05\",\"fuel\":\"diesel\",\"current_price\":2.295,\"yoy_price\":3.3546666667,\"absolute_change\":-1.0596666667,\"percentage_change\":-31.5878378378},{\"date\":\"2009-01-12\",\"fuel\":\"diesel\",\"current_price\":2.319,\"yoy_price\":3.2986666667,\"absolute_change\":-0.9796666667,\"percentage_change\":-29.6988682296},{\"date\":\"2009-01-19\",\"fuel\":\"diesel\",\"current_price\":2.3015,\"yoy_price\":3.2416666667,\"absolute_change\":-0.9401666667,\"percentage_change\":-29.0025706941},{\"date\":\"2009-01-26\",\"fuel\":\"diesel\",\"current_price\":2.273,\"yoy_price\":3.234,\"absolute_change\":-0.961,\"percentage_change\":-29.7155225727},{\"date\":\"2009-02-02\",\"fuel\":\"diesel\",\"current_price\":2.251,\"yoy_price\":3.2593333333,\"absolute_change\":-1.0083333333,\"percentage_change\":-30.936796891},{\"date\":\"2009-02-09\",\"fuel\":\"diesel\",\"current_price\":2.2245,\"yoy_price\":3.258,\"absolute_change\":-1.0335,\"percentage_change\":-31.7219152855},{\"date\":\"2009-02-16\",\"fuel\":\"diesel\",\"current_price\":2.1915,\"yoy_price\":3.3786666667,\"absolute_change\":-1.1871666667,\"percentage_change\":-35.1371349645},{\"date\":\"2009-02-23\",\"fuel\":\"diesel\",\"current_price\":2.134,\"yoy_price\":3.5403333333,\"absolute_change\":-1.4063333333,\"percentage_change\":-39.7231899068},{\"date\":\"2009-03-02\",\"fuel\":\"diesel\",\"current_price\":2.091,\"yoy_price\":3.6403333333,\"absolute_change\":-1.5493333333,\"percentage_change\":-42.5602051094},{\"date\":\"2009-03-09\",\"fuel\":\"diesel\",\"current_price\":2.048,\"yoy_price\":3.806,\"absolute_change\":-1.758,\"percentage_change\":-46.190225959},{\"date\":\"2009-03-16\",\"fuel\":\"diesel\",\"current_price\":2.02,\"yoy_price\":3.96,\"absolute_change\":-1.94,\"percentage_change\":-48.9898989899},{\"date\":\"2009-03-23\",\"fuel\":\"diesel\",\"current_price\":2.0915,\"yoy_price\":3.973,\"absolute_change\":-1.8815,\"percentage_change\":-47.3571608356},{\"date\":\"2009-03-30\",\"fuel\":\"diesel\",\"current_price\":2.223,\"yoy_price\":3.9416666667,\"absolute_change\":-1.7186666667,\"percentage_change\":-43.6025369979},{\"date\":\"2009-04-06\",\"fuel\":\"diesel\",\"current_price\":2.2305,\"yoy_price\":3.932,\"absolute_change\":-1.7015,\"percentage_change\":-43.2731434385},{\"date\":\"2009-04-13\",\"fuel\":\"diesel\",\"current_price\":2.2315,\"yoy_price\":4.0383333333,\"absolute_change\":-1.8068333333,\"percentage_change\":-44.7420553033},{\"date\":\"2009-04-20\",\"fuel\":\"diesel\",\"current_price\":2.2235,\"yoy_price\":4.1216666667,\"absolute_change\":-1.8981666667,\"percentage_change\":-46.0533764658},{\"date\":\"2009-04-27\",\"fuel\":\"diesel\",\"current_price\":2.204,\"yoy_price\":4.154,\"absolute_change\":-1.95,\"percentage_change\":-46.9427058257},{\"date\":\"2009-05-04\",\"fuel\":\"diesel\",\"current_price\":2.1885,\"yoy_price\":4.12,\"absolute_change\":-1.9315,\"percentage_change\":-46.8810679612},{\"date\":\"2009-05-11\",\"fuel\":\"diesel\",\"current_price\":2.2195,\"yoy_price\":4.3113333333,\"absolute_change\":-2.0918333333,\"percentage_change\":-48.5194062162},{\"date\":\"2009-05-18\",\"fuel\":\"diesel\",\"current_price\":2.234,\"yoy_price\":4.4823333333,\"absolute_change\":-2.2483333333,\"percentage_change\":-50.1598869636},{\"date\":\"2009-05-25\",\"fuel\":\"diesel\",\"current_price\":2.276,\"yoy_price\":4.7043333333,\"absolute_change\":-2.4283333333,\"percentage_change\":-51.6190746121},{\"date\":\"2009-06-01\",\"fuel\":\"diesel\",\"current_price\":2.353,\"yoy_price\":4.6863333333,\"absolute_change\":-2.3333333333,\"percentage_change\":-49.7901699979},{\"date\":\"2009-06-08\",\"fuel\":\"diesel\",\"current_price\":2.4995,\"yoy_price\":4.668,\"absolute_change\":-2.1685,\"percentage_change\":-46.4545844045},{\"date\":\"2009-06-15\",\"fuel\":\"diesel\",\"current_price\":2.5735,\"yoy_price\":4.6666666667,\"absolute_change\":-2.0931666667,\"percentage_change\":-44.8535714286},{\"date\":\"2009-06-22\",\"fuel\":\"diesel\",\"current_price\":2.6175,\"yoy_price\":4.6196666667,\"absolute_change\":-2.0021666667,\"percentage_change\":-43.340067826},{\"date\":\"2009-06-29\",\"fuel\":\"diesel\",\"current_price\":2.61,\"yoy_price\":4.6186666667,\"absolute_change\":-2.0086666667,\"percentage_change\":-43.4901847575},{\"date\":\"2009-07-06\",\"fuel\":\"diesel\",\"current_price\":2.596,\"yoy_price\":4.712,\"absolute_change\":-2.116,\"percentage_change\":-44.9066213922},{\"date\":\"2009-07-13\",\"fuel\":\"diesel\",\"current_price\":2.544,\"yoy_price\":4.7473333333,\"absolute_change\":-2.2033333333,\"percentage_change\":-46.4120207836},{\"date\":\"2009-07-20\",\"fuel\":\"diesel\",\"current_price\":2.4985,\"yoy_price\":4.692,\"absolute_change\":-2.1935,\"percentage_change\":-46.7497868713},{\"date\":\"2009-07-27\",\"fuel\":\"diesel\",\"current_price\":2.53,\"yoy_price\":4.5763333333,\"absolute_change\":-2.0463333333,\"percentage_change\":-44.7155655911},{\"date\":\"2009-08-03\",\"fuel\":\"diesel\",\"current_price\":2.552,\"yoy_price\":4.4706666667,\"absolute_change\":-1.9186666667,\"percentage_change\":-42.9167909335},{\"date\":\"2009-08-10\",\"fuel\":\"diesel\",\"current_price\":2.6265,\"yoy_price\":4.3203333333,\"absolute_change\":-1.6938333333,\"percentage_change\":-39.2060797778},{\"date\":\"2009-08-17\",\"fuel\":\"diesel\",\"current_price\":2.654,\"yoy_price\":4.176,\"absolute_change\":-1.522,\"percentage_change\":-36.4463601533},{\"date\":\"2009-08-24\",\"fuel\":\"diesel\",\"current_price\":2.67,\"yoy_price\":4.114,\"absolute_change\":-1.444,\"percentage_change\":-35.0996596986},{\"date\":\"2009-08-31\",\"fuel\":\"diesel\",\"current_price\":2.6765,\"yoy_price\":4.0903333333,\"absolute_change\":-1.4138333333,\"percentage_change\":-34.5652351072},{\"date\":\"2009-09-07\",\"fuel\":\"diesel\",\"current_price\":2.6485,\"yoy_price\":4.0233333333,\"absolute_change\":-1.3748333333,\"percentage_change\":-34.1714995857},{\"date\":\"2009-09-14\",\"fuel\":\"diesel\",\"current_price\":2.636,\"yoy_price\":3.997,\"absolute_change\":-1.361,\"percentage_change\":-34.0505379034},{\"date\":\"2009-09-21\",\"fuel\":\"diesel\",\"current_price\":2.624,\"yoy_price\":3.9366666667,\"absolute_change\":-1.3126666667,\"percentage_change\":-33.3446232007},{\"date\":\"2009-09-28\",\"fuel\":\"diesel\",\"current_price\":2.6035,\"yoy_price\":3.9383333333,\"absolute_change\":-1.3348333333,\"percentage_change\":-33.8933559035},{\"date\":\"2009-10-05\",\"fuel\":\"diesel\",\"current_price\":2.585,\"yoy_price\":3.8476666667,\"absolute_change\":-1.2626666667,\"percentage_change\":-32.8164255393},{\"date\":\"2009-10-12\",\"fuel\":\"diesel\",\"current_price\":2.602,\"yoy_price\":3.6296666667,\"absolute_change\":-1.0276666667,\"percentage_change\":-28.3129763982},{\"date\":\"2009-10-19\",\"fuel\":\"diesel\",\"current_price\":2.7065,\"yoy_price\":3.4456666667,\"absolute_change\":-0.7391666667,\"percentage_change\":-21.4520653961},{\"date\":\"2009-10-26\",\"fuel\":\"diesel\",\"current_price\":2.803,\"yoy_price\":3.259,\"absolute_change\":-0.456,\"percentage_change\":-13.9920220927},{\"date\":\"2009-11-02\",\"fuel\":\"diesel\",\"current_price\":2.8095,\"yoy_price\":3.0606666667,\"absolute_change\":-0.2511666667,\"percentage_change\":-8.2062731431},{\"date\":\"2009-11-09\",\"fuel\":\"diesel\",\"current_price\":2.803,\"yoy_price\":2.9103333333,\"absolute_change\":-0.1073333333,\"percentage_change\":-3.6880082465},{\"date\":\"2009-11-16\",\"fuel\":\"diesel\",\"current_price\":2.7925,\"yoy_price\":2.7766666667,\"absolute_change\":0.0158333333,\"percentage_change\":0.5702280912},{\"date\":\"2009-11-23\",\"fuel\":\"diesel\",\"current_price\":2.7895,\"yoy_price\":2.637,\"absolute_change\":0.1525,\"percentage_change\":5.7830868411},{\"date\":\"2009-11-30\",\"fuel\":\"diesel\",\"current_price\":2.7775,\"yoy_price\":2.5943333333,\"absolute_change\":0.1831666667,\"percentage_change\":7.06025954},{\"date\":\"2009-12-07\",\"fuel\":\"diesel\",\"current_price\":2.7745,\"yoy_price\":2.519,\"absolute_change\":0.2555,\"percentage_change\":10.1429138547},{\"date\":\"2009-12-14\",\"fuel\":\"diesel\",\"current_price\":2.7505,\"yoy_price\":2.426,\"absolute_change\":0.3245,\"percentage_change\":13.3759274526},{\"date\":\"2009-12-21\",\"fuel\":\"diesel\",\"current_price\":2.7285,\"yoy_price\":2.3695,\"absolute_change\":0.359,\"percentage_change\":15.1508757122},{\"date\":\"2009-12-28\",\"fuel\":\"diesel\",\"current_price\":2.734,\"yoy_price\":2.331,\"absolute_change\":0.403,\"percentage_change\":17.2887172887},{\"date\":\"2010-01-04\",\"fuel\":\"diesel\",\"current_price\":2.799,\"yoy_price\":2.295,\"absolute_change\":0.504,\"percentage_change\":21.9607843137},{\"date\":\"2010-01-11\",\"fuel\":\"diesel\",\"current_price\":2.8805,\"yoy_price\":2.319,\"absolute_change\":0.5615,\"percentage_change\":24.2130228547},{\"date\":\"2010-01-18\",\"fuel\":\"diesel\",\"current_price\":2.872,\"yoy_price\":2.3015,\"absolute_change\":0.5705,\"percentage_change\":24.7881816207},{\"date\":\"2010-01-25\",\"fuel\":\"diesel\",\"current_price\":2.8355,\"yoy_price\":2.273,\"absolute_change\":0.5625,\"percentage_change\":24.7470303564},{\"date\":\"2010-02-01\",\"fuel\":\"diesel\",\"current_price\":2.784,\"yoy_price\":2.251,\"absolute_change\":0.533,\"percentage_change\":23.678365171},{\"date\":\"2010-02-08\",\"fuel\":\"diesel\",\"current_price\":2.772,\"yoy_price\":2.2245,\"absolute_change\":0.5475,\"percentage_change\":24.6122724208},{\"date\":\"2010-02-15\",\"fuel\":\"diesel\",\"current_price\":2.7585,\"yoy_price\":2.1915,\"absolute_change\":0.567,\"percentage_change\":25.8726899384},{\"date\":\"2010-02-22\",\"fuel\":\"diesel\",\"current_price\":2.833,\"yoy_price\":2.134,\"absolute_change\":0.699,\"percentage_change\":32.755388941},{\"date\":\"2010-03-01\",\"fuel\":\"diesel\",\"current_price\":2.863,\"yoy_price\":2.091,\"absolute_change\":0.772,\"percentage_change\":36.9201339072},{\"date\":\"2010-03-08\",\"fuel\":\"diesel\",\"current_price\":2.905,\"yoy_price\":2.048,\"absolute_change\":0.857,\"percentage_change\":41.845703125},{\"date\":\"2010-03-15\",\"fuel\":\"diesel\",\"current_price\":2.925,\"yoy_price\":2.02,\"absolute_change\":0.905,\"percentage_change\":44.801980198},{\"date\":\"2010-03-22\",\"fuel\":\"diesel\",\"current_price\":2.9475,\"yoy_price\":2.0915,\"absolute_change\":0.856,\"percentage_change\":40.9275639493},{\"date\":\"2010-03-29\",\"fuel\":\"diesel\",\"current_price\":2.9405,\"yoy_price\":2.223,\"absolute_change\":0.7175,\"percentage_change\":32.2762033288},{\"date\":\"2010-04-05\",\"fuel\":\"diesel\",\"current_price\":3.016,\"yoy_price\":2.2305,\"absolute_change\":0.7855,\"percentage_change\":35.2163192109},{\"date\":\"2010-04-12\",\"fuel\":\"diesel\",\"current_price\":3.071,\"yoy_price\":2.2315,\"absolute_change\":0.8395,\"percentage_change\":37.6204346852},{\"date\":\"2010-04-19\",\"fuel\":\"diesel\",\"current_price\":3.076,\"yoy_price\":2.2235,\"absolute_change\":0.8525,\"percentage_change\":38.3404542388},{\"date\":\"2010-04-26\",\"fuel\":\"diesel\",\"current_price\":3.08,\"yoy_price\":2.204,\"absolute_change\":0.876,\"percentage_change\":39.7459165154},{\"date\":\"2010-05-03\",\"fuel\":\"diesel\",\"current_price\":3.124,\"yoy_price\":2.1885,\"absolute_change\":0.9355,\"percentage_change\":42.746173178},{\"date\":\"2010-05-10\",\"fuel\":\"diesel\",\"current_price\":3.129,\"yoy_price\":2.2195,\"absolute_change\":0.9095,\"percentage_change\":40.9776976797},{\"date\":\"2010-05-17\",\"fuel\":\"diesel\",\"current_price\":3.096,\"yoy_price\":2.234,\"absolute_change\":0.862,\"percentage_change\":38.5854968666},{\"date\":\"2010-05-24\",\"fuel\":\"diesel\",\"current_price\":3.023,\"yoy_price\":2.276,\"absolute_change\":0.747,\"percentage_change\":32.8207381371},{\"date\":\"2010-05-31\",\"fuel\":\"diesel\",\"current_price\":2.9815,\"yoy_price\":2.353,\"absolute_change\":0.6285,\"percentage_change\":26.7105822354},{\"date\":\"2010-06-07\",\"fuel\":\"diesel\",\"current_price\":2.9475,\"yoy_price\":2.4995,\"absolute_change\":0.448,\"percentage_change\":17.9235847169},{\"date\":\"2010-06-14\",\"fuel\":\"diesel\",\"current_price\":2.929,\"yoy_price\":2.5735,\"absolute_change\":0.3555,\"percentage_change\":13.8138721585},{\"date\":\"2010-06-21\",\"fuel\":\"diesel\",\"current_price\":2.9615,\"yoy_price\":2.6175,\"absolute_change\":0.344,\"percentage_change\":13.1423113658},{\"date\":\"2010-06-28\",\"fuel\":\"diesel\",\"current_price\":2.9565,\"yoy_price\":2.61,\"absolute_change\":0.3465,\"percentage_change\":13.275862069},{\"date\":\"2010-07-05\",\"fuel\":\"diesel\",\"current_price\":2.9245,\"yoy_price\":2.596,\"absolute_change\":0.3285,\"percentage_change\":12.6540832049},{\"date\":\"2010-07-12\",\"fuel\":\"diesel\",\"current_price\":2.9035,\"yoy_price\":2.544,\"absolute_change\":0.3595,\"percentage_change\":14.1312893082},{\"date\":\"2010-07-19\",\"fuel\":\"diesel\",\"current_price\":2.899,\"yoy_price\":2.4985,\"absolute_change\":0.4005,\"percentage_change\":16.0296177707},{\"date\":\"2010-07-26\",\"fuel\":\"diesel\",\"current_price\":2.919,\"yoy_price\":2.53,\"absolute_change\":0.389,\"percentage_change\":15.3754940711},{\"date\":\"2010-08-02\",\"fuel\":\"diesel\",\"current_price\":2.928,\"yoy_price\":2.552,\"absolute_change\":0.376,\"percentage_change\":14.7335423197},{\"date\":\"2010-08-09\",\"fuel\":\"diesel\",\"current_price\":2.991,\"yoy_price\":2.6265,\"absolute_change\":0.3645,\"percentage_change\":13.8777841234},{\"date\":\"2010-08-16\",\"fuel\":\"diesel\",\"current_price\":2.979,\"yoy_price\":2.654,\"absolute_change\":0.325,\"percentage_change\":12.2456669179},{\"date\":\"2010-08-23\",\"fuel\":\"diesel\",\"current_price\":2.957,\"yoy_price\":2.67,\"absolute_change\":0.287,\"percentage_change\":10.7490636704},{\"date\":\"2010-08-30\",\"fuel\":\"diesel\",\"current_price\":2.938,\"yoy_price\":2.6765,\"absolute_change\":0.2615,\"percentage_change\":9.7702223052},{\"date\":\"2010-09-06\",\"fuel\":\"diesel\",\"current_price\":2.931,\"yoy_price\":2.6485,\"absolute_change\":0.2825,\"percentage_change\":10.6664149519},{\"date\":\"2010-09-13\",\"fuel\":\"diesel\",\"current_price\":2.943,\"yoy_price\":2.636,\"absolute_change\":0.307,\"percentage_change\":11.6464339909},{\"date\":\"2010-09-20\",\"fuel\":\"diesel\",\"current_price\":2.96,\"yoy_price\":2.624,\"absolute_change\":0.336,\"percentage_change\":12.8048780488},{\"date\":\"2010-09-27\",\"fuel\":\"diesel\",\"current_price\":2.951,\"yoy_price\":2.6035,\"absolute_change\":0.3475,\"percentage_change\":13.3474169387},{\"date\":\"2010-10-04\",\"fuel\":\"diesel\",\"current_price\":3,\"yoy_price\":2.585,\"absolute_change\":0.415,\"percentage_change\":16.0541586074},{\"date\":\"2010-10-11\",\"fuel\":\"diesel\",\"current_price\":3.066,\"yoy_price\":2.602,\"absolute_change\":0.464,\"percentage_change\":17.8324365872},{\"date\":\"2010-10-18\",\"fuel\":\"diesel\",\"current_price\":3.073,\"yoy_price\":2.7065,\"absolute_change\":0.3665,\"percentage_change\":13.5414742287},{\"date\":\"2010-10-25\",\"fuel\":\"diesel\",\"current_price\":3.067,\"yoy_price\":2.803,\"absolute_change\":0.264,\"percentage_change\":9.4184801998},{\"date\":\"2010-11-01\",\"fuel\":\"diesel\",\"current_price\":3.067,\"yoy_price\":2.8095,\"absolute_change\":0.2575,\"percentage_change\":9.1653319096},{\"date\":\"2010-11-08\",\"fuel\":\"diesel\",\"current_price\":3.116,\"yoy_price\":2.803,\"absolute_change\":0.313,\"percentage_change\":11.1666072066},{\"date\":\"2010-11-15\",\"fuel\":\"diesel\",\"current_price\":3.184,\"yoy_price\":2.7925,\"absolute_change\":0.3915,\"percentage_change\":14.0196956132},{\"date\":\"2010-11-22\",\"fuel\":\"diesel\",\"current_price\":3.171,\"yoy_price\":2.7895,\"absolute_change\":0.3815,\"percentage_change\":13.6762860728},{\"date\":\"2010-11-29\",\"fuel\":\"diesel\",\"current_price\":3.162,\"yoy_price\":2.7775,\"absolute_change\":0.3845,\"percentage_change\":13.8433843384},{\"date\":\"2010-12-06\",\"fuel\":\"diesel\",\"current_price\":3.197,\"yoy_price\":2.7745,\"absolute_change\":0.4225,\"percentage_change\":15.2279690034},{\"date\":\"2010-12-13\",\"fuel\":\"diesel\",\"current_price\":3.231,\"yoy_price\":2.7505,\"absolute_change\":0.4805,\"percentage_change\":17.4695509907},{\"date\":\"2010-12-20\",\"fuel\":\"diesel\",\"current_price\":3.248,\"yoy_price\":2.7285,\"absolute_change\":0.5195,\"percentage_change\":19.0397654389},{\"date\":\"2010-12-27\",\"fuel\":\"diesel\",\"current_price\":3.294,\"yoy_price\":2.734,\"absolute_change\":0.56,\"percentage_change\":20.482809071},{\"date\":\"2011-01-03\",\"fuel\":\"diesel\",\"current_price\":3.331,\"yoy_price\":2.799,\"absolute_change\":0.532,\"percentage_change\":19.0067881386},{\"date\":\"2011-01-10\",\"fuel\":\"diesel\",\"current_price\":3.333,\"yoy_price\":2.8805,\"absolute_change\":0.4525,\"percentage_change\":15.709078285},{\"date\":\"2011-01-17\",\"fuel\":\"diesel\",\"current_price\":3.407,\"yoy_price\":2.872,\"absolute_change\":0.535,\"percentage_change\":18.6281337047},{\"date\":\"2011-01-24\",\"fuel\":\"diesel\",\"current_price\":3.43,\"yoy_price\":2.8355,\"absolute_change\":0.5945,\"percentage_change\":20.966319873},{\"date\":\"2011-01-31\",\"fuel\":\"diesel\",\"current_price\":3.438,\"yoy_price\":2.784,\"absolute_change\":0.654,\"percentage_change\":23.4913793103},{\"date\":\"2011-02-07\",\"fuel\":\"diesel\",\"current_price\":3.513,\"yoy_price\":2.772,\"absolute_change\":0.741,\"percentage_change\":26.7316017316},{\"date\":\"2011-02-14\",\"fuel\":\"diesel\",\"current_price\":3.534,\"yoy_price\":2.7585,\"absolute_change\":0.7755,\"percentage_change\":28.1131049483},{\"date\":\"2011-02-21\",\"fuel\":\"diesel\",\"current_price\":3.573,\"yoy_price\":2.833,\"absolute_change\":0.74,\"percentage_change\":26.1207200847},{\"date\":\"2011-02-28\",\"fuel\":\"diesel\",\"current_price\":3.716,\"yoy_price\":2.863,\"absolute_change\":0.853,\"percentage_change\":29.793922459},{\"date\":\"2011-03-07\",\"fuel\":\"diesel\",\"current_price\":3.871,\"yoy_price\":2.905,\"absolute_change\":0.966,\"percentage_change\":33.2530120482},{\"date\":\"2011-03-14\",\"fuel\":\"diesel\",\"current_price\":3.908,\"yoy_price\":2.925,\"absolute_change\":0.983,\"percentage_change\":33.6068376068},{\"date\":\"2011-03-21\",\"fuel\":\"diesel\",\"current_price\":3.907,\"yoy_price\":2.9475,\"absolute_change\":0.9595,\"percentage_change\":32.5530110263},{\"date\":\"2011-03-28\",\"fuel\":\"diesel\",\"current_price\":3.932,\"yoy_price\":2.9405,\"absolute_change\":0.9915,\"percentage_change\":33.7187553137},{\"date\":\"2011-04-04\",\"fuel\":\"diesel\",\"current_price\":3.976,\"yoy_price\":3.016,\"absolute_change\":0.96,\"percentage_change\":31.8302387268},{\"date\":\"2011-04-11\",\"fuel\":\"diesel\",\"current_price\":4.078,\"yoy_price\":3.071,\"absolute_change\":1.007,\"percentage_change\":32.7906219472},{\"date\":\"2011-04-18\",\"fuel\":\"diesel\",\"current_price\":4.105,\"yoy_price\":3.076,\"absolute_change\":1.029,\"percentage_change\":33.4525357607},{\"date\":\"2011-04-25\",\"fuel\":\"diesel\",\"current_price\":4.098,\"yoy_price\":3.08,\"absolute_change\":1.018,\"percentage_change\":33.0519480519},{\"date\":\"2011-05-02\",\"fuel\":\"diesel\",\"current_price\":4.124,\"yoy_price\":3.124,\"absolute_change\":1,\"percentage_change\":32.0102432778},{\"date\":\"2011-05-09\",\"fuel\":\"diesel\",\"current_price\":4.104,\"yoy_price\":3.129,\"absolute_change\":0.975,\"percentage_change\":31.1601150527},{\"date\":\"2011-05-16\",\"fuel\":\"diesel\",\"current_price\":4.061,\"yoy_price\":3.096,\"absolute_change\":0.965,\"percentage_change\":31.169250646},{\"date\":\"2011-05-23\",\"fuel\":\"diesel\",\"current_price\":3.997,\"yoy_price\":3.023,\"absolute_change\":0.974,\"percentage_change\":32.2196493549},{\"date\":\"2011-05-30\",\"fuel\":\"diesel\",\"current_price\":3.948,\"yoy_price\":2.9815,\"absolute_change\":0.9665,\"percentage_change\":32.4165688412},{\"date\":\"2011-06-06\",\"fuel\":\"diesel\",\"current_price\":3.94,\"yoy_price\":2.9475,\"absolute_change\":0.9925,\"percentage_change\":33.6726039016},{\"date\":\"2011-06-13\",\"fuel\":\"diesel\",\"current_price\":3.954,\"yoy_price\":2.929,\"absolute_change\":1.025,\"percentage_change\":34.9948787982},{\"date\":\"2011-06-20\",\"fuel\":\"diesel\",\"current_price\":3.95,\"yoy_price\":2.9615,\"absolute_change\":0.9885,\"percentage_change\":33.3783555631},{\"date\":\"2011-06-27\",\"fuel\":\"diesel\",\"current_price\":3.888,\"yoy_price\":2.9565,\"absolute_change\":0.9315,\"percentage_change\":31.5068493151},{\"date\":\"2011-07-04\",\"fuel\":\"diesel\",\"current_price\":3.85,\"yoy_price\":2.9245,\"absolute_change\":0.9255,\"percentage_change\":31.6464352881},{\"date\":\"2011-07-11\",\"fuel\":\"diesel\",\"current_price\":3.899,\"yoy_price\":2.9035,\"absolute_change\":0.9955,\"percentage_change\":34.2862063027},{\"date\":\"2011-07-18\",\"fuel\":\"diesel\",\"current_price\":3.923,\"yoy_price\":2.899,\"absolute_change\":1.024,\"percentage_change\":35.3225250086},{\"date\":\"2011-07-25\",\"fuel\":\"diesel\",\"current_price\":3.949,\"yoy_price\":2.919,\"absolute_change\":1.03,\"percentage_change\":35.2860568688},{\"date\":\"2011-08-01\",\"fuel\":\"diesel\",\"current_price\":3.937,\"yoy_price\":2.928,\"absolute_change\":1.009,\"percentage_change\":34.4603825137},{\"date\":\"2011-08-08\",\"fuel\":\"diesel\",\"current_price\":3.897,\"yoy_price\":2.991,\"absolute_change\":0.906,\"percentage_change\":30.2908726179},{\"date\":\"2011-08-15\",\"fuel\":\"diesel\",\"current_price\":3.835,\"yoy_price\":2.979,\"absolute_change\":0.856,\"percentage_change\":28.7344746559},{\"date\":\"2011-08-22\",\"fuel\":\"diesel\",\"current_price\":3.81,\"yoy_price\":2.957,\"absolute_change\":0.853,\"percentage_change\":28.8468041934},{\"date\":\"2011-08-29\",\"fuel\":\"diesel\",\"current_price\":3.82,\"yoy_price\":2.938,\"absolute_change\":0.882,\"percentage_change\":30.0204220558},{\"date\":\"2011-09-05\",\"fuel\":\"diesel\",\"current_price\":3.868,\"yoy_price\":2.931,\"absolute_change\":0.937,\"percentage_change\":31.9686113954},{\"date\":\"2011-09-12\",\"fuel\":\"diesel\",\"current_price\":3.862,\"yoy_price\":2.943,\"absolute_change\":0.919,\"percentage_change\":31.2266394835},{\"date\":\"2011-09-19\",\"fuel\":\"diesel\",\"current_price\":3.833,\"yoy_price\":2.96,\"absolute_change\":0.873,\"percentage_change\":29.4932432432},{\"date\":\"2011-09-26\",\"fuel\":\"diesel\",\"current_price\":3.786,\"yoy_price\":2.951,\"absolute_change\":0.835,\"percentage_change\":28.2954930532},{\"date\":\"2011-10-03\",\"fuel\":\"diesel\",\"current_price\":3.749,\"yoy_price\":3,\"absolute_change\":0.749,\"percentage_change\":24.9666666667},{\"date\":\"2011-10-10\",\"fuel\":\"diesel\",\"current_price\":3.721,\"yoy_price\":3.066,\"absolute_change\":0.655,\"percentage_change\":21.3633398565},{\"date\":\"2011-10-17\",\"fuel\":\"diesel\",\"current_price\":3.801,\"yoy_price\":3.073,\"absolute_change\":0.728,\"percentage_change\":23.6902050114},{\"date\":\"2011-10-24\",\"fuel\":\"diesel\",\"current_price\":3.825,\"yoy_price\":3.067,\"absolute_change\":0.758,\"percentage_change\":24.7147049234},{\"date\":\"2011-10-31\",\"fuel\":\"diesel\",\"current_price\":3.892,\"yoy_price\":3.067,\"absolute_change\":0.825,\"percentage_change\":26.8992500815},{\"date\":\"2011-11-07\",\"fuel\":\"diesel\",\"current_price\":3.887,\"yoy_price\":3.116,\"absolute_change\":0.771,\"percentage_change\":24.7432605905},{\"date\":\"2011-11-14\",\"fuel\":\"diesel\",\"current_price\":3.987,\"yoy_price\":3.184,\"absolute_change\":0.803,\"percentage_change\":25.2198492462},{\"date\":\"2011-11-21\",\"fuel\":\"diesel\",\"current_price\":4.01,\"yoy_price\":3.171,\"absolute_change\":0.839,\"percentage_change\":26.458530432},{\"date\":\"2011-11-28\",\"fuel\":\"diesel\",\"current_price\":3.964,\"yoy_price\":3.162,\"absolute_change\":0.802,\"percentage_change\":25.3636938646},{\"date\":\"2011-12-05\",\"fuel\":\"diesel\",\"current_price\":3.931,\"yoy_price\":3.197,\"absolute_change\":0.734,\"percentage_change\":22.9590240851},{\"date\":\"2011-12-12\",\"fuel\":\"diesel\",\"current_price\":3.894,\"yoy_price\":3.231,\"absolute_change\":0.663,\"percentage_change\":20.5199628598},{\"date\":\"2011-12-19\",\"fuel\":\"diesel\",\"current_price\":3.828,\"yoy_price\":3.248,\"absolute_change\":0.58,\"percentage_change\":17.8571428571},{\"date\":\"2011-12-26\",\"fuel\":\"diesel\",\"current_price\":3.791,\"yoy_price\":3.294,\"absolute_change\":0.497,\"percentage_change\":15.0880388585},{\"date\":\"2012-01-02\",\"fuel\":\"diesel\",\"current_price\":3.783,\"yoy_price\":3.331,\"absolute_change\":0.452,\"percentage_change\":13.5694986491},{\"date\":\"2012-01-09\",\"fuel\":\"diesel\",\"current_price\":3.828,\"yoy_price\":3.333,\"absolute_change\":0.495,\"percentage_change\":14.8514851485},{\"date\":\"2012-01-16\",\"fuel\":\"diesel\",\"current_price\":3.854,\"yoy_price\":3.407,\"absolute_change\":0.447,\"percentage_change\":13.1200469621},{\"date\":\"2012-01-23\",\"fuel\":\"diesel\",\"current_price\":3.848,\"yoy_price\":3.43,\"absolute_change\":0.418,\"percentage_change\":12.1865889213},{\"date\":\"2012-01-30\",\"fuel\":\"diesel\",\"current_price\":3.85,\"yoy_price\":3.438,\"absolute_change\":0.412,\"percentage_change\":11.9837114602},{\"date\":\"2012-02-06\",\"fuel\":\"diesel\",\"current_price\":3.856,\"yoy_price\":3.513,\"absolute_change\":0.343,\"percentage_change\":9.7637346997},{\"date\":\"2012-02-13\",\"fuel\":\"diesel\",\"current_price\":3.943,\"yoy_price\":3.534,\"absolute_change\":0.409,\"percentage_change\":11.5732880589},{\"date\":\"2012-02-20\",\"fuel\":\"diesel\",\"current_price\":3.96,\"yoy_price\":3.573,\"absolute_change\":0.387,\"percentage_change\":10.8312342569},{\"date\":\"2012-02-27\",\"fuel\":\"diesel\",\"current_price\":4.051,\"yoy_price\":3.716,\"absolute_change\":0.335,\"percentage_change\":9.0150699677},{\"date\":\"2012-03-05\",\"fuel\":\"diesel\",\"current_price\":4.094,\"yoy_price\":3.871,\"absolute_change\":0.223,\"percentage_change\":5.7607853268},{\"date\":\"2012-03-12\",\"fuel\":\"diesel\",\"current_price\":4.123,\"yoy_price\":3.908,\"absolute_change\":0.215,\"percentage_change\":5.5015353122},{\"date\":\"2012-03-19\",\"fuel\":\"diesel\",\"current_price\":4.142,\"yoy_price\":3.907,\"absolute_change\":0.235,\"percentage_change\":6.0148451497},{\"date\":\"2012-03-26\",\"fuel\":\"diesel\",\"current_price\":4.147,\"yoy_price\":3.932,\"absolute_change\":0.215,\"percentage_change\":5.4679552391},{\"date\":\"2012-04-02\",\"fuel\":\"diesel\",\"current_price\":4.142,\"yoy_price\":3.976,\"absolute_change\":0.166,\"percentage_change\":4.1750503018},{\"date\":\"2012-04-09\",\"fuel\":\"diesel\",\"current_price\":4.148,\"yoy_price\":4.078,\"absolute_change\":0.07,\"percentage_change\":1.7165277097},{\"date\":\"2012-04-16\",\"fuel\":\"diesel\",\"current_price\":4.127,\"yoy_price\":4.105,\"absolute_change\":0.022,\"percentage_change\":0.5359317905},{\"date\":\"2012-04-23\",\"fuel\":\"diesel\",\"current_price\":4.085,\"yoy_price\":4.098,\"absolute_change\":-0.013,\"percentage_change\":-0.3172279161},{\"date\":\"2012-04-30\",\"fuel\":\"diesel\",\"current_price\":4.073,\"yoy_price\":4.124,\"absolute_change\":-0.051,\"percentage_change\":-1.2366634336},{\"date\":\"2012-05-07\",\"fuel\":\"diesel\",\"current_price\":4.057,\"yoy_price\":4.104,\"absolute_change\":-0.047,\"percentage_change\":-1.1452241715},{\"date\":\"2012-05-14\",\"fuel\":\"diesel\",\"current_price\":4.004,\"yoy_price\":4.061,\"absolute_change\":-0.057,\"percentage_change\":-1.4035951736},{\"date\":\"2012-05-21\",\"fuel\":\"diesel\",\"current_price\":3.956,\"yoy_price\":3.997,\"absolute_change\":-0.041,\"percentage_change\":-1.025769327},{\"date\":\"2012-05-28\",\"fuel\":\"diesel\",\"current_price\":3.897,\"yoy_price\":3.948,\"absolute_change\":-0.051,\"percentage_change\":-1.2917933131},{\"date\":\"2012-06-04\",\"fuel\":\"diesel\",\"current_price\":3.846,\"yoy_price\":3.94,\"absolute_change\":-0.094,\"percentage_change\":-2.385786802},{\"date\":\"2012-06-11\",\"fuel\":\"diesel\",\"current_price\":3.781,\"yoy_price\":3.954,\"absolute_change\":-0.173,\"percentage_change\":-4.3753161356},{\"date\":\"2012-06-18\",\"fuel\":\"diesel\",\"current_price\":3.729,\"yoy_price\":3.95,\"absolute_change\":-0.221,\"percentage_change\":-5.5949367089},{\"date\":\"2012-06-25\",\"fuel\":\"diesel\",\"current_price\":3.678,\"yoy_price\":3.888,\"absolute_change\":-0.21,\"percentage_change\":-5.4012345679},{\"date\":\"2012-07-02\",\"fuel\":\"diesel\",\"current_price\":3.648,\"yoy_price\":3.85,\"absolute_change\":-0.202,\"percentage_change\":-5.2467532468},{\"date\":\"2012-07-09\",\"fuel\":\"diesel\",\"current_price\":3.683,\"yoy_price\":3.899,\"absolute_change\":-0.216,\"percentage_change\":-5.539882021},{\"date\":\"2012-07-16\",\"fuel\":\"diesel\",\"current_price\":3.695,\"yoy_price\":3.923,\"absolute_change\":-0.228,\"percentage_change\":-5.8118786643},{\"date\":\"2012-07-23\",\"fuel\":\"diesel\",\"current_price\":3.783,\"yoy_price\":3.949,\"absolute_change\":-0.166,\"percentage_change\":-4.203595847},{\"date\":\"2012-07-30\",\"fuel\":\"diesel\",\"current_price\":3.796,\"yoy_price\":3.937,\"absolute_change\":-0.141,\"percentage_change\":-3.5814071628},{\"date\":\"2012-08-06\",\"fuel\":\"diesel\",\"current_price\":3.85,\"yoy_price\":3.897,\"absolute_change\":-0.047,\"percentage_change\":-1.2060559405},{\"date\":\"2012-08-13\",\"fuel\":\"diesel\",\"current_price\":3.965,\"yoy_price\":3.835,\"absolute_change\":0.13,\"percentage_change\":3.3898305085},{\"date\":\"2012-08-20\",\"fuel\":\"diesel\",\"current_price\":4.026,\"yoy_price\":3.81,\"absolute_change\":0.216,\"percentage_change\":5.6692913386},{\"date\":\"2012-08-27\",\"fuel\":\"diesel\",\"current_price\":4.089,\"yoy_price\":3.82,\"absolute_change\":0.269,\"percentage_change\":7.0418848168},{\"date\":\"2012-09-03\",\"fuel\":\"diesel\",\"current_price\":4.127,\"yoy_price\":3.868,\"absolute_change\":0.259,\"percentage_change\":6.695966908},{\"date\":\"2012-09-10\",\"fuel\":\"diesel\",\"current_price\":4.132,\"yoy_price\":3.862,\"absolute_change\":0.27,\"percentage_change\":6.9911962714},{\"date\":\"2012-09-17\",\"fuel\":\"diesel\",\"current_price\":4.135,\"yoy_price\":3.833,\"absolute_change\":0.302,\"percentage_change\":7.8789459953},{\"date\":\"2012-09-24\",\"fuel\":\"diesel\",\"current_price\":4.086,\"yoy_price\":3.786,\"absolute_change\":0.3,\"percentage_change\":7.9239302694},{\"date\":\"2012-10-01\",\"fuel\":\"diesel\",\"current_price\":4.079,\"yoy_price\":3.749,\"absolute_change\":0.33,\"percentage_change\":8.8023472926},{\"date\":\"2012-10-08\",\"fuel\":\"diesel\",\"current_price\":4.094,\"yoy_price\":3.721,\"absolute_change\":0.373,\"percentage_change\":10.0241870465},{\"date\":\"2012-10-15\",\"fuel\":\"diesel\",\"current_price\":4.15,\"yoy_price\":3.801,\"absolute_change\":0.349,\"percentage_change\":9.1817942647},{\"date\":\"2012-10-22\",\"fuel\":\"diesel\",\"current_price\":4.116,\"yoy_price\":3.825,\"absolute_change\":0.291,\"percentage_change\":7.6078431373},{\"date\":\"2012-10-29\",\"fuel\":\"diesel\",\"current_price\":4.03,\"yoy_price\":3.892,\"absolute_change\":0.138,\"percentage_change\":3.5457348407},{\"date\":\"2012-11-05\",\"fuel\":\"diesel\",\"current_price\":4.01,\"yoy_price\":3.887,\"absolute_change\":0.123,\"percentage_change\":3.1643941343},{\"date\":\"2012-11-12\",\"fuel\":\"diesel\",\"current_price\":3.98,\"yoy_price\":3.987,\"absolute_change\":-0.007,\"percentage_change\":-0.1755706045},{\"date\":\"2012-11-19\",\"fuel\":\"diesel\",\"current_price\":3.976,\"yoy_price\":4.01,\"absolute_change\":-0.034,\"percentage_change\":-0.8478802993},{\"date\":\"2012-11-26\",\"fuel\":\"diesel\",\"current_price\":4.034,\"yoy_price\":3.964,\"absolute_change\":0.07,\"percentage_change\":1.7658930373},{\"date\":\"2012-12-03\",\"fuel\":\"diesel\",\"current_price\":4.027,\"yoy_price\":3.931,\"absolute_change\":0.096,\"percentage_change\":2.4421266853},{\"date\":\"2012-12-10\",\"fuel\":\"diesel\",\"current_price\":3.991,\"yoy_price\":3.894,\"absolute_change\":0.097,\"percentage_change\":2.491011813},{\"date\":\"2012-12-17\",\"fuel\":\"diesel\",\"current_price\":3.945,\"yoy_price\":3.828,\"absolute_change\":0.117,\"percentage_change\":3.0564263323},{\"date\":\"2012-12-24\",\"fuel\":\"diesel\",\"current_price\":3.923,\"yoy_price\":3.791,\"absolute_change\":0.132,\"percentage_change\":3.4819308889},{\"date\":\"2012-12-31\",\"fuel\":\"diesel\",\"current_price\":3.918,\"yoy_price\":3.783,\"absolute_change\":0.135,\"percentage_change\":3.5685963521},{\"date\":\"2013-01-07\",\"fuel\":\"diesel\",\"current_price\":3.911,\"yoy_price\":3.828,\"absolute_change\":0.083,\"percentage_change\":2.1682340648},{\"date\":\"2013-01-14\",\"fuel\":\"diesel\",\"current_price\":3.894,\"yoy_price\":3.854,\"absolute_change\":0.04,\"percentage_change\":1.0378827193},{\"date\":\"2013-01-21\",\"fuel\":\"diesel\",\"current_price\":3.902,\"yoy_price\":3.848,\"absolute_change\":0.054,\"percentage_change\":1.4033264033},{\"date\":\"2013-01-28\",\"fuel\":\"diesel\",\"current_price\":3.927,\"yoy_price\":3.85,\"absolute_change\":0.077,\"percentage_change\":2},{\"date\":\"2013-02-04\",\"fuel\":\"diesel\",\"current_price\":4.022,\"yoy_price\":3.856,\"absolute_change\":0.166,\"percentage_change\":4.3049792531},{\"date\":\"2013-02-11\",\"fuel\":\"diesel\",\"current_price\":4.104,\"yoy_price\":3.943,\"absolute_change\":0.161,\"percentage_change\":4.0831853918},{\"date\":\"2013-02-18\",\"fuel\":\"diesel\",\"current_price\":4.157,\"yoy_price\":3.96,\"absolute_change\":0.197,\"percentage_change\":4.9747474747},{\"date\":\"2013-02-25\",\"fuel\":\"diesel\",\"current_price\":4.159,\"yoy_price\":4.051,\"absolute_change\":0.108,\"percentage_change\":2.666008393},{\"date\":\"2013-03-04\",\"fuel\":\"diesel\",\"current_price\":4.13,\"yoy_price\":4.094,\"absolute_change\":0.036,\"percentage_change\":0.8793356131},{\"date\":\"2013-03-11\",\"fuel\":\"diesel\",\"current_price\":4.088,\"yoy_price\":4.123,\"absolute_change\":-0.035,\"percentage_change\":-0.8488964346},{\"date\":\"2013-03-18\",\"fuel\":\"diesel\",\"current_price\":4.047,\"yoy_price\":4.142,\"absolute_change\":-0.095,\"percentage_change\":-2.2935779817},{\"date\":\"2013-03-25\",\"fuel\":\"diesel\",\"current_price\":4.006,\"yoy_price\":4.147,\"absolute_change\":-0.141,\"percentage_change\":-3.4000482276},{\"date\":\"2013-04-01\",\"fuel\":\"diesel\",\"current_price\":3.993,\"yoy_price\":4.142,\"absolute_change\":-0.149,\"percentage_change\":-3.5972959923},{\"date\":\"2013-04-08\",\"fuel\":\"diesel\",\"current_price\":3.977,\"yoy_price\":4.148,\"absolute_change\":-0.171,\"percentage_change\":-4.1224686596},{\"date\":\"2013-04-15\",\"fuel\":\"diesel\",\"current_price\":3.942,\"yoy_price\":4.127,\"absolute_change\":-0.185,\"percentage_change\":-4.4826750666},{\"date\":\"2013-04-22\",\"fuel\":\"diesel\",\"current_price\":3.887,\"yoy_price\":4.085,\"absolute_change\":-0.198,\"percentage_change\":-4.847001224},{\"date\":\"2013-04-29\",\"fuel\":\"diesel\",\"current_price\":3.851,\"yoy_price\":4.073,\"absolute_change\":-0.222,\"percentage_change\":-5.4505278664},{\"date\":\"2013-05-06\",\"fuel\":\"diesel\",\"current_price\":3.845,\"yoy_price\":4.057,\"absolute_change\":-0.212,\"percentage_change\":-5.2255361104},{\"date\":\"2013-05-13\",\"fuel\":\"diesel\",\"current_price\":3.866,\"yoy_price\":4.004,\"absolute_change\":-0.138,\"percentage_change\":-3.4465534466},{\"date\":\"2013-05-20\",\"fuel\":\"diesel\",\"current_price\":3.89,\"yoy_price\":3.956,\"absolute_change\":-0.066,\"percentage_change\":-1.6683518706},{\"date\":\"2013-05-27\",\"fuel\":\"diesel\",\"current_price\":3.88,\"yoy_price\":3.897,\"absolute_change\":-0.017,\"percentage_change\":-0.4362329997},{\"date\":\"2013-06-03\",\"fuel\":\"diesel\",\"current_price\":3.869,\"yoy_price\":3.846,\"absolute_change\":0.023,\"percentage_change\":0.598023921},{\"date\":\"2013-06-10\",\"fuel\":\"diesel\",\"current_price\":3.849,\"yoy_price\":3.781,\"absolute_change\":0.068,\"percentage_change\":1.7984660143},{\"date\":\"2013-06-17\",\"fuel\":\"diesel\",\"current_price\":3.841,\"yoy_price\":3.729,\"absolute_change\":0.112,\"percentage_change\":3.0034861893},{\"date\":\"2013-06-24\",\"fuel\":\"diesel\",\"current_price\":3.838,\"yoy_price\":3.678,\"absolute_change\":0.16,\"percentage_change\":4.3501903208},{\"date\":\"2013-07-01\",\"fuel\":\"diesel\",\"current_price\":3.817,\"yoy_price\":3.648,\"absolute_change\":0.169,\"percentage_change\":4.6326754386},{\"date\":\"2013-07-08\",\"fuel\":\"diesel\",\"current_price\":3.828,\"yoy_price\":3.683,\"absolute_change\":0.145,\"percentage_change\":3.937007874},{\"date\":\"2013-07-15\",\"fuel\":\"diesel\",\"current_price\":3.867,\"yoy_price\":3.695,\"absolute_change\":0.172,\"percentage_change\":4.6549391069},{\"date\":\"2013-07-22\",\"fuel\":\"diesel\",\"current_price\":3.903,\"yoy_price\":3.783,\"absolute_change\":0.12,\"percentage_change\":3.1720856463},{\"date\":\"2013-07-29\",\"fuel\":\"diesel\",\"current_price\":3.915,\"yoy_price\":3.796,\"absolute_change\":0.119,\"percentage_change\":3.1348788198},{\"date\":\"2013-08-05\",\"fuel\":\"diesel\",\"current_price\":3.909,\"yoy_price\":3.85,\"absolute_change\":0.059,\"percentage_change\":1.5324675325},{\"date\":\"2013-08-12\",\"fuel\":\"diesel\",\"current_price\":3.896,\"yoy_price\":3.965,\"absolute_change\":-0.069,\"percentage_change\":-1.7402269861},{\"date\":\"2013-08-19\",\"fuel\":\"diesel\",\"current_price\":3.9,\"yoy_price\":4.026,\"absolute_change\":-0.126,\"percentage_change\":-3.129657228},{\"date\":\"2013-08-26\",\"fuel\":\"diesel\",\"current_price\":3.913,\"yoy_price\":4.089,\"absolute_change\":-0.176,\"percentage_change\":-4.3042308633},{\"date\":\"2013-09-02\",\"fuel\":\"diesel\",\"current_price\":3.981,\"yoy_price\":4.127,\"absolute_change\":-0.146,\"percentage_change\":-3.5376787012},{\"date\":\"2013-09-09\",\"fuel\":\"diesel\",\"current_price\":3.981,\"yoy_price\":4.132,\"absolute_change\":-0.151,\"percentage_change\":-3.6544046467},{\"date\":\"2013-09-16\",\"fuel\":\"diesel\",\"current_price\":3.974,\"yoy_price\":4.135,\"absolute_change\":-0.161,\"percentage_change\":-3.8935912938},{\"date\":\"2013-09-23\",\"fuel\":\"diesel\",\"current_price\":3.949,\"yoy_price\":4.086,\"absolute_change\":-0.137,\"percentage_change\":-3.3529123837},{\"date\":\"2013-09-30\",\"fuel\":\"diesel\",\"current_price\":3.919,\"yoy_price\":4.079,\"absolute_change\":-0.16,\"percentage_change\":-3.9225300319},{\"date\":\"2013-10-07\",\"fuel\":\"diesel\",\"current_price\":3.897,\"yoy_price\":4.094,\"absolute_change\":-0.197,\"percentage_change\":-4.8119198828},{\"date\":\"2013-10-14\",\"fuel\":\"diesel\",\"current_price\":3.886,\"yoy_price\":4.15,\"absolute_change\":-0.264,\"percentage_change\":-6.3614457831},{\"date\":\"2013-10-21\",\"fuel\":\"diesel\",\"current_price\":3.886,\"yoy_price\":4.116,\"absolute_change\":-0.23,\"percentage_change\":-5.5879494655},{\"date\":\"2013-10-28\",\"fuel\":\"diesel\",\"current_price\":3.87,\"yoy_price\":4.03,\"absolute_change\":-0.16,\"percentage_change\":-3.9702233251},{\"date\":\"2013-11-04\",\"fuel\":\"diesel\",\"current_price\":3.857,\"yoy_price\":4.01,\"absolute_change\":-0.153,\"percentage_change\":-3.8154613466},{\"date\":\"2013-11-11\",\"fuel\":\"diesel\",\"current_price\":3.832,\"yoy_price\":3.98,\"absolute_change\":-0.148,\"percentage_change\":-3.7185929648},{\"date\":\"2013-11-18\",\"fuel\":\"diesel\",\"current_price\":3.822,\"yoy_price\":3.976,\"absolute_change\":-0.154,\"percentage_change\":-3.8732394366},{\"date\":\"2013-11-25\",\"fuel\":\"diesel\",\"current_price\":3.844,\"yoy_price\":4.034,\"absolute_change\":-0.19,\"percentage_change\":-4.709965295},{\"date\":\"2013-12-02\",\"fuel\":\"diesel\",\"current_price\":3.883,\"yoy_price\":4.027,\"absolute_change\":-0.144,\"percentage_change\":-3.5758629253},{\"date\":\"2013-12-09\",\"fuel\":\"diesel\",\"current_price\":3.879,\"yoy_price\":3.991,\"absolute_change\":-0.112,\"percentage_change\":-2.806314207},{\"date\":\"2013-12-16\",\"fuel\":\"diesel\",\"current_price\":3.871,\"yoy_price\":3.945,\"absolute_change\":-0.074,\"percentage_change\":-1.875792142},{\"date\":\"2013-12-23\",\"fuel\":\"diesel\",\"current_price\":3.873,\"yoy_price\":3.923,\"absolute_change\":-0.05,\"percentage_change\":-1.2745347948},{\"date\":\"2013-12-30\",\"fuel\":\"diesel\",\"current_price\":3.903,\"yoy_price\":3.918,\"absolute_change\":-0.015,\"percentage_change\":-0.382848392},{\"date\":\"2014-01-06\",\"fuel\":\"diesel\",\"current_price\":3.91,\"yoy_price\":3.911,\"absolute_change\":-0.001,\"percentage_change\":-0.0255689082},{\"date\":\"2014-01-13\",\"fuel\":\"diesel\",\"current_price\":3.886,\"yoy_price\":3.894,\"absolute_change\":-0.008,\"percentage_change\":-0.2054442732},{\"date\":\"2014-01-20\",\"fuel\":\"diesel\",\"current_price\":3.873,\"yoy_price\":3.902,\"absolute_change\":-0.029,\"percentage_change\":-0.743208611},{\"date\":\"2014-01-27\",\"fuel\":\"diesel\",\"current_price\":3.904,\"yoy_price\":3.927,\"absolute_change\":-0.023,\"percentage_change\":-0.585688821},{\"date\":\"2014-02-03\",\"fuel\":\"diesel\",\"current_price\":3.951,\"yoy_price\":4.022,\"absolute_change\":-0.071,\"percentage_change\":-1.7652909},{\"date\":\"2014-02-10\",\"fuel\":\"diesel\",\"current_price\":3.977,\"yoy_price\":4.104,\"absolute_change\":-0.127,\"percentage_change\":-3.0945419103},{\"date\":\"2014-02-17\",\"fuel\":\"diesel\",\"current_price\":3.989,\"yoy_price\":4.157,\"absolute_change\":-0.168,\"percentage_change\":-4.0413759923},{\"date\":\"2014-02-24\",\"fuel\":\"diesel\",\"current_price\":4.017,\"yoy_price\":4.159,\"absolute_change\":-0.142,\"percentage_change\":-3.4142822794},{\"date\":\"2014-03-03\",\"fuel\":\"diesel\",\"current_price\":4.016,\"yoy_price\":4.13,\"absolute_change\":-0.114,\"percentage_change\":-2.7602905569},{\"date\":\"2014-03-10\",\"fuel\":\"diesel\",\"current_price\":4.021,\"yoy_price\":4.088,\"absolute_change\":-0.067,\"percentage_change\":-1.6389432485},{\"date\":\"2014-03-17\",\"fuel\":\"diesel\",\"current_price\":4.003,\"yoy_price\":4.047,\"absolute_change\":-0.044,\"percentage_change\":-1.087225105},{\"date\":\"2014-03-24\",\"fuel\":\"diesel\",\"current_price\":3.988,\"yoy_price\":4.006,\"absolute_change\":-0.018,\"percentage_change\":-0.449326011},{\"date\":\"2014-03-31\",\"fuel\":\"diesel\",\"current_price\":3.975,\"yoy_price\":3.993,\"absolute_change\":-0.018,\"percentage_change\":-0.4507888805},{\"date\":\"2014-04-07\",\"fuel\":\"diesel\",\"current_price\":3.959,\"yoy_price\":3.977,\"absolute_change\":-0.018,\"percentage_change\":-0.4526024642},{\"date\":\"2014-04-14\",\"fuel\":\"diesel\",\"current_price\":3.952,\"yoy_price\":3.942,\"absolute_change\":0.01,\"percentage_change\":0.2536783359},{\"date\":\"2014-04-21\",\"fuel\":\"diesel\",\"current_price\":3.971,\"yoy_price\":3.887,\"absolute_change\":0.084,\"percentage_change\":2.1610496527},{\"date\":\"2014-04-28\",\"fuel\":\"diesel\",\"current_price\":3.975,\"yoy_price\":3.851,\"absolute_change\":0.124,\"percentage_change\":3.219942872},{\"date\":\"2014-05-05\",\"fuel\":\"diesel\",\"current_price\":3.964,\"yoy_price\":3.845,\"absolute_change\":0.119,\"percentage_change\":3.0949284785},{\"date\":\"2014-05-12\",\"fuel\":\"diesel\",\"current_price\":3.948,\"yoy_price\":3.866,\"absolute_change\":0.082,\"percentage_change\":2.1210553544},{\"date\":\"2014-05-19\",\"fuel\":\"diesel\",\"current_price\":3.934,\"yoy_price\":3.89,\"absolute_change\":0.044,\"percentage_change\":1.1311053985},{\"date\":\"2014-05-26\",\"fuel\":\"diesel\",\"current_price\":3.925,\"yoy_price\":3.88,\"absolute_change\":0.045,\"percentage_change\":1.1597938144},{\"date\":\"2014-06-02\",\"fuel\":\"diesel\",\"current_price\":3.918,\"yoy_price\":3.869,\"absolute_change\":0.049,\"percentage_change\":1.2664771259},{\"date\":\"2014-06-09\",\"fuel\":\"diesel\",\"current_price\":3.892,\"yoy_price\":3.849,\"absolute_change\":0.043,\"percentage_change\":1.1171732918},{\"date\":\"2014-06-16\",\"fuel\":\"diesel\",\"current_price\":3.882,\"yoy_price\":3.841,\"absolute_change\":0.041,\"percentage_change\":1.0674303567},{\"date\":\"2014-06-23\",\"fuel\":\"diesel\",\"current_price\":3.919,\"yoy_price\":3.838,\"absolute_change\":0.081,\"percentage_change\":2.1104742053},{\"date\":\"2014-06-30\",\"fuel\":\"diesel\",\"current_price\":3.92,\"yoy_price\":3.817,\"absolute_change\":0.103,\"percentage_change\":2.6984542835},{\"date\":\"2014-07-07\",\"fuel\":\"diesel\",\"current_price\":3.913,\"yoy_price\":3.828,\"absolute_change\":0.085,\"percentage_change\":2.2204806688},{\"date\":\"2014-07-14\",\"fuel\":\"diesel\",\"current_price\":3.894,\"yoy_price\":3.867,\"absolute_change\":0.027,\"percentage_change\":0.6982156711},{\"date\":\"2014-07-21\",\"fuel\":\"diesel\",\"current_price\":3.869,\"yoy_price\":3.903,\"absolute_change\":-0.034,\"percentage_change\":-0.8711247758},{\"date\":\"2014-07-28\",\"fuel\":\"diesel\",\"current_price\":3.858,\"yoy_price\":3.915,\"absolute_change\":-0.057,\"percentage_change\":-1.4559386973},{\"date\":\"2014-08-04\",\"fuel\":\"diesel\",\"current_price\":3.853,\"yoy_price\":3.909,\"absolute_change\":-0.056,\"percentage_change\":-1.4325914556},{\"date\":\"2014-08-11\",\"fuel\":\"diesel\",\"current_price\":3.843,\"yoy_price\":3.896,\"absolute_change\":-0.053,\"percentage_change\":-1.3603696099},{\"date\":\"2014-08-18\",\"fuel\":\"diesel\",\"current_price\":3.835,\"yoy_price\":3.9,\"absolute_change\":-0.065,\"percentage_change\":-1.6666666667},{\"date\":\"2014-08-25\",\"fuel\":\"diesel\",\"current_price\":3.821,\"yoy_price\":3.913,\"absolute_change\":-0.092,\"percentage_change\":-2.3511372349},{\"date\":\"2014-09-01\",\"fuel\":\"diesel\",\"current_price\":3.814,\"yoy_price\":3.981,\"absolute_change\":-0.167,\"percentage_change\":-4.194925898},{\"date\":\"2014-09-08\",\"fuel\":\"diesel\",\"current_price\":3.814,\"yoy_price\":3.981,\"absolute_change\":-0.167,\"percentage_change\":-4.194925898},{\"date\":\"2014-09-15\",\"fuel\":\"diesel\",\"current_price\":3.801,\"yoy_price\":3.974,\"absolute_change\":-0.173,\"percentage_change\":-4.3532964268},{\"date\":\"2014-09-22\",\"fuel\":\"diesel\",\"current_price\":3.778,\"yoy_price\":3.949,\"absolute_change\":-0.171,\"percentage_change\":-4.3302101798},{\"date\":\"2014-09-29\",\"fuel\":\"diesel\",\"current_price\":3.755,\"yoy_price\":3.919,\"absolute_change\":-0.164,\"percentage_change\":-4.1847410054},{\"date\":\"2014-10-06\",\"fuel\":\"diesel\",\"current_price\":3.733,\"yoy_price\":3.897,\"absolute_change\":-0.164,\"percentage_change\":-4.2083654093},{\"date\":\"2014-10-13\",\"fuel\":\"diesel\",\"current_price\":3.698,\"yoy_price\":3.886,\"absolute_change\":-0.188,\"percentage_change\":-4.8378795677},{\"date\":\"2014-10-20\",\"fuel\":\"diesel\",\"current_price\":3.656,\"yoy_price\":3.886,\"absolute_change\":-0.23,\"percentage_change\":-5.9186824498},{\"date\":\"2014-10-27\",\"fuel\":\"diesel\",\"current_price\":3.635,\"yoy_price\":3.87,\"absolute_change\":-0.235,\"percentage_change\":-6.0723514212},{\"date\":\"2014-11-03\",\"fuel\":\"diesel\",\"current_price\":3.623,\"yoy_price\":3.857,\"absolute_change\":-0.234,\"percentage_change\":-6.0668913663},{\"date\":\"2014-11-10\",\"fuel\":\"diesel\",\"current_price\":3.677,\"yoy_price\":3.832,\"absolute_change\":-0.155,\"percentage_change\":-4.0448851775},{\"date\":\"2014-11-17\",\"fuel\":\"diesel\",\"current_price\":3.661,\"yoy_price\":3.822,\"absolute_change\":-0.161,\"percentage_change\":-4.2124542125},{\"date\":\"2014-11-24\",\"fuel\":\"diesel\",\"current_price\":3.628,\"yoy_price\":3.844,\"absolute_change\":-0.216,\"percentage_change\":-5.6191467222},{\"date\":\"2014-12-01\",\"fuel\":\"diesel\",\"current_price\":3.605,\"yoy_price\":3.883,\"absolute_change\":-0.278,\"percentage_change\":-7.1594128251},{\"date\":\"2014-12-08\",\"fuel\":\"diesel\",\"current_price\":3.535,\"yoy_price\":3.879,\"absolute_change\":-0.344,\"percentage_change\":-8.8682650168},{\"date\":\"2014-12-15\",\"fuel\":\"diesel\",\"current_price\":3.419,\"yoy_price\":3.871,\"absolute_change\":-0.452,\"percentage_change\":-11.6765693619},{\"date\":\"2014-12-22\",\"fuel\":\"diesel\",\"current_price\":3.281,\"yoy_price\":3.873,\"absolute_change\":-0.592,\"percentage_change\":-15.2853085463},{\"date\":\"2014-12-29\",\"fuel\":\"diesel\",\"current_price\":3.213,\"yoy_price\":3.903,\"absolute_change\":-0.69,\"percentage_change\":-17.6787086856},{\"date\":\"2015-01-05\",\"fuel\":\"diesel\",\"current_price\":3.137,\"yoy_price\":3.91,\"absolute_change\":-0.773,\"percentage_change\":-19.7698209719},{\"date\":\"2015-01-12\",\"fuel\":\"diesel\",\"current_price\":3.053,\"yoy_price\":3.886,\"absolute_change\":-0.833,\"percentage_change\":-21.4359238291},{\"date\":\"2015-01-19\",\"fuel\":\"diesel\",\"current_price\":2.933,\"yoy_price\":3.873,\"absolute_change\":-0.94,\"percentage_change\":-24.2705912729},{\"date\":\"2015-01-26\",\"fuel\":\"diesel\",\"current_price\":2.866,\"yoy_price\":3.904,\"absolute_change\":-1.038,\"percentage_change\":-26.5881147541},{\"date\":\"2015-02-02\",\"fuel\":\"diesel\",\"current_price\":2.831,\"yoy_price\":3.951,\"absolute_change\":-1.12,\"percentage_change\":-28.3472538598},{\"date\":\"2015-02-09\",\"fuel\":\"diesel\",\"current_price\":2.835,\"yoy_price\":3.977,\"absolute_change\":-1.142,\"percentage_change\":-28.7151118934},{\"date\":\"2015-02-16\",\"fuel\":\"diesel\",\"current_price\":2.865,\"yoy_price\":3.989,\"absolute_change\":-1.124,\"percentage_change\":-28.1774880923},{\"date\":\"2015-02-23\",\"fuel\":\"diesel\",\"current_price\":2.9,\"yoy_price\":4.017,\"absolute_change\":-1.117,\"percentage_change\":-27.8068210107},{\"date\":\"2015-03-02\",\"fuel\":\"diesel\",\"current_price\":2.936,\"yoy_price\":4.016,\"absolute_change\":-1.08,\"percentage_change\":-26.8924302789},{\"date\":\"2015-03-09\",\"fuel\":\"diesel\",\"current_price\":2.944,\"yoy_price\":4.021,\"absolute_change\":-1.077,\"percentage_change\":-26.7843819945},{\"date\":\"2015-03-16\",\"fuel\":\"diesel\",\"current_price\":2.917,\"yoy_price\":4.003,\"absolute_change\":-1.086,\"percentage_change\":-27.1296527604},{\"date\":\"2015-03-23\",\"fuel\":\"diesel\",\"current_price\":2.864,\"yoy_price\":3.988,\"absolute_change\":-1.124,\"percentage_change\":-28.184553661},{\"date\":\"2015-03-30\",\"fuel\":\"diesel\",\"current_price\":2.824,\"yoy_price\":3.975,\"absolute_change\":-1.151,\"percentage_change\":-28.9559748428},{\"date\":\"2015-04-06\",\"fuel\":\"diesel\",\"current_price\":2.784,\"yoy_price\":3.959,\"absolute_change\":-1.175,\"percentage_change\":-29.6792119222},{\"date\":\"2015-04-13\",\"fuel\":\"diesel\",\"current_price\":2.754,\"yoy_price\":3.952,\"absolute_change\":-1.198,\"percentage_change\":-30.3137651822},{\"date\":\"2015-04-20\",\"fuel\":\"diesel\",\"current_price\":2.78,\"yoy_price\":3.971,\"absolute_change\":-1.191,\"percentage_change\":-29.9924452279},{\"date\":\"2015-04-27\",\"fuel\":\"diesel\",\"current_price\":2.811,\"yoy_price\":3.975,\"absolute_change\":-1.164,\"percentage_change\":-29.2830188679},{\"date\":\"2015-05-04\",\"fuel\":\"diesel\",\"current_price\":2.854,\"yoy_price\":3.964,\"absolute_change\":-1.11,\"percentage_change\":-28.0020181635},{\"date\":\"2015-05-11\",\"fuel\":\"diesel\",\"current_price\":2.878,\"yoy_price\":3.948,\"absolute_change\":-1.07,\"percentage_change\":-27.1023302938},{\"date\":\"2015-05-18\",\"fuel\":\"diesel\",\"current_price\":2.904,\"yoy_price\":3.934,\"absolute_change\":-1.03,\"percentage_change\":-26.1820030503},{\"date\":\"2015-05-25\",\"fuel\":\"diesel\",\"current_price\":2.914,\"yoy_price\":3.925,\"absolute_change\":-1.011,\"percentage_change\":-25.7579617834},{\"date\":\"2015-06-01\",\"fuel\":\"diesel\",\"current_price\":2.909,\"yoy_price\":3.918,\"absolute_change\":-1.009,\"percentage_change\":-25.752935171},{\"date\":\"2015-06-08\",\"fuel\":\"diesel\",\"current_price\":2.884,\"yoy_price\":3.892,\"absolute_change\":-1.008,\"percentage_change\":-25.8992805755},{\"date\":\"2015-06-15\",\"fuel\":\"diesel\",\"current_price\":2.87,\"yoy_price\":3.882,\"absolute_change\":-1.012,\"percentage_change\":-26.0690365791},{\"date\":\"2015-06-22\",\"fuel\":\"diesel\",\"current_price\":2.859,\"yoy_price\":3.919,\"absolute_change\":-1.06,\"percentage_change\":-27.0477162541},{\"date\":\"2015-06-29\",\"fuel\":\"diesel\",\"current_price\":2.843,\"yoy_price\":3.92,\"absolute_change\":-1.077,\"percentage_change\":-27.4744897959},{\"date\":\"2015-07-06\",\"fuel\":\"diesel\",\"current_price\":2.832,\"yoy_price\":3.913,\"absolute_change\":-1.081,\"percentage_change\":-27.6258625096},{\"date\":\"2015-07-13\",\"fuel\":\"diesel\",\"current_price\":2.814,\"yoy_price\":3.894,\"absolute_change\":-1.08,\"percentage_change\":-27.7349768875},{\"date\":\"2015-07-20\",\"fuel\":\"diesel\",\"current_price\":2.782,\"yoy_price\":3.869,\"absolute_change\":-1.087,\"percentage_change\":-28.0951150168},{\"date\":\"2015-07-27\",\"fuel\":\"diesel\",\"current_price\":2.723,\"yoy_price\":3.858,\"absolute_change\":-1.135,\"percentage_change\":-29.4193882841},{\"date\":\"2015-08-03\",\"fuel\":\"diesel\",\"current_price\":2.668,\"yoy_price\":3.853,\"absolute_change\":-1.185,\"percentage_change\":-30.755255645},{\"date\":\"2015-08-10\",\"fuel\":\"diesel\",\"current_price\":2.617,\"yoy_price\":3.843,\"absolute_change\":-1.226,\"percentage_change\":-31.902159771},{\"date\":\"2015-08-17\",\"fuel\":\"diesel\",\"current_price\":2.615,\"yoy_price\":3.835,\"absolute_change\":-1.22,\"percentage_change\":-31.8122555411},{\"date\":\"2015-08-24\",\"fuel\":\"diesel\",\"current_price\":2.561,\"yoy_price\":3.821,\"absolute_change\":-1.26,\"percentage_change\":-32.9756608218},{\"date\":\"2015-08-31\",\"fuel\":\"diesel\",\"current_price\":2.514,\"yoy_price\":3.814,\"absolute_change\":-1.3,\"percentage_change\":-34.0849501835},{\"date\":\"2015-09-07\",\"fuel\":\"diesel\",\"current_price\":2.534,\"yoy_price\":3.814,\"absolute_change\":-1.28,\"percentage_change\":-33.5605663346},{\"date\":\"2015-09-14\",\"fuel\":\"diesel\",\"current_price\":2.517,\"yoy_price\":3.801,\"absolute_change\":-1.284,\"percentage_change\":-33.7805840568},{\"date\":\"2015-09-21\",\"fuel\":\"diesel\",\"current_price\":2.493,\"yoy_price\":3.778,\"absolute_change\":-1.285,\"percentage_change\":-34.012705135},{\"date\":\"2015-09-28\",\"fuel\":\"diesel\",\"current_price\":2.476,\"yoy_price\":3.755,\"absolute_change\":-1.279,\"percentage_change\":-34.0612516644},{\"date\":\"2015-10-05\",\"fuel\":\"diesel\",\"current_price\":2.492,\"yoy_price\":3.733,\"absolute_change\":-1.241,\"percentage_change\":-33.2440396464},{\"date\":\"2015-10-12\",\"fuel\":\"diesel\",\"current_price\":2.556,\"yoy_price\":3.698,\"absolute_change\":-1.142,\"percentage_change\":-30.8815575987},{\"date\":\"2015-10-19\",\"fuel\":\"diesel\",\"current_price\":2.531,\"yoy_price\":3.656,\"absolute_change\":-1.125,\"percentage_change\":-30.7713347921},{\"date\":\"2015-10-26\",\"fuel\":\"diesel\",\"current_price\":2.498,\"yoy_price\":3.635,\"absolute_change\":-1.137,\"percentage_change\":-31.2792297111},{\"date\":\"2015-11-02\",\"fuel\":\"diesel\",\"current_price\":2.485,\"yoy_price\":3.623,\"absolute_change\":-1.138,\"percentage_change\":-31.4104333425},{\"date\":\"2015-11-09\",\"fuel\":\"diesel\",\"current_price\":2.502,\"yoy_price\":3.677,\"absolute_change\":-1.175,\"percentage_change\":-31.9553984226},{\"date\":\"2015-11-16\",\"fuel\":\"diesel\",\"current_price\":2.482,\"yoy_price\":3.661,\"absolute_change\":-1.179,\"percentage_change\":-32.2043157607},{\"date\":\"2015-11-23\",\"fuel\":\"diesel\",\"current_price\":2.445,\"yoy_price\":3.628,\"absolute_change\":-1.183,\"percentage_change\":-32.6074972437},{\"date\":\"2015-11-30\",\"fuel\":\"diesel\",\"current_price\":2.421,\"yoy_price\":3.605,\"absolute_change\":-1.184,\"percentage_change\":-32.8432732316},{\"date\":\"2015-12-07\",\"fuel\":\"diesel\",\"current_price\":2.379,\"yoy_price\":3.535,\"absolute_change\":-1.156,\"percentage_change\":-32.7015558699},{\"date\":\"2015-12-14\",\"fuel\":\"diesel\",\"current_price\":2.338,\"yoy_price\":3.419,\"absolute_change\":-1.081,\"percentage_change\":-31.6174319977},{\"date\":\"2015-12-21\",\"fuel\":\"diesel\",\"current_price\":2.284,\"yoy_price\":3.281,\"absolute_change\":-0.997,\"percentage_change\":-30.3870771106},{\"date\":\"2015-12-28\",\"fuel\":\"diesel\",\"current_price\":2.237,\"yoy_price\":3.213,\"absolute_change\":-0.976,\"percentage_change\":-30.3765950825},{\"date\":\"2016-01-04\",\"fuel\":\"diesel\",\"current_price\":2.211,\"yoy_price\":3.137,\"absolute_change\":-0.926,\"percentage_change\":-29.5186483902},{\"date\":\"2016-01-11\",\"fuel\":\"diesel\",\"current_price\":2.177,\"yoy_price\":3.053,\"absolute_change\":-0.876,\"percentage_change\":-28.6930887651},{\"date\":\"2016-01-18\",\"fuel\":\"diesel\",\"current_price\":2.112,\"yoy_price\":2.933,\"absolute_change\":-0.821,\"percentage_change\":-27.991817252},{\"date\":\"2016-01-25\",\"fuel\":\"diesel\",\"current_price\":2.071,\"yoy_price\":2.866,\"absolute_change\":-0.795,\"percentage_change\":-27.7390090719},{\"date\":\"2016-02-01\",\"fuel\":\"diesel\",\"current_price\":2.031,\"yoy_price\":2.831,\"absolute_change\":-0.8,\"percentage_change\":-28.2585658778},{\"date\":\"2016-02-08\",\"fuel\":\"diesel\",\"current_price\":2.008,\"yoy_price\":2.835,\"absolute_change\":-0.827,\"percentage_change\":-29.1710758377},{\"date\":\"2016-02-15\",\"fuel\":\"diesel\",\"current_price\":1.98,\"yoy_price\":2.865,\"absolute_change\":-0.885,\"percentage_change\":-30.890052356},{\"date\":\"2016-02-22\",\"fuel\":\"diesel\",\"current_price\":1.983,\"yoy_price\":2.9,\"absolute_change\":-0.917,\"percentage_change\":-31.6206896552},{\"date\":\"2016-02-29\",\"fuel\":\"diesel\",\"current_price\":1.989,\"yoy_price\":2.936,\"absolute_change\":-0.947,\"percentage_change\":-32.2547683924},{\"date\":\"2016-03-07\",\"fuel\":\"diesel\",\"current_price\":2.021,\"yoy_price\":2.944,\"absolute_change\":-0.923,\"percentage_change\":-31.3519021739},{\"date\":\"2016-03-14\",\"fuel\":\"diesel\",\"current_price\":2.099,\"yoy_price\":2.917,\"absolute_change\":-0.818,\"percentage_change\":-28.0425094275},{\"date\":\"2016-03-21\",\"fuel\":\"diesel\",\"current_price\":2.119,\"yoy_price\":2.864,\"absolute_change\":-0.745,\"percentage_change\":-26.0125698324},{\"date\":\"2016-03-28\",\"fuel\":\"diesel\",\"current_price\":2.121,\"yoy_price\":2.824,\"absolute_change\":-0.703,\"percentage_change\":-24.8937677054},{\"date\":\"2016-04-04\",\"fuel\":\"diesel\",\"current_price\":2.115,\"yoy_price\":2.784,\"absolute_change\":-0.669,\"percentage_change\":-24.0301724138},{\"date\":\"2016-04-11\",\"fuel\":\"diesel\",\"current_price\":2.128,\"yoy_price\":2.754,\"absolute_change\":-0.626,\"percentage_change\":-22.730573711},{\"date\":\"2016-04-18\",\"fuel\":\"diesel\",\"current_price\":2.165,\"yoy_price\":2.78,\"absolute_change\":-0.615,\"percentage_change\":-22.1223021583},{\"date\":\"2016-04-25\",\"fuel\":\"diesel\",\"current_price\":2.198,\"yoy_price\":2.811,\"absolute_change\":-0.613,\"percentage_change\":-21.8071860548},{\"date\":\"2016-05-02\",\"fuel\":\"diesel\",\"current_price\":2.266,\"yoy_price\":2.854,\"absolute_change\":-0.588,\"percentage_change\":-20.6026629292},{\"date\":\"2016-05-09\",\"fuel\":\"diesel\",\"current_price\":2.271,\"yoy_price\":2.878,\"absolute_change\":-0.607,\"percentage_change\":-21.0910354413},{\"date\":\"2016-05-16\",\"fuel\":\"diesel\",\"current_price\":2.297,\"yoy_price\":2.904,\"absolute_change\":-0.607,\"percentage_change\":-20.9022038567},{\"date\":\"2016-05-23\",\"fuel\":\"diesel\",\"current_price\":2.357,\"yoy_price\":2.914,\"absolute_change\":-0.557,\"percentage_change\":-19.1146190803},{\"date\":\"2016-05-30\",\"fuel\":\"diesel\",\"current_price\":2.382,\"yoy_price\":2.909,\"absolute_change\":-0.527,\"percentage_change\":-18.116191131},{\"date\":\"2016-06-06\",\"fuel\":\"diesel\",\"current_price\":2.407,\"yoy_price\":2.884,\"absolute_change\":-0.477,\"percentage_change\":-16.5395284327},{\"date\":\"2016-06-13\",\"fuel\":\"diesel\",\"current_price\":2.431,\"yoy_price\":2.87,\"absolute_change\":-0.439,\"percentage_change\":-15.2961672474},{\"date\":\"2016-06-20\",\"fuel\":\"diesel\",\"current_price\":2.426,\"yoy_price\":2.859,\"absolute_change\":-0.433,\"percentage_change\":-15.1451556488},{\"date\":\"2016-06-27\",\"fuel\":\"diesel\",\"current_price\":2.426,\"yoy_price\":2.843,\"absolute_change\":-0.417,\"percentage_change\":-14.667604643},{\"date\":\"2016-07-04\",\"fuel\":\"diesel\",\"current_price\":2.423,\"yoy_price\":2.832,\"absolute_change\":-0.409,\"percentage_change\":-14.4420903955},{\"date\":\"2016-07-11\",\"fuel\":\"diesel\",\"current_price\":2.414,\"yoy_price\":2.814,\"absolute_change\":-0.4,\"percentage_change\":-14.2146410803},{\"date\":\"2016-07-18\",\"fuel\":\"diesel\",\"current_price\":2.402,\"yoy_price\":2.782,\"absolute_change\":-0.38,\"percentage_change\":-13.6592379583},{\"date\":\"2016-07-25\",\"fuel\":\"diesel\",\"current_price\":2.379,\"yoy_price\":2.723,\"absolute_change\":-0.344,\"percentage_change\":-12.6331252295},{\"date\":\"2016-08-01\",\"fuel\":\"diesel\",\"current_price\":2.348,\"yoy_price\":2.668,\"absolute_change\":-0.32,\"percentage_change\":-11.9940029985},{\"date\":\"2016-08-08\",\"fuel\":\"diesel\",\"current_price\":2.316,\"yoy_price\":2.617,\"absolute_change\":-0.301,\"percentage_change\":-11.5017195262},{\"date\":\"2016-08-15\",\"fuel\":\"diesel\",\"current_price\":2.31,\"yoy_price\":2.615,\"absolute_change\":-0.305,\"percentage_change\":-11.6634799235},{\"date\":\"2016-08-22\",\"fuel\":\"diesel\",\"current_price\":2.37,\"yoy_price\":2.561,\"absolute_change\":-0.191,\"percentage_change\":-7.4580242093},{\"date\":\"2016-08-29\",\"fuel\":\"diesel\",\"current_price\":2.409,\"yoy_price\":2.514,\"absolute_change\":-0.105,\"percentage_change\":-4.1766109785},{\"date\":\"2016-09-05\",\"fuel\":\"diesel\",\"current_price\":2.407,\"yoy_price\":2.534,\"absolute_change\":-0.127,\"percentage_change\":-5.0118389897},{\"date\":\"2016-09-12\",\"fuel\":\"diesel\",\"current_price\":2.399,\"yoy_price\":2.517,\"absolute_change\":-0.118,\"percentage_change\":-4.6881207787},{\"date\":\"2016-09-19\",\"fuel\":\"diesel\",\"current_price\":2.389,\"yoy_price\":2.493,\"absolute_change\":-0.104,\"percentage_change\":-4.171680706},{\"date\":\"2016-09-26\",\"fuel\":\"diesel\",\"current_price\":2.382,\"yoy_price\":2.476,\"absolute_change\":-0.094,\"percentage_change\":-3.7964458805},{\"date\":\"2016-10-03\",\"fuel\":\"diesel\",\"current_price\":2.389,\"yoy_price\":2.492,\"absolute_change\":-0.103,\"percentage_change\":-4.1332263242},{\"date\":\"2016-10-10\",\"fuel\":\"diesel\",\"current_price\":2.445,\"yoy_price\":2.556,\"absolute_change\":-0.111,\"percentage_change\":-4.3427230047},{\"date\":\"2016-10-17\",\"fuel\":\"diesel\",\"current_price\":2.481,\"yoy_price\":2.531,\"absolute_change\":-0.05,\"percentage_change\":-1.9755037535},{\"date\":\"2016-10-24\",\"fuel\":\"diesel\",\"current_price\":2.478,\"yoy_price\":2.498,\"absolute_change\":-0.02,\"percentage_change\":-0.8006405124},{\"date\":\"2016-10-31\",\"fuel\":\"diesel\",\"current_price\":2.479,\"yoy_price\":2.485,\"absolute_change\":-0.006,\"percentage_change\":-0.2414486922},{\"date\":\"2016-11-07\",\"fuel\":\"diesel\",\"current_price\":2.47,\"yoy_price\":2.502,\"absolute_change\":-0.032,\"percentage_change\":-1.2789768185},{\"date\":\"2016-11-14\",\"fuel\":\"diesel\",\"current_price\":2.443,\"yoy_price\":2.482,\"absolute_change\":-0.039,\"percentage_change\":-1.5713134569},{\"date\":\"2016-11-21\",\"fuel\":\"diesel\",\"current_price\":2.421,\"yoy_price\":2.445,\"absolute_change\":-0.024,\"percentage_change\":-0.981595092},{\"date\":\"2016-11-28\",\"fuel\":\"diesel\",\"current_price\":2.42,\"yoy_price\":2.421,\"absolute_change\":-0.001,\"percentage_change\":-0.0413052458},{\"date\":\"2016-12-05\",\"fuel\":\"diesel\",\"current_price\":2.48,\"yoy_price\":2.379,\"absolute_change\":0.101,\"percentage_change\":4.2454812947},{\"date\":\"2016-12-12\",\"fuel\":\"diesel\",\"current_price\":2.493,\"yoy_price\":2.338,\"absolute_change\":0.155,\"percentage_change\":6.629597947},{\"date\":\"2016-12-19\",\"fuel\":\"diesel\",\"current_price\":2.527,\"yoy_price\":2.284,\"absolute_change\":0.243,\"percentage_change\":10.6392294221},{\"date\":\"2016-12-26\",\"fuel\":\"diesel\",\"current_price\":2.54,\"yoy_price\":2.237,\"absolute_change\":0.303,\"percentage_change\":13.5449262405},{\"date\":\"2017-01-02\",\"fuel\":\"diesel\",\"current_price\":2.586,\"yoy_price\":2.211,\"absolute_change\":0.375,\"percentage_change\":16.960651289},{\"date\":\"2017-01-09\",\"fuel\":\"diesel\",\"current_price\":2.597,\"yoy_price\":2.177,\"absolute_change\":0.42,\"percentage_change\":19.2926045016},{\"date\":\"2017-01-16\",\"fuel\":\"diesel\",\"current_price\":2.585,\"yoy_price\":2.112,\"absolute_change\":0.473,\"percentage_change\":22.3958333333},{\"date\":\"2017-01-23\",\"fuel\":\"diesel\",\"current_price\":2.569,\"yoy_price\":2.071,\"absolute_change\":0.498,\"percentage_change\":24.0463544182},{\"date\":\"2017-01-30\",\"fuel\":\"diesel\",\"current_price\":2.562,\"yoy_price\":2.031,\"absolute_change\":0.531,\"percentage_change\":26.1447562777},{\"date\":\"2017-02-06\",\"fuel\":\"diesel\",\"current_price\":2.558,\"yoy_price\":2.008,\"absolute_change\":0.55,\"percentage_change\":27.390438247},{\"date\":\"2017-02-13\",\"fuel\":\"diesel\",\"current_price\":2.565,\"yoy_price\":1.98,\"absolute_change\":0.585,\"percentage_change\":29.5454545455},{\"date\":\"2017-02-20\",\"fuel\":\"diesel\",\"current_price\":2.572,\"yoy_price\":1.983,\"absolute_change\":0.589,\"percentage_change\":29.7024710035},{\"date\":\"2017-02-27\",\"fuel\":\"diesel\",\"current_price\":2.577,\"yoy_price\":1.989,\"absolute_change\":0.588,\"percentage_change\":29.5625942685},{\"date\":\"2017-03-06\",\"fuel\":\"diesel\",\"current_price\":2.579,\"yoy_price\":2.021,\"absolute_change\":0.558,\"percentage_change\":27.6100940129},{\"date\":\"2017-03-13\",\"fuel\":\"diesel\",\"current_price\":2.564,\"yoy_price\":2.099,\"absolute_change\":0.465,\"percentage_change\":22.153406384},{\"date\":\"2017-03-20\",\"fuel\":\"diesel\",\"current_price\":2.539,\"yoy_price\":2.119,\"absolute_change\":0.42,\"percentage_change\":19.8206701274},{\"date\":\"2017-03-27\",\"fuel\":\"diesel\",\"current_price\":2.532,\"yoy_price\":2.121,\"absolute_change\":0.411,\"percentage_change\":19.3776520509},{\"date\":\"2017-04-03\",\"fuel\":\"diesel\",\"current_price\":2.556,\"yoy_price\":2.115,\"absolute_change\":0.441,\"percentage_change\":20.8510638298},{\"date\":\"2017-04-10\",\"fuel\":\"diesel\",\"current_price\":2.582,\"yoy_price\":2.128,\"absolute_change\":0.454,\"percentage_change\":21.3345864662},{\"date\":\"2017-04-17\",\"fuel\":\"diesel\",\"current_price\":2.597,\"yoy_price\":2.165,\"absolute_change\":0.432,\"percentage_change\":19.9538106236},{\"date\":\"2017-04-24\",\"fuel\":\"diesel\",\"current_price\":2.595,\"yoy_price\":2.198,\"absolute_change\":0.397,\"percentage_change\":18.0618744313},{\"date\":\"2017-05-01\",\"fuel\":\"diesel\",\"current_price\":2.583,\"yoy_price\":2.266,\"absolute_change\":0.317,\"percentage_change\":13.9894086496},{\"date\":\"2017-05-08\",\"fuel\":\"diesel\",\"current_price\":2.565,\"yoy_price\":2.271,\"absolute_change\":0.294,\"percentage_change\":12.9458388375},{\"date\":\"2017-05-15\",\"fuel\":\"diesel\",\"current_price\":2.544,\"yoy_price\":2.297,\"absolute_change\":0.247,\"percentage_change\":10.7531562908},{\"date\":\"2017-05-22\",\"fuel\":\"diesel\",\"current_price\":2.539,\"yoy_price\":2.357,\"absolute_change\":0.182,\"percentage_change\":7.7216801018},{\"date\":\"2017-05-29\",\"fuel\":\"diesel\",\"current_price\":2.571,\"yoy_price\":2.382,\"absolute_change\":0.189,\"percentage_change\":7.9345088161},{\"date\":\"2017-06-05\",\"fuel\":\"diesel\",\"current_price\":2.564,\"yoy_price\":2.407,\"absolute_change\":0.157,\"percentage_change\":6.5226422933},{\"date\":\"2017-06-12\",\"fuel\":\"diesel\",\"current_price\":2.524,\"yoy_price\":2.431,\"absolute_change\":0.093,\"percentage_change\":3.8255861785},{\"date\":\"2017-06-19\",\"fuel\":\"diesel\",\"current_price\":2.489,\"yoy_price\":2.426,\"absolute_change\":0.063,\"percentage_change\":2.5968672712},{\"date\":\"2017-06-26\",\"fuel\":\"diesel\",\"current_price\":2.465,\"yoy_price\":2.426,\"absolute_change\":0.039,\"percentage_change\":1.6075845012},{\"date\":\"2017-07-03\",\"fuel\":\"diesel\",\"current_price\":2.472,\"yoy_price\":2.423,\"absolute_change\":0.049,\"percentage_change\":2.0222864218},{\"date\":\"2017-07-10\",\"fuel\":\"diesel\",\"current_price\":2.481,\"yoy_price\":2.414,\"absolute_change\":0.067,\"percentage_change\":2.7754763877},{\"date\":\"2017-07-17\",\"fuel\":\"diesel\",\"current_price\":2.491,\"yoy_price\":2.402,\"absolute_change\":0.089,\"percentage_change\":3.7052456286},{\"date\":\"2017-07-24\",\"fuel\":\"diesel\",\"current_price\":2.507,\"yoy_price\":2.379,\"absolute_change\":0.128,\"percentage_change\":5.3804119378},{\"date\":\"2017-07-31\",\"fuel\":\"diesel\",\"current_price\":2.531,\"yoy_price\":2.348,\"absolute_change\":0.183,\"percentage_change\":7.793867121},{\"date\":\"2017-08-07\",\"fuel\":\"diesel\",\"current_price\":2.581,\"yoy_price\":2.316,\"absolute_change\":0.265,\"percentage_change\":11.4421416235},{\"date\":\"2017-08-14\",\"fuel\":\"diesel\",\"current_price\":2.598,\"yoy_price\":2.31,\"absolute_change\":0.288,\"percentage_change\":12.4675324675},{\"date\":\"2017-08-21\",\"fuel\":\"diesel\",\"current_price\":2.596,\"yoy_price\":2.37,\"absolute_change\":0.226,\"percentage_change\":9.5358649789},{\"date\":\"2017-08-28\",\"fuel\":\"diesel\",\"current_price\":2.605,\"yoy_price\":2.409,\"absolute_change\":0.196,\"percentage_change\":8.1361560814},{\"date\":\"2017-09-04\",\"fuel\":\"diesel\",\"current_price\":2.758,\"yoy_price\":2.407,\"absolute_change\":0.351,\"percentage_change\":14.5824678022},{\"date\":\"2017-09-11\",\"fuel\":\"diesel\",\"current_price\":2.802,\"yoy_price\":2.399,\"absolute_change\":0.403,\"percentage_change\":16.7986661109},{\"date\":\"2017-09-18\",\"fuel\":\"diesel\",\"current_price\":2.791,\"yoy_price\":2.389,\"absolute_change\":0.402,\"percentage_change\":16.8271243198},{\"date\":\"2017-09-25\",\"fuel\":\"diesel\",\"current_price\":2.788,\"yoy_price\":2.382,\"absolute_change\":0.406,\"percentage_change\":17.0445004198},{\"date\":\"2017-10-02\",\"fuel\":\"diesel\",\"current_price\":2.792,\"yoy_price\":2.389,\"absolute_change\":0.403,\"percentage_change\":16.868982838},{\"date\":\"2017-10-09\",\"fuel\":\"diesel\",\"current_price\":2.776,\"yoy_price\":2.445,\"absolute_change\":0.331,\"percentage_change\":13.5378323108},{\"date\":\"2017-10-16\",\"fuel\":\"diesel\",\"current_price\":2.787,\"yoy_price\":2.481,\"absolute_change\":0.306,\"percentage_change\":12.3337363966},{\"date\":\"2017-10-23\",\"fuel\":\"diesel\",\"current_price\":2.797,\"yoy_price\":2.478,\"absolute_change\":0.319,\"percentage_change\":12.8732849072},{\"date\":\"2017-10-30\",\"fuel\":\"diesel\",\"current_price\":2.819,\"yoy_price\":2.479,\"absolute_change\":0.34,\"percentage_change\":13.7152077451},{\"date\":\"2017-11-06\",\"fuel\":\"diesel\",\"current_price\":2.882,\"yoy_price\":2.47,\"absolute_change\":0.412,\"percentage_change\":16.6801619433},{\"date\":\"2017-11-13\",\"fuel\":\"diesel\",\"current_price\":2.915,\"yoy_price\":2.443,\"absolute_change\":0.472,\"percentage_change\":19.3205075727},{\"date\":\"2017-11-20\",\"fuel\":\"diesel\",\"current_price\":2.912,\"yoy_price\":2.421,\"absolute_change\":0.491,\"percentage_change\":20.2808756712},{\"date\":\"2017-11-27\",\"fuel\":\"diesel\",\"current_price\":2.926,\"yoy_price\":2.42,\"absolute_change\":0.506,\"percentage_change\":20.9090909091},{\"date\":\"2017-12-04\",\"fuel\":\"diesel\",\"current_price\":2.922,\"yoy_price\":2.48,\"absolute_change\":0.442,\"percentage_change\":17.8225806452},{\"date\":\"2017-12-11\",\"fuel\":\"diesel\",\"current_price\":2.91,\"yoy_price\":2.493,\"absolute_change\":0.417,\"percentage_change\":16.7268351384},{\"date\":\"2017-12-18\",\"fuel\":\"diesel\",\"current_price\":2.901,\"yoy_price\":2.527,\"absolute_change\":0.374,\"percentage_change\":14.8001582905},{\"date\":\"2017-12-25\",\"fuel\":\"diesel\",\"current_price\":2.903,\"yoy_price\":2.54,\"absolute_change\":0.363,\"percentage_change\":14.2913385827},{\"date\":\"2018-01-01\",\"fuel\":\"diesel\",\"current_price\":2.973,\"yoy_price\":2.586,\"absolute_change\":0.387,\"percentage_change\":14.9651972158},{\"date\":\"2018-01-08\",\"fuel\":\"diesel\",\"current_price\":2.996,\"yoy_price\":2.597,\"absolute_change\":0.399,\"percentage_change\":15.3638814016},{\"date\":\"2018-01-15\",\"fuel\":\"diesel\",\"current_price\":3.028,\"yoy_price\":2.585,\"absolute_change\":0.443,\"percentage_change\":17.1373307544},{\"date\":\"2018-01-22\",\"fuel\":\"diesel\",\"current_price\":3.025,\"yoy_price\":2.569,\"absolute_change\":0.456,\"percentage_change\":17.7500973141},{\"date\":\"2018-01-29\",\"fuel\":\"diesel\",\"current_price\":3.07,\"yoy_price\":2.562,\"absolute_change\":0.508,\"percentage_change\":19.8282591725},{\"date\":\"2018-02-05\",\"fuel\":\"diesel\",\"current_price\":3.086,\"yoy_price\":2.558,\"absolute_change\":0.528,\"percentage_change\":20.6411258796},{\"date\":\"2018-02-12\",\"fuel\":\"diesel\",\"current_price\":3.063,\"yoy_price\":2.565,\"absolute_change\":0.498,\"percentage_change\":19.4152046784},{\"date\":\"2018-02-19\",\"fuel\":\"diesel\",\"current_price\":3.027,\"yoy_price\":2.572,\"absolute_change\":0.455,\"percentage_change\":17.6905132193},{\"date\":\"2018-02-26\",\"fuel\":\"diesel\",\"current_price\":3.007,\"yoy_price\":2.577,\"absolute_change\":0.43,\"percentage_change\":16.6860690726},{\"date\":\"2018-03-05\",\"fuel\":\"diesel\",\"current_price\":2.992,\"yoy_price\":2.579,\"absolute_change\":0.413,\"percentage_change\":16.0139588988},{\"date\":\"2018-03-12\",\"fuel\":\"diesel\",\"current_price\":2.976,\"yoy_price\":2.564,\"absolute_change\":0.412,\"percentage_change\":16.0686427457},{\"date\":\"2018-03-19\",\"fuel\":\"diesel\",\"current_price\":2.972,\"yoy_price\":2.539,\"absolute_change\":0.433,\"percentage_change\":17.0539582513},{\"date\":\"2018-03-26\",\"fuel\":\"diesel\",\"current_price\":3.01,\"yoy_price\":2.532,\"absolute_change\":0.478,\"percentage_change\":18.87835703},{\"date\":\"2018-04-02\",\"fuel\":\"diesel\",\"current_price\":3.042,\"yoy_price\":2.556,\"absolute_change\":0.486,\"percentage_change\":19.014084507},{\"date\":\"2018-04-09\",\"fuel\":\"diesel\",\"current_price\":3.043,\"yoy_price\":2.582,\"absolute_change\":0.461,\"percentage_change\":17.8543764524},{\"date\":\"2018-04-16\",\"fuel\":\"diesel\",\"current_price\":3.104,\"yoy_price\":2.597,\"absolute_change\":0.507,\"percentage_change\":19.5225259915},{\"date\":\"2018-04-23\",\"fuel\":\"diesel\",\"current_price\":3.133,\"yoy_price\":2.595,\"absolute_change\":0.538,\"percentage_change\":20.732177264},{\"date\":\"2018-04-30\",\"fuel\":\"diesel\",\"current_price\":3.157,\"yoy_price\":2.583,\"absolute_change\":0.574,\"percentage_change\":22.2222222222},{\"date\":\"2018-05-07\",\"fuel\":\"diesel\",\"current_price\":3.171,\"yoy_price\":2.565,\"absolute_change\":0.606,\"percentage_change\":23.6257309942},{\"date\":\"2018-05-14\",\"fuel\":\"diesel\",\"current_price\":3.239,\"yoy_price\":2.544,\"absolute_change\":0.695,\"percentage_change\":27.3191823899},{\"date\":\"2018-05-21\",\"fuel\":\"diesel\",\"current_price\":3.277,\"yoy_price\":2.539,\"absolute_change\":0.738,\"percentage_change\":29.0665616384},{\"date\":\"2018-05-28\",\"fuel\":\"diesel\",\"current_price\":3.288,\"yoy_price\":2.571,\"absolute_change\":0.717,\"percentage_change\":27.8879813302},{\"date\":\"2018-06-04\",\"fuel\":\"diesel\",\"current_price\":3.285,\"yoy_price\":2.564,\"absolute_change\":0.721,\"percentage_change\":28.120124805},{\"date\":\"2018-06-11\",\"fuel\":\"diesel\",\"current_price\":3.266,\"yoy_price\":2.524,\"absolute_change\":0.742,\"percentage_change\":29.3977812995},{\"date\":\"2018-06-18\",\"fuel\":\"diesel\",\"current_price\":3.244,\"yoy_price\":2.489,\"absolute_change\":0.755,\"percentage_change\":30.3334672559},{\"date\":\"2018-06-25\",\"fuel\":\"diesel\",\"current_price\":3.216,\"yoy_price\":2.465,\"absolute_change\":0.751,\"percentage_change\":30.4665314402},{\"date\":\"2018-07-02\",\"fuel\":\"diesel\",\"current_price\":3.236,\"yoy_price\":2.472,\"absolute_change\":0.764,\"percentage_change\":30.9061488673},{\"date\":\"2018-07-09\",\"fuel\":\"diesel\",\"current_price\":3.243,\"yoy_price\":2.481,\"absolute_change\":0.762,\"percentage_change\":30.7134220073},{\"date\":\"2018-07-16\",\"fuel\":\"diesel\",\"current_price\":3.239,\"yoy_price\":2.491,\"absolute_change\":0.748,\"percentage_change\":30.0281011642},{\"date\":\"2018-07-23\",\"fuel\":\"diesel\",\"current_price\":3.22,\"yoy_price\":2.507,\"absolute_change\":0.713,\"percentage_change\":28.4403669725},{\"date\":\"2018-07-30\",\"fuel\":\"diesel\",\"current_price\":3.226,\"yoy_price\":2.531,\"absolute_change\":0.695,\"percentage_change\":27.4595021731},{\"date\":\"2018-08-06\",\"fuel\":\"diesel\",\"current_price\":3.223,\"yoy_price\":2.581,\"absolute_change\":0.642,\"percentage_change\":24.874079814},{\"date\":\"2018-08-13\",\"fuel\":\"diesel\",\"current_price\":3.217,\"yoy_price\":2.598,\"absolute_change\":0.619,\"percentage_change\":23.8260200154},{\"date\":\"2018-08-20\",\"fuel\":\"diesel\",\"current_price\":3.207,\"yoy_price\":2.596,\"absolute_change\":0.611,\"percentage_change\":23.5362095532},{\"date\":\"2018-08-27\",\"fuel\":\"diesel\",\"current_price\":3.226,\"yoy_price\":2.605,\"absolute_change\":0.621,\"percentage_change\":23.8387715931},{\"date\":\"2018-09-03\",\"fuel\":\"diesel\",\"current_price\":3.252,\"yoy_price\":2.758,\"absolute_change\":0.494,\"percentage_change\":17.9115300943},{\"date\":\"2018-09-10\",\"fuel\":\"diesel\",\"current_price\":3.258,\"yoy_price\":2.802,\"absolute_change\":0.456,\"percentage_change\":16.2740899358},{\"date\":\"2018-09-17\",\"fuel\":\"diesel\",\"current_price\":3.268,\"yoy_price\":2.791,\"absolute_change\":0.477,\"percentage_change\":17.0906485131},{\"date\":\"2018-09-24\",\"fuel\":\"diesel\",\"current_price\":3.271,\"yoy_price\":2.788,\"absolute_change\":0.483,\"percentage_change\":17.3242467719},{\"date\":\"2018-10-01\",\"fuel\":\"diesel\",\"current_price\":3.313,\"yoy_price\":2.792,\"absolute_change\":0.521,\"percentage_change\":18.6604584527},{\"date\":\"2018-10-08\",\"fuel\":\"diesel\",\"current_price\":3.385,\"yoy_price\":2.776,\"absolute_change\":0.609,\"percentage_change\":21.9380403458},{\"date\":\"2018-10-15\",\"fuel\":\"diesel\",\"current_price\":3.394,\"yoy_price\":2.787,\"absolute_change\":0.607,\"percentage_change\":21.7796914245},{\"date\":\"2018-10-22\",\"fuel\":\"diesel\",\"current_price\":3.38,\"yoy_price\":2.797,\"absolute_change\":0.583,\"percentage_change\":20.8437611727},{\"date\":\"2018-10-29\",\"fuel\":\"diesel\",\"current_price\":3.355,\"yoy_price\":2.819,\"absolute_change\":0.536,\"percentage_change\":19.0138346932},{\"date\":\"2018-11-05\",\"fuel\":\"diesel\",\"current_price\":3.338,\"yoy_price\":2.882,\"absolute_change\":0.456,\"percentage_change\":15.8223455933},{\"date\":\"2018-11-12\",\"fuel\":\"diesel\",\"current_price\":3.317,\"yoy_price\":2.915,\"absolute_change\":0.402,\"percentage_change\":13.7907375643},{\"date\":\"2018-11-19\",\"fuel\":\"diesel\",\"current_price\":3.282,\"yoy_price\":2.912,\"absolute_change\":0.37,\"percentage_change\":12.706043956},{\"date\":\"2018-11-26\",\"fuel\":\"diesel\",\"current_price\":3.261,\"yoy_price\":2.926,\"absolute_change\":0.335,\"percentage_change\":11.4490772386},{\"date\":\"2018-12-03\",\"fuel\":\"diesel\",\"current_price\":3.207,\"yoy_price\":2.922,\"absolute_change\":0.285,\"percentage_change\":9.7535934292},{\"date\":\"2018-12-10\",\"fuel\":\"diesel\",\"current_price\":3.161,\"yoy_price\":2.91,\"absolute_change\":0.251,\"percentage_change\":8.6254295533},{\"date\":\"2018-12-17\",\"fuel\":\"diesel\",\"current_price\":3.121,\"yoy_price\":2.901,\"absolute_change\":0.22,\"percentage_change\":7.5835918649},{\"date\":\"2018-12-24\",\"fuel\":\"diesel\",\"current_price\":3.077,\"yoy_price\":2.903,\"absolute_change\":0.174,\"percentage_change\":5.9937995177},{\"date\":\"2018-12-31\",\"fuel\":\"diesel\",\"current_price\":3.048,\"yoy_price\":2.973,\"absolute_change\":0.075,\"percentage_change\":2.5227043391},{\"date\":\"2019-01-07\",\"fuel\":\"diesel\",\"current_price\":3.013,\"yoy_price\":2.996,\"absolute_change\":0.017,\"percentage_change\":0.567423231},{\"date\":\"2019-01-14\",\"fuel\":\"diesel\",\"current_price\":2.976,\"yoy_price\":3.028,\"absolute_change\":-0.052,\"percentage_change\":-1.7173051519},{\"date\":\"2019-01-21\",\"fuel\":\"diesel\",\"current_price\":2.965,\"yoy_price\":3.025,\"absolute_change\":-0.06,\"percentage_change\":-1.9834710744},{\"date\":\"2019-01-28\",\"fuel\":\"diesel\",\"current_price\":2.965,\"yoy_price\":3.07,\"absolute_change\":-0.105,\"percentage_change\":-3.4201954397},{\"date\":\"2019-02-04\",\"fuel\":\"diesel\",\"current_price\":2.966,\"yoy_price\":3.086,\"absolute_change\":-0.12,\"percentage_change\":-3.8885288399},{\"date\":\"2019-02-11\",\"fuel\":\"diesel\",\"current_price\":2.966,\"yoy_price\":3.063,\"absolute_change\":-0.097,\"percentage_change\":-3.1668299053},{\"date\":\"2019-02-18\",\"fuel\":\"diesel\",\"current_price\":3.006,\"yoy_price\":3.027,\"absolute_change\":-0.021,\"percentage_change\":-0.6937561943},{\"date\":\"2019-02-25\",\"fuel\":\"diesel\",\"current_price\":3.048,\"yoy_price\":3.007,\"absolute_change\":0.041,\"percentage_change\":1.3634852012},{\"date\":\"2019-03-04\",\"fuel\":\"diesel\",\"current_price\":3.076,\"yoy_price\":2.992,\"absolute_change\":0.084,\"percentage_change\":2.807486631},{\"date\":\"2019-03-11\",\"fuel\":\"diesel\",\"current_price\":3.079,\"yoy_price\":2.976,\"absolute_change\":0.103,\"percentage_change\":3.4610215054},{\"date\":\"2019-03-18\",\"fuel\":\"diesel\",\"current_price\":3.07,\"yoy_price\":2.972,\"absolute_change\":0.098,\"percentage_change\":3.2974427995},{\"date\":\"2019-03-25\",\"fuel\":\"diesel\",\"current_price\":3.08,\"yoy_price\":3.01,\"absolute_change\":0.07,\"percentage_change\":2.3255813953},{\"date\":\"2019-04-01\",\"fuel\":\"diesel\",\"current_price\":3.078,\"yoy_price\":3.042,\"absolute_change\":0.036,\"percentage_change\":1.1834319527},{\"date\":\"2019-04-08\",\"fuel\":\"diesel\",\"current_price\":3.093,\"yoy_price\":3.043,\"absolute_change\":0.05,\"percentage_change\":1.6431153467},{\"date\":\"2019-04-15\",\"fuel\":\"diesel\",\"current_price\":3.118,\"yoy_price\":3.104,\"absolute_change\":0.014,\"percentage_change\":0.4510309278},{\"date\":\"2019-04-22\",\"fuel\":\"diesel\",\"current_price\":3.147,\"yoy_price\":3.133,\"absolute_change\":0.014,\"percentage_change\":0.4468560485},{\"date\":\"2019-04-29\",\"fuel\":\"diesel\",\"current_price\":3.169,\"yoy_price\":3.157,\"absolute_change\":0.012,\"percentage_change\":0.3801076972},{\"date\":\"2019-05-06\",\"fuel\":\"diesel\",\"current_price\":3.171,\"yoy_price\":3.171,\"absolute_change\":0,\"percentage_change\":0},{\"date\":\"2019-05-13\",\"fuel\":\"diesel\",\"current_price\":3.16,\"yoy_price\":3.239,\"absolute_change\":-0.079,\"percentage_change\":-2.4390243902},{\"date\":\"2019-05-20\",\"fuel\":\"diesel\",\"current_price\":3.163,\"yoy_price\":3.277,\"absolute_change\":-0.114,\"percentage_change\":-3.4787915777},{\"date\":\"2019-05-27\",\"fuel\":\"diesel\",\"current_price\":3.151,\"yoy_price\":3.288,\"absolute_change\":-0.137,\"percentage_change\":-4.1666666667},{\"date\":\"2019-06-03\",\"fuel\":\"diesel\",\"current_price\":3.136,\"yoy_price\":3.285,\"absolute_change\":-0.149,\"percentage_change\":-4.5357686454},{\"date\":\"2019-06-10\",\"fuel\":\"diesel\",\"current_price\":3.105,\"yoy_price\":3.266,\"absolute_change\":-0.161,\"percentage_change\":-4.9295774648},{\"date\":\"2019-06-17\",\"fuel\":\"diesel\",\"current_price\":3.07,\"yoy_price\":3.244,\"absolute_change\":-0.174,\"percentage_change\":-5.3637484587},{\"date\":\"2019-06-24\",\"fuel\":\"diesel\",\"current_price\":3.043,\"yoy_price\":3.216,\"absolute_change\":-0.173,\"percentage_change\":-5.3793532338},{\"date\":\"2019-07-01\",\"fuel\":\"diesel\",\"current_price\":3.042,\"yoy_price\":3.236,\"absolute_change\":-0.194,\"percentage_change\":-5.9950556242},{\"date\":\"2019-07-08\",\"fuel\":\"diesel\",\"current_price\":3.055,\"yoy_price\":3.243,\"absolute_change\":-0.188,\"percentage_change\":-5.7971014493},{\"date\":\"2019-07-15\",\"fuel\":\"diesel\",\"current_price\":3.051,\"yoy_price\":3.239,\"absolute_change\":-0.188,\"percentage_change\":-5.8042605743},{\"date\":\"2019-07-22\",\"fuel\":\"diesel\",\"current_price\":3.044,\"yoy_price\":3.22,\"absolute_change\":-0.176,\"percentage_change\":-5.4658385093},{\"date\":\"2019-07-29\",\"fuel\":\"diesel\",\"current_price\":3.034,\"yoy_price\":3.226,\"absolute_change\":-0.192,\"percentage_change\":-5.9516429014},{\"date\":\"2019-08-05\",\"fuel\":\"diesel\",\"current_price\":3.032,\"yoy_price\":3.223,\"absolute_change\":-0.191,\"percentage_change\":-5.9261557555},{\"date\":\"2019-08-12\",\"fuel\":\"diesel\",\"current_price\":3.011,\"yoy_price\":3.217,\"absolute_change\":-0.206,\"percentage_change\":-6.4034815045},{\"date\":\"2019-08-19\",\"fuel\":\"diesel\",\"current_price\":2.994,\"yoy_price\":3.207,\"absolute_change\":-0.213,\"percentage_change\":-6.6417212348},{\"date\":\"2019-08-26\",\"fuel\":\"diesel\",\"current_price\":2.983,\"yoy_price\":3.226,\"absolute_change\":-0.243,\"percentage_change\":-7.5325480471},{\"date\":\"2019-09-02\",\"fuel\":\"diesel\",\"current_price\":2.976,\"yoy_price\":3.252,\"absolute_change\":-0.276,\"percentage_change\":-8.4870848708},{\"date\":\"2019-09-09\",\"fuel\":\"diesel\",\"current_price\":2.971,\"yoy_price\":3.258,\"absolute_change\":-0.287,\"percentage_change\":-8.8090853284},{\"date\":\"2019-09-16\",\"fuel\":\"diesel\",\"current_price\":2.987,\"yoy_price\":3.268,\"absolute_change\":-0.281,\"percentage_change\":-8.5985312118},{\"date\":\"2019-09-23\",\"fuel\":\"diesel\",\"current_price\":3.081,\"yoy_price\":3.271,\"absolute_change\":-0.19,\"percentage_change\":-5.8086212168},{\"date\":\"2019-09-30\",\"fuel\":\"diesel\",\"current_price\":3.066,\"yoy_price\":3.313,\"absolute_change\":-0.247,\"percentage_change\":-7.4554784184},{\"date\":\"2019-10-07\",\"fuel\":\"diesel\",\"current_price\":3.047,\"yoy_price\":3.385,\"absolute_change\":-0.338,\"percentage_change\":-9.9852289513},{\"date\":\"2019-10-14\",\"fuel\":\"diesel\",\"current_price\":3.051,\"yoy_price\":3.394,\"absolute_change\":-0.343,\"percentage_change\":-10.1060695345},{\"date\":\"2019-10-21\",\"fuel\":\"diesel\",\"current_price\":3.05,\"yoy_price\":3.38,\"absolute_change\":-0.33,\"percentage_change\":-9.7633136095},{\"date\":\"2019-10-28\",\"fuel\":\"diesel\",\"current_price\":3.064,\"yoy_price\":3.355,\"absolute_change\":-0.291,\"percentage_change\":-8.6736214605},{\"date\":\"2019-11-04\",\"fuel\":\"diesel\",\"current_price\":3.062,\"yoy_price\":3.338,\"absolute_change\":-0.276,\"percentage_change\":-8.2684242061},{\"date\":\"2019-11-11\",\"fuel\":\"diesel\",\"current_price\":3.073,\"yoy_price\":3.317,\"absolute_change\":-0.244,\"percentage_change\":-7.3560446186},{\"date\":\"2019-11-18\",\"fuel\":\"diesel\",\"current_price\":3.074,\"yoy_price\":3.282,\"absolute_change\":-0.208,\"percentage_change\":-6.337599025},{\"date\":\"2019-11-25\",\"fuel\":\"diesel\",\"current_price\":3.066,\"yoy_price\":3.261,\"absolute_change\":-0.195,\"percentage_change\":-5.9797608096},{\"date\":\"2019-12-02\",\"fuel\":\"diesel\",\"current_price\":3.07,\"yoy_price\":3.207,\"absolute_change\":-0.137,\"percentage_change\":-4.2719052074},{\"date\":\"2019-12-09\",\"fuel\":\"diesel\",\"current_price\":3.049,\"yoy_price\":3.161,\"absolute_change\":-0.112,\"percentage_change\":-3.5431825372},{\"date\":\"2019-12-16\",\"fuel\":\"diesel\",\"current_price\":3.046,\"yoy_price\":3.121,\"absolute_change\":-0.075,\"percentage_change\":-2.4030759372},{\"date\":\"2019-12-23\",\"fuel\":\"diesel\",\"current_price\":3.041,\"yoy_price\":3.077,\"absolute_change\":-0.036,\"percentage_change\":-1.1699707507},{\"date\":\"2019-12-30\",\"fuel\":\"diesel\",\"current_price\":3.069,\"yoy_price\":3.048,\"absolute_change\":0.021,\"percentage_change\":0.688976378},{\"date\":\"2020-01-06\",\"fuel\":\"diesel\",\"current_price\":3.079,\"yoy_price\":3.013,\"absolute_change\":0.066,\"percentage_change\":2.1905077995},{\"date\":\"2020-01-13\",\"fuel\":\"diesel\",\"current_price\":3.064,\"yoy_price\":2.976,\"absolute_change\":0.088,\"percentage_change\":2.9569892473},{\"date\":\"2020-01-20\",\"fuel\":\"diesel\",\"current_price\":3.037,\"yoy_price\":2.965,\"absolute_change\":0.072,\"percentage_change\":2.4283305228},{\"date\":\"2020-01-27\",\"fuel\":\"diesel\",\"current_price\":3.01,\"yoy_price\":2.965,\"absolute_change\":0.045,\"percentage_change\":1.5177065767},{\"date\":\"2020-02-03\",\"fuel\":\"diesel\",\"current_price\":2.956,\"yoy_price\":2.966,\"absolute_change\":-0.01,\"percentage_change\":-0.3371544167},{\"date\":\"2020-02-10\",\"fuel\":\"diesel\",\"current_price\":2.91,\"yoy_price\":2.966,\"absolute_change\":-0.056,\"percentage_change\":-1.8880647336},{\"date\":\"2020-02-17\",\"fuel\":\"diesel\",\"current_price\":2.89,\"yoy_price\":3.006,\"absolute_change\":-0.116,\"percentage_change\":-3.8589487691},{\"date\":\"2020-02-24\",\"fuel\":\"diesel\",\"current_price\":2.882,\"yoy_price\":3.048,\"absolute_change\":-0.166,\"percentage_change\":-5.4461942257},{\"date\":\"2020-03-02\",\"fuel\":\"diesel\",\"current_price\":2.851,\"yoy_price\":3.076,\"absolute_change\":-0.225,\"percentage_change\":-7.3146944083},{\"date\":\"2020-03-09\",\"fuel\":\"diesel\",\"current_price\":2.814,\"yoy_price\":3.079,\"absolute_change\":-0.265,\"percentage_change\":-8.6066904839},{\"date\":\"2020-03-16\",\"fuel\":\"diesel\",\"current_price\":2.733,\"yoy_price\":3.07,\"absolute_change\":-0.337,\"percentage_change\":-10.9771986971},{\"date\":\"2020-03-23\",\"fuel\":\"diesel\",\"current_price\":2.659,\"yoy_price\":3.08,\"absolute_change\":-0.421,\"percentage_change\":-13.6688311688},{\"date\":\"2020-03-30\",\"fuel\":\"diesel\",\"current_price\":2.586,\"yoy_price\":3.078,\"absolute_change\":-0.492,\"percentage_change\":-15.9844054581},{\"date\":\"2020-04-06\",\"fuel\":\"diesel\",\"current_price\":2.548,\"yoy_price\":3.093,\"absolute_change\":-0.545,\"percentage_change\":-17.6204332363},{\"date\":\"2020-04-13\",\"fuel\":\"diesel\",\"current_price\":2.507,\"yoy_price\":3.118,\"absolute_change\":-0.611,\"percentage_change\":-19.5958948044},{\"date\":\"2020-04-20\",\"fuel\":\"diesel\",\"current_price\":2.48,\"yoy_price\":3.147,\"absolute_change\":-0.667,\"percentage_change\":-21.1947886876},{\"date\":\"2020-04-27\",\"fuel\":\"diesel\",\"current_price\":2.437,\"yoy_price\":3.169,\"absolute_change\":-0.732,\"percentage_change\":-23.0987693279},{\"date\":\"2020-05-04\",\"fuel\":\"diesel\",\"current_price\":2.399,\"yoy_price\":3.171,\"absolute_change\":-0.772,\"percentage_change\":-24.3456322927},{\"date\":\"2020-05-11\",\"fuel\":\"diesel\",\"current_price\":2.394,\"yoy_price\":3.16,\"absolute_change\":-0.766,\"percentage_change\":-24.2405063291},{\"date\":\"2020-05-18\",\"fuel\":\"diesel\",\"current_price\":2.386,\"yoy_price\":3.163,\"absolute_change\":-0.777,\"percentage_change\":-24.5652861208},{\"date\":\"2020-05-25\",\"fuel\":\"diesel\",\"current_price\":2.39,\"yoy_price\":3.151,\"absolute_change\":-0.761,\"percentage_change\":-24.1510631546},{\"date\":\"2020-06-01\",\"fuel\":\"diesel\",\"current_price\":2.386,\"yoy_price\":3.136,\"absolute_change\":-0.75,\"percentage_change\":-23.9158163265},{\"date\":\"2020-06-08\",\"fuel\":\"diesel\",\"current_price\":2.396,\"yoy_price\":3.105,\"absolute_change\":-0.709,\"percentage_change\":-22.8341384863},{\"date\":\"2020-06-15\",\"fuel\":\"diesel\",\"current_price\":2.403,\"yoy_price\":3.07,\"absolute_change\":-0.667,\"percentage_change\":-21.7263843648},{\"date\":\"2020-06-22\",\"fuel\":\"diesel\",\"current_price\":2.425,\"yoy_price\":3.043,\"absolute_change\":-0.618,\"percentage_change\":-20.3089056852},{\"date\":\"2020-06-29\",\"fuel\":\"diesel\",\"current_price\":2.43,\"yoy_price\":3.042,\"absolute_change\":-0.612,\"percentage_change\":-20.1183431953},{\"date\":\"2020-07-06\",\"fuel\":\"diesel\",\"current_price\":2.437,\"yoy_price\":3.055,\"absolute_change\":-0.618,\"percentage_change\":-20.2291325696},{\"date\":\"2020-07-13\",\"fuel\":\"diesel\",\"current_price\":2.438,\"yoy_price\":3.051,\"absolute_change\":-0.613,\"percentage_change\":-20.0917731891},{\"date\":\"2020-07-20\",\"fuel\":\"diesel\",\"current_price\":2.433,\"yoy_price\":3.044,\"absolute_change\":-0.611,\"percentage_change\":-20.0722733246},{\"date\":\"2020-07-27\",\"fuel\":\"diesel\",\"current_price\":2.427,\"yoy_price\":3.034,\"absolute_change\":-0.607,\"percentage_change\":-20.0065919578},{\"date\":\"2020-08-03\",\"fuel\":\"diesel\",\"current_price\":2.424,\"yoy_price\":3.032,\"absolute_change\":-0.608,\"percentage_change\":-20.0527704485},{\"date\":\"2020-08-10\",\"fuel\":\"diesel\",\"current_price\":2.428,\"yoy_price\":3.011,\"absolute_change\":-0.583,\"percentage_change\":-19.3623380937},{\"date\":\"2020-08-17\",\"fuel\":\"diesel\",\"current_price\":2.427,\"yoy_price\":2.994,\"absolute_change\":-0.567,\"percentage_change\":-18.9378757515},{\"date\":\"2020-08-24\",\"fuel\":\"diesel\",\"current_price\":2.426,\"yoy_price\":2.983,\"absolute_change\":-0.557,\"percentage_change\":-18.6724773718},{\"date\":\"2020-08-31\",\"fuel\":\"diesel\",\"current_price\":2.441,\"yoy_price\":2.976,\"absolute_change\":-0.535,\"percentage_change\":-17.9771505376},{\"date\":\"2020-09-07\",\"fuel\":\"diesel\",\"current_price\":2.435,\"yoy_price\":2.971,\"absolute_change\":-0.536,\"percentage_change\":-18.0410636149},{\"date\":\"2020-09-14\",\"fuel\":\"diesel\",\"current_price\":2.422,\"yoy_price\":2.987,\"absolute_change\":-0.565,\"percentage_change\":-18.9152996317},{\"date\":\"2020-09-21\",\"fuel\":\"diesel\",\"current_price\":2.404,\"yoy_price\":3.081,\"absolute_change\":-0.677,\"percentage_change\":-21.9733852645},{\"date\":\"2020-09-28\",\"fuel\":\"diesel\",\"current_price\":2.394,\"yoy_price\":3.066,\"absolute_change\":-0.672,\"percentage_change\":-21.9178082192},{\"date\":\"2020-10-05\",\"fuel\":\"diesel\",\"current_price\":2.387,\"yoy_price\":3.047,\"absolute_change\":-0.66,\"percentage_change\":-21.6606498195},{\"date\":\"2020-10-12\",\"fuel\":\"diesel\",\"current_price\":2.395,\"yoy_price\":3.051,\"absolute_change\":-0.656,\"percentage_change\":-21.5011471649},{\"date\":\"2020-10-19\",\"fuel\":\"diesel\",\"current_price\":2.388,\"yoy_price\":3.05,\"absolute_change\":-0.662,\"percentage_change\":-21.7049180328},{\"date\":\"2020-10-26\",\"fuel\":\"diesel\",\"current_price\":2.385,\"yoy_price\":3.064,\"absolute_change\":-0.679,\"percentage_change\":-22.1605744125},{\"date\":\"2020-11-02\",\"fuel\":\"diesel\",\"current_price\":2.372,\"yoy_price\":3.062,\"absolute_change\":-0.69,\"percentage_change\":-22.5342913129},{\"date\":\"2020-11-09\",\"fuel\":\"diesel\",\"current_price\":2.383,\"yoy_price\":3.073,\"absolute_change\":-0.69,\"percentage_change\":-22.4536283762},{\"date\":\"2020-11-16\",\"fuel\":\"diesel\",\"current_price\":2.441,\"yoy_price\":3.074,\"absolute_change\":-0.633,\"percentage_change\":-20.5920624593},{\"date\":\"2020-11-23\",\"fuel\":\"diesel\",\"current_price\":2.462,\"yoy_price\":3.066,\"absolute_change\":-0.604,\"percentage_change\":-19.6999347684},{\"date\":\"2020-11-30\",\"fuel\":\"diesel\",\"current_price\":2.502,\"yoy_price\":3.07,\"absolute_change\":-0.568,\"percentage_change\":-18.5016286645},{\"date\":\"2020-12-07\",\"fuel\":\"diesel\",\"current_price\":2.526,\"yoy_price\":3.049,\"absolute_change\":-0.523,\"percentage_change\":-17.1531649721},{\"date\":\"2020-12-14\",\"fuel\":\"diesel\",\"current_price\":2.559,\"yoy_price\":3.046,\"absolute_change\":-0.487,\"percentage_change\":-15.9881812213},{\"date\":\"2020-12-21\",\"fuel\":\"diesel\",\"current_price\":2.619,\"yoy_price\":3.041,\"absolute_change\":-0.422,\"percentage_change\":-13.8770141401},{\"date\":\"2020-12-28\",\"fuel\":\"diesel\",\"current_price\":2.635,\"yoy_price\":3.069,\"absolute_change\":-0.434,\"percentage_change\":-14.1414141414},{\"date\":\"2021-01-04\",\"fuel\":\"diesel\",\"current_price\":2.64,\"yoy_price\":3.079,\"absolute_change\":-0.439,\"percentage_change\":-14.2578759337},{\"date\":\"2021-01-11\",\"fuel\":\"diesel\",\"current_price\":2.67,\"yoy_price\":3.064,\"absolute_change\":-0.394,\"percentage_change\":-12.8590078329},{\"date\":\"2021-01-18\",\"fuel\":\"diesel\",\"current_price\":2.696,\"yoy_price\":3.037,\"absolute_change\":-0.341,\"percentage_change\":-11.2281857096},{\"date\":\"2021-01-25\",\"fuel\":\"diesel\",\"current_price\":2.716,\"yoy_price\":3.01,\"absolute_change\":-0.294,\"percentage_change\":-9.7674418605},{\"date\":\"2021-02-01\",\"fuel\":\"diesel\",\"current_price\":2.738,\"yoy_price\":2.956,\"absolute_change\":-0.218,\"percentage_change\":-7.3748308525},{\"date\":\"2021-02-08\",\"fuel\":\"diesel\",\"current_price\":2.801,\"yoy_price\":2.91,\"absolute_change\":-0.109,\"percentage_change\":-3.7457044674},{\"date\":\"2021-02-15\",\"fuel\":\"diesel\",\"current_price\":2.876,\"yoy_price\":2.89,\"absolute_change\":-0.014,\"percentage_change\":-0.4844290657},{\"date\":\"2021-02-22\",\"fuel\":\"diesel\",\"current_price\":2.973,\"yoy_price\":2.882,\"absolute_change\":0.091,\"percentage_change\":3.1575294934},{\"date\":\"2021-03-01\",\"fuel\":\"diesel\",\"current_price\":3.072,\"yoy_price\":2.851,\"absolute_change\":0.221,\"percentage_change\":7.7516660821},{\"date\":\"2021-03-08\",\"fuel\":\"diesel\",\"current_price\":3.143,\"yoy_price\":2.814,\"absolute_change\":0.329,\"percentage_change\":11.6915422886},{\"date\":\"2021-03-15\",\"fuel\":\"diesel\",\"current_price\":3.191,\"yoy_price\":2.733,\"absolute_change\":0.458,\"percentage_change\":16.7581412367},{\"date\":\"2021-03-22\",\"fuel\":\"diesel\",\"current_price\":3.194,\"yoy_price\":2.659,\"absolute_change\":0.535,\"percentage_change\":20.1203459947},{\"date\":\"2021-03-29\",\"fuel\":\"diesel\",\"current_price\":3.161,\"yoy_price\":2.586,\"absolute_change\":0.575,\"percentage_change\":22.2351121423},{\"date\":\"2021-04-05\",\"fuel\":\"diesel\",\"current_price\":3.144,\"yoy_price\":2.548,\"absolute_change\":0.596,\"percentage_change\":23.3908948195},{\"date\":\"2021-04-12\",\"fuel\":\"diesel\",\"current_price\":3.129,\"yoy_price\":2.507,\"absolute_change\":0.622,\"percentage_change\":24.8105305146},{\"date\":\"2021-04-19\",\"fuel\":\"diesel\",\"current_price\":3.124,\"yoy_price\":2.48,\"absolute_change\":0.644,\"percentage_change\":25.9677419355},{\"date\":\"2021-04-26\",\"fuel\":\"diesel\",\"current_price\":3.124,\"yoy_price\":2.437,\"absolute_change\":0.687,\"percentage_change\":28.1903980304},{\"date\":\"2021-05-03\",\"fuel\":\"diesel\",\"current_price\":3.142,\"yoy_price\":2.399,\"absolute_change\":0.743,\"percentage_change\":30.9712380158},{\"date\":\"2021-05-10\",\"fuel\":\"diesel\",\"current_price\":3.186,\"yoy_price\":2.394,\"absolute_change\":0.792,\"percentage_change\":33.0827067669},{\"date\":\"2021-05-17\",\"fuel\":\"diesel\",\"current_price\":3.249,\"yoy_price\":2.386,\"absolute_change\":0.863,\"percentage_change\":36.1693210394},{\"date\":\"2021-05-24\",\"fuel\":\"diesel\",\"current_price\":3.253,\"yoy_price\":2.39,\"absolute_change\":0.863,\"percentage_change\":36.1087866109},{\"date\":\"2021-05-31\",\"fuel\":\"diesel\",\"current_price\":3.255,\"yoy_price\":2.386,\"absolute_change\":0.869,\"percentage_change\":36.4207879296},{\"date\":\"2021-06-07\",\"fuel\":\"diesel\",\"current_price\":3.274,\"yoy_price\":2.396,\"absolute_change\":0.878,\"percentage_change\":36.6444073456},{\"date\":\"2021-06-14\",\"fuel\":\"diesel\",\"current_price\":3.286,\"yoy_price\":2.403,\"absolute_change\":0.883,\"percentage_change\":36.7457344985},{\"date\":\"2021-06-21\",\"fuel\":\"diesel\",\"current_price\":3.287,\"yoy_price\":2.425,\"absolute_change\":0.862,\"percentage_change\":35.5463917526},{\"date\":\"2021-06-28\",\"fuel\":\"diesel\",\"current_price\":3.3,\"yoy_price\":2.43,\"absolute_change\":0.87,\"percentage_change\":35.8024691358},{\"date\":\"2021-07-05\",\"fuel\":\"diesel\",\"current_price\":3.331,\"yoy_price\":2.437,\"absolute_change\":0.894,\"percentage_change\":36.6844480919},{\"date\":\"2021-07-12\",\"fuel\":\"diesel\",\"current_price\":3.338,\"yoy_price\":2.438,\"absolute_change\":0.9,\"percentage_change\":36.9155045119},{\"date\":\"2021-07-19\",\"fuel\":\"diesel\",\"current_price\":3.344,\"yoy_price\":2.433,\"absolute_change\":0.911,\"percentage_change\":37.443485409},{\"date\":\"2021-07-26\",\"fuel\":\"diesel\",\"current_price\":3.342,\"yoy_price\":2.427,\"absolute_change\":0.915,\"percentage_change\":37.7008652658},{\"date\":\"2021-08-02\",\"fuel\":\"diesel\",\"current_price\":3.367,\"yoy_price\":2.424,\"absolute_change\":0.943,\"percentage_change\":38.902640264},{\"date\":\"2021-08-09\",\"fuel\":\"diesel\",\"current_price\":3.364,\"yoy_price\":2.428,\"absolute_change\":0.936,\"percentage_change\":38.550247117},{\"date\":\"2021-08-16\",\"fuel\":\"diesel\",\"current_price\":3.356,\"yoy_price\":2.427,\"absolute_change\":0.929,\"percentage_change\":38.2777091059},{\"date\":\"2021-08-23\",\"fuel\":\"diesel\",\"current_price\":3.324,\"yoy_price\":2.426,\"absolute_change\":0.898,\"percentage_change\":37.0156636439},{\"date\":\"2021-08-30\",\"fuel\":\"diesel\",\"current_price\":3.339,\"yoy_price\":2.441,\"absolute_change\":0.898,\"percentage_change\":36.7882015567},{\"date\":\"2021-09-06\",\"fuel\":\"diesel\",\"current_price\":3.373,\"yoy_price\":2.435,\"absolute_change\":0.938,\"percentage_change\":38.5215605749},{\"date\":\"2021-09-13\",\"fuel\":\"diesel\",\"current_price\":3.372,\"yoy_price\":2.422,\"absolute_change\":0.95,\"percentage_change\":39.2237819983},{\"date\":\"2021-09-20\",\"fuel\":\"diesel\",\"current_price\":3.385,\"yoy_price\":2.404,\"absolute_change\":0.981,\"percentage_change\":40.8069883527},{\"date\":\"2021-09-27\",\"fuel\":\"diesel\",\"current_price\":3.406,\"yoy_price\":2.394,\"absolute_change\":1.012,\"percentage_change\":42.2723475355},{\"date\":\"2021-10-04\",\"fuel\":\"diesel\",\"current_price\":3.477,\"yoy_price\":2.387,\"absolute_change\":1.09,\"percentage_change\":45.6640134059},{\"date\":\"2021-10-11\",\"fuel\":\"diesel\",\"current_price\":3.586,\"yoy_price\":2.395,\"absolute_change\":1.191,\"percentage_change\":49.7286012526},{\"date\":\"2021-10-18\",\"fuel\":\"diesel\",\"current_price\":3.671,\"yoy_price\":2.388,\"absolute_change\":1.283,\"percentage_change\":53.7269681742},{\"date\":\"2021-10-25\",\"fuel\":\"diesel\",\"current_price\":3.713,\"yoy_price\":2.385,\"absolute_change\":1.328,\"percentage_change\":55.6813417191},{\"date\":\"2021-11-01\",\"fuel\":\"diesel\",\"current_price\":3.727,\"yoy_price\":2.372,\"absolute_change\":1.355,\"percentage_change\":57.1247892074},{\"date\":\"2021-11-08\",\"fuel\":\"diesel\",\"current_price\":3.73,\"yoy_price\":2.383,\"absolute_change\":1.347,\"percentage_change\":56.5253881662},{\"date\":\"2021-11-15\",\"fuel\":\"diesel\",\"current_price\":3.734,\"yoy_price\":2.441,\"absolute_change\":1.293,\"percentage_change\":52.9700942237},{\"date\":\"2021-11-22\",\"fuel\":\"diesel\",\"current_price\":3.724,\"yoy_price\":2.462,\"absolute_change\":1.262,\"percentage_change\":51.2591389115},{\"date\":\"2021-11-29\",\"fuel\":\"diesel\",\"current_price\":3.72,\"yoy_price\":2.502,\"absolute_change\":1.218,\"percentage_change\":48.6810551559},{\"date\":\"2021-12-06\",\"fuel\":\"diesel\",\"current_price\":3.674,\"yoy_price\":2.526,\"absolute_change\":1.148,\"percentage_change\":45.4473475851},{\"date\":\"2021-12-13\",\"fuel\":\"diesel\",\"current_price\":3.649,\"yoy_price\":2.559,\"absolute_change\":1.09,\"percentage_change\":42.5947635795},{\"date\":\"2021-12-20\",\"fuel\":\"diesel\",\"current_price\":3.626,\"yoy_price\":2.619,\"absolute_change\":1.007,\"percentage_change\":38.4497899962},{\"date\":\"2021-12-27\",\"fuel\":\"diesel\",\"current_price\":3.615,\"yoy_price\":2.635,\"absolute_change\":0.98,\"percentage_change\":37.1916508539},{\"date\":\"2022-01-03\",\"fuel\":\"diesel\",\"current_price\":3.613,\"yoy_price\":2.64,\"absolute_change\":0.973,\"percentage_change\":36.8560606061},{\"date\":\"2022-01-10\",\"fuel\":\"diesel\",\"current_price\":3.657,\"yoy_price\":2.67,\"absolute_change\":0.987,\"percentage_change\":36.9662921348},{\"date\":\"2022-01-17\",\"fuel\":\"diesel\",\"current_price\":3.725,\"yoy_price\":2.696,\"absolute_change\":1.029,\"percentage_change\":38.1676557864},{\"date\":\"2022-01-24\",\"fuel\":\"diesel\",\"current_price\":3.78,\"yoy_price\":2.716,\"absolute_change\":1.064,\"percentage_change\":39.175257732},{\"date\":\"2022-01-31\",\"fuel\":\"diesel\",\"current_price\":3.846,\"yoy_price\":2.738,\"absolute_change\":1.108,\"percentage_change\":40.4674945215},{\"date\":\"2022-02-07\",\"fuel\":\"diesel\",\"current_price\":3.951,\"yoy_price\":2.801,\"absolute_change\":1.15,\"percentage_change\":41.0567654409},{\"date\":\"2022-02-14\",\"fuel\":\"diesel\",\"current_price\":4.019,\"yoy_price\":2.876,\"absolute_change\":1.143,\"percentage_change\":39.7426981919},{\"date\":\"2022-02-21\",\"fuel\":\"diesel\",\"current_price\":4.055,\"yoy_price\":2.973,\"absolute_change\":1.082,\"percentage_change\":36.394214598},{\"date\":\"2022-02-28\",\"fuel\":\"diesel\",\"current_price\":4.104,\"yoy_price\":3.072,\"absolute_change\":1.032,\"percentage_change\":33.59375},{\"date\":\"2022-03-07\",\"fuel\":\"diesel\",\"current_price\":4.849,\"yoy_price\":3.143,\"absolute_change\":1.706,\"percentage_change\":54.2793509386},{\"date\":\"2022-03-14\",\"fuel\":\"diesel\",\"current_price\":5.25,\"yoy_price\":3.191,\"absolute_change\":2.059,\"percentage_change\":64.5252272015},{\"date\":\"2022-03-21\",\"fuel\":\"diesel\",\"current_price\":5.134,\"yoy_price\":3.194,\"absolute_change\":1.94,\"percentage_change\":60.7388854101},{\"date\":\"2022-03-28\",\"fuel\":\"diesel\",\"current_price\":5.185,\"yoy_price\":3.161,\"absolute_change\":2.024,\"percentage_change\":64.030370136},{\"date\":\"2022-04-04\",\"fuel\":\"diesel\",\"current_price\":5.144,\"yoy_price\":3.144,\"absolute_change\":2,\"percentage_change\":63.6132315522},{\"date\":\"2022-04-11\",\"fuel\":\"diesel\",\"current_price\":5.073,\"yoy_price\":3.129,\"absolute_change\":1.944,\"percentage_change\":62.1284755513},{\"date\":\"2022-04-18\",\"fuel\":\"diesel\",\"current_price\":5.101,\"yoy_price\":3.124,\"absolute_change\":1.977,\"percentage_change\":63.2842509603},{\"date\":\"2022-04-25\",\"fuel\":\"diesel\",\"current_price\":5.16,\"yoy_price\":3.124,\"absolute_change\":2.036,\"percentage_change\":65.1728553137},{\"date\":\"2022-05-02\",\"fuel\":\"diesel\",\"current_price\":5.509,\"yoy_price\":3.142,\"absolute_change\":2.367,\"percentage_change\":75.3341820496},{\"date\":\"2022-05-09\",\"fuel\":\"diesel\",\"current_price\":5.623,\"yoy_price\":3.186,\"absolute_change\":2.437,\"percentage_change\":76.4908976773},{\"date\":\"2022-05-16\",\"fuel\":\"diesel\",\"current_price\":5.613,\"yoy_price\":3.249,\"absolute_change\":2.364,\"percentage_change\":72.7608494922},{\"date\":\"2022-05-23\",\"fuel\":\"diesel\",\"current_price\":5.571,\"yoy_price\":3.253,\"absolute_change\":2.318,\"percentage_change\":71.257300953},{\"date\":\"2022-05-30\",\"fuel\":\"diesel\",\"current_price\":5.539,\"yoy_price\":3.255,\"absolute_change\":2.284,\"percentage_change\":70.1689708141},{\"date\":\"2022-06-06\",\"fuel\":\"diesel\",\"current_price\":5.703,\"yoy_price\":3.274,\"absolute_change\":2.429,\"percentage_change\":74.1905925473},{\"date\":\"2022-06-13\",\"fuel\":\"diesel\",\"current_price\":5.718,\"yoy_price\":3.286,\"absolute_change\":2.432,\"percentage_change\":74.0109555691},{\"date\":\"2022-06-20\",\"fuel\":\"diesel\",\"current_price\":5.81,\"yoy_price\":3.287,\"absolute_change\":2.523,\"percentage_change\":76.7569212047},{\"date\":\"2022-06-27\",\"fuel\":\"diesel\",\"current_price\":5.783,\"yoy_price\":3.3,\"absolute_change\":2.483,\"percentage_change\":75.2424242424},{\"date\":\"2022-07-04\",\"fuel\":\"diesel\",\"current_price\":5.675,\"yoy_price\":3.331,\"absolute_change\":2.344,\"percentage_change\":70.3692584809},{\"date\":\"2022-07-11\",\"fuel\":\"diesel\",\"current_price\":5.568,\"yoy_price\":3.338,\"absolute_change\":2.23,\"percentage_change\":66.8064709407},{\"date\":\"2022-07-18\",\"fuel\":\"diesel\",\"current_price\":5.432,\"yoy_price\":3.344,\"absolute_change\":2.088,\"percentage_change\":62.4401913876},{\"date\":\"2022-07-25\",\"fuel\":\"diesel\",\"current_price\":5.268,\"yoy_price\":3.342,\"absolute_change\":1.926,\"percentage_change\":57.6301615799},{\"date\":\"2022-08-01\",\"fuel\":\"diesel\",\"current_price\":5.138,\"yoy_price\":3.367,\"absolute_change\":1.771,\"percentage_change\":52.5987525988},{\"date\":\"2022-08-08\",\"fuel\":\"diesel\",\"current_price\":4.993,\"yoy_price\":3.364,\"absolute_change\":1.629,\"percentage_change\":48.4244946492},{\"date\":\"2022-08-15\",\"fuel\":\"diesel\",\"current_price\":4.911,\"yoy_price\":3.356,\"absolute_change\":1.555,\"percentage_change\":46.3349225268},{\"date\":\"2022-08-22\",\"fuel\":\"diesel\",\"current_price\":4.909,\"yoy_price\":3.324,\"absolute_change\":1.585,\"percentage_change\":47.6835138387},{\"date\":\"2022-08-29\",\"fuel\":\"diesel\",\"current_price\":5.115,\"yoy_price\":3.339,\"absolute_change\":1.776,\"percentage_change\":53.1895777179},{\"date\":\"2022-09-05\",\"fuel\":\"diesel\",\"current_price\":5.084,\"yoy_price\":3.373,\"absolute_change\":1.711,\"percentage_change\":50.7263563593},{\"date\":\"2022-09-12\",\"fuel\":\"diesel\",\"current_price\":5.033,\"yoy_price\":3.372,\"absolute_change\":1.661,\"percentage_change\":49.2586002372},{\"date\":\"2022-09-19\",\"fuel\":\"diesel\",\"current_price\":4.964,\"yoy_price\":3.385,\"absolute_change\":1.579,\"percentage_change\":46.646971935},{\"date\":\"2022-09-26\",\"fuel\":\"diesel\",\"current_price\":4.889,\"yoy_price\":3.406,\"absolute_change\":1.483,\"percentage_change\":43.5408103347},{\"date\":\"2022-10-03\",\"fuel\":\"diesel\",\"current_price\":4.836,\"yoy_price\":3.477,\"absolute_change\":1.359,\"percentage_change\":39.0854184642},{\"date\":\"2022-10-10\",\"fuel\":\"diesel\",\"current_price\":5.224,\"yoy_price\":3.586,\"absolute_change\":1.638,\"percentage_change\":45.6776352482},{\"date\":\"2022-10-17\",\"fuel\":\"diesel\",\"current_price\":5.339,\"yoy_price\":3.671,\"absolute_change\":1.668,\"percentage_change\":45.4372105693},{\"date\":\"2022-10-24\",\"fuel\":\"diesel\",\"current_price\":5.341,\"yoy_price\":3.713,\"absolute_change\":1.628,\"percentage_change\":43.8459466738},{\"date\":\"2022-10-31\",\"fuel\":\"diesel\",\"current_price\":5.317,\"yoy_price\":3.727,\"absolute_change\":1.59,\"percentage_change\":42.6616581701},{\"date\":\"2022-11-07\",\"fuel\":\"diesel\",\"current_price\":5.333,\"yoy_price\":3.73,\"absolute_change\":1.603,\"percentage_change\":42.9758713137},{\"date\":\"2022-11-14\",\"fuel\":\"diesel\",\"current_price\":5.313,\"yoy_price\":3.734,\"absolute_change\":1.579,\"percentage_change\":42.2870915908},{\"date\":\"2022-11-21\",\"fuel\":\"diesel\",\"current_price\":5.233,\"yoy_price\":3.724,\"absolute_change\":1.509,\"percentage_change\":40.5209452202},{\"date\":\"2022-11-28\",\"fuel\":\"diesel\",\"current_price\":5.141,\"yoy_price\":3.72,\"absolute_change\":1.421,\"percentage_change\":38.1989247312},{\"date\":\"2022-12-05\",\"fuel\":\"diesel\",\"current_price\":4.967,\"yoy_price\":3.674,\"absolute_change\":1.293,\"percentage_change\":35.1932498639},{\"date\":\"2022-12-12\",\"fuel\":\"diesel\",\"current_price\":4.754,\"yoy_price\":3.649,\"absolute_change\":1.105,\"percentage_change\":30.2822691148},{\"date\":\"2022-12-19\",\"fuel\":\"diesel\",\"current_price\":4.596,\"yoy_price\":3.626,\"absolute_change\":0.97,\"percentage_change\":26.751241037},{\"date\":\"2022-12-26\",\"fuel\":\"diesel\",\"current_price\":4.537,\"yoy_price\":3.615,\"absolute_change\":0.922,\"percentage_change\":25.5048409405},{\"date\":\"2023-01-02\",\"fuel\":\"diesel\",\"current_price\":4.583,\"yoy_price\":3.613,\"absolute_change\":0.97,\"percentage_change\":26.8474951564},{\"date\":\"2023-01-09\",\"fuel\":\"diesel\",\"current_price\":4.549,\"yoy_price\":3.657,\"absolute_change\":0.892,\"percentage_change\":24.391577796},{\"date\":\"2023-01-16\",\"fuel\":\"diesel\",\"current_price\":4.524,\"yoy_price\":3.725,\"absolute_change\":0.799,\"percentage_change\":21.4496644295},{\"date\":\"2023-01-23\",\"fuel\":\"diesel\",\"current_price\":4.604,\"yoy_price\":3.78,\"absolute_change\":0.824,\"percentage_change\":21.7989417989},{\"date\":\"2023-01-30\",\"fuel\":\"diesel\",\"current_price\":4.622,\"yoy_price\":3.846,\"absolute_change\":0.776,\"percentage_change\":20.1768070723},{\"date\":\"2023-02-06\",\"fuel\":\"diesel\",\"current_price\":4.539,\"yoy_price\":3.951,\"absolute_change\":0.588,\"percentage_change\":14.8823082764},{\"date\":\"2023-02-13\",\"fuel\":\"diesel\",\"current_price\":4.444,\"yoy_price\":4.019,\"absolute_change\":0.425,\"percentage_change\":10.5747698432},{\"date\":\"2023-02-20\",\"fuel\":\"diesel\",\"current_price\":4.376,\"yoy_price\":4.055,\"absolute_change\":0.321,\"percentage_change\":7.9161528977},{\"date\":\"2023-02-27\",\"fuel\":\"diesel\",\"current_price\":4.294,\"yoy_price\":4.104,\"absolute_change\":0.19,\"percentage_change\":4.6296296296},{\"date\":\"2023-03-06\",\"fuel\":\"diesel\",\"current_price\":4.282,\"yoy_price\":4.849,\"absolute_change\":-0.567,\"percentage_change\":-11.6931326047},{\"date\":\"2023-03-13\",\"fuel\":\"diesel\",\"current_price\":4.247,\"yoy_price\":5.25,\"absolute_change\":-1.003,\"percentage_change\":-19.1047619048},{\"date\":\"2023-03-20\",\"fuel\":\"diesel\",\"current_price\":4.185,\"yoy_price\":5.134,\"absolute_change\":-0.949,\"percentage_change\":-18.484612388},{\"date\":\"2023-03-27\",\"fuel\":\"diesel\",\"current_price\":4.128,\"yoy_price\":5.185,\"absolute_change\":-1.057,\"percentage_change\":-20.3857280617},{\"date\":\"2023-04-03\",\"fuel\":\"diesel\",\"current_price\":4.105,\"yoy_price\":5.144,\"absolute_change\":-1.039,\"percentage_change\":-20.1982892691},{\"date\":\"2023-04-10\",\"fuel\":\"diesel\",\"current_price\":4.098,\"yoy_price\":5.073,\"absolute_change\":-0.975,\"percentage_change\":-19.2193968066},{\"date\":\"2023-04-17\",\"fuel\":\"diesel\",\"current_price\":4.116,\"yoy_price\":5.101,\"absolute_change\":-0.985,\"percentage_change\":-19.3099392276},{\"date\":\"2023-04-24\",\"fuel\":\"diesel\",\"current_price\":4.077,\"yoy_price\":5.16,\"absolute_change\":-1.083,\"percentage_change\":-20.988372093},{\"date\":\"2023-05-01\",\"fuel\":\"diesel\",\"current_price\":4.018,\"yoy_price\":5.509,\"absolute_change\":-1.491,\"percentage_change\":-27.0648030496},{\"date\":\"2023-05-08\",\"fuel\":\"diesel\",\"current_price\":3.922,\"yoy_price\":5.623,\"absolute_change\":-1.701,\"percentage_change\":-30.2507558243},{\"date\":\"2023-05-15\",\"fuel\":\"diesel\",\"current_price\":3.897,\"yoy_price\":5.613,\"absolute_change\":-1.716,\"percentage_change\":-30.5718866916},{\"date\":\"2023-05-22\",\"fuel\":\"diesel\",\"current_price\":3.883,\"yoy_price\":5.571,\"absolute_change\":-1.688,\"percentage_change\":-30.2997666487},{\"date\":\"2023-05-29\",\"fuel\":\"diesel\",\"current_price\":3.855,\"yoy_price\":5.539,\"absolute_change\":-1.684,\"percentage_change\":-30.4025997472},{\"date\":\"2023-06-05\",\"fuel\":\"diesel\",\"current_price\":3.797,\"yoy_price\":5.703,\"absolute_change\":-1.906,\"percentage_change\":-33.4210064878},{\"date\":\"2023-06-12\",\"fuel\":\"diesel\",\"current_price\":3.794,\"yoy_price\":5.718,\"absolute_change\":-1.924,\"percentage_change\":-33.6481287163},{\"date\":\"2023-06-19\",\"fuel\":\"diesel\",\"current_price\":3.815,\"yoy_price\":5.81,\"absolute_change\":-1.995,\"percentage_change\":-34.3373493976},{\"date\":\"2023-06-26\",\"fuel\":\"diesel\",\"current_price\":3.801,\"yoy_price\":5.783,\"absolute_change\":-1.982,\"percentage_change\":-34.2728687532},{\"date\":\"2023-07-03\",\"fuel\":\"diesel\",\"current_price\":3.767,\"yoy_price\":5.675,\"absolute_change\":-1.908,\"percentage_change\":-33.6211453744},{\"date\":\"2023-07-10\",\"fuel\":\"diesel\",\"current_price\":3.806,\"yoy_price\":5.568,\"absolute_change\":-1.762,\"percentage_change\":-31.6451149425},{\"date\":\"2023-07-17\",\"fuel\":\"diesel\",\"current_price\":3.806,\"yoy_price\":5.432,\"absolute_change\":-1.626,\"percentage_change\":-29.9337260677},{\"date\":\"2023-07-24\",\"fuel\":\"diesel\",\"current_price\":3.905,\"yoy_price\":5.268,\"absolute_change\":-1.363,\"percentage_change\":-25.8731966591},{\"date\":\"2023-07-31\",\"fuel\":\"diesel\",\"current_price\":4.127,\"yoy_price\":5.138,\"absolute_change\":-1.011,\"percentage_change\":-19.6769170884},{\"date\":\"2023-08-07\",\"fuel\":\"diesel\",\"current_price\":4.239,\"yoy_price\":4.993,\"absolute_change\":-0.754,\"percentage_change\":-15.1011415982},{\"date\":\"2023-08-14\",\"fuel\":\"diesel\",\"current_price\":4.378,\"yoy_price\":4.911,\"absolute_change\":-0.533,\"percentage_change\":-10.8531867237},{\"date\":\"2023-08-21\",\"fuel\":\"diesel\",\"current_price\":4.389,\"yoy_price\":4.909,\"absolute_change\":-0.52,\"percentage_change\":-10.5927887553},{\"date\":\"2023-08-28\",\"fuel\":\"diesel\",\"current_price\":4.475,\"yoy_price\":5.115,\"absolute_change\":-0.64,\"percentage_change\":-12.5122189638},{\"date\":\"2023-09-04\",\"fuel\":\"diesel\",\"current_price\":4.492,\"yoy_price\":5.084,\"absolute_change\":-0.592,\"percentage_change\":-11.6443745083},{\"date\":\"2023-09-11\",\"fuel\":\"diesel\",\"current_price\":4.54,\"yoy_price\":5.033,\"absolute_change\":-0.493,\"percentage_change\":-9.7953506855},{\"date\":\"2023-09-18\",\"fuel\":\"diesel\",\"current_price\":4.633,\"yoy_price\":4.964,\"absolute_change\":-0.331,\"percentage_change\":-6.6680096696},{\"date\":\"2023-09-25\",\"fuel\":\"diesel\",\"current_price\":4.586,\"yoy_price\":4.889,\"absolute_change\":-0.303,\"percentage_change\":-6.1975864185},{\"date\":\"2023-10-02\",\"fuel\":\"diesel\",\"current_price\":4.593,\"yoy_price\":4.836,\"absolute_change\":-0.243,\"percentage_change\":-5.0248138958},{\"date\":\"2023-10-09\",\"fuel\":\"diesel\",\"current_price\":4.498,\"yoy_price\":5.224,\"absolute_change\":-0.726,\"percentage_change\":-13.8973966309},{\"date\":\"2023-10-16\",\"fuel\":\"diesel\",\"current_price\":4.444,\"yoy_price\":5.339,\"absolute_change\":-0.895,\"percentage_change\":-16.7634388462},{\"date\":\"2023-10-23\",\"fuel\":\"diesel\",\"current_price\":4.545,\"yoy_price\":5.341,\"absolute_change\":-0.796,\"percentage_change\":-14.9035761093},{\"date\":\"2023-10-30\",\"fuel\":\"diesel\",\"current_price\":4.454,\"yoy_price\":5.317,\"absolute_change\":-0.863,\"percentage_change\":-16.2309573068},{\"date\":\"2023-11-06\",\"fuel\":\"diesel\",\"current_price\":4.366,\"yoy_price\":5.333,\"absolute_change\":-0.967,\"percentage_change\":-18.132383274},{\"date\":\"2023-11-13\",\"fuel\":\"diesel\",\"current_price\":4.294,\"yoy_price\":5.313,\"absolute_change\":-1.019,\"percentage_change\":-19.1793713533},{\"date\":\"2023-11-20\",\"fuel\":\"diesel\",\"current_price\":4.209,\"yoy_price\":5.233,\"absolute_change\":-1.024,\"percentage_change\":-19.5681253583},{\"date\":\"2023-11-27\",\"fuel\":\"diesel\",\"current_price\":4.146,\"yoy_price\":5.141,\"absolute_change\":-0.995,\"percentage_change\":-19.3542112429},{\"date\":\"2023-12-04\",\"fuel\":\"diesel\",\"current_price\":4.092,\"yoy_price\":4.967,\"absolute_change\":-0.875,\"percentage_change\":-17.6162673646},{\"date\":\"2023-12-11\",\"fuel\":\"diesel\",\"current_price\":3.987,\"yoy_price\":4.754,\"absolute_change\":-0.767,\"percentage_change\":-16.1337820782},{\"date\":\"2023-12-18\",\"fuel\":\"diesel\",\"current_price\":3.894,\"yoy_price\":4.596,\"absolute_change\":-0.702,\"percentage_change\":-15.274151436},{\"date\":\"2023-12-25\",\"fuel\":\"diesel\",\"current_price\":3.914,\"yoy_price\":4.537,\"absolute_change\":-0.623,\"percentage_change\":-13.7315406656},{\"date\":\"2024-01-01\",\"fuel\":\"diesel\",\"current_price\":3.876,\"yoy_price\":4.583,\"absolute_change\":-0.707,\"percentage_change\":-15.4265764783},{\"date\":\"2024-01-08\",\"fuel\":\"diesel\",\"current_price\":3.828,\"yoy_price\":4.549,\"absolute_change\":-0.721,\"percentage_change\":-15.8496372829},{\"date\":\"2024-01-15\",\"fuel\":\"diesel\",\"current_price\":3.863,\"yoy_price\":4.524,\"absolute_change\":-0.661,\"percentage_change\":-14.6109637489},{\"date\":\"2024-01-22\",\"fuel\":\"diesel\",\"current_price\":3.838,\"yoy_price\":4.604,\"absolute_change\":-0.766,\"percentage_change\":-16.6377063423},{\"date\":\"2024-01-29\",\"fuel\":\"diesel\",\"current_price\":3.867,\"yoy_price\":4.622,\"absolute_change\":-0.755,\"percentage_change\":-16.3349199481},{\"date\":\"2024-02-05\",\"fuel\":\"diesel\",\"current_price\":3.899,\"yoy_price\":4.539,\"absolute_change\":-0.64,\"percentage_change\":-14.1000220313},{\"date\":\"2024-02-12\",\"fuel\":\"diesel\",\"current_price\":4.109,\"yoy_price\":4.444,\"absolute_change\":-0.335,\"percentage_change\":-7.5382538254},{\"date\":\"2024-02-19\",\"fuel\":\"diesel\",\"current_price\":4.109,\"yoy_price\":4.376,\"absolute_change\":-0.267,\"percentage_change\":-6.1014625229},{\"date\":\"2024-02-26\",\"fuel\":\"diesel\",\"current_price\":4.058,\"yoy_price\":4.294,\"absolute_change\":-0.236,\"percentage_change\":-5.4960409874},{\"date\":\"2024-03-04\",\"fuel\":\"diesel\",\"current_price\":4.022,\"yoy_price\":4.282,\"absolute_change\":-0.26,\"percentage_change\":-6.0719290051},{\"date\":\"2024-03-11\",\"fuel\":\"diesel\",\"current_price\":4.004,\"yoy_price\":4.247,\"absolute_change\":-0.243,\"percentage_change\":-5.7216858959},{\"date\":\"2024-03-18\",\"fuel\":\"diesel\",\"current_price\":4.028,\"yoy_price\":4.185,\"absolute_change\":-0.157,\"percentage_change\":-3.7514934289},{\"date\":\"2024-03-25\",\"fuel\":\"diesel\",\"current_price\":4.034,\"yoy_price\":4.128,\"absolute_change\":-0.094,\"percentage_change\":-2.2771317829},{\"date\":\"2024-04-01\",\"fuel\":\"diesel\",\"current_price\":3.996,\"yoy_price\":4.105,\"absolute_change\":-0.109,\"percentage_change\":-2.6552984166},{\"date\":\"2024-04-08\",\"fuel\":\"diesel\",\"current_price\":4.061,\"yoy_price\":4.098,\"absolute_change\":-0.037,\"percentage_change\":-0.9028794534},{\"date\":\"2024-04-15\",\"fuel\":\"diesel\",\"current_price\":4.015,\"yoy_price\":4.116,\"absolute_change\":-0.101,\"percentage_change\":-2.4538386783},{\"date\":\"2024-04-22\",\"fuel\":\"diesel\",\"current_price\":3.992,\"yoy_price\":4.077,\"absolute_change\":-0.085,\"percentage_change\":-2.0848663233},{\"date\":\"2024-04-29\",\"fuel\":\"diesel\",\"current_price\":3.947,\"yoy_price\":4.018,\"absolute_change\":-0.071,\"percentage_change\":-1.7670482827},{\"date\":\"2024-05-06\",\"fuel\":\"diesel\",\"current_price\":3.894,\"yoy_price\":3.922,\"absolute_change\":-0.028,\"percentage_change\":-0.7139214686},{\"date\":\"2024-05-13\",\"fuel\":\"diesel\",\"current_price\":3.848,\"yoy_price\":3.897,\"absolute_change\":-0.049,\"percentage_change\":-1.2573774698},{\"date\":\"2024-05-20\",\"fuel\":\"diesel\",\"current_price\":3.789,\"yoy_price\":3.883,\"absolute_change\":-0.094,\"percentage_change\":-2.4208086531},{\"date\":\"2024-05-27\",\"fuel\":\"diesel\",\"current_price\":3.758,\"yoy_price\":3.855,\"absolute_change\":-0.097,\"percentage_change\":-2.5162127108},{\"date\":\"2024-06-03\",\"fuel\":\"diesel\",\"current_price\":3.726,\"yoy_price\":3.797,\"absolute_change\":-0.071,\"percentage_change\":-1.8698972873},{\"date\":\"2024-06-10\",\"fuel\":\"diesel\",\"current_price\":3.658,\"yoy_price\":3.794,\"absolute_change\":-0.136,\"percentage_change\":-3.5846072746},{\"date\":\"2024-06-17\",\"fuel\":\"diesel\",\"current_price\":3.735,\"yoy_price\":3.815,\"absolute_change\":-0.08,\"percentage_change\":-2.0969855832},{\"date\":\"2024-06-24\",\"fuel\":\"diesel\",\"current_price\":3.769,\"yoy_price\":3.801,\"absolute_change\":-0.032,\"percentage_change\":-0.8418837148},{\"date\":\"2024-07-01\",\"fuel\":\"diesel\",\"current_price\":3.813,\"yoy_price\":3.767,\"absolute_change\":0.046,\"percentage_change\":1.2211308734},{\"date\":\"2024-07-08\",\"fuel\":\"diesel\",\"current_price\":3.865,\"yoy_price\":3.806,\"absolute_change\":0.059,\"percentage_change\":1.5501839201},{\"date\":\"2024-07-15\",\"fuel\":\"diesel\",\"current_price\":3.826,\"yoy_price\":3.806,\"absolute_change\":0.02,\"percentage_change\":0.5254860746},{\"date\":\"2024-07-22\",\"fuel\":\"diesel\",\"current_price\":3.779,\"yoy_price\":3.905,\"absolute_change\":-0.126,\"percentage_change\":-3.2266325224},{\"date\":\"2024-07-29\",\"fuel\":\"diesel\",\"current_price\":3.768,\"yoy_price\":4.127,\"absolute_change\":-0.359,\"percentage_change\":-8.6988126969},{\"date\":\"2024-08-05\",\"fuel\":\"diesel\",\"current_price\":3.755,\"yoy_price\":4.239,\"absolute_change\":-0.484,\"percentage_change\":-11.417787214},{\"date\":\"2024-08-12\",\"fuel\":\"diesel\",\"current_price\":3.704,\"yoy_price\":4.378,\"absolute_change\":-0.674,\"percentage_change\":-15.3951576062},{\"date\":\"2024-08-19\",\"fuel\":\"diesel\",\"current_price\":3.688,\"yoy_price\":4.389,\"absolute_change\":-0.701,\"percentage_change\":-15.9717475507},{\"date\":\"2024-08-26\",\"fuel\":\"diesel\",\"current_price\":3.651,\"yoy_price\":4.475,\"absolute_change\":-0.824,\"percentage_change\":-18.4134078212},{\"date\":\"2024-09-02\",\"fuel\":\"diesel\",\"current_price\":3.625,\"yoy_price\":4.492,\"absolute_change\":-0.867,\"percentage_change\":-19.3009795191},{\"date\":\"2024-09-09\",\"fuel\":\"diesel\",\"current_price\":3.555,\"yoy_price\":4.54,\"absolute_change\":-0.985,\"percentage_change\":-21.6960352423},{\"date\":\"2024-09-16\",\"fuel\":\"diesel\",\"current_price\":3.526,\"yoy_price\":4.633,\"absolute_change\":-1.107,\"percentage_change\":-23.8938053097},{\"date\":\"2024-09-23\",\"fuel\":\"diesel\",\"current_price\":3.539,\"yoy_price\":4.586,\"absolute_change\":-1.047,\"percentage_change\":-22.830353249},{\"date\":\"2024-09-30\",\"fuel\":\"diesel\",\"current_price\":3.544,\"yoy_price\":4.593,\"absolute_change\":-1.049,\"percentage_change\":-22.8391029828},{\"date\":\"2024-10-07\",\"fuel\":\"diesel\",\"current_price\":3.584,\"yoy_price\":4.498,\"absolute_change\":-0.914,\"percentage_change\":-20.3201422855},{\"date\":\"2024-10-14\",\"fuel\":\"diesel\",\"current_price\":3.631,\"yoy_price\":4.444,\"absolute_change\":-0.813,\"percentage_change\":-18.2943294329},{\"date\":\"2024-10-21\",\"fuel\":\"diesel\",\"current_price\":3.553,\"yoy_price\":4.545,\"absolute_change\":-0.992,\"percentage_change\":-21.8261826183},{\"date\":\"2024-10-28\",\"fuel\":\"diesel\",\"current_price\":3.573,\"yoy_price\":4.454,\"absolute_change\":-0.881,\"percentage_change\":-19.7799730579},{\"date\":\"2024-11-04\",\"fuel\":\"diesel\",\"current_price\":3.536,\"yoy_price\":4.366,\"absolute_change\":-0.83,\"percentage_change\":-19.0105359597},{\"date\":\"2024-11-11\",\"fuel\":\"diesel\",\"current_price\":3.521,\"yoy_price\":4.294,\"absolute_change\":-0.773,\"percentage_change\":-18.0018630647},{\"date\":\"2024-11-18\",\"fuel\":\"diesel\",\"current_price\":3.491,\"yoy_price\":4.209,\"absolute_change\":-0.718,\"percentage_change\":-17.0586837729},{\"date\":\"2024-11-25\",\"fuel\":\"diesel\",\"current_price\":3.539,\"yoy_price\":4.146,\"absolute_change\":-0.607,\"percentage_change\":-14.6406174626},{\"date\":\"2024-12-02\",\"fuel\":\"diesel\",\"current_price\":3.54,\"yoy_price\":4.092,\"absolute_change\":-0.552,\"percentage_change\":-13.4897360704},{\"date\":\"2024-12-09\",\"fuel\":\"diesel\",\"current_price\":3.458,\"yoy_price\":3.987,\"absolute_change\":-0.529,\"percentage_change\":-13.2681213945},{\"date\":\"2024-12-16\",\"fuel\":\"diesel\",\"current_price\":3.494,\"yoy_price\":3.894,\"absolute_change\":-0.4,\"percentage_change\":-10.272213662},{\"date\":\"2024-12-23\",\"fuel\":\"diesel\",\"current_price\":3.476,\"yoy_price\":3.914,\"absolute_change\":-0.438,\"percentage_change\":-11.1905978539},{\"date\":\"2024-12-30\",\"fuel\":\"diesel\",\"current_price\":3.503,\"yoy_price\":3.876,\"absolute_change\":-0.373,\"percentage_change\":-9.6233230134},{\"date\":\"2025-01-06\",\"fuel\":\"diesel\",\"current_price\":3.561,\"yoy_price\":3.828,\"absolute_change\":-0.267,\"percentage_change\":-6.9749216301},{\"date\":\"2025-01-13\",\"fuel\":\"diesel\",\"current_price\":3.602,\"yoy_price\":3.863,\"absolute_change\":-0.261,\"percentage_change\":-6.7564069376},{\"date\":\"2025-01-20\",\"fuel\":\"diesel\",\"current_price\":3.715,\"yoy_price\":3.838,\"absolute_change\":-0.123,\"percentage_change\":-3.2047941636},{\"date\":\"2025-01-27\",\"fuel\":\"diesel\",\"current_price\":3.659,\"yoy_price\":3.867,\"absolute_change\":-0.208,\"percentage_change\":-5.3788466512},{\"date\":\"2025-02-03\",\"fuel\":\"diesel\",\"current_price\":3.66,\"yoy_price\":3.899,\"absolute_change\":-0.239,\"percentage_change\":-6.1297768659},{\"date\":\"2025-02-10\",\"fuel\":\"diesel\",\"current_price\":3.665,\"yoy_price\":4.109,\"absolute_change\":-0.444,\"percentage_change\":-10.8055487953},{\"date\":\"2025-02-17\",\"fuel\":\"diesel\",\"current_price\":3.677,\"yoy_price\":4.109,\"absolute_change\":-0.432,\"percentage_change\":-10.513506936},{\"date\":\"2025-02-24\",\"fuel\":\"diesel\",\"current_price\":3.697,\"yoy_price\":4.058,\"absolute_change\":-0.361,\"percentage_change\":-8.8960078857},{\"date\":\"2025-03-03\",\"fuel\":\"diesel\",\"current_price\":3.635,\"yoy_price\":4.022,\"absolute_change\":-0.387,\"percentage_change\":-9.6220785679},{\"date\":\"2025-03-10\",\"fuel\":\"diesel\",\"current_price\":3.582,\"yoy_price\":4.004,\"absolute_change\":-0.422,\"percentage_change\":-10.5394605395},{\"date\":\"2025-03-17\",\"fuel\":\"diesel\",\"current_price\":3.549,\"yoy_price\":4.028,\"absolute_change\":-0.479,\"percentage_change\":-11.8917576961},{\"date\":\"2025-03-24\",\"fuel\":\"diesel\",\"current_price\":3.567,\"yoy_price\":4.034,\"absolute_change\":-0.467,\"percentage_change\":-11.5765989093},{\"date\":\"2025-03-31\",\"fuel\":\"diesel\",\"current_price\":3.592,\"yoy_price\":3.996,\"absolute_change\":-0.404,\"percentage_change\":-10.1101101101},{\"date\":\"2025-04-07\",\"fuel\":\"diesel\",\"current_price\":3.639,\"yoy_price\":4.061,\"absolute_change\":-0.422,\"percentage_change\":-10.39152918},{\"date\":\"2025-04-14\",\"fuel\":\"diesel\",\"current_price\":3.579,\"yoy_price\":4.015,\"absolute_change\":-0.436,\"percentage_change\":-10.8592777086},{\"date\":\"2025-04-21\",\"fuel\":\"diesel\",\"current_price\":3.534,\"yoy_price\":3.992,\"absolute_change\":-0.458,\"percentage_change\":-11.4729458918},{\"date\":\"2025-04-28\",\"fuel\":\"diesel\",\"current_price\":3.514,\"yoy_price\":3.947,\"absolute_change\":-0.433,\"percentage_change\":-10.9703572333},{\"date\":\"2025-05-05\",\"fuel\":\"diesel\",\"current_price\":3.497,\"yoy_price\":3.894,\"absolute_change\":-0.397,\"percentage_change\":-10.1951720596},{\"date\":\"2025-05-12\",\"fuel\":\"diesel\",\"current_price\":3.476,\"yoy_price\":3.848,\"absolute_change\":-0.372,\"percentage_change\":-9.6673596674},{\"date\":\"2025-05-19\",\"fuel\":\"diesel\",\"current_price\":3.536,\"yoy_price\":3.789,\"absolute_change\":-0.253,\"percentage_change\":-6.6772235418},{\"date\":\"2025-05-26\",\"fuel\":\"diesel\",\"current_price\":3.487,\"yoy_price\":3.758,\"absolute_change\":-0.271,\"percentage_change\":-7.2112825971},{\"date\":\"2025-06-02\",\"fuel\":\"diesel\",\"current_price\":3.451,\"yoy_price\":3.726,\"absolute_change\":-0.275,\"percentage_change\":-7.3805689748},{\"date\":\"2025-06-09\",\"fuel\":\"diesel\",\"current_price\":3.471,\"yoy_price\":3.658,\"absolute_change\":-0.187,\"percentage_change\":-5.1120831055},{\"date\":\"2025-06-16\",\"fuel\":\"diesel\",\"current_price\":3.571,\"yoy_price\":3.735,\"absolute_change\":-0.164,\"percentage_change\":-4.390896921},{\"date\":\"2025-06-23\",\"fuel\":\"diesel\",\"current_price\":3.775,\"yoy_price\":3.769,\"absolute_change\":0.006,\"percentage_change\":0.15919342},{\"date\":\"1991-09-30\",\"fuel\":\"gasoline\",\"current_price\":1.092,\"yoy_price\":1.191,\"absolute_change\":-0.099,\"percentage_change\":-8.3123425693},{\"date\":\"1991-10-07\",\"fuel\":\"gasoline\",\"current_price\":1.089,\"yoy_price\":1.245,\"absolute_change\":-0.156,\"percentage_change\":-12.5301204819},{\"date\":\"1991-10-14\",\"fuel\":\"gasoline\",\"current_price\":1.084,\"yoy_price\":1.242,\"absolute_change\":-0.158,\"percentage_change\":-12.7214170692},{\"date\":\"1991-10-21\",\"fuel\":\"gasoline\",\"current_price\":1.088,\"yoy_price\":1.252,\"absolute_change\":-0.164,\"percentage_change\":-13.0990415335},{\"date\":\"1991-10-28\",\"fuel\":\"gasoline\",\"current_price\":1.091,\"yoy_price\":1.266,\"absolute_change\":-0.175,\"percentage_change\":-13.8230647709},{\"date\":\"1991-11-04\",\"fuel\":\"gasoline\",\"current_price\":1.091,\"yoy_price\":1.272,\"absolute_change\":-0.181,\"percentage_change\":-14.2295597484},{\"date\":\"1991-11-11\",\"fuel\":\"gasoline\",\"current_price\":1.102,\"yoy_price\":1.321,\"absolute_change\":-0.219,\"percentage_change\":-16.578349735},{\"date\":\"1991-11-18\",\"fuel\":\"gasoline\",\"current_price\":1.104,\"yoy_price\":1.333,\"absolute_change\":-0.229,\"percentage_change\":-17.1792948237},{\"date\":\"1991-11-25\",\"fuel\":\"gasoline\",\"current_price\":1.099,\"yoy_price\":1.339,\"absolute_change\":-0.24,\"percentage_change\":-17.9238237491},{\"date\":\"1991-12-02\",\"fuel\":\"gasoline\",\"current_price\":1.099,\"yoy_price\":1.345,\"absolute_change\":-0.246,\"percentage_change\":-18.2899628253},{\"date\":\"1991-12-09\",\"fuel\":\"gasoline\",\"current_price\":1.091,\"yoy_price\":1.339,\"absolute_change\":-0.248,\"percentage_change\":-18.5212845407},{\"date\":\"1991-12-16\",\"fuel\":\"gasoline\",\"current_price\":1.075,\"yoy_price\":1.334,\"absolute_change\":-0.259,\"percentage_change\":-19.4152923538},{\"date\":\"1991-12-23\",\"fuel\":\"gasoline\",\"current_price\":1.063,\"yoy_price\":1.328,\"absolute_change\":-0.265,\"percentage_change\":-19.9548192771},{\"date\":\"1991-12-30\",\"fuel\":\"gasoline\",\"current_price\":1.053,\"yoy_price\":1.323,\"absolute_change\":-0.27,\"percentage_change\":-20.4081632653},{\"date\":\"1992-01-06\",\"fuel\":\"gasoline\",\"current_price\":1.042,\"yoy_price\":1.311,\"absolute_change\":-0.269,\"percentage_change\":-20.5186880244},{\"date\":\"1992-01-13\",\"fuel\":\"gasoline\",\"current_price\":1.026,\"yoy_price\":1.341,\"absolute_change\":-0.315,\"percentage_change\":-23.4899328859},{\"date\":\"1992-01-20\",\"fuel\":\"gasoline\",\"current_price\":1.014,\"yoy_price\":1.192,\"absolute_change\":-0.178,\"percentage_change\":-14.932885906},{\"date\":\"1992-01-27\",\"fuel\":\"gasoline\",\"current_price\":1.006,\"yoy_price\":1.168,\"absolute_change\":-0.162,\"percentage_change\":-13.8698630137},{\"date\":\"1992-02-03\",\"fuel\":\"gasoline\",\"current_price\":0.995,\"yoy_price\":1.139,\"absolute_change\":-0.144,\"percentage_change\":-12.6426690079},{\"date\":\"1992-02-10\",\"fuel\":\"gasoline\",\"current_price\":1.004,\"yoy_price\":1.106,\"absolute_change\":-0.102,\"percentage_change\":-9.2224231465},{\"date\":\"1992-02-17\",\"fuel\":\"gasoline\",\"current_price\":1.011,\"yoy_price\":1.078,\"absolute_change\":-0.067,\"percentage_change\":-6.2152133581},{\"date\":\"1992-02-24\",\"fuel\":\"gasoline\",\"current_price\":1.014,\"yoy_price\":1.054,\"absolute_change\":-0.04,\"percentage_change\":-3.7950664137},{\"date\":\"1992-03-02\",\"fuel\":\"gasoline\",\"current_price\":1.012,\"yoy_price\":1.025,\"absolute_change\":-0.013,\"percentage_change\":-1.2682926829},{\"date\":\"1992-03-09\",\"fuel\":\"gasoline\",\"current_price\":1.013,\"yoy_price\":1.045,\"absolute_change\":-0.032,\"percentage_change\":-3.0622009569},{\"date\":\"1992-03-16\",\"fuel\":\"gasoline\",\"current_price\":1.01,\"yoy_price\":1.043,\"absolute_change\":-0.033,\"percentage_change\":-3.1639501438},{\"date\":\"1992-03-23\",\"fuel\":\"gasoline\",\"current_price\":1.015,\"yoy_price\":1.047,\"absolute_change\":-0.032,\"percentage_change\":-3.0563514804},{\"date\":\"1992-03-30\",\"fuel\":\"gasoline\",\"current_price\":1.013,\"yoy_price\":1.052,\"absolute_change\":-0.039,\"percentage_change\":-3.7072243346},{\"date\":\"1992-04-06\",\"fuel\":\"gasoline\",\"current_price\":1.026,\"yoy_price\":1.066,\"absolute_change\":-0.04,\"percentage_change\":-3.7523452158},{\"date\":\"1992-04-13\",\"fuel\":\"gasoline\",\"current_price\":1.051,\"yoy_price\":1.069,\"absolute_change\":-0.018,\"percentage_change\":-1.6838166511},{\"date\":\"1992-04-20\",\"fuel\":\"gasoline\",\"current_price\":1.058,\"yoy_price\":1.09,\"absolute_change\":-0.032,\"percentage_change\":-2.9357798165},{\"date\":\"1992-04-27\",\"fuel\":\"gasoline\",\"current_price\":1.072,\"yoy_price\":1.104,\"absolute_change\":-0.032,\"percentage_change\":-2.8985507246},{\"date\":\"1992-05-04\",\"fuel\":\"gasoline\",\"current_price\":1.089,\"yoy_price\":1.113,\"absolute_change\":-0.024,\"percentage_change\":-2.1563342318},{\"date\":\"1992-05-11\",\"fuel\":\"gasoline\",\"current_price\":1.102,\"yoy_price\":1.121,\"absolute_change\":-0.019,\"percentage_change\":-1.6949152542},{\"date\":\"1992-05-18\",\"fuel\":\"gasoline\",\"current_price\":1.118,\"yoy_price\":1.129,\"absolute_change\":-0.011,\"percentage_change\":-0.9743135518},{\"date\":\"1992-05-25\",\"fuel\":\"gasoline\",\"current_price\":1.12,\"yoy_price\":1.14,\"absolute_change\":-0.02,\"percentage_change\":-1.7543859649},{\"date\":\"1992-06-01\",\"fuel\":\"gasoline\",\"current_price\":1.128,\"yoy_price\":1.138,\"absolute_change\":-0.01,\"percentage_change\":-0.8787346221},{\"date\":\"1992-06-08\",\"fuel\":\"gasoline\",\"current_price\":1.143,\"yoy_price\":1.135,\"absolute_change\":0.008,\"percentage_change\":0.704845815},{\"date\":\"1992-06-15\",\"fuel\":\"gasoline\",\"current_price\":1.151,\"yoy_price\":1.126,\"absolute_change\":0.025,\"percentage_change\":2.2202486679},{\"date\":\"1992-06-22\",\"fuel\":\"gasoline\",\"current_price\":1.153,\"yoy_price\":1.114,\"absolute_change\":0.039,\"percentage_change\":3.5008976661},{\"date\":\"1992-06-29\",\"fuel\":\"gasoline\",\"current_price\":1.149,\"yoy_price\":1.104,\"absolute_change\":0.045,\"percentage_change\":4.0760869565},{\"date\":\"1992-07-06\",\"fuel\":\"gasoline\",\"current_price\":1.147,\"yoy_price\":1.098,\"absolute_change\":0.049,\"percentage_change\":4.4626593807},{\"date\":\"1992-07-13\",\"fuel\":\"gasoline\",\"current_price\":1.139,\"yoy_price\":1.094,\"absolute_change\":0.045,\"percentage_change\":4.113345521},{\"date\":\"1992-07-20\",\"fuel\":\"gasoline\",\"current_price\":1.132,\"yoy_price\":1.091,\"absolute_change\":0.041,\"percentage_change\":3.758020165},{\"date\":\"1992-07-27\",\"fuel\":\"gasoline\",\"current_price\":1.128,\"yoy_price\":1.091,\"absolute_change\":0.037,\"percentage_change\":3.3913840513},{\"date\":\"1992-08-03\",\"fuel\":\"gasoline\",\"current_price\":1.126,\"yoy_price\":1.099,\"absolute_change\":0.027,\"percentage_change\":2.4567788899},{\"date\":\"1992-08-10\",\"fuel\":\"gasoline\",\"current_price\":1.123,\"yoy_price\":1.112,\"absolute_change\":0.011,\"percentage_change\":0.9892086331},{\"date\":\"1992-08-17\",\"fuel\":\"gasoline\",\"current_price\":1.116,\"yoy_price\":1.124,\"absolute_change\":-0.008,\"percentage_change\":-0.7117437722},{\"date\":\"1992-08-24\",\"fuel\":\"gasoline\",\"current_price\":1.123,\"yoy_price\":1.124,\"absolute_change\":-0.001,\"percentage_change\":-0.0889679715},{\"date\":\"1992-08-31\",\"fuel\":\"gasoline\",\"current_price\":1.121,\"yoy_price\":1.127,\"absolute_change\":-0.006,\"percentage_change\":-0.5323868678},{\"date\":\"1992-09-07\",\"fuel\":\"gasoline\",\"current_price\":1.121,\"yoy_price\":1.12,\"absolute_change\":0.001,\"percentage_change\":0.0892857143},{\"date\":\"1992-09-14\",\"fuel\":\"gasoline\",\"current_price\":1.124,\"yoy_price\":1.11,\"absolute_change\":0.014,\"percentage_change\":1.2612612613},{\"date\":\"1992-09-21\",\"fuel\":\"gasoline\",\"current_price\":1.123,\"yoy_price\":1.097,\"absolute_change\":0.026,\"percentage_change\":2.3701002735},{\"date\":\"1992-09-28\",\"fuel\":\"gasoline\",\"current_price\":1.118,\"yoy_price\":1.092,\"absolute_change\":0.026,\"percentage_change\":2.380952381},{\"date\":\"1992-10-05\",\"fuel\":\"gasoline\",\"current_price\":1.115,\"yoy_price\":1.089,\"absolute_change\":0.026,\"percentage_change\":2.3875114784},{\"date\":\"1992-10-12\",\"fuel\":\"gasoline\",\"current_price\":1.115,\"yoy_price\":1.084,\"absolute_change\":0.031,\"percentage_change\":2.8597785978},{\"date\":\"1992-10-19\",\"fuel\":\"gasoline\",\"current_price\":1.113,\"yoy_price\":1.088,\"absolute_change\":0.025,\"percentage_change\":2.2977941176},{\"date\":\"1992-10-26\",\"fuel\":\"gasoline\",\"current_price\":1.113,\"yoy_price\":1.091,\"absolute_change\":0.022,\"percentage_change\":2.0164986251},{\"date\":\"1992-11-02\",\"fuel\":\"gasoline\",\"current_price\":1.12,\"yoy_price\":1.091,\"absolute_change\":0.029,\"percentage_change\":2.658111824},{\"date\":\"1992-11-09\",\"fuel\":\"gasoline\",\"current_price\":1.12,\"yoy_price\":1.102,\"absolute_change\":0.018,\"percentage_change\":1.6333938294},{\"date\":\"1992-11-16\",\"fuel\":\"gasoline\",\"current_price\":1.112,\"yoy_price\":1.104,\"absolute_change\":0.008,\"percentage_change\":0.7246376812},{\"date\":\"1992-11-23\",\"fuel\":\"gasoline\",\"current_price\":1.106,\"yoy_price\":1.099,\"absolute_change\":0.007,\"percentage_change\":0.6369426752},{\"date\":\"1992-11-30\",\"fuel\":\"gasoline\",\"current_price\":1.098,\"yoy_price\":1.099,\"absolute_change\":-0.001,\"percentage_change\":-0.0909918107},{\"date\":\"1992-12-07\",\"fuel\":\"gasoline\",\"current_price\":1.089,\"yoy_price\":1.091,\"absolute_change\":-0.002,\"percentage_change\":-0.1833180568},{\"date\":\"1992-12-14\",\"fuel\":\"gasoline\",\"current_price\":1.078,\"yoy_price\":1.075,\"absolute_change\":0.003,\"percentage_change\":0.2790697674},{\"date\":\"1992-12-21\",\"fuel\":\"gasoline\",\"current_price\":1.074,\"yoy_price\":1.063,\"absolute_change\":0.011,\"percentage_change\":1.0348071496},{\"date\":\"1992-12-28\",\"fuel\":\"gasoline\",\"current_price\":1.069,\"yoy_price\":1.053,\"absolute_change\":0.016,\"percentage_change\":1.5194681861},{\"date\":\"1993-01-04\",\"fuel\":\"gasoline\",\"current_price\":1.065,\"yoy_price\":1.042,\"absolute_change\":0.023,\"percentage_change\":2.207293666},{\"date\":\"1993-01-11\",\"fuel\":\"gasoline\",\"current_price\":1.066,\"yoy_price\":1.026,\"absolute_change\":0.04,\"percentage_change\":3.8986354776},{\"date\":\"1993-01-18\",\"fuel\":\"gasoline\",\"current_price\":1.061,\"yoy_price\":1.014,\"absolute_change\":0.047,\"percentage_change\":4.6351084813},{\"date\":\"1993-01-25\",\"fuel\":\"gasoline\",\"current_price\":1.055,\"yoy_price\":1.006,\"absolute_change\":0.049,\"percentage_change\":4.8707753479},{\"date\":\"1993-02-01\",\"fuel\":\"gasoline\",\"current_price\":1.055,\"yoy_price\":0.995,\"absolute_change\":0.06,\"percentage_change\":6.0301507538},{\"date\":\"1993-02-08\",\"fuel\":\"gasoline\",\"current_price\":1.062,\"yoy_price\":1.004,\"absolute_change\":0.058,\"percentage_change\":5.7768924303},{\"date\":\"1993-02-15\",\"fuel\":\"gasoline\",\"current_price\":1.053,\"yoy_price\":1.011,\"absolute_change\":0.042,\"percentage_change\":4.1543026706},{\"date\":\"1993-02-22\",\"fuel\":\"gasoline\",\"current_price\":1.047,\"yoy_price\":1.014,\"absolute_change\":0.033,\"percentage_change\":3.2544378698},{\"date\":\"1993-03-01\",\"fuel\":\"gasoline\",\"current_price\":1.042,\"yoy_price\":1.012,\"absolute_change\":0.03,\"percentage_change\":2.9644268775},{\"date\":\"1993-03-08\",\"fuel\":\"gasoline\",\"current_price\":1.048,\"yoy_price\":1.013,\"absolute_change\":0.035,\"percentage_change\":3.4550839092},{\"date\":\"1993-03-15\",\"fuel\":\"gasoline\",\"current_price\":1.058,\"yoy_price\":1.01,\"absolute_change\":0.048,\"percentage_change\":4.7524752475},{\"date\":\"1993-03-22\",\"fuel\":\"gasoline\",\"current_price\":1.056,\"yoy_price\":1.015,\"absolute_change\":0.041,\"percentage_change\":4.039408867},{\"date\":\"1993-03-29\",\"fuel\":\"gasoline\",\"current_price\":1.057,\"yoy_price\":1.013,\"absolute_change\":0.044,\"percentage_change\":4.3435340573},{\"date\":\"1993-04-05\",\"fuel\":\"gasoline\",\"current_price\":1.068,\"yoy_price\":1.026,\"absolute_change\":0.042,\"percentage_change\":4.0935672515},{\"date\":\"1993-04-12\",\"fuel\":\"gasoline\",\"current_price\":1.079,\"yoy_price\":1.051,\"absolute_change\":0.028,\"percentage_change\":2.6641294006},{\"date\":\"1993-04-19\",\"fuel\":\"gasoline\",\"current_price\":1.079,\"yoy_price\":1.058,\"absolute_change\":0.021,\"percentage_change\":1.9848771267},{\"date\":\"1993-04-26\",\"fuel\":\"gasoline\",\"current_price\":1.086,\"yoy_price\":1.072,\"absolute_change\":0.014,\"percentage_change\":1.3059701493},{\"date\":\"1993-05-03\",\"fuel\":\"gasoline\",\"current_price\":1.086,\"yoy_price\":1.089,\"absolute_change\":-0.003,\"percentage_change\":-0.2754820937},{\"date\":\"1993-05-10\",\"fuel\":\"gasoline\",\"current_price\":1.097,\"yoy_price\":1.102,\"absolute_change\":-0.005,\"percentage_change\":-0.4537205082},{\"date\":\"1993-05-17\",\"fuel\":\"gasoline\",\"current_price\":1.106,\"yoy_price\":1.118,\"absolute_change\":-0.012,\"percentage_change\":-1.0733452594},{\"date\":\"1993-05-24\",\"fuel\":\"gasoline\",\"current_price\":1.106,\"yoy_price\":1.12,\"absolute_change\":-0.014,\"percentage_change\":-1.25},{\"date\":\"1993-05-31\",\"fuel\":\"gasoline\",\"current_price\":1.107,\"yoy_price\":1.128,\"absolute_change\":-0.021,\"percentage_change\":-1.8617021277},{\"date\":\"1993-06-07\",\"fuel\":\"gasoline\",\"current_price\":1.104,\"yoy_price\":1.143,\"absolute_change\":-0.039,\"percentage_change\":-3.4120734908},{\"date\":\"1993-06-14\",\"fuel\":\"gasoline\",\"current_price\":1.101,\"yoy_price\":1.151,\"absolute_change\":-0.05,\"percentage_change\":-4.3440486533},{\"date\":\"1993-06-21\",\"fuel\":\"gasoline\",\"current_price\":1.095,\"yoy_price\":1.153,\"absolute_change\":-0.058,\"percentage_change\":-5.0303555941},{\"date\":\"1993-06-28\",\"fuel\":\"gasoline\",\"current_price\":1.089,\"yoy_price\":1.149,\"absolute_change\":-0.06,\"percentage_change\":-5.2219321149},{\"date\":\"1993-07-05\",\"fuel\":\"gasoline\",\"current_price\":1.086,\"yoy_price\":1.147,\"absolute_change\":-0.061,\"percentage_change\":-5.3182214473},{\"date\":\"1993-07-12\",\"fuel\":\"gasoline\",\"current_price\":1.081,\"yoy_price\":1.139,\"absolute_change\":-0.058,\"percentage_change\":-5.0921861282},{\"date\":\"1993-07-19\",\"fuel\":\"gasoline\",\"current_price\":1.075,\"yoy_price\":1.132,\"absolute_change\":-0.057,\"percentage_change\":-5.035335689},{\"date\":\"1993-07-26\",\"fuel\":\"gasoline\",\"current_price\":1.069,\"yoy_price\":1.128,\"absolute_change\":-0.059,\"percentage_change\":-5.2304964539},{\"date\":\"1993-08-02\",\"fuel\":\"gasoline\",\"current_price\":1.062,\"yoy_price\":1.126,\"absolute_change\":-0.064,\"percentage_change\":-5.6838365897},{\"date\":\"1993-08-09\",\"fuel\":\"gasoline\",\"current_price\":1.06,\"yoy_price\":1.123,\"absolute_change\":-0.063,\"percentage_change\":-5.6099732858},{\"date\":\"1993-08-16\",\"fuel\":\"gasoline\",\"current_price\":1.059,\"yoy_price\":1.116,\"absolute_change\":-0.057,\"percentage_change\":-5.1075268817},{\"date\":\"1993-08-23\",\"fuel\":\"gasoline\",\"current_price\":1.065,\"yoy_price\":1.123,\"absolute_change\":-0.058,\"percentage_change\":-5.1647373108},{\"date\":\"1993-08-30\",\"fuel\":\"gasoline\",\"current_price\":1.062,\"yoy_price\":1.121,\"absolute_change\":-0.059,\"percentage_change\":-5.2631578947},{\"date\":\"1993-09-06\",\"fuel\":\"gasoline\",\"current_price\":1.055,\"yoy_price\":1.121,\"absolute_change\":-0.066,\"percentage_change\":-5.8876003568},{\"date\":\"1993-09-13\",\"fuel\":\"gasoline\",\"current_price\":1.051,\"yoy_price\":1.124,\"absolute_change\":-0.073,\"percentage_change\":-6.4946619217},{\"date\":\"1993-09-20\",\"fuel\":\"gasoline\",\"current_price\":1.045,\"yoy_price\":1.123,\"absolute_change\":-0.078,\"percentage_change\":-6.945681211},{\"date\":\"1993-09-27\",\"fuel\":\"gasoline\",\"current_price\":1.047,\"yoy_price\":1.118,\"absolute_change\":-0.071,\"percentage_change\":-6.3506261181},{\"date\":\"1993-10-04\",\"fuel\":\"gasoline\",\"current_price\":1.092,\"yoy_price\":1.115,\"absolute_change\":-0.023,\"percentage_change\":-2.0627802691},{\"date\":\"1993-10-11\",\"fuel\":\"gasoline\",\"current_price\":1.09,\"yoy_price\":1.115,\"absolute_change\":-0.025,\"percentage_change\":-2.2421524664},{\"date\":\"1993-10-18\",\"fuel\":\"gasoline\",\"current_price\":1.093,\"yoy_price\":1.113,\"absolute_change\":-0.02,\"percentage_change\":-1.7969451932},{\"date\":\"1993-10-25\",\"fuel\":\"gasoline\",\"current_price\":1.092,\"yoy_price\":1.113,\"absolute_change\":-0.021,\"percentage_change\":-1.8867924528},{\"date\":\"1993-11-01\",\"fuel\":\"gasoline\",\"current_price\":1.084,\"yoy_price\":1.12,\"absolute_change\":-0.036,\"percentage_change\":-3.2142857143},{\"date\":\"1993-11-08\",\"fuel\":\"gasoline\",\"current_price\":1.075,\"yoy_price\":1.12,\"absolute_change\":-0.045,\"percentage_change\":-4.0178571429},{\"date\":\"1993-11-15\",\"fuel\":\"gasoline\",\"current_price\":1.064,\"yoy_price\":1.112,\"absolute_change\":-0.048,\"percentage_change\":-4.3165467626},{\"date\":\"1993-11-22\",\"fuel\":\"gasoline\",\"current_price\":1.058,\"yoy_price\":1.106,\"absolute_change\":-0.048,\"percentage_change\":-4.3399638336},{\"date\":\"1993-11-29\",\"fuel\":\"gasoline\",\"current_price\":1.051,\"yoy_price\":1.098,\"absolute_change\":-0.047,\"percentage_change\":-4.2805100182},{\"date\":\"1993-12-06\",\"fuel\":\"gasoline\",\"current_price\":1.036,\"yoy_price\":1.089,\"absolute_change\":-0.053,\"percentage_change\":-4.8668503214},{\"date\":\"1993-12-13\",\"fuel\":\"gasoline\",\"current_price\":1.018,\"yoy_price\":1.078,\"absolute_change\":-0.06,\"percentage_change\":-5.5658627087},{\"date\":\"1993-12-20\",\"fuel\":\"gasoline\",\"current_price\":1.003,\"yoy_price\":1.074,\"absolute_change\":-0.071,\"percentage_change\":-6.6108007449},{\"date\":\"1993-12-27\",\"fuel\":\"gasoline\",\"current_price\":0.999,\"yoy_price\":1.069,\"absolute_change\":-0.07,\"percentage_change\":-6.5481758653},{\"date\":\"1994-01-03\",\"fuel\":\"gasoline\",\"current_price\":0.992,\"yoy_price\":1.065,\"absolute_change\":-0.073,\"percentage_change\":-6.8544600939},{\"date\":\"1994-01-10\",\"fuel\":\"gasoline\",\"current_price\":0.995,\"yoy_price\":1.066,\"absolute_change\":-0.071,\"percentage_change\":-6.660412758},{\"date\":\"1994-01-17\",\"fuel\":\"gasoline\",\"current_price\":1.001,\"yoy_price\":1.061,\"absolute_change\":-0.06,\"percentage_change\":-5.6550424128},{\"date\":\"1994-01-24\",\"fuel\":\"gasoline\",\"current_price\":0.999,\"yoy_price\":1.055,\"absolute_change\":-0.056,\"percentage_change\":-5.308056872},{\"date\":\"1994-01-31\",\"fuel\":\"gasoline\",\"current_price\":1.005,\"yoy_price\":1.055,\"absolute_change\":-0.05,\"percentage_change\":-4.7393364929},{\"date\":\"1994-02-07\",\"fuel\":\"gasoline\",\"current_price\":1.007,\"yoy_price\":1.062,\"absolute_change\":-0.055,\"percentage_change\":-5.1789077213},{\"date\":\"1994-02-14\",\"fuel\":\"gasoline\",\"current_price\":1.016,\"yoy_price\":1.053,\"absolute_change\":-0.037,\"percentage_change\":-3.5137701804},{\"date\":\"1994-02-21\",\"fuel\":\"gasoline\",\"current_price\":1.009,\"yoy_price\":1.047,\"absolute_change\":-0.038,\"percentage_change\":-3.629417383},{\"date\":\"1994-02-28\",\"fuel\":\"gasoline\",\"current_price\":1.004,\"yoy_price\":1.042,\"absolute_change\":-0.038,\"percentage_change\":-3.6468330134},{\"date\":\"1994-03-07\",\"fuel\":\"gasoline\",\"current_price\":1.007,\"yoy_price\":1.048,\"absolute_change\":-0.041,\"percentage_change\":-3.9122137405},{\"date\":\"1994-03-14\",\"fuel\":\"gasoline\",\"current_price\":1.005,\"yoy_price\":1.058,\"absolute_change\":-0.053,\"percentage_change\":-5.0094517958},{\"date\":\"1994-03-21\",\"fuel\":\"gasoline\",\"current_price\":1.007,\"yoy_price\":1.056,\"absolute_change\":-0.049,\"percentage_change\":-4.6401515152},{\"date\":\"1994-03-28\",\"fuel\":\"gasoline\",\"current_price\":1.012,\"yoy_price\":1.057,\"absolute_change\":-0.045,\"percentage_change\":-4.2573320719},{\"date\":\"1994-04-04\",\"fuel\":\"gasoline\",\"current_price\":1.011,\"yoy_price\":1.068,\"absolute_change\":-0.057,\"percentage_change\":-5.3370786517},{\"date\":\"1994-04-11\",\"fuel\":\"gasoline\",\"current_price\":1.028,\"yoy_price\":1.079,\"absolute_change\":-0.051,\"percentage_change\":-4.7265987025},{\"date\":\"1994-04-18\",\"fuel\":\"gasoline\",\"current_price\":1.033,\"yoy_price\":1.079,\"absolute_change\":-0.046,\"percentage_change\":-4.2632066728},{\"date\":\"1994-04-25\",\"fuel\":\"gasoline\",\"current_price\":1.037,\"yoy_price\":1.086,\"absolute_change\":-0.049,\"percentage_change\":-4.5119705341},{\"date\":\"1994-05-02\",\"fuel\":\"gasoline\",\"current_price\":1.04,\"yoy_price\":1.086,\"absolute_change\":-0.046,\"percentage_change\":-4.2357274401},{\"date\":\"1994-05-09\",\"fuel\":\"gasoline\",\"current_price\":1.045,\"yoy_price\":1.097,\"absolute_change\":-0.052,\"percentage_change\":-4.7402005469},{\"date\":\"1994-05-16\",\"fuel\":\"gasoline\",\"current_price\":1.046,\"yoy_price\":1.106,\"absolute_change\":-0.06,\"percentage_change\":-5.424954792},{\"date\":\"1994-05-23\",\"fuel\":\"gasoline\",\"current_price\":1.05,\"yoy_price\":1.106,\"absolute_change\":-0.056,\"percentage_change\":-5.0632911392},{\"date\":\"1994-05-30\",\"fuel\":\"gasoline\",\"current_price\":1.056,\"yoy_price\":1.107,\"absolute_change\":-0.051,\"percentage_change\":-4.6070460705},{\"date\":\"1994-06-06\",\"fuel\":\"gasoline\",\"current_price\":1.065,\"yoy_price\":1.104,\"absolute_change\":-0.039,\"percentage_change\":-3.5326086957},{\"date\":\"1994-06-13\",\"fuel\":\"gasoline\",\"current_price\":1.073,\"yoy_price\":1.101,\"absolute_change\":-0.028,\"percentage_change\":-2.5431425976},{\"date\":\"1994-06-20\",\"fuel\":\"gasoline\",\"current_price\":1.079,\"yoy_price\":1.095,\"absolute_change\":-0.016,\"percentage_change\":-1.4611872146},{\"date\":\"1994-06-27\",\"fuel\":\"gasoline\",\"current_price\":1.095,\"yoy_price\":1.089,\"absolute_change\":0.006,\"percentage_change\":0.5509641873},{\"date\":\"1994-07-04\",\"fuel\":\"gasoline\",\"current_price\":1.097,\"yoy_price\":1.086,\"absolute_change\":0.011,\"percentage_change\":1.0128913444},{\"date\":\"1994-07-11\",\"fuel\":\"gasoline\",\"current_price\":1.103,\"yoy_price\":1.081,\"absolute_change\":0.022,\"percentage_change\":2.0351526364},{\"date\":\"1994-07-18\",\"fuel\":\"gasoline\",\"current_price\":1.109,\"yoy_price\":1.075,\"absolute_change\":0.034,\"percentage_change\":3.1627906977},{\"date\":\"1994-07-25\",\"fuel\":\"gasoline\",\"current_price\":1.114,\"yoy_price\":1.069,\"absolute_change\":0.045,\"percentage_change\":4.2095416277},{\"date\":\"1994-08-01\",\"fuel\":\"gasoline\",\"current_price\":1.13,\"yoy_price\":1.062,\"absolute_change\":0.068,\"percentage_change\":6.4030131827},{\"date\":\"1994-08-08\",\"fuel\":\"gasoline\",\"current_price\":1.157,\"yoy_price\":1.06,\"absolute_change\":0.097,\"percentage_change\":9.1509433962},{\"date\":\"1994-08-15\",\"fuel\":\"gasoline\",\"current_price\":1.161,\"yoy_price\":1.059,\"absolute_change\":0.102,\"percentage_change\":9.6317280453},{\"date\":\"1994-08-22\",\"fuel\":\"gasoline\",\"current_price\":1.165,\"yoy_price\":1.065,\"absolute_change\":0.1,\"percentage_change\":9.3896713615},{\"date\":\"1994-08-29\",\"fuel\":\"gasoline\",\"current_price\":1.161,\"yoy_price\":1.062,\"absolute_change\":0.099,\"percentage_change\":9.3220338983},{\"date\":\"1994-09-05\",\"fuel\":\"gasoline\",\"current_price\":1.156,\"yoy_price\":1.055,\"absolute_change\":0.101,\"percentage_change\":9.5734597156},{\"date\":\"1994-09-12\",\"fuel\":\"gasoline\",\"current_price\":1.15,\"yoy_price\":1.051,\"absolute_change\":0.099,\"percentage_change\":9.4196003806},{\"date\":\"1994-09-19\",\"fuel\":\"gasoline\",\"current_price\":1.14,\"yoy_price\":1.045,\"absolute_change\":0.095,\"percentage_change\":9.0909090909},{\"date\":\"1994-09-26\",\"fuel\":\"gasoline\",\"current_price\":1.129,\"yoy_price\":1.047,\"absolute_change\":0.082,\"percentage_change\":7.8319006686},{\"date\":\"1994-10-03\",\"fuel\":\"gasoline\",\"current_price\":1.12,\"yoy_price\":1.092,\"absolute_change\":0.028,\"percentage_change\":2.5641025641},{\"date\":\"1994-10-10\",\"fuel\":\"gasoline\",\"current_price\":1.114,\"yoy_price\":1.09,\"absolute_change\":0.024,\"percentage_change\":2.2018348624},{\"date\":\"1994-10-17\",\"fuel\":\"gasoline\",\"current_price\":1.106,\"yoy_price\":1.093,\"absolute_change\":0.013,\"percentage_change\":1.1893870082},{\"date\":\"1994-10-24\",\"fuel\":\"gasoline\",\"current_price\":1.107,\"yoy_price\":1.092,\"absolute_change\":0.015,\"percentage_change\":1.3736263736},{\"date\":\"1994-10-31\",\"fuel\":\"gasoline\",\"current_price\":1.121,\"yoy_price\":1.084,\"absolute_change\":0.037,\"percentage_change\":3.4132841328},{\"date\":\"1994-11-07\",\"fuel\":\"gasoline\",\"current_price\":1.123,\"yoy_price\":1.075,\"absolute_change\":0.048,\"percentage_change\":4.4651162791},{\"date\":\"1994-11-14\",\"fuel\":\"gasoline\",\"current_price\":1.122,\"yoy_price\":1.064,\"absolute_change\":0.058,\"percentage_change\":5.4511278195},{\"date\":\"1994-11-21\",\"fuel\":\"gasoline\",\"current_price\":1.113,\"yoy_price\":1.058,\"absolute_change\":0.055,\"percentage_change\":5.1984877127},{\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"current_price\":1.2025833333,\"yoy_price\":1.051,\"absolute_change\":0.1515833333,\"percentage_change\":14.4227719632},{\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"current_price\":1.2031666667,\"yoy_price\":1.036,\"absolute_change\":0.1671666667,\"percentage_change\":16.1357786358},{\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"current_price\":1.19275,\"yoy_price\":1.018,\"absolute_change\":0.17475,\"percentage_change\":17.1660117878},{\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"current_price\":1.1849166667,\"yoy_price\":1.003,\"absolute_change\":0.1819166667,\"percentage_change\":18.137254902},{\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"current_price\":1.1778333333,\"yoy_price\":0.999,\"absolute_change\":0.1788333333,\"percentage_change\":17.9012345679},{\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"current_price\":1.1921666667,\"yoy_price\":0.992,\"absolute_change\":0.2001666667,\"percentage_change\":20.1780913978},{\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"current_price\":1.1970833333,\"yoy_price\":0.995,\"absolute_change\":0.2020833333,\"percentage_change\":20.3098827471},{\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"current_price\":1.19125,\"yoy_price\":1.001,\"absolute_change\":0.19025,\"percentage_change\":19.005994006},{\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"current_price\":1.1944166667,\"yoy_price\":0.999,\"absolute_change\":0.1954166667,\"percentage_change\":19.5612278946},{\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"current_price\":1.192,\"yoy_price\":1.005,\"absolute_change\":0.187,\"percentage_change\":18.6069651741},{\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"current_price\":1.187,\"yoy_price\":1.007,\"absolute_change\":0.18,\"percentage_change\":17.8748758689},{\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"current_price\":1.1839166667,\"yoy_price\":1.016,\"absolute_change\":0.1679166667,\"percentage_change\":16.5272309711},{\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"current_price\":1.1785,\"yoy_price\":1.009,\"absolute_change\":0.1695,\"percentage_change\":16.7988107037},{\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"current_price\":1.182,\"yoy_price\":1.004,\"absolute_change\":0.178,\"percentage_change\":17.7290836653},{\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"current_price\":1.18225,\"yoy_price\":1.007,\"absolute_change\":0.17525,\"percentage_change\":17.4031777557},{\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"current_price\":1.17525,\"yoy_price\":1.005,\"absolute_change\":0.17025,\"percentage_change\":16.9402985075},{\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"current_price\":1.174,\"yoy_price\":1.007,\"absolute_change\":0.167,\"percentage_change\":16.5839126117},{\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"current_price\":1.1771666667,\"yoy_price\":1.012,\"absolute_change\":0.1651666667,\"percentage_change\":16.3208168643},{\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"current_price\":1.1860833333,\"yoy_price\":1.011,\"absolute_change\":0.1750833333,\"percentage_change\":17.317837125},{\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"current_price\":1.2000833333,\"yoy_price\":1.028,\"absolute_change\":0.1720833333,\"percentage_change\":16.7396238651},{\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"current_price\":1.2124166667,\"yoy_price\":1.033,\"absolute_change\":0.1794166667,\"percentage_change\":17.3685059697},{\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"current_price\":1.2325833333,\"yoy_price\":1.037,\"absolute_change\":0.1955833333,\"percentage_change\":18.8604950177},{\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"current_price\":1.24275,\"yoy_price\":1.04,\"absolute_change\":0.20275,\"percentage_change\":19.4951923077},{\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"current_price\":1.2643333333,\"yoy_price\":1.045,\"absolute_change\":0.2193333333,\"percentage_change\":20.9888357257},{\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"current_price\":1.274,\"yoy_price\":1.046,\"absolute_change\":0.228,\"percentage_change\":21.7973231358},{\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"current_price\":1.2905833333,\"yoy_price\":1.05,\"absolute_change\":0.2405833333,\"percentage_change\":22.9126984127},{\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"current_price\":1.29425,\"yoy_price\":1.056,\"absolute_change\":0.23825,\"percentage_change\":22.5615530303},{\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"current_price\":1.2939166667,\"yoy_price\":1.065,\"absolute_change\":0.2289166667,\"percentage_change\":21.4945226917},{\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"current_price\":1.2913333333,\"yoy_price\":1.073,\"absolute_change\":0.2183333333,\"percentage_change\":20.347934141},{\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"current_price\":1.28575,\"yoy_price\":1.079,\"absolute_change\":0.20675,\"percentage_change\":19.1612604263},{\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"current_price\":1.2798333333,\"yoy_price\":1.095,\"absolute_change\":0.1848333333,\"percentage_change\":16.8797564688},{\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"current_price\":1.2730833333,\"yoy_price\":1.097,\"absolute_change\":0.1760833333,\"percentage_change\":16.0513521726},{\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"current_price\":1.2644166667,\"yoy_price\":1.103,\"absolute_change\":0.1614166667,\"percentage_change\":14.6343306135},{\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"current_price\":1.2545833333,\"yoy_price\":1.109,\"absolute_change\":0.1455833333,\"percentage_change\":13.1274421401},{\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"current_price\":1.2445833333,\"yoy_price\":1.114,\"absolute_change\":0.1305833333,\"percentage_change\":11.7220227409},{\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"current_price\":1.2321666667,\"yoy_price\":1.13,\"absolute_change\":0.1021666667,\"percentage_change\":9.0412979351},{\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"current_price\":1.2270833333,\"yoy_price\":1.157,\"absolute_change\":0.0700833333,\"percentage_change\":6.0573321809},{\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"current_price\":1.2228333333,\"yoy_price\":1.161,\"absolute_change\":0.0618333333,\"percentage_change\":5.3258685042},{\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"current_price\":1.2206666667,\"yoy_price\":1.165,\"absolute_change\":0.0556666667,\"percentage_change\":4.7782546495},{\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"current_price\":1.21325,\"yoy_price\":1.161,\"absolute_change\":0.05225,\"percentage_change\":4.5004306632},{\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"current_price\":1.2110833333,\"yoy_price\":1.156,\"absolute_change\":0.0550833333,\"percentage_change\":4.764994233},{\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"current_price\":1.2075833333,\"yoy_price\":1.15,\"absolute_change\":0.0575833333,\"percentage_change\":5.0072463768},{\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"current_price\":1.2063333333,\"yoy_price\":1.14,\"absolute_change\":0.0663333333,\"percentage_change\":5.8187134503},{\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"current_price\":1.2041666667,\"yoy_price\":1.129,\"absolute_change\":0.0751666667,\"percentage_change\":6.6578092707},{\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"current_price\":1.2005833333,\"yoy_price\":1.12,\"absolute_change\":0.0805833333,\"percentage_change\":7.1949404762},{\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"current_price\":1.1949166667,\"yoy_price\":1.114,\"absolute_change\":0.0809166667,\"percentage_change\":7.263614602},{\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"current_price\":1.1870833333,\"yoy_price\":1.106,\"absolute_change\":0.0810833333,\"percentage_change\":7.3312236287},{\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"current_price\":1.1790833333,\"yoy_price\":1.107,\"absolute_change\":0.0720833333,\"percentage_change\":6.5115928937},{\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"current_price\":1.1693333333,\"yoy_price\":1.121,\"absolute_change\":0.0483333333,\"percentage_change\":4.3116265239},{\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"current_price\":1.16475,\"yoy_price\":1.123,\"absolute_change\":0.04175,\"percentage_change\":3.7177203918},{\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"current_price\":1.1621666667,\"yoy_price\":1.122,\"absolute_change\":0.0401666667,\"percentage_change\":3.5799168152},{\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"current_price\":1.158,\"yoy_price\":1.113,\"absolute_change\":0.045,\"percentage_change\":4.0431266846},{\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"current_price\":1.1574166667,\"yoy_price\":1.2025833333,\"absolute_change\":-0.0451666667,\"percentage_change\":-3.7558034786},{\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"current_price\":1.1586666667,\"yoy_price\":1.2031666667,\"absolute_change\":-0.0445,\"percentage_change\":-3.6985732096},{\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"current_price\":1.1598333333,\"yoy_price\":1.19275,\"absolute_change\":-0.0329166667,\"percentage_change\":-2.7597289178},{\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"current_price\":1.1716666667,\"yoy_price\":1.1849166667,\"absolute_change\":-0.01325,\"percentage_change\":-1.1182220972},{\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"current_price\":1.1763333333,\"yoy_price\":1.1778333333,\"absolute_change\":-0.0015,\"percentage_change\":-0.1273524834},{\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"current_price\":1.178,\"yoy_price\":1.1921666667,\"absolute_change\":-0.0141666667,\"percentage_change\":-1.1883125961},{\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"current_price\":1.1848333333,\"yoy_price\":1.1970833333,\"absolute_change\":-0.01225,\"percentage_change\":-1.0233205708},{\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"current_price\":1.1918333333,\"yoy_price\":1.19125,\"absolute_change\":0.0005833333,\"percentage_change\":0.0489681707},{\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"current_price\":1.18725,\"yoy_price\":1.1944166667,\"absolute_change\":-0.0071666667,\"percentage_change\":-0.6000139538},{\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"current_price\":1.18275,\"yoy_price\":1.192,\"absolute_change\":-0.00925,\"percentage_change\":-0.7760067114},{\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"current_price\":1.1796666667,\"yoy_price\":1.187,\"absolute_change\":-0.0073333333,\"percentage_change\":-0.6178039876},{\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"current_price\":1.1765833333,\"yoy_price\":1.1839166667,\"absolute_change\":-0.0073333333,\"percentage_change\":-0.6194129654},{\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"current_price\":1.1820833333,\"yoy_price\":1.1785,\"absolute_change\":0.0035833333,\"percentage_change\":0.3040588318},{\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"current_price\":1.20075,\"yoy_price\":1.182,\"absolute_change\":0.01875,\"percentage_change\":1.5862944162},{\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"current_price\":1.216,\"yoy_price\":1.18225,\"absolute_change\":0.03375,\"percentage_change\":2.8547261578},{\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"current_price\":1.2185,\"yoy_price\":1.17525,\"absolute_change\":0.04325,\"percentage_change\":3.6800680706},{\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"current_price\":1.2275833333,\"yoy_price\":1.174,\"absolute_change\":0.0535833333,\"percentage_change\":4.5641680863},{\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"current_price\":1.2536666667,\"yoy_price\":1.1771666667,\"absolute_change\":0.0765,\"percentage_change\":6.4986549625},{\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"current_price\":1.2685833333,\"yoy_price\":1.1860833333,\"absolute_change\":0.0825,\"percentage_change\":6.955666409},{\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"current_price\":1.2933333333,\"yoy_price\":1.2000833333,\"absolute_change\":0.09325,\"percentage_change\":7.7702937296},{\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"current_price\":1.3344166667,\"yoy_price\":1.2124166667,\"absolute_change\":0.122,\"percentage_change\":10.0625472541},{\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"current_price\":1.35825,\"yoy_price\":1.2325833333,\"absolute_change\":0.1256666667,\"percentage_change\":10.195389088},{\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"current_price\":1.3765833333,\"yoy_price\":1.24275,\"absolute_change\":0.1338333333,\"percentage_change\":10.7691276068},{\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"current_price\":1.3811666667,\"yoy_price\":1.2643333333,\"absolute_change\":0.1168333333,\"percentage_change\":9.2407065647},{\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"current_price\":1.38375,\"yoy_price\":1.274,\"absolute_change\":0.10975,\"percentage_change\":8.614599686},{\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"current_price\":1.3891666667,\"yoy_price\":1.2905833333,\"absolute_change\":0.0985833333,\"percentage_change\":7.6386646865},{\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"current_price\":1.37975,\"yoy_price\":1.29425,\"absolute_change\":0.0855,\"percentage_change\":6.6061425536},{\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"current_price\":1.3785833333,\"yoy_price\":1.2939166667,\"absolute_change\":0.0846666667,\"percentage_change\":6.5434404586},{\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"current_price\":1.36975,\"yoy_price\":1.2913333333,\"absolute_change\":0.0784166667,\"percentage_change\":6.0725348477},{\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"current_price\":1.3625,\"yoy_price\":1.28575,\"absolute_change\":0.07675,\"percentage_change\":5.9692786311},{\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"current_price\":1.3511666667,\"yoy_price\":1.2798333333,\"absolute_change\":0.0713333333,\"percentage_change\":5.5736424014},{\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"current_price\":1.34025,\"yoy_price\":1.2730833333,\"absolute_change\":0.0671666667,\"percentage_change\":5.2759049552},{\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"current_price\":1.3360833333,\"yoy_price\":1.2644166667,\"absolute_change\":0.0716666667,\"percentage_change\":5.6679628287},{\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"current_price\":1.332,\"yoy_price\":1.2545833333,\"absolute_change\":0.0774166667,\"percentage_change\":6.1707074062},{\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"current_price\":1.3288333333,\"yoy_price\":1.2445833333,\"absolute_change\":0.08425,\"percentage_change\":6.7693337797},{\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"current_price\":1.3199166667,\"yoy_price\":1.2321666667,\"absolute_change\":0.08775,\"percentage_change\":7.1216015149},{\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"current_price\":1.30975,\"yoy_price\":1.2270833333,\"absolute_change\":0.0826666667,\"percentage_change\":6.7368421053},{\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"current_price\":1.3026666667,\"yoy_price\":1.2228333333,\"absolute_change\":0.0798333333,\"percentage_change\":6.5285539049},{\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"current_price\":1.3000833333,\"yoy_price\":1.2206666667,\"absolute_change\":0.0794166667,\"percentage_change\":6.5060076461},{\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"current_price\":1.3024166667,\"yoy_price\":1.21325,\"absolute_change\":0.0891666667,\"percentage_change\":7.3494058658},{\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"current_price\":1.2905,\"yoy_price\":1.2110833333,\"absolute_change\":0.0794166667,\"percentage_change\":6.5574898507},{\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"current_price\":1.2938333333,\"yoy_price\":1.2075833333,\"absolute_change\":0.08625,\"percentage_change\":7.1423642261},{\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"current_price\":1.2966666667,\"yoy_price\":1.2063333333,\"absolute_change\":0.0903333333,\"percentage_change\":7.4882564244},{\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"current_price\":1.29675,\"yoy_price\":1.2041666667,\"absolute_change\":0.0925833333,\"percentage_change\":7.6885813149},{\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"current_price\":1.2916666667,\"yoy_price\":1.2005833333,\"absolute_change\":0.0910833333,\"percentage_change\":7.5865898522},{\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"current_price\":1.2855,\"yoy_price\":1.1949166667,\"absolute_change\":0.0905833333,\"percentage_change\":7.5807238999},{\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"current_price\":1.2918333333,\"yoy_price\":1.1870833333,\"absolute_change\":0.10475,\"percentage_change\":8.8241488241},{\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"current_price\":1.2916666667,\"yoy_price\":1.1790833333,\"absolute_change\":0.1125833333,\"percentage_change\":9.5483779772},{\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"current_price\":1.2986666667,\"yoy_price\":1.1693333333,\"absolute_change\":0.1293333333,\"percentage_change\":11.0604332953},{\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"current_price\":1.3048333333,\"yoy_price\":1.16475,\"absolute_change\":0.1400833333,\"percentage_change\":12.0269013379},{\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"current_price\":1.3065833333,\"yoy_price\":1.1621666667,\"absolute_change\":0.1444166667,\"percentage_change\":12.4265022229},{\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"current_price\":1.31575,\"yoy_price\":1.158,\"absolute_change\":0.15775,\"percentage_change\":13.6226252159},{\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"current_price\":1.32175,\"yoy_price\":1.1574166667,\"absolute_change\":0.1643333333,\"percentage_change\":14.1982864137},{\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"current_price\":1.3219166667,\"yoy_price\":1.1586666667,\"absolute_change\":0.16325,\"percentage_change\":14.0894706559},{\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"current_price\":1.32275,\"yoy_price\":1.1598333333,\"absolute_change\":0.1629166667,\"percentage_change\":14.0465584136},{\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"current_price\":1.32075,\"yoy_price\":1.1716666667,\"absolute_change\":0.1490833333,\"percentage_change\":12.7240398293},{\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"current_price\":1.3175,\"yoy_price\":1.1763333333,\"absolute_change\":0.1411666667,\"percentage_change\":12.0005667328},{\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"current_price\":1.3154166667,\"yoy_price\":1.178,\"absolute_change\":0.1374166667,\"percentage_change\":11.6652518393},{\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"current_price\":1.31525,\"yoy_price\":1.1848333333,\"absolute_change\":0.1304166667,\"percentage_change\":11.0071740048},{\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"current_price\":1.3293333333,\"yoy_price\":1.1918333333,\"absolute_change\":0.1375,\"percentage_change\":11.5368479933},{\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"current_price\":1.3296666667,\"yoy_price\":1.18725,\"absolute_change\":0.1424166667,\"percentage_change\":11.9955078262},{\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"current_price\":1.3268333333,\"yoy_price\":1.18275,\"absolute_change\":0.1440833333,\"percentage_change\":12.1820615797},{\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"current_price\":1.3263333333,\"yoy_price\":1.1796666667,\"absolute_change\":0.1466666667,\"percentage_change\":12.4328906471},{\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"current_price\":1.3243333333,\"yoy_price\":1.1765833333,\"absolute_change\":0.14775,\"percentage_change\":12.5575465685},{\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"current_price\":1.3195,\"yoy_price\":1.1820833333,\"absolute_change\":0.1374166667,\"percentage_change\":11.6249559394},{\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"current_price\":1.3165833333,\"yoy_price\":1.20075,\"absolute_change\":0.1158333333,\"percentage_change\":9.6467485599},{\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"current_price\":1.30825,\"yoy_price\":1.216,\"absolute_change\":0.09225,\"percentage_change\":7.5863486842},{\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"current_price\":1.3035833333,\"yoy_price\":1.2185,\"absolute_change\":0.0850833333,\"percentage_change\":6.9826289153},{\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"current_price\":1.2974166667,\"yoy_price\":1.2275833333,\"absolute_change\":0.0698333333,\"percentage_change\":5.6886837282},{\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"current_price\":1.2995833333,\"yoy_price\":1.2536666667,\"absolute_change\":0.0459166667,\"percentage_change\":3.6625897368},{\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"current_price\":1.2985833333,\"yoy_price\":1.2685833333,\"absolute_change\":0.03,\"percentage_change\":2.3648426723},{\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"current_price\":1.3015833333,\"yoy_price\":1.2933333333,\"absolute_change\":0.00825,\"percentage_change\":0.6378865979},{\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"current_price\":1.2985833333,\"yoy_price\":1.3344166667,\"absolute_change\":-0.0358333333,\"percentage_change\":-2.685318179},{\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"current_price\":1.2971666667,\"yoy_price\":1.35825,\"absolute_change\":-0.0610833333,\"percentage_change\":-4.4972084177},{\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"current_price\":1.2928333333,\"yoy_price\":1.3765833333,\"absolute_change\":-0.08375,\"percentage_change\":-6.083903384},{\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"current_price\":1.2909166667,\"yoy_price\":1.3811666667,\"absolute_change\":-0.09025,\"percentage_change\":-6.5343308797},{\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"current_price\":1.2889166667,\"yoy_price\":1.38375,\"absolute_change\":-0.0948333333,\"percentage_change\":-6.8533574225},{\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"current_price\":1.2956666667,\"yoy_price\":1.3891666667,\"absolute_change\":-0.0935,\"percentage_change\":-6.7306538692},{\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"current_price\":1.3023333333,\"yoy_price\":1.37975,\"absolute_change\":-0.0774166667,\"percentage_change\":-5.6109198526},{\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"current_price\":1.3034166667,\"yoy_price\":1.3785833333,\"absolute_change\":-0.0751666667,\"percentage_change\":-5.4524572327},{\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"current_price\":1.298,\"yoy_price\":1.36975,\"absolute_change\":-0.07175,\"percentage_change\":-5.23818215},{\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"current_price\":1.2903333333,\"yoy_price\":1.3625,\"absolute_change\":-0.0721666667,\"percentage_change\":-5.2966360856},{\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"current_price\":1.2814166667,\"yoy_price\":1.3511666667,\"absolute_change\":-0.06975,\"percentage_change\":-5.1622055014},{\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"current_price\":1.2731666667,\"yoy_price\":1.34025,\"absolute_change\":-0.0670833333,\"percentage_change\":-5.0052850836},{\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"current_price\":1.26925,\"yoy_price\":1.3360833333,\"absolute_change\":-0.0668333333,\"percentage_change\":-5.0021829976},{\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"current_price\":1.26475,\"yoy_price\":1.332,\"absolute_change\":-0.06725,\"percentage_change\":-5.0487987988},{\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"current_price\":1.26675,\"yoy_price\":1.3288333333,\"absolute_change\":-0.0620833333,\"percentage_change\":-4.672018061},{\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"current_price\":1.2615833333,\"yoy_price\":1.3199166667,\"absolute_change\":-0.0583333333,\"percentage_change\":-4.4194709262},{\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"current_price\":1.282,\"yoy_price\":1.30975,\"absolute_change\":-0.02775,\"percentage_change\":-2.1187249475},{\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"current_price\":1.3171666667,\"yoy_price\":1.3026666667,\"absolute_change\":0.0145,\"percentage_change\":1.1131013306},{\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"current_price\":1.3226666667,\"yoy_price\":1.3000833333,\"absolute_change\":0.0225833333,\"percentage_change\":1.7370681367},{\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"current_price\":1.3403333333,\"yoy_price\":1.3024166667,\"absolute_change\":0.0379166667,\"percentage_change\":2.9112547188},{\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"current_price\":1.3423333333,\"yoy_price\":1.2905,\"absolute_change\":0.0518333333,\"percentage_change\":4.0165310603},{\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"current_price\":1.3435833333,\"yoy_price\":1.2938333333,\"absolute_change\":0.04975,\"percentage_change\":3.8451629525},{\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"current_price\":1.3390833333,\"yoy_price\":1.2966666667,\"absolute_change\":0.0424166667,\"percentage_change\":3.2712082262},{\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"current_price\":1.3289166667,\"yoy_price\":1.29675,\"absolute_change\":0.0321666667,\"percentage_change\":2.4805603753},{\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"current_price\":1.3160833333,\"yoy_price\":1.2916666667,\"absolute_change\":0.0244166667,\"percentage_change\":1.8903225806},{\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"current_price\":1.3143333333,\"yoy_price\":1.2855,\"absolute_change\":0.0288333333,\"percentage_change\":2.2429664203},{\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"current_price\":1.3075,\"yoy_price\":1.2918333333,\"absolute_change\":0.0156666667,\"percentage_change\":1.2127467424},{\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"current_price\":1.2989166667,\"yoy_price\":1.2916666667,\"absolute_change\":0.00725,\"percentage_change\":0.5612903226},{\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"current_price\":1.2889166667,\"yoy_price\":1.2986666667,\"absolute_change\":-0.00975,\"percentage_change\":-0.7507700205},{\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"current_price\":1.2814166667,\"yoy_price\":1.3048333333,\"absolute_change\":-0.0234166667,\"percentage_change\":-1.7946097841},{\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"current_price\":1.2804166667,\"yoy_price\":1.3065833333,\"absolute_change\":-0.0261666667,\"percentage_change\":-2.0026787423},{\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"current_price\":1.27175,\"yoy_price\":1.31575,\"absolute_change\":-0.044,\"percentage_change\":-3.344100323},{\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"current_price\":1.2656666667,\"yoy_price\":1.32175,\"absolute_change\":-0.0560833333,\"percentage_change\":-4.2431120358},{\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"current_price\":1.2570833333,\"yoy_price\":1.3219166667,\"absolute_change\":-0.0648333333,\"percentage_change\":-4.9044947362},{\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"current_price\":1.2458333333,\"yoy_price\":1.32275,\"absolute_change\":-0.0769166667,\"percentage_change\":-5.8149058149},{\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"current_price\":1.2355833333,\"yoy_price\":1.32075,\"absolute_change\":-0.0851666667,\"percentage_change\":-6.4483563632},{\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"current_price\":1.2255,\"yoy_price\":1.3175,\"absolute_change\":-0.092,\"percentage_change\":-6.9829222011},{\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"current_price\":1.2175833333,\"yoy_price\":1.3154166667,\"absolute_change\":-0.0978333333,\"percentage_change\":-7.4374406082},{\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"current_price\":1.2095,\"yoy_price\":1.31525,\"absolute_change\":-0.10575,\"percentage_change\":-8.0402965216},{\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"current_price\":1.1999166667,\"yoy_price\":1.3293333333,\"absolute_change\":-0.1294166667,\"percentage_change\":-9.7354563691},{\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"current_price\":1.1858333333,\"yoy_price\":1.3296666667,\"absolute_change\":-0.1438333333,\"percentage_change\":-10.8172474304},{\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"current_price\":1.1703333333,\"yoy_price\":1.3268333333,\"absolute_change\":-0.1565,\"percentage_change\":-11.7950006281},{\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"current_price\":1.1635833333,\"yoy_price\":1.3263333333,\"absolute_change\":-0.16275,\"percentage_change\":-12.2706710229},{\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"current_price\":1.1553333333,\"yoy_price\":1.3243333333,\"absolute_change\":-0.169,\"percentage_change\":-12.7611376793},{\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"current_price\":1.1394166667,\"yoy_price\":1.3195,\"absolute_change\":-0.1800833333,\"percentage_change\":-13.6478464065},{\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"current_price\":1.1393333333,\"yoy_price\":1.3165833333,\"absolute_change\":-0.17725,\"percentage_change\":-13.4628773973},{\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"current_price\":1.1236666667,\"yoy_price\":1.30825,\"absolute_change\":-0.1845833333,\"percentage_change\":-14.1091789286},{\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"current_price\":1.1116666667,\"yoy_price\":1.3035833333,\"absolute_change\":-0.1919166667,\"percentage_change\":-14.7222399795},{\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"current_price\":1.1015,\"yoy_price\":1.2974166667,\"absolute_change\":-0.1959166667,\"percentage_change\":-15.1005202646},{\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"current_price\":1.093,\"yoy_price\":1.2995833333,\"absolute_change\":-0.2065833333,\"percentage_change\":-15.8961205515},{\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"current_price\":1.1211666667,\"yoy_price\":1.2985833333,\"absolute_change\":-0.1774166667,\"percentage_change\":-13.6623243278},{\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"current_price\":1.1190833333,\"yoy_price\":1.3015833333,\"absolute_change\":-0.1825,\"percentage_change\":-14.0213842115},{\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"current_price\":1.1186666667,\"yoy_price\":1.2985833333,\"absolute_change\":-0.1799166667,\"percentage_change\":-13.8548418148},{\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"current_price\":1.1206666667,\"yoy_price\":1.2971666667,\"absolute_change\":-0.1765,\"percentage_change\":-13.6065784402},{\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"current_price\":1.1316666667,\"yoy_price\":1.2928333333,\"absolute_change\":-0.1611666667,\"percentage_change\":-12.4661595978},{\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"current_price\":1.1455,\"yoy_price\":1.2909166667,\"absolute_change\":-0.1454166667,\"percentage_change\":-11.2646052547},{\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"current_price\":1.1580833333,\"yoy_price\":1.2889166667,\"absolute_change\":-0.1308333333,\"percentage_change\":-10.1506433051},{\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"current_price\":1.1619166667,\"yoy_price\":1.2956666667,\"absolute_change\":-0.13375,\"percentage_change\":-10.3228711088},{\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"current_price\":1.1605833333,\"yoy_price\":1.3023333333,\"absolute_change\":-0.14175,\"percentage_change\":-10.8843102124},{\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"current_price\":1.1571666667,\"yoy_price\":1.3034166667,\"absolute_change\":-0.14625,\"percentage_change\":-11.2205101976},{\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"current_price\":1.1628333333,\"yoy_price\":1.298,\"absolute_change\":-0.1351666667,\"percentage_change\":-10.4134565999},{\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"current_price\":1.1561666667,\"yoy_price\":1.2903333333,\"absolute_change\":-0.1341666667,\"percentage_change\":-10.3978300181},{\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"current_price\":1.15,\"yoy_price\":1.2814166667,\"absolute_change\":-0.1314166667,\"percentage_change\":-10.2555765104},{\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"current_price\":1.1484166667,\"yoy_price\":1.2731666667,\"absolute_change\":-0.12475,\"percentage_change\":-9.7984029323},{\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"current_price\":1.1486666667,\"yoy_price\":1.26925,\"absolute_change\":-0.1205833333,\"percentage_change\":-9.5003611056},{\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"current_price\":1.1450833333,\"yoy_price\":1.26475,\"absolute_change\":-0.1196666667,\"percentage_change\":-9.4616854451},{\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"current_price\":1.1476666667,\"yoy_price\":1.26675,\"absolute_change\":-0.1190833333,\"percentage_change\":-9.4006973225},{\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"current_price\":1.1401666667,\"yoy_price\":1.2615833333,\"absolute_change\":-0.1214166667,\"percentage_change\":-9.6241495475},{\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"current_price\":1.1303333333,\"yoy_price\":1.282,\"absolute_change\":-0.1516666667,\"percentage_change\":-11.8304732189},{\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"current_price\":1.1250833333,\"yoy_price\":1.3171666667,\"absolute_change\":-0.1920833333,\"percentage_change\":-14.5830697204},{\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"current_price\":1.1194166667,\"yoy_price\":1.3226666667,\"absolute_change\":-0.20325,\"percentage_change\":-15.3666834677},{\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"current_price\":1.11275,\"yoy_price\":1.3403333333,\"absolute_change\":-0.2275833333,\"percentage_change\":-16.9796070629},{\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"current_price\":1.107,\"yoy_price\":1.3423333333,\"absolute_change\":-0.2353333333,\"percentage_change\":-17.5316612863},{\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"current_price\":1.1015,\"yoy_price\":1.3435833333,\"absolute_change\":-0.2420833333,\"percentage_change\":-18.0177386342},{\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"current_price\":1.09725,\"yoy_price\":1.3390833333,\"absolute_change\":-0.2418333333,\"percentage_change\":-18.0596178978},{\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"current_price\":1.1071666667,\"yoy_price\":1.3289166667,\"absolute_change\":-0.22175,\"percentage_change\":-16.6865241111},{\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"current_price\":1.1075833333,\"yoy_price\":1.3160833333,\"absolute_change\":-0.2085,\"percentage_change\":-15.8424618502},{\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"current_price\":1.1115,\"yoy_price\":1.3143333333,\"absolute_change\":-0.2028333333,\"percentage_change\":-15.4324118691},{\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"current_price\":1.1158333333,\"yoy_price\":1.3075,\"absolute_change\":-0.1916666667,\"percentage_change\":-14.6590184831},{\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"current_price\":1.1113333333,\"yoy_price\":1.2989166667,\"absolute_change\":-0.1875833333,\"percentage_change\":-14.441521781},{\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"current_price\":1.1086666667,\"yoy_price\":1.2889166667,\"absolute_change\":-0.18025,\"percentage_change\":-13.9846124006},{\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"current_price\":1.1045,\"yoy_price\":1.2814166667,\"absolute_change\":-0.1769166667,\"percentage_change\":-13.8063341354},{\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"current_price\":1.1028333333,\"yoy_price\":1.2804166667,\"absolute_change\":-0.1775833333,\"percentage_change\":-13.8691832086},{\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"current_price\":1.0931666667,\"yoy_price\":1.27175,\"absolute_change\":-0.1785833333,\"percentage_change\":-14.0423301225},{\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"current_price\":1.0886666667,\"yoy_price\":1.2656666667,\"absolute_change\":-0.177,\"percentage_change\":-13.9847247827},{\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"current_price\":1.0763333333,\"yoy_price\":1.2570833333,\"absolute_change\":-0.18075,\"percentage_change\":-14.3785217103},{\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"current_price\":1.0594166667,\"yoy_price\":1.2458333333,\"absolute_change\":-0.1864166667,\"percentage_change\":-14.9632107023},{\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"current_price\":1.05125,\"yoy_price\":1.2355833333,\"absolute_change\":-0.1843333333,\"percentage_change\":-14.9187293451},{\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"current_price\":1.049,\"yoy_price\":1.2255,\"absolute_change\":-0.1765,\"percentage_change\":-14.4022847817},{\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"current_price\":1.043,\"yoy_price\":1.2175833333,\"absolute_change\":-0.1745833333,\"percentage_change\":-14.3385120799},{\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"current_price\":1.0405833333,\"yoy_price\":1.2095,\"absolute_change\":-0.1689166667,\"percentage_change\":-13.9658260989},{\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"current_price\":1.0429166667,\"yoy_price\":1.1999166667,\"absolute_change\":-0.157,\"percentage_change\":-13.0842419612},{\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"current_price\":1.0458333333,\"yoy_price\":1.1858333333,\"absolute_change\":-0.14,\"percentage_change\":-11.8060435699},{\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"current_price\":1.0391666667,\"yoy_price\":1.1703333333,\"absolute_change\":-0.1311666667,\"percentage_change\":-11.2076331529},{\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"current_price\":1.0320833333,\"yoy_price\":1.1635833333,\"absolute_change\":-0.1315,\"percentage_change\":-11.301296283},{\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"current_price\":1.02875,\"yoy_price\":1.1553333333,\"absolute_change\":-0.1265833333,\"percentage_change\":-10.9564339296},{\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"current_price\":1.0210833333,\"yoy_price\":1.1394166667,\"absolute_change\":-0.1183333333,\"percentage_change\":-10.3854311417},{\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"current_price\":1.012,\"yoy_price\":1.1393333333,\"absolute_change\":-0.1273333333,\"percentage_change\":-11.1761263897},{\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"current_price\":1.0169166667,\"yoy_price\":1.1236666667,\"absolute_change\":-0.10675,\"percentage_change\":-9.5001483239},{\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"current_price\":1.0249166667,\"yoy_price\":1.1116666667,\"absolute_change\":-0.08675,\"percentage_change\":-7.8035982009},{\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"current_price\":1.0733333333,\"yoy_price\":1.1015,\"absolute_change\":-0.0281666667,\"percentage_change\":-2.55711908},{\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"current_price\":1.1114166667,\"yoy_price\":1.093,\"absolute_change\":0.0184166667,\"percentage_change\":1.6849649283},{\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"current_price\":1.1826666667,\"yoy_price\":1.1211666667,\"absolute_change\":0.0615,\"percentage_change\":5.4853575145},{\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"current_price\":1.22625,\"yoy_price\":1.1190833333,\"absolute_change\":0.1071666667,\"percentage_change\":9.5762901184},{\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"current_price\":1.2495,\"yoy_price\":1.1186666667,\"absolute_change\":0.1308333333,\"percentage_change\":11.6954707986},{\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"current_price\":1.2458333333,\"yoy_price\":1.1206666667,\"absolute_change\":0.1251666667,\"percentage_change\":11.1689470553},{\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"current_price\":1.2426666667,\"yoy_price\":1.1316666667,\"absolute_change\":0.111,\"percentage_change\":9.8085419735},{\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"current_price\":1.244,\"yoy_price\":1.1455,\"absolute_change\":0.0985,\"percentage_change\":8.5988651244},{\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"current_price\":1.2485,\"yoy_price\":1.1580833333,\"absolute_change\":0.0904166667,\"percentage_change\":7.8074404548},{\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"current_price\":1.2455833333,\"yoy_price\":1.1619166667,\"absolute_change\":0.0836666667,\"percentage_change\":7.200745894},{\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"current_price\":1.2296666667,\"yoy_price\":1.1605833333,\"absolute_change\":0.0690833333,\"percentage_change\":5.9524664321},{\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"current_price\":1.2144166667,\"yoy_price\":1.1571666667,\"absolute_change\":0.05725,\"percentage_change\":4.9474290652},{\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"current_price\":1.21125,\"yoy_price\":1.1628333333,\"absolute_change\":0.0484166667,\"percentage_change\":4.163680665},{\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"current_price\":1.2073333333,\"yoy_price\":1.1561666667,\"absolute_change\":0.0511666667,\"percentage_change\":4.4255441834},{\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"current_price\":1.2195,\"yoy_price\":1.15,\"absolute_change\":0.0695,\"percentage_change\":6.0434782609},{\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"current_price\":1.2113333333,\"yoy_price\":1.1484166667,\"absolute_change\":0.0629166667,\"percentage_change\":5.4785574341},{\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"current_price\":1.22,\"yoy_price\":1.1486666667,\"absolute_change\":0.0713333333,\"percentage_change\":6.2100986651},{\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"current_price\":1.2401666667,\"yoy_price\":1.1450833333,\"absolute_change\":0.0950833333,\"percentage_change\":8.3036169129},{\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"current_price\":1.2691666667,\"yoy_price\":1.1476666667,\"absolute_change\":0.1215,\"percentage_change\":10.5866976474},{\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"current_price\":1.29075,\"yoy_price\":1.1401666667,\"absolute_change\":0.1505833333,\"percentage_change\":13.20713346},{\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"current_price\":1.2959166667,\"yoy_price\":1.1303333333,\"absolute_change\":0.1655833333,\"percentage_change\":14.6490710705},{\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"current_price\":1.3089166667,\"yoy_price\":1.1250833333,\"absolute_change\":0.1838333333,\"percentage_change\":16.3395304052},{\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"current_price\":1.3348333333,\"yoy_price\":1.1194166667,\"absolute_change\":0.2154166667,\"percentage_change\":19.2436536887},{\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"current_price\":1.33425,\"yoy_price\":1.11275,\"absolute_change\":0.2215,\"percentage_change\":19.9056391822},{\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"current_price\":1.3328333333,\"yoy_price\":1.107,\"absolute_change\":0.2258333333,\"percentage_change\":20.4004817826},{\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"current_price\":1.3393333333,\"yoy_price\":1.1015,\"absolute_change\":0.2378333333,\"percentage_change\":21.5917688001},{\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"current_price\":1.3453333333,\"yoy_price\":1.09725,\"absolute_change\":0.2480833333,\"percentage_change\":22.6095541885},{\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"current_price\":1.3605833333,\"yoy_price\":1.1071666667,\"absolute_change\":0.2534166667,\"percentage_change\":22.8887550805},{\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"current_price\":1.3545,\"yoy_price\":1.1075833333,\"absolute_change\":0.2469166667,\"percentage_change\":22.2932811677},{\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"current_price\":1.3503333333,\"yoy_price\":1.1115,\"absolute_change\":0.2388333333,\"percentage_change\":21.4874793822},{\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"current_price\":1.3466666667,\"yoy_price\":1.1158333333,\"absolute_change\":0.2308333333,\"percentage_change\":20.6870799104},{\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"current_price\":1.3353333333,\"yoy_price\":1.1113333333,\"absolute_change\":0.224,\"percentage_change\":20.1559688062},{\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"current_price\":1.3331666667,\"yoy_price\":1.1086666667,\"absolute_change\":0.2245,\"percentage_change\":20.2495490078},{\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"current_price\":1.3265833333,\"yoy_price\":1.1045,\"absolute_change\":0.2220833333,\"percentage_change\":20.1071374679},{\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"current_price\":1.3271666667,\"yoy_price\":1.1028333333,\"absolute_change\":0.2243333333,\"percentage_change\":20.3415445066},{\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"current_price\":1.34325,\"yoy_price\":1.0931666667,\"absolute_change\":0.2500833333,\"percentage_change\":22.8769629517},{\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"current_price\":1.35925,\"yoy_price\":1.0886666667,\"absolute_change\":0.2705833333,\"percentage_change\":24.8545621555},{\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"current_price\":1.3671666667,\"yoy_price\":1.0763333333,\"absolute_change\":0.2908333333,\"percentage_change\":27.020749458},{\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"current_price\":1.3674166667,\"yoy_price\":1.0594166667,\"absolute_change\":0.308,\"percentage_change\":29.0726028475},{\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"current_price\":1.3680833333,\"yoy_price\":1.05125,\"absolute_change\":0.3168333333,\"percentage_change\":30.1387237416},{\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"current_price\":1.3629166667,\"yoy_price\":1.049,\"absolute_change\":0.3139166667,\"percentage_change\":29.925325707},{\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"current_price\":1.3658333333,\"yoy_price\":1.043,\"absolute_change\":0.3228333333,\"percentage_change\":30.9523809524},{\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"current_price\":1.3645,\"yoy_price\":1.0405833333,\"absolute_change\":0.3239166667,\"percentage_change\":31.1283735084},{\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"current_price\":1.3575833333,\"yoy_price\":1.0429166667,\"absolute_change\":0.3146666667,\"percentage_change\":30.1717938474},{\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"current_price\":1.3674166667,\"yoy_price\":1.0458333333,\"absolute_change\":0.3215833333,\"percentage_change\":30.7490039841},{\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"current_price\":1.3995,\"yoy_price\":1.0391666667,\"absolute_change\":0.3603333333,\"percentage_change\":34.6752205293},{\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"current_price\":1.4033333333,\"yoy_price\":1.0320833333,\"absolute_change\":0.37125,\"percentage_change\":35.9709325797},{\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"current_price\":1.4104166667,\"yoy_price\":1.02875,\"absolute_change\":0.3816666667,\"percentage_change\":37.1000405022},{\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"current_price\":1.4378333333,\"yoy_price\":1.0210833333,\"absolute_change\":0.41675,\"percentage_change\":40.8144944095},{\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"current_price\":1.4835,\"yoy_price\":1.012,\"absolute_change\":0.4715,\"percentage_change\":46.5909090909},{\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"current_price\":1.5021666667,\"yoy_price\":1.0169166667,\"absolute_change\":0.48525,\"percentage_change\":47.7177743178},{\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"current_price\":1.5858333333,\"yoy_price\":1.0249166667,\"absolute_change\":0.5609166667,\"percentage_change\":54.7280266688},{\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"current_price\":1.6205833333,\"yoy_price\":1.0733333333,\"absolute_change\":0.54725,\"percentage_change\":50.9860248447},{\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"current_price\":1.62925,\"yoy_price\":1.1114166667,\"absolute_change\":0.5178333333,\"percentage_change\":46.5921871485},{\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"current_price\":1.613,\"yoy_price\":1.1826666667,\"absolute_change\":0.4303333333,\"percentage_change\":36.3866967306},{\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"current_price\":1.6068333333,\"yoy_price\":1.22625,\"absolute_change\":0.3805833333,\"percentage_change\":31.0363574584},{\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"current_price\":1.5824166667,\"yoy_price\":1.2495,\"absolute_change\":0.3329166667,\"percentage_change\":26.6439909297},{\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"current_price\":1.5545,\"yoy_price\":1.2458333333,\"absolute_change\":0.3086666667,\"percentage_change\":24.7759197324},{\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"current_price\":1.5449166667,\"yoy_price\":1.2426666667,\"absolute_change\":0.30225,\"percentage_change\":24.322693133},{\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"current_price\":1.52925,\"yoy_price\":1.244,\"absolute_change\":0.28525,\"percentage_change\":22.9300643087},{\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"current_price\":1.5560833333,\"yoy_price\":1.2485,\"absolute_change\":0.3075833333,\"percentage_change\":24.6362301428},{\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"current_price\":1.5860833333,\"yoy_price\":1.2455833333,\"absolute_change\":0.3405,\"percentage_change\":27.3365892821},{\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"current_price\":1.6116666667,\"yoy_price\":1.2296666667,\"absolute_change\":0.382,\"percentage_change\":31.0653293575},{\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"current_price\":1.6254166667,\"yoy_price\":1.2144166667,\"absolute_change\":0.411,\"percentage_change\":33.8434090441},{\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"current_price\":1.6456666667,\"yoy_price\":1.21125,\"absolute_change\":0.4344166667,\"percentage_change\":35.8651530788},{\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"current_price\":1.6994166667,\"yoy_price\":1.2073333333,\"absolute_change\":0.4920833333,\"percentage_change\":40.7578685809},{\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"current_price\":1.7399166667,\"yoy_price\":1.2195,\"absolute_change\":0.5204166667,\"percentage_change\":42.6745934126},{\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"current_price\":1.7258333333,\"yoy_price\":1.2113333333,\"absolute_change\":0.5145,\"percentage_change\":42.4738580077},{\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"current_price\":1.7075,\"yoy_price\":1.22,\"absolute_change\":0.4875,\"percentage_change\":39.9590163934},{\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"current_price\":1.6853333333,\"yoy_price\":1.2401666667,\"absolute_change\":0.4451666667,\"percentage_change\":35.8957129418},{\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"current_price\":1.6488333333,\"yoy_price\":1.2691666667,\"absolute_change\":0.3796666667,\"percentage_change\":29.9146421536},{\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"current_price\":1.6263333333,\"yoy_price\":1.29075,\"absolute_change\":0.3355833333,\"percentage_change\":25.9990961327},{\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"current_price\":1.5839166667,\"yoy_price\":1.2959166667,\"absolute_change\":0.288,\"percentage_change\":22.2236512121},{\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"current_price\":1.573,\"yoy_price\":1.3089166667,\"absolute_change\":0.2640833333,\"percentage_change\":20.1757178328},{\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"current_price\":1.5595,\"yoy_price\":1.3348333333,\"absolute_change\":0.2246666667,\"percentage_change\":16.8310650518},{\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"current_price\":1.5729166667,\"yoy_price\":1.33425,\"absolute_change\":0.2386666667,\"percentage_change\":17.8877022047},{\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"current_price\":1.5854166667,\"yoy_price\":1.3328333333,\"absolute_change\":0.2525833333,\"percentage_change\":18.9508565712},{\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"current_price\":1.6298333333,\"yoy_price\":1.3393333333,\"absolute_change\":0.2905,\"percentage_change\":21.6898954704},{\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"current_price\":1.6595833333,\"yoy_price\":1.3453333333,\"absolute_change\":0.31425,\"percentage_change\":23.3585232904},{\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"current_price\":1.6579166667,\"yoy_price\":1.3605833333,\"absolute_change\":0.2973333333,\"percentage_change\":21.8533717156},{\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"current_price\":1.6485,\"yoy_price\":1.3545,\"absolute_change\":0.294,\"percentage_change\":21.7054263566},{\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"current_price\":1.6289166667,\"yoy_price\":1.3503333333,\"absolute_change\":0.2785833333,\"percentage_change\":20.630708467},{\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"current_price\":1.60925,\"yoy_price\":1.3466666667,\"absolute_change\":0.2625833333,\"percentage_change\":19.4987623762},{\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"current_price\":1.6384166667,\"yoy_price\":1.3353333333,\"absolute_change\":0.3030833333,\"percentage_change\":22.6972041937},{\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"current_price\":1.6444166667,\"yoy_price\":1.3331666667,\"absolute_change\":0.31125,\"percentage_change\":23.3466683335},{\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"current_price\":1.6425833333,\"yoy_price\":1.3265833333,\"absolute_change\":0.316,\"percentage_change\":23.8205917457},{\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"current_price\":1.62675,\"yoy_price\":1.3271666667,\"absolute_change\":0.2995833333,\"percentage_change\":22.5731508226},{\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"current_price\":1.6224166667,\"yoy_price\":1.34325,\"absolute_change\":0.2791666667,\"percentage_change\":20.7829269806},{\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"current_price\":1.6113333333,\"yoy_price\":1.35925,\"absolute_change\":0.2520833333,\"percentage_change\":18.5457666605},{\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"current_price\":1.6089166667,\"yoy_price\":1.3671666667,\"absolute_change\":0.24175,\"percentage_change\":17.6825551627},{\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"current_price\":1.58775,\"yoy_price\":1.3674166667,\"absolute_change\":0.2203333333,\"percentage_change\":16.1131086599},{\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"current_price\":1.5559166667,\"yoy_price\":1.3680833333,\"absolute_change\":0.1878333333,\"percentage_change\":13.7296704635},{\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"current_price\":1.5295833333,\"yoy_price\":1.3629166667,\"absolute_change\":0.1666666667,\"percentage_change\":12.2286762458},{\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"current_price\":1.5176666667,\"yoy_price\":1.3658333333,\"absolute_change\":0.1518333333,\"percentage_change\":11.1165344722},{\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"current_price\":1.5119166667,\"yoy_price\":1.3645,\"absolute_change\":0.1474166667,\"percentage_change\":10.8037132039},{\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"current_price\":1.5254166667,\"yoy_price\":1.3575833333,\"absolute_change\":0.1678333333,\"percentage_change\":12.3626542263},{\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"current_price\":1.5641666667,\"yoy_price\":1.3674166667,\"absolute_change\":0.19675,\"percentage_change\":14.3884453653},{\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"current_price\":1.562,\"yoy_price\":1.3995,\"absolute_change\":0.1625,\"percentage_change\":11.6112897463},{\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"current_price\":1.551,\"yoy_price\":1.4033333333,\"absolute_change\":0.1476666667,\"percentage_change\":10.5225653207},{\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"current_price\":1.5389166667,\"yoy_price\":1.4104166667,\"absolute_change\":0.1285,\"percentage_change\":9.1107828656},{\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"current_price\":1.5669166667,\"yoy_price\":1.4378333333,\"absolute_change\":0.1290833333,\"percentage_change\":8.977628376},{\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"current_price\":1.5478333333,\"yoy_price\":1.4835,\"absolute_change\":0.0643333333,\"percentage_change\":4.3365913942},{\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"current_price\":1.532,\"yoy_price\":1.5021666667,\"absolute_change\":0.0298333333,\"percentage_change\":1.9860201931},{\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"current_price\":1.5219166667,\"yoy_price\":1.5858333333,\"absolute_change\":-0.0639166667,\"percentage_change\":-4.0304781923},{\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"current_price\":1.5171666667,\"yoy_price\":1.6205833333,\"absolute_change\":-0.1034166667,\"percentage_change\":-6.3814470098},{\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"current_price\":1.5091666667,\"yoy_price\":1.62925,\"absolute_change\":-0.1200833333,\"percentage_change\":-7.3704669838},{\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"current_price\":1.50775,\"yoy_price\":1.613,\"absolute_change\":-0.10525,\"percentage_change\":-6.5251084935},{\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"current_price\":1.543,\"yoy_price\":1.6068333333,\"absolute_change\":-0.0638333333,\"percentage_change\":-3.9726169484},{\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"current_price\":1.5984166667,\"yoy_price\":1.5824166667,\"absolute_change\":0.016,\"percentage_change\":1.0111116962},{\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"current_price\":1.6590833333,\"yoy_price\":1.5545,\"absolute_change\":0.1045833333,\"percentage_change\":6.7277795647},{\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"current_price\":1.7113333333,\"yoy_price\":1.5449166667,\"absolute_change\":0.1664166667,\"percentage_change\":10.7718862938},{\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"current_price\":1.7231666667,\"yoy_price\":1.52925,\"absolute_change\":0.1939166667,\"percentage_change\":12.6805078742},{\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"current_price\":1.7915,\"yoy_price\":1.5560833333,\"absolute_change\":0.2354166667,\"percentage_change\":15.1287955872},{\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"current_price\":1.8036666667,\"yoy_price\":1.5860833333,\"absolute_change\":0.2175833333,\"percentage_change\":13.718278779},{\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"current_price\":1.7833333333,\"yoy_price\":1.6116666667,\"absolute_change\":0.1716666667,\"percentage_change\":10.6514994829},{\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"current_price\":1.7961666667,\"yoy_price\":1.6254166667,\"absolute_change\":0.17075,\"percentage_change\":10.5049987183},{\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"current_price\":1.7734166667,\"yoy_price\":1.6456666667,\"absolute_change\":0.12775,\"percentage_change\":7.7628114239},{\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"current_price\":1.7493333333,\"yoy_price\":1.6994166667,\"absolute_change\":0.0499166667,\"percentage_change\":2.9372824008},{\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"current_price\":1.709,\"yoy_price\":1.7399166667,\"absolute_change\":-0.0309166667,\"percentage_change\":-1.7769050242},{\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"current_price\":1.6539166667,\"yoy_price\":1.7258333333,\"absolute_change\":-0.0719166667,\"percentage_change\":-4.1670690488},{\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"current_price\":1.594,\"yoy_price\":1.7075,\"absolute_change\":-0.1135,\"percentage_change\":-6.6471449488},{\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"current_price\":1.5575,\"yoy_price\":1.6853333333,\"absolute_change\":-0.1278333333,\"percentage_change\":-7.5850474684},{\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"current_price\":1.531,\"yoy_price\":1.6488333333,\"absolute_change\":-0.1178333333,\"percentage_change\":-7.146467199},{\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"current_price\":1.509,\"yoy_price\":1.6263333333,\"absolute_change\":-0.1173333333,\"percentage_change\":-7.2145931543},{\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"current_price\":1.4925,\"yoy_price\":1.5839166667,\"absolute_change\":-0.0914166667,\"percentage_change\":-5.7715578471},{\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"current_price\":1.4800833333,\"yoy_price\":1.573,\"absolute_change\":-0.0929166667,\"percentage_change\":-5.9069718161},{\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"current_price\":1.48925,\"yoy_price\":1.5595,\"absolute_change\":-0.07025,\"percentage_change\":-4.5046489259},{\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"current_price\":1.5150833333,\"yoy_price\":1.5729166667,\"absolute_change\":-0.0578333333,\"percentage_change\":-3.6768211921},{\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"current_price\":1.5595833333,\"yoy_price\":1.5854166667,\"absolute_change\":-0.0258333333,\"percentage_change\":-1.629434954},{\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"current_price\":1.6145833333,\"yoy_price\":1.6298333333,\"absolute_change\":-0.01525,\"percentage_change\":-0.9356784947},{\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"current_price\":1.6018333333,\"yoy_price\":1.6595833333,\"absolute_change\":-0.05775,\"percentage_change\":-3.4797891037},{\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"current_price\":1.6029166667,\"yoy_price\":1.6579166667,\"absolute_change\":-0.055,\"percentage_change\":-3.3174164363},{\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"current_price\":1.56675,\"yoy_price\":1.6485,\"absolute_change\":-0.08175,\"percentage_change\":-4.9590536852},{\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"current_price\":1.5041666667,\"yoy_price\":1.6289166667,\"absolute_change\":-0.12475,\"percentage_change\":-7.6584642145},{\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"current_price\":1.44575,\"yoy_price\":1.60925,\"absolute_change\":-0.1635,\"percentage_change\":-10.1600124281},{\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"current_price\":1.4055,\"yoy_price\":1.6384166667,\"absolute_change\":-0.2329166667,\"percentage_change\":-14.215960531},{\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"current_price\":1.3616666667,\"yoy_price\":1.6444166667,\"absolute_change\":-0.28275,\"percentage_change\":-17.1945472052},{\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"current_price\":1.3309166667,\"yoy_price\":1.6425833333,\"absolute_change\":-0.3116666667,\"percentage_change\":-18.9741768556},{\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"current_price\":1.3013333333,\"yoy_price\":1.62675,\"absolute_change\":-0.3254166667,\"percentage_change\":-20.0040981507},{\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"current_price\":1.2753333333,\"yoy_price\":1.6224166667,\"absolute_change\":-0.3470833333,\"percentage_change\":-21.3929837177},{\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"current_price\":1.2565,\"yoy_price\":1.6113333333,\"absolute_change\":-0.3548333333,\"percentage_change\":-22.0211005379},{\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"current_price\":1.217,\"yoy_price\":1.6089166667,\"absolute_change\":-0.3919166667,\"percentage_change\":-24.3590407624},{\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"current_price\":1.19575,\"yoy_price\":1.58775,\"absolute_change\":-0.392,\"percentage_change\":-24.6890253503},{\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"current_price\":1.1815833333,\"yoy_price\":1.5559166667,\"absolute_change\":-0.3743333333,\"percentage_change\":-24.0587006588},{\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"current_price\":1.1470833333,\"yoy_price\":1.5295833333,\"absolute_change\":-0.3825,\"percentage_change\":-25.0068101335},{\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"current_price\":1.1550833333,\"yoy_price\":1.5176666667,\"absolute_change\":-0.3625833333,\"percentage_change\":-23.8908412036},{\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"current_price\":1.175,\"yoy_price\":1.5119166667,\"absolute_change\":-0.3369166667,\"percentage_change\":-22.2840765033},{\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"current_price\":1.1911666667,\"yoy_price\":1.5254166667,\"absolute_change\":-0.33425,\"percentage_change\":-21.9120458891},{\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"current_price\":1.1951666667,\"yoy_price\":1.5641666667,\"absolute_change\":-0.369,\"percentage_change\":-23.5908364411},{\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"current_price\":1.191,\"yoy_price\":1.562,\"absolute_change\":-0.371,\"percentage_change\":-23.7516005122},{\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"current_price\":1.18775,\"yoy_price\":1.551,\"absolute_change\":-0.36325,\"percentage_change\":-23.4203739523},{\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"current_price\":1.2014166667,\"yoy_price\":1.5389166667,\"absolute_change\":-0.3375,\"percentage_change\":-21.9310120756},{\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"current_price\":1.1946666667,\"yoy_price\":1.5669166667,\"absolute_change\":-0.37225,\"percentage_change\":-23.7568473116},{\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"current_price\":1.2049166667,\"yoy_price\":1.5478333333,\"absolute_change\":-0.3429166667,\"percentage_change\":-22.1546247443},{\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"current_price\":1.2063333333,\"yoy_price\":1.532,\"absolute_change\":-0.3256666667,\"percentage_change\":-21.2576153177},{\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"current_price\":1.23225,\"yoy_price\":1.5219166667,\"absolute_change\":-0.2896666667,\"percentage_change\":-19.0330175765},{\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"current_price\":1.3095,\"yoy_price\":1.5171666667,\"absolute_change\":-0.2076666667,\"percentage_change\":-13.6877952323},{\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"current_price\":1.37525,\"yoy_price\":1.5091666667,\"absolute_change\":-0.1339166667,\"percentage_change\":-8.8735505246},{\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"current_price\":1.4305,\"yoy_price\":1.50775,\"absolute_change\":-0.07725,\"percentage_change\":-5.1235284364},{\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"current_price\":1.4621666667,\"yoy_price\":1.543,\"absolute_change\":-0.0808333333,\"percentage_change\":-5.2387124649},{\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"current_price\":1.5031666667,\"yoy_price\":1.5984166667,\"absolute_change\":-0.09525,\"percentage_change\":-5.9590219488},{\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"current_price\":1.4981666667,\"yoy_price\":1.6590833333,\"absolute_change\":-0.1609166667,\"percentage_change\":-9.6991310463},{\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"current_price\":1.4981666667,\"yoy_price\":1.7113333333,\"absolute_change\":-0.2131666667,\"percentage_change\":-12.4561745228},{\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"current_price\":1.4885,\"yoy_price\":1.7231666667,\"absolute_change\":-0.2346666667,\"percentage_change\":-13.6183383306},{\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"current_price\":1.49,\"yoy_price\":1.7915,\"absolute_change\":-0.3015,\"percentage_change\":-16.8294725091},{\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"current_price\":1.4839166667,\"yoy_price\":1.8036666667,\"absolute_change\":-0.31975,\"percentage_change\":-17.7277767511},{\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"current_price\":1.4909166667,\"yoy_price\":1.7833333333,\"absolute_change\":-0.2924166667,\"percentage_change\":-16.3971962617},{\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"current_price\":1.4819166667,\"yoy_price\":1.7961666667,\"absolute_change\":-0.31425,\"percentage_change\":-17.4955924654},{\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"current_price\":1.4848333333,\"yoy_price\":1.7734166667,\"absolute_change\":-0.2885833333,\"percentage_change\":-16.2727315446},{\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"current_price\":1.47,\"yoy_price\":1.7493333333,\"absolute_change\":-0.2793333333,\"percentage_change\":-15.9679878049},{\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"current_price\":1.473,\"yoy_price\":1.709,\"absolute_change\":-0.236,\"percentage_change\":-13.8092451726},{\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"current_price\":1.47825,\"yoy_price\":1.6539166667,\"absolute_change\":-0.1756666667,\"percentage_change\":-10.6212525823},{\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"current_price\":1.4840833333,\"yoy_price\":1.594,\"absolute_change\":-0.1099166667,\"percentage_change\":-6.8956503555},{\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"current_price\":1.4753333333,\"yoy_price\":1.5575,\"absolute_change\":-0.0821666667,\"percentage_change\":-5.2755484216},{\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"current_price\":1.4848333333,\"yoy_price\":1.531,\"absolute_change\":-0.0461666667,\"percentage_change\":-3.0154583061},{\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"current_price\":1.4994166667,\"yoy_price\":1.509,\"absolute_change\":-0.0095833333,\"percentage_change\":-0.6350784184},{\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"current_price\":1.4964166667,\"yoy_price\":1.4925,\"absolute_change\":0.0039166667,\"percentage_change\":0.2624232272},{\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"current_price\":1.48975,\"yoy_price\":1.4800833333,\"absolute_change\":0.0096666667,\"percentage_change\":0.6531163786},{\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"current_price\":1.487,\"yoy_price\":1.48925,\"absolute_change\":-0.00225,\"percentage_change\":-0.1510827598},{\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"current_price\":1.4855833333,\"yoy_price\":1.5150833333,\"absolute_change\":-0.0295,\"percentage_change\":-1.9470876189},{\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"current_price\":1.49675,\"yoy_price\":1.5595833333,\"absolute_change\":-0.0628333333,\"percentage_change\":-4.0288538605},{\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"current_price\":1.489,\"yoy_price\":1.6145833333,\"absolute_change\":-0.1255833333,\"percentage_change\":-7.7780645161},{\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"current_price\":1.4896666667,\"yoy_price\":1.6018333333,\"absolute_change\":-0.1121666667,\"percentage_change\":-7.0023930912},{\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"current_price\":1.4935,\"yoy_price\":1.6029166667,\"absolute_change\":-0.1094166667,\"percentage_change\":-6.8260982584},{\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"current_price\":1.4884166667,\"yoy_price\":1.56675,\"absolute_change\":-0.0783333333,\"percentage_change\":-4.9997340567},{\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"current_price\":1.5038333333,\"yoy_price\":1.5041666667,\"absolute_change\":-0.0003333333,\"percentage_change\":-0.0221606648},{\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"current_price\":1.526,\"yoy_price\":1.44575,\"absolute_change\":0.08025,\"percentage_change\":5.5507522047},{\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"current_price\":1.5265,\"yoy_price\":1.4055,\"absolute_change\":0.121,\"percentage_change\":8.6090359303},{\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"current_price\":1.5418333333,\"yoy_price\":1.3616666667,\"absolute_change\":0.1801666667,\"percentage_change\":13.2313341493},{\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"current_price\":1.53,\"yoy_price\":1.3309166667,\"absolute_change\":0.1990833333,\"percentage_change\":14.9583620312},{\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"current_price\":1.5349166667,\"yoy_price\":1.3013333333,\"absolute_change\":0.2335833333,\"percentage_change\":17.9495389344},{\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"current_price\":1.5301666667,\"yoy_price\":1.2753333333,\"absolute_change\":0.2548333333,\"percentage_change\":19.9817041296},{\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"current_price\":1.5036666667,\"yoy_price\":1.2565,\"absolute_change\":0.2471666667,\"percentage_change\":19.671043905},{\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"current_price\":1.4781666667,\"yoy_price\":1.217,\"absolute_change\":0.2611666667,\"percentage_change\":21.4598740071},{\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"current_price\":1.4655833333,\"yoy_price\":1.19575,\"absolute_change\":0.2698333333,\"percentage_change\":22.5660324761},{\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"current_price\":1.46025,\"yoy_price\":1.1815833333,\"absolute_change\":0.2786666667,\"percentage_change\":23.5841737781},{\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"current_price\":1.462,\"yoy_price\":1.1470833333,\"absolute_change\":0.3149166667,\"percentage_change\":27.453686887},{\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"current_price\":1.49375,\"yoy_price\":1.1550833333,\"absolute_change\":0.3386666667,\"percentage_change\":29.3196739052},{\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"current_price\":1.5318333333,\"yoy_price\":1.175,\"absolute_change\":0.3568333333,\"percentage_change\":30.3687943262},{\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"current_price\":1.5385,\"yoy_price\":1.1911666667,\"absolute_change\":0.3473333333,\"percentage_change\":29.1590877291},{\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"current_price\":1.54725,\"yoy_price\":1.1951666667,\"absolute_change\":0.3520833333,\"percentage_change\":29.4589318087},{\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"current_price\":1.5548333333,\"yoy_price\":1.191,\"absolute_change\":0.3638333333,\"percentage_change\":30.5485586342},{\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"current_price\":1.5669166667,\"yoy_price\":1.18775,\"absolute_change\":0.3791666667,\"percentage_change\":31.9231039079},{\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"current_price\":1.6178333333,\"yoy_price\":1.2014166667,\"absolute_change\":0.4164166667,\"percentage_change\":34.6604702781},{\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"current_price\":1.6974166667,\"yoy_price\":1.1946666667,\"absolute_change\":0.50275,\"percentage_change\":42.0828683036},{\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"current_price\":1.75,\"yoy_price\":1.2049166667,\"absolute_change\":0.5450833333,\"percentage_change\":45.2382599073},{\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"current_price\":1.7515833333,\"yoy_price\":1.2063333333,\"absolute_change\":0.54525,\"percentage_change\":45.1989499862},{\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"current_price\":1.7805833333,\"yoy_price\":1.23225,\"absolute_change\":0.5483333333,\"percentage_change\":44.4985460202},{\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"current_price\":1.8073333333,\"yoy_price\":1.3095,\"absolute_change\":0.4978333333,\"percentage_change\":38.0170548555},{\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"current_price\":1.8255833333,\"yoy_price\":1.37525,\"absolute_change\":0.4503333333,\"percentage_change\":32.7455614131},{\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"current_price\":1.7935,\"yoy_price\":1.4305,\"absolute_change\":0.363,\"percentage_change\":25.3757427473},{\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"current_price\":1.7578333333,\"yoy_price\":1.4621666667,\"absolute_change\":0.2956666667,\"percentage_change\":20.2211330218},{\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"current_price\":1.739,\"yoy_price\":1.5031666667,\"absolute_change\":0.2358333333,\"percentage_change\":15.6891007872},{\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"current_price\":1.7065,\"yoy_price\":1.4981666667,\"absolute_change\":0.2083333333,\"percentage_change\":13.9058849705},{\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"current_price\":1.683,\"yoy_price\":1.4981666667,\"absolute_change\":0.1848333333,\"percentage_change\":12.3373011458},{\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"current_price\":1.6653333333,\"yoy_price\":1.4885,\"absolute_change\":0.1768333333,\"percentage_change\":11.8799686485},{\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"current_price\":1.6220833333,\"yoy_price\":1.49,\"absolute_change\":0.1320833333,\"percentage_change\":8.8646532438},{\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"current_price\":1.5969166667,\"yoy_price\":1.4839166667,\"absolute_change\":0.113,\"percentage_change\":7.6149828719},{\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"current_price\":1.597,\"yoy_price\":1.4909166667,\"absolute_change\":0.1060833333,\"percentage_change\":7.1153093734},{\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"current_price\":1.5835833333,\"yoy_price\":1.4819166667,\"absolute_change\":0.1016666667,\"percentage_change\":6.8604847326},{\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"current_price\":1.5686666667,\"yoy_price\":1.4848333333,\"absolute_change\":0.0838333333,\"percentage_change\":5.6459759793},{\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"current_price\":1.57975,\"yoy_price\":1.47,\"absolute_change\":0.10975,\"percentage_change\":7.4659863946},{\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"current_price\":1.6100833333,\"yoy_price\":1.473,\"absolute_change\":0.1370833333,\"percentage_change\":9.3064041638},{\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"current_price\":1.59225,\"yoy_price\":1.47825,\"absolute_change\":0.114,\"percentage_change\":7.7118214105},{\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"current_price\":1.5835833333,\"yoy_price\":1.4840833333,\"absolute_change\":0.0995,\"percentage_change\":6.7044752653},{\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"current_price\":1.5844166667,\"yoy_price\":1.4753333333,\"absolute_change\":0.1090833333,\"percentage_change\":7.3938093086},{\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"current_price\":1.6138333333,\"yoy_price\":1.4848333333,\"absolute_change\":0.129,\"percentage_change\":8.6878437535},{\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"current_price\":1.616,\"yoy_price\":1.4994166667,\"absolute_change\":0.1165833333,\"percentage_change\":7.775245929},{\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"current_price\":1.60775,\"yoy_price\":1.4964166667,\"absolute_change\":0.1113333333,\"percentage_change\":7.4399955449},{\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"current_price\":1.6225833333,\"yoy_price\":1.48975,\"absolute_change\":0.1328333333,\"percentage_change\":8.9164848688},{\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"current_price\":1.6566666667,\"yoy_price\":1.487,\"absolute_change\":0.1696666667,\"percentage_change\":11.4099977584},{\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"current_price\":1.7179166667,\"yoy_price\":1.4855833333,\"absolute_change\":0.2323333333,\"percentage_change\":15.6391989679},{\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"current_price\":1.8441666667,\"yoy_price\":1.49675,\"absolute_change\":0.3474166667,\"percentage_change\":23.2114024832},{\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"current_price\":1.8455,\"yoy_price\":1.489,\"absolute_change\":0.3565,\"percentage_change\":23.9422431162},{\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"current_price\":1.82,\"yoy_price\":1.4896666667,\"absolute_change\":0.3303333333,\"percentage_change\":22.1749832177},{\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"current_price\":1.79925,\"yoy_price\":1.4935,\"absolute_change\":0.30575,\"percentage_change\":20.4720455306},{\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"current_price\":1.749,\"yoy_price\":1.4884166667,\"absolute_change\":0.2605833333,\"percentage_change\":17.5074183976},{\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"current_price\":1.7005833333,\"yoy_price\":1.5038333333,\"absolute_change\":0.19675,\"percentage_change\":13.0832317411},{\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"current_price\":1.68025,\"yoy_price\":1.526,\"absolute_change\":0.15425,\"percentage_change\":10.1081258191},{\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"current_price\":1.6696666667,\"yoy_price\":1.5265,\"absolute_change\":0.1431666667,\"percentage_change\":9.378753139},{\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"current_price\":1.6673333333,\"yoy_price\":1.5418333333,\"absolute_change\":0.1255,\"percentage_change\":8.1396605772},{\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"current_price\":1.6398333333,\"yoy_price\":1.53,\"absolute_change\":0.1098333333,\"percentage_change\":7.1786492375},{\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"current_price\":1.6315833333,\"yoy_price\":1.5349166667,\"absolute_change\":0.0966666667,\"percentage_change\":6.297844617},{\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"current_price\":1.6018333333,\"yoy_price\":1.5301666667,\"absolute_change\":0.0716666667,\"percentage_change\":4.683585666},{\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"current_price\":1.5941666667,\"yoy_price\":1.5036666667,\"absolute_change\":0.0905,\"percentage_change\":6.0186211483},{\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"current_price\":1.60675,\"yoy_price\":1.4781666667,\"absolute_change\":0.1285833333,\"percentage_change\":8.6988386515},{\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"current_price\":1.5871666667,\"yoy_price\":1.4655833333,\"absolute_change\":0.1215833333,\"percentage_change\":8.295900381},{\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"current_price\":1.5726666667,\"yoy_price\":1.46025,\"absolute_change\":0.1124166667,\"percentage_change\":7.6984534612},{\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"current_price\":1.56125,\"yoy_price\":1.462,\"absolute_change\":0.09925,\"percentage_change\":6.7886456908},{\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"current_price\":1.5781666667,\"yoy_price\":1.49375,\"absolute_change\":0.0844166667,\"percentage_change\":5.6513249651},{\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"current_price\":1.5713333333,\"yoy_price\":1.5318333333,\"absolute_change\":0.0395,\"percentage_change\":2.5786095093},{\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"current_price\":1.5993333333,\"yoy_price\":1.5385,\"absolute_change\":0.0608333333,\"percentage_change\":3.954067815},{\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"current_price\":1.6494166667,\"yoy_price\":1.54725,\"absolute_change\":0.1021666667,\"percentage_change\":6.60311305},{\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"current_price\":1.6829166667,\"yoy_price\":1.5548333333,\"absolute_change\":0.1280833333,\"percentage_change\":8.2377532426},{\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"current_price\":1.711,\"yoy_price\":1.5669166667,\"absolute_change\":0.1440833333,\"percentage_change\":9.195341169},{\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"current_price\":1.7094166667,\"yoy_price\":1.6178333333,\"absolute_change\":0.0915833333,\"percentage_change\":5.6608632945},{\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"current_price\":1.7310833333,\"yoy_price\":1.6974166667,\"absolute_change\":0.0336666667,\"percentage_change\":1.9834061564},{\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"current_price\":1.74075,\"yoy_price\":1.75,\"absolute_change\":-0.00925,\"percentage_change\":-0.5285714286},{\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"current_price\":1.7856666667,\"yoy_price\":1.7515833333,\"absolute_change\":0.0340833333,\"percentage_change\":1.945858509},{\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"current_price\":1.8166666667,\"yoy_price\":1.7805833333,\"absolute_change\":0.0360833333,\"percentage_change\":2.0264894463},{\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"current_price\":1.8374166667,\"yoy_price\":1.8073333333,\"absolute_change\":0.0300833333,\"percentage_change\":1.6645149391},{\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"current_price\":1.8249166667,\"yoy_price\":1.8255833333,\"absolute_change\":-0.0006666667,\"percentage_change\":-0.0365180079},{\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"current_price\":1.8415,\"yoy_price\":1.7935,\"absolute_change\":0.048,\"percentage_change\":2.676331196},{\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"current_price\":1.8549166667,\"yoy_price\":1.7578333333,\"absolute_change\":0.0970833333,\"percentage_change\":5.5228975064},{\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"current_price\":1.8768333333,\"yoy_price\":1.739,\"absolute_change\":0.1378333333,\"percentage_change\":7.9260111175},{\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"current_price\":1.8833333333,\"yoy_price\":1.7065,\"absolute_change\":0.1768333333,\"percentage_change\":10.3623400723},{\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"current_price\":1.90625,\"yoy_price\":1.683,\"absolute_change\":0.22325,\"percentage_change\":13.2650029709},{\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"current_price\":1.9049166667,\"yoy_price\":1.6653333333,\"absolute_change\":0.2395833333,\"percentage_change\":14.3865092074},{\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"current_price\":1.93375,\"yoy_price\":1.6220833333,\"absolute_change\":0.3116666667,\"percentage_change\":19.2139737991},{\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"current_price\":2.0290833333,\"yoy_price\":1.5969166667,\"absolute_change\":0.4321666667,\"percentage_change\":27.0625684914},{\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"current_price\":2.1054166667,\"yoy_price\":1.597,\"absolute_change\":0.5084166667,\"percentage_change\":31.8357336673},{\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"current_price\":2.1555,\"yoy_price\":1.5835833333,\"absolute_change\":0.5719166667,\"percentage_change\":36.1153502079},{\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"current_price\":2.1475833333,\"yoy_price\":1.5686666667,\"absolute_change\":0.5789166667,\"percentage_change\":36.9050148746},{\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"current_price\":2.1325,\"yoy_price\":1.57975,\"absolute_change\":0.55275,\"percentage_change\":34.9897135623},{\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"current_price\":2.0908333333,\"yoy_price\":1.6100833333,\"absolute_change\":0.48075,\"percentage_change\":29.8587029657},{\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"current_price\":2.04575,\"yoy_price\":1.59225,\"absolute_change\":0.4535,\"percentage_change\":28.4817082745},{\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"current_price\":2.0275,\"yoy_price\":1.5835833333,\"absolute_change\":0.4439166667,\"percentage_change\":28.0324159343},{\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"current_price\":2.0013333333,\"yoy_price\":1.5844166667,\"absolute_change\":0.4169166667,\"percentage_change\":26.3135749224},{\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"current_price\":2.0170833333,\"yoy_price\":1.6138333333,\"absolute_change\":0.40325,\"percentage_change\":24.9870907777},{\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"current_price\":2.026,\"yoy_price\":1.616,\"absolute_change\":0.41,\"percentage_change\":25.3712871287},{\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"current_price\":2.004,\"yoy_price\":1.60775,\"absolute_change\":0.39625,\"percentage_change\":24.646244752},{\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"current_price\":1.9855,\"yoy_price\":1.6225833333,\"absolute_change\":0.3629166667,\"percentage_change\":22.3665964768},{\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"current_price\":1.974,\"yoy_price\":1.6566666667,\"absolute_change\":0.3173333333,\"percentage_change\":19.1549295775},{\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"current_price\":1.9690833333,\"yoy_price\":1.7179166667,\"absolute_change\":0.2511666667,\"percentage_change\":14.6204220228},{\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"current_price\":1.9764166667,\"yoy_price\":1.8441666667,\"absolute_change\":0.13225,\"percentage_change\":7.171260732},{\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"current_price\":1.9636666667,\"yoy_price\":1.8455,\"absolute_change\":0.1181666667,\"percentage_change\":6.4029621602},{\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"current_price\":1.9471666667,\"yoy_price\":1.82,\"absolute_change\":0.1271666667,\"percentage_change\":6.9871794872},{\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"current_price\":1.9415,\"yoy_price\":1.79925,\"absolute_change\":0.14225,\"percentage_change\":7.9060719744},{\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"current_price\":1.9576666667,\"yoy_price\":1.749,\"absolute_change\":0.2086666667,\"percentage_change\":11.930627025},{\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"current_price\":2.00625,\"yoy_price\":1.7005833333,\"absolute_change\":0.3056666667,\"percentage_change\":17.9742245308},{\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"current_price\":2.03225,\"yoy_price\":1.68025,\"absolute_change\":0.352,\"percentage_change\":20.9492635025},{\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"current_price\":2.09025,\"yoy_price\":1.6696666667,\"absolute_change\":0.4205833333,\"percentage_change\":25.1896586145},{\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"current_price\":2.135,\"yoy_price\":1.6673333333,\"absolute_change\":0.4676666667,\"percentage_change\":28.0487804878},{\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"current_price\":2.1330833333,\"yoy_price\":1.6398333333,\"absolute_change\":0.49325,\"percentage_change\":30.0792763492},{\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"current_price\":2.1336666667,\"yoy_price\":1.6315833333,\"absolute_change\":0.5020833333,\"percentage_change\":30.7727667399},{\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"current_price\":2.1045833333,\"yoy_price\":1.6018333333,\"absolute_change\":0.50275,\"percentage_change\":31.3859119759},{\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"current_price\":2.0746666667,\"yoy_price\":1.5941666667,\"absolute_change\":0.4805,\"percentage_change\":30.1411395714},{\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"current_price\":2.0511666667,\"yoy_price\":1.60675,\"absolute_change\":0.4444166667,\"percentage_change\":27.659353768},{\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"current_price\":2.04525,\"yoy_price\":1.5871666667,\"absolute_change\":0.4580833333,\"percentage_change\":28.8617032448},{\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"current_price\":2.0135833333,\"yoy_price\":1.5726666667,\"absolute_change\":0.4409166667,\"percentage_change\":28.0362441713},{\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"current_price\":1.95375,\"yoy_price\":1.56125,\"absolute_change\":0.3925,\"percentage_change\":25.1401120897},{\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"current_price\":1.918,\"yoy_price\":1.5781666667,\"absolute_change\":0.3398333333,\"percentage_change\":21.5334248601},{\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"current_price\":1.8945833333,\"yoy_price\":1.5713333333,\"absolute_change\":0.32325,\"percentage_change\":20.5717013152},{\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"current_price\":1.8795833333,\"yoy_price\":1.5993333333,\"absolute_change\":0.28025,\"percentage_change\":17.5229262193},{\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"current_price\":1.8873333333,\"yoy_price\":1.6494166667,\"absolute_change\":0.2379166667,\"percentage_change\":14.4242914162},{\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"current_price\":1.91075,\"yoy_price\":1.6829166667,\"absolute_change\":0.2278333333,\"percentage_change\":13.5380044565},{\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"current_price\":1.9419166667,\"yoy_price\":1.711,\"absolute_change\":0.2309166667,\"percentage_change\":13.4960062342},{\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"current_price\":1.999,\"yoy_price\":1.7094166667,\"absolute_change\":0.2895833333,\"percentage_change\":16.9404767708},{\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"current_price\":1.9995,\"yoy_price\":1.7310833333,\"absolute_change\":0.2684166667,\"percentage_change\":15.5057045203},{\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"current_price\":1.99025,\"yoy_price\":1.74075,\"absolute_change\":0.2495,\"percentage_change\":14.3329024846},{\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"current_price\":1.9981666667,\"yoy_price\":1.7856666667,\"absolute_change\":0.2125,\"percentage_change\":11.9003173418},{\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"current_price\":2.0178333333,\"yoy_price\":1.8166666667,\"absolute_change\":0.2011666667,\"percentage_change\":11.0733944954},{\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"current_price\":2.0865,\"yoy_price\":1.8374166667,\"absolute_change\":0.2490833333,\"percentage_change\":13.5561703479},{\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"current_price\":2.1434166667,\"yoy_price\":1.8249166667,\"absolute_change\":0.3185,\"percentage_change\":17.4528517284},{\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"current_price\":2.1928333333,\"yoy_price\":1.8415,\"absolute_change\":0.3513333333,\"percentage_change\":19.0786496516},{\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"current_price\":2.239,\"yoy_price\":1.8549166667,\"absolute_change\":0.3840833333,\"percentage_change\":20.7062311874},{\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"current_price\":2.3041666667,\"yoy_price\":1.8768333333,\"absolute_change\":0.4273333333,\"percentage_change\":22.7688482373},{\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"current_price\":2.3708333333,\"yoy_price\":1.8833333333,\"absolute_change\":0.4875,\"percentage_change\":25.8849557522},{\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"current_price\":2.3345833333,\"yoy_price\":1.90625,\"absolute_change\":0.4283333333,\"percentage_change\":22.4699453552},{\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"current_price\":2.3335,\"yoy_price\":1.9049166667,\"absolute_change\":0.4285833333,\"percentage_change\":22.4987969727},{\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"current_price\":2.3328333333,\"yoy_price\":1.93375,\"absolute_change\":0.3990833333,\"percentage_change\":20.637793579},{\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"current_price\":2.2903333333,\"yoy_price\":2.0290833333,\"absolute_change\":0.26125,\"percentage_change\":12.8752720851},{\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"current_price\":2.26375,\"yoy_price\":2.1054166667,\"absolute_change\":0.1583333333,\"percentage_change\":7.5202849792},{\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"current_price\":2.2278333333,\"yoy_price\":2.1555,\"absolute_change\":0.0723333333,\"percentage_change\":3.3557565917},{\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"current_price\":2.1991666667,\"yoy_price\":2.1475833333,\"absolute_change\":0.0515833333,\"percentage_change\":2.401924644},{\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"current_price\":2.21325,\"yoy_price\":2.1325,\"absolute_change\":0.08075,\"percentage_change\":3.7866354045},{\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"current_price\":2.2250833333,\"yoy_price\":2.0908333333,\"absolute_change\":0.13425,\"percentage_change\":6.4208848147},{\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"current_price\":2.2561666667,\"yoy_price\":2.04575,\"absolute_change\":0.2104166667,\"percentage_change\":10.2855513463},{\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"current_price\":2.3065,\"yoy_price\":2.0275,\"absolute_change\":0.279,\"percentage_change\":13.7607891492},{\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"current_price\":2.3208333333,\"yoy_price\":2.0013333333,\"absolute_change\":0.3195,\"percentage_change\":15.9643570953},{\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"current_price\":2.4215,\"yoy_price\":2.0170833333,\"absolute_change\":0.4044166667,\"percentage_change\":20.0495765338},{\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"current_price\":2.4158333333,\"yoy_price\":2.026,\"absolute_change\":0.3898333333,\"percentage_change\":19.241526818},{\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"current_price\":2.394,\"yoy_price\":2.004,\"absolute_change\":0.39,\"percentage_change\":19.4610778443},{\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"current_price\":2.3951666667,\"yoy_price\":1.9855,\"absolute_change\":0.4096666667,\"percentage_change\":20.632922018},{\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"current_price\":2.4658333333,\"yoy_price\":1.974,\"absolute_change\":0.4918333333,\"percentage_change\":24.9155690645},{\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"current_price\":2.6425,\"yoy_price\":1.9690833333,\"absolute_change\":0.6734166667,\"percentage_change\":34.1995006137},{\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"current_price\":2.7038333333,\"yoy_price\":1.9764166667,\"absolute_change\":0.7274166667,\"percentage_change\":36.8048235443},{\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"current_price\":2.7031666667,\"yoy_price\":1.9636666667,\"absolute_change\":0.7395,\"percentage_change\":37.6591410626},{\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"current_price\":3.17175,\"yoy_price\":1.9471666667,\"absolute_change\":1.2245833333,\"percentage_change\":62.890524694},{\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"current_price\":3.0609166667,\"yoy_price\":1.9415,\"absolute_change\":1.1194166667,\"percentage_change\":57.6573096403},{\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"current_price\":2.90075,\"yoy_price\":1.9576666667,\"absolute_change\":0.9430833333,\"percentage_change\":48.1738464158},{\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"current_price\":2.9080833333,\"yoy_price\":2.00625,\"absolute_change\":0.9018333333,\"percentage_change\":44.9511941848},{\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"current_price\":3.0210833333,\"yoy_price\":2.03225,\"absolute_change\":0.9888333333,\"percentage_change\":48.6570713905},{\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"current_price\":2.9484166667,\"yoy_price\":2.09025,\"absolute_change\":0.8581666667,\"percentage_change\":41.0556950923},{\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"current_price\":2.832,\"yoy_price\":2.135,\"absolute_change\":0.697,\"percentage_change\":32.6463700234},{\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"current_price\":2.71075,\"yoy_price\":2.1330833333,\"absolute_change\":0.5776666667,\"percentage_change\":27.0812985897},{\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"current_price\":2.5878333333,\"yoy_price\":2.1336666667,\"absolute_change\":0.4541666667,\"percentage_change\":21.2857366037},{\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"current_price\":2.4826666667,\"yoy_price\":2.1045833333,\"absolute_change\":0.3780833333,\"percentage_change\":17.9647594536},{\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"current_price\":2.39925,\"yoy_price\":2.0746666667,\"absolute_change\":0.3245833333,\"percentage_change\":15.6450835476},{\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"current_price\":2.3025833333,\"yoy_price\":2.0511666667,\"absolute_change\":0.2514166667,\"percentage_change\":12.2572519704},{\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"current_price\":2.2535833333,\"yoy_price\":2.04525,\"absolute_change\":0.2083333333,\"percentage_change\":10.1862038056},{\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"current_price\":2.24,\"yoy_price\":2.0135833333,\"absolute_change\":0.2264166667,\"percentage_change\":11.2444646774},{\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"current_price\":2.2729166667,\"yoy_price\":1.95375,\"absolute_change\":0.3191666667,\"percentage_change\":16.3361057795},{\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"current_price\":2.2985833333,\"yoy_price\":1.918,\"absolute_change\":0.3805833333,\"percentage_change\":19.8427181091},{\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"current_price\":2.2854166667,\"yoy_price\":1.8945833333,\"absolute_change\":0.3908333333,\"percentage_change\":20.6289861447},{\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"current_price\":2.32275,\"yoy_price\":1.8795833333,\"absolute_change\":0.4431666667,\"percentage_change\":23.5779206384},{\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"current_price\":2.4150833333,\"yoy_price\":1.8873333333,\"absolute_change\":0.52775,\"percentage_change\":27.9627340162},{\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"current_price\":2.4175,\"yoy_price\":1.91075,\"absolute_change\":0.50675,\"percentage_change\":26.5209996075},{\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"current_price\":2.4330833333,\"yoy_price\":1.9419166667,\"absolute_change\":0.4911666667,\"percentage_change\":25.292880745},{\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"current_price\":2.4538333333,\"yoy_price\":1.999,\"absolute_change\":0.4548333333,\"percentage_change\":22.7530431883},{\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"current_price\":2.4425,\"yoy_price\":1.9995,\"absolute_change\":0.443,\"percentage_change\":22.1555388847},{\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"current_price\":2.3883333333,\"yoy_price\":1.99025,\"absolute_change\":0.3980833333,\"percentage_change\":20.0016748315},{\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"current_price\":2.34125,\"yoy_price\":1.9981666667,\"absolute_change\":0.3430833333,\"percentage_change\":17.1699057469},{\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"current_price\":2.3454166667,\"yoy_price\":2.0178333333,\"absolute_change\":0.3275833333,\"percentage_change\":16.2344098455},{\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"current_price\":2.4161666667,\"yoy_price\":2.0865,\"absolute_change\":0.3296666667,\"percentage_change\":15.7999840243},{\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"current_price\":2.4521666667,\"yoy_price\":2.1434166667,\"absolute_change\":0.30875,\"percentage_change\":14.4045721395},{\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"current_price\":2.5919166667,\"yoy_price\":2.1928333333,\"absolute_change\":0.3990833333,\"percentage_change\":18.1994375618},{\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"current_price\":2.58975,\"yoy_price\":2.239,\"absolute_change\":0.35075,\"percentage_change\":15.6654756588},{\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"current_price\":2.679,\"yoy_price\":2.3041666667,\"absolute_change\":0.3748333333,\"percentage_change\":16.2676311031},{\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"current_price\":2.7751666667,\"yoy_price\":2.3708333333,\"absolute_change\":0.4043333333,\"percentage_change\":17.0544815466},{\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"current_price\":2.87575,\"yoy_price\":2.3345833333,\"absolute_change\":0.5411666667,\"percentage_change\":23.1804390505},{\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"current_price\":3.01425,\"yoy_price\":2.3335,\"absolute_change\":0.68075,\"percentage_change\":29.1729162203},{\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"current_price\":3.0286666667,\"yoy_price\":2.3328333333,\"absolute_change\":0.6958333333,\"percentage_change\":29.8278202472},{\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"current_price\":3.026,\"yoy_price\":2.2903333333,\"absolute_change\":0.7356666667,\"percentage_change\":32.1205064765},{\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"current_price\":3.0613333333,\"yoy_price\":2.26375,\"absolute_change\":0.7975833333,\"percentage_change\":35.2328363703},{\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"current_price\":3.0135833333,\"yoy_price\":2.2278333333,\"absolute_change\":0.78575,\"percentage_change\":35.2696940226},{\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"current_price\":2.98525,\"yoy_price\":2.1991666667,\"absolute_change\":0.7860833333,\"percentage_change\":35.7446002274},{\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"current_price\":3.0086666667,\"yoy_price\":2.21325,\"absolute_change\":0.7954166667,\"percentage_change\":35.9388531195},{\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"current_price\":3.0198333333,\"yoy_price\":2.2250833333,\"absolute_change\":0.79475,\"percentage_change\":35.7177633796},{\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"current_price\":2.9880833333,\"yoy_price\":2.2561666667,\"absolute_change\":0.7319166667,\"percentage_change\":32.4407180321},{\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"current_price\":2.9829166667,\"yoy_price\":2.3065,\"absolute_change\":0.6764166667,\"percentage_change\":29.326540935},{\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"current_price\":3.0421666667,\"yoy_price\":2.3208333333,\"absolute_change\":0.7213333333,\"percentage_change\":31.0807899461},{\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"current_price\":3.0805833333,\"yoy_price\":2.4215,\"absolute_change\":0.6590833333,\"percentage_change\":27.2179778374},{\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"current_price\":3.09625,\"yoy_price\":2.4158333333,\"absolute_change\":0.6804166667,\"percentage_change\":28.1648844429},{\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"current_price\":3.10925,\"yoy_price\":2.394,\"absolute_change\":0.71525,\"percentage_change\":29.8767752715},{\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"current_price\":3.1105833333,\"yoy_price\":2.3951666667,\"absolute_change\":0.7154166667,\"percentage_change\":29.8691809895},{\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"current_price\":3.1380833333,\"yoy_price\":2.4658333333,\"absolute_change\":0.67225,\"percentage_change\":27.2625887124},{\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"current_price\":3.1065833333,\"yoy_price\":2.6425,\"absolute_change\":0.4640833333,\"percentage_change\":17.5622831914},{\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"current_price\":3.0330833333,\"yoy_price\":2.7038333333,\"absolute_change\":0.32925,\"percentage_change\":12.1771558898},{\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"current_price\":2.9561666667,\"yoy_price\":2.7031666667,\"absolute_change\":0.253,\"percentage_change\":9.3593933041},{\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"current_price\":2.8425,\"yoy_price\":3.17175,\"absolute_change\":-0.32925,\"percentage_change\":-10.3807046583},{\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"current_price\":2.73825,\"yoy_price\":3.0609166667,\"absolute_change\":-0.3226666667,\"percentage_change\":-10.5415044513},{\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"current_price\":2.6185,\"yoy_price\":2.90075,\"absolute_change\":-0.28225,\"percentage_change\":-9.7302421787},{\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"current_price\":2.4983333333,\"yoy_price\":2.9080833333,\"absolute_change\":-0.40975,\"percentage_change\":-14.0900363928},{\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"current_price\":2.4245,\"yoy_price\":3.0210833333,\"absolute_change\":-0.5965833333,\"percentage_change\":-19.7473312553},{\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"current_price\":2.37075,\"yoy_price\":2.9484166667,\"absolute_change\":-0.5776666667,\"percentage_change\":-19.5924366185},{\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"current_price\":2.3316666667,\"yoy_price\":2.832,\"absolute_change\":-0.5003333333,\"percentage_change\":-17.6671374765},{\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"current_price\":2.3078333333,\"yoy_price\":2.71075,\"absolute_change\":-0.4029166667,\"percentage_change\":-14.8636601187},{\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"current_price\":2.3133333333,\"yoy_price\":2.5878333333,\"absolute_change\":-0.2745,\"percentage_change\":-10.6073291685},{\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"current_price\":2.2950833333,\"yoy_price\":2.4826666667,\"absolute_change\":-0.1875833333,\"percentage_change\":-7.5557196563},{\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"current_price\":2.3283333333,\"yoy_price\":2.39925,\"absolute_change\":-0.0709166667,\"percentage_change\":-2.9557847939},{\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"current_price\":2.3375833333,\"yoy_price\":2.3025833333,\"absolute_change\":0.035,\"percentage_change\":1.5200318483},{\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"current_price\":2.3456666667,\"yoy_price\":2.2535833333,\"absolute_change\":0.0920833333,\"percentage_change\":4.0860851237},{\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"current_price\":2.3929166667,\"yoy_price\":2.24,\"absolute_change\":0.1529166667,\"percentage_change\":6.8266369048},{\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"current_price\":2.39325,\"yoy_price\":2.2729166667,\"absolute_change\":0.1203333333,\"percentage_change\":5.2942254812},{\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"current_price\":2.4204166667,\"yoy_price\":2.2985833333,\"absolute_change\":0.1218333333,\"percentage_change\":5.3003661676},{\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"current_price\":2.4443333333,\"yoy_price\":2.2854166667,\"absolute_change\":0.1589166667,\"percentage_change\":6.9535095716},{\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"current_price\":2.4400833333,\"yoy_price\":2.32275,\"absolute_change\":0.1173333333,\"percentage_change\":5.0514835145},{\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"current_price\":2.4170833333,\"yoy_price\":2.4150833333,\"absolute_change\":0.002,\"percentage_change\":0.0828128774},{\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"current_price\":2.3470833333,\"yoy_price\":2.4175,\"absolute_change\":-0.0704166667,\"percentage_change\":-2.9127886936},{\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"current_price\":2.285,\"yoy_price\":2.4330833333,\"absolute_change\":-0.1480833333,\"percentage_change\":-6.0862417372},{\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"current_price\":2.2755,\"yoy_price\":2.4538333333,\"absolute_change\":-0.1783333333,\"percentage_change\":-7.2675405828},{\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"current_price\":2.296,\"yoy_price\":2.4425,\"absolute_change\":-0.1465,\"percentage_change\":-5.9979529171},{\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"current_price\":2.3460833333,\"yoy_price\":2.3883333333,\"absolute_change\":-0.04225,\"percentage_change\":-1.7690160502},{\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"current_price\":2.3995833333,\"yoy_price\":2.34125,\"absolute_change\":0.0583333333,\"percentage_change\":2.4915465385},{\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"current_price\":2.4864166667,\"yoy_price\":2.3454166667,\"absolute_change\":0.141,\"percentage_change\":6.0117249956},{\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"current_price\":2.6093333333,\"yoy_price\":2.4161666667,\"absolute_change\":0.1931666667,\"percentage_change\":7.994757536},{\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"current_price\":2.6698333333,\"yoy_price\":2.4521666667,\"absolute_change\":0.2176666667,\"percentage_change\":8.8765037722},{\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"current_price\":2.6906666667,\"yoy_price\":2.5919166667,\"absolute_change\":0.09875,\"percentage_change\":3.8099218725},{\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"current_price\":2.7228333333,\"yoy_price\":2.58975,\"absolute_change\":0.1330833333,\"percentage_change\":5.1388486662},{\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"current_price\":2.8213333333,\"yoy_price\":2.679,\"absolute_change\":0.1423333333,\"percentage_change\":5.3129277093},{\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"current_price\":2.9113333333,\"yoy_price\":2.7751666667,\"absolute_change\":0.1361666667,\"percentage_change\":4.9066122155},{\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"current_price\":2.9845833333,\"yoy_price\":2.87575,\"absolute_change\":0.1088333333,\"percentage_change\":3.7845199803},{\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"current_price\":2.9815833333,\"yoy_price\":3.01425,\"absolute_change\":-0.0326666667,\"percentage_change\":-1.0837411186},{\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"current_price\":3.0775833333,\"yoy_price\":3.0286666667,\"absolute_change\":0.0489166667,\"percentage_change\":1.615122166},{\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"current_price\":3.1566666667,\"yoy_price\":3.026,\"absolute_change\":0.1306666667,\"percentage_change\":4.3181317471},{\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"current_price\":3.1949166667,\"yoy_price\":3.0613333333,\"absolute_change\":0.1335833333,\"percentage_change\":4.3635670732},{\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"current_price\":3.2998333333,\"yoy_price\":3.0135833333,\"absolute_change\":0.28625,\"percentage_change\":9.4986588502},{\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"current_price\":3.2950833333,\"yoy_price\":2.98525,\"absolute_change\":0.3098333333,\"percentage_change\":10.3788069118},{\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"current_price\":3.2505,\"yoy_price\":3.0086666667,\"absolute_change\":0.2418333333,\"percentage_change\":8.0378905384},{\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"current_price\":3.17925,\"yoy_price\":3.0198333333,\"absolute_change\":0.1594166667,\"percentage_change\":5.2789889067},{\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"current_price\":3.1141666667,\"yoy_price\":2.9880833333,\"absolute_change\":0.1260833333,\"percentage_change\":4.2195387233},{\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"current_price\":3.0856666667,\"yoy_price\":2.9829166667,\"absolute_change\":0.10275,\"percentage_change\":3.4446151697},{\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"current_price\":3.0596666667,\"yoy_price\":3.0421666667,\"absolute_change\":0.0175,\"percentage_change\":0.5752479045},{\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"current_price\":3.0726666667,\"yoy_price\":3.0805833333,\"absolute_change\":-0.0079166667,\"percentage_change\":-0.2569859605},{\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"current_price\":3.1346666667,\"yoy_price\":3.09625,\"absolute_change\":0.0384166667,\"percentage_change\":1.2407482169},{\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"current_price\":3.0573333333,\"yoy_price\":3.10925,\"absolute_change\":-0.0519166667,\"percentage_change\":-1.6697488676},{\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"current_price\":2.9830833333,\"yoy_price\":3.1105833333,\"absolute_change\":-0.1275,\"percentage_change\":-4.0989096365},{\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"current_price\":2.9445,\"yoy_price\":3.1380833333,\"absolute_change\":-0.1935833333,\"percentage_change\":-6.1688397907},{\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"current_price\":2.8753333333,\"yoy_price\":3.1065833333,\"absolute_change\":-0.23125,\"percentage_change\":-7.4438692025},{\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"current_price\":2.8784166667,\"yoy_price\":3.0330833333,\"absolute_change\":-0.1546666667,\"percentage_change\":-5.0993213726},{\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"current_price\":2.8395833333,\"yoy_price\":2.9561666667,\"absolute_change\":-0.1165833333,\"percentage_change\":-3.9437334386},{\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"current_price\":2.8755833333,\"yoy_price\":2.8425,\"absolute_change\":0.0330833333,\"percentage_change\":1.1638815597},{\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"current_price\":2.8976666667,\"yoy_price\":2.73825,\"absolute_change\":0.1594166667,\"percentage_change\":5.8218448522},{\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"current_price\":2.8786666667,\"yoy_price\":2.6185,\"absolute_change\":0.2601666667,\"percentage_change\":9.9357138311},{\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"current_price\":2.9046666667,\"yoy_price\":2.4983333333,\"absolute_change\":0.4063333333,\"percentage_change\":16.2641761174},{\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"current_price\":2.8880833333,\"yoy_price\":2.4245,\"absolute_change\":0.4635833333,\"percentage_change\":19.120780917},{\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"current_price\":2.87325,\"yoy_price\":2.37075,\"absolute_change\":0.5025,\"percentage_change\":21.1958241063},{\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"current_price\":2.86825,\"yoy_price\":2.3316666667,\"absolute_change\":0.5365833333,\"percentage_change\":23.0128663331},{\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"current_price\":2.9268333333,\"yoy_price\":2.3078333333,\"absolute_change\":0.619,\"percentage_change\":26.8216942298},{\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"current_price\":2.97275,\"yoy_price\":2.3133333333,\"absolute_change\":0.6594166667,\"percentage_change\":28.5050432277},{\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"current_price\":3.1065,\"yoy_price\":2.2950833333,\"absolute_change\":0.8114166667,\"percentage_change\":35.354562289},{\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"current_price\":3.2076666667,\"yoy_price\":2.3283333333,\"absolute_change\":0.8793333333,\"percentage_change\":37.766642806},{\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"current_price\":3.2023333333,\"yoy_price\":2.3375833333,\"absolute_change\":0.86475,\"percentage_change\":36.993333571},{\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"current_price\":3.2025833333,\"yoy_price\":2.3456666667,\"absolute_change\":0.8569166667,\"percentage_change\":36.5319027995},{\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"current_price\":3.17275,\"yoy_price\":2.3929166667,\"absolute_change\":0.7798333333,\"percentage_change\":32.5892390737},{\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"current_price\":3.11825,\"yoy_price\":2.39325,\"absolute_change\":0.725,\"percentage_change\":30.2935338974},{\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"current_price\":3.1125,\"yoy_price\":2.4204166667,\"absolute_change\":0.6920833333,\"percentage_change\":28.5935617146},{\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"current_price\":3.0951666667,\"yoy_price\":2.4443333333,\"absolute_change\":0.6508333333,\"percentage_change\":26.6262102823},{\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"current_price\":3.1611666667,\"yoy_price\":2.4400833333,\"absolute_change\":0.7210833333,\"percentage_change\":29.5515863529},{\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"current_price\":3.214,\"yoy_price\":2.4170833333,\"absolute_change\":0.7969166667,\"percentage_change\":32.9701775556},{\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"current_price\":3.1775833333,\"yoy_price\":2.3470833333,\"absolute_change\":0.8305,\"percentage_change\":35.3843422688},{\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"current_price\":3.1298333333,\"yoy_price\":2.285,\"absolute_change\":0.8448333333,\"percentage_change\":36.9730123997},{\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"current_price\":3.0889166667,\"yoy_price\":2.2755,\"absolute_change\":0.8134166667,\"percentage_change\":35.7467223321},{\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"current_price\":3.08375,\"yoy_price\":2.296,\"absolute_change\":0.78775,\"percentage_change\":34.3096689895},{\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"current_price\":3.0645,\"yoy_price\":2.3460833333,\"absolute_change\":0.7184166667,\"percentage_change\":30.6219585835},{\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"current_price\":3.1416666667,\"yoy_price\":2.3995833333,\"absolute_change\":0.7420833333,\"percentage_change\":30.9255079007},{\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"current_price\":3.2320833333,\"yoy_price\":2.4864166667,\"absolute_change\":0.7456666667,\"percentage_change\":29.9896102155},{\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"current_price\":3.2688333333,\"yoy_price\":2.6093333333,\"absolute_change\":0.6595,\"percentage_change\":25.2746550843},{\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"current_price\":3.3283333333,\"yoy_price\":2.6698333333,\"absolute_change\":0.6585,\"percentage_change\":24.6644609526},{\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"current_price\":3.3881666667,\"yoy_price\":2.6906666667,\"absolute_change\":0.6975,\"percentage_change\":25.9229435084},{\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"current_price\":3.3705,\"yoy_price\":2.7228333333,\"absolute_change\":0.6476666667,\"percentage_change\":23.7864969089},{\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"current_price\":3.3976666667,\"yoy_price\":2.8213333333,\"absolute_change\":0.5763333333,\"percentage_change\":20.4276937618},{\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"current_price\":3.4386666667,\"yoy_price\":2.9113333333,\"absolute_change\":0.5273333333,\"percentage_change\":18.1131211358},{\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"current_price\":3.4974166667,\"yoy_price\":2.9845833333,\"absolute_change\":0.5128333333,\"percentage_change\":17.1827446601},{\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"current_price\":3.618,\"yoy_price\":2.9815833333,\"absolute_change\":0.6364166667,\"percentage_change\":21.3449229995},{\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"current_price\":3.7129166667,\"yoy_price\":3.0775833333,\"absolute_change\":0.6353333333,\"percentage_change\":20.6439034957},{\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"current_price\":3.72475,\"yoy_price\":3.1566666667,\"absolute_change\":0.5680833333,\"percentage_change\":17.9963041183},{\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"current_price\":3.8268333333,\"yoy_price\":3.1949166667,\"absolute_change\":0.6319166667,\"percentage_change\":19.7788153056},{\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"current_price\":3.8965,\"yoy_price\":3.2998333333,\"absolute_change\":0.5966666667,\"percentage_change\":18.0817212991},{\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"current_price\":4.0405833333,\"yoy_price\":3.2950833333,\"absolute_change\":0.7455,\"percentage_change\":22.6246174856},{\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"current_price\":4.0870833333,\"yoy_price\":3.2505,\"absolute_change\":0.8365833333,\"percentage_change\":25.7370660924},{\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"current_price\":4.1576666667,\"yoy_price\":3.17925,\"absolute_change\":0.9784166667,\"percentage_change\":30.7750779796},{\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"current_price\":4.2085,\"yoy_price\":3.1141666667,\"absolute_change\":1.0943333333,\"percentage_change\":35.1404870217},{\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"current_price\":4.2068333333,\"yoy_price\":3.0856666667,\"absolute_change\":1.1211666667,\"percentage_change\":36.3346656584},{\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"current_price\":4.2181666667,\"yoy_price\":3.0596666667,\"absolute_change\":1.1585,\"percentage_change\":37.8636016995},{\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"current_price\":4.2355833333,\"yoy_price\":3.0726666667,\"absolute_change\":1.1629166667,\"percentage_change\":37.8471468865},{\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"current_price\":4.2320833333,\"yoy_price\":3.1346666667,\"absolute_change\":1.0974166667,\"percentage_change\":35.0090387069},{\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"current_price\":4.1891666667,\"yoy_price\":3.0573333333,\"absolute_change\":1.1318333333,\"percentage_change\":37.0202791103},{\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"current_price\":4.0839166667,\"yoy_price\":2.9830833333,\"absolute_change\":1.1008333333,\"percentage_change\":36.9025337319},{\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"current_price\":4.0065833333,\"yoy_price\":2.9445,\"absolute_change\":1.0620833333,\"percentage_change\":36.0700741495},{\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"current_price\":3.9318333333,\"yoy_price\":2.8753333333,\"absolute_change\":1.0565,\"percentage_change\":36.7435659634},{\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"current_price\":3.8578333333,\"yoy_price\":2.8784166667,\"absolute_change\":0.9794166667,\"percentage_change\":34.026229698},{\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"current_price\":3.7986666667,\"yoy_price\":2.8395833333,\"absolute_change\":0.9590833333,\"percentage_change\":33.7754952311},{\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"current_price\":3.7900833333,\"yoy_price\":2.8755833333,\"absolute_change\":0.9145,\"percentage_change\":31.8022430232},{\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"current_price\":3.7563333333,\"yoy_price\":2.8976666667,\"absolute_change\":0.8586666667,\"percentage_change\":29.6330380766},{\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"current_price\":3.9248333333,\"yoy_price\":2.8786666667,\"absolute_change\":1.0461666667,\"percentage_change\":36.3420565076},{\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"current_price\":3.81875,\"yoy_price\":2.9046666667,\"absolute_change\":0.9140833333,\"percentage_change\":31.469474409},{\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"current_price\":3.73675,\"yoy_price\":2.8880833333,\"absolute_change\":0.8486666667,\"percentage_change\":29.3851170038},{\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"current_price\":3.598,\"yoy_price\":2.87325,\"absolute_change\":0.72475,\"percentage_change\":25.2240494214},{\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"current_price\":3.2870833333,\"yoy_price\":2.86825,\"absolute_change\":0.4188333333,\"percentage_change\":14.6023998373},{\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"current_price\":3.0535,\"yoy_price\":2.9268333333,\"absolute_change\":0.1266666667,\"percentage_change\":4.327771767},{\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"current_price\":2.801,\"yoy_price\":2.97275,\"absolute_change\":-0.17175,\"percentage_change\":-5.7774787655},{\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"current_price\":2.5434166667,\"yoy_price\":3.1065,\"absolute_change\":-0.5630833333,\"percentage_change\":-18.1259724234},{\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"current_price\":2.3621666667,\"yoy_price\":3.2076666667,\"absolute_change\":-0.8455,\"percentage_change\":-26.3587238907},{\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"current_price\":2.2063333333,\"yoy_price\":3.2023333333,\"absolute_change\":-0.996,\"percentage_change\":-31.1023212241},{\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"current_price\":2.0235,\"yoy_price\":3.2025833333,\"absolute_change\":-1.1790833333,\"percentage_change\":-36.8166324061},{\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"current_price\":1.9355833333,\"yoy_price\":3.17275,\"absolute_change\":-1.2371666667,\"percentage_change\":-38.9935124629},{\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"current_price\":1.8225833333,\"yoy_price\":3.11825,\"absolute_change\":-1.2956666667,\"percentage_change\":-41.5510836741},{\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"current_price\":1.7749166667,\"yoy_price\":3.1125,\"absolute_change\":-1.3375833333,\"percentage_change\":-42.9745649264},{\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"current_price\":1.7714166667,\"yoy_price\":3.0951666667,\"absolute_change\":-1.32375,\"percentage_change\":-42.768294653},{\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"current_price\":1.7331666667,\"yoy_price\":3.1611666667,\"absolute_change\":-1.428,\"percentage_change\":-45.1731955502},{\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"current_price\":1.7925,\"yoy_price\":3.214,\"absolute_change\":-1.4215,\"percentage_change\":-44.2283758556},{\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"current_price\":1.8889166667,\"yoy_price\":3.1775833333,\"absolute_change\":-1.2886666667,\"percentage_change\":-40.5549290603},{\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"current_price\":1.9520833333,\"yoy_price\":3.1298333333,\"absolute_change\":-1.17775,\"percentage_change\":-37.6297992438},{\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"current_price\":1.9475833333,\"yoy_price\":3.0889166667,\"absolute_change\":-1.1413333333,\"percentage_change\":-36.9493080098},{\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"current_price\":2.0001666667,\"yoy_price\":3.08375,\"absolute_change\":-1.0835833333,\"percentage_change\":-35.138494798},{\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"current_price\":2.0380833333,\"yoy_price\":3.0645,\"absolute_change\":-1.0264166667,\"percentage_change\":-33.4937727742},{\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"current_price\":2.0774166667,\"yoy_price\":3.1416666667,\"absolute_change\":-1.06425,\"percentage_change\":-33.875331565},{\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"current_price\":2.029,\"yoy_price\":3.2320833333,\"absolute_change\":-1.2030833333,\"percentage_change\":-37.2231532809},{\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"current_price\":2.04775,\"yoy_price\":3.2688333333,\"absolute_change\":-1.2210833333,\"percentage_change\":-37.3553255494},{\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"current_price\":2.0509166667,\"yoy_price\":3.3283333333,\"absolute_change\":-1.2774166667,\"percentage_change\":-38.3800701052},{\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"current_price\":2.0240833333,\"yoy_price\":3.3881666667,\"absolute_change\":-1.3640833333,\"percentage_change\":-40.260219391},{\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"current_price\":2.0690833333,\"yoy_price\":3.3705,\"absolute_change\":-1.3014166667,\"percentage_change\":-38.6119764624},{\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"current_price\":2.1516666667,\"yoy_price\":3.3976666667,\"absolute_change\":-1.246,\"percentage_change\":-36.6722260375},{\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"current_price\":2.14875,\"yoy_price\":3.4386666667,\"absolute_change\":-1.2899166667,\"percentage_change\":-37.5121170997},{\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"current_price\":2.1625833333,\"yoy_price\":3.4974166667,\"absolute_change\":-1.3348333333,\"percentage_change\":-38.166265577},{\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"current_price\":2.1716666667,\"yoy_price\":3.618,\"absolute_change\":-1.4463333333,\"percentage_change\":-39.9760456974},{\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"current_price\":2.1639166667,\"yoy_price\":3.7129166667,\"absolute_change\":-1.549,\"percentage_change\":-41.7192234317},{\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"current_price\":2.1895,\"yoy_price\":3.72475,\"absolute_change\":-1.53525,\"percentage_change\":-41.2175313779},{\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"current_price\":2.3448333333,\"yoy_price\":3.8268333333,\"absolute_change\":-1.482,\"percentage_change\":-38.7265363007},{\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"current_price\":2.418,\"yoy_price\":3.8965,\"absolute_change\":-1.4785,\"percentage_change\":-37.9443089953},{\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"current_price\":2.5395,\"yoy_price\":4.0405833333,\"absolute_change\":-1.5010833333,\"percentage_change\":-37.1501639615},{\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"current_price\":2.625,\"yoy_price\":4.0870833333,\"absolute_change\":-1.4620833333,\"percentage_change\":-35.7732694464},{\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"current_price\":2.727,\"yoy_price\":4.1576666667,\"absolute_change\":-1.4306666667,\"percentage_change\":-34.4103263048},{\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"current_price\":2.7804166667,\"yoy_price\":4.2085,\"absolute_change\":-1.4280833333,\"percentage_change\":-33.9333095719},{\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"current_price\":2.8056666667,\"yoy_price\":4.2068333333,\"absolute_change\":-1.4011666667,\"percentage_change\":-33.3069212789},{\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"current_price\":2.7625833333,\"yoy_price\":4.2181666667,\"absolute_change\":-1.4555833333,\"percentage_change\":-34.5074874551},{\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"current_price\":2.7340833333,\"yoy_price\":4.2355833333,\"absolute_change\":-1.5015,\"percentage_change\":-35.4496625809},{\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"current_price\":2.6543333333,\"yoy_price\":4.2320833333,\"absolute_change\":-1.57775,\"percentage_change\":-37.280693118},{\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"current_price\":2.5905833333,\"yoy_price\":4.1891666667,\"absolute_change\":-1.5985833333,\"percentage_change\":-38.1599363437},{\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"current_price\":2.6231666667,\"yoy_price\":4.0839166667,\"absolute_change\":-1.46075,\"percentage_change\":-35.7683596221},{\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"current_price\":2.6755833333,\"yoy_price\":4.0065833333,\"absolute_change\":-1.331,\"percentage_change\":-33.220324882},{\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"current_price\":2.76725,\"yoy_price\":3.9318333333,\"absolute_change\":-1.1645833333,\"percentage_change\":-29.6193463609},{\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"current_price\":2.7614166667,\"yoy_price\":3.8578333333,\"absolute_change\":-1.0964166667,\"percentage_change\":-28.4205296583},{\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"current_price\":2.75225,\"yoy_price\":3.7986666667,\"absolute_change\":-1.0464166667,\"percentage_change\":-27.5469462969},{\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"current_price\":2.7399166667,\"yoy_price\":3.7900833333,\"absolute_change\":-1.0501666667,\"percentage_change\":-27.7082737847},{\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"current_price\":2.7181666667,\"yoy_price\":3.7563333333,\"absolute_change\":-1.0381666667,\"percentage_change\":-27.6377673263},{\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"current_price\":2.7104166667,\"yoy_price\":3.9248333333,\"absolute_change\":-1.2144166667,\"percentage_change\":-30.9418658966},{\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"current_price\":2.6855833333,\"yoy_price\":3.81875,\"absolute_change\":-1.1331666667,\"percentage_change\":-29.6737588652},{\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"current_price\":2.6331666667,\"yoy_price\":3.73675,\"absolute_change\":-1.1035833333,\"percentage_change\":-29.5332396691},{\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"current_price\":2.6019166667,\"yoy_price\":3.598,\"absolute_change\":-0.9960833333,\"percentage_change\":-27.6843616824},{\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"current_price\":2.6148333333,\"yoy_price\":3.2870833333,\"absolute_change\":-0.67225,\"percentage_change\":-20.4512612498},{\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"current_price\":2.6908333333,\"yoy_price\":3.0535,\"absolute_change\":-0.3626666667,\"percentage_change\":-11.8770809454},{\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"current_price\":2.7878333333,\"yoy_price\":2.801,\"absolute_change\":-0.0131666667,\"percentage_change\":-0.470070213},{\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"current_price\":2.80825,\"yoy_price\":2.5434166667,\"absolute_change\":0.2648333333,\"percentage_change\":10.4125028669},{\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"current_price\":2.78425,\"yoy_price\":2.3621666667,\"absolute_change\":0.4220833333,\"percentage_change\":17.8684823255},{\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"current_price\":2.7516666667,\"yoy_price\":2.2063333333,\"absolute_change\":0.5453333333,\"percentage_change\":24.7167245808},{\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"current_price\":2.7580833333,\"yoy_price\":2.0235,\"absolute_change\":0.7345833333,\"percentage_change\":36.3026109876},{\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"current_price\":2.74875,\"yoy_price\":1.9355833333,\"absolute_change\":0.8131666667,\"percentage_change\":42.0114521893},{\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"current_price\":2.7535833333,\"yoy_price\":1.8225833333,\"absolute_change\":0.931,\"percentage_change\":51.081340588},{\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"current_price\":2.72225,\"yoy_price\":1.7749166667,\"absolute_change\":0.9473333333,\"percentage_change\":53.3733978121},{\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"current_price\":2.7128333333,\"yoy_price\":1.7714166667,\"absolute_change\":0.9414166667,\"percentage_change\":53.1448464035},{\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"current_price\":2.7283333333,\"yoy_price\":1.7331666667,\"absolute_change\":0.9951666667,\"percentage_change\":57.4189825945},{\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"current_price\":2.7819166667,\"yoy_price\":1.7925,\"absolute_change\":0.9894166667,\"percentage_change\":55.1975825198},{\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"current_price\":2.8648333333,\"yoy_price\":1.8889166667,\"absolute_change\":0.9759166667,\"percentage_change\":51.665416685},{\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"current_price\":2.8563333333,\"yoy_price\":1.9520833333,\"absolute_change\":0.90425,\"percentage_change\":46.3223052295},{\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"current_price\":2.8261666667,\"yoy_price\":1.9475833333,\"absolute_change\":0.8785833333,\"percentage_change\":45.1114629241},{\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"current_price\":2.784,\"yoy_price\":2.0001666667,\"absolute_change\":0.7838333333,\"percentage_change\":39.1884009666},{\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"current_price\":2.7740833333,\"yoy_price\":2.0380833333,\"absolute_change\":0.736,\"percentage_change\":36.1123604694},{\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"current_price\":2.7338333333,\"yoy_price\":2.0774166667,\"absolute_change\":0.6564166667,\"percentage_change\":31.5977375747},{\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"current_price\":2.7724166667,\"yoy_price\":2.029,\"absolute_change\":0.7434166667,\"percentage_change\":36.6395597174},{\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"current_price\":2.8181666667,\"yoy_price\":2.04775,\"absolute_change\":0.7704166667,\"percentage_change\":37.6225939039},{\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"current_price\":2.864,\"yoy_price\":2.0509166667,\"absolute_change\":0.8130833333,\"percentage_change\":39.6448742432},{\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"current_price\":2.8996666667,\"yoy_price\":2.0240833333,\"absolute_change\":0.8755833333,\"percentage_change\":43.2582650583},{\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"current_price\":2.92825,\"yoy_price\":2.0690833333,\"absolute_change\":0.8591666667,\"percentage_change\":41.5240243264},{\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"current_price\":2.91175,\"yoy_price\":2.1516666667,\"absolute_change\":0.7600833333,\"percentage_change\":35.3253292022},{\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"current_price\":2.93575,\"yoy_price\":2.14875,\"absolute_change\":0.787,\"percentage_change\":36.625945317},{\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"current_price\":2.9665833333,\"yoy_price\":2.1625833333,\"absolute_change\":0.804,\"percentage_change\":37.1777580825},{\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"current_price\":2.9691666667,\"yoy_price\":2.1716666667,\"absolute_change\":0.7975,\"percentage_change\":36.7229470453},{\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"current_price\":2.9620833333,\"yoy_price\":2.1639166667,\"absolute_change\":0.7981666667,\"percentage_change\":36.8852774676},{\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"current_price\":3.0093333333,\"yoy_price\":2.1895,\"absolute_change\":0.8198333333,\"percentage_change\":37.443860851},{\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"current_price\":3.0193333333,\"yoy_price\":2.3448333333,\"absolute_change\":0.6745,\"percentage_change\":28.7653706731},{\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"current_price\":2.983,\"yoy_price\":2.418,\"absolute_change\":0.565,\"percentage_change\":23.3664185277},{\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"current_price\":2.9106666667,\"yoy_price\":2.5395,\"absolute_change\":0.3711666667,\"percentage_change\":14.6157380062},{\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"current_price\":2.85425,\"yoy_price\":2.625,\"absolute_change\":0.22925,\"percentage_change\":8.7333333333},{\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"current_price\":2.8503333333,\"yoy_price\":2.727,\"absolute_change\":0.1233333333,\"percentage_change\":4.5226744897},{\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"current_price\":2.8255,\"yoy_price\":2.7804166667,\"absolute_change\":0.0450833333,\"percentage_change\":1.6214596134},{\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"current_price\":2.8619166667,\"yoy_price\":2.8056666667,\"absolute_change\":0.05625,\"percentage_change\":2.0048710942},{\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"current_price\":2.87475,\"yoy_price\":2.7625833333,\"absolute_change\":0.1121666667,\"percentage_change\":4.0602093451},{\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"current_price\":2.8473333333,\"yoy_price\":2.7340833333,\"absolute_change\":0.11325,\"percentage_change\":4.1421561157},{\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"current_price\":2.84,\"yoy_price\":2.6543333333,\"absolute_change\":0.1856666667,\"percentage_change\":6.9948511867},{\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"current_price\":2.8430833333,\"yoy_price\":2.5905833333,\"absolute_change\":0.2525,\"percentage_change\":9.7468395149},{\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"current_price\":2.8665,\"yoy_price\":2.6231666667,\"absolute_change\":0.2433333333,\"percentage_change\":9.2763199695},{\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"current_price\":2.8558333333,\"yoy_price\":2.6755833333,\"absolute_change\":0.18025,\"percentage_change\":6.7368486623},{\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"current_price\":2.8999166667,\"yoy_price\":2.76725,\"absolute_change\":0.1326666667,\"percentage_change\":4.7941699039},{\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"current_price\":2.86625,\"yoy_price\":2.7614166667,\"absolute_change\":0.1048333333,\"percentage_change\":3.7963605637},{\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"current_price\":2.8288333333,\"yoy_price\":2.75225,\"absolute_change\":0.0765833333,\"percentage_change\":2.7825718352},{\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"current_price\":2.8029166667,\"yoy_price\":2.7399166667,\"absolute_change\":0.063,\"percentage_change\":2.2993400043},{\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"current_price\":2.7980833333,\"yoy_price\":2.7181666667,\"absolute_change\":0.0799166667,\"percentage_change\":2.9400944264},{\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"current_price\":2.8306666667,\"yoy_price\":2.7104166667,\"absolute_change\":0.12025,\"percentage_change\":4.4365872406},{\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"current_price\":2.83275,\"yoy_price\":2.6855833333,\"absolute_change\":0.1471666667,\"percentage_change\":5.4798771217},{\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"current_price\":2.8078333333,\"yoy_price\":2.6331666667,\"absolute_change\":0.1746666667,\"percentage_change\":6.6333312235},{\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"current_price\":2.8433333333,\"yoy_price\":2.6019166667,\"absolute_change\":0.2414166667,\"percentage_change\":9.2784165519},{\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"current_price\":2.92875,\"yoy_price\":2.6148333333,\"absolute_change\":0.3139166667,\"percentage_change\":12.0052265919},{\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"current_price\":2.9503333333,\"yoy_price\":2.6908333333,\"absolute_change\":0.2595,\"percentage_change\":9.6438525859},{\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"current_price\":2.9365,\"yoy_price\":2.7878333333,\"absolute_change\":0.1486666667,\"percentage_change\":5.3326956418},{\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"current_price\":2.9285833333,\"yoy_price\":2.80825,\"absolute_change\":0.1203333333,\"percentage_change\":4.28499362},{\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"current_price\":2.9778333333,\"yoy_price\":2.78425,\"absolute_change\":0.1935833333,\"percentage_change\":6.9527999761},{\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"current_price\":3.0080833333,\"yoy_price\":2.7516666667,\"absolute_change\":0.2564166667,\"percentage_change\":9.318594791},{\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"current_price\":3,\"yoy_price\":2.7580833333,\"absolute_change\":0.2419166667,\"percentage_change\":8.7711877209},{\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"current_price\":2.9825833333,\"yoy_price\":2.74875,\"absolute_change\":0.2338333333,\"percentage_change\":8.5068970744},{\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"current_price\":3.0786666667,\"yoy_price\":2.7535833333,\"absolute_change\":0.3250833333,\"percentage_change\":11.8058287686},{\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"current_price\":3.1004166667,\"yoy_price\":2.72225,\"absolute_change\":0.3781666667,\"percentage_change\":13.8916949827},{\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"current_price\":3.10525,\"yoy_price\":2.7128333333,\"absolute_change\":0.3924166667,\"percentage_change\":14.4651962892},{\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"current_price\":3.1688333333,\"yoy_price\":2.7283333333,\"absolute_change\":0.4405,\"percentage_change\":16.1453879047},{\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"current_price\":3.1865,\"yoy_price\":2.7819166667,\"absolute_change\":0.4045833333,\"percentage_change\":14.5433304376},{\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"current_price\":3.2041666667,\"yoy_price\":2.8648333333,\"absolute_change\":0.3393333333,\"percentage_change\":11.8447844552},{\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"current_price\":3.2201666667,\"yoy_price\":2.8563333333,\"absolute_change\":0.3638333333,\"percentage_change\":12.7377757031},{\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"current_price\":3.2259166667,\"yoy_price\":2.8261666667,\"absolute_change\":0.39975,\"percentage_change\":14.1446010497},{\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"current_price\":3.2195,\"yoy_price\":2.784,\"absolute_change\":0.4355,\"percentage_change\":15.6429597701},{\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"current_price\":3.2478333333,\"yoy_price\":2.7740833333,\"absolute_change\":0.47375,\"percentage_change\":17.0777133588},{\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"current_price\":3.2588333333,\"yoy_price\":2.7338333333,\"absolute_change\":0.525,\"percentage_change\":19.2038041822},{\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"current_price\":3.3095,\"yoy_price\":2.7724166667,\"absolute_change\":0.5370833333,\"percentage_change\":19.3723887102},{\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"current_price\":3.4985833333,\"yoy_price\":2.8181666667,\"absolute_change\":0.6804166667,\"percentage_change\":24.1439470105},{\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"current_price\":3.6375833333,\"yoy_price\":2.864,\"absolute_change\":0.7735833333,\"percentage_change\":27.0105912477},{\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"current_price\":3.6886666667,\"yoy_price\":2.8996666667,\"absolute_change\":0.789,\"percentage_change\":27.2100241407},{\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"current_price\":3.6863333333,\"yoy_price\":2.92825,\"absolute_change\":0.7580833333,\"percentage_change\":25.8886137909},{\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"current_price\":3.7195,\"yoy_price\":2.91175,\"absolute_change\":0.80775,\"percentage_change\":27.7410491972},{\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"current_price\":3.8025,\"yoy_price\":2.93575,\"absolute_change\":0.86675,\"percentage_change\":29.5239717278},{\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"current_price\":3.909,\"yoy_price\":2.9665833333,\"absolute_change\":0.9424166667,\"percentage_change\":31.767746285},{\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"current_price\":3.9649166667,\"yoy_price\":2.9691666667,\"absolute_change\":0.99575,\"percentage_change\":33.536345776},{\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"current_price\":4.002,\"yoy_price\":2.9620833333,\"absolute_change\":1.0399166667,\"percentage_change\":35.1076100717},{\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"current_price\":4.0819166667,\"yoy_price\":3.0093333333,\"absolute_change\":1.0725833333,\"percentage_change\":35.6418918919},{\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"current_price\":4.08775,\"yoy_price\":3.0193333333,\"absolute_change\":1.0684166667,\"percentage_change\":35.3858467653},{\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"current_price\":4.0836666667,\"yoy_price\":2.983,\"absolute_change\":1.1006666667,\"percentage_change\":36.8979774276},{\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"current_price\":3.9784166667,\"yoy_price\":2.9106666667,\"absolute_change\":1.06775,\"percentage_change\":36.6840357306},{\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"current_price\":3.91875,\"yoy_price\":2.85425,\"absolute_change\":1.0645,\"percentage_change\":37.2952614522},{\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"current_price\":3.8975,\"yoy_price\":2.8503333333,\"absolute_change\":1.0471666667,\"percentage_change\":36.7383931704},{\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"current_price\":3.8353333333,\"yoy_price\":2.8255,\"absolute_change\":1.0098333333,\"percentage_change\":35.7399870229},{\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"current_price\":3.7805833333,\"yoy_price\":2.8619166667,\"absolute_change\":0.9186666667,\"percentage_change\":32.0997000844},{\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"current_price\":3.7065833333,\"yoy_price\":2.87475,\"absolute_change\":0.8318333333,\"percentage_change\":28.9358494942},{\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"current_price\":3.7025,\"yoy_price\":2.8473333333,\"absolute_change\":0.8551666667,\"percentage_change\":30.0339498946},{\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"current_price\":3.7580833333,\"yoy_price\":2.84,\"absolute_change\":0.9180833333,\"percentage_change\":32.3268779343},{\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"current_price\":3.7989166667,\"yoy_price\":2.8430833333,\"absolute_change\":0.9558333333,\"percentage_change\":33.6196031304},{\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"current_price\":3.8170833333,\"yoy_price\":2.8665,\"absolute_change\":0.9505833333,\"percentage_change\":33.1618117332},{\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"current_price\":3.8271666667,\"yoy_price\":2.8558333333,\"absolute_change\":0.9713333333,\"percentage_change\":34.0122556172},{\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"current_price\":3.79175,\"yoy_price\":2.8999166667,\"absolute_change\":0.8918333333,\"percentage_change\":30.7537572919},{\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"current_price\":3.7258333333,\"yoy_price\":2.86625,\"absolute_change\":0.8595833333,\"percentage_change\":29.9898241023},{\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"current_price\":3.70175,\"yoy_price\":2.8288333333,\"absolute_change\":0.8729166667,\"percentage_change\":30.8578330289},{\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"current_price\":3.7428333333,\"yoy_price\":2.8029166667,\"absolute_change\":0.9399166667,\"percentage_change\":33.5335216293},{\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"current_price\":3.7889166667,\"yoy_price\":2.7980833333,\"absolute_change\":0.9908333333,\"percentage_change\":35.4111445335},{\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"current_price\":3.7779166667,\"yoy_price\":2.8306666667,\"absolute_change\":0.94725,\"percentage_change\":33.4638483278},{\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"current_price\":3.7255,\"yoy_price\":2.83275,\"absolute_change\":0.89275,\"percentage_change\":31.515311976},{\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"current_price\":3.6406666667,\"yoy_price\":2.8078333333,\"absolute_change\":0.8328333333,\"percentage_change\":29.6610672523},{\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"current_price\":3.5676666667,\"yoy_price\":2.8433333333,\"absolute_change\":0.7243333333,\"percentage_change\":25.4747948417},{\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"current_price\":3.5489166667,\"yoy_price\":2.92875,\"absolute_change\":0.6201666667,\"percentage_change\":21.1751315977},{\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"current_price\":3.6025,\"yoy_price\":2.9503333333,\"absolute_change\":0.6521666667,\"percentage_change\":22.10484691},{\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"current_price\":3.5915,\"yoy_price\":2.9365,\"absolute_change\":0.655,\"percentage_change\":22.3054656904},{\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"current_price\":3.5828333333,\"yoy_price\":2.9285833333,\"absolute_change\":0.65425,\"percentage_change\":22.3401530888},{\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"current_price\":3.5561666667,\"yoy_price\":2.9778333333,\"absolute_change\":0.5783333333,\"percentage_change\":19.4212794537},{\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"current_price\":3.56775,\"yoy_price\":3.0080833333,\"absolute_change\":0.5596666667,\"percentage_change\":18.6054242735},{\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"current_price\":3.5034166667,\"yoy_price\":3,\"absolute_change\":0.5034166667,\"percentage_change\":16.7805555556},{\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"current_price\":3.447,\"yoy_price\":2.9825833333,\"absolute_change\":0.4644166667,\"percentage_change\":15.5709535917},{\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"current_price\":3.4248333333,\"yoy_price\":3.0786666667,\"absolute_change\":0.3461666667,\"percentage_change\":11.2440450411},{\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"current_price\":3.4170833333,\"yoy_price\":3.1004166667,\"absolute_change\":0.3166666667,\"percentage_change\":10.2136809569},{\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"current_price\":3.3644166667,\"yoy_price\":3.10525,\"absolute_change\":0.2591666667,\"percentage_change\":8.3460805625},{\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"current_price\":3.3875,\"yoy_price\":3.1688333333,\"absolute_change\":0.2186666667,\"percentage_change\":6.9005417346},{\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"current_price\":3.429,\"yoy_price\":3.1865,\"absolute_change\":0.2425,\"percentage_change\":7.6102306606},{\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"current_price\":3.513,\"yoy_price\":3.2041666667,\"absolute_change\":0.3088333333,\"percentage_change\":9.6384915475},{\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"current_price\":3.52275,\"yoy_price\":3.2201666667,\"absolute_change\":0.3025833333,\"percentage_change\":9.3965115677},{\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"current_price\":3.5246666667,\"yoy_price\":3.2259166667,\"absolute_change\":0.29875,\"percentage_change\":9.2609335848},{\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"current_price\":3.5743333333,\"yoy_price\":3.2195,\"absolute_change\":0.3548333333,\"percentage_change\":11.0213801315},{\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"current_price\":3.61375,\"yoy_price\":3.2478333333,\"absolute_change\":0.3659166667,\"percentage_change\":11.2664853492},{\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"current_price\":3.6596666667,\"yoy_price\":3.2588333333,\"absolute_change\":0.4008333333,\"percentage_change\":12.2999028282},{\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"current_price\":3.732,\"yoy_price\":3.3095,\"absolute_change\":0.4225,\"percentage_change\":12.7662788941},{\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"current_price\":3.8614166667,\"yoy_price\":3.4985833333,\"absolute_change\":0.3628333333,\"percentage_change\":10.3708643975},{\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"current_price\":3.9273333333,\"yoy_price\":3.6375833333,\"absolute_change\":0.28975,\"percentage_change\":7.9654532542},{\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"current_price\":3.964,\"yoy_price\":3.6886666667,\"absolute_change\":0.2753333333,\"percentage_change\":7.4643050786},{\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"current_price\":4.0018333333,\"yoy_price\":3.6863333333,\"absolute_change\":0.3155,\"percentage_change\":8.5586400217},{\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"current_price\":4.0504166667,\"yoy_price\":3.7195,\"absolute_change\":0.3309166667,\"percentage_change\":8.8968051261},{\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"current_price\":4.0706666667,\"yoy_price\":3.8025,\"absolute_change\":0.2681666667,\"percentage_change\":7.0523778216},{\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"current_price\":4.07175,\"yoy_price\":3.909,\"absolute_change\":0.16275,\"percentage_change\":4.1634689179},{\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"current_price\":4.0521666667,\"yoy_price\":3.9649166667,\"absolute_change\":0.08725,\"percentage_change\":2.2005506631},{\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"current_price\":4.0058333333,\"yoy_price\":4.002,\"absolute_change\":0.0038333333,\"percentage_change\":0.0957854406},{\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"current_price\":3.9668333333,\"yoy_price\":4.0819166667,\"absolute_change\":-0.1150833333,\"percentage_change\":-2.8193454872},{\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"current_price\":3.92975,\"yoy_price\":4.08775,\"absolute_change\":-0.158,\"percentage_change\":-3.865207021},{\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"current_price\":3.905,\"yoy_price\":4.0836666667,\"absolute_change\":-0.1786666667,\"percentage_change\":-4.3751530487},{\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"current_price\":3.8615,\"yoy_price\":3.9784166667,\"absolute_change\":-0.1169166667,\"percentage_change\":-2.9387738003},{\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"current_price\":3.8170833333,\"yoy_price\":3.91875,\"absolute_change\":-0.1016666667,\"percentage_change\":-2.5943646996},{\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"current_price\":3.7609166667,\"yoy_price\":3.8975,\"absolute_change\":-0.1365833333,\"percentage_change\":-3.5043831516},{\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"current_price\":3.7135833333,\"yoy_price\":3.8353333333,\"absolute_change\":-0.12175,\"percentage_change\":-3.1744307318},{\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"current_price\":3.6640833333,\"yoy_price\":3.7805833333,\"absolute_change\":-0.1165,\"percentage_change\":-3.0815350365},{\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"current_price\":3.5713333333,\"yoy_price\":3.7065833333,\"absolute_change\":-0.13525,\"percentage_change\":-3.6489129702},{\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"current_price\":3.4944166667,\"yoy_price\":3.7025,\"absolute_change\":-0.2080833333,\"percentage_change\":-5.6200765249},{\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"current_price\":3.5433333333,\"yoy_price\":3.7580833333,\"absolute_change\":-0.21475,\"percentage_change\":-5.7143490698},{\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"current_price\":3.5616666667,\"yoy_price\":3.7989166667,\"absolute_change\":-0.23725,\"percentage_change\":-6.2452014829},{\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"current_price\":3.6311666667,\"yoy_price\":3.8170833333,\"absolute_change\":-0.1859166667,\"percentage_change\":-4.8706473092},{\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"current_price\":3.6438333333,\"yoy_price\":3.8271666667,\"absolute_change\":-0.1833333333,\"percentage_change\":-4.7903148543},{\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"current_price\":3.76925,\"yoy_price\":3.79175,\"absolute_change\":-0.0225,\"percentage_change\":-0.5933935518},{\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"current_price\":3.8539166667,\"yoy_price\":3.7258333333,\"absolute_change\":0.1280833333,\"percentage_change\":3.4377096846},{\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"current_price\":3.8799166667,\"yoy_price\":3.70175,\"absolute_change\":0.1781666667,\"percentage_change\":4.813038878},{\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"current_price\":3.9118333333,\"yoy_price\":3.7428333333,\"absolute_change\":0.169,\"percentage_change\":4.5152958988},{\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"current_price\":3.974,\"yoy_price\":3.7889166667,\"absolute_change\":0.1850833333,\"percentage_change\":4.8848615479},{\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"current_price\":3.9806666667,\"yoy_price\":3.7779166667,\"absolute_change\":0.20275,\"percentage_change\":5.366714459},{\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"current_price\":4.012,\"yoy_price\":3.7255,\"absolute_change\":0.2865,\"percentage_change\":7.6902429204},{\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"current_price\":3.9665833333,\"yoy_price\":3.6406666667,\"absolute_change\":0.3259166667,\"percentage_change\":8.9521149973},{\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"current_price\":3.94525,\"yoy_price\":3.5676666667,\"absolute_change\":0.3775833333,\"percentage_change\":10.5834812669},{\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"current_price\":4.0136666667,\"yoy_price\":3.5489166667,\"absolute_change\":0.46475,\"percentage_change\":13.095545589},{\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"current_price\":3.98625,\"yoy_price\":3.6025,\"absolute_change\":0.38375,\"percentage_change\":10.6523247745},{\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"current_price\":3.8585,\"yoy_price\":3.5915,\"absolute_change\":0.267,\"percentage_change\":7.4342196854},{\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"current_price\":3.7351666667,\"yoy_price\":3.5828333333,\"absolute_change\":0.1523333333,\"percentage_change\":4.251756059},{\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"current_price\":3.6595833333,\"yoy_price\":3.5561666667,\"absolute_change\":0.1034166667,\"percentage_change\":2.9080939214},{\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"current_price\":3.6109166667,\"yoy_price\":3.56775,\"absolute_change\":0.0431666667,\"percentage_change\":1.2099128769},{\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"current_price\":3.5866666667,\"yoy_price\":3.5034166667,\"absolute_change\":0.08325,\"percentage_change\":2.3762517542},{\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"current_price\":3.5889166667,\"yoy_price\":3.447,\"absolute_change\":0.1419166667,\"percentage_change\":4.1171066628},{\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"current_price\":3.5489166667,\"yoy_price\":3.4248333333,\"absolute_change\":0.1240833333,\"percentage_change\":3.6230473502},{\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"current_price\":3.5030833333,\"yoy_price\":3.4170833333,\"absolute_change\":0.086,\"percentage_change\":2.516766248},{\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"current_price\":3.4101666667,\"yoy_price\":3.3644166667,\"absolute_change\":0.04575,\"percentage_change\":1.3598196815},{\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"current_price\":3.4134166667,\"yoy_price\":3.3875,\"absolute_change\":0.0259166667,\"percentage_change\":0.7650676507},{\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"current_price\":3.4539166667,\"yoy_price\":3.429,\"absolute_change\":0.0249166667,\"percentage_change\":0.7266452805},{\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"current_price\":3.4639166667,\"yoy_price\":3.513,\"absolute_change\":-0.0490833333,\"percentage_change\":-1.3971913844},{\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"current_price\":3.469,\"yoy_price\":3.52275,\"absolute_change\":-0.05375,\"percentage_change\":-1.5257966078},{\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"current_price\":3.4744166667,\"yoy_price\":3.5246666667,\"absolute_change\":-0.05025,\"percentage_change\":-1.4256667297},{\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"current_price\":3.5135,\"yoy_price\":3.5743333333,\"absolute_change\":-0.0608333333,\"percentage_change\":-1.7019490814},{\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"current_price\":3.6901666667,\"yoy_price\":3.61375,\"absolute_change\":0.0764166667,\"percentage_change\":2.1146085553},{\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"current_price\":3.7646666667,\"yoy_price\":3.6596666667,\"absolute_change\":0.105,\"percentage_change\":2.8691137626},{\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"current_price\":3.8923333333,\"yoy_price\":3.732,\"absolute_change\":0.1603333333,\"percentage_change\":4.2961772061},{\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"current_price\":3.9339166667,\"yoy_price\":3.8614166667,\"absolute_change\":0.0725,\"percentage_change\":1.8775492587},{\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"current_price\":3.91,\"yoy_price\":3.9273333333,\"absolute_change\":-0.0173333333,\"percentage_change\":-0.4413512137},{\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"current_price\":3.86525,\"yoy_price\":3.964,\"absolute_change\":-0.09875,\"percentage_change\":-2.4911705348},{\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"current_price\":3.8494166667,\"yoy_price\":4.0018333333,\"absolute_change\":-0.1524166667,\"percentage_change\":-3.8086710258},{\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"current_price\":3.8305833333,\"yoy_price\":4.0504166667,\"absolute_change\":-0.2198333333,\"percentage_change\":-5.427425162},{\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"current_price\":3.8023333333,\"yoy_price\":4.0706666667,\"absolute_change\":-0.2683333333,\"percentage_change\":-6.5918768425},{\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"current_price\":3.7638333333,\"yoy_price\":4.07175,\"absolute_change\":-0.3079166667,\"percentage_change\":-7.5622684759},{\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"current_price\":3.7015,\"yoy_price\":4.0521666667,\"absolute_change\":-0.3506666667,\"percentage_change\":-8.6538066055},{\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"current_price\":3.688,\"yoy_price\":4.0058333333,\"absolute_change\":-0.3178333333,\"percentage_change\":-7.9342625338},{\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"current_price\":3.6716666667,\"yoy_price\":3.9668333333,\"absolute_change\":-0.2951666667,\"percentage_change\":-7.4408638293},{\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"current_price\":3.6834166667,\"yoy_price\":3.92975,\"absolute_change\":-0.2463333333,\"percentage_change\":-6.2684225036},{\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"current_price\":3.74425,\"yoy_price\":3.905,\"absolute_change\":-0.16075,\"percentage_change\":-4.1165172855},{\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"current_price\":3.7975,\"yoy_price\":3.8615,\"absolute_change\":-0.064,\"percentage_change\":-1.6573870258},{\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"current_price\":3.7765833333,\"yoy_price\":3.8170833333,\"absolute_change\":-0.0405,\"percentage_change\":-1.0610195394},{\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"current_price\":3.7738333333,\"yoy_price\":3.7609166667,\"absolute_change\":0.0129166667,\"percentage_change\":0.3434446389},{\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"current_price\":3.78475,\"yoy_price\":3.7135833333,\"absolute_change\":0.0711666667,\"percentage_change\":1.9163880349},{\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"current_price\":3.7660833333,\"yoy_price\":3.6640833333,\"absolute_change\":0.102,\"percentage_change\":2.783779481},{\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"current_price\":3.7355,\"yoy_price\":3.5713333333,\"absolute_change\":0.1641666667,\"percentage_change\":4.5967892477},{\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"current_price\":3.6634166667,\"yoy_price\":3.4944166667,\"absolute_change\":0.169,\"percentage_change\":4.836286457},{\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"current_price\":3.65675,\"yoy_price\":3.5433333333,\"absolute_change\":0.1134166667,\"percentage_change\":3.2008466604},{\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"current_price\":3.7924166667,\"yoy_price\":3.5616666667,\"absolute_change\":0.23075,\"percentage_change\":6.4787084698},{\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"current_price\":3.8378333333,\"yoy_price\":3.6311666667,\"absolute_change\":0.2066666667,\"percentage_change\":5.6914673888},{\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"current_price\":3.80725,\"yoy_price\":3.6438333333,\"absolute_change\":0.1634166667,\"percentage_change\":4.4847459178},{\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"current_price\":3.78775,\"yoy_price\":3.76925,\"absolute_change\":0.0185,\"percentage_change\":0.4908138224},{\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"current_price\":3.7235833333,\"yoy_price\":3.8539166667,\"absolute_change\":-0.1303333333,\"percentage_change\":-3.3818409843},{\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"current_price\":3.7071666667,\"yoy_price\":3.8799166667,\"absolute_change\":-0.17275,\"percentage_change\":-4.4524152151},{\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"current_price\":3.70625,\"yoy_price\":3.9118333333,\"absolute_change\":-0.2055833333,\"percentage_change\":-5.2554215841},{\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"current_price\":3.754,\"yoy_price\":3.974,\"absolute_change\":-0.22,\"percentage_change\":-5.5359838953},{\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"current_price\":3.7398333333,\"yoy_price\":3.9806666667,\"absolute_change\":-0.2408333333,\"percentage_change\":-6.0500753643},{\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"current_price\":3.7113333333,\"yoy_price\":4.012,\"absolute_change\":-0.3006666667,\"percentage_change\":-7.4941841143},{\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"current_price\":3.6588333333,\"yoy_price\":3.9665833333,\"absolute_change\":-0.30775,\"percentage_change\":-7.7585663564},{\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"current_price\":3.59425,\"yoy_price\":3.94525,\"absolute_change\":-0.351,\"percentage_change\":-8.8967746024},{\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"current_price\":3.53525,\"yoy_price\":4.0136666667,\"absolute_change\":-0.4784166667,\"percentage_change\":-11.9196910556},{\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"current_price\":3.52225,\"yoy_price\":3.98625,\"absolute_change\":-0.464,\"percentage_change\":-11.6400125431},{\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"current_price\":3.5230833333,\"yoy_price\":3.8585,\"absolute_change\":-0.3354166667,\"percentage_change\":-8.6929290311},{\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"current_price\":3.4666666667,\"yoy_price\":3.7351666667,\"absolute_change\":-0.2685,\"percentage_change\":-7.188434251},{\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"current_price\":3.43525,\"yoy_price\":3.6595833333,\"absolute_change\":-0.2243333333,\"percentage_change\":-6.1300239098},{\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"current_price\":3.3709166667,\"yoy_price\":3.6109166667,\"absolute_change\":-0.24,\"percentage_change\":-6.6465117352},{\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"current_price\":3.3919166667,\"yoy_price\":3.5866666667,\"absolute_change\":-0.19475,\"percentage_change\":-5.4298327138},{\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"current_price\":3.4623333333,\"yoy_price\":3.5889166667,\"absolute_change\":-0.1265833333,\"percentage_change\":-3.527062484},{\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"current_price\":3.4495,\"yoy_price\":3.5489166667,\"absolute_change\":-0.0994166667,\"percentage_change\":-2.8013243478},{\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"current_price\":3.44625,\"yoy_price\":3.5030833333,\"absolute_change\":-0.0568333333,\"percentage_change\":-1.622380284},{\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"current_price\":3.4215,\"yoy_price\":3.4101666667,\"absolute_change\":0.0113333333,\"percentage_change\":0.3323395728},{\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"current_price\":3.45025,\"yoy_price\":3.4134166667,\"absolute_change\":0.0368333333,\"percentage_change\":1.0790752179},{\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"current_price\":3.5034166667,\"yoy_price\":3.4539166667,\"absolute_change\":0.0495,\"percentage_change\":1.4331555963},{\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"current_price\":3.5093333333,\"yoy_price\":3.4639166667,\"absolute_change\":0.0454166667,\"percentage_change\":1.3111362379},{\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"current_price\":3.4998333333,\"yoy_price\":3.469,\"absolute_change\":0.0308333333,\"percentage_change\":0.8888248294},{\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"current_price\":3.4701666667,\"yoy_price\":3.4744166667,\"absolute_change\":-0.00425,\"percentage_change\":-0.1223226921},{\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"current_price\":3.4669166667,\"yoy_price\":3.5135,\"absolute_change\":-0.0465833333,\"percentage_change\":-1.3258384327},{\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"current_price\":3.46375,\"yoy_price\":3.6901666667,\"absolute_change\":-0.2264166667,\"percentage_change\":-6.1356758954},{\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"current_price\":3.479,\"yoy_price\":3.7646666667,\"absolute_change\":-0.2856666667,\"percentage_change\":-7.588099876},{\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"current_price\":3.5475,\"yoy_price\":3.8923333333,\"absolute_change\":-0.3448333333,\"percentage_change\":-8.8592960521},{\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"current_price\":3.60675,\"yoy_price\":3.9339166667,\"absolute_change\":-0.3271666667,\"percentage_change\":-8.3165632216},{\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"current_price\":3.64175,\"yoy_price\":3.91,\"absolute_change\":-0.26825,\"percentage_change\":-6.8606138107},{\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"current_price\":3.6708333333,\"yoy_price\":3.86525,\"absolute_change\":-0.1944166667,\"percentage_change\":-5.029860078},{\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"current_price\":3.706,\"yoy_price\":3.8494166667,\"absolute_change\":-0.1434166667,\"percentage_change\":-3.725672721},{\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"current_price\":3.7111666667,\"yoy_price\":3.8305833333,\"absolute_change\":-0.1194166667,\"percentage_change\":-3.1174538256},{\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"current_price\":3.7381666667,\"yoy_price\":3.8023333333,\"absolute_change\":-0.0641666667,\"percentage_change\":-1.68756027},{\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"current_price\":3.7605,\"yoy_price\":3.7638333333,\"absolute_change\":-0.0033333333,\"percentage_change\":-0.0885621928},{\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"current_price\":3.816,\"yoy_price\":3.7015,\"absolute_change\":0.1145,\"percentage_change\":3.0933405376},{\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"current_price\":3.85025,\"yoy_price\":3.688,\"absolute_change\":0.16225,\"percentage_change\":4.3994034707},{\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"current_price\":3.8839166667,\"yoy_price\":3.6716666667,\"absolute_change\":0.21225,\"percentage_change\":5.7807535179},{\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"current_price\":3.85875,\"yoy_price\":3.6834166667,\"absolute_change\":0.1753333333,\"percentage_change\":4.7600733015},{\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"current_price\":3.8420833333,\"yoy_price\":3.74425,\"absolute_change\":0.0978333333,\"percentage_change\":2.6128953284},{\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"current_price\":3.8385833333,\"yoy_price\":3.7975,\"absolute_change\":0.0410833333,\"percentage_change\":1.0818520957},{\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"current_price\":3.84325,\"yoy_price\":3.7765833333,\"absolute_change\":0.0666666667,\"percentage_change\":1.7652640173},{\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"current_price\":3.8565833333,\"yoy_price\":3.7738333333,\"absolute_change\":0.08275,\"percentage_change\":2.1927306452},{\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"current_price\":3.8398333333,\"yoy_price\":3.78475,\"absolute_change\":0.0550833333,\"percentage_change\":1.4554021622},{\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"current_price\":3.85,\"yoy_price\":3.7660833333,\"absolute_change\":0.0839166667,\"percentage_change\":2.2282211847},{\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"current_price\":3.8686666667,\"yoy_price\":3.7355,\"absolute_change\":0.1331666667,\"percentage_change\":3.5648953732},{\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"current_price\":3.8699166667,\"yoy_price\":3.6634166667,\"absolute_change\":0.2065,\"percentage_change\":5.6368144492},{\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"current_price\":3.8475,\"yoy_price\":3.65675,\"absolute_change\":0.19075,\"percentage_change\":5.2163806659},{\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"current_price\":3.80875,\"yoy_price\":3.7924166667,\"absolute_change\":0.0163333333,\"percentage_change\":0.4306840405},{\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"current_price\":3.7668333333,\"yoy_price\":3.8378333333,\"absolute_change\":-0.071,\"percentage_change\":-1.8500021714},{\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"current_price\":3.7155833333,\"yoy_price\":3.80725,\"absolute_change\":-0.0916666667,\"percentage_change\":-2.4076870882},{\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"current_price\":3.6915,\"yoy_price\":3.78775,\"absolute_change\":-0.09625,\"percentage_change\":-2.5410863969},{\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"current_price\":3.6748333333,\"yoy_price\":3.7235833333,\"absolute_change\":-0.04875,\"percentage_change\":-1.3092227469},{\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"current_price\":3.64375,\"yoy_price\":3.7071666667,\"absolute_change\":-0.0634166667,\"percentage_change\":-1.7106505417},{\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"current_price\":3.6246666667,\"yoy_price\":3.70625,\"absolute_change\":-0.0815833333,\"percentage_change\":-2.2012366498},{\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"current_price\":3.6250833333,\"yoy_price\":3.754,\"absolute_change\":-0.1289166667,\"percentage_change\":-3.4341147221},{\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"current_price\":3.6225,\"yoy_price\":3.7398333333,\"absolute_change\":-0.1173333333,\"percentage_change\":-3.1373947146},{\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"current_price\":3.5761666667,\"yoy_price\":3.7113333333,\"absolute_change\":-0.1351666667,\"percentage_change\":-3.6419974852},{\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"current_price\":3.5251666667,\"yoy_price\":3.6588333333,\"absolute_change\":-0.1336666667,\"percentage_change\":-3.6532592356},{\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"current_price\":3.5249166667,\"yoy_price\":3.59425,\"absolute_change\":-0.0693333333,\"percentage_change\":-1.9290069787},{\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"current_price\":3.4766666667,\"yoy_price\":3.53525,\"absolute_change\":-0.0585833333,\"percentage_change\":-1.6571199585},{\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"current_price\":3.3915,\"yoy_price\":3.52225,\"absolute_change\":-0.13075,\"percentage_change\":-3.712115835},{\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"current_price\":3.3021666667,\"yoy_price\":3.5230833333,\"absolute_change\":-0.2209166667,\"percentage_change\":-6.2705489983},{\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"current_price\":3.2323333333,\"yoy_price\":3.4666666667,\"absolute_change\":-0.2343333333,\"percentage_change\":-6.7596153846},{\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"current_price\":3.17,\"yoy_price\":3.43525,\"absolute_change\":-0.26525,\"percentage_change\":-7.7214176552},{\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"current_price\":3.116,\"yoy_price\":3.3709166667,\"absolute_change\":-0.2549166667,\"percentage_change\":-7.5622357915},{\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"current_price\":3.0705833333,\"yoy_price\":3.3919166667,\"absolute_change\":-0.3213333333,\"percentage_change\":-9.4735031816},{\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"current_price\":3.0020833333,\"yoy_price\":3.4623333333,\"absolute_change\":-0.46025,\"percentage_change\":-13.293058631},{\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"current_price\":2.9605,\"yoy_price\":3.4495,\"absolute_change\":-0.489,\"percentage_change\":-14.1759675315},{\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"current_price\":2.8666666667,\"yoy_price\":3.44625,\"absolute_change\":-0.5795833333,\"percentage_change\":-16.8177971225},{\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"current_price\":2.74625,\"yoy_price\":3.4215,\"absolute_change\":-0.67525,\"percentage_change\":-19.7354961274},{\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"current_price\":2.6041666667,\"yoy_price\":3.45025,\"absolute_change\":-0.8460833333,\"percentage_change\":-24.5223776055},{\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"current_price\":2.5036666667,\"yoy_price\":3.5034166667,\"absolute_change\":-0.99975,\"percentage_change\":-28.5364287243},{\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"current_price\":2.42375,\"yoy_price\":3.5093333333,\"absolute_change\":-1.0855833333,\"percentage_change\":-30.9341755319},{\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"current_price\":2.3450833333,\"yoy_price\":3.4998333333,\"absolute_change\":-1.15475,\"percentage_change\":-32.9944283061},{\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"current_price\":2.2650833333,\"yoy_price\":3.4701666667,\"absolute_change\":-1.2050833333,\"percentage_change\":-34.7269583593},{\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"current_price\":2.2385833333,\"yoy_price\":3.4669166667,\"absolute_change\":-1.2283333333,\"percentage_change\":-35.4301372497},{\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"current_price\":2.2544166667,\"yoy_price\":3.46375,\"absolute_change\":-1.2093333333,\"percentage_change\":-34.9139901359},{\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"current_price\":2.3746666667,\"yoy_price\":3.479,\"absolute_change\":-1.1043333333,\"percentage_change\":-31.7428379803},{\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"current_price\":2.45975,\"yoy_price\":3.5475,\"absolute_change\":-1.08775,\"percentage_change\":-30.6624383369},{\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"current_price\":2.5195833333,\"yoy_price\":3.60675,\"absolute_change\":-1.0871666667,\"percentage_change\":-30.1425567801},{\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"current_price\":2.67225,\"yoy_price\":3.64175,\"absolute_change\":-0.9695,\"percentage_change\":-26.6218164344},{\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"current_price\":2.6890833333,\"yoy_price\":3.6708333333,\"absolute_change\":-0.98175,\"percentage_change\":-26.7446083995},{\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"current_price\":2.65525,\"yoy_price\":3.706,\"absolute_change\":-1.05075,\"percentage_change\":-28.3526713438},{\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"current_price\":2.6515833333,\"yoy_price\":3.7111666667,\"absolute_change\":-1.0595833333,\"percentage_change\":-28.5512192931},{\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"current_price\":2.64325,\"yoy_price\":3.7381666667,\"absolute_change\":-1.0949166667,\"percentage_change\":-29.2902046458},{\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"current_price\":2.6116666667,\"yoy_price\":3.7605,\"absolute_change\":-1.1488333333,\"percentage_change\":-30.5500155121},{\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"current_price\":2.6054166667,\"yoy_price\":3.816,\"absolute_change\":-1.2105833333,\"percentage_change\":-31.7238819008},{\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"current_price\":2.6794166667,\"yoy_price\":3.85025,\"absolute_change\":-1.1708333333,\"percentage_change\":-30.4092807826},{\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"current_price\":2.776,\"yoy_price\":3.8839166667,\"absolute_change\":-1.1079166667,\"percentage_change\":-28.5257579334},{\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"current_price\":2.8776666667,\"yoy_price\":3.85875,\"absolute_change\":-0.9810833333,\"percentage_change\":-25.4249001188},{\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"current_price\":2.9048333333,\"yoy_price\":3.8420833333,\"absolute_change\":-0.93725,\"percentage_change\":-24.3943173192},{\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"current_price\":2.95325,\"yoy_price\":3.8385833333,\"absolute_change\":-0.8853333333,\"percentage_change\":-23.0640644335},{\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"current_price\":2.9800833333,\"yoy_price\":3.84325,\"absolute_change\":-0.8631666667,\"percentage_change\":-22.4592900974},{\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"current_price\":2.9816666667,\"yoy_price\":3.8565833333,\"absolute_change\":-0.8749166667,\"percentage_change\":-22.6863156075},{\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"current_price\":2.9790833333,\"yoy_price\":3.8398333333,\"absolute_change\":-0.86075,\"percentage_change\":-22.4163375146},{\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"current_price\":3.0245833333,\"yoy_price\":3.85,\"absolute_change\":-0.8254166667,\"percentage_change\":-21.4393939394},{\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"current_price\":3.0031666667,\"yoy_price\":3.8686666667,\"absolute_change\":-0.8655,\"percentage_change\":-22.3720489402},{\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"current_price\":2.9933333333,\"yoy_price\":3.8699166667,\"absolute_change\":-0.8765833333,\"percentage_change\":-22.6512198798},{\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"current_price\":2.9863333333,\"yoy_price\":3.8475,\"absolute_change\":-0.8611666667,\"percentage_change\":-22.3824994585},{\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"current_price\":3.0495833333,\"yoy_price\":3.80875,\"absolute_change\":-0.7591666667,\"percentage_change\":-19.9321737228},{\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"current_price\":3.01825,\"yoy_price\":3.7668333333,\"absolute_change\":-0.7485833333,\"percentage_change\":-19.8730144684},{\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"current_price\":2.964,\"yoy_price\":3.7155833333,\"absolute_change\":-0.7515833333,\"percentage_change\":-20.2278691098},{\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"current_price\":2.9108333333,\"yoy_price\":3.6915,\"absolute_change\":-0.7806666667,\"percentage_change\":-21.1476816109},{\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"current_price\":2.8488333333,\"yoy_price\":3.6748333333,\"absolute_change\":-0.826,\"percentage_change\":-22.4772098508},{\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"current_price\":2.9221666667,\"yoy_price\":3.64375,\"absolute_change\":-0.7215833333,\"percentage_change\":-19.8033161807},{\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"current_price\":2.8459166667,\"yoy_price\":3.6246666667,\"absolute_change\":-0.77875,\"percentage_change\":-21.4847342284},{\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"current_price\":2.7256666667,\"yoy_price\":3.6250833333,\"absolute_change\":-0.8994166667,\"percentage_change\":-24.8109238868},{\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"current_price\":2.6556666667,\"yoy_price\":3.6225,\"absolute_change\":-0.9668333333,\"percentage_change\":-26.6896710375},{\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"current_price\":2.5951666667,\"yoy_price\":3.5761666667,\"absolute_change\":-0.981,\"percentage_change\":-27.4316074008},{\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"current_price\":2.5485833333,\"yoy_price\":3.5251666667,\"absolute_change\":-0.9765833333,\"percentage_change\":-27.7031818827},{\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"current_price\":2.5356666667,\"yoy_price\":3.5249166667,\"absolute_change\":-0.98925,\"percentage_change\":-28.0644932504},{\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"current_price\":2.52875,\"yoy_price\":3.4766666667,\"absolute_change\":-0.9479166667,\"percentage_change\":-27.2651006711},{\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"current_price\":2.5398333333,\"yoy_price\":3.3915,\"absolute_change\":-0.8516666667,\"percentage_change\":-25.1117991056},{\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"current_price\":2.4845833333,\"yoy_price\":3.3021666667,\"absolute_change\":-0.8175833333,\"percentage_change\":-24.7589966184},{\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"current_price\":2.4403333333,\"yoy_price\":3.2323333333,\"absolute_change\":-0.792,\"percentage_change\":-24.5024234299},{\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"current_price\":2.43425,\"yoy_price\":3.17,\"absolute_change\":-0.73575,\"percentage_change\":-23.2097791798},{\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"current_price\":2.45025,\"yoy_price\":3.116,\"absolute_change\":-0.66575,\"percentage_change\":-21.3655327343},{\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"current_price\":2.40075,\"yoy_price\":3.0705833333,\"absolute_change\":-0.6698333333,\"percentage_change\":-21.8145303553},{\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"current_price\":2.3225,\"yoy_price\":3.0020833333,\"absolute_change\":-0.6795833333,\"percentage_change\":-22.6370575989},{\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"current_price\":2.2930833333,\"yoy_price\":2.9605,\"absolute_change\":-0.6674166667,\"percentage_change\":-22.5440522434},{\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"current_price\":2.2871666667,\"yoy_price\":2.8666666667,\"absolute_change\":-0.5795,\"percentage_change\":-20.2151162791},{\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"current_price\":2.2714166667,\"yoy_price\":2.74625,\"absolute_change\":-0.4748333333,\"percentage_change\":-17.2902442725},{\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"current_price\":2.2659166667,\"yoy_price\":2.6041666667,\"absolute_change\":-0.33825,\"percentage_change\":-12.9888},{\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"current_price\":2.2755,\"yoy_price\":2.5036666667,\"absolute_change\":-0.2281666667,\"percentage_change\":-9.1133004926},{\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"current_price\":2.2711666667,\"yoy_price\":2.42375,\"absolute_change\":-0.1525833333,\"percentage_change\":-6.2953412412},{\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"current_price\":2.2410833333,\"yoy_price\":2.3450833333,\"absolute_change\":-0.104,\"percentage_change\":-4.434810419},{\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"current_price\":2.15825,\"yoy_price\":2.2650833333,\"absolute_change\":-0.1068333333,\"percentage_change\":-4.716529929},{\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"current_price\":2.1033333333,\"yoy_price\":2.2385833333,\"absolute_change\":-0.13525,\"percentage_change\":-6.0417674869},{\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"current_price\":2.0665833333,\"yoy_price\":2.2544166667,\"absolute_change\":-0.1878333333,\"percentage_change\":-8.3317931468},{\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"current_price\":2.0065,\"yoy_price\":2.3746666667,\"absolute_change\":-0.3681666667,\"percentage_change\":-15.5039303762},{\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"current_price\":1.9654166667,\"yoy_price\":2.45975,\"absolute_change\":-0.4943333333,\"percentage_change\":-20.0968933157},{\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"current_price\":1.9610833333,\"yoy_price\":2.5195833333,\"absolute_change\":-0.5585,\"percentage_change\":-22.166363486},{\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"current_price\":2.0085,\"yoy_price\":2.67225,\"absolute_change\":-0.66375,\"percentage_change\":-24.8386191412},{\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"current_price\":2.0591666667,\"yoy_price\":2.6890833333,\"absolute_change\":-0.6299166667,\"percentage_change\":-23.4249589389},{\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"current_price\":2.1816666667,\"yoy_price\":2.65525,\"absolute_change\":-0.4735833333,\"percentage_change\":-17.8357342372},{\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"current_price\":2.2295,\"yoy_price\":2.6515833333,\"absolute_change\":-0.4220833333,\"percentage_change\":-15.9181621044},{\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"current_price\":2.29525,\"yoy_price\":2.64325,\"absolute_change\":-0.348,\"percentage_change\":-13.1656105174},{\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"current_price\":2.3093333333,\"yoy_price\":2.6116666667,\"absolute_change\":-0.3023333333,\"percentage_change\":-11.5762603701},{\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"current_price\":2.2985833333,\"yoy_price\":2.6054166667,\"absolute_change\":-0.3068333333,\"percentage_change\":-11.7767471614},{\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"current_price\":2.3630833333,\"yoy_price\":2.6794166667,\"absolute_change\":-0.3163333333,\"percentage_change\":-11.8060523124},{\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"current_price\":2.3878333333,\"yoy_price\":2.776,\"absolute_change\":-0.3881666667,\"percentage_change\":-13.9829490874},{\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"current_price\":2.4613333333,\"yoy_price\":2.8776666667,\"absolute_change\":-0.4163333333,\"percentage_change\":-14.4677400672},{\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"current_price\":2.448,\"yoy_price\":2.9048333333,\"absolute_change\":-0.4568333333,\"percentage_change\":-15.7266624591},{\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"current_price\":2.4648333333,\"yoy_price\":2.95325,\"absolute_change\":-0.4884166667,\"percentage_change\":-16.5382770394},{\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"current_price\":2.5193333333,\"yoy_price\":2.9800833333,\"absolute_change\":-0.46075,\"percentage_change\":-15.460977042},{\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"current_price\":2.5528333333,\"yoy_price\":2.9816666667,\"absolute_change\":-0.4288333333,\"percentage_change\":-14.3823365008},{\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"current_price\":2.5924166667,\"yoy_price\":2.9790833333,\"absolute_change\":-0.3866666667,\"percentage_change\":-12.9793840387},{\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"current_price\":2.6095,\"yoy_price\":3.0245833333,\"absolute_change\":-0.4150833333,\"percentage_change\":-13.7236533958},{\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"current_price\":2.57025,\"yoy_price\":3.0031666667,\"absolute_change\":-0.4329166667,\"percentage_change\":-14.415339364},{\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"current_price\":2.554,\"yoy_price\":2.9933333333,\"absolute_change\":-0.4393333333,\"percentage_change\":-14.6770601336},{\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"current_price\":2.5216666667,\"yoy_price\":2.9863333333,\"absolute_change\":-0.4646666667,\"percentage_change\":-15.559772296},{\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"current_price\":2.48475,\"yoy_price\":3.0495833333,\"absolute_change\":-0.5648333333,\"percentage_change\":-18.5216559639},{\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"current_price\":2.46225,\"yoy_price\":3.01825,\"absolute_change\":-0.556,\"percentage_change\":-18.4212706038},{\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"current_price\":2.4148333333,\"yoy_price\":2.964,\"absolute_change\":-0.5491666667,\"percentage_change\":-18.5278902384},{\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"current_price\":2.3898333333,\"yoy_price\":2.9108333333,\"absolute_change\":-0.521,\"percentage_change\":-17.8986544518},{\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"current_price\":2.37575,\"yoy_price\":2.8488333333,\"absolute_change\":-0.4730833333,\"percentage_change\":-16.6062130697},{\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"current_price\":2.3731666667,\"yoy_price\":2.9221666667,\"absolute_change\":-0.549,\"percentage_change\":-18.7874294188},{\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"current_price\":2.41625,\"yoy_price\":2.8459166667,\"absolute_change\":-0.4296666667,\"percentage_change\":-15.0976545343},{\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"current_price\":2.4548333333,\"yoy_price\":2.7256666667,\"absolute_change\":-0.2708333333,\"percentage_change\":-9.9364069952},{\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"current_price\":2.4455833333,\"yoy_price\":2.6556666667,\"absolute_change\":-0.2100833333,\"percentage_change\":-7.9107568721},{\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"current_price\":2.43125,\"yoy_price\":2.5951666667,\"absolute_change\":-0.1639166667,\"percentage_change\":-6.316228887},{\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"current_price\":2.4525833333,\"yoy_price\":2.5485833333,\"absolute_change\":-0.096,\"percentage_change\":-3.7667985482},{\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"current_price\":2.455,\"yoy_price\":2.5356666667,\"absolute_change\":-0.0806666667,\"percentage_change\":-3.1812803996},{\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"current_price\":2.4759166667,\"yoy_price\":2.52875,\"absolute_change\":-0.0528333333,\"percentage_change\":-2.0893063108},{\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"current_price\":2.5001666667,\"yoy_price\":2.5398333333,\"absolute_change\":-0.0396666667,\"percentage_change\":-1.5617822692},{\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"current_price\":2.4879166667,\"yoy_price\":2.4845833333,\"absolute_change\":0.0033333333,\"percentage_change\":0.1341606574},{\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"current_price\":2.4775833333,\"yoy_price\":2.4403333333,\"absolute_change\":0.03725,\"percentage_change\":1.5264308155},{\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"current_price\":2.4675833333,\"yoy_price\":2.43425,\"absolute_change\":0.0333333333,\"percentage_change\":1.3693471637},{\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"current_price\":2.4754166667,\"yoy_price\":2.45025,\"absolute_change\":0.0251666667,\"percentage_change\":1.0271060776},{\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"current_price\":2.43125,\"yoy_price\":2.40075,\"absolute_change\":0.0305,\"percentage_change\":1.270436322},{\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"current_price\":2.401,\"yoy_price\":2.3225,\"absolute_change\":0.0785,\"percentage_change\":3.3799784715},{\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"current_price\":2.3985833333,\"yoy_price\":2.2930833333,\"absolute_change\":0.1055,\"percentage_change\":4.6007922375},{\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"current_price\":2.449,\"yoy_price\":2.2871666667,\"absolute_change\":0.1618333333,\"percentage_change\":7.0757123078},{\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"current_price\":2.4711666667,\"yoy_price\":2.2714166667,\"absolute_change\":0.19975,\"percentage_change\":8.7940712478},{\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"current_price\":2.49825,\"yoy_price\":2.2659166667,\"absolute_change\":0.2323333333,\"percentage_change\":10.2533926667},{\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"current_price\":2.5386666667,\"yoy_price\":2.2755,\"absolute_change\":0.2631666667,\"percentage_change\":11.5652237603},{\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"current_price\":2.6046666667,\"yoy_price\":2.2711666667,\"absolute_change\":0.3335,\"percentage_change\":14.6840830704},{\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"current_price\":2.61675,\"yoy_price\":2.2410833333,\"absolute_change\":0.3756666667,\"percentage_change\":16.76272636},{\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"current_price\":2.58775,\"yoy_price\":2.15825,\"absolute_change\":0.4295,\"percentage_change\":19.9003822541},{\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"current_price\":2.56,\"yoy_price\":2.1033333333,\"absolute_change\":0.4566666667,\"percentage_change\":21.7115689382},{\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"current_price\":2.5350833333,\"yoy_price\":2.0665833333,\"absolute_change\":0.4685,\"percentage_change\":22.6702689625},{\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"current_price\":2.5325,\"yoy_price\":2.0065,\"absolute_change\":0.526,\"percentage_change\":26.2148018938},{\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"current_price\":2.54775,\"yoy_price\":1.9654166667,\"absolute_change\":0.5823333333,\"percentage_change\":29.629001484},{\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"current_price\":2.5439166667,\"yoy_price\":1.9610833333,\"absolute_change\":0.5828333333,\"percentage_change\":29.7199677049},{\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"current_price\":2.5585,\"yoy_price\":2.0085,\"absolute_change\":0.55,\"percentage_change\":27.3836196166},{\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"current_price\":2.5819166667,\"yoy_price\":2.0591666667,\"absolute_change\":0.52275,\"percentage_change\":25.3864832052},{\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"current_price\":2.5659166667,\"yoy_price\":2.1816666667,\"absolute_change\":0.38425,\"percentage_change\":17.6126814362},{\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"current_price\":2.56525,\"yoy_price\":2.2295,\"absolute_change\":0.33575,\"percentage_change\":15.0594303656},{\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"current_price\":2.5618333333,\"yoy_price\":2.29525,\"absolute_change\":0.2665833333,\"percentage_change\":11.6145663145},{\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"current_price\":2.6004166667,\"yoy_price\":2.3093333333,\"absolute_change\":0.2910833333,\"percentage_change\":12.604647806},{\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"current_price\":2.6600833333,\"yoy_price\":2.2985833333,\"absolute_change\":0.3615,\"percentage_change\":15.7270782728},{\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"current_price\":2.6749166667,\"yoy_price\":2.3630833333,\"absolute_change\":0.3118333333,\"percentage_change\":13.1960362521},{\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"current_price\":2.6858333333,\"yoy_price\":2.3878333333,\"absolute_change\":0.298,\"percentage_change\":12.4799329936},{\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"current_price\":2.6525833333,\"yoy_price\":2.4613333333,\"absolute_change\":0.19125,\"percentage_change\":7.7701787649},{\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"current_price\":2.61625,\"yoy_price\":2.448,\"absolute_change\":0.16825,\"percentage_change\":6.8729575163},{\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"current_price\":2.6148333333,\"yoy_price\":2.4648333333,\"absolute_change\":0.15,\"percentage_change\":6.0856041653},{\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"current_price\":2.64425,\"yoy_price\":2.5193333333,\"absolute_change\":0.1249166667,\"percentage_change\":4.9583223075},{\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"current_price\":2.6515,\"yoy_price\":2.5528333333,\"absolute_change\":0.0986666667,\"percentage_change\":3.8649866162},{\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"current_price\":2.6581666667,\"yoy_price\":2.5924166667,\"absolute_change\":0.06575,\"percentage_change\":2.5362435308},{\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"current_price\":2.61375,\"yoy_price\":2.6095,\"absolute_change\":0.00425,\"percentage_change\":0.1628664495},{\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"current_price\":2.5715,\"yoy_price\":2.57025,\"absolute_change\":0.00125,\"percentage_change\":0.0486334014},{\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"current_price\":2.54175,\"yoy_price\":2.554,\"absolute_change\":-0.01225,\"percentage_change\":-0.4796397807},{\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"current_price\":2.5163333333,\"yoy_price\":2.5216666667,\"absolute_change\":-0.0053333333,\"percentage_change\":-0.2115003305},{\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"current_price\":2.5458333333,\"yoy_price\":2.48475,\"absolute_change\":0.0610833333,\"percentage_change\":2.4583291411},{\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"current_price\":2.5284166667,\"yoy_price\":2.46225,\"absolute_change\":0.0661666667,\"percentage_change\":2.6872440518},{\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"current_price\":2.5604166667,\"yoy_price\":2.4148333333,\"absolute_change\":0.1455833333,\"percentage_change\":6.0287114363},{\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"current_price\":2.6000833333,\"yoy_price\":2.3898333333,\"absolute_change\":0.21025,\"percentage_change\":8.7976846363},{\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"current_price\":2.62575,\"yoy_price\":2.37575,\"absolute_change\":0.25,\"percentage_change\":10.5229927391},{\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"current_price\":2.6303333333,\"yoy_price\":2.3731666667,\"absolute_change\":0.2571666667,\"percentage_change\":10.8364351429},{\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"current_price\":2.6093333333,\"yoy_price\":2.41625,\"absolute_change\":0.1930833333,\"percentage_change\":7.9910329367},{\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"current_price\":2.6433333333,\"yoy_price\":2.4548333333,\"absolute_change\":0.1885,\"percentage_change\":7.678729038},{\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"current_price\":2.92375,\"yoy_price\":2.4455833333,\"absolute_change\":0.4781666667,\"percentage_change\":19.5522540634},{\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"current_price\":2.9299166667,\"yoy_price\":2.43125,\"absolute_change\":0.4986666667,\"percentage_change\":20.5107112254},{\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"current_price\":2.8819166667,\"yoy_price\":2.4525833333,\"absolute_change\":0.4293333333,\"percentage_change\":17.5053515001},{\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"current_price\":2.8330833333,\"yoy_price\":2.455,\"absolute_change\":0.3780833333,\"percentage_change\":15.4005431093},{\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"current_price\":2.81325,\"yoy_price\":2.4759166667,\"absolute_change\":0.3373333333,\"percentage_change\":13.6245834876},{\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"current_price\":2.7553333333,\"yoy_price\":2.5001666667,\"absolute_change\":0.2551666667,\"percentage_change\":10.2059862676},{\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"current_price\":2.7374166667,\"yoy_price\":2.4879166667,\"absolute_change\":0.2495,\"percentage_change\":10.0284709429},{\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"current_price\":2.7245,\"yoy_price\":2.4775833333,\"absolute_change\":0.2469166667,\"percentage_change\":9.9660287242},{\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"current_price\":2.7345833333,\"yoy_price\":2.4675833333,\"absolute_change\":0.267,\"percentage_change\":10.8203032657},{\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"current_price\":2.8086666667,\"yoy_price\":2.4754166667,\"absolute_change\":0.33325,\"percentage_change\":13.4623800707},{\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"current_price\":2.8403333333,\"yoy_price\":2.43125,\"absolute_change\":0.4090833333,\"percentage_change\":16.8260497001},{\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"current_price\":2.8186666667,\"yoy_price\":2.401,\"absolute_change\":0.4176666667,\"percentage_change\":17.3955296404},{\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"current_price\":2.7854166667,\"yoy_price\":2.3985833333,\"absolute_change\":0.3868333333,\"percentage_change\":16.1275753049},{\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"current_price\":2.75475,\"yoy_price\":2.449,\"absolute_change\":0.30575,\"percentage_change\":12.4846876276},{\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"current_price\":2.7375833333,\"yoy_price\":2.4711666667,\"absolute_change\":0.2664166667,\"percentage_change\":10.7810076212},{\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"current_price\":2.707,\"yoy_price\":2.49825,\"absolute_change\":0.20875,\"percentage_change\":8.3558490944},{\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"current_price\":2.72575,\"yoy_price\":2.5386666667,\"absolute_change\":0.1870833333,\"percentage_change\":7.3693539916},{\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"current_price\":2.7724166667,\"yoy_price\":2.6046666667,\"absolute_change\":0.16775,\"percentage_change\":6.4403634502},{\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"current_price\":2.77875,\"yoy_price\":2.61675,\"absolute_change\":0.162,\"percentage_change\":6.1908856406},{\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"current_price\":2.8083333333,\"yoy_price\":2.58775,\"absolute_change\":0.2205833333,\"percentage_change\":8.5241361543},{\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"current_price\":2.8210833333,\"yoy_price\":2.56,\"absolute_change\":0.2610833333,\"percentage_change\":10.1985677083},{\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"current_price\":2.8610833333,\"yoy_price\":2.5350833333,\"absolute_change\":0.326,\"percentage_change\":12.8595378193},{\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"current_price\":2.8919166667,\"yoy_price\":2.5325,\"absolute_change\":0.3594166667,\"percentage_change\":14.1921684765},{\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"current_price\":2.8649166667,\"yoy_price\":2.54775,\"absolute_change\":0.3171666667,\"percentage_change\":12.4488928139},{\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"current_price\":2.8209166667,\"yoy_price\":2.5439166667,\"absolute_change\":0.277,\"percentage_change\":10.8887214597},{\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"current_price\":2.81125,\"yoy_price\":2.5585,\"absolute_change\":0.25275,\"percentage_change\":9.878835255},{\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"current_price\":2.8225833333,\"yoy_price\":2.5819166667,\"absolute_change\":0.2406666667,\"percentage_change\":9.3212406804},{\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"current_price\":2.8216666667,\"yoy_price\":2.5659166667,\"absolute_change\":0.25575,\"percentage_change\":9.9671982073},{\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"current_price\":2.8598333333,\"yoy_price\":2.56525,\"absolute_change\":0.2945833333,\"percentage_change\":11.483611084},{\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"current_price\":2.9085833333,\"yoy_price\":2.5618333333,\"absolute_change\":0.34675,\"percentage_change\":13.5352286774},{\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"current_price\":2.96025,\"yoy_price\":2.6004166667,\"absolute_change\":0.3598333333,\"percentage_change\":13.8375260375},{\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"current_price\":2.9554166667,\"yoy_price\":2.6600833333,\"absolute_change\":0.2953333333,\"percentage_change\":11.1024090724},{\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"current_price\":3.00425,\"yoy_price\":2.6749166667,\"absolute_change\":0.3293333333,\"percentage_change\":12.3119100283},{\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"current_price\":3.0555833333,\"yoy_price\":2.6858333333,\"absolute_change\":0.36975,\"percentage_change\":13.766677009},{\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"current_price\":3.1013333333,\"yoy_price\":2.6525833333,\"absolute_change\":0.44875,\"percentage_change\":16.9174703905},{\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"current_price\":3.10325,\"yoy_price\":2.61625,\"absolute_change\":0.487,\"percentage_change\":18.6144290492},{\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"current_price\":3.1435833333,\"yoy_price\":2.6148333333,\"absolute_change\":0.52875,\"percentage_change\":20.221174071},{\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"current_price\":3.1908333333,\"yoy_price\":2.64425,\"absolute_change\":0.5465833333,\"percentage_change\":20.6706375469},{\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"current_price\":3.2299166667,\"yoy_price\":2.6515,\"absolute_change\":0.5784166667,\"percentage_change\":21.814696084},{\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"current_price\":3.2145833333,\"yoy_price\":2.6581666667,\"absolute_change\":0.5564166667,\"percentage_change\":20.9323468556},{\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"current_price\":3.1860833333,\"yoy_price\":2.61375,\"absolute_change\":0.5723333333,\"percentage_change\":21.8970189702},{\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"current_price\":3.1563333333,\"yoy_price\":2.5715,\"absolute_change\":0.5848333333,\"percentage_change\":22.7428867717},{\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"current_price\":3.1141666667,\"yoy_price\":2.54175,\"absolute_change\":0.5724166667,\"percentage_change\":22.520573096},{\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"current_price\":3.1225,\"yoy_price\":2.5163333333,\"absolute_change\":0.6061666667,\"percentage_change\":24.0892833488},{\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"current_price\":3.1355,\"yoy_price\":2.5458333333,\"absolute_change\":0.5896666667,\"percentage_change\":23.1620294599},{\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"current_price\":3.1366666667,\"yoy_price\":2.5284166667,\"absolute_change\":0.60825,\"percentage_change\":24.0565571339},{\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"current_price\":3.1070833333,\"yoy_price\":2.5604166667,\"absolute_change\":0.5466666667,\"percentage_change\":21.3506916192},{\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"current_price\":3.1183333333,\"yoy_price\":2.6000833333,\"absolute_change\":0.51825,\"percentage_change\":19.9320534598},{\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"current_price\":3.1210833333,\"yoy_price\":2.62575,\"absolute_change\":0.4953333333,\"percentage_change\":18.8644514266},{\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"current_price\":3.11275,\"yoy_price\":2.6303333333,\"absolute_change\":0.4824166667,\"percentage_change\":18.3405145102},{\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"current_price\":3.0929166667,\"yoy_price\":2.6093333333,\"absolute_change\":0.4835833333,\"percentage_change\":18.5328308636},{\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"current_price\":3.09825,\"yoy_price\":2.6433333333,\"absolute_change\":0.4549166667,\"percentage_change\":17.209962169},{\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"current_price\":3.0974166667,\"yoy_price\":2.92375,\"absolute_change\":0.1736666667,\"percentage_change\":5.9398603392},{\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"current_price\":3.1075833333,\"yoy_price\":2.9299166667,\"absolute_change\":0.1776666667,\"percentage_change\":6.0638812253},{\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"current_price\":3.1165,\"yoy_price\":2.8819166667,\"absolute_change\":0.2345833333,\"percentage_change\":8.1398374924},{\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"current_price\":3.11675,\"yoy_price\":2.8330833333,\"absolute_change\":0.2836666667,\"percentage_change\":10.0126481748},{\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"current_price\":3.14475,\"yoy_price\":2.81325,\"absolute_change\":0.3315,\"percentage_change\":11.7835243935},{\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"current_price\":3.1826666667,\"yoy_price\":2.7553333333,\"absolute_change\":0.4273333333,\"percentage_change\":15.5093152674},{\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"current_price\":3.1639166667,\"yoy_price\":2.7374166667,\"absolute_change\":0.4265,\"percentage_change\":15.5803829645},{\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"current_price\":3.13325,\"yoy_price\":2.7245,\"absolute_change\":0.40875,\"percentage_change\":15.0027527987},{\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"current_price\":3.10525,\"yoy_price\":2.7345833333,\"absolute_change\":0.3706666667,\"percentage_change\":13.5547767789},{\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"current_price\":3.0535,\"yoy_price\":2.8086666667,\"absolute_change\":0.2448333333,\"percentage_change\":8.7170662236},{\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"current_price\":2.9895833333,\"yoy_price\":2.8403333333,\"absolute_change\":0.14925,\"percentage_change\":5.2546649454},{\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"current_price\":2.9201666667,\"yoy_price\":2.8186666667,\"absolute_change\":0.1015,\"percentage_change\":3.6009933775},{\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"current_price\":2.8581666667,\"yoy_price\":2.7854166667,\"absolute_change\":0.07275,\"percentage_change\":2.6118175019},{\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"current_price\":2.7746666667,\"yoy_price\":2.75475,\"absolute_change\":0.0199166667,\"percentage_change\":0.7229936171},{\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"current_price\":2.7373333333,\"yoy_price\":2.7375833333,\"absolute_change\":-0.00025,\"percentage_change\":-0.0091321421},{\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"current_price\":2.6884166667,\"yoy_price\":2.707,\"absolute_change\":-0.0185833333,\"percentage_change\":-0.6864918114},{\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"current_price\":2.6433333333,\"yoy_price\":2.72575,\"absolute_change\":-0.0824166667,\"percentage_change\":-3.0236326393},{\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"current_price\":2.5909166667,\"yoy_price\":2.7724166667,\"absolute_change\":-0.1815,\"percentage_change\":-6.5466350056},{\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"current_price\":2.5606666667,\"yoy_price\":2.77875,\"absolute_change\":-0.2180833333,\"percentage_change\":-7.8482531114},{\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"current_price\":2.564,\"yoy_price\":2.8083333333,\"absolute_change\":-0.2443333333,\"percentage_change\":-8.7002967359},{\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"current_price\":2.56425,\"yoy_price\":2.8210833333,\"absolute_change\":-0.2568333333,\"percentage_change\":-9.1040675863},{\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"current_price\":2.5623333333,\"yoy_price\":2.8610833333,\"absolute_change\":-0.29875,\"percentage_change\":-10.44184895},{\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"current_price\":2.5584166667,\"yoy_price\":2.8919166667,\"absolute_change\":-0.3335,\"percentage_change\":-11.532144195},{\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"current_price\":2.57625,\"yoy_price\":2.8649166667,\"absolute_change\":-0.2886666667,\"percentage_change\":-10.0759184386},{\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"current_price\":2.6099166667,\"yoy_price\":2.8209166667,\"absolute_change\":-0.211,\"percentage_change\":-7.4798381141},{\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"current_price\":2.6711666667,\"yoy_price\":2.81125,\"absolute_change\":-0.1400833333,\"percentage_change\":-4.9829553876},{\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"current_price\":2.6981666667,\"yoy_price\":2.8225833333,\"absolute_change\":-0.1244166667,\"percentage_change\":-4.4079005639},{\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"current_price\":2.74175,\"yoy_price\":2.8216666667,\"absolute_change\":-0.0799166667,\"percentage_change\":-2.832250443},{\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"current_price\":2.8166666667,\"yoy_price\":2.8598333333,\"absolute_change\":-0.0431666667,\"percentage_change\":-1.5094119704},{\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"current_price\":2.8960833333,\"yoy_price\":2.9085833333,\"absolute_change\":-0.0125,\"percentage_change\":-0.4297624846},{\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"current_price\":2.9681666667,\"yoy_price\":2.96025,\"absolute_change\":0.0079166667,\"percentage_change\":0.2674323678},{\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"current_price\":3.0340833333,\"yoy_price\":2.9554166667,\"absolute_change\":0.0786666667,\"percentage_change\":2.6617792189},{\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"current_price\":3.1266666667,\"yoy_price\":3.00425,\"absolute_change\":0.1224166667,\"percentage_change\":4.0747829464},{\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"current_price\":3.14875,\"yoy_price\":3.0555833333,\"absolute_change\":0.0931666667,\"percentage_change\":3.0490631903},{\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"current_price\":3.19725,\"yoy_price\":3.1013333333,\"absolute_change\":0.0959166667,\"percentage_change\":3.092755804},{\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"current_price\":3.21075,\"yoy_price\":3.10325,\"absolute_change\":0.1075,\"percentage_change\":3.464110207},{\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"current_price\":3.1830833333,\"yoy_price\":3.1435833333,\"absolute_change\":0.0395,\"percentage_change\":1.2565278477},{\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"current_price\":3.1685,\"yoy_price\":3.1908333333,\"absolute_change\":-0.0223333333,\"percentage_change\":-0.6999216506},{\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"current_price\":3.1375833333,\"yoy_price\":3.2299166667,\"absolute_change\":-0.0923333333,\"percentage_change\":-2.8586908847},{\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"current_price\":3.1171666667,\"yoy_price\":3.2145833333,\"absolute_change\":-0.0974166667,\"percentage_change\":-3.0304601426},{\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"current_price\":3.0486666667,\"yoy_price\":3.1860833333,\"absolute_change\":-0.1374166667,\"percentage_change\":-4.3130280124},{\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"current_price\":2.99025,\"yoy_price\":3.1563333333,\"absolute_change\":-0.1660833333,\"percentage_change\":-5.2619072764},{\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"current_price\":2.9665,\"yoy_price\":3.1141666667,\"absolute_change\":-0.1476666667,\"percentage_change\":-4.7417714744},{\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"current_price\":3.01575,\"yoy_price\":3.1225,\"absolute_change\":-0.10675,\"percentage_change\":-3.418734988},{\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"current_price\":3.0401666667,\"yoy_price\":3.1355,\"absolute_change\":-0.0953333333,\"percentage_change\":-3.0404507521},{\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"current_price\":3.0685833333,\"yoy_price\":3.1366666667,\"absolute_change\":-0.0680833333,\"percentage_change\":-2.1705632306},{\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"current_price\":3.0430833333,\"yoy_price\":3.1070833333,\"absolute_change\":-0.064,\"percentage_change\":-2.0598095749},{\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"current_price\":3.0111666667,\"yoy_price\":3.1183333333,\"absolute_change\":-0.1071666667,\"percentage_change\":-3.4366648851},{\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"current_price\":2.987,\"yoy_price\":3.1210833333,\"absolute_change\":-0.1340833333,\"percentage_change\":-4.2960510507},{\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"current_price\":2.9296666667,\"yoy_price\":3.11275,\"absolute_change\":-0.1830833333,\"percentage_change\":-5.8817230209},{\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"current_price\":2.9025833333,\"yoy_price\":3.0929166667,\"absolute_change\":-0.1903333333,\"percentage_change\":-6.1538461538},{\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"current_price\":2.883,\"yoy_price\":3.09825,\"absolute_change\":-0.21525,\"percentage_change\":-6.9474703462},{\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"current_price\":2.8750833333,\"yoy_price\":3.0974166667,\"absolute_change\":-0.2223333333,\"percentage_change\":-7.178024698},{\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"current_price\":2.8625833333,\"yoy_price\":3.1075833333,\"absolute_change\":-0.245,\"percentage_change\":-7.8839398246},{\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"current_price\":2.86325,\"yoy_price\":3.1165,\"absolute_change\":-0.25325,\"percentage_change\":-8.1261030002},{\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"current_price\":2.9605,\"yoy_price\":3.11675,\"absolute_change\":-0.15625,\"percentage_change\":-5.0132349402},{\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"current_price\":2.98525,\"yoy_price\":3.14475,\"absolute_change\":-0.1595,\"percentage_change\":-5.0719453057},{\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"current_price\":2.9979166667,\"yoy_price\":3.1826666667,\"absolute_change\":-0.18475,\"percentage_change\":-5.8048806033},{\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"current_price\":2.985,\"yoy_price\":3.1639166667,\"absolute_change\":-0.1789166667,\"percentage_change\":-5.6549108436},{\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"current_price\":2.9860833333,\"yoy_price\":3.13325,\"absolute_change\":-0.1471666667,\"percentage_change\":-4.6969334291},{\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"current_price\":2.94375,\"yoy_price\":3.10525,\"absolute_change\":-0.1615,\"percentage_change\":-5.2008694952},{\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"current_price\":2.9556666667,\"yoy_price\":3.0535,\"absolute_change\":-0.0978333333,\"percentage_change\":-3.2039735822},{\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"current_price\":2.9631666667,\"yoy_price\":2.9895833333,\"absolute_change\":-0.0264166667,\"percentage_change\":-0.8836236934},{\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"current_price\":2.9349166667,\"yoy_price\":2.9201666667,\"absolute_change\":0.01475,\"percentage_change\":0.5051081559},{\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"current_price\":2.9135833333,\"yoy_price\":2.8581666667,\"absolute_change\":0.0554166667,\"percentage_change\":1.9388885649},{\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"current_price\":2.8996666667,\"yoy_price\":2.7746666667,\"absolute_change\":0.125,\"percentage_change\":4.5050456511},{\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"current_price\":2.88125,\"yoy_price\":2.7373333333,\"absolute_change\":0.1439166667,\"percentage_change\":5.2575499269},{\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"current_price\":2.8563333333,\"yoy_price\":2.6884166667,\"absolute_change\":0.1679166667,\"percentage_change\":6.2459316202},{\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"current_price\":2.8466666667,\"yoy_price\":2.6433333333,\"absolute_change\":0.2033333333,\"percentage_change\":7.6923076923},{\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"current_price\":2.8751666667,\"yoy_price\":2.5909166667,\"absolute_change\":0.28425,\"percentage_change\":10.9710205526},{\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"current_price\":2.8808333333,\"yoy_price\":2.5606666667,\"absolute_change\":0.3201666667,\"percentage_change\":12.5032543608},{\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"current_price\":2.87475,\"yoy_price\":2.564,\"absolute_change\":0.31075,\"percentage_change\":12.1197347894},{\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"current_price\":2.8461666667,\"yoy_price\":2.56425,\"absolute_change\":0.2819166667,\"percentage_change\":10.9941178382},{\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"current_price\":2.8190833333,\"yoy_price\":2.5623333333,\"absolute_change\":0.25675,\"percentage_change\":10.0201639131},{\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"current_price\":2.7765,\"yoy_price\":2.5584166667,\"absolute_change\":0.2180833333,\"percentage_change\":8.5241523077},{\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"current_price\":2.7435833333,\"yoy_price\":2.57625,\"absolute_change\":0.1673333333,\"percentage_change\":6.4952288533},{\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"current_price\":2.74575,\"yoy_price\":2.6099166667,\"absolute_change\":0.1358333333,\"percentage_change\":5.2045084454},{\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"current_price\":2.7789166667,\"yoy_price\":2.6711666667,\"absolute_change\":0.10775,\"percentage_change\":4.0338179322},{\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"current_price\":2.7453333333,\"yoy_price\":2.6981666667,\"absolute_change\":0.0471666667,\"percentage_change\":1.7481005621},{\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"current_price\":2.7021666667,\"yoy_price\":2.74175,\"absolute_change\":-0.0395833333,\"percentage_change\":-1.4437251147},{\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"current_price\":2.58475,\"yoy_price\":2.8166666667,\"absolute_change\":-0.2319166667,\"percentage_change\":-8.2337278107},{\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"current_price\":2.4628333333,\"yoy_price\":2.8960833333,\"absolute_change\":-0.43325,\"percentage_change\":-14.9598595805},{\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"current_price\":2.355,\"yoy_price\":2.9681666667,\"absolute_change\":-0.6131666667,\"percentage_change\":-20.658094222},{\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"current_price\":2.2745833333,\"yoy_price\":3.0340833333,\"absolute_change\":-0.7595,\"percentage_change\":-25.0322722404},{\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"current_price\":2.20125,\"yoy_price\":3.1266666667,\"absolute_change\":-0.9254166667,\"percentage_change\":-29.5975479744},{\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"current_price\":2.1604166667,\"yoy_price\":3.14875,\"absolute_change\":-0.9883333333,\"percentage_change\":-31.3881169776},{\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"current_price\":2.11725,\"yoy_price\":3.19725,\"absolute_change\":-1.08,\"percentage_change\":-33.7790288529},{\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"current_price\":2.1213333333,\"yoy_price\":3.21075,\"absolute_change\":-1.0894166667,\"percentage_change\":-33.9302862779},{\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"current_price\":2.1696666667,\"yoy_price\":3.1830833333,\"absolute_change\":-1.0134166667,\"percentage_change\":-31.8375788675},{\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"current_price\":2.1990833333,\"yoy_price\":3.1685,\"absolute_change\":-0.9694166667,\"percentage_change\":-30.5954447425},{\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"current_price\":2.2720833333,\"yoy_price\":3.1375833333,\"absolute_change\":-0.8655,\"percentage_change\":-27.5849247032},{\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"current_price\":2.2890833333,\"yoy_price\":3.1171666667,\"absolute_change\":-0.8280833333,\"percentage_change\":-26.5652569107},{\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"current_price\":2.344,\"yoy_price\":3.0486666667,\"absolute_change\":-0.7046666667,\"percentage_change\":-23.1139295867},{\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"current_price\":2.4030833333,\"yoy_price\":2.99025,\"absolute_change\":-0.5871666667,\"percentage_change\":-19.6360393501},{\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"current_price\":2.43225,\"yoy_price\":2.9665,\"absolute_change\":-0.53425,\"percentage_change\":-18.0094387325},{\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"current_price\":2.4748333333,\"yoy_price\":3.01575,\"absolute_change\":-0.5409166667,\"percentage_change\":-17.9363895106},{\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"current_price\":2.48025,\"yoy_price\":3.0401666667,\"absolute_change\":-0.5599166667,\"percentage_change\":-18.417301683},{\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"current_price\":2.49975,\"yoy_price\":3.0685833333,\"absolute_change\":-0.5688333333,\"percentage_change\":-18.537327214},{\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"current_price\":2.4939166667,\"yoy_price\":3.0430833333,\"absolute_change\":-0.5491666667,\"percentage_change\":-18.0463893529},{\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"current_price\":2.4895,\"yoy_price\":3.0111666667,\"absolute_change\":-0.5216666667,\"percentage_change\":-17.3244036088},{\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"current_price\":2.49,\"yoy_price\":2.987,\"absolute_change\":-0.497,\"percentage_change\":-16.6387679946},{\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"current_price\":2.4801666667,\"yoy_price\":2.9296666667,\"absolute_change\":-0.4495,\"percentage_change\":-15.3430424394},{\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"current_price\":2.4823333333,\"yoy_price\":2.9025833333,\"absolute_change\":-0.42025,\"percentage_change\":-14.4784818122},{\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"current_price\":2.498,\"yoy_price\":2.883,\"absolute_change\":-0.385,\"percentage_change\":-13.3541449879},{\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"current_price\":2.5341666667,\"yoy_price\":2.8750833333,\"absolute_change\":-0.3409166667,\"percentage_change\":-11.8576273152},{\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"current_price\":2.5275,\"yoy_price\":2.8625833333,\"absolute_change\":-0.3350833333,\"percentage_change\":-11.7056272015},{\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"current_price\":2.5030833333,\"yoy_price\":2.86325,\"absolute_change\":-0.3601666667,\"percentage_change\":-12.5789458366},{\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"current_price\":2.4869166667,\"yoy_price\":2.9605,\"absolute_change\":-0.4735833333,\"percentage_change\":-15.9967347858},{\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"current_price\":2.4848333333,\"yoy_price\":2.98525,\"absolute_change\":-0.5004166667,\"percentage_change\":-16.7629735086},{\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"current_price\":2.4865,\"yoy_price\":2.9979166667,\"absolute_change\":-0.5114166667,\"percentage_change\":-17.0590687978},{\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"current_price\":2.4828333333,\"yoy_price\":2.985,\"absolute_change\":-0.5021666667,\"percentage_change\":-16.8230039084},{\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"current_price\":2.4681666667,\"yoy_price\":2.9860833333,\"absolute_change\":-0.5179166667,\"percentage_change\":-17.3443473893},{\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"current_price\":2.4629166667,\"yoy_price\":2.94375,\"absolute_change\":-0.4808333333,\"percentage_change\":-16.3340410474},{\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"current_price\":2.436,\"yoy_price\":2.9556666667,\"absolute_change\":-0.5196666667,\"percentage_change\":-17.5820457878},{\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"current_price\":2.42075,\"yoy_price\":2.9631666667,\"absolute_change\":-0.5424166667,\"percentage_change\":-18.3053040103},{\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"current_price\":2.4341666667,\"yoy_price\":2.9349166667,\"absolute_change\":-0.50075,\"percentage_change\":-17.0618132258},{\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"current_price\":2.4274166667,\"yoy_price\":2.9135833333,\"absolute_change\":-0.4861666667,\"percentage_change\":-16.6862111375},{\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"current_price\":2.443,\"yoy_price\":2.8996666667,\"absolute_change\":-0.4566666667,\"percentage_change\":-15.7489366594},{\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"current_price\":2.4734166667,\"yoy_price\":2.88125,\"absolute_change\":-0.4078333333,\"percentage_change\":-14.154736081},{\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"current_price\":2.4745,\"yoy_price\":2.8563333333,\"absolute_change\":-0.3818333333,\"percentage_change\":-13.3679542537},{\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"current_price\":2.5308333333,\"yoy_price\":2.8466666667,\"absolute_change\":-0.3158333333,\"percentage_change\":-11.0948477752},{\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"current_price\":2.5481666667,\"yoy_price\":2.8751666667,\"absolute_change\":-0.327,\"percentage_change\":-11.3732537244},{\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"current_price\":2.5546666667,\"yoy_price\":2.8808333333,\"absolute_change\":-0.3261666667,\"percentage_change\":-11.3219554527},{\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"current_price\":2.6196666667,\"yoy_price\":2.87475,\"absolute_change\":-0.2550833333,\"percentage_change\":-8.8732353538},{\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"current_price\":2.6805,\"yoy_price\":2.8461666667,\"absolute_change\":-0.1656666667,\"percentage_change\":-5.8206945014},{\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"current_price\":2.6963333333,\"yoy_price\":2.8190833333,\"absolute_change\":-0.12275,\"percentage_change\":-4.3542522688},{\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"current_price\":2.7136666667,\"yoy_price\":2.7765,\"absolute_change\":-0.0628333333,\"percentage_change\":-2.2630409989},{\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"current_price\":2.76625,\"yoy_price\":2.7435833333,\"absolute_change\":0.0226666667,\"percentage_change\":0.8261701546},{\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"current_price\":2.8070833333,\"yoy_price\":2.74575,\"absolute_change\":0.0613333333,\"percentage_change\":2.2337551974},{\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"current_price\":2.9301666667,\"yoy_price\":2.7789166667,\"absolute_change\":0.15125,\"percentage_change\":5.4427684649},{\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"current_price\":3.0103333333,\"yoy_price\":2.7453333333,\"absolute_change\":0.265,\"percentage_change\":9.6527440505},{\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"current_price\":3.0729166667,\"yoy_price\":2.7021666667,\"absolute_change\":0.37075,\"percentage_change\":13.7204712268},{\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"current_price\":3.1585,\"yoy_price\":2.58475,\"absolute_change\":0.57375,\"percentage_change\":22.1975045943},{\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"current_price\":3.1751666667,\"yoy_price\":2.4628333333,\"absolute_change\":0.7123333333,\"percentage_change\":28.9233267916},{\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"current_price\":3.1625833333,\"yoy_price\":2.355,\"absolute_change\":0.8075833333,\"percentage_change\":34.2922859165},{\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"current_price\":3.16725,\"yoy_price\":2.2745833333,\"absolute_change\":0.8926666667,\"percentage_change\":39.2452830189},{\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"current_price\":3.1645833333,\"yoy_price\":2.20125,\"absolute_change\":0.9633333333,\"percentage_change\":43.7630134393},{\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"current_price\":3.172,\"yoy_price\":2.1604166667,\"absolute_change\":1.0115833333,\"percentage_change\":46.8235294118},{\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"current_price\":3.1914166667,\"yoy_price\":2.11725,\"absolute_change\":1.0741666667,\"percentage_change\":50.7340496714},{\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"current_price\":3.2116666667,\"yoy_price\":2.1213333333,\"absolute_change\":1.0903333333,\"percentage_change\":51.3984915148},{\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"current_price\":3.2814166667,\"yoy_price\":2.1696666667,\"absolute_change\":1.11175,\"percentage_change\":51.2405899524},{\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"current_price\":3.34575,\"yoy_price\":2.1990833333,\"absolute_change\":1.1466666667,\"percentage_change\":52.1429383455},{\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"current_price\":3.34525,\"yoy_price\":2.2720833333,\"absolute_change\":1.0731666667,\"percentage_change\":47.2327159362},{\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"current_price\":3.35275,\"yoy_price\":2.2890833333,\"absolute_change\":1.0636666667,\"percentage_change\":46.4669263533},{\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"current_price\":3.3636666667,\"yoy_price\":2.344,\"absolute_change\":1.0196666667,\"percentage_change\":43.5011376564},{\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"current_price\":3.39425,\"yoy_price\":2.4030833333,\"absolute_change\":0.9911666667,\"percentage_change\":41.245621944},{\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"current_price\":3.3904166667,\"yoy_price\":2.43225,\"absolute_change\":0.9581666667,\"percentage_change\":39.3942508651},{\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"current_price\":3.4235,\"yoy_price\":2.4748333333,\"absolute_change\":0.9486666667,\"percentage_change\":38.3325476463},{\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"current_price\":3.4525833333,\"yoy_price\":2.48025,\"absolute_change\":0.9723333333,\"percentage_change\":39.2030373282},{\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"current_price\":3.4655,\"yoy_price\":2.49975,\"absolute_change\":0.96575,\"percentage_change\":38.6338633863},{\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"current_price\":3.4844166667,\"yoy_price\":2.4939166667,\"absolute_change\":0.9905,\"percentage_change\":39.7166438333},{\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"current_price\":3.4724166667,\"yoy_price\":2.4895,\"absolute_change\":0.9829166667,\"percentage_change\":39.4824931378},{\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"current_price\":3.4996666667,\"yoy_price\":2.49,\"absolute_change\":1.0096666667,\"percentage_change\":40.5488621151},{\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"current_price\":3.5111666667,\"yoy_price\":2.4801666667,\"absolute_change\":1.031,\"percentage_change\":41.5697869767},{\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"current_price\":3.51675,\"yoy_price\":2.4823333333,\"absolute_change\":1.0344166667,\"percentage_change\":41.671142742},{\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"current_price\":3.4896666667,\"yoy_price\":2.498,\"absolute_change\":0.9916666667,\"percentage_change\":39.698425407},{\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"current_price\":3.4851666667,\"yoy_price\":2.5341666667,\"absolute_change\":0.951,\"percentage_change\":37.5271292338},{\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"current_price\":3.5165833333,\"yoy_price\":2.5275,\"absolute_change\":0.9890833333,\"percentage_change\":39.1328717441},{\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"current_price\":3.5061666667,\"yoy_price\":2.5030833333,\"absolute_change\":1.0030833333,\"percentage_change\":40.0739088458},{\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"current_price\":3.5210833333,\"yoy_price\":2.4869166667,\"absolute_change\":1.0341666667,\"percentage_change\":41.5842911235},{\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"current_price\":3.5143333333,\"yoy_price\":2.4848333333,\"absolute_change\":1.0295,\"percentage_change\":41.4313501912},{\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"current_price\":3.5270833333,\"yoy_price\":2.4865,\"absolute_change\":1.0405833333,\"percentage_change\":41.8493196595},{\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"current_price\":3.5971666667,\"yoy_price\":2.4828333333,\"absolute_change\":1.1143333333,\"percentage_change\":44.8815197691},{\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"current_price\":3.65275,\"yoy_price\":2.4681666667,\"absolute_change\":1.1845833333,\"percentage_change\":47.9944628267},{\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"current_price\":3.7156666667,\"yoy_price\":2.4629166667,\"absolute_change\":1.25275,\"percentage_change\":50.864489934},{\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"current_price\":3.7273333333,\"yoy_price\":2.436,\"absolute_change\":1.2913333333,\"percentage_change\":53.0103995621},{\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"current_price\":3.7481666667,\"yoy_price\":2.42075,\"absolute_change\":1.3274166667,\"percentage_change\":54.8349340769},{\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"current_price\":3.7454166667,\"yoy_price\":2.4341666667,\"absolute_change\":1.31125,\"percentage_change\":53.8685381719},{\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"current_price\":3.74575,\"yoy_price\":2.4274166667,\"absolute_change\":1.3183333333,\"percentage_change\":54.3101376635},{\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"current_price\":3.7333333333,\"yoy_price\":2.443,\"absolute_change\":1.2903333333,\"percentage_change\":52.817574021},{\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"current_price\":3.69975,\"yoy_price\":2.4734166667,\"absolute_change\":1.2263333333,\"percentage_change\":49.5805397392},{\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"current_price\":3.6755,\"yoy_price\":2.4745,\"absolute_change\":1.201,\"percentage_change\":48.5350575874},{\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"current_price\":3.6595,\"yoy_price\":2.5308333333,\"absolute_change\":1.1286666667,\"percentage_change\":44.5966414225},{\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"current_price\":3.6401666667,\"yoy_price\":2.5481666667,\"absolute_change\":1.092,\"percentage_change\":42.8543397214},{\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"current_price\":3.64475,\"yoy_price\":2.5546666667,\"absolute_change\":1.0900833333,\"percentage_change\":42.670276618},{\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"current_price\":3.6535833333,\"yoy_price\":2.6196666667,\"absolute_change\":1.0339166667,\"percentage_change\":39.4674895025},{\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"current_price\":3.6615,\"yoy_price\":2.6805,\"absolute_change\":0.981,\"percentage_change\":36.5976496922},{\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"current_price\":3.6755,\"yoy_price\":2.6963333333,\"absolute_change\":0.9791666667,\"percentage_change\":36.3147484238},{\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"current_price\":3.7140833333,\"yoy_price\":2.7136666667,\"absolute_change\":1.0004166667,\"percentage_change\":36.8658641445},{\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"current_price\":3.7806666667,\"yoy_price\":2.76625,\"absolute_change\":1.0144166667,\"percentage_change\":36.6711854195},{\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"current_price\":3.82275,\"yoy_price\":2.8070833333,\"absolute_change\":1.0156666667,\"percentage_change\":36.1822769779},{\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"current_price\":3.8669166667,\"yoy_price\":2.9301666667,\"absolute_change\":0.93675,\"percentage_change\":31.9691712644},{\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"current_price\":3.9433333333,\"yoy_price\":3.0103333333,\"absolute_change\":0.933,\"percentage_change\":30.9932454878},{\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"current_price\":4.4456666667,\"yoy_price\":3.0729166667,\"absolute_change\":1.37275,\"percentage_change\":44.6725423729},{\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"current_price\":4.6726666667,\"yoy_price\":3.1585,\"absolute_change\":1.5141666667,\"percentage_change\":47.9394227218},{\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"current_price\":4.6170833333,\"yoy_price\":3.1751666667,\"absolute_change\":1.4419166667,\"percentage_change\":45.4123143142},{\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"current_price\":4.61125,\"yoy_price\":3.1625833333,\"absolute_change\":1.4486666667,\"percentage_change\":45.8064346131},{\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"current_price\":4.5525833333,\"yoy_price\":3.16725,\"absolute_change\":1.3853333333,\"percentage_change\":43.7393111795},{\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"current_price\":4.4771666667,\"yoy_price\":3.1645833333,\"absolute_change\":1.3125833333,\"percentage_change\":41.4772876893},{\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"current_price\":4.4511666667,\"yoy_price\":3.172,\"absolute_change\":1.2791666667,\"percentage_change\":40.3268179908},{\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"current_price\":4.4879166667,\"yoy_price\":3.1914166667,\"absolute_change\":1.2965,\"percentage_change\":40.6245920046},{\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"current_price\":4.5610833333,\"yoy_price\":3.2116666667,\"absolute_change\":1.3494166667,\"percentage_change\":42.0160871821},{\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"current_price\":4.701,\"yoy_price\":3.2814166667,\"absolute_change\":1.4195833333,\"percentage_change\":43.2612946644},{\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"current_price\":4.8656666667,\"yoy_price\":3.34575,\"absolute_change\":1.5199166667,\"percentage_change\":45.4282796583},{\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"current_price\":4.9719166667,\"yoy_price\":3.34525,\"absolute_change\":1.6266666667,\"percentage_change\":48.6261614727},{\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"current_price\":5.012,\"yoy_price\":3.35275,\"absolute_change\":1.65925,\"percentage_change\":49.4892252628},{\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"current_price\":5.2535,\"yoy_price\":3.3636666667,\"absolute_change\":1.8898333333,\"percentage_change\":56.1837280745},{\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"current_price\":5.38075,\"yoy_price\":3.39425,\"absolute_change\":1.9865,\"percentage_change\":58.5254474479},{\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"current_price\":5.3458333333,\"yoy_price\":3.3904166667,\"absolute_change\":1.9554166667,\"percentage_change\":57.6748187293},{\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"current_price\":5.2643333333,\"yoy_price\":3.4235,\"absolute_change\":1.8408333333,\"percentage_change\":53.770507765},{\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"current_price\":5.1664166667,\"yoy_price\":3.4525833333,\"absolute_change\":1.7138333333,\"percentage_change\":49.6391590838},{\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"current_price\":5.0398333333,\"yoy_price\":3.4655,\"absolute_change\":1.5743333333,\"percentage_change\":45.4287500601},{\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"current_price\":4.883,\"yoy_price\":3.4844166667,\"absolute_change\":1.3985833333,\"percentage_change\":40.1382345204},{\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"current_price\":4.7291666667,\"yoy_price\":3.4724166667,\"absolute_change\":1.25675,\"percentage_change\":36.1923732271},{\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"current_price\":4.5989166667,\"yoy_price\":3.4996666667,\"absolute_change\":1.09925,\"percentage_change\":31.4101342985},{\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"current_price\":4.4489166667,\"yoy_price\":3.5111666667,\"absolute_change\":0.93775,\"percentage_change\":26.7076470309},{\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"current_price\":4.349,\"yoy_price\":3.51675,\"absolute_change\":0.83225,\"percentage_change\":23.6653159878},{\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"current_price\":4.2890833333,\"yoy_price\":3.4896666667,\"absolute_change\":0.7994166667,\"percentage_change\":22.9081096571},{\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"current_price\":4.2285,\"yoy_price\":3.4851666667,\"absolute_change\":0.7433333333,\"percentage_change\":21.328487399},{\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"current_price\":4.1523333333,\"yoy_price\":3.5165833333,\"absolute_change\":0.63575,\"percentage_change\":18.0786274556},{\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"current_price\":4.1074166667,\"yoy_price\":3.5061666667,\"absolute_change\":0.60125,\"percentage_change\":17.1483576556},{\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"current_price\":4.0789166667,\"yoy_price\":3.5210833333,\"absolute_change\":0.5578333333,\"percentage_change\":15.8426620595},{\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"current_price\":4.14825,\"yoy_price\":3.5143333333,\"absolute_change\":0.6339166667,\"percentage_change\":18.038034715},{\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"current_price\":4.2526666667,\"yoy_price\":3.5270833333,\"absolute_change\":0.7255833333,\"percentage_change\":20.5717660957},{\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"current_price\":4.3633333333,\"yoy_price\":3.5971666667,\"absolute_change\":0.7661666667,\"percentage_change\":21.2991706436},{\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"current_price\":4.3120833333,\"yoy_price\":3.65275,\"absolute_change\":0.6593333333,\"percentage_change\":18.0503273789},{\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"current_price\":4.1995833333,\"yoy_price\":3.7156666667,\"absolute_change\":0.4839166667,\"percentage_change\":13.0236835023},{\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"current_price\":4.1658333333,\"yoy_price\":3.7273333333,\"absolute_change\":0.4385,\"percentage_change\":11.7644428546},{\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"current_price\":4.2105,\"yoy_price\":3.7481666667,\"absolute_change\":0.4623333333,\"percentage_change\":12.3349192939},{\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"current_price\":4.17825,\"yoy_price\":3.7454166667,\"absolute_change\":0.4328333333,\"percentage_change\":11.5563466459},{\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"current_price\":4.0665,\"yoy_price\":3.74575,\"absolute_change\":0.32075,\"percentage_change\":8.5630381099},{\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"current_price\":3.9478333333,\"yoy_price\":3.7333333333,\"absolute_change\":0.2145,\"percentage_change\":5.7455357143},{\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"current_price\":3.7958333333,\"yoy_price\":3.69975,\"absolute_change\":0.0960833333,\"percentage_change\":2.5970223213},{\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"current_price\":3.6435833333,\"yoy_price\":3.6755,\"absolute_change\":-0.0319166667,\"percentage_change\":-0.8683625811},{\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"current_price\":3.523,\"yoy_price\":3.6595,\"absolute_change\":-0.1365,\"percentage_change\":-3.730017762},{\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"current_price\":3.4898333333,\"yoy_price\":3.6401666667,\"absolute_change\":-0.1503333333,\"percentage_change\":-4.1298475345},{\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"current_price\":3.6025,\"yoy_price\":3.64475,\"absolute_change\":-0.04225,\"percentage_change\":-1.1592015913},{\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"current_price\":3.6311666667,\"yoy_price\":3.6535833333,\"absolute_change\":-0.0224166667,\"percentage_change\":-0.6135529047},{\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"current_price\":3.67775,\"yoy_price\":3.6615,\"absolute_change\":0.01625,\"percentage_change\":0.4438071828},{\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"current_price\":3.774,\"yoy_price\":3.6755,\"absolute_change\":0.0985,\"percentage_change\":2.6799074956},{\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"current_price\":3.8493333333,\"yoy_price\":3.7140833333,\"absolute_change\":0.13525,\"percentage_change\":3.6415445713},{\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"current_price\":3.8183333333,\"yoy_price\":3.7806666667,\"absolute_change\":0.0376666667,\"percentage_change\":0.9962969494},{\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"current_price\":3.77675,\"yoy_price\":3.82275,\"absolute_change\":-0.046,\"percentage_change\":-1.2033222157},{\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"current_price\":3.776,\"yoy_price\":3.8669166667,\"absolute_change\":-0.0909166667,\"percentage_change\":-2.35114109},{\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"current_price\":3.7435833333,\"yoy_price\":3.9433333333,\"absolute_change\":-0.19975,\"percentage_change\":-5.0655114117},{\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"current_price\":3.7944166667,\"yoy_price\":4.4456666667,\"absolute_change\":-0.65125,\"percentage_change\":-14.6490964985},{\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"current_price\":3.8526666667,\"yoy_price\":4.6726666667,\"absolute_change\":-0.82,\"percentage_change\":-17.548865744},{\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"current_price\":3.81625,\"yoy_price\":4.6170833333,\"absolute_change\":-0.8008333333,\"percentage_change\":-17.3450049635},{\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"current_price\":3.81875,\"yoy_price\":4.61125,\"absolute_change\":-0.7925,\"percentage_change\":-17.1862293304},{\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"current_price\":3.883,\"yoy_price\":4.5525833333,\"absolute_change\":-0.6695833333,\"percentage_change\":-14.7077666526},{\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"current_price\":3.9720833333,\"yoy_price\":4.4771666667,\"absolute_change\":-0.5050833333,\"percentage_change\":-11.2813163087},{\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"current_price\":4.0398333333,\"yoy_price\":4.4511666667,\"absolute_change\":-0.4113333333,\"percentage_change\":-9.2410229528},{\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"current_price\":4.0428333333,\"yoy_price\":4.4879166667,\"absolute_change\":-0.4450833333,\"percentage_change\":-9.9173707177},{\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"current_price\":3.9936666667,\"yoy_price\":4.5610833333,\"absolute_change\":-0.5674166667,\"percentage_change\":-12.4403924506},{\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"current_price\":3.9304166667,\"yoy_price\":4.701,\"absolute_change\":-0.7705833333,\"percentage_change\":-16.3919024321},{\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"current_price\":3.9295,\"yoy_price\":4.8656666667,\"absolute_change\":-0.9361666667,\"percentage_change\":-19.2402548469},{\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"current_price\":3.9285833333,\"yoy_price\":4.9719166667,\"absolute_change\":-1.0433333333,\"percentage_change\":-20.9845297756},{\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"current_price\":3.9719166667,\"yoy_price\":5.012,\"absolute_change\":-1.0400833333,\"percentage_change\":-20.7518621974},{\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"current_price\":3.9455833333,\"yoy_price\":5.2535,\"absolute_change\":-1.3079166667,\"percentage_change\":-24.896101012},{\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"current_price\":3.995,\"yoy_price\":5.38075,\"absolute_change\":-1.38575,\"percentage_change\":-25.7538447242},{\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"current_price\":3.98025,\"yoy_price\":5.3458333333,\"absolute_change\":-1.3655833333,\"percentage_change\":-25.5448168355},{\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"current_price\":3.9753333333,\"yoy_price\":5.2643333333,\"absolute_change\":-1.289,\"percentage_change\":-24.4855315646},{\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"current_price\":3.9385833333,\"yoy_price\":5.1664166667,\"absolute_change\":-1.2278333333,\"percentage_change\":-23.7656660806},{\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"current_price\":3.9613333333,\"yoy_price\":5.0398333333,\"absolute_change\":-1.0785,\"percentage_change\":-21.3995171798},{\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"current_price\":3.9698333333,\"yoy_price\":4.883,\"absolute_change\":-0.9131666667,\"percentage_change\":-18.7009352174},{\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"current_price\":4.0019166667,\"yoy_price\":4.7291666667,\"absolute_change\":-0.72725,\"percentage_change\":-15.3779735683},{\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"current_price\":4.1503333333,\"yoy_price\":4.5989166667,\"absolute_change\":-0.4485833333,\"percentage_change\":-9.7541087575},{\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"current_price\":4.2188333333,\"yoy_price\":4.4489166667,\"absolute_change\":-0.2300833333,\"percentage_change\":-5.1716710061},{\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"current_price\":4.2440833333,\"yoy_price\":4.349,\"absolute_change\":-0.1049166667,\"percentage_change\":-2.4124319767},{\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"current_price\":4.2770833333,\"yoy_price\":4.2890833333,\"absolute_change\":-0.012,\"percentage_change\":-0.2797800618},{\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"current_price\":4.23275,\"yoy_price\":4.2285,\"absolute_change\":0.00425,\"percentage_change\":0.1005084545},{\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"current_price\":4.22625,\"yoy_price\":4.1523333333,\"absolute_change\":0.0739166667,\"percentage_change\":1.7801236253},{\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"current_price\":4.2460833333,\"yoy_price\":4.1074166667,\"absolute_change\":0.1386666667,\"percentage_change\":3.3760068169},{\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"current_price\":4.323,\"yoy_price\":4.0789166667,\"absolute_change\":0.2440833333,\"percentage_change\":5.9840235357},{\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"current_price\":4.2991666667,\"yoy_price\":4.14825,\"absolute_change\":0.1509166667,\"percentage_change\":3.638080315},{\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"current_price\":4.28625,\"yoy_price\":4.2526666667,\"absolute_change\":0.0335833333,\"percentage_change\":0.78970058},{\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"current_price\":4.1599166667,\"yoy_price\":4.3633333333,\"absolute_change\":-0.2034166667,\"percentage_change\":-4.6619556914},{\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"current_price\":4.0485,\"yoy_price\":4.3120833333,\"absolute_change\":-0.2635833333,\"percentage_change\":-6.1126678906},{\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"current_price\":3.99475,\"yoy_price\":4.1995833333,\"absolute_change\":-0.2048333333,\"percentage_change\":-4.8774680028},{\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"current_price\":3.9290833333,\"yoy_price\":4.1658333333,\"absolute_change\":-0.23675,\"percentage_change\":-5.6831366273},{\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"current_price\":3.8448333333,\"yoy_price\":4.2105,\"absolute_change\":-0.3656666667,\"percentage_change\":-8.6846376123},{\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"current_price\":3.789,\"yoy_price\":4.17825,\"absolute_change\":-0.38925,\"percentage_change\":-9.3161012386},{\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"current_price\":3.7325833333,\"yoy_price\":4.0665,\"absolute_change\":-0.3339166667,\"percentage_change\":-8.2114021066},{\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"current_price\":3.6828333333,\"yoy_price\":3.9478333333,\"absolute_change\":-0.265,\"percentage_change\":-6.712542745},{\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"current_price\":3.6656666667,\"yoy_price\":3.7958333333,\"absolute_change\":-0.1301666667,\"percentage_change\":-3.4291986828},{\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"current_price\":3.5654166667,\"yoy_price\":3.6435833333,\"absolute_change\":-0.0781666667,\"percentage_change\":-2.1453239714},{\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"current_price\":3.4815,\"yoy_price\":3.523,\"absolute_change\":-0.0415,\"percentage_change\":-1.1779733182},{\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"current_price\":3.5409166667,\"yoy_price\":3.4898333333,\"absolute_change\":0.0510833333,\"percentage_change\":1.4637757295},{\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"current_price\":3.5228333333,\"yoy_price\":3.6025,\"absolute_change\":-0.0796666667,\"percentage_change\":-2.2114272496},{\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"current_price\":3.5079166667,\"yoy_price\":3.6311666667,\"absolute_change\":-0.12325,\"percentage_change\":-3.3942259145},{\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"current_price\":3.4788333333,\"yoy_price\":3.67775,\"absolute_change\":-0.1989166667,\"percentage_change\":-5.4086511227},{\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"current_price\":3.4768333333,\"yoy_price\":3.774,\"absolute_change\":-0.2971666667,\"percentage_change\":-7.8740505211},{\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"current_price\":3.5109166667,\"yoy_price\":3.8493333333,\"absolute_change\":-0.3384166667,\"percentage_change\":-8.7915656391},{\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"current_price\":3.54975,\"yoy_price\":3.8183333333,\"absolute_change\":-0.2685833333,\"percentage_change\":-7.034046268},{\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"current_price\":3.5989166667,\"yoy_price\":3.77675,\"absolute_change\":-0.1778333333,\"percentage_change\":-4.7086339666},{\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"current_price\":3.6731666667,\"yoy_price\":3.776,\"absolute_change\":-0.1028333333,\"percentage_change\":-2.7233403955},{\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"current_price\":3.6526666667,\"yoy_price\":3.7435833333,\"absolute_change\":-0.0909166667,\"percentage_change\":-2.428600049},{\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"current_price\":3.7561666667,\"yoy_price\":3.7944166667,\"absolute_change\":-0.03825,\"percentage_change\":-1.0080600883},{\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"current_price\":3.781,\"yoy_price\":3.8526666667,\"absolute_change\":-0.0716666667,\"percentage_change\":-1.8601834227},{\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"current_price\":3.8548333333,\"yoy_price\":3.81625,\"absolute_change\":0.0385833333,\"percentage_change\":1.0110274047},{\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"current_price\":3.9271666667,\"yoy_price\":3.81875,\"absolute_change\":0.1084166667,\"percentage_change\":2.8390616476},{\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"current_price\":3.9306666667,\"yoy_price\":3.883,\"absolute_change\":0.0476666667,\"percentage_change\":1.2275731822},{\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"current_price\":4.0188333333,\"yoy_price\":3.9720833333,\"absolute_change\":0.04675,\"percentage_change\":1.1769642295},{\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"current_price\":4.06375,\"yoy_price\":4.0398333333,\"absolute_change\":0.0239166667,\"percentage_change\":0.592021123},{\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"current_price\":4.10625,\"yoy_price\":4.0428333333,\"absolute_change\":0.0634166667,\"percentage_change\":1.5686193676},{\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"current_price\":4.09125,\"yoy_price\":3.9936666667,\"absolute_change\":0.0975833333,\"percentage_change\":2.4434521325},{\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"current_price\":4.0814166667,\"yoy_price\":3.9304166667,\"absolute_change\":0.151,\"percentage_change\":3.8418318669},{\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"current_price\":4.0420833333,\"yoy_price\":3.9295,\"absolute_change\":0.1125833333,\"percentage_change\":2.8650803749},{\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"current_price\":4.0134166667,\"yoy_price\":3.9285833333,\"absolute_change\":0.0848333333,\"percentage_change\":2.1593873958},{\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"current_price\":4.00925,\"yoy_price\":3.9719166667,\"absolute_change\":0.0373333333,\"percentage_change\":0.9399324424},{\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"current_price\":3.9465,\"yoy_price\":3.9455833333,\"absolute_change\":0.0009166667,\"percentage_change\":0.0232327286},{\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"current_price\":3.8579166667,\"yoy_price\":3.995,\"absolute_change\":-0.1370833333,\"percentage_change\":-3.431372549},{\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"current_price\":3.8586666667,\"yoy_price\":3.98025,\"absolute_change\":-0.1215833333,\"percentage_change\":-3.0546657455},{\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"current_price\":3.8534166667,\"yoy_price\":3.9753333333,\"absolute_change\":-0.1219166667,\"percentage_change\":-3.0668287775},{\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"current_price\":3.8831666667,\"yoy_price\":3.9385833333,\"absolute_change\":-0.0554166667,\"percentage_change\":-1.4070202907},{\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"current_price\":3.90025,\"yoy_price\":3.9613333333,\"absolute_change\":-0.0610833333,\"percentage_change\":-1.5419892292},{\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"current_price\":3.9055,\"yoy_price\":3.9698333333,\"absolute_change\":-0.0643333333,\"percentage_change\":-1.6205550191},{\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"current_price\":3.87175,\"yoy_price\":4.0019166667,\"absolute_change\":-0.1301666667,\"percentage_change\":-3.2526081253},{\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"current_price\":3.879,\"yoy_price\":4.1503333333,\"absolute_change\":-0.2713333333,\"percentage_change\":-6.5376274998},{\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"current_price\":3.84375,\"yoy_price\":4.2188333333,\"absolute_change\":-0.3750833333,\"percentage_change\":-8.890688579},{\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"current_price\":3.8125,\"yoy_price\":4.2440833333,\"absolute_change\":-0.4315833333,\"percentage_change\":-10.1690588859},{\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"current_price\":3.7886666667,\"yoy_price\":4.2770833333,\"absolute_change\":-0.4884166667,\"percentage_change\":-11.419386264},{\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"current_price\":3.7275,\"yoy_price\":4.23275,\"absolute_change\":-0.50525,\"percentage_change\":-11.9366841888},{\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"current_price\":3.7145,\"yoy_price\":4.22625,\"absolute_change\":-0.51175,\"percentage_change\":-12.1088435374},{\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"current_price\":3.6693333333,\"yoy_price\":4.2460833333,\"absolute_change\":-0.57675,\"percentage_change\":-13.5831059996},{\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"current_price\":3.62675,\"yoy_price\":4.323,\"absolute_change\":-0.69625,\"percentage_change\":-16.1057136248},{\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"current_price\":3.6224166667,\"yoy_price\":4.2991666667,\"absolute_change\":-0.67675,\"percentage_change\":-15.7414227563},{\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"current_price\":3.6073333333,\"yoy_price\":4.28625,\"absolute_change\":-0.6789166667,\"percentage_change\":-15.8394089628},{\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"current_price\":3.5685833333,\"yoy_price\":4.1599166667,\"absolute_change\":-0.5913333333,\"percentage_change\":-14.2150283459},{\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"current_price\":3.5970833333,\"yoy_price\":4.0485,\"absolute_change\":-0.4514166667,\"percentage_change\":-11.1502202462},{\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"current_price\":3.5735,\"yoy_price\":3.99475,\"absolute_change\":-0.42125,\"percentage_change\":-10.5450904312},{\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"current_price\":3.5249166667,\"yoy_price\":3.9290833333,\"absolute_change\":-0.4041666667,\"percentage_change\":-10.2865384208},{\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"current_price\":3.493,\"yoy_price\":3.8448333333,\"absolute_change\":-0.3518333333,\"percentage_change\":-9.1508084442},{\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"current_price\":3.4789166667,\"yoy_price\":3.789,\"absolute_change\":-0.3100833333,\"percentage_change\":-8.1837776018},{\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"current_price\":3.4660833333,\"yoy_price\":3.7325833333,\"absolute_change\":-0.2665,\"percentage_change\":-7.1398271974},{\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"current_price\":3.4660833333,\"yoy_price\":3.6828333333,\"absolute_change\":-0.21675,\"percentage_change\":-5.8854143096},{\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"current_price\":3.45425,\"yoy_price\":3.6656666667,\"absolute_change\":-0.2114166667,\"percentage_change\":-5.7674820406},{\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"current_price\":3.431,\"yoy_price\":3.5654166667,\"absolute_change\":-0.1344166667,\"percentage_change\":-3.770012855},{\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"current_price\":3.431,\"yoy_price\":3.4815,\"absolute_change\":-0.0505,\"percentage_change\":-1.4505241993},{\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"current_price\":3.4395,\"yoy_price\":3.5409166667,\"absolute_change\":-0.1014166667,\"percentage_change\":-2.8641359347},{\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"current_price\":3.4266666667,\"yoy_price\":3.5228333333,\"absolute_change\":-0.0961666667,\"percentage_change\":-2.7298102853},{\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"current_price\":3.4620833333,\"yoy_price\":3.5079166667,\"absolute_change\":-0.0458333333,\"percentage_change\":-1.3065684761},{\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"current_price\":3.4610833333,\"yoy_price\":3.4788333333,\"absolute_change\":-0.01775,\"percentage_change\":-0.5102285249},{\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"current_price\":3.5243333333,\"yoy_price\":3.4768333333,\"absolute_change\":0.0475,\"percentage_change\":1.3661857054},{\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"current_price\":3.522,\"yoy_price\":3.5109166667,\"absolute_change\":0.0110833333,\"percentage_change\":0.3156820394},{\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"current_price\":3.5101666667,\"yoy_price\":3.54975,\"absolute_change\":-0.0395833333,\"percentage_change\":-1.1151020025},{\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"current_price\":3.5611666667,\"yoy_price\":3.5989166667,\"absolute_change\":-0.03775,\"percentage_change\":-1.0489267604},{\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"current_price\":3.5964166667,\"yoy_price\":3.6731666667,\"absolute_change\":-0.07675,\"percentage_change\":-2.089477744},{\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"current_price\":3.57775,\"yoy_price\":3.6526666667,\"absolute_change\":-0.0749166667,\"percentage_change\":-2.0510129586},{\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"current_price\":3.5271666667,\"yoy_price\":3.7561666667,\"absolute_change\":-0.229,\"percentage_change\":-6.0966410791},{\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"current_price\":3.51375,\"yoy_price\":3.781,\"absolute_change\":-0.26725,\"percentage_change\":-7.0682359164},{\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"current_price\":3.4978333333,\"yoy_price\":3.8548333333,\"absolute_change\":-0.357,\"percentage_change\":-9.2611007826},{\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"current_price\":3.5485833333,\"yoy_price\":3.9271666667,\"absolute_change\":-0.3785833333,\"percentage_change\":-9.6401137376},{\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"current_price\":3.6035,\"yoy_price\":3.9306666667,\"absolute_change\":-0.3271666667,\"percentage_change\":-8.3234396201},{\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"current_price\":3.6863333333,\"yoy_price\":4.0188333333,\"absolute_change\":-0.3325,\"percentage_change\":-8.2735453905},{\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"current_price\":3.613,\"yoy_price\":4.06375,\"absolute_change\":-0.45075,\"percentage_change\":-11.091971701},{\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"current_price\":3.58525,\"yoy_price\":4.10625,\"absolute_change\":-0.521,\"percentage_change\":-12.6879756469},{\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"current_price\":3.57875,\"yoy_price\":4.09125,\"absolute_change\":-0.5125,\"percentage_change\":-12.5267338833},{\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"current_price\":3.5851666667,\"yoy_price\":4.0814166667,\"absolute_change\":-0.49625,\"percentage_change\":-12.1587684015},{\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"current_price\":3.5728333333,\"yoy_price\":4.0420833333,\"absolute_change\":-0.46925,\"percentage_change\":-11.6091124626},{\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"current_price\":3.6244166667,\"yoy_price\":4.0134166667,\"absolute_change\":-0.389,\"percentage_change\":-9.6924897739},{\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"current_price\":3.6089166667,\"yoy_price\":4.00925,\"absolute_change\":-0.4003333333,\"percentage_change\":-9.9852424601},{\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"current_price\":3.5746666667,\"yoy_price\":3.9465,\"absolute_change\":-0.3718333333,\"percentage_change\":-9.4218505849},{\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"current_price\":3.5501666667,\"yoy_price\":3.8579166667,\"absolute_change\":-0.30775,\"percentage_change\":-7.9771033589},{\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"current_price\":3.5765,\"yoy_price\":3.8586666667,\"absolute_change\":-0.2821666667,\"percentage_change\":-7.3125431928},{\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"current_price\":3.6445833333,\"yoy_price\":3.8534166667,\"absolute_change\":-0.2088333333,\"percentage_change\":-5.4194329707}],\"metadata\":{\"date\":{\"type\":\"date\",\"semanticType\":\"Date\"},\"fuel\":{\"type\":\"string\",\"semanticType\":\"String\"},\"current_price\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"yoy_price\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"absolute_change\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"percentage_change\":{\"type\":\"number\",\"semanticType\":\"Percentage\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    df_agg = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Convert date to datetime for proper sorting and manipulation\\n    df_agg['date'] = pd.to_datetime(df_agg['date'])\\n    \\n    # Sort by fuel and date\\n    df_agg = df_agg.sort_values(['fuel', 'date'])\\n    \\n    # Calculate year-over-year changes (52 weeks ago for weekly data)\\n    df_agg['yoy_price'] = df_agg.groupby('fuel')['price'].shift(52)\\n    df_agg['absolute_change'] = df_agg['price'] - df_agg['yoy_price']\\n    df_agg['percentage_change'] = ((df_agg['price'] - df_agg['yoy_price']) / df_agg['yoy_price']) * 100\\n    \\n    # Rename columns for clarity\\n    transformed_df = df_agg.rename(columns={'price': 'current_price'})\\n    \\n    # Convert date back to string format for visualization\\n    transformed_df['date'] = transformed_df['date'].dt.strftime('%Y-%m-%d')\\n    \\n    # Keep only rows where we have year-over-year data (remove first 52 weeks)\\n    transformed_df = transformed_df.dropna(subset=['yoy_price'])\\n    \\n    # Select and order output columns\\n    transformed_df = transformed_df[['date', 'fuel', 'current_price', 'yoy_price', 'absolute_change', 'percentage_change']]\\n    \\n    return transformed_df\\n\",\"source\":[\"weekly_gas_prices\"],\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\". \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- you can use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (weekly_gas_prices)\\n\\n## fields\\n\\t*date -- type: object, values: 1990-08-20, 1990-08-27, 1990-09-03, ..., 2025-06-02, 2025-06-09, 2025-06-16, 2025-06-23\\n\\t*fuel -- type: object, values: diesel, gasoline\\n\\t*grade -- type: object, values: all, low_sulfur, midgrade, premium, regular, ultra_low_sulfur\\n\\t*formulation -- type: object, values: NA, all, conventional, reformulated\\n\\t*price -- type: float64, values: 0.885, 0.891, 0.899, ..., 5.955, 5.964, 6.033, 6.064\\n\\n## sample\\n         date      fuel    grade   formulation  price\\n0  1990-08-20  gasoline  regular           all  1.191\\n1  1990-08-20  gasoline  regular  conventional  1.191\\n2  1990-08-27  gasoline  regular           all  1.245\\n3  1990-08-27  gasoline  regular  conventional  1.245\\n4  1990-09-03  gasoline  regular           all  1.242\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nWhat are the major **price trends** across all fuel types from 1990 to 2025?\"},{\"role\":\"assistant\",\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to visualize the major price trends across all fuel types from 1990 to 2025 to understand how fuel prices have evolved over time.\\\",\\n    \\\"display_instruction\\\": \\\"Show **price** trends over time for different **fuel** types\\\",\\n    \\\"recommendation\\\": \\\"To visualize price trends over time across fuel types, we should aggregate the data by date and fuel type. Since there are multiple grades and formulations for each fuel type, we'll calculate the average price for each fuel type on each date. A line chart with date on the x-axis, average price on the y-axis, and different colored lines for each fuel type will clearly show the trends and allow easy comparison.\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"fuel\\\", \\\"avg_price\\\"],\\n    \\\"chart_type\\\": \\\"line\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"avg_price\\\",\\n        \\\"color\\\": \\\"fuel\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    transformed_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Rename the price column to avg_price for clarity\\n    transformed_df = transformed_df.rename(columns={'price': 'avg_price'})\\n    \\n    # Sort by date for proper line chart rendering\\n    transformed_df = transformed_df.sort_values('date')\\n    \\n    return transformed_df\\n```\"},{\"role\":\"user\",\"content\":\"This is the result from the latest python code:\\n\\n         date      fuel  avg_price\\n0  1990-08-20  gasoline      1.191\\n1  1990-08-27  gasoline      1.245\\n2  1990-09-03  gasoline      1.242\\n3  1990-09-10  gasoline      1.252\\n4  1990-09-17  gasoline      1.266\\n5  1990-09-24  gasoline      1.272\\n6  1990-10-01  gasoline      1.321\\n7  1990-10-08  gasoline      1.333\\n8  1990-10-15  gasoline      1.339\\n9  1990-10-22  gasoline      1.345\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\nCalculate year-over-year price changes to identify the most dramatic price spikes for both diesel and gasoline, showing which periods had the largest absolute and percentage increases with their peak prices.\"},{\"role\":\"assistant\",\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to identify the most dramatic price spikes by calculating year-over-year price changes for both diesel and gasoline, showing periods with the largest absolute and percentage increases along with their peak prices.\\\",\\n    \\\"display_instruction\\\": \\\"Identify periods with largest **year-over-year price changes** (absolute and percentage) and **peak prices**\\\",\\n    \\\"recommendation\\\": \\\"To analyze year-over-year price changes, we need to calculate the price difference and percentage change compared to the same period one year prior. We'll compute both absolute change and percentage change, then identify the periods with the most dramatic spikes. The output should include the date, fuel type, current price, previous year's price, absolute change, and percentage change to provide a comprehensive view of price volatility.\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"fuel\\\", \\\"current_price\\\", \\\"yoy_price\\\", \\\"absolute_change\\\", \\\"percentage_change\\\"],\\n    \\\"chart_type\\\": \\\"point\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"absolute_change\\\",\\n        \\\"color\\\": \\\"fuel\\\",\\n        \\\"size\\\": \\\"percentage_change\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    df_agg = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Convert date to datetime for proper sorting and manipulation\\n    df_agg['date'] = pd.to_datetime(df_agg['date'])\\n    \\n    # Sort by fuel and date\\n    df_agg = df_agg.sort_values(['fuel', 'date'])\\n    \\n    # Calculate year-over-year changes (52 weeks ago for weekly data)\\n    df_agg['yoy_price'] = df_agg.groupby('fuel')['price'].shift(52)\\n    df_agg['absolute_change'] = df_agg['price'] - df_agg['yoy_price']\\n    df_agg['percentage_change'] = ((df_agg['price'] - df_agg['yoy_price']) / df_agg['yoy_price']) * 100\\n    \\n    # Rename columns for clarity\\n    transformed_df = df_agg.rename(columns={'price': 'current_price'})\\n    \\n    # Convert date back to string format for visualization\\n    transformed_df['date'] = transformed_df['date'].dt.strftime('%Y-%m-%d')\\n    \\n    # Keep only rows where we have year-over-year data (remove first 52 weeks)\\n    transformed_df = transformed_df.dropna(subset=['yoy_price'])\\n    \\n    # Select and order output columns\\n    transformed_df = transformed_df[['date', 'fuel', 'current_price', 'yoy_price', 'absolute_change', 'percentage_change']]\\n    \\n    return transformed_df\\n```\"}],\"trigger\":{\"tableId\":\"table-904593\",\"sourceTableIds\":[\"weekly_gas_prices\"],\"instruction\":\"Calculate year-over-year price changes to identify the most dramatic price spikes for both diesel and gasoline, showing which periods had the largest absolute and percentage increases with their peak prices.\",\"displayInstruction\":\"Identify periods with largest **year-over-year price changes** (absolute and percentage) and **peak prices**\",\"chart\":{\"id\":\"chart-1760744928220\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"weekly_gas_prices\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-922023\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"The code analyzes **year-over-year price trends** for different fuel types by performing the following steps:\\n\\n- Aggregates the data by **date** and **fuel** type, calculating the **average price** across all grades and formulations for each fuel type on each date\\n- Converts **date** field to datetime format and sorts the data chronologically by **fuel** and **date**\\n- Calculates **year-over-year comparisons** by comparing each week's price to the price from **52 weeks ago** (one year prior)\\n- Computes both **absolute change** (dollar difference) and **percentage change** between current prices and prices from one year ago\\n- Removes the first **52 weeks** of data where year-over-year comparisons are not available\\n- Returns a dataset containing **current prices**, **year-ago prices**, and their **changes** for each fuel type over time\",\"concepts\":[{\"explanation\":\"The average fuel price from exactly 52 weeks (one year) prior to the current date, used as a baseline for year-over-year comparison. This represents the historical price point from the same week in the previous year.\",\"field\":\"yoy_price\"},{\"explanation\":\"The dollar amount difference between the current week's price and the price from one year ago, calculated as: \\\\( \\\\text{absolute\\\\_change} = \\\\text{current\\\\_price} - \\\\text{yoy\\\\_price} \\\\). A positive value indicates price increase, while a negative value indicates price decrease.\",\"field\":\"absolute_change\"},{\"explanation\":\"The year-over-year price change expressed as a percentage, calculated as: \\\\( \\\\text{percentage\\\\_change} = \\\\frac{\\\\text{current\\\\_price} - \\\\text{yoy\\\\_price}}{\\\\text{yoy\\\\_price}} \\\\times 100 \\\\). This metric normalizes price changes to allow comparison across different price levels and time periods.\",\"field\":\"percentage_change\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (weekly_gas_prices)\\n\\n## fields\\n\\t*date -- type: object, values: 1990-08-20, 1990-08-27, 1990-09-03, ..., 2025-06-02, 2025-06-09, 2025-06-16, 2025-06-23\\n\\t*fuel -- type: object, values: diesel, gasoline\\n\\t*grade -- type: object, values: all, low_sulfur, midgrade, premium, regular, ultra_low_sulfur\\n\\t*formulation -- type: object, values: NA, all, conventional, reformulated\\n\\t*price -- type: float64, values: 0.885, 0.891, 0.899, ..., 5.955, 5.964, 6.033, 6.064\\n\\n## sample\\n         date      fuel    grade   formulation  price\\n0  1990-08-20  gasoline  regular           all  1.191\\n1  1990-08-20  gasoline  regular  conventional  1.191\\n2  1990-08-27  gasoline  regular           all  1.245\\n3  1990-08-27  gasoline  regular  conventional  1.245\\n4  1990-09-03  gasoline  regular           all  1.242\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    df_agg = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Convert date to datetime for proper sorting and manipulation\\n    df_agg['date'] = pd.to_datetime(df_agg['date'])\\n    \\n    # Sort by fuel and date\\n    df_agg = df_agg.sort_values(['fuel', 'date'])\\n    \\n    # Calculate year-over-year changes (52 weeks ago for weekly data)\\n    df_agg['yoy_price'] = df_agg.groupby('fuel')['price'].shift(52)\\n    df_agg['absolute_change'] = df_agg['price'] - df_agg['yoy_price']\\n    df_agg['percentage_change'] = ((df_agg['price'] - df_agg['yoy_price']) / df_agg['yoy_price']) * 100\\n    \\n    # Rename columns for clarity\\n    transformed_df = df_agg.rename(columns={'price': 'current_price'})\\n    \\n    # Convert date back to string format for visualization\\n    transformed_df['date'] = transformed_df['date'].dt.strftime('%Y-%m-%d')\\n    \\n    # Keep only rows where we have year-over-year data (remove first 52 weeks)\\n    transformed_df = transformed_df.dropna(subset=['yoy_price'])\\n    \\n    # Select and order output columns\\n    transformed_df = transformed_df[['date', 'fuel', 'current_price', 'yoy_price', 'absolute_change', 'percentage_change']]\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThe code analyzes **year-over-year price trends** for different fuel types by performing the following steps:\\n\\n- Aggregates the data by **date** and **fuel** type, calculating the **average price** across all grades and formulations for each fuel type on each date\\n- Converts **date** field to datetime format and sorts the data chronologically by **fuel** and **date**\\n- Calculates **year-over-year comparisons** by comparing each week's price to the price from **52 weeks ago** (one year prior)\\n- Computes both **absolute change** (dollar difference) and **percentage change** between current prices and prices from one year ago\\n- Removes the first **52 weeks** of data where year-over-year comparisons are not available\\n- Returns a dataset containing **current prices**, **year-ago prices**, and their **changes** for each fuel type over time\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"yoy_price\\\",\\n        \\\"explanation\\\": \\\"The average fuel price from exactly 52 weeks (one year) prior to the current date, used as a baseline for year-over-year comparison. This represents the historical price point from the same week in the previous year.\\\"\\n    },\\n    {\\n        \\\"field\\\": \\\"absolute_change\\\",\\n        \\\"explanation\\\": \\\"The dollar amount difference between the current week's price and the price from one year ago, calculated as: \\\\\\\\( \\\\\\\\text{absolute\\\\\\\\_change} = \\\\\\\\text{current\\\\\\\\_price} - \\\\\\\\text{yoy\\\\\\\\_price} \\\\\\\\). A positive value indicates price increase, while a negative value indicates price decrease.\\\"\\n    },\\n    {\\n        \\\"field\\\": \\\"percentage_change\\\",\\n        \\\"explanation\\\": \\\"The year-over-year price change expressed as a percentage, calculated as: \\\\\\\\( \\\\\\\\text{percentage\\\\\\\\_change} = \\\\\\\\frac{\\\\\\\\text{current\\\\\\\\_price} - \\\\\\\\text{yoy\\\\\\\\_price}}{\\\\\\\\text{yoy\\\\\\\\_price}} \\\\\\\\times 100 \\\\\\\\). This metric normalizes price changes to allow comparison across different price levels and time periods.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-937785\",\"displayId\":\"fuel-price-stats\",\"names\":[\"period\",\"fuel\",\"avg_price\",\"std_dev\",\"coefficient_of_variation\"],\"rows\":[{\"period\":\"Post-2000 (2000-2025)\",\"fuel\":\"diesel\",\"avg_price\":2.933,\"std_dev\":0.982,\"coefficient_of_variation\":33.48},{\"period\":\"Post-2000 (2000-2025)\",\"fuel\":\"gasoline\",\"avg_price\":2.847,\"std_dev\":0.838,\"coefficient_of_variation\":29.43},{\"period\":\"Pre-2000 (1990-1999)\",\"fuel\":\"diesel\",\"avg_price\":1.138,\"std_dev\":0.087,\"coefficient_of_variation\":7.65},{\"period\":\"Pre-2000 (1990-1999)\",\"fuel\":\"gasoline\",\"avg_price\":1.171,\"std_dev\":0.106,\"coefficient_of_variation\":9.09}],\"metadata\":{\"period\":{\"type\":\"string\",\"semanticType\":\"TimeRange\",\"levels\":[\"Pre-2000 (1990-1999)\",\"Post-2000 (2000-2025)\"]},\"fuel\":{\"type\":\"string\",\"semanticType\":\"String\"},\"avg_price\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"std_dev\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"coefficient_of_variation\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    df_agg = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Convert date to datetime for period classification\\n    df_agg['date'] = pd.to_datetime(df_agg['date'])\\n    \\n    # Extract year for period classification\\n    df_agg['year'] = df_agg['date'].dt.year\\n    \\n    # Classify into pre-2000 and post-2000 periods\\n    df_agg['period'] = df_agg['year'].apply(lambda x: 'Pre-2000 (1990-1999)' if x < 2000 else 'Post-2000 (2000-2025)')\\n    \\n    # Calculate volatility metrics by period and fuel\\n    volatility_stats = df_agg.groupby(['period', 'fuel']).agg({\\n        'price': ['mean', 'std']\\n    }).reset_index()\\n    \\n    # Flatten column names\\n    volatility_stats.columns = ['period', 'fuel', 'avg_price', 'std_dev']\\n    \\n    # Calculate coefficient of variation (CV = std_dev / mean * 100)\\n    volatility_stats['coefficient_of_variation'] = (volatility_stats['std_dev'] / volatility_stats['avg_price']) * 100\\n    \\n    # Round values for readability\\n    volatility_stats['avg_price'] = volatility_stats['avg_price'].round(3)\\n    volatility_stats['std_dev'] = volatility_stats['std_dev'].round(3)\\n    volatility_stats['coefficient_of_variation'] = volatility_stats['coefficient_of_variation'].round(2)\\n    \\n    transformed_df = volatility_stats[['period', 'fuel', 'avg_price', 'std_dev', 'coefficient_of_variation']]\\n    \\n    return transformed_df\\n\",\"source\":[\"weekly_gas_prices\"],\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\". \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- you can use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (weekly_gas_prices)\\n\\n## fields\\n\\t*date -- type: object, values: 1990-08-20, 1990-08-27, 1990-09-03, ..., 2025-06-02, 2025-06-09, 2025-06-16, 2025-06-23\\n\\t*fuel -- type: object, values: diesel, gasoline\\n\\t*grade -- type: object, values: all, low_sulfur, midgrade, premium, regular, ultra_low_sulfur\\n\\t*formulation -- type: object, values: NA, all, conventional, reformulated\\n\\t*price -- type: float64, values: 0.885, 0.891, 0.899, ..., 5.955, 5.964, 6.033, 6.064\\n\\n## sample\\n         date      fuel    grade   formulation  price\\n0  1990-08-20  gasoline  regular           all  1.191\\n1  1990-08-20  gasoline  regular  conventional  1.191\\n2  1990-08-27  gasoline  regular           all  1.245\\n3  1990-08-27  gasoline  regular  conventional  1.245\\n4  1990-09-03  gasoline  regular           all  1.242\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nWhat are the major **price trends** across all fuel types from 1990 to 2025?\"},{\"role\":\"assistant\",\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to visualize the major price trends across all fuel types from 1990 to 2025 to understand how fuel prices have evolved over time.\\\",\\n    \\\"display_instruction\\\": \\\"Show **price** trends over time for different **fuel** types\\\",\\n    \\\"recommendation\\\": \\\"To visualize price trends over time across fuel types, we should aggregate the data by date and fuel type. Since there are multiple grades and formulations for each fuel type, we'll calculate the average price for each fuel type on each date. A line chart with date on the x-axis, average price on the y-axis, and different colored lines for each fuel type will clearly show the trends and allow easy comparison.\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"fuel\\\", \\\"avg_price\\\"],\\n    \\\"chart_type\\\": \\\"line\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"avg_price\\\",\\n        \\\"color\\\": \\\"fuel\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    transformed_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Rename the price column to avg_price for clarity\\n    transformed_df = transformed_df.rename(columns={'price': 'avg_price'})\\n    \\n    # Sort by date for proper line chart rendering\\n    transformed_df = transformed_df.sort_values('date')\\n    \\n    return transformed_df\\n```\"},{\"role\":\"user\",\"content\":\"This is the result from the latest python code:\\n\\n         date      fuel  avg_price\\n0  1990-08-20  gasoline      1.191\\n1  1990-08-27  gasoline      1.245\\n2  1990-09-03  gasoline      1.242\\n3  1990-09-10  gasoline      1.252\\n4  1990-09-17  gasoline      1.266\\n5  1990-09-24  gasoline      1.272\\n6  1990-10-01  gasoline      1.321\\n7  1990-10-08  gasoline      1.333\\n8  1990-10-15  gasoline      1.339\\n9  1990-10-22  gasoline      1.345\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\nCalculate year-over-year price changes to identify the most dramatic price spikes for both diesel and gasoline, showing which periods had the largest absolute and percentage increases with their peak prices.\"},{\"role\":\"assistant\",\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to identify the most dramatic price spikes by calculating year-over-year price changes for both diesel and gasoline, showing periods with the largest absolute and percentage increases along with their peak prices.\\\",\\n    \\\"display_instruction\\\": \\\"Identify periods with largest **year-over-year price changes** (absolute and percentage) and **peak prices**\\\",\\n    \\\"recommendation\\\": \\\"To analyze year-over-year price changes, we need to calculate the price difference and percentage change compared to the same period one year prior. We'll compute both absolute change and percentage change, then identify the periods with the most dramatic spikes. The output should include the date, fuel type, current price, previous year's price, absolute change, and percentage change to provide a comprehensive view of price volatility.\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"fuel\\\", \\\"current_price\\\", \\\"yoy_price\\\", \\\"absolute_change\\\", \\\"percentage_change\\\"],\\n    \\\"chart_type\\\": \\\"point\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"absolute_change\\\",\\n        \\\"color\\\": \\\"fuel\\\",\\n        \\\"size\\\": \\\"percentage_change\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    df_agg = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Convert date to datetime for proper sorting and manipulation\\n    df_agg['date'] = pd.to_datetime(df_agg['date'])\\n    \\n    # Sort by fuel and date\\n    df_agg = df_agg.sort_values(['fuel', 'date'])\\n    \\n    # Calculate year-over-year changes (52 weeks ago for weekly data)\\n    df_agg['yoy_price'] = df_agg.groupby('fuel')['price'].shift(52)\\n    df_agg['absolute_change'] = df_agg['price'] - df_agg['yoy_price']\\n    df_agg['percentage_change'] = ((df_agg['price'] - df_agg['yoy_price']) / df_agg['yoy_price']) * 100\\n    \\n    # Rename columns for clarity\\n    transformed_df = df_agg.rename(columns={'price': 'current_price'})\\n    \\n    # Convert date back to string format for visualization\\n    transformed_df['date'] = transformed_df['date'].dt.strftime('%Y-%m-%d')\\n    \\n    # Keep only rows where we have year-over-year data (remove first 52 weeks)\\n    transformed_df = transformed_df.dropna(subset=['yoy_price'])\\n    \\n    # Select and order output columns\\n    transformed_df = transformed_df[['date', 'fuel', 'current_price', 'yoy_price', 'absolute_change', 'percentage_change']]\\n    \\n    return transformed_df\\n```\"},{\"role\":\"user\",\"content\":\"This is the result from the latest python code:\\n\\n         date    fuel  current_price  yoy_price  absolute_change  percentage_change\\n0  1995-03-20  diesel          1.085      1.106           -0.021          -1.898734\\n1  1995-03-27  diesel          1.088      1.107           -0.019          -1.716350\\n2  1995-04-03  diesel          1.094      1.109           -0.015          -1.352570\\n3  1995-04-10  diesel          1.101      1.108           -0.007          -0.631769\\n4  1995-04-17  diesel          1.106      1.105            0.001           0.090498\\n5  1995-04-24  diesel          1.115      1.106            0.009           0.813743\\n6  1995-05-01  diesel          1.119      1.104            0.015           1.358696\\n7  1995-05-08  diesel          1.126      1.101            0.025           2.270663\\n8  1995-05-15  diesel          1.126      1.099            0.027           2.456779\\n9  1995-05-22  diesel          1.124      1.099            0.025           2.274795\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\nCompare price volatility (standard deviation and coefficient of variation) between pre-2000 (1990-1999) and post-2000 (2000-2025) periods for both fuel types to show how price stability has changed over time.\"},{\"role\":\"assistant\",\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to compare price volatility between pre-2000 (1990-1999) and post-2000 (2000-2025) periods for both fuel types by calculating standard deviation and coefficient of variation to understand how price stability has changed over time.\\\",\\n    \\\"display_instruction\\\": \\\"Compare **price volatility** (standard deviation and coefficient of variation) between **pre-2000** and **post-2000** periods\\\",\\n    \\\"recommendation\\\": \\\"To analyze price volatility across different time periods, we need to segment the data into pre-2000 (1990-1999) and post-2000 (2000-2025) periods, then calculate volatility metrics including standard deviation and coefficient of variation for each fuel type in each period. A grouped bar chart comparing these metrics across periods and fuel types will clearly show how price stability has evolved.\\\",\\n    \\\"output_fields\\\": [\\\"period\\\", \\\"fuel\\\", \\\"avg_price\\\", \\\"std_dev\\\", \\\"coefficient_of_variation\\\"],\\n    \\\"chart_type\\\": \\\"group_bar\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"period\\\",\\n        \\\"y\\\": \\\"coefficient_of_variation\\\",\\n        \\\"color\\\": \\\"fuel\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    df_agg = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Convert date to datetime for period classification\\n    df_agg['date'] = pd.to_datetime(df_agg['date'])\\n    \\n    # Extract year for period classification\\n    df_agg['year'] = df_agg['date'].dt.year\\n    \\n    # Classify into pre-2000 and post-2000 periods\\n    df_agg['period'] = df_agg['year'].apply(lambda x: 'Pre-2000 (1990-1999)' if x < 2000 else 'Post-2000 (2000-2025)')\\n    \\n    # Calculate volatility metrics by period and fuel\\n    volatility_stats = df_agg.groupby(['period', 'fuel']).agg({\\n        'price': ['mean', 'std']\\n    }).reset_index()\\n    \\n    # Flatten column names\\n    volatility_stats.columns = ['period', 'fuel', 'avg_price', 'std_dev']\\n    \\n    # Calculate coefficient of variation (CV = std_dev / mean * 100)\\n    volatility_stats['coefficient_of_variation'] = (volatility_stats['std_dev'] / volatility_stats['avg_price']) * 100\\n    \\n    # Round values for readability\\n    volatility_stats['avg_price'] = volatility_stats['avg_price'].round(3)\\n    volatility_stats['std_dev'] = volatility_stats['std_dev'].round(3)\\n    volatility_stats['coefficient_of_variation'] = volatility_stats['coefficient_of_variation'].round(2)\\n    \\n    transformed_df = volatility_stats[['period', 'fuel', 'avg_price', 'std_dev', 'coefficient_of_variation']]\\n    \\n    return transformed_df\\n```\"}],\"trigger\":{\"tableId\":\"table-922023\",\"sourceTableIds\":[\"weekly_gas_prices\"],\"instruction\":\"Compare price volatility (standard deviation and coefficient of variation) between pre-2000 (1990-1999) and post-2000 (2000-2025) periods for both fuel types to show how price stability has changed over time.\",\"displayInstruction\":\"Compare **price volatility** (standard deviation and coefficient of variation) between **pre-2000** and **post-2000** periods\",\"chart\":{\"id\":\"chart-1760744940045\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"weekly_gas_prices\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-937785\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"This code performs a statistical analysis of **gas price volatility** across two time periods:\\n\\n1. **Aggregate prices** by computing the mean **price** for each **date** and **fuel** type, averaging across all **grades** and **formulations**\\n2. **Convert dates** to datetime format and extract the **year** from each date\\n3. **Classify data** into two time periods: **Pre-2000 (1990-1999)** and **Post-2000 (2000-2025)** based on the year\\n4. **Calculate volatility metrics** for each **period** and **fuel** type combination:\\n   - Compute the **mean price** (average price level)\\n   - Compute the **standard deviation** (absolute price variability)\\n   - Calculate the **coefficient of variation** to measure relative volatility\\n5. **Round numerical values** for improved readability (**avg_price** and **std_dev** to 3 decimals, **coefficient_of_variation** to 2 decimals)\\n6. **Return summary statistics** showing volatility characteristics for **diesel** and **gasoline** in each time period\",\"concepts\":[{\"explanation\":\"A normalized measure of price volatility that indicates the relative variability of prices independent of their absolute level. Calculated as \\\\( \\\\frac{\\\\text{std\\\\_dev}}{\\\\text{avg\\\\_price}} \\\\times 100 \\\\), this metric allows for fair comparison of price volatility between different time periods or fuel types that may have substantially different average price levels. A higher coefficient indicates more relative price instability.\",\"field\":\"coefficient_of_variation\"},{\"explanation\":\"This analysis employs a **comparative volatility assessment** framework to examine fuel price stability across two distinct time periods. The approach uses **temporal aggregation** (grouping by date and fuel) followed by **period-based stratification** (pre-2000 vs. post-2000) to compute **descriptive volatility statistics** (mean, standard deviation, and coefficient of variation). This methodology allows for direct comparison of both absolute and relative price fluctuations across time periods and fuel types. **Alternative approaches** could include: (1) time series decomposition to separate trend, seasonal, and irregular components; (2) GARCH models to capture time-varying volatility; (3) moving window analysis to track volatility changes over shorter intervals; or (4) regime-switching models to identify distinct volatility states.\",\"field\":\"Statistical Analysis\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (weekly_gas_prices)\\n\\n## fields\\n\\t*date -- type: object, values: 1990-08-20, 1990-08-27, 1990-09-03, ..., 2025-06-02, 2025-06-09, 2025-06-16, 2025-06-23\\n\\t*fuel -- type: object, values: diesel, gasoline\\n\\t*grade -- type: object, values: all, low_sulfur, midgrade, premium, regular, ultra_low_sulfur\\n\\t*formulation -- type: object, values: NA, all, conventional, reformulated\\n\\t*price -- type: float64, values: 0.885, 0.891, 0.899, ..., 5.955, 5.964, 6.033, 6.064\\n\\n## sample\\n         date      fuel    grade   formulation  price\\n0  1990-08-20  gasoline  regular           all  1.191\\n1  1990-08-20  gasoline  regular  conventional  1.191\\n2  1990-08-27  gasoline  regular           all  1.245\\n3  1990-08-27  gasoline  regular  conventional  1.245\\n4  1990-09-03  gasoline  regular           all  1.242\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    df_agg = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Convert date to datetime for period classification\\n    df_agg['date'] = pd.to_datetime(df_agg['date'])\\n    \\n    # Extract year for period classification\\n    df_agg['year'] = df_agg['date'].dt.year\\n    \\n    # Classify into pre-2000 and post-2000 periods\\n    df_agg['period'] = df_agg['year'].apply(lambda x: 'Pre-2000 (1990-1999)' if x < 2000 else 'Post-2000 (2000-2025)')\\n    \\n    # Calculate volatility metrics by period and fuel\\n    volatility_stats = df_agg.groupby(['period', 'fuel']).agg({\\n        'price': ['mean', 'std']\\n    }).reset_index()\\n    \\n    # Flatten column names\\n    volatility_stats.columns = ['period', 'fuel', 'avg_price', 'std_dev']\\n    \\n    # Calculate coefficient of variation (CV = std_dev / mean * 100)\\n    volatility_stats['coefficient_of_variation'] = (volatility_stats['std_dev'] / volatility_stats['avg_price']) * 100\\n    \\n    # Round values for readability\\n    volatility_stats['avg_price'] = volatility_stats['avg_price'].round(3)\\n    volatility_stats['std_dev'] = volatility_stats['std_dev'].round(3)\\n    volatility_stats['coefficient_of_variation'] = volatility_stats['coefficient_of_variation'].round(2)\\n    \\n    transformed_df = volatility_stats[['period', 'fuel', 'avg_price', 'std_dev', 'coefficient_of_variation']]\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThis code performs a statistical analysis of **gas price volatility** across two time periods:\\n\\n1. **Aggregate prices** by computing the mean **price** for each **date** and **fuel** type, averaging across all **grades** and **formulations**\\n2. **Convert dates** to datetime format and extract the **year** from each date\\n3. **Classify data** into two time periods: **Pre-2000 (1990-1999)** and **Post-2000 (2000-2025)** based on the year\\n4. **Calculate volatility metrics** for each **period** and **fuel** type combination:\\n   - Compute the **mean price** (average price level)\\n   - Compute the **standard deviation** (absolute price variability)\\n   - Calculate the **coefficient of variation** to measure relative volatility\\n5. **Round numerical values** for improved readability (**avg_price** and **std_dev** to 3 decimals, **coefficient_of_variation** to 2 decimals)\\n6. **Return summary statistics** showing volatility characteristics for **diesel** and **gasoline** in each time period\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"coefficient_of_variation\\\",\\n        \\\"explanation\\\": \\\"A normalized measure of price volatility that indicates the relative variability of prices independent of their absolute level. Calculated as \\\\\\\\( \\\\\\\\frac{\\\\\\\\text{std\\\\\\\\_dev}}{\\\\\\\\text{avg\\\\\\\\_price}} \\\\\\\\times 100 \\\\\\\\), this metric allows for fair comparison of price volatility between different time periods or fuel types that may have substantially different average price levels. A higher coefficient indicates more relative price instability.\\\"\\n    },\\n    {\\n        \\\"field\\\": \\\"Statistical Analysis\\\",\\n        \\\"explanation\\\": \\\"This analysis employs a **comparative volatility assessment** framework to examine fuel price stability across two distinct time periods. The approach uses **temporal aggregation** (grouping by date and fuel) followed by **period-based stratification** (pre-2000 vs. post-2000) to compute **descriptive volatility statistics** (mean, standard deviation, and coefficient of variation). This methodology allows for direct comparison of both absolute and relative price fluctuations across time periods and fuel types. **Alternative approaches** could include: (1) time series decomposition to separate trend, seasonal, and irregular components; (2) GARCH models to capture time-varying volatility; (3) moving window analysis to track volatility changes over shorter intervals; or (4) regime-switching models to identify distinct volatility states.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-34\",\"displayId\":\"fuel-price-forecast\",\"names\":[\"avg_price\",\"date\",\"fuel\",\"is_predicted\"],\"rows\":[{\"avg_price\":1.106,\"date\":\"1994-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0292206988,\"date\":\"1994-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.107,\"date\":\"1994-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0311478914,\"date\":\"1994-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.109,\"date\":\"1994-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0330750841,\"date\":\"1994-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.108,\"date\":\"1994-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0350022767,\"date\":\"1994-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.105,\"date\":\"1994-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0369294694,\"date\":\"1994-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1994-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.038856662,\"date\":\"1994-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.104,\"date\":\"1994-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0407838547,\"date\":\"1994-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.101,\"date\":\"1994-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0427110473,\"date\":\"1994-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1994-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.04463824,\"date\":\"1994-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1994-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0465654326,\"date\":\"1994-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.098,\"date\":\"1994-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0484926253,\"date\":\"1994-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.101,\"date\":\"1994-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0504198179,\"date\":\"1994-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.098,\"date\":\"1994-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0523470106,\"date\":\"1994-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.103,\"date\":\"1994-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0542742032,\"date\":\"1994-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.108,\"date\":\"1994-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0562013959,\"date\":\"1994-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.109,\"date\":\"1994-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0581285885,\"date\":\"1994-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.11,\"date\":\"1994-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0600557812,\"date\":\"1994-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.111,\"date\":\"1994-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0619829738,\"date\":\"1994-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.111,\"date\":\"1994-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0639101665,\"date\":\"1994-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.116,\"date\":\"1994-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0658373591,\"date\":\"1994-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.127,\"date\":\"1994-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0677645518,\"date\":\"1994-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.127,\"date\":\"1994-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0696917444,\"date\":\"1994-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1994-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0716189371,\"date\":\"1994-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.122,\"date\":\"1994-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0735461297,\"date\":\"1994-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1994-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0754733223,\"date\":\"1994-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.128,\"date\":\"1994-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.077400515,\"date\":\"1994-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1994-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0793277076,\"date\":\"1994-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.12,\"date\":\"1994-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0812549003,\"date\":\"1994-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.118,\"date\":\"1994-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0831820929,\"date\":\"1994-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.117,\"date\":\"1994-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0851092856,\"date\":\"1994-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.119,\"date\":\"1994-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0870364782,\"date\":\"1994-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.122,\"date\":\"1994-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0889636709,\"date\":\"1994-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.133,\"date\":\"1994-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0908908635,\"date\":\"1994-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.133,\"date\":\"1994-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0928180562,\"date\":\"1994-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.135,\"date\":\"1994-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0947452488,\"date\":\"1994-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.13,\"date\":\"1994-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0966724415,\"date\":\"1994-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1994-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0985996341,\"date\":\"1994-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.123,\"date\":\"1994-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1005268268,\"date\":\"1994-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.114,\"date\":\"1994-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1024540194,\"date\":\"1994-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.109,\"date\":\"1994-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1043812121,\"date\":\"1994-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1994-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1063084047,\"date\":\"1994-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.104,\"date\":\"1995-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1082355974,\"date\":\"1995-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.102,\"date\":\"1995-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.11016279,\"date\":\"1995-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1,\"date\":\"1995-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1120899827,\"date\":\"1995-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.095,\"date\":\"1995-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1140171753,\"date\":\"1995-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.09,\"date\":\"1995-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.115944368,\"date\":\"1995-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.086,\"date\":\"1995-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1178715606,\"date\":\"1995-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.088,\"date\":\"1995-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1197987532,\"date\":\"1995-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.088,\"date\":\"1995-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1217259459,\"date\":\"1995-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.089,\"date\":\"1995-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1236531385,\"date\":\"1995-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.089,\"date\":\"1995-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1255803312,\"date\":\"1995-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.088,\"date\":\"1995-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1275075238,\"date\":\"1995-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.085,\"date\":\"1995-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1294347165,\"date\":\"1995-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.088,\"date\":\"1995-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1313619091,\"date\":\"1995-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.094,\"date\":\"1995-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1332891018,\"date\":\"1995-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.101,\"date\":\"1995-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1352162944,\"date\":\"1995-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1995-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1371434871,\"date\":\"1995-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.115,\"date\":\"1995-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1390706797,\"date\":\"1995-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.119,\"date\":\"1995-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1409978724,\"date\":\"1995-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1995-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.142925065,\"date\":\"1995-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1995-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1448522577,\"date\":\"1995-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1995-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1467794503,\"date\":\"1995-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.13,\"date\":\"1995-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.148706643,\"date\":\"1995-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1995-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1506338356,\"date\":\"1995-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.122,\"date\":\"1995-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1525610283,\"date\":\"1995-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.117,\"date\":\"1995-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1544882209,\"date\":\"1995-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.112,\"date\":\"1995-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1564154136,\"date\":\"1995-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1995-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1583426062,\"date\":\"1995-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.103,\"date\":\"1995-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1602697989,\"date\":\"1995-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1995-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1621969915,\"date\":\"1995-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.098,\"date\":\"1995-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1641241841,\"date\":\"1995-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.093,\"date\":\"1995-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1660513768,\"date\":\"1995-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1995-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1679785694,\"date\":\"1995-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1995-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1699057621,\"date\":\"1995-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1995-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1718329547,\"date\":\"1995-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.109,\"date\":\"1995-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1737601474,\"date\":\"1995-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.115,\"date\":\"1995-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.17568734,\"date\":\"1995-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.119,\"date\":\"1995-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1776145327,\"date\":\"1995-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.122,\"date\":\"1995-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1795417253,\"date\":\"1995-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.121,\"date\":\"1995-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.181468918,\"date\":\"1995-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.117,\"date\":\"1995-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1833961106,\"date\":\"1995-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.117,\"date\":\"1995-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1853233033,\"date\":\"1995-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.117,\"date\":\"1995-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1872504959,\"date\":\"1995-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.114,\"date\":\"1995-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1891776886,\"date\":\"1995-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.11,\"date\":\"1995-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1911048812,\"date\":\"1995-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.118,\"date\":\"1995-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1930320739,\"date\":\"1995-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.118,\"date\":\"1995-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1949592665,\"date\":\"1995-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.119,\"date\":\"1995-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1968864592,\"date\":\"1995-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1995-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1988136518,\"date\":\"1995-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.123,\"date\":\"1995-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2007408445,\"date\":\"1995-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1995-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2026680371,\"date\":\"1995-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.13,\"date\":\"1995-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2045952298,\"date\":\"1995-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.141,\"date\":\"1995-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2065224224,\"date\":\"1995-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.148,\"date\":\"1996-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.208449615,\"date\":\"1996-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.146,\"date\":\"1996-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2103768077,\"date\":\"1996-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.152,\"date\":\"1996-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2123040003,\"date\":\"1996-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.144,\"date\":\"1996-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.214231193,\"date\":\"1996-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.136,\"date\":\"1996-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2161583856,\"date\":\"1996-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.13,\"date\":\"1996-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2180855783,\"date\":\"1996-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.134,\"date\":\"1996-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2200127709,\"date\":\"1996-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.151,\"date\":\"1996-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2219399636,\"date\":\"1996-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.164,\"date\":\"1996-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2238671562,\"date\":\"1996-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.175,\"date\":\"1996-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2257943489,\"date\":\"1996-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.173,\"date\":\"1996-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2277215415,\"date\":\"1996-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.172,\"date\":\"1996-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2296487342,\"date\":\"1996-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.21,\"date\":\"1996-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2315759268,\"date\":\"1996-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.222,\"date\":\"1996-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2335031195,\"date\":\"1996-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.249,\"date\":\"1996-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2354303121,\"date\":\"1996-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.305,\"date\":\"1996-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2373575048,\"date\":\"1996-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.304,\"date\":\"1996-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2392846974,\"date\":\"1996-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.285,\"date\":\"1996-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2412118901,\"date\":\"1996-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.292,\"date\":\"1996-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2431390827,\"date\":\"1996-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.285,\"date\":\"1996-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2450662754,\"date\":\"1996-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.274,\"date\":\"1996-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.246993468,\"date\":\"1996-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.254,\"date\":\"1996-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2489206607,\"date\":\"1996-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.24,\"date\":\"1996-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2508478533,\"date\":\"1996-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.215,\"date\":\"1996-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2527750459,\"date\":\"1996-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.193,\"date\":\"1996-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2547022386,\"date\":\"1996-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.179,\"date\":\"1996-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2566294312,\"date\":\"1996-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.172,\"date\":\"1996-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2585566239,\"date\":\"1996-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.173,\"date\":\"1996-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2604838165,\"date\":\"1996-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.178,\"date\":\"1996-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2624110092,\"date\":\"1996-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.184,\"date\":\"1996-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2643382018,\"date\":\"1996-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.178,\"date\":\"1996-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2662653945,\"date\":\"1996-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.184,\"date\":\"1996-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2681925871,\"date\":\"1996-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.191,\"date\":\"1996-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2701197798,\"date\":\"1996-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.206,\"date\":\"1996-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2720469724,\"date\":\"1996-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.222,\"date\":\"1996-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2739741651,\"date\":\"1996-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.231,\"date\":\"1996-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2759013577,\"date\":\"1996-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.25,\"date\":\"1996-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2778285504,\"date\":\"1996-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.276,\"date\":\"1996-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.279755743,\"date\":\"1996-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.277,\"date\":\"1996-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2816829357,\"date\":\"1996-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.289,\"date\":\"1996-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2836101283,\"date\":\"1996-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.308,\"date\":\"1996-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.285537321,\"date\":\"1996-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.326,\"date\":\"1996-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2874645136,\"date\":\"1996-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.329,\"date\":\"1996-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2893917063,\"date\":\"1996-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.329,\"date\":\"1996-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2913188989,\"date\":\"1996-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.323,\"date\":\"1996-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2932460916,\"date\":\"1996-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.316,\"date\":\"1996-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2951732842,\"date\":\"1996-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.324,\"date\":\"1996-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2971004768,\"date\":\"1996-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.327,\"date\":\"1996-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2990276695,\"date\":\"1996-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.323,\"date\":\"1996-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3009548621,\"date\":\"1996-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.32,\"date\":\"1996-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3028820548,\"date\":\"1996-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.307,\"date\":\"1996-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3048092474,\"date\":\"1996-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3,\"date\":\"1996-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3067364401,\"date\":\"1996-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.295,\"date\":\"1996-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3086636327,\"date\":\"1996-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.291,\"date\":\"1997-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3105908254,\"date\":\"1997-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.296,\"date\":\"1997-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.312518018,\"date\":\"1997-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.293,\"date\":\"1997-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3144452107,\"date\":\"1997-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.283,\"date\":\"1997-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3163724033,\"date\":\"1997-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.288,\"date\":\"1997-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.318299596,\"date\":\"1997-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.285,\"date\":\"1997-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3202267886,\"date\":\"1997-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.278,\"date\":\"1997-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3221539813,\"date\":\"1997-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.269,\"date\":\"1997-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3240811739,\"date\":\"1997-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.252,\"date\":\"1997-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3260083666,\"date\":\"1997-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.23,\"date\":\"1997-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3279355592,\"date\":\"1997-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.22,\"date\":\"1997-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3298627519,\"date\":\"1997-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.22,\"date\":\"1997-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3317899445,\"date\":\"1997-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.225,\"date\":\"1997-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3337171372,\"date\":\"1997-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.217,\"date\":\"1997-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3356443298,\"date\":\"1997-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.216,\"date\":\"1997-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3375715225,\"date\":\"1997-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.211,\"date\":\"1997-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3394987151,\"date\":\"1997-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.205,\"date\":\"1997-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3414259077,\"date\":\"1997-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.205,\"date\":\"1997-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3433531004,\"date\":\"1997-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.191,\"date\":\"1997-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.345280293,\"date\":\"1997-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.191,\"date\":\"1997-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3472074857,\"date\":\"1997-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.196,\"date\":\"1997-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3491346783,\"date\":\"1997-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.19,\"date\":\"1997-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.351061871,\"date\":\"1997-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.187,\"date\":\"1997-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3529890636,\"date\":\"1997-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.172,\"date\":\"1997-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3549162563,\"date\":\"1997-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.162,\"date\":\"1997-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3568434489,\"date\":\"1997-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.153,\"date\":\"1997-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3587706416,\"date\":\"1997-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.159,\"date\":\"1997-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3606978342,\"date\":\"1997-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.152,\"date\":\"1997-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3626250269,\"date\":\"1997-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.147,\"date\":\"1997-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3645522195,\"date\":\"1997-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.145,\"date\":\"1997-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3664794122,\"date\":\"1997-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.155,\"date\":\"1997-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3684066048,\"date\":\"1997-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.168,\"date\":\"1997-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3703337975,\"date\":\"1997-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.167,\"date\":\"1997-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3722609901,\"date\":\"1997-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.169,\"date\":\"1997-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3741881828,\"date\":\"1997-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.165,\"date\":\"1997-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3761153754,\"date\":\"1997-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.163,\"date\":\"1997-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3780425681,\"date\":\"1997-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.156,\"date\":\"1997-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3799697607,\"date\":\"1997-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.154,\"date\":\"1997-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3818969534,\"date\":\"1997-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.16,\"date\":\"1997-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.383824146,\"date\":\"1997-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.175,\"date\":\"1997-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3857513386,\"date\":\"1997-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.185,\"date\":\"1997-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3876785313,\"date\":\"1997-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.185,\"date\":\"1997-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3896057239,\"date\":\"1997-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.185,\"date\":\"1997-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3915329166,\"date\":\"1997-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.188,\"date\":\"1997-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3934601092,\"date\":\"1997-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.19,\"date\":\"1997-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3953873019,\"date\":\"1997-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.195,\"date\":\"1997-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3973144945,\"date\":\"1997-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.193,\"date\":\"1997-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3992416872,\"date\":\"1997-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.189,\"date\":\"1997-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4011688798,\"date\":\"1997-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.174,\"date\":\"1997-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4030960725,\"date\":\"1997-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.162,\"date\":\"1997-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4050232651,\"date\":\"1997-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.155,\"date\":\"1997-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4069504578,\"date\":\"1997-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.15,\"date\":\"1997-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4088776504,\"date\":\"1997-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.147,\"date\":\"1998-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4108048431,\"date\":\"1998-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1998-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4127320357,\"date\":\"1998-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.109,\"date\":\"1998-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4146592284,\"date\":\"1998-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.096,\"date\":\"1998-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.416586421,\"date\":\"1998-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.091,\"date\":\"1998-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4185136137,\"date\":\"1998-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.085,\"date\":\"1998-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4204408063,\"date\":\"1998-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.082,\"date\":\"1998-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.422367999,\"date\":\"1998-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.079,\"date\":\"1998-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4242951916,\"date\":\"1998-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.074,\"date\":\"1998-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4262223843,\"date\":\"1998-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.066,\"date\":\"1998-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4281495769,\"date\":\"1998-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.057,\"date\":\"1998-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4300767695,\"date\":\"1998-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.049,\"date\":\"1998-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4320039622,\"date\":\"1998-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.068,\"date\":\"1998-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4339311548,\"date\":\"1998-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.067,\"date\":\"1998-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4358583475,\"date\":\"1998-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.065,\"date\":\"1998-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4377855401,\"date\":\"1998-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.065,\"date\":\"1998-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4397127328,\"date\":\"1998-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.07,\"date\":\"1998-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4416399254,\"date\":\"1998-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.072,\"date\":\"1998-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4435671181,\"date\":\"1998-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.075,\"date\":\"1998-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4454943107,\"date\":\"1998-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.069,\"date\":\"1998-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4474215034,\"date\":\"1998-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.06,\"date\":\"1998-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.449348696,\"date\":\"1998-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.053,\"date\":\"1998-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4512758887,\"date\":\"1998-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.045,\"date\":\"1998-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4532030813,\"date\":\"1998-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.04,\"date\":\"1998-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.455130274,\"date\":\"1998-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.033,\"date\":\"1998-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4570574666,\"date\":\"1998-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.034,\"date\":\"1998-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4589846593,\"date\":\"1998-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.036,\"date\":\"1998-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4609118519,\"date\":\"1998-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.031,\"date\":\"1998-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4628390446,\"date\":\"1998-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.027,\"date\":\"1998-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4647662372,\"date\":\"1998-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.02,\"date\":\"1998-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4666934299,\"date\":\"1998-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.016,\"date\":\"1998-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4686206225,\"date\":\"1998-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.01,\"date\":\"1998-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4705478152,\"date\":\"1998-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.007,\"date\":\"1998-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4724750078,\"date\":\"1998-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.004,\"date\":\"1998-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4744022004,\"date\":\"1998-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1,\"date\":\"1998-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4763293931,\"date\":\"1998-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.009,\"date\":\"1998-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4782565857,\"date\":\"1998-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.019,\"date\":\"1998-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4801837784,\"date\":\"1998-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.03,\"date\":\"1998-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.482110971,\"date\":\"1998-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.039,\"date\":\"1998-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4840381637,\"date\":\"1998-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.041,\"date\":\"1998-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4859653563,\"date\":\"1998-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.041,\"date\":\"1998-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.487892549,\"date\":\"1998-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.036,\"date\":\"1998-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4898197416,\"date\":\"1998-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.036,\"date\":\"1998-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4917469343,\"date\":\"1998-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.035,\"date\":\"1998-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4936741269,\"date\":\"1998-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.034,\"date\":\"1998-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4956013196,\"date\":\"1998-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.026,\"date\":\"1998-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4975285122,\"date\":\"1998-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.012,\"date\":\"1998-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4994557049,\"date\":\"1998-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.004,\"date\":\"1998-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5013828975,\"date\":\"1998-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.986,\"date\":\"1998-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5033100902,\"date\":\"1998-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.972,\"date\":\"1998-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5052372828,\"date\":\"1998-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.968,\"date\":\"1998-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5071644755,\"date\":\"1998-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.966,\"date\":\"1998-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5090916681,\"date\":\"1998-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.965,\"date\":\"1999-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5110188608,\"date\":\"1999-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.967,\"date\":\"1999-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5129460534,\"date\":\"1999-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.97,\"date\":\"1999-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5148732461,\"date\":\"1999-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.964,\"date\":\"1999-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5168004387,\"date\":\"1999-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.962,\"date\":\"1999-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5187276314,\"date\":\"1999-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.962,\"date\":\"1999-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.520654824,\"date\":\"1999-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.959,\"date\":\"1999-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5225820166,\"date\":\"1999-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.953,\"date\":\"1999-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5245092093,\"date\":\"1999-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.956,\"date\":\"1999-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5264364019,\"date\":\"1999-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.964,\"date\":\"1999-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5283635946,\"date\":\"1999-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1,\"date\":\"1999-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5302907872,\"date\":\"1999-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.018,\"date\":\"1999-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5322179799,\"date\":\"1999-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.046,\"date\":\"1999-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5341451725,\"date\":\"1999-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.075,\"date\":\"1999-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5360723652,\"date\":\"1999-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.084,\"date\":\"1999-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5379995578,\"date\":\"1999-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.08,\"date\":\"1999-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5399267505,\"date\":\"1999-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.078,\"date\":\"1999-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5418539431,\"date\":\"1999-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.078,\"date\":\"1999-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5437811358,\"date\":\"1999-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.083,\"date\":\"1999-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5457083284,\"date\":\"1999-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.075,\"date\":\"1999-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5476355211,\"date\":\"1999-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.066,\"date\":\"1999-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5495627137,\"date\":\"1999-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.065,\"date\":\"1999-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5514899064,\"date\":\"1999-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.059,\"date\":\"1999-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.553417099,\"date\":\"1999-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.068,\"date\":\"1999-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5553442917,\"date\":\"1999-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.082,\"date\":\"1999-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5572714843,\"date\":\"1999-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.087,\"date\":\"1999-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.559198677,\"date\":\"1999-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.102,\"date\":\"1999-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5611258696,\"date\":\"1999-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.114,\"date\":\"1999-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5630530623,\"date\":\"1999-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.133,\"date\":\"1999-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5649802549,\"date\":\"1999-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.137,\"date\":\"1999-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5669074475,\"date\":\"1999-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.146,\"date\":\"1999-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5688346402,\"date\":\"1999-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.156,\"date\":\"1999-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5707618328,\"date\":\"1999-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.178,\"date\":\"1999-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5726890255,\"date\":\"1999-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.186,\"date\":\"1999-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5746162181,\"date\":\"1999-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.194,\"date\":\"1999-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5765434108,\"date\":\"1999-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.198,\"date\":\"1999-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5784706034,\"date\":\"1999-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.209,\"date\":\"1999-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5803977961,\"date\":\"1999-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.226,\"date\":\"1999-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5823249887,\"date\":\"1999-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.226,\"date\":\"1999-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5842521814,\"date\":\"1999-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.234,\"date\":\"1999-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.586179374,\"date\":\"1999-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.228,\"date\":\"1999-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5881065667,\"date\":\"1999-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.224,\"date\":\"1999-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5900337593,\"date\":\"1999-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.226,\"date\":\"1999-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.591960952,\"date\":\"1999-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.229,\"date\":\"1999-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5938881446,\"date\":\"1999-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.234,\"date\":\"1999-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5958153373,\"date\":\"1999-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.261,\"date\":\"1999-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5977425299,\"date\":\"1999-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.289,\"date\":\"1999-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5996697226,\"date\":\"1999-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.304,\"date\":\"1999-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6015969152,\"date\":\"1999-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.294,\"date\":\"1999-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6035241079,\"date\":\"1999-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.288,\"date\":\"1999-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6054513005,\"date\":\"1999-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.287,\"date\":\"1999-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6073784932,\"date\":\"1999-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.298,\"date\":\"1999-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6093056858,\"date\":\"1999-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.309,\"date\":\"2000-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6112328784,\"date\":\"2000-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.307,\"date\":\"2000-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6131600711,\"date\":\"2000-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.307,\"date\":\"2000-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6150872637,\"date\":\"2000-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.418,\"date\":\"2000-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6170144564,\"date\":\"2000-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.439,\"date\":\"2000-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.618941649,\"date\":\"2000-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.47,\"date\":\"2000-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6208688417,\"date\":\"2000-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.456,\"date\":\"2000-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6227960343,\"date\":\"2000-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.456,\"date\":\"2000-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.624723227,\"date\":\"2000-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.461,\"date\":\"2000-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6266504196,\"date\":\"2000-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.49,\"date\":\"2000-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6285776123,\"date\":\"2000-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.496,\"date\":\"2000-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6305048049,\"date\":\"2000-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.479,\"date\":\"2000-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6324319976,\"date\":\"2000-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.451,\"date\":\"2000-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6343591902,\"date\":\"2000-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.442,\"date\":\"2000-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6362863829,\"date\":\"2000-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.419,\"date\":\"2000-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6382135755,\"date\":\"2000-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.398,\"date\":\"2000-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6401407682,\"date\":\"2000-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.428,\"date\":\"2000-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6420679608,\"date\":\"2000-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.418,\"date\":\"2000-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6439951535,\"date\":\"2000-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.402,\"date\":\"2000-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6459223461,\"date\":\"2000-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.415,\"date\":\"2000-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6478495388,\"date\":\"2000-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.432,\"date\":\"2000-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6497767314,\"date\":\"2000-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.431,\"date\":\"2000-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6517039241,\"date\":\"2000-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.419,\"date\":\"2000-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6536311167,\"date\":\"2000-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.411,\"date\":\"2000-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6555583093,\"date\":\"2000-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.423,\"date\":\"2000-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.657485502,\"date\":\"2000-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.432,\"date\":\"2000-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6594126946,\"date\":\"2000-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.453,\"date\":\"2000-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6613398873,\"date\":\"2000-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.449,\"date\":\"2000-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6632670799,\"date\":\"2000-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.435,\"date\":\"2000-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6651942726,\"date\":\"2000-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.424,\"date\":\"2000-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6671214652,\"date\":\"2000-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.408,\"date\":\"2000-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6690486579,\"date\":\"2000-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.41,\"date\":\"2000-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6709758505,\"date\":\"2000-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.447,\"date\":\"2000-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6729030432,\"date\":\"2000-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.471,\"date\":\"2000-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6748302358,\"date\":\"2000-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.536,\"date\":\"2000-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6767574285,\"date\":\"2000-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.609,\"date\":\"2000-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6786846211,\"date\":\"2000-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.629,\"date\":\"2000-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6806118138,\"date\":\"2000-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.653,\"date\":\"2000-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6825390064,\"date\":\"2000-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.657,\"date\":\"2000-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6844661991,\"date\":\"2000-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.625,\"date\":\"2000-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6863933917,\"date\":\"2000-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.614,\"date\":\"2000-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6883205844,\"date\":\"2000-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.67,\"date\":\"2000-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.690247777,\"date\":\"2000-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.648,\"date\":\"2000-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6921749697,\"date\":\"2000-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.629,\"date\":\"2000-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6941021623,\"date\":\"2000-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.61,\"date\":\"2000-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.696029355,\"date\":\"2000-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.603,\"date\":\"2000-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6979565476,\"date\":\"2000-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.627,\"date\":\"2000-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6998837402,\"date\":\"2000-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.645,\"date\":\"2000-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7018109329,\"date\":\"2000-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.622,\"date\":\"2000-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7037381255,\"date\":\"2000-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.577,\"date\":\"2000-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7056653182,\"date\":\"2000-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.545,\"date\":\"2000-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7075925108,\"date\":\"2000-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.515,\"date\":\"2000-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7095197035,\"date\":\"2000-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.522,\"date\":\"2001-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7114468961,\"date\":\"2001-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.52,\"date\":\"2001-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7133740888,\"date\":\"2001-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.509,\"date\":\"2001-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7153012814,\"date\":\"2001-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.528,\"date\":\"2001-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7172284741,\"date\":\"2001-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.539,\"date\":\"2001-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7191556667,\"date\":\"2001-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.52,\"date\":\"2001-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7210828594,\"date\":\"2001-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.518,\"date\":\"2001-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.723010052,\"date\":\"2001-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.48,\"date\":\"2001-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7249372447,\"date\":\"2001-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.451,\"date\":\"2001-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7268644373,\"date\":\"2001-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.42,\"date\":\"2001-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.72879163,\"date\":\"2001-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.406,\"date\":\"2001-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7307188226,\"date\":\"2001-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.392,\"date\":\"2001-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7326460153,\"date\":\"2001-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.379,\"date\":\"2001-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7345732079,\"date\":\"2001-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.391,\"date\":\"2001-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7365004006,\"date\":\"2001-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.397,\"date\":\"2001-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7384275932,\"date\":\"2001-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.437,\"date\":\"2001-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7403547859,\"date\":\"2001-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.443,\"date\":\"2001-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7422819785,\"date\":\"2001-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.442,\"date\":\"2001-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7442091711,\"date\":\"2001-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.47,\"date\":\"2001-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7461363638,\"date\":\"2001-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.491,\"date\":\"2001-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7480635564,\"date\":\"2001-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.494,\"date\":\"2001-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7499907491,\"date\":\"2001-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.529,\"date\":\"2001-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7519179417,\"date\":\"2001-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.514,\"date\":\"2001-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7538451344,\"date\":\"2001-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.486,\"date\":\"2001-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.755772327,\"date\":\"2001-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.48,\"date\":\"2001-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7576995197,\"date\":\"2001-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.447,\"date\":\"2001-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7596267123,\"date\":\"2001-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.407,\"date\":\"2001-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.761553905,\"date\":\"2001-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.392,\"date\":\"2001-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7634810976,\"date\":\"2001-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.38,\"date\":\"2001-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7654082903,\"date\":\"2001-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.348,\"date\":\"2001-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7673354829,\"date\":\"2001-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.347,\"date\":\"2001-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7692626756,\"date\":\"2001-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.345,\"date\":\"2001-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7711898682,\"date\":\"2001-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.367,\"date\":\"2001-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7731170609,\"date\":\"2001-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.394,\"date\":\"2001-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7750442535,\"date\":\"2001-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.452,\"date\":\"2001-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7769714462,\"date\":\"2001-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.488,\"date\":\"2001-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7788986388,\"date\":\"2001-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.492,\"date\":\"2001-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7808258315,\"date\":\"2001-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.527,\"date\":\"2001-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7827530241,\"date\":\"2001-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.473,\"date\":\"2001-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7846802168,\"date\":\"2001-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.39,\"date\":\"2001-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7866074094,\"date\":\"2001-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.371,\"date\":\"2001-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.788534602,\"date\":\"2001-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.353,\"date\":\"2001-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7904617947,\"date\":\"2001-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.318,\"date\":\"2001-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7923889873,\"date\":\"2001-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.31,\"date\":\"2001-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.79431618,\"date\":\"2001-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.291,\"date\":\"2001-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7962433726,\"date\":\"2001-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.269,\"date\":\"2001-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7981705653,\"date\":\"2001-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.252,\"date\":\"2001-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8000977579,\"date\":\"2001-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.223,\"date\":\"2001-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8020249506,\"date\":\"2001-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.194,\"date\":\"2001-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8039521432,\"date\":\"2001-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.173,\"date\":\"2001-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8058793359,\"date\":\"2001-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.143,\"date\":\"2001-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8078065285,\"date\":\"2001-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.154,\"date\":\"2001-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8097337212,\"date\":\"2001-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.169,\"date\":\"2001-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8116609138,\"date\":\"2001-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.168,\"date\":\"2002-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8135881065,\"date\":\"2002-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.159,\"date\":\"2002-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8155152991,\"date\":\"2002-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.14,\"date\":\"2002-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8174424918,\"date\":\"2002-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.144,\"date\":\"2002-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8193696844,\"date\":\"2002-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.144,\"date\":\"2002-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8212968771,\"date\":\"2002-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.153,\"date\":\"2002-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8232240697,\"date\":\"2002-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.156,\"date\":\"2002-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8251512624,\"date\":\"2002-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.154,\"date\":\"2002-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.827078455,\"date\":\"2002-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.173,\"date\":\"2002-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8290056477,\"date\":\"2002-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.216,\"date\":\"2002-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8309328403,\"date\":\"2002-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.251,\"date\":\"2002-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8328600329,\"date\":\"2002-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.281,\"date\":\"2002-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8347872256,\"date\":\"2002-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.295,\"date\":\"2002-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8367144182,\"date\":\"2002-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.323,\"date\":\"2002-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8386416109,\"date\":\"2002-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.32,\"date\":\"2002-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8405688035,\"date\":\"2002-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.304,\"date\":\"2002-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8424959962,\"date\":\"2002-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.302,\"date\":\"2002-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8444231888,\"date\":\"2002-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.305,\"date\":\"2002-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8463503815,\"date\":\"2002-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.299,\"date\":\"2002-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8482775741,\"date\":\"2002-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.309,\"date\":\"2002-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8502047668,\"date\":\"2002-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.308,\"date\":\"2002-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8521319594,\"date\":\"2002-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3,\"date\":\"2002-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8540591521,\"date\":\"2002-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.286,\"date\":\"2002-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8559863447,\"date\":\"2002-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.275,\"date\":\"2002-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8579135374,\"date\":\"2002-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.281,\"date\":\"2002-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.85984073,\"date\":\"2002-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.289,\"date\":\"2002-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8617679227,\"date\":\"2002-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.294,\"date\":\"2002-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8636951153,\"date\":\"2002-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3,\"date\":\"2002-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.865622308,\"date\":\"2002-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.311,\"date\":\"2002-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8675495006,\"date\":\"2002-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.303,\"date\":\"2002-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8694766933,\"date\":\"2002-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.304,\"date\":\"2002-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8714038859,\"date\":\"2002-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.303,\"date\":\"2002-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8733310786,\"date\":\"2002-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.333,\"date\":\"2002-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8752582712,\"date\":\"2002-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.37,\"date\":\"2002-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8771854638,\"date\":\"2002-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.388,\"date\":\"2002-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8791126565,\"date\":\"2002-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.396,\"date\":\"2002-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8810398491,\"date\":\"2002-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.414,\"date\":\"2002-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8829670418,\"date\":\"2002-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.417,\"date\":\"2002-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8848942344,\"date\":\"2002-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.438,\"date\":\"2002-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8868214271,\"date\":\"2002-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.46,\"date\":\"2002-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8887486197,\"date\":\"2002-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.461,\"date\":\"2002-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8906758124,\"date\":\"2002-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.469,\"date\":\"2002-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.892603005,\"date\":\"2002-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.456,\"date\":\"2002-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8945301977,\"date\":\"2002-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.442,\"date\":\"2002-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8964573903,\"date\":\"2002-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.427,\"date\":\"2002-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.898384583,\"date\":\"2002-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.405,\"date\":\"2002-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9003117756,\"date\":\"2002-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.405,\"date\":\"2002-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9022389683,\"date\":\"2002-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.407,\"date\":\"2002-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9041661609,\"date\":\"2002-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.405,\"date\":\"2002-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9060933536,\"date\":\"2002-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.401,\"date\":\"2002-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9080205462,\"date\":\"2002-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.44,\"date\":\"2002-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9099477389,\"date\":\"2002-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.491,\"date\":\"2002-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9118749315,\"date\":\"2002-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.501,\"date\":\"2003-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9138021242,\"date\":\"2003-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.478,\"date\":\"2003-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9157293168,\"date\":\"2003-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.48,\"date\":\"2003-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9176565095,\"date\":\"2003-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.492,\"date\":\"2003-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9195837021,\"date\":\"2003-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.542,\"date\":\"2003-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9215108947,\"date\":\"2003-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.662,\"date\":\"2003-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9234380874,\"date\":\"2003-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.704,\"date\":\"2003-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.92536528,\"date\":\"2003-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.709,\"date\":\"2003-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9272924727,\"date\":\"2003-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.753,\"date\":\"2003-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9292196653,\"date\":\"2003-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.771,\"date\":\"2003-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.931146858,\"date\":\"2003-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.752,\"date\":\"2003-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9330740506,\"date\":\"2003-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.662,\"date\":\"2003-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9350012433,\"date\":\"2003-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.602,\"date\":\"2003-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9369284359,\"date\":\"2003-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.554,\"date\":\"2003-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9388556286,\"date\":\"2003-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.539,\"date\":\"2003-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9407828212,\"date\":\"2003-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.529,\"date\":\"2003-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9427100139,\"date\":\"2003-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.508,\"date\":\"2003-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9446372065,\"date\":\"2003-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.484,\"date\":\"2003-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9465643992,\"date\":\"2003-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.444,\"date\":\"2003-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9484915918,\"date\":\"2003-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.443,\"date\":\"2003-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9504187845,\"date\":\"2003-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.434,\"date\":\"2003-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9523459771,\"date\":\"2003-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.423,\"date\":\"2003-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9542731698,\"date\":\"2003-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.422,\"date\":\"2003-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9562003624,\"date\":\"2003-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.432,\"date\":\"2003-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9581275551,\"date\":\"2003-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.423,\"date\":\"2003-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9600547477,\"date\":\"2003-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.42,\"date\":\"2003-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9619819404,\"date\":\"2003-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.428,\"date\":\"2003-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.963909133,\"date\":\"2003-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.435,\"date\":\"2003-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9658363256,\"date\":\"2003-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.439,\"date\":\"2003-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9677635183,\"date\":\"2003-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.438,\"date\":\"2003-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9696907109,\"date\":\"2003-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.453,\"date\":\"2003-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9716179036,\"date\":\"2003-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.492,\"date\":\"2003-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9735450962,\"date\":\"2003-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.498,\"date\":\"2003-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9754722889,\"date\":\"2003-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.503,\"date\":\"2003-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9773994815,\"date\":\"2003-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.501,\"date\":\"2003-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9793266742,\"date\":\"2003-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.488,\"date\":\"2003-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9812538668,\"date\":\"2003-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.471,\"date\":\"2003-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9831810595,\"date\":\"2003-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.444,\"date\":\"2003-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9851082521,\"date\":\"2003-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.429,\"date\":\"2003-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9870354448,\"date\":\"2003-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.445,\"date\":\"2003-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9889626374,\"date\":\"2003-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.483,\"date\":\"2003-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9908898301,\"date\":\"2003-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.502,\"date\":\"2003-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9928170227,\"date\":\"2003-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.495,\"date\":\"2003-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9947442154,\"date\":\"2003-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.481,\"date\":\"2003-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.996671408,\"date\":\"2003-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.476,\"date\":\"2003-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9985986007,\"date\":\"2003-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.481,\"date\":\"2003-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0005257933,\"date\":\"2003-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.491,\"date\":\"2003-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.002452986,\"date\":\"2003-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.476,\"date\":\"2003-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0043801786,\"date\":\"2003-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.481,\"date\":\"2003-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0063073713,\"date\":\"2003-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.486,\"date\":\"2003-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0082345639,\"date\":\"2003-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.504,\"date\":\"2003-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0101617565,\"date\":\"2003-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.502,\"date\":\"2003-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0120889492,\"date\":\"2003-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.503,\"date\":\"2004-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0140161418,\"date\":\"2004-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.551,\"date\":\"2004-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0159433345,\"date\":\"2004-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.559,\"date\":\"2004-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0178705271,\"date\":\"2004-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.591,\"date\":\"2004-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0197977198,\"date\":\"2004-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.581,\"date\":\"2004-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0217249124,\"date\":\"2004-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.568,\"date\":\"2004-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0236521051,\"date\":\"2004-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.584,\"date\":\"2004-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0255792977,\"date\":\"2004-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.595,\"date\":\"2004-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0275064904,\"date\":\"2004-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.619,\"date\":\"2004-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.029433683,\"date\":\"2004-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.628,\"date\":\"2004-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0313608757,\"date\":\"2004-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.617,\"date\":\"2004-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0332880683,\"date\":\"2004-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.641,\"date\":\"2004-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.035215261,\"date\":\"2004-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.642,\"date\":\"2004-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0371424536,\"date\":\"2004-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.648,\"date\":\"2004-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0390696463,\"date\":\"2004-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.679,\"date\":\"2004-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0409968389,\"date\":\"2004-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.724,\"date\":\"2004-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0429240316,\"date\":\"2004-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.718,\"date\":\"2004-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0448512242,\"date\":\"2004-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.717,\"date\":\"2004-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0467784169,\"date\":\"2004-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.745,\"date\":\"2004-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0487056095,\"date\":\"2004-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.763,\"date\":\"2004-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0506328022,\"date\":\"2004-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.761,\"date\":\"2004-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0525599948,\"date\":\"2004-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.746,\"date\":\"2004-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0544871874,\"date\":\"2004-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.734,\"date\":\"2004-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0564143801,\"date\":\"2004-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.711,\"date\":\"2004-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0583415727,\"date\":\"2004-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7,\"date\":\"2004-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0602687654,\"date\":\"2004-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7,\"date\":\"2004-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.062195958,\"date\":\"2004-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.716,\"date\":\"2004-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0641231507,\"date\":\"2004-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.74,\"date\":\"2004-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0660503433,\"date\":\"2004-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.744,\"date\":\"2004-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.067977536,\"date\":\"2004-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.754,\"date\":\"2004-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0699047286,\"date\":\"2004-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.78,\"date\":\"2004-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0718319213,\"date\":\"2004-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.814,\"date\":\"2004-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0737591139,\"date\":\"2004-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.825,\"date\":\"2004-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0756863066,\"date\":\"2004-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.874,\"date\":\"2004-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0776134992,\"date\":\"2004-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.871,\"date\":\"2004-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0795406919,\"date\":\"2004-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.869,\"date\":\"2004-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0814678845,\"date\":\"2004-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.874,\"date\":\"2004-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0833950772,\"date\":\"2004-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.912,\"date\":\"2004-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0853222698,\"date\":\"2004-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.012,\"date\":\"2004-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0872494625,\"date\":\"2004-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.053,\"date\":\"2004-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0891766551,\"date\":\"2004-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.092,\"date\":\"2004-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0911038478,\"date\":\"2004-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.18,\"date\":\"2004-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0930310404,\"date\":\"2004-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.212,\"date\":\"2004-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0949582331,\"date\":\"2004-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.206,\"date\":\"2004-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0968854257,\"date\":\"2004-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.163,\"date\":\"2004-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0988126183,\"date\":\"2004-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.132,\"date\":\"2004-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.100739811,\"date\":\"2004-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.116,\"date\":\"2004-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1026670036,\"date\":\"2004-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.116,\"date\":\"2004-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1045941963,\"date\":\"2004-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.069,\"date\":\"2004-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1065213889,\"date\":\"2004-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.997,\"date\":\"2004-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1084485816,\"date\":\"2004-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.984,\"date\":\"2004-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1103757742,\"date\":\"2004-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.987,\"date\":\"2004-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1123029669,\"date\":\"2004-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.957,\"date\":\"2005-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1142301595,\"date\":\"2005-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.934,\"date\":\"2005-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1161573522,\"date\":\"2005-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.952,\"date\":\"2005-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1180845448,\"date\":\"2005-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.959,\"date\":\"2005-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1200117375,\"date\":\"2005-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.992,\"date\":\"2005-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1219389301,\"date\":\"2005-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.983,\"date\":\"2005-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1238661228,\"date\":\"2005-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.986,\"date\":\"2005-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1257933154,\"date\":\"2005-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.02,\"date\":\"2005-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1277205081,\"date\":\"2005-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.118,\"date\":\"2005-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1296477007,\"date\":\"2005-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.168,\"date\":\"2005-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1315748934,\"date\":\"2005-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.194,\"date\":\"2005-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.133502086,\"date\":\"2005-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.244,\"date\":\"2005-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1354292787,\"date\":\"2005-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.249,\"date\":\"2005-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1373564713,\"date\":\"2005-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.303,\"date\":\"2005-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.139283664,\"date\":\"2005-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.316,\"date\":\"2005-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1412108566,\"date\":\"2005-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.259,\"date\":\"2005-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1431380492,\"date\":\"2005-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.289,\"date\":\"2005-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1450652419,\"date\":\"2005-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.262,\"date\":\"2005-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1469924345,\"date\":\"2005-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.227,\"date\":\"2005-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1489196272,\"date\":\"2005-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.189,\"date\":\"2005-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1508468198,\"date\":\"2005-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.156,\"date\":\"2005-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1527740125,\"date\":\"2005-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.16,\"date\":\"2005-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1547012051,\"date\":\"2005-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.234,\"date\":\"2005-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1566283978,\"date\":\"2005-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.276,\"date\":\"2005-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1585555904,\"date\":\"2005-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.313,\"date\":\"2005-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1604827831,\"date\":\"2005-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.336,\"date\":\"2005-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1624099757,\"date\":\"2005-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.348,\"date\":\"2005-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1643371684,\"date\":\"2005-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.408,\"date\":\"2005-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.166264361,\"date\":\"2005-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.392,\"date\":\"2005-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1681915537,\"date\":\"2005-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.342,\"date\":\"2005-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1701187463,\"date\":\"2005-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.348,\"date\":\"2005-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.172045939,\"date\":\"2005-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.407,\"date\":\"2005-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1739731316,\"date\":\"2005-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.567,\"date\":\"2005-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1759003243,\"date\":\"2005-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.588,\"date\":\"2005-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1778275169,\"date\":\"2005-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.59,\"date\":\"2005-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1797547096,\"date\":\"2005-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.898,\"date\":\"2005-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1816819022,\"date\":\"2005-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.847,\"date\":\"2005-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1836090949,\"date\":\"2005-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.732,\"date\":\"2005-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1855362875,\"date\":\"2005-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.798,\"date\":\"2005-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1874634801,\"date\":\"2005-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.144,\"date\":\"2005-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1893906728,\"date\":\"2005-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.15,\"date\":\"2005-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1913178654,\"date\":\"2005-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.148,\"date\":\"2005-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1932450581,\"date\":\"2005-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.157,\"date\":\"2005-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1951722507,\"date\":\"2005-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.876,\"date\":\"2005-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1970994434,\"date\":\"2005-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.698,\"date\":\"2005-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.199026636,\"date\":\"2005-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.602,\"date\":\"2005-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2009538287,\"date\":\"2005-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.513,\"date\":\"2005-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2028810213,\"date\":\"2005-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.479,\"date\":\"2005-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.204808214,\"date\":\"2005-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.425,\"date\":\"2005-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2067354066,\"date\":\"2005-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.436,\"date\":\"2005-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2086625993,\"date\":\"2005-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.462,\"date\":\"2005-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2105897919,\"date\":\"2005-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.448,\"date\":\"2005-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2125169846,\"date\":\"2005-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.442,\"date\":\"2006-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2144441772,\"date\":\"2006-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.485,\"date\":\"2006-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2163713699,\"date\":\"2006-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.449,\"date\":\"2006-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2182985625,\"date\":\"2006-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.472,\"date\":\"2006-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2202257552,\"date\":\"2006-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.489,\"date\":\"2006-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2221529478,\"date\":\"2006-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.499,\"date\":\"2006-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2240801405,\"date\":\"2006-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.476,\"date\":\"2006-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2260073331,\"date\":\"2006-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.455,\"date\":\"2006-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2279345258,\"date\":\"2006-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.471,\"date\":\"2006-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2298617184,\"date\":\"2006-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.545,\"date\":\"2006-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.231788911,\"date\":\"2006-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.543,\"date\":\"2006-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2337161037,\"date\":\"2006-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.581,\"date\":\"2006-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2356432963,\"date\":\"2006-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.565,\"date\":\"2006-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.237570489,\"date\":\"2006-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.617,\"date\":\"2006-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2394976816,\"date\":\"2006-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.654,\"date\":\"2006-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2414248743,\"date\":\"2006-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.765,\"date\":\"2006-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2433520669,\"date\":\"2006-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.876,\"date\":\"2006-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2452792596,\"date\":\"2006-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.896,\"date\":\"2006-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2472064522,\"date\":\"2006-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.897,\"date\":\"2006-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2491336449,\"date\":\"2006-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.92,\"date\":\"2006-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2510608375,\"date\":\"2006-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.888,\"date\":\"2006-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2529880302,\"date\":\"2006-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.882,\"date\":\"2006-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2549152228,\"date\":\"2006-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.89,\"date\":\"2006-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2568424155,\"date\":\"2006-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.918,\"date\":\"2006-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2587696081,\"date\":\"2006-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.915,\"date\":\"2006-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2606968008,\"date\":\"2006-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.867,\"date\":\"2006-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2626239934,\"date\":\"2006-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.898,\"date\":\"2006-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2645511861,\"date\":\"2006-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.918,\"date\":\"2006-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2664783787,\"date\":\"2006-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.926,\"date\":\"2006-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2684055714,\"date\":\"2006-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.946,\"date\":\"2006-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.270332764,\"date\":\"2006-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.98,\"date\":\"2006-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2722599567,\"date\":\"2006-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.055,\"date\":\"2006-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2741871493,\"date\":\"2006-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.065,\"date\":\"2006-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2761143419,\"date\":\"2006-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.033,\"date\":\"2006-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2780415346,\"date\":\"2006-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.027,\"date\":\"2006-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2799687272,\"date\":\"2006-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.967,\"date\":\"2006-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2818959199,\"date\":\"2006-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.857,\"date\":\"2006-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2838231125,\"date\":\"2006-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.713,\"date\":\"2006-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2857503052,\"date\":\"2006-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.595,\"date\":\"2006-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2876774978,\"date\":\"2006-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.546,\"date\":\"2006-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2896046905,\"date\":\"2006-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.506,\"date\":\"2006-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2915318831,\"date\":\"2006-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.503,\"date\":\"2006-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2934590758,\"date\":\"2006-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.524,\"date\":\"2006-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2953862684,\"date\":\"2006-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.517,\"date\":\"2006-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2973134611,\"date\":\"2006-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.506,\"date\":\"2006-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2992406537,\"date\":\"2006-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.552,\"date\":\"2006-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3011678464,\"date\":\"2006-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.553,\"date\":\"2006-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.303095039,\"date\":\"2006-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.567,\"date\":\"2006-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3050222317,\"date\":\"2006-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.618,\"date\":\"2006-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3069494243,\"date\":\"2006-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.621,\"date\":\"2006-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.308876617,\"date\":\"2006-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.606,\"date\":\"2006-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3108038096,\"date\":\"2006-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.596,\"date\":\"2006-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3127310023,\"date\":\"2006-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.58,\"date\":\"2007-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3146581949,\"date\":\"2007-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.537,\"date\":\"2007-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3165853876,\"date\":\"2007-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.463,\"date\":\"2007-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3185125802,\"date\":\"2007-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.43,\"date\":\"2007-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3204397728,\"date\":\"2007-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.413,\"date\":\"2007-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3223669655,\"date\":\"2007-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4256666667,\"date\":\"2007-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3242941581,\"date\":\"2007-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.466,\"date\":\"2007-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3262213508,\"date\":\"2007-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.481,\"date\":\"2007-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3281485434,\"date\":\"2007-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5423333333,\"date\":\"2007-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3300757361,\"date\":\"2007-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6166666667,\"date\":\"2007-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3320029287,\"date\":\"2007-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.679,\"date\":\"2007-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3339301214,\"date\":\"2007-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.673,\"date\":\"2007-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.335857314,\"date\":\"2007-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6666666667,\"date\":\"2007-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3377845067,\"date\":\"2007-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7813333333,\"date\":\"2007-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3397116993,\"date\":\"2007-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8306666667,\"date\":\"2007-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.341638892,\"date\":\"2007-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8696666667,\"date\":\"2007-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3435660846,\"date\":\"2007-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8416666667,\"date\":\"2007-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3454932773,\"date\":\"2007-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.796,\"date\":\"2007-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3474204699,\"date\":\"2007-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7746666667,\"date\":\"2007-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3493476626,\"date\":\"2007-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.755,\"date\":\"2007-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3512748552,\"date\":\"2007-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7883333333,\"date\":\"2007-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3532020479,\"date\":\"2007-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8016666667,\"date\":\"2007-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3551292405,\"date\":\"2007-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7833333333,\"date\":\"2007-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3570564332,\"date\":\"2007-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.774,\"date\":\"2007-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3589836258,\"date\":\"2007-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7916666667,\"date\":\"2007-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3609108185,\"date\":\"2007-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8226666667,\"date\":\"2007-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3628380111,\"date\":\"2007-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8166666667,\"date\":\"2007-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3647652037,\"date\":\"2007-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.839,\"date\":\"2007-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3666923964,\"date\":\"2007-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.875,\"date\":\"2007-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.368619589,\"date\":\"2007-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8736666667,\"date\":\"2007-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3705467817,\"date\":\"2007-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.872,\"date\":\"2007-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3724739743,\"date\":\"2007-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8846666667,\"date\":\"2007-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.374401167,\"date\":\"2007-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8326666667,\"date\":\"2007-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3763283596,\"date\":\"2007-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8573333333,\"date\":\"2007-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3782555523,\"date\":\"2007-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8523333333,\"date\":\"2007-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3801827449,\"date\":\"2007-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8843333333,\"date\":\"2007-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3821099376,\"date\":\"2007-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9156666667,\"date\":\"2007-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3840371302,\"date\":\"2007-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9563333333,\"date\":\"2007-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3859643229,\"date\":\"2007-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.026,\"date\":\"2007-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3878915155,\"date\":\"2007-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.04,\"date\":\"2007-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3898187082,\"date\":\"2007-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.022,\"date\":\"2007-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3917459008,\"date\":\"2007-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0226666667,\"date\":\"2007-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3936730935,\"date\":\"2007-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0756666667,\"date\":\"2007-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3956002861,\"date\":\"2007-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.141,\"date\":\"2007-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3975274788,\"date\":\"2007-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2913333333,\"date\":\"2007-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3994546714,\"date\":\"2007-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4103333333,\"date\":\"2007-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4013818641,\"date\":\"2007-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3896666667,\"date\":\"2007-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4033090567,\"date\":\"2007-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4273333333,\"date\":\"2007-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4052362494,\"date\":\"2007-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.393,\"date\":\"2007-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.407163442,\"date\":\"2007-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2963333333,\"date\":\"2007-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4090906346,\"date\":\"2007-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2816666667,\"date\":\"2007-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4110178273,\"date\":\"2007-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2846666667,\"date\":\"2007-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4129450199,\"date\":\"2007-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3243333333,\"date\":\"2007-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4148722126,\"date\":\"2007-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3546666667,\"date\":\"2008-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4167994052,\"date\":\"2008-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2986666667,\"date\":\"2008-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4187265979,\"date\":\"2008-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2416666667,\"date\":\"2008-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4206537905,\"date\":\"2008-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.234,\"date\":\"2008-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4225809832,\"date\":\"2008-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2593333333,\"date\":\"2008-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4245081758,\"date\":\"2008-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.258,\"date\":\"2008-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4264353685,\"date\":\"2008-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3786666667,\"date\":\"2008-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4283625611,\"date\":\"2008-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5403333333,\"date\":\"2008-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4302897538,\"date\":\"2008-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6403333333,\"date\":\"2008-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4322169464,\"date\":\"2008-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.806,\"date\":\"2008-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4341441391,\"date\":\"2008-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.96,\"date\":\"2008-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4360713317,\"date\":\"2008-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.973,\"date\":\"2008-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4379985244,\"date\":\"2008-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9416666667,\"date\":\"2008-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.439925717,\"date\":\"2008-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.932,\"date\":\"2008-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4418529097,\"date\":\"2008-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0383333333,\"date\":\"2008-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4437801023,\"date\":\"2008-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1216666667,\"date\":\"2008-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.445707295,\"date\":\"2008-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.154,\"date\":\"2008-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4476344876,\"date\":\"2008-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.12,\"date\":\"2008-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4495616803,\"date\":\"2008-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.3113333333,\"date\":\"2008-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4514888729,\"date\":\"2008-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4823333333,\"date\":\"2008-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4534160655,\"date\":\"2008-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.7043333333,\"date\":\"2008-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4553432582,\"date\":\"2008-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.6863333333,\"date\":\"2008-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4572704508,\"date\":\"2008-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.668,\"date\":\"2008-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4591976435,\"date\":\"2008-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.6666666667,\"date\":\"2008-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4611248361,\"date\":\"2008-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.6196666667,\"date\":\"2008-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4630520288,\"date\":\"2008-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.6186666667,\"date\":\"2008-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4649792214,\"date\":\"2008-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.712,\"date\":\"2008-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4669064141,\"date\":\"2008-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.7473333333,\"date\":\"2008-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4688336067,\"date\":\"2008-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.692,\"date\":\"2008-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4707607994,\"date\":\"2008-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.5763333333,\"date\":\"2008-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.472687992,\"date\":\"2008-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4706666667,\"date\":\"2008-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4746151847,\"date\":\"2008-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.3203333333,\"date\":\"2008-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4765423773,\"date\":\"2008-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.176,\"date\":\"2008-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.47846957,\"date\":\"2008-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.114,\"date\":\"2008-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4803967626,\"date\":\"2008-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0903333333,\"date\":\"2008-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4823239553,\"date\":\"2008-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0233333333,\"date\":\"2008-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4842511479,\"date\":\"2008-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.997,\"date\":\"2008-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4861783406,\"date\":\"2008-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9366666667,\"date\":\"2008-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4881055332,\"date\":\"2008-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9383333333,\"date\":\"2008-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4900327259,\"date\":\"2008-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8476666667,\"date\":\"2008-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4919599185,\"date\":\"2008-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6296666667,\"date\":\"2008-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4938871112,\"date\":\"2008-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4456666667,\"date\":\"2008-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4958143038,\"date\":\"2008-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.259,\"date\":\"2008-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4977414964,\"date\":\"2008-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0606666667,\"date\":\"2008-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4996686891,\"date\":\"2008-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9103333333,\"date\":\"2008-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5015958817,\"date\":\"2008-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7766666667,\"date\":\"2008-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5035230744,\"date\":\"2008-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.637,\"date\":\"2008-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.505450267,\"date\":\"2008-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5943333333,\"date\":\"2008-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5073774597,\"date\":\"2008-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.519,\"date\":\"2008-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5093046523,\"date\":\"2008-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.426,\"date\":\"2008-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.511231845,\"date\":\"2008-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3695,\"date\":\"2008-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5131590376,\"date\":\"2008-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.331,\"date\":\"2008-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5150862303,\"date\":\"2008-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.295,\"date\":\"2009-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5170134229,\"date\":\"2009-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.319,\"date\":\"2009-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5189406156,\"date\":\"2009-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3015,\"date\":\"2009-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5208678082,\"date\":\"2009-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.273,\"date\":\"2009-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5227950009,\"date\":\"2009-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.251,\"date\":\"2009-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5247221935,\"date\":\"2009-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2245,\"date\":\"2009-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5266493862,\"date\":\"2009-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1915,\"date\":\"2009-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5285765788,\"date\":\"2009-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.134,\"date\":\"2009-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5305037715,\"date\":\"2009-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.091,\"date\":\"2009-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5324309641,\"date\":\"2009-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.048,\"date\":\"2009-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5343581568,\"date\":\"2009-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.02,\"date\":\"2009-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5362853494,\"date\":\"2009-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0915,\"date\":\"2009-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5382125421,\"date\":\"2009-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.223,\"date\":\"2009-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5401397347,\"date\":\"2009-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2305,\"date\":\"2009-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5420669273,\"date\":\"2009-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2315,\"date\":\"2009-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.54399412,\"date\":\"2009-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2235,\"date\":\"2009-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5459213126,\"date\":\"2009-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.204,\"date\":\"2009-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5478485053,\"date\":\"2009-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1885,\"date\":\"2009-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5497756979,\"date\":\"2009-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2195,\"date\":\"2009-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5517028906,\"date\":\"2009-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.234,\"date\":\"2009-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5536300832,\"date\":\"2009-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.276,\"date\":\"2009-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5555572759,\"date\":\"2009-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.353,\"date\":\"2009-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5574844685,\"date\":\"2009-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4995,\"date\":\"2009-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5594116612,\"date\":\"2009-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5735,\"date\":\"2009-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5613388538,\"date\":\"2009-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6175,\"date\":\"2009-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5632660465,\"date\":\"2009-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.61,\"date\":\"2009-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5651932391,\"date\":\"2009-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.596,\"date\":\"2009-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5671204318,\"date\":\"2009-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.544,\"date\":\"2009-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5690476244,\"date\":\"2009-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4985,\"date\":\"2009-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5709748171,\"date\":\"2009-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.53,\"date\":\"2009-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5729020097,\"date\":\"2009-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.552,\"date\":\"2009-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5748292024,\"date\":\"2009-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6265,\"date\":\"2009-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.576756395,\"date\":\"2009-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.654,\"date\":\"2009-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5786835877,\"date\":\"2009-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.67,\"date\":\"2009-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5806107803,\"date\":\"2009-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6765,\"date\":\"2009-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.582537973,\"date\":\"2009-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6485,\"date\":\"2009-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5844651656,\"date\":\"2009-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.636,\"date\":\"2009-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5863923582,\"date\":\"2009-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.624,\"date\":\"2009-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5883195509,\"date\":\"2009-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6035,\"date\":\"2009-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5902467435,\"date\":\"2009-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.585,\"date\":\"2009-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5921739362,\"date\":\"2009-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.602,\"date\":\"2009-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5941011288,\"date\":\"2009-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7065,\"date\":\"2009-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5960283215,\"date\":\"2009-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.803,\"date\":\"2009-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5979555141,\"date\":\"2009-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8095,\"date\":\"2009-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5998827068,\"date\":\"2009-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.803,\"date\":\"2009-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6018098994,\"date\":\"2009-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7925,\"date\":\"2009-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6037370921,\"date\":\"2009-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7895,\"date\":\"2009-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6056642847,\"date\":\"2009-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7775,\"date\":\"2009-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6075914774,\"date\":\"2009-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7745,\"date\":\"2009-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.60951867,\"date\":\"2009-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7505,\"date\":\"2009-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6114458627,\"date\":\"2009-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7285,\"date\":\"2009-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6133730553,\"date\":\"2009-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.734,\"date\":\"2009-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.615300248,\"date\":\"2009-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.799,\"date\":\"2010-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6172274406,\"date\":\"2010-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8805,\"date\":\"2010-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6191546333,\"date\":\"2010-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.872,\"date\":\"2010-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6210818259,\"date\":\"2010-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8355,\"date\":\"2010-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6230090186,\"date\":\"2010-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.784,\"date\":\"2010-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6249362112,\"date\":\"2010-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.772,\"date\":\"2010-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6268634039,\"date\":\"2010-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7585,\"date\":\"2010-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6287905965,\"date\":\"2010-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.833,\"date\":\"2010-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6307177891,\"date\":\"2010-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.863,\"date\":\"2010-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6326449818,\"date\":\"2010-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.905,\"date\":\"2010-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6345721744,\"date\":\"2010-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.925,\"date\":\"2010-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6364993671,\"date\":\"2010-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9475,\"date\":\"2010-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6384265597,\"date\":\"2010-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9405,\"date\":\"2010-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6403537524,\"date\":\"2010-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.016,\"date\":\"2010-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.642280945,\"date\":\"2010-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.071,\"date\":\"2010-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6442081377,\"date\":\"2010-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.076,\"date\":\"2010-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6461353303,\"date\":\"2010-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.08,\"date\":\"2010-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.648062523,\"date\":\"2010-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.124,\"date\":\"2010-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6499897156,\"date\":\"2010-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.129,\"date\":\"2010-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6519169083,\"date\":\"2010-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.096,\"date\":\"2010-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6538441009,\"date\":\"2010-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.023,\"date\":\"2010-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6557712936,\"date\":\"2010-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9815,\"date\":\"2010-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6576984862,\"date\":\"2010-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9475,\"date\":\"2010-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6596256789,\"date\":\"2010-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.929,\"date\":\"2010-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6615528715,\"date\":\"2010-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9615,\"date\":\"2010-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6634800642,\"date\":\"2010-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9565,\"date\":\"2010-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6654072568,\"date\":\"2010-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9245,\"date\":\"2010-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6673344495,\"date\":\"2010-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9035,\"date\":\"2010-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6692616421,\"date\":\"2010-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.899,\"date\":\"2010-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6711888348,\"date\":\"2010-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.919,\"date\":\"2010-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6731160274,\"date\":\"2010-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.928,\"date\":\"2010-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.67504322,\"date\":\"2010-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.991,\"date\":\"2010-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6769704127,\"date\":\"2010-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.979,\"date\":\"2010-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6788976053,\"date\":\"2010-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.957,\"date\":\"2010-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.680824798,\"date\":\"2010-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.938,\"date\":\"2010-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6827519906,\"date\":\"2010-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.931,\"date\":\"2010-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6846791833,\"date\":\"2010-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.943,\"date\":\"2010-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6866063759,\"date\":\"2010-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.96,\"date\":\"2010-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6885335686,\"date\":\"2010-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.951,\"date\":\"2010-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6904607612,\"date\":\"2010-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3,\"date\":\"2010-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6923879539,\"date\":\"2010-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.066,\"date\":\"2010-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6943151465,\"date\":\"2010-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.073,\"date\":\"2010-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6962423392,\"date\":\"2010-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.067,\"date\":\"2010-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6981695318,\"date\":\"2010-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.067,\"date\":\"2010-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7000967245,\"date\":\"2010-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.116,\"date\":\"2010-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7020239171,\"date\":\"2010-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.184,\"date\":\"2010-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7039511098,\"date\":\"2010-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.171,\"date\":\"2010-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7058783024,\"date\":\"2010-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.162,\"date\":\"2010-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7078054951,\"date\":\"2010-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.197,\"date\":\"2010-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7097326877,\"date\":\"2010-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.231,\"date\":\"2010-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7116598804,\"date\":\"2010-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.248,\"date\":\"2010-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.713587073,\"date\":\"2010-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.294,\"date\":\"2010-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7155142657,\"date\":\"2010-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.331,\"date\":\"2011-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7174414583,\"date\":\"2011-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.333,\"date\":\"2011-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7193686509,\"date\":\"2011-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.407,\"date\":\"2011-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7212958436,\"date\":\"2011-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.43,\"date\":\"2011-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7232230362,\"date\":\"2011-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.438,\"date\":\"2011-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7251502289,\"date\":\"2011-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.513,\"date\":\"2011-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7270774215,\"date\":\"2011-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.534,\"date\":\"2011-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7290046142,\"date\":\"2011-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.573,\"date\":\"2011-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7309318068,\"date\":\"2011-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.716,\"date\":\"2011-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7328589995,\"date\":\"2011-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.871,\"date\":\"2011-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7347861921,\"date\":\"2011-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.908,\"date\":\"2011-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7367133848,\"date\":\"2011-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.907,\"date\":\"2011-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7386405774,\"date\":\"2011-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.932,\"date\":\"2011-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7405677701,\"date\":\"2011-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.976,\"date\":\"2011-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7424949627,\"date\":\"2011-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.078,\"date\":\"2011-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7444221554,\"date\":\"2011-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.105,\"date\":\"2011-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.746349348,\"date\":\"2011-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.098,\"date\":\"2011-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7482765407,\"date\":\"2011-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.124,\"date\":\"2011-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7502037333,\"date\":\"2011-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.104,\"date\":\"2011-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.752130926,\"date\":\"2011-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.061,\"date\":\"2011-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7540581186,\"date\":\"2011-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.997,\"date\":\"2011-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7559853113,\"date\":\"2011-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.948,\"date\":\"2011-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7579125039,\"date\":\"2011-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.94,\"date\":\"2011-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7598396966,\"date\":\"2011-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.954,\"date\":\"2011-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7617668892,\"date\":\"2011-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.95,\"date\":\"2011-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7636940818,\"date\":\"2011-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.888,\"date\":\"2011-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7656212745,\"date\":\"2011-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.85,\"date\":\"2011-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7675484671,\"date\":\"2011-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.899,\"date\":\"2011-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7694756598,\"date\":\"2011-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.923,\"date\":\"2011-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7714028524,\"date\":\"2011-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.949,\"date\":\"2011-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7733300451,\"date\":\"2011-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.937,\"date\":\"2011-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7752572377,\"date\":\"2011-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.897,\"date\":\"2011-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7771844304,\"date\":\"2011-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.835,\"date\":\"2011-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.779111623,\"date\":\"2011-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.81,\"date\":\"2011-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7810388157,\"date\":\"2011-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.82,\"date\":\"2011-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7829660083,\"date\":\"2011-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.868,\"date\":\"2011-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.784893201,\"date\":\"2011-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.862,\"date\":\"2011-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7868203936,\"date\":\"2011-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.833,\"date\":\"2011-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7887475863,\"date\":\"2011-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.786,\"date\":\"2011-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7906747789,\"date\":\"2011-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.749,\"date\":\"2011-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7926019716,\"date\":\"2011-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.721,\"date\":\"2011-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7945291642,\"date\":\"2011-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.801,\"date\":\"2011-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7964563569,\"date\":\"2011-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.825,\"date\":\"2011-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7983835495,\"date\":\"2011-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.892,\"date\":\"2011-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8003107422,\"date\":\"2011-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.887,\"date\":\"2011-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8022379348,\"date\":\"2011-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.987,\"date\":\"2011-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8041651275,\"date\":\"2011-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.01,\"date\":\"2011-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8060923201,\"date\":\"2011-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.964,\"date\":\"2011-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8080195127,\"date\":\"2011-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.931,\"date\":\"2011-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8099467054,\"date\":\"2011-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.894,\"date\":\"2011-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.811873898,\"date\":\"2011-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.828,\"date\":\"2011-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8138010907,\"date\":\"2011-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.791,\"date\":\"2011-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8157282833,\"date\":\"2011-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.783,\"date\":\"2012-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.817655476,\"date\":\"2012-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.828,\"date\":\"2012-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8195826686,\"date\":\"2012-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.854,\"date\":\"2012-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8215098613,\"date\":\"2012-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.848,\"date\":\"2012-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8234370539,\"date\":\"2012-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.85,\"date\":\"2012-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8253642466,\"date\":\"2012-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.856,\"date\":\"2012-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8272914392,\"date\":\"2012-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.943,\"date\":\"2012-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8292186319,\"date\":\"2012-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.96,\"date\":\"2012-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8311458245,\"date\":\"2012-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.051,\"date\":\"2012-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8330730172,\"date\":\"2012-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.094,\"date\":\"2012-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8350002098,\"date\":\"2012-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.123,\"date\":\"2012-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8369274025,\"date\":\"2012-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.142,\"date\":\"2012-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8388545951,\"date\":\"2012-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.147,\"date\":\"2012-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8407817878,\"date\":\"2012-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.142,\"date\":\"2012-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8427089804,\"date\":\"2012-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.148,\"date\":\"2012-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8446361731,\"date\":\"2012-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.127,\"date\":\"2012-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8465633657,\"date\":\"2012-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.085,\"date\":\"2012-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8484905584,\"date\":\"2012-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.073,\"date\":\"2012-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.850417751,\"date\":\"2012-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.057,\"date\":\"2012-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8523449436,\"date\":\"2012-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.004,\"date\":\"2012-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8542721363,\"date\":\"2012-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.956,\"date\":\"2012-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8561993289,\"date\":\"2012-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.897,\"date\":\"2012-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8581265216,\"date\":\"2012-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.846,\"date\":\"2012-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8600537142,\"date\":\"2012-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.781,\"date\":\"2012-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8619809069,\"date\":\"2012-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.729,\"date\":\"2012-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8639080995,\"date\":\"2012-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.678,\"date\":\"2012-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8658352922,\"date\":\"2012-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.648,\"date\":\"2012-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8677624848,\"date\":\"2012-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.683,\"date\":\"2012-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8696896775,\"date\":\"2012-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.695,\"date\":\"2012-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8716168701,\"date\":\"2012-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.783,\"date\":\"2012-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8735440628,\"date\":\"2012-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.796,\"date\":\"2012-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8754712554,\"date\":\"2012-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.85,\"date\":\"2012-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8773984481,\"date\":\"2012-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.965,\"date\":\"2012-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8793256407,\"date\":\"2012-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.026,\"date\":\"2012-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8812528334,\"date\":\"2012-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.089,\"date\":\"2012-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.883180026,\"date\":\"2012-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.127,\"date\":\"2012-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8851072187,\"date\":\"2012-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.132,\"date\":\"2012-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8870344113,\"date\":\"2012-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.135,\"date\":\"2012-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.888961604,\"date\":\"2012-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.086,\"date\":\"2012-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8908887966,\"date\":\"2012-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.079,\"date\":\"2012-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8928159893,\"date\":\"2012-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.094,\"date\":\"2012-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8947431819,\"date\":\"2012-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.15,\"date\":\"2012-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8966703745,\"date\":\"2012-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.116,\"date\":\"2012-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8985975672,\"date\":\"2012-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.03,\"date\":\"2012-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9005247598,\"date\":\"2012-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.01,\"date\":\"2012-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9024519525,\"date\":\"2012-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.98,\"date\":\"2012-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9043791451,\"date\":\"2012-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.976,\"date\":\"2012-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9063063378,\"date\":\"2012-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.034,\"date\":\"2012-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9082335304,\"date\":\"2012-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.027,\"date\":\"2012-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9101607231,\"date\":\"2012-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.991,\"date\":\"2012-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9120879157,\"date\":\"2012-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.945,\"date\":\"2012-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9140151084,\"date\":\"2012-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.923,\"date\":\"2012-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.915942301,\"date\":\"2012-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.918,\"date\":\"2012-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9178694937,\"date\":\"2012-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.911,\"date\":\"2013-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9197966863,\"date\":\"2013-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.894,\"date\":\"2013-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.921723879,\"date\":\"2013-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.902,\"date\":\"2013-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9236510716,\"date\":\"2013-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.927,\"date\":\"2013-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9255782643,\"date\":\"2013-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.022,\"date\":\"2013-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9275054569,\"date\":\"2013-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.104,\"date\":\"2013-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9294326496,\"date\":\"2013-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.157,\"date\":\"2013-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9313598422,\"date\":\"2013-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.159,\"date\":\"2013-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9332870349,\"date\":\"2013-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.13,\"date\":\"2013-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9352142275,\"date\":\"2013-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.088,\"date\":\"2013-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9371414202,\"date\":\"2013-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.047,\"date\":\"2013-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9390686128,\"date\":\"2013-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.006,\"date\":\"2013-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9409958054,\"date\":\"2013-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.993,\"date\":\"2013-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9429229981,\"date\":\"2013-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.977,\"date\":\"2013-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9448501907,\"date\":\"2013-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.942,\"date\":\"2013-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9467773834,\"date\":\"2013-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.887,\"date\":\"2013-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.948704576,\"date\":\"2013-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.851,\"date\":\"2013-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9506317687,\"date\":\"2013-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.845,\"date\":\"2013-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9525589613,\"date\":\"2013-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.866,\"date\":\"2013-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.954486154,\"date\":\"2013-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.89,\"date\":\"2013-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9564133466,\"date\":\"2013-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.88,\"date\":\"2013-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9583405393,\"date\":\"2013-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.869,\"date\":\"2013-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9602677319,\"date\":\"2013-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.849,\"date\":\"2013-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9621949246,\"date\":\"2013-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.841,\"date\":\"2013-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9641221172,\"date\":\"2013-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.838,\"date\":\"2013-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9660493099,\"date\":\"2013-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.817,\"date\":\"2013-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9679765025,\"date\":\"2013-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.828,\"date\":\"2013-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9699036952,\"date\":\"2013-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.867,\"date\":\"2013-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9718308878,\"date\":\"2013-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.903,\"date\":\"2013-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9737580805,\"date\":\"2013-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.915,\"date\":\"2013-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9756852731,\"date\":\"2013-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.909,\"date\":\"2013-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9776124658,\"date\":\"2013-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.896,\"date\":\"2013-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9795396584,\"date\":\"2013-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9,\"date\":\"2013-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9814668511,\"date\":\"2013-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.913,\"date\":\"2013-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9833940437,\"date\":\"2013-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.981,\"date\":\"2013-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9853212363,\"date\":\"2013-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.981,\"date\":\"2013-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.987248429,\"date\":\"2013-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.974,\"date\":\"2013-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9891756216,\"date\":\"2013-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.949,\"date\":\"2013-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9911028143,\"date\":\"2013-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.919,\"date\":\"2013-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9930300069,\"date\":\"2013-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.897,\"date\":\"2013-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9949571996,\"date\":\"2013-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.886,\"date\":\"2013-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9968843922,\"date\":\"2013-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.886,\"date\":\"2013-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9988115849,\"date\":\"2013-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.87,\"date\":\"2013-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0007387775,\"date\":\"2013-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.857,\"date\":\"2013-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0026659702,\"date\":\"2013-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.832,\"date\":\"2013-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0045931628,\"date\":\"2013-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.822,\"date\":\"2013-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0065203555,\"date\":\"2013-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.844,\"date\":\"2013-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0084475481,\"date\":\"2013-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.883,\"date\":\"2013-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0103747408,\"date\":\"2013-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.879,\"date\":\"2013-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0123019334,\"date\":\"2013-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.871,\"date\":\"2013-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0142291261,\"date\":\"2013-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.873,\"date\":\"2013-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0161563187,\"date\":\"2013-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.903,\"date\":\"2013-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0180835114,\"date\":\"2013-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.91,\"date\":\"2014-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.020010704,\"date\":\"2014-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.886,\"date\":\"2014-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0219378967,\"date\":\"2014-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.873,\"date\":\"2014-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0238650893,\"date\":\"2014-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.904,\"date\":\"2014-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.025792282,\"date\":\"2014-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.951,\"date\":\"2014-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0277194746,\"date\":\"2014-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.977,\"date\":\"2014-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0296466672,\"date\":\"2014-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.989,\"date\":\"2014-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0315738599,\"date\":\"2014-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.017,\"date\":\"2014-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0335010525,\"date\":\"2014-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.016,\"date\":\"2014-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0354282452,\"date\":\"2014-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.021,\"date\":\"2014-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0373554378,\"date\":\"2014-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.003,\"date\":\"2014-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0392826305,\"date\":\"2014-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.988,\"date\":\"2014-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0412098231,\"date\":\"2014-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.975,\"date\":\"2014-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0431370158,\"date\":\"2014-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.959,\"date\":\"2014-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0450642084,\"date\":\"2014-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.952,\"date\":\"2014-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0469914011,\"date\":\"2014-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.971,\"date\":\"2014-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0489185937,\"date\":\"2014-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.975,\"date\":\"2014-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0508457864,\"date\":\"2014-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.964,\"date\":\"2014-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.052772979,\"date\":\"2014-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.948,\"date\":\"2014-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0547001717,\"date\":\"2014-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.934,\"date\":\"2014-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0566273643,\"date\":\"2014-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.925,\"date\":\"2014-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.058554557,\"date\":\"2014-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.918,\"date\":\"2014-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0604817496,\"date\":\"2014-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.892,\"date\":\"2014-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0624089423,\"date\":\"2014-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.882,\"date\":\"2014-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0643361349,\"date\":\"2014-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.919,\"date\":\"2014-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0662633276,\"date\":\"2014-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.92,\"date\":\"2014-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0681905202,\"date\":\"2014-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.913,\"date\":\"2014-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0701177129,\"date\":\"2014-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.894,\"date\":\"2014-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0720449055,\"date\":\"2014-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.869,\"date\":\"2014-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0739720981,\"date\":\"2014-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.858,\"date\":\"2014-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0758992908,\"date\":\"2014-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.853,\"date\":\"2014-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0778264834,\"date\":\"2014-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.843,\"date\":\"2014-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0797536761,\"date\":\"2014-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.835,\"date\":\"2014-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0816808687,\"date\":\"2014-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.821,\"date\":\"2014-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0836080614,\"date\":\"2014-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.814,\"date\":\"2014-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.085535254,\"date\":\"2014-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.814,\"date\":\"2014-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0874624467,\"date\":\"2014-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.801,\"date\":\"2014-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0893896393,\"date\":\"2014-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.778,\"date\":\"2014-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.091316832,\"date\":\"2014-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.755,\"date\":\"2014-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0932440246,\"date\":\"2014-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.733,\"date\":\"2014-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0951712173,\"date\":\"2014-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.698,\"date\":\"2014-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0970984099,\"date\":\"2014-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.656,\"date\":\"2014-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0990256026,\"date\":\"2014-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.635,\"date\":\"2014-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1009527952,\"date\":\"2014-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.623,\"date\":\"2014-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1028799879,\"date\":\"2014-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.677,\"date\":\"2014-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1048071805,\"date\":\"2014-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.661,\"date\":\"2014-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1067343732,\"date\":\"2014-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.628,\"date\":\"2014-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1086615658,\"date\":\"2014-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.605,\"date\":\"2014-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1105887585,\"date\":\"2014-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.535,\"date\":\"2014-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1125159511,\"date\":\"2014-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.419,\"date\":\"2014-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1144431438,\"date\":\"2014-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.281,\"date\":\"2014-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1163703364,\"date\":\"2014-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.213,\"date\":\"2014-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.118297529,\"date\":\"2014-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.137,\"date\":\"2015-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1202247217,\"date\":\"2015-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.053,\"date\":\"2015-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1221519143,\"date\":\"2015-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.933,\"date\":\"2015-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.124079107,\"date\":\"2015-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.866,\"date\":\"2015-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1260062996,\"date\":\"2015-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.831,\"date\":\"2015-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1279334923,\"date\":\"2015-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.835,\"date\":\"2015-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1298606849,\"date\":\"2015-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.865,\"date\":\"2015-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1317878776,\"date\":\"2015-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9,\"date\":\"2015-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1337150702,\"date\":\"2015-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.936,\"date\":\"2015-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1356422629,\"date\":\"2015-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.944,\"date\":\"2015-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1375694555,\"date\":\"2015-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.917,\"date\":\"2015-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1394966482,\"date\":\"2015-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.864,\"date\":\"2015-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1414238408,\"date\":\"2015-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.824,\"date\":\"2015-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1433510335,\"date\":\"2015-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.784,\"date\":\"2015-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1452782261,\"date\":\"2015-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.754,\"date\":\"2015-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1472054188,\"date\":\"2015-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.78,\"date\":\"2015-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1491326114,\"date\":\"2015-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.811,\"date\":\"2015-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1510598041,\"date\":\"2015-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.854,\"date\":\"2015-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1529869967,\"date\":\"2015-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.878,\"date\":\"2015-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1549141894,\"date\":\"2015-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.904,\"date\":\"2015-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.156841382,\"date\":\"2015-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.914,\"date\":\"2015-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1587685747,\"date\":\"2015-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.909,\"date\":\"2015-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1606957673,\"date\":\"2015-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.884,\"date\":\"2015-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1626229599,\"date\":\"2015-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.87,\"date\":\"2015-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1645501526,\"date\":\"2015-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.859,\"date\":\"2015-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1664773452,\"date\":\"2015-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.843,\"date\":\"2015-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1684045379,\"date\":\"2015-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.832,\"date\":\"2015-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1703317305,\"date\":\"2015-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.814,\"date\":\"2015-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1722589232,\"date\":\"2015-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.782,\"date\":\"2015-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1741861158,\"date\":\"2015-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.723,\"date\":\"2015-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1761133085,\"date\":\"2015-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.668,\"date\":\"2015-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1780405011,\"date\":\"2015-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.617,\"date\":\"2015-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1799676938,\"date\":\"2015-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.615,\"date\":\"2015-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1818948864,\"date\":\"2015-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.561,\"date\":\"2015-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1838220791,\"date\":\"2015-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.514,\"date\":\"2015-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1857492717,\"date\":\"2015-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.534,\"date\":\"2015-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1876764644,\"date\":\"2015-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.517,\"date\":\"2015-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.189603657,\"date\":\"2015-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.493,\"date\":\"2015-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1915308497,\"date\":\"2015-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.476,\"date\":\"2015-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1934580423,\"date\":\"2015-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.492,\"date\":\"2015-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.195385235,\"date\":\"2015-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.556,\"date\":\"2015-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1973124276,\"date\":\"2015-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.531,\"date\":\"2015-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1992396203,\"date\":\"2015-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.498,\"date\":\"2015-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2011668129,\"date\":\"2015-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.485,\"date\":\"2015-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2030940056,\"date\":\"2015-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.502,\"date\":\"2015-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2050211982,\"date\":\"2015-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.482,\"date\":\"2015-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2069483908,\"date\":\"2015-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.445,\"date\":\"2015-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2088755835,\"date\":\"2015-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.421,\"date\":\"2015-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2108027761,\"date\":\"2015-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.379,\"date\":\"2015-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2127299688,\"date\":\"2015-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.338,\"date\":\"2015-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2146571614,\"date\":\"2015-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.284,\"date\":\"2015-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2165843541,\"date\":\"2015-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.237,\"date\":\"2015-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2185115467,\"date\":\"2015-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.211,\"date\":\"2016-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2204387394,\"date\":\"2016-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.177,\"date\":\"2016-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.222365932,\"date\":\"2016-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.112,\"date\":\"2016-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2242931247,\"date\":\"2016-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.071,\"date\":\"2016-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2262203173,\"date\":\"2016-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.031,\"date\":\"2016-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.22814751,\"date\":\"2016-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.008,\"date\":\"2016-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2300747026,\"date\":\"2016-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.98,\"date\":\"2016-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2320018953,\"date\":\"2016-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.983,\"date\":\"2016-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2339290879,\"date\":\"2016-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.989,\"date\":\"2016-02-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2358562806,\"date\":\"2016-02-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.021,\"date\":\"2016-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2377834732,\"date\":\"2016-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.099,\"date\":\"2016-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2397106659,\"date\":\"2016-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.119,\"date\":\"2016-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2416378585,\"date\":\"2016-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.121,\"date\":\"2016-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2435650512,\"date\":\"2016-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.115,\"date\":\"2016-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2454922438,\"date\":\"2016-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.128,\"date\":\"2016-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2474194365,\"date\":\"2016-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.165,\"date\":\"2016-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2493466291,\"date\":\"2016-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.198,\"date\":\"2016-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2512738217,\"date\":\"2016-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.266,\"date\":\"2016-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2532010144,\"date\":\"2016-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.271,\"date\":\"2016-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.255128207,\"date\":\"2016-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.297,\"date\":\"2016-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2570553997,\"date\":\"2016-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.357,\"date\":\"2016-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2589825923,\"date\":\"2016-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.382,\"date\":\"2016-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.260909785,\"date\":\"2016-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.407,\"date\":\"2016-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2628369776,\"date\":\"2016-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.431,\"date\":\"2016-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2647641703,\"date\":\"2016-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.426,\"date\":\"2016-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2666913629,\"date\":\"2016-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.426,\"date\":\"2016-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2686185556,\"date\":\"2016-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.423,\"date\":\"2016-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2705457482,\"date\":\"2016-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.414,\"date\":\"2016-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2724729409,\"date\":\"2016-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.402,\"date\":\"2016-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2744001335,\"date\":\"2016-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.379,\"date\":\"2016-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2763273262,\"date\":\"2016-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.348,\"date\":\"2016-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2782545188,\"date\":\"2016-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.316,\"date\":\"2016-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2801817115,\"date\":\"2016-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.31,\"date\":\"2016-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2821089041,\"date\":\"2016-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.37,\"date\":\"2016-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2840360968,\"date\":\"2016-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.409,\"date\":\"2016-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2859632894,\"date\":\"2016-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.407,\"date\":\"2016-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2878904821,\"date\":\"2016-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.399,\"date\":\"2016-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2898176747,\"date\":\"2016-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.389,\"date\":\"2016-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2917448674,\"date\":\"2016-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.382,\"date\":\"2016-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.29367206,\"date\":\"2016-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.389,\"date\":\"2016-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2955992526,\"date\":\"2016-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.445,\"date\":\"2016-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2975264453,\"date\":\"2016-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.481,\"date\":\"2016-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2994536379,\"date\":\"2016-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.478,\"date\":\"2016-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3013808306,\"date\":\"2016-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.479,\"date\":\"2016-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3033080232,\"date\":\"2016-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.47,\"date\":\"2016-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3052352159,\"date\":\"2016-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.443,\"date\":\"2016-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3071624085,\"date\":\"2016-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.421,\"date\":\"2016-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3090896012,\"date\":\"2016-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.42,\"date\":\"2016-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3110167938,\"date\":\"2016-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.48,\"date\":\"2016-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3129439865,\"date\":\"2016-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.493,\"date\":\"2016-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3148711791,\"date\":\"2016-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.527,\"date\":\"2016-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3167983718,\"date\":\"2016-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.54,\"date\":\"2016-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3187255644,\"date\":\"2016-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.586,\"date\":\"2017-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3206527571,\"date\":\"2017-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.597,\"date\":\"2017-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3225799497,\"date\":\"2017-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.585,\"date\":\"2017-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3245071424,\"date\":\"2017-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.569,\"date\":\"2017-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.326434335,\"date\":\"2017-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.562,\"date\":\"2017-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3283615277,\"date\":\"2017-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.558,\"date\":\"2017-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3302887203,\"date\":\"2017-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.565,\"date\":\"2017-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.332215913,\"date\":\"2017-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.572,\"date\":\"2017-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3341431056,\"date\":\"2017-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.577,\"date\":\"2017-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3360702983,\"date\":\"2017-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.579,\"date\":\"2017-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3379974909,\"date\":\"2017-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.564,\"date\":\"2017-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3399246835,\"date\":\"2017-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.539,\"date\":\"2017-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3418518762,\"date\":\"2017-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.532,\"date\":\"2017-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3437790688,\"date\":\"2017-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.556,\"date\":\"2017-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3457062615,\"date\":\"2017-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.582,\"date\":\"2017-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3476334541,\"date\":\"2017-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.597,\"date\":\"2017-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3495606468,\"date\":\"2017-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.595,\"date\":\"2017-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3514878394,\"date\":\"2017-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.583,\"date\":\"2017-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3534150321,\"date\":\"2017-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.565,\"date\":\"2017-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3553422247,\"date\":\"2017-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.544,\"date\":\"2017-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3572694174,\"date\":\"2017-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.539,\"date\":\"2017-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.35919661,\"date\":\"2017-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.571,\"date\":\"2017-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3611238027,\"date\":\"2017-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.564,\"date\":\"2017-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3630509953,\"date\":\"2017-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.524,\"date\":\"2017-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.364978188,\"date\":\"2017-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.489,\"date\":\"2017-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3669053806,\"date\":\"2017-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.465,\"date\":\"2017-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3688325733,\"date\":\"2017-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.472,\"date\":\"2017-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3707597659,\"date\":\"2017-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.481,\"date\":\"2017-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3726869586,\"date\":\"2017-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.491,\"date\":\"2017-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3746141512,\"date\":\"2017-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.507,\"date\":\"2017-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3765413439,\"date\":\"2017-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.531,\"date\":\"2017-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3784685365,\"date\":\"2017-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.581,\"date\":\"2017-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3803957292,\"date\":\"2017-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.598,\"date\":\"2017-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3823229218,\"date\":\"2017-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.596,\"date\":\"2017-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3842501144,\"date\":\"2017-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.605,\"date\":\"2017-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3861773071,\"date\":\"2017-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.758,\"date\":\"2017-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3881044997,\"date\":\"2017-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.802,\"date\":\"2017-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3900316924,\"date\":\"2017-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.791,\"date\":\"2017-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.391958885,\"date\":\"2017-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.788,\"date\":\"2017-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3938860777,\"date\":\"2017-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.792,\"date\":\"2017-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3958132703,\"date\":\"2017-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.776,\"date\":\"2017-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.397740463,\"date\":\"2017-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.787,\"date\":\"2017-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3996676556,\"date\":\"2017-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.797,\"date\":\"2017-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4015948483,\"date\":\"2017-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.819,\"date\":\"2017-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4035220409,\"date\":\"2017-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.882,\"date\":\"2017-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4054492336,\"date\":\"2017-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.915,\"date\":\"2017-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4073764262,\"date\":\"2017-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.912,\"date\":\"2017-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4093036189,\"date\":\"2017-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.926,\"date\":\"2017-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4112308115,\"date\":\"2017-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.922,\"date\":\"2017-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4131580042,\"date\":\"2017-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.91,\"date\":\"2017-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4150851968,\"date\":\"2017-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.901,\"date\":\"2017-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4170123895,\"date\":\"2017-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.903,\"date\":\"2017-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4189395821,\"date\":\"2017-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.973,\"date\":\"2018-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4208667748,\"date\":\"2018-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.996,\"date\":\"2018-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4227939674,\"date\":\"2018-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.028,\"date\":\"2018-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4247211601,\"date\":\"2018-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.025,\"date\":\"2018-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4266483527,\"date\":\"2018-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.07,\"date\":\"2018-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4285755453,\"date\":\"2018-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.086,\"date\":\"2018-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.430502738,\"date\":\"2018-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.063,\"date\":\"2018-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4324299306,\"date\":\"2018-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.027,\"date\":\"2018-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4343571233,\"date\":\"2018-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.007,\"date\":\"2018-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4362843159,\"date\":\"2018-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.992,\"date\":\"2018-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4382115086,\"date\":\"2018-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.976,\"date\":\"2018-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4401387012,\"date\":\"2018-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.972,\"date\":\"2018-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4420658939,\"date\":\"2018-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.01,\"date\":\"2018-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4439930865,\"date\":\"2018-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.042,\"date\":\"2018-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4459202792,\"date\":\"2018-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.043,\"date\":\"2018-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4478474718,\"date\":\"2018-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.104,\"date\":\"2018-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4497746645,\"date\":\"2018-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.133,\"date\":\"2018-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4517018571,\"date\":\"2018-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.157,\"date\":\"2018-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4536290498,\"date\":\"2018-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.171,\"date\":\"2018-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4555562424,\"date\":\"2018-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.239,\"date\":\"2018-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4574834351,\"date\":\"2018-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.277,\"date\":\"2018-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4594106277,\"date\":\"2018-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.288,\"date\":\"2018-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4613378204,\"date\":\"2018-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.285,\"date\":\"2018-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.463265013,\"date\":\"2018-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.266,\"date\":\"2018-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4651922057,\"date\":\"2018-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.244,\"date\":\"2018-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4671193983,\"date\":\"2018-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.216,\"date\":\"2018-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.469046591,\"date\":\"2018-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.236,\"date\":\"2018-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4709737836,\"date\":\"2018-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.243,\"date\":\"2018-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4729009762,\"date\":\"2018-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.239,\"date\":\"2018-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4748281689,\"date\":\"2018-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.22,\"date\":\"2018-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4767553615,\"date\":\"2018-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.226,\"date\":\"2018-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4786825542,\"date\":\"2018-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.223,\"date\":\"2018-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4806097468,\"date\":\"2018-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.217,\"date\":\"2018-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4825369395,\"date\":\"2018-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.207,\"date\":\"2018-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4844641321,\"date\":\"2018-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.226,\"date\":\"2018-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4863913248,\"date\":\"2018-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.252,\"date\":\"2018-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4883185174,\"date\":\"2018-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.258,\"date\":\"2018-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4902457101,\"date\":\"2018-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.268,\"date\":\"2018-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4921729027,\"date\":\"2018-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.271,\"date\":\"2018-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4941000954,\"date\":\"2018-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.313,\"date\":\"2018-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.496027288,\"date\":\"2018-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.385,\"date\":\"2018-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4979544807,\"date\":\"2018-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.394,\"date\":\"2018-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4998816733,\"date\":\"2018-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.38,\"date\":\"2018-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.501808866,\"date\":\"2018-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.355,\"date\":\"2018-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5037360586,\"date\":\"2018-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.338,\"date\":\"2018-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5056632513,\"date\":\"2018-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.317,\"date\":\"2018-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5075904439,\"date\":\"2018-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.282,\"date\":\"2018-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5095176366,\"date\":\"2018-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.261,\"date\":\"2018-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5114448292,\"date\":\"2018-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.207,\"date\":\"2018-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5133720219,\"date\":\"2018-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.161,\"date\":\"2018-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5152992145,\"date\":\"2018-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.121,\"date\":\"2018-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5172264071,\"date\":\"2018-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.077,\"date\":\"2018-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5191535998,\"date\":\"2018-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.048,\"date\":\"2018-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5210807924,\"date\":\"2018-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.013,\"date\":\"2019-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5230079851,\"date\":\"2019-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.976,\"date\":\"2019-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5249351777,\"date\":\"2019-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.965,\"date\":\"2019-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5268623704,\"date\":\"2019-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.965,\"date\":\"2019-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.528789563,\"date\":\"2019-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.966,\"date\":\"2019-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5307167557,\"date\":\"2019-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.966,\"date\":\"2019-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5326439483,\"date\":\"2019-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.006,\"date\":\"2019-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.534571141,\"date\":\"2019-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.048,\"date\":\"2019-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5364983336,\"date\":\"2019-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.076,\"date\":\"2019-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5384255263,\"date\":\"2019-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.079,\"date\":\"2019-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5403527189,\"date\":\"2019-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.07,\"date\":\"2019-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5422799116,\"date\":\"2019-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.08,\"date\":\"2019-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5442071042,\"date\":\"2019-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.078,\"date\":\"2019-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5461342969,\"date\":\"2019-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.093,\"date\":\"2019-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5480614895,\"date\":\"2019-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.118,\"date\":\"2019-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5499886822,\"date\":\"2019-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.147,\"date\":\"2019-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5519158748,\"date\":\"2019-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.169,\"date\":\"2019-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5538430675,\"date\":\"2019-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.171,\"date\":\"2019-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5557702601,\"date\":\"2019-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.16,\"date\":\"2019-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5576974528,\"date\":\"2019-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.163,\"date\":\"2019-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5596246454,\"date\":\"2019-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.151,\"date\":\"2019-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.561551838,\"date\":\"2019-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.136,\"date\":\"2019-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5634790307,\"date\":\"2019-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.105,\"date\":\"2019-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5654062233,\"date\":\"2019-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.07,\"date\":\"2019-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.567333416,\"date\":\"2019-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.043,\"date\":\"2019-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5692606086,\"date\":\"2019-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.042,\"date\":\"2019-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5711878013,\"date\":\"2019-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.055,\"date\":\"2019-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5731149939,\"date\":\"2019-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.051,\"date\":\"2019-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5750421866,\"date\":\"2019-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.044,\"date\":\"2019-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5769693792,\"date\":\"2019-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.034,\"date\":\"2019-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5788965719,\"date\":\"2019-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.032,\"date\":\"2019-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5808237645,\"date\":\"2019-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.011,\"date\":\"2019-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5827509572,\"date\":\"2019-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.994,\"date\":\"2019-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5846781498,\"date\":\"2019-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.983,\"date\":\"2019-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5866053425,\"date\":\"2019-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.976,\"date\":\"2019-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5885325351,\"date\":\"2019-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.971,\"date\":\"2019-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5904597278,\"date\":\"2019-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.987,\"date\":\"2019-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5923869204,\"date\":\"2019-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.081,\"date\":\"2019-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5943141131,\"date\":\"2019-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.066,\"date\":\"2019-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5962413057,\"date\":\"2019-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.047,\"date\":\"2019-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5981684984,\"date\":\"2019-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.051,\"date\":\"2019-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.600095691,\"date\":\"2019-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.05,\"date\":\"2019-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6020228837,\"date\":\"2019-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.064,\"date\":\"2019-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6039500763,\"date\":\"2019-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.062,\"date\":\"2019-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6058772689,\"date\":\"2019-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.073,\"date\":\"2019-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6078044616,\"date\":\"2019-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.074,\"date\":\"2019-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6097316542,\"date\":\"2019-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.066,\"date\":\"2019-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6116588469,\"date\":\"2019-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.07,\"date\":\"2019-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6135860395,\"date\":\"2019-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.049,\"date\":\"2019-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6155132322,\"date\":\"2019-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.046,\"date\":\"2019-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6174404248,\"date\":\"2019-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.041,\"date\":\"2019-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6193676175,\"date\":\"2019-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.069,\"date\":\"2019-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6212948101,\"date\":\"2019-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.079,\"date\":\"2020-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6232220028,\"date\":\"2020-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.064,\"date\":\"2020-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6251491954,\"date\":\"2020-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.037,\"date\":\"2020-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6270763881,\"date\":\"2020-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.01,\"date\":\"2020-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6290035807,\"date\":\"2020-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.956,\"date\":\"2020-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6309307734,\"date\":\"2020-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.91,\"date\":\"2020-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.632857966,\"date\":\"2020-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.89,\"date\":\"2020-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6347851587,\"date\":\"2020-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.882,\"date\":\"2020-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6367123513,\"date\":\"2020-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.851,\"date\":\"2020-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.638639544,\"date\":\"2020-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.814,\"date\":\"2020-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6405667366,\"date\":\"2020-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.733,\"date\":\"2020-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6424939293,\"date\":\"2020-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.659,\"date\":\"2020-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6444211219,\"date\":\"2020-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.586,\"date\":\"2020-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6463483146,\"date\":\"2020-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.548,\"date\":\"2020-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6482755072,\"date\":\"2020-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.507,\"date\":\"2020-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6502026998,\"date\":\"2020-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.48,\"date\":\"2020-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6521298925,\"date\":\"2020-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.437,\"date\":\"2020-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6540570851,\"date\":\"2020-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.399,\"date\":\"2020-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6559842778,\"date\":\"2020-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.394,\"date\":\"2020-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6579114704,\"date\":\"2020-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.386,\"date\":\"2020-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6598386631,\"date\":\"2020-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.39,\"date\":\"2020-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6617658557,\"date\":\"2020-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.386,\"date\":\"2020-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6636930484,\"date\":\"2020-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.396,\"date\":\"2020-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.665620241,\"date\":\"2020-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.403,\"date\":\"2020-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6675474337,\"date\":\"2020-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.425,\"date\":\"2020-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6694746263,\"date\":\"2020-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.43,\"date\":\"2020-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.671401819,\"date\":\"2020-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.437,\"date\":\"2020-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6733290116,\"date\":\"2020-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.438,\"date\":\"2020-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6752562043,\"date\":\"2020-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.433,\"date\":\"2020-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6771833969,\"date\":\"2020-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.427,\"date\":\"2020-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6791105896,\"date\":\"2020-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.424,\"date\":\"2020-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6810377822,\"date\":\"2020-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.428,\"date\":\"2020-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6829649749,\"date\":\"2020-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.427,\"date\":\"2020-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6848921675,\"date\":\"2020-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.426,\"date\":\"2020-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6868193602,\"date\":\"2020-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.441,\"date\":\"2020-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6887465528,\"date\":\"2020-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.435,\"date\":\"2020-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6906737455,\"date\":\"2020-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.422,\"date\":\"2020-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6926009381,\"date\":\"2020-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.404,\"date\":\"2020-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6945281307,\"date\":\"2020-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.394,\"date\":\"2020-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6964553234,\"date\":\"2020-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.387,\"date\":\"2020-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.698382516,\"date\":\"2020-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.395,\"date\":\"2020-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7003097087,\"date\":\"2020-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.388,\"date\":\"2020-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7022369013,\"date\":\"2020-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.385,\"date\":\"2020-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.704164094,\"date\":\"2020-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.372,\"date\":\"2020-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7060912866,\"date\":\"2020-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.383,\"date\":\"2020-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7080184793,\"date\":\"2020-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.441,\"date\":\"2020-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7099456719,\"date\":\"2020-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.462,\"date\":\"2020-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7118728646,\"date\":\"2020-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.502,\"date\":\"2020-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7138000572,\"date\":\"2020-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.526,\"date\":\"2020-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7157272499,\"date\":\"2020-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.559,\"date\":\"2020-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7176544425,\"date\":\"2020-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.619,\"date\":\"2020-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7195816352,\"date\":\"2020-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.635,\"date\":\"2020-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7215088278,\"date\":\"2020-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.64,\"date\":\"2021-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7234360205,\"date\":\"2021-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.67,\"date\":\"2021-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7253632131,\"date\":\"2021-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.696,\"date\":\"2021-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7272904058,\"date\":\"2021-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.716,\"date\":\"2021-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7292175984,\"date\":\"2021-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.738,\"date\":\"2021-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7311447911,\"date\":\"2021-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.801,\"date\":\"2021-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7330719837,\"date\":\"2021-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.876,\"date\":\"2021-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7349991764,\"date\":\"2021-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.973,\"date\":\"2021-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.736926369,\"date\":\"2021-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.072,\"date\":\"2021-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7388535616,\"date\":\"2021-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.143,\"date\":\"2021-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7407807543,\"date\":\"2021-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.191,\"date\":\"2021-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7427079469,\"date\":\"2021-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.194,\"date\":\"2021-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7446351396,\"date\":\"2021-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.161,\"date\":\"2021-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7465623322,\"date\":\"2021-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.144,\"date\":\"2021-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7484895249,\"date\":\"2021-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.129,\"date\":\"2021-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7504167175,\"date\":\"2021-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.124,\"date\":\"2021-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7523439102,\"date\":\"2021-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.124,\"date\":\"2021-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7542711028,\"date\":\"2021-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.142,\"date\":\"2021-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7561982955,\"date\":\"2021-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.186,\"date\":\"2021-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7581254881,\"date\":\"2021-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.249,\"date\":\"2021-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7600526808,\"date\":\"2021-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.253,\"date\":\"2021-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7619798734,\"date\":\"2021-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.255,\"date\":\"2021-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7639070661,\"date\":\"2021-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.274,\"date\":\"2021-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7658342587,\"date\":\"2021-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.286,\"date\":\"2021-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7677614514,\"date\":\"2021-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.287,\"date\":\"2021-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.769688644,\"date\":\"2021-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3,\"date\":\"2021-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7716158367,\"date\":\"2021-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.331,\"date\":\"2021-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7735430293,\"date\":\"2021-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.338,\"date\":\"2021-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.775470222,\"date\":\"2021-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.344,\"date\":\"2021-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7773974146,\"date\":\"2021-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.342,\"date\":\"2021-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7793246073,\"date\":\"2021-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.367,\"date\":\"2021-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7812517999,\"date\":\"2021-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.364,\"date\":\"2021-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7831789925,\"date\":\"2021-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.356,\"date\":\"2021-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7851061852,\"date\":\"2021-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.324,\"date\":\"2021-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7870333778,\"date\":\"2021-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.339,\"date\":\"2021-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7889605705,\"date\":\"2021-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.373,\"date\":\"2021-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7908877631,\"date\":\"2021-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.372,\"date\":\"2021-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7928149558,\"date\":\"2021-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.385,\"date\":\"2021-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7947421484,\"date\":\"2021-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.406,\"date\":\"2021-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7966693411,\"date\":\"2021-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.477,\"date\":\"2021-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7985965337,\"date\":\"2021-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.586,\"date\":\"2021-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8005237264,\"date\":\"2021-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.671,\"date\":\"2021-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.802450919,\"date\":\"2021-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.713,\"date\":\"2021-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8043781117,\"date\":\"2021-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.727,\"date\":\"2021-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8063053043,\"date\":\"2021-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.73,\"date\":\"2021-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.808232497,\"date\":\"2021-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.734,\"date\":\"2021-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8101596896,\"date\":\"2021-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.724,\"date\":\"2021-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8120868823,\"date\":\"2021-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.72,\"date\":\"2021-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8140140749,\"date\":\"2021-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.674,\"date\":\"2021-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8159412676,\"date\":\"2021-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.649,\"date\":\"2021-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8178684602,\"date\":\"2021-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.626,\"date\":\"2021-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8197956529,\"date\":\"2021-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.615,\"date\":\"2021-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8217228455,\"date\":\"2021-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.613,\"date\":\"2022-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8236500382,\"date\":\"2022-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.657,\"date\":\"2022-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8255772308,\"date\":\"2022-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.725,\"date\":\"2022-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8275044234,\"date\":\"2022-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.78,\"date\":\"2022-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8294316161,\"date\":\"2022-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.846,\"date\":\"2022-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8313588087,\"date\":\"2022-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.951,\"date\":\"2022-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8332860014,\"date\":\"2022-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.019,\"date\":\"2022-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.835213194,\"date\":\"2022-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.055,\"date\":\"2022-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8371403867,\"date\":\"2022-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.104,\"date\":\"2022-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8390675793,\"date\":\"2022-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.849,\"date\":\"2022-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.840994772,\"date\":\"2022-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.25,\"date\":\"2022-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8429219646,\"date\":\"2022-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.134,\"date\":\"2022-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8448491573,\"date\":\"2022-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.185,\"date\":\"2022-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8467763499,\"date\":\"2022-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.144,\"date\":\"2022-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8487035426,\"date\":\"2022-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.073,\"date\":\"2022-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8506307352,\"date\":\"2022-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.101,\"date\":\"2022-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8525579279,\"date\":\"2022-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.16,\"date\":\"2022-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8544851205,\"date\":\"2022-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.509,\"date\":\"2022-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8564123132,\"date\":\"2022-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.623,\"date\":\"2022-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8583395058,\"date\":\"2022-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.613,\"date\":\"2022-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8602666985,\"date\":\"2022-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.571,\"date\":\"2022-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8621938911,\"date\":\"2022-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.539,\"date\":\"2022-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8641210838,\"date\":\"2022-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.703,\"date\":\"2022-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8660482764,\"date\":\"2022-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.718,\"date\":\"2022-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8679754691,\"date\":\"2022-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.81,\"date\":\"2022-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8699026617,\"date\":\"2022-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.783,\"date\":\"2022-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8718298543,\"date\":\"2022-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.675,\"date\":\"2022-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.873757047,\"date\":\"2022-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.568,\"date\":\"2022-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8756842396,\"date\":\"2022-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.432,\"date\":\"2022-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8776114323,\"date\":\"2022-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.268,\"date\":\"2022-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8795386249,\"date\":\"2022-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.138,\"date\":\"2022-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8814658176,\"date\":\"2022-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.993,\"date\":\"2022-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8833930102,\"date\":\"2022-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.911,\"date\":\"2022-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8853202029,\"date\":\"2022-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.909,\"date\":\"2022-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8872473955,\"date\":\"2022-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.115,\"date\":\"2022-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8891745882,\"date\":\"2022-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.084,\"date\":\"2022-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8911017808,\"date\":\"2022-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.033,\"date\":\"2022-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8930289735,\"date\":\"2022-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.964,\"date\":\"2022-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8949561661,\"date\":\"2022-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.889,\"date\":\"2022-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8968833588,\"date\":\"2022-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.836,\"date\":\"2022-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.8988105514,\"date\":\"2022-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.224,\"date\":\"2022-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9007377441,\"date\":\"2022-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.339,\"date\":\"2022-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9026649367,\"date\":\"2022-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.341,\"date\":\"2022-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9045921294,\"date\":\"2022-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.317,\"date\":\"2022-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.906519322,\"date\":\"2022-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.333,\"date\":\"2022-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9084465147,\"date\":\"2022-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.313,\"date\":\"2022-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9103737073,\"date\":\"2022-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.233,\"date\":\"2022-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9123009,\"date\":\"2022-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.141,\"date\":\"2022-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9142280926,\"date\":\"2022-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.967,\"date\":\"2022-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9161552852,\"date\":\"2022-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.754,\"date\":\"2022-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9180824779,\"date\":\"2022-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.596,\"date\":\"2022-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9200096705,\"date\":\"2022-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.537,\"date\":\"2022-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9219368632,\"date\":\"2022-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.583,\"date\":\"2023-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9238640558,\"date\":\"2023-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.549,\"date\":\"2023-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9257912485,\"date\":\"2023-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.524,\"date\":\"2023-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9277184411,\"date\":\"2023-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.604,\"date\":\"2023-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9296456338,\"date\":\"2023-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.622,\"date\":\"2023-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9315728264,\"date\":\"2023-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.539,\"date\":\"2023-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9335000191,\"date\":\"2023-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.444,\"date\":\"2023-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9354272117,\"date\":\"2023-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.376,\"date\":\"2023-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9373544044,\"date\":\"2023-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.294,\"date\":\"2023-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.939281597,\"date\":\"2023-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.282,\"date\":\"2023-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9412087897,\"date\":\"2023-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.247,\"date\":\"2023-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9431359823,\"date\":\"2023-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.185,\"date\":\"2023-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.945063175,\"date\":\"2023-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.128,\"date\":\"2023-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9469903676,\"date\":\"2023-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.105,\"date\":\"2023-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9489175603,\"date\":\"2023-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.098,\"date\":\"2023-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9508447529,\"date\":\"2023-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.116,\"date\":\"2023-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9527719456,\"date\":\"2023-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.077,\"date\":\"2023-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9546991382,\"date\":\"2023-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.018,\"date\":\"2023-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9566263309,\"date\":\"2023-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.922,\"date\":\"2023-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9585535235,\"date\":\"2023-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.897,\"date\":\"2023-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9604807161,\"date\":\"2023-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.883,\"date\":\"2023-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9624079088,\"date\":\"2023-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.855,\"date\":\"2023-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9643351014,\"date\":\"2023-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.797,\"date\":\"2023-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9662622941,\"date\":\"2023-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.794,\"date\":\"2023-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9681894867,\"date\":\"2023-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.815,\"date\":\"2023-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9701166794,\"date\":\"2023-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.801,\"date\":\"2023-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.972043872,\"date\":\"2023-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.767,\"date\":\"2023-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9739710647,\"date\":\"2023-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.806,\"date\":\"2023-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9758982573,\"date\":\"2023-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.806,\"date\":\"2023-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.97782545,\"date\":\"2023-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.905,\"date\":\"2023-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9797526426,\"date\":\"2023-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.127,\"date\":\"2023-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9816798353,\"date\":\"2023-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.239,\"date\":\"2023-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9836070279,\"date\":\"2023-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.378,\"date\":\"2023-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9855342206,\"date\":\"2023-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.389,\"date\":\"2023-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9874614132,\"date\":\"2023-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.475,\"date\":\"2023-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9893886059,\"date\":\"2023-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.492,\"date\":\"2023-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9913157985,\"date\":\"2023-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.54,\"date\":\"2023-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9932429912,\"date\":\"2023-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.633,\"date\":\"2023-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9951701838,\"date\":\"2023-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.586,\"date\":\"2023-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9970973765,\"date\":\"2023-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.593,\"date\":\"2023-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.9990245691,\"date\":\"2023-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.498,\"date\":\"2023-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0009517618,\"date\":\"2023-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.444,\"date\":\"2023-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0028789544,\"date\":\"2023-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.545,\"date\":\"2023-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.004806147,\"date\":\"2023-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.454,\"date\":\"2023-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0067333397,\"date\":\"2023-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.366,\"date\":\"2023-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0086605323,\"date\":\"2023-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.294,\"date\":\"2023-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.010587725,\"date\":\"2023-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.209,\"date\":\"2023-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0125149176,\"date\":\"2023-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.146,\"date\":\"2023-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0144421103,\"date\":\"2023-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.092,\"date\":\"2023-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0163693029,\"date\":\"2023-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.987,\"date\":\"2023-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0182964956,\"date\":\"2023-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.894,\"date\":\"2023-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0202236882,\"date\":\"2023-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.914,\"date\":\"2023-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0221508809,\"date\":\"2023-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.876,\"date\":\"2024-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0240780735,\"date\":\"2024-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.828,\"date\":\"2024-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0260052662,\"date\":\"2024-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.863,\"date\":\"2024-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0279324588,\"date\":\"2024-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.838,\"date\":\"2024-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0298596515,\"date\":\"2024-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.867,\"date\":\"2024-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0317868441,\"date\":\"2024-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.899,\"date\":\"2024-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0337140368,\"date\":\"2024-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.109,\"date\":\"2024-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0356412294,\"date\":\"2024-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.109,\"date\":\"2024-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0375684221,\"date\":\"2024-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.058,\"date\":\"2024-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0394956147,\"date\":\"2024-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.022,\"date\":\"2024-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0414228074,\"date\":\"2024-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.004,\"date\":\"2024-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.04335,\"date\":\"2024-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.028,\"date\":\"2024-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0452771927,\"date\":\"2024-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.034,\"date\":\"2024-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0472043853,\"date\":\"2024-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.996,\"date\":\"2024-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0491315779,\"date\":\"2024-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.061,\"date\":\"2024-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0510587706,\"date\":\"2024-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.015,\"date\":\"2024-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0529859632,\"date\":\"2024-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.992,\"date\":\"2024-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0549131559,\"date\":\"2024-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.947,\"date\":\"2024-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0568403485,\"date\":\"2024-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.894,\"date\":\"2024-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0587675412,\"date\":\"2024-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.848,\"date\":\"2024-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0606947338,\"date\":\"2024-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.789,\"date\":\"2024-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0626219265,\"date\":\"2024-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.758,\"date\":\"2024-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0645491191,\"date\":\"2024-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.726,\"date\":\"2024-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0664763118,\"date\":\"2024-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.658,\"date\":\"2024-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0684035044,\"date\":\"2024-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.735,\"date\":\"2024-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0703306971,\"date\":\"2024-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.769,\"date\":\"2024-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0722578897,\"date\":\"2024-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.813,\"date\":\"2024-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0741850824,\"date\":\"2024-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.865,\"date\":\"2024-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.076112275,\"date\":\"2024-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.826,\"date\":\"2024-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0780394677,\"date\":\"2024-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.779,\"date\":\"2024-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0799666603,\"date\":\"2024-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.768,\"date\":\"2024-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.081893853,\"date\":\"2024-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.755,\"date\":\"2024-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0838210456,\"date\":\"2024-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.704,\"date\":\"2024-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0857482383,\"date\":\"2024-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.688,\"date\":\"2024-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0876754309,\"date\":\"2024-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.651,\"date\":\"2024-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0896026236,\"date\":\"2024-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.625,\"date\":\"2024-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0915298162,\"date\":\"2024-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.555,\"date\":\"2024-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0934570088,\"date\":\"2024-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.526,\"date\":\"2024-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0953842015,\"date\":\"2024-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.539,\"date\":\"2024-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0973113941,\"date\":\"2024-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.544,\"date\":\"2024-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.0992385868,\"date\":\"2024-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.584,\"date\":\"2024-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1011657794,\"date\":\"2024-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.631,\"date\":\"2024-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1030929721,\"date\":\"2024-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.553,\"date\":\"2024-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1050201647,\"date\":\"2024-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.573,\"date\":\"2024-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1069473574,\"date\":\"2024-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.536,\"date\":\"2024-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.10887455,\"date\":\"2024-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.521,\"date\":\"2024-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1108017427,\"date\":\"2024-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.491,\"date\":\"2024-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1127289353,\"date\":\"2024-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.539,\"date\":\"2024-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.114656128,\"date\":\"2024-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.54,\"date\":\"2024-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1165833206,\"date\":\"2024-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.458,\"date\":\"2024-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1185105133,\"date\":\"2024-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.494,\"date\":\"2024-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1204377059,\"date\":\"2024-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.476,\"date\":\"2024-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1223648986,\"date\":\"2024-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.503,\"date\":\"2024-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1242920912,\"date\":\"2024-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.561,\"date\":\"2025-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1262192839,\"date\":\"2025-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.602,\"date\":\"2025-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1281464765,\"date\":\"2025-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.715,\"date\":\"2025-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1300736692,\"date\":\"2025-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.659,\"date\":\"2025-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1320008618,\"date\":\"2025-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.66,\"date\":\"2025-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1339280545,\"date\":\"2025-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.665,\"date\":\"2025-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1358552471,\"date\":\"2025-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.677,\"date\":\"2025-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1377824397,\"date\":\"2025-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.697,\"date\":\"2025-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1397096324,\"date\":\"2025-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.635,\"date\":\"2025-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.141636825,\"date\":\"2025-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.582,\"date\":\"2025-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1435640177,\"date\":\"2025-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.549,\"date\":\"2025-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1454912103,\"date\":\"2025-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.567,\"date\":\"2025-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.147418403,\"date\":\"2025-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.592,\"date\":\"2025-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1493455956,\"date\":\"2025-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.639,\"date\":\"2025-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1512727883,\"date\":\"2025-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.579,\"date\":\"2025-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1531999809,\"date\":\"2025-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.534,\"date\":\"2025-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1551271736,\"date\":\"2025-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.514,\"date\":\"2025-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1570543662,\"date\":\"2025-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.497,\"date\":\"2025-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1589815589,\"date\":\"2025-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.476,\"date\":\"2025-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1609087515,\"date\":\"2025-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.536,\"date\":\"2025-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1628359442,\"date\":\"2025-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.487,\"date\":\"2025-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1647631368,\"date\":\"2025-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.451,\"date\":\"2025-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1666903295,\"date\":\"2025-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.471,\"date\":\"2025-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1686175221,\"date\":\"2025-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.571,\"date\":\"2025-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1705447148,\"date\":\"2025-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.775,\"date\":\"2025-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":4.1724719074,\"date\":\"2025-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1760509795,\"date\":\"2025-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1779781721,\"date\":\"2025-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1799053648,\"date\":\"2025-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1818325574,\"date\":\"2025-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1837597501,\"date\":\"2025-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1856869427,\"date\":\"2025-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1876141354,\"date\":\"2025-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.189541328,\"date\":\"2025-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1914685206,\"date\":\"2025-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1933957133,\"date\":\"2025-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1953229059,\"date\":\"2025-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1972500986,\"date\":\"2025-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1991772912,\"date\":\"2025-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2011044839,\"date\":\"2025-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2030316765,\"date\":\"2025-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2049588692,\"date\":\"2025-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2068860618,\"date\":\"2025-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2088132545,\"date\":\"2025-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2107404471,\"date\":\"2025-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2126676398,\"date\":\"2025-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2145948324,\"date\":\"2025-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2165220251,\"date\":\"2025-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2184492177,\"date\":\"2025-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2203764104,\"date\":\"2025-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.222303603,\"date\":\"2025-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2242307957,\"date\":\"2025-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2261579883,\"date\":\"2026-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.228085181,\"date\":\"2026-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2300123736,\"date\":\"2026-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2319395663,\"date\":\"2026-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2338667589,\"date\":\"2026-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2357939515,\"date\":\"2026-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2377211442,\"date\":\"2026-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2396483368,\"date\":\"2026-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2415755295,\"date\":\"2026-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2435027221,\"date\":\"2026-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2454299148,\"date\":\"2026-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2473571074,\"date\":\"2026-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2492843001,\"date\":\"2026-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2512114927,\"date\":\"2026-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2531386854,\"date\":\"2026-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.255065878,\"date\":\"2026-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2569930707,\"date\":\"2026-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2589202633,\"date\":\"2026-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.260847456,\"date\":\"2026-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2627746486,\"date\":\"2026-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2647018413,\"date\":\"2026-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2666290339,\"date\":\"2026-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2685562266,\"date\":\"2026-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2704834192,\"date\":\"2026-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2724106119,\"date\":\"2026-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2743378045,\"date\":\"2026-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2762649972,\"date\":\"2026-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2781921898,\"date\":\"2026-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2801193824,\"date\":\"2026-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2820465751,\"date\":\"2026-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2839737677,\"date\":\"2026-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2859009604,\"date\":\"2026-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.287828153,\"date\":\"2026-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2897553457,\"date\":\"2026-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2916825383,\"date\":\"2026-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.293609731,\"date\":\"2026-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2955369236,\"date\":\"2026-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2974641163,\"date\":\"2026-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2993913089,\"date\":\"2026-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3013185016,\"date\":\"2026-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3032456942,\"date\":\"2026-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3051728869,\"date\":\"2026-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3071000795,\"date\":\"2026-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3090272722,\"date\":\"2026-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3109544648,\"date\":\"2026-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3128816575,\"date\":\"2026-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3148088501,\"date\":\"2026-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3167360428,\"date\":\"2026-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3186632354,\"date\":\"2026-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3205904281,\"date\":\"2026-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3225176207,\"date\":\"2026-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3244448133,\"date\":\"2026-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.326372006,\"date\":\"2027-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3282991986,\"date\":\"2027-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3302263913,\"date\":\"2027-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3321535839,\"date\":\"2027-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3340807766,\"date\":\"2027-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3360079692,\"date\":\"2027-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3379351619,\"date\":\"2027-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3398623545,\"date\":\"2027-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3417895472,\"date\":\"2027-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3437167398,\"date\":\"2027-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3456439325,\"date\":\"2027-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3475711251,\"date\":\"2027-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3494983178,\"date\":\"2027-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3514255104,\"date\":\"2027-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3533527031,\"date\":\"2027-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3552798957,\"date\":\"2027-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3572070884,\"date\":\"2027-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.359134281,\"date\":\"2027-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3610614737,\"date\":\"2027-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3629886663,\"date\":\"2027-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.364915859,\"date\":\"2027-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3668430516,\"date\":\"2027-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3687702442,\"date\":\"2027-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3706974369,\"date\":\"2027-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3726246295,\"date\":\"2027-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3745518222,\"date\":\"2027-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3764790148,\"date\":\"2027-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3784062075,\"date\":\"2027-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3803334001,\"date\":\"2027-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3822605928,\"date\":\"2027-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3841877854,\"date\":\"2027-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3861149781,\"date\":\"2027-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3880421707,\"date\":\"2027-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3899693634,\"date\":\"2027-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.391896556,\"date\":\"2027-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3938237487,\"date\":\"2027-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3957509413,\"date\":\"2027-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.397678134,\"date\":\"2027-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3996053266,\"date\":\"2027-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4015325193,\"date\":\"2027-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4034597119,\"date\":\"2027-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4053869046,\"date\":\"2027-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4073140972,\"date\":\"2027-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4092412899,\"date\":\"2027-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4111684825,\"date\":\"2027-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4130956751,\"date\":\"2027-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4150228678,\"date\":\"2027-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4169500604,\"date\":\"2027-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4188772531,\"date\":\"2027-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4208044457,\"date\":\"2027-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4227316384,\"date\":\"2027-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.424658831,\"date\":\"2027-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4265860237,\"date\":\"2028-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4285132163,\"date\":\"2028-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.430440409,\"date\":\"2028-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4323676016,\"date\":\"2028-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4342947943,\"date\":\"2028-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4362219869,\"date\":\"2028-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4381491796,\"date\":\"2028-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4400763722,\"date\":\"2028-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4420035649,\"date\":\"2028-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4439307575,\"date\":\"2028-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4458579502,\"date\":\"2028-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4477851428,\"date\":\"2028-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4497123355,\"date\":\"2028-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4516395281,\"date\":\"2028-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4535667208,\"date\":\"2028-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4554939134,\"date\":\"2028-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.457421106,\"date\":\"2028-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4593482987,\"date\":\"2028-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4612754913,\"date\":\"2028-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.463202684,\"date\":\"2028-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4651298766,\"date\":\"2028-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4670570693,\"date\":\"2028-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4689842619,\"date\":\"2028-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4709114546,\"date\":\"2028-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4728386472,\"date\":\"2028-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4747658399,\"date\":\"2028-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4766930325,\"date\":\"2028-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4786202252,\"date\":\"2028-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4805474178,\"date\":\"2028-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4824746105,\"date\":\"2028-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4844018031,\"date\":\"2028-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4863289958,\"date\":\"2028-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4882561884,\"date\":\"2028-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4901833811,\"date\":\"2028-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4921105737,\"date\":\"2028-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4940377664,\"date\":\"2028-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.495964959,\"date\":\"2028-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4978921517,\"date\":\"2028-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.4998193443,\"date\":\"2028-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5017465369,\"date\":\"2028-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5036737296,\"date\":\"2028-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5056009222,\"date\":\"2028-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5075281149,\"date\":\"2028-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5094553075,\"date\":\"2028-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5113825002,\"date\":\"2028-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5133096928,\"date\":\"2028-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5152368855,\"date\":\"2028-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5171640781,\"date\":\"2028-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5190912708,\"date\":\"2028-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5210184634,\"date\":\"2028-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5229456561,\"date\":\"2028-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5248728487,\"date\":\"2028-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5268000414,\"date\":\"2028-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.528727234,\"date\":\"2029-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5306544267,\"date\":\"2029-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5325816193,\"date\":\"2029-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.534508812,\"date\":\"2029-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5364360046,\"date\":\"2029-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5383631973,\"date\":\"2029-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5402903899,\"date\":\"2029-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5422175826,\"date\":\"2029-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5441447752,\"date\":\"2029-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5460719679,\"date\":\"2029-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5479991605,\"date\":\"2029-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5499263531,\"date\":\"2029-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5518535458,\"date\":\"2029-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5537807384,\"date\":\"2029-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5557079311,\"date\":\"2029-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5576351237,\"date\":\"2029-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5595623164,\"date\":\"2029-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.561489509,\"date\":\"2029-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5634167017,\"date\":\"2029-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5653438943,\"date\":\"2029-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.567271087,\"date\":\"2029-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5691982796,\"date\":\"2029-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5711254723,\"date\":\"2029-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5730526649,\"date\":\"2029-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5749798576,\"date\":\"2029-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5769070502,\"date\":\"2029-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5788342429,\"date\":\"2029-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5807614355,\"date\":\"2029-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5826886282,\"date\":\"2029-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5846158208,\"date\":\"2029-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5865430135,\"date\":\"2029-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5884702061,\"date\":\"2029-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5903973988,\"date\":\"2029-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5923245914,\"date\":\"2029-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.594251784,\"date\":\"2029-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5961789767,\"date\":\"2029-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.5981061693,\"date\":\"2029-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.600033362,\"date\":\"2029-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6019605546,\"date\":\"2029-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6038877473,\"date\":\"2029-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6058149399,\"date\":\"2029-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6077421326,\"date\":\"2029-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6096693252,\"date\":\"2029-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6115965179,\"date\":\"2029-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6135237105,\"date\":\"2029-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6154509032,\"date\":\"2029-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6173780958,\"date\":\"2029-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6193052885,\"date\":\"2029-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6212324811,\"date\":\"2029-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6231596738,\"date\":\"2029-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6250868664,\"date\":\"2029-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6270140591,\"date\":\"2029-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6289412517,\"date\":\"2030-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6308684444,\"date\":\"2030-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.632795637,\"date\":\"2030-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6347228297,\"date\":\"2030-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6366500223,\"date\":\"2030-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6385772149,\"date\":\"2030-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6405044076,\"date\":\"2030-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6424316002,\"date\":\"2030-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6443587929,\"date\":\"2030-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6462859855,\"date\":\"2030-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6482131782,\"date\":\"2030-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6501403708,\"date\":\"2030-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6520675635,\"date\":\"2030-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6539947561,\"date\":\"2030-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6559219488,\"date\":\"2030-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6578491414,\"date\":\"2030-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6597763341,\"date\":\"2030-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6617035267,\"date\":\"2030-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6636307194,\"date\":\"2030-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.665557912,\"date\":\"2030-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6674851047,\"date\":\"2030-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6694122973,\"date\":\"2030-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.67133949,\"date\":\"2030-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6732666826,\"date\":\"2030-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.6751938753,\"date\":\"2030-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":1.191,\"date\":\"1990-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8674998196,\"date\":\"1990-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.245,\"date\":\"1990-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8691806732,\"date\":\"1990-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.242,\"date\":\"1990-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8708615267,\"date\":\"1990-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.252,\"date\":\"1990-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8725423803,\"date\":\"1990-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.266,\"date\":\"1990-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8742232339,\"date\":\"1990-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.272,\"date\":\"1990-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8759040875,\"date\":\"1990-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.321,\"date\":\"1990-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8775849411,\"date\":\"1990-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.333,\"date\":\"1990-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8792657946,\"date\":\"1990-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.339,\"date\":\"1990-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8809466482,\"date\":\"1990-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.345,\"date\":\"1990-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8826275018,\"date\":\"1990-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.339,\"date\":\"1990-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8843083554,\"date\":\"1990-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.334,\"date\":\"1990-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.885989209,\"date\":\"1990-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.328,\"date\":\"1990-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8876700625,\"date\":\"1990-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.323,\"date\":\"1990-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8893509161,\"date\":\"1990-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.311,\"date\":\"1990-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8910317697,\"date\":\"1990-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.341,\"date\":\"1990-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8927126233,\"date\":\"1990-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.192,\"date\":\"1991-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9044785984,\"date\":\"1991-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.168,\"date\":\"1991-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9061594519,\"date\":\"1991-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.139,\"date\":\"1991-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9078403055,\"date\":\"1991-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1991-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9095211591,\"date\":\"1991-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.078,\"date\":\"1991-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9112020127,\"date\":\"1991-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.054,\"date\":\"1991-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9128828663,\"date\":\"1991-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.025,\"date\":\"1991-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9145637198,\"date\":\"1991-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.045,\"date\":\"1991-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9162445734,\"date\":\"1991-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.043,\"date\":\"1991-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.917925427,\"date\":\"1991-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.047,\"date\":\"1991-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9196062806,\"date\":\"1991-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.052,\"date\":\"1991-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9212871342,\"date\":\"1991-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.066,\"date\":\"1991-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9229679878,\"date\":\"1991-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.069,\"date\":\"1991-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9246488413,\"date\":\"1991-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.09,\"date\":\"1991-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9263296949,\"date\":\"1991-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.104,\"date\":\"1991-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9280105485,\"date\":\"1991-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.113,\"date\":\"1991-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9296914021,\"date\":\"1991-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.121,\"date\":\"1991-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9313722557,\"date\":\"1991-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.129,\"date\":\"1991-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9330531092,\"date\":\"1991-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.14,\"date\":\"1991-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9347339628,\"date\":\"1991-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.138,\"date\":\"1991-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9364148164,\"date\":\"1991-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.135,\"date\":\"1991-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.93809567,\"date\":\"1991-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1991-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9397765236,\"date\":\"1991-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.114,\"date\":\"1991-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9414573771,\"date\":\"1991-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.104,\"date\":\"1991-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9431382307,\"date\":\"1991-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.098,\"date\":\"1991-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9448190843,\"date\":\"1991-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.094,\"date\":\"1991-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9464999379,\"date\":\"1991-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.091,\"date\":\"1991-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9481807915,\"date\":\"1991-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.091,\"date\":\"1991-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9498616451,\"date\":\"1991-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1991-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9515424986,\"date\":\"1991-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.112,\"date\":\"1991-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9532233522,\"date\":\"1991-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1991-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9549042058,\"date\":\"1991-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1991-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9565850594,\"date\":\"1991-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.127,\"date\":\"1991-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.958265913,\"date\":\"1991-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.12,\"date\":\"1991-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9599467665,\"date\":\"1991-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.11,\"date\":\"1991-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9616276201,\"date\":\"1991-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.097,\"date\":\"1991-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9633084737,\"date\":\"1991-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.092,\"date\":\"1991-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9649893273,\"date\":\"1991-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.089,\"date\":\"1991-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9666701809,\"date\":\"1991-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.084,\"date\":\"1991-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9683510344,\"date\":\"1991-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.088,\"date\":\"1991-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.970031888,\"date\":\"1991-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.091,\"date\":\"1991-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9717127416,\"date\":\"1991-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.091,\"date\":\"1991-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9733935952,\"date\":\"1991-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.102,\"date\":\"1991-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9750744488,\"date\":\"1991-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.104,\"date\":\"1991-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9767553024,\"date\":\"1991-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1991-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9784361559,\"date\":\"1991-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1991-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9801170095,\"date\":\"1991-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.091,\"date\":\"1991-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9817978631,\"date\":\"1991-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.075,\"date\":\"1991-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9834787167,\"date\":\"1991-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.063,\"date\":\"1991-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9851595703,\"date\":\"1991-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.053,\"date\":\"1991-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9868404238,\"date\":\"1991-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.042,\"date\":\"1992-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9885212774,\"date\":\"1992-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.026,\"date\":\"1992-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.990202131,\"date\":\"1992-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.014,\"date\":\"1992-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9918829846,\"date\":\"1992-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.006,\"date\":\"1992-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9935638382,\"date\":\"1992-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":0.995,\"date\":\"1992-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9952446917,\"date\":\"1992-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.004,\"date\":\"1992-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9969255453,\"date\":\"1992-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.011,\"date\":\"1992-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9986063989,\"date\":\"1992-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.014,\"date\":\"1992-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0002872525,\"date\":\"1992-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.012,\"date\":\"1992-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0019681061,\"date\":\"1992-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.013,\"date\":\"1992-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0036489597,\"date\":\"1992-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.01,\"date\":\"1992-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0053298132,\"date\":\"1992-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.015,\"date\":\"1992-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0070106668,\"date\":\"1992-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.013,\"date\":\"1992-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0086915204,\"date\":\"1992-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.026,\"date\":\"1992-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.010372374,\"date\":\"1992-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.051,\"date\":\"1992-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0120532276,\"date\":\"1992-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.058,\"date\":\"1992-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0137340811,\"date\":\"1992-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.072,\"date\":\"1992-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0154149347,\"date\":\"1992-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.089,\"date\":\"1992-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0170957883,\"date\":\"1992-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.102,\"date\":\"1992-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0187766419,\"date\":\"1992-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.118,\"date\":\"1992-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0204574955,\"date\":\"1992-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.12,\"date\":\"1992-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.022138349,\"date\":\"1992-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.128,\"date\":\"1992-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0238192026,\"date\":\"1992-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.143,\"date\":\"1992-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0255000562,\"date\":\"1992-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.151,\"date\":\"1992-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0271809098,\"date\":\"1992-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.153,\"date\":\"1992-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0288617634,\"date\":\"1992-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.149,\"date\":\"1992-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.030542617,\"date\":\"1992-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.147,\"date\":\"1992-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0322234705,\"date\":\"1992-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.139,\"date\":\"1992-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0339043241,\"date\":\"1992-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.132,\"date\":\"1992-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0355851777,\"date\":\"1992-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.128,\"date\":\"1992-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0372660313,\"date\":\"1992-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1992-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0389468849,\"date\":\"1992-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.123,\"date\":\"1992-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0406277384,\"date\":\"1992-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.116,\"date\":\"1992-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.042308592,\"date\":\"1992-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.123,\"date\":\"1992-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0439894456,\"date\":\"1992-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.121,\"date\":\"1992-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0456702992,\"date\":\"1992-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.121,\"date\":\"1992-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0473511528,\"date\":\"1992-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1992-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0490320063,\"date\":\"1992-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.123,\"date\":\"1992-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0507128599,\"date\":\"1992-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.118,\"date\":\"1992-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0523937135,\"date\":\"1992-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.115,\"date\":\"1992-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0540745671,\"date\":\"1992-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.115,\"date\":\"1992-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0557554207,\"date\":\"1992-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.113,\"date\":\"1992-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0574362743,\"date\":\"1992-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.113,\"date\":\"1992-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0591171278,\"date\":\"1992-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.12,\"date\":\"1992-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0607979814,\"date\":\"1992-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.12,\"date\":\"1992-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.062478835,\"date\":\"1992-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.112,\"date\":\"1992-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0641596886,\"date\":\"1992-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1992-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0658405422,\"date\":\"1992-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.098,\"date\":\"1992-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0675213957,\"date\":\"1992-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.089,\"date\":\"1992-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0692022493,\"date\":\"1992-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.078,\"date\":\"1992-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0708831029,\"date\":\"1992-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.074,\"date\":\"1992-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0725639565,\"date\":\"1992-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.069,\"date\":\"1992-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0742448101,\"date\":\"1992-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.065,\"date\":\"1993-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0759256636,\"date\":\"1993-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.066,\"date\":\"1993-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0776065172,\"date\":\"1993-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.061,\"date\":\"1993-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0792873708,\"date\":\"1993-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.055,\"date\":\"1993-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0809682244,\"date\":\"1993-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.055,\"date\":\"1993-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.082649078,\"date\":\"1993-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.062,\"date\":\"1993-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0843299316,\"date\":\"1993-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.053,\"date\":\"1993-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0860107851,\"date\":\"1993-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.047,\"date\":\"1993-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0876916387,\"date\":\"1993-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.042,\"date\":\"1993-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0893724923,\"date\":\"1993-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.048,\"date\":\"1993-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0910533459,\"date\":\"1993-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.058,\"date\":\"1993-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0927341995,\"date\":\"1993-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.056,\"date\":\"1993-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.094415053,\"date\":\"1993-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.057,\"date\":\"1993-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0960959066,\"date\":\"1993-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.068,\"date\":\"1993-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0977767602,\"date\":\"1993-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.079,\"date\":\"1993-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0994576138,\"date\":\"1993-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.079,\"date\":\"1993-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1011384674,\"date\":\"1993-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.086,\"date\":\"1993-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1028193209,\"date\":\"1993-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.086,\"date\":\"1993-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1045001745,\"date\":\"1993-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.097,\"date\":\"1993-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1061810281,\"date\":\"1993-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1993-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1078618817,\"date\":\"1993-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1993-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1095427353,\"date\":\"1993-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.107,\"date\":\"1993-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1112235889,\"date\":\"1993-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.104,\"date\":\"1993-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1129044424,\"date\":\"1993-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.101,\"date\":\"1993-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.114585296,\"date\":\"1993-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.095,\"date\":\"1993-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1162661496,\"date\":\"1993-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.089,\"date\":\"1993-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1179470032,\"date\":\"1993-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.086,\"date\":\"1993-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1196278568,\"date\":\"1993-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.081,\"date\":\"1993-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1213087103,\"date\":\"1993-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.075,\"date\":\"1993-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1229895639,\"date\":\"1993-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.069,\"date\":\"1993-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1246704175,\"date\":\"1993-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.062,\"date\":\"1993-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1263512711,\"date\":\"1993-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.06,\"date\":\"1993-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1280321247,\"date\":\"1993-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.059,\"date\":\"1993-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1297129782,\"date\":\"1993-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.065,\"date\":\"1993-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1313938318,\"date\":\"1993-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.062,\"date\":\"1993-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1330746854,\"date\":\"1993-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.055,\"date\":\"1993-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.134755539,\"date\":\"1993-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.051,\"date\":\"1993-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1364363926,\"date\":\"1993-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.045,\"date\":\"1993-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1381172462,\"date\":\"1993-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.047,\"date\":\"1993-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1397980997,\"date\":\"1993-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.092,\"date\":\"1993-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1414789533,\"date\":\"1993-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.09,\"date\":\"1993-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1431598069,\"date\":\"1993-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.093,\"date\":\"1993-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1448406605,\"date\":\"1993-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.092,\"date\":\"1993-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1465215141,\"date\":\"1993-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.084,\"date\":\"1993-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1482023676,\"date\":\"1993-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.075,\"date\":\"1993-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1498832212,\"date\":\"1993-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.064,\"date\":\"1993-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1515640748,\"date\":\"1993-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.058,\"date\":\"1993-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1532449284,\"date\":\"1993-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.051,\"date\":\"1993-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.154925782,\"date\":\"1993-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.036,\"date\":\"1993-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1566066355,\"date\":\"1993-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.018,\"date\":\"1993-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1582874891,\"date\":\"1993-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.003,\"date\":\"1993-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1599683427,\"date\":\"1993-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":0.999,\"date\":\"1993-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1616491963,\"date\":\"1993-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":0.992,\"date\":\"1994-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1633300499,\"date\":\"1994-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":0.995,\"date\":\"1994-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1650109035,\"date\":\"1994-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.001,\"date\":\"1994-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.166691757,\"date\":\"1994-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":0.999,\"date\":\"1994-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1683726106,\"date\":\"1994-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.005,\"date\":\"1994-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1700534642,\"date\":\"1994-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.007,\"date\":\"1994-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1717343178,\"date\":\"1994-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.016,\"date\":\"1994-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1734151714,\"date\":\"1994-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.009,\"date\":\"1994-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1750960249,\"date\":\"1994-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.004,\"date\":\"1994-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1767768785,\"date\":\"1994-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.007,\"date\":\"1994-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1784577321,\"date\":\"1994-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.005,\"date\":\"1994-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1801385857,\"date\":\"1994-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.007,\"date\":\"1994-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1818194393,\"date\":\"1994-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.012,\"date\":\"1994-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1835002928,\"date\":\"1994-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.011,\"date\":\"1994-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1851811464,\"date\":\"1994-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.028,\"date\":\"1994-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.186862,\"date\":\"1994-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.033,\"date\":\"1994-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1885428536,\"date\":\"1994-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.037,\"date\":\"1994-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1902237072,\"date\":\"1994-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.04,\"date\":\"1994-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1919045608,\"date\":\"1994-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.045,\"date\":\"1994-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1935854143,\"date\":\"1994-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.046,\"date\":\"1994-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1952662679,\"date\":\"1994-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.05,\"date\":\"1994-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1969471215,\"date\":\"1994-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.056,\"date\":\"1994-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1986279751,\"date\":\"1994-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.065,\"date\":\"1994-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2003088287,\"date\":\"1994-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.073,\"date\":\"1994-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2019896822,\"date\":\"1994-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.079,\"date\":\"1994-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2036705358,\"date\":\"1994-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.095,\"date\":\"1994-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2053513894,\"date\":\"1994-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.097,\"date\":\"1994-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.207032243,\"date\":\"1994-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.103,\"date\":\"1994-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2087130966,\"date\":\"1994-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.109,\"date\":\"1994-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2103939501,\"date\":\"1994-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.114,\"date\":\"1994-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2120748037,\"date\":\"1994-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.13,\"date\":\"1994-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2137556573,\"date\":\"1994-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.157,\"date\":\"1994-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2154365109,\"date\":\"1994-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.161,\"date\":\"1994-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2171173645,\"date\":\"1994-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.165,\"date\":\"1994-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2187982181,\"date\":\"1994-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.161,\"date\":\"1994-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2204790716,\"date\":\"1994-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.156,\"date\":\"1994-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2221599252,\"date\":\"1994-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.15,\"date\":\"1994-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2238407788,\"date\":\"1994-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.14,\"date\":\"1994-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2255216324,\"date\":\"1994-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.129,\"date\":\"1994-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.227202486,\"date\":\"1994-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.12,\"date\":\"1994-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2288833395,\"date\":\"1994-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.114,\"date\":\"1994-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2305641931,\"date\":\"1994-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1994-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2322450467,\"date\":\"1994-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.107,\"date\":\"1994-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2339259003,\"date\":\"1994-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.121,\"date\":\"1994-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2356067539,\"date\":\"1994-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.123,\"date\":\"1994-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2372876074,\"date\":\"1994-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.122,\"date\":\"1994-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.238968461,\"date\":\"1994-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.113,\"date\":\"1994-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2406493146,\"date\":\"1994-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2025833333,\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2423301682,\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2031666667,\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2440110218,\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.19275,\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2456918754,\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1849166667,\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2473727289,\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1778333333,\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2490535825,\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1921666667,\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2507344361,\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1970833333,\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2524152897,\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.19125,\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2540961433,\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1944166667,\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2557769968,\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.192,\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2574578504,\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.187,\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.259138704,\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1839166667,\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2608195576,\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1785,\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2625004112,\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.182,\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2641812647,\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.18225,\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2658621183,\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.17525,\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2675429719,\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.174,\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2692238255,\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1771666667,\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2709046791,\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1860833333,\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2725855327,\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2000833333,\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2742663862,\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2124166667,\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2759472398,\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2325833333,\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2776280934,\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.24275,\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.279308947,\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2643333333,\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2809898006,\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.274,\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2826706541,\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2905833333,\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2843515077,\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.29425,\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2860323613,\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2939166667,\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2877132149,\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2913333333,\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2893940685,\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.28575,\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.291074922,\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2798333333,\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2927557756,\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2730833333,\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2944366292,\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2644166667,\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2961174828,\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2545833333,\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2977983364,\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2445833333,\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.29947919,\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2321666667,\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3011600435,\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2270833333,\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3028408971,\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2228333333,\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3045217507,\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2206666667,\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3062026043,\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.21325,\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3078834579,\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2110833333,\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3095643114,\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2075833333,\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.311245165,\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2063333333,\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3129260186,\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2041666667,\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3146068722,\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2005833333,\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3162877258,\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1949166667,\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3179685793,\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1870833333,\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3196494329,\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1790833333,\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3213302865,\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1693333333,\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3230111401,\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.16475,\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3246919937,\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1621666667,\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3263728473,\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.158,\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3280537008,\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1574166667,\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3297345544,\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1586666667,\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.331415408,\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1598333333,\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3330962616,\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1716666667,\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3347771152,\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1763333333,\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3364579687,\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.178,\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3381388223,\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1848333333,\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3398196759,\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1918333333,\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3415005295,\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.18725,\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3431813831,\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.18275,\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3448622366,\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1796666667,\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3465430902,\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1765833333,\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3482239438,\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1820833333,\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3499047974,\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.20075,\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.351585651,\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.216,\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3532665046,\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2185,\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3549473581,\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2275833333,\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3566282117,\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2536666667,\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3583090653,\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2685833333,\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3599899189,\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2933333333,\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3616707725,\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3344166667,\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.363351626,\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.35825,\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3650324796,\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3765833333,\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3667133332,\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3811666667,\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3683941868,\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.38375,\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3700750404,\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3891666667,\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3717558939,\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.37975,\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3734367475,\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3785833333,\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3751176011,\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.36975,\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3767984547,\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3625,\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3784793083,\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3511666667,\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3801601619,\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.34025,\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3818410154,\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3360833333,\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.383521869,\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.332,\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3852027226,\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3288333333,\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3868835762,\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3199166667,\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3885644298,\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.30975,\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3902452833,\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3026666667,\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3919261369,\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3000833333,\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3936069905,\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3024166667,\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3952878441,\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2905,\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3969686977,\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2938333333,\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3986495512,\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2966666667,\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4003304048,\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.29675,\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4020112584,\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2916666667,\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.403692112,\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2855,\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4053729656,\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2918333333,\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4070538192,\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2916666667,\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4087346727,\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2986666667,\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4104155263,\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3048333333,\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4120963799,\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3065833333,\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4137772335,\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.31575,\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4154580871,\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.32175,\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4171389406,\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3219166667,\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4188197942,\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.32275,\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4205006478,\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.32075,\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4221815014,\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3175,\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.423862355,\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3154166667,\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4255432085,\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.31525,\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4272240621,\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3293333333,\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4289049157,\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3296666667,\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4305857693,\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3268333333,\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4322666229,\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3263333333,\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4339474765,\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3243333333,\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.43562833,\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3195,\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4373091836,\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3165833333,\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4389900372,\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.30825,\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4406708908,\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3035833333,\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4423517444,\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2974166667,\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4440325979,\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2995833333,\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4457134515,\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2985833333,\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4473943051,\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3015833333,\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4490751587,\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2985833333,\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4507560123,\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2971666667,\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4524368659,\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2928333333,\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4541177194,\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2909166667,\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.455798573,\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2889166667,\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4574794266,\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2956666667,\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4591602802,\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3023333333,\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4608411338,\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3034166667,\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4625219873,\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.298,\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4642028409,\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2903333333,\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4658836945,\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2814166667,\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4675645481,\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2731666667,\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4692454017,\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.26925,\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4709262552,\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.26475,\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4726071088,\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.26675,\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4742879624,\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2615833333,\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.475968816,\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.282,\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4776496696,\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3171666667,\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4793305232,\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3226666667,\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4810113767,\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3403333333,\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4826922303,\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3423333333,\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4843730839,\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3435833333,\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4860539375,\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3390833333,\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4877347911,\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3289166667,\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4894156446,\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3160833333,\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4910964982,\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3143333333,\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4927773518,\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3075,\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4944582054,\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2989166667,\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.496139059,\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2889166667,\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4978199125,\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2814166667,\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4995007661,\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2804166667,\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5011816197,\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.27175,\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5028624733,\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2656666667,\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5045433269,\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2570833333,\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5062241805,\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2458333333,\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.507905034,\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2355833333,\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5095858876,\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2255,\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5112667412,\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2175833333,\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5129475948,\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2095,\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5146284484,\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1999166667,\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5163093019,\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1858333333,\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5179901555,\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1703333333,\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5196710091,\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1635833333,\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5213518627,\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1553333333,\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5230327163,\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1394166667,\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5247135698,\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1393333333,\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5263944234,\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1236666667,\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.528075277,\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1116666667,\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5297561306,\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1015,\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5314369842,\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.093,\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5331178378,\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1211666667,\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5347986913,\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1190833333,\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5364795449,\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1186666667,\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5381603985,\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1206666667,\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5398412521,\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1316666667,\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5415221057,\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1455,\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5432029592,\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1580833333,\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5448838128,\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1619166667,\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5465646664,\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1605833333,\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.54824552,\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1571666667,\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5499263736,\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1628333333,\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5516072271,\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1561666667,\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5532880807,\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.15,\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5549689343,\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1484166667,\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5566497879,\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1486666667,\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5583306415,\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1450833333,\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5600114951,\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1476666667,\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5616923486,\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1401666667,\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5633732022,\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1303333333,\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5650540558,\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1250833333,\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5667349094,\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1194166667,\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.568415763,\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.11275,\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5700966165,\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.107,\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5717774701,\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1015,\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5734583237,\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.09725,\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5751391773,\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1071666667,\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5768200309,\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1075833333,\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5785008844,\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1115,\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.580181738,\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1158333333,\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5818625916,\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1113333333,\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5835434452,\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1086666667,\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5852242988,\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1045,\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5869051524,\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1028333333,\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5885860059,\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0931666667,\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5902668595,\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0886666667,\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5919477131,\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0763333333,\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5936285667,\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0594166667,\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5953094203,\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.05125,\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5969902738,\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.049,\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5986711274,\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.043,\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.600351981,\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0405833333,\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6020328346,\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0429166667,\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6037136882,\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0458333333,\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6053945417,\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0391666667,\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6070753953,\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0320833333,\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6087562489,\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.02875,\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6104371025,\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0210833333,\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6121179561,\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.012,\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6137988097,\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0169166667,\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6154796632,\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0249166667,\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6171605168,\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0733333333,\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6188413704,\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1114166667,\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.620522224,\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1826666667,\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6222030776,\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.22625,\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6238839311,\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2495,\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6255647847,\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2458333333,\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6272456383,\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2426666667,\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6289264919,\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.244,\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6306073455,\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2485,\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.632288199,\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2455833333,\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6339690526,\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2296666667,\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6356499062,\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2144166667,\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6373307598,\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.21125,\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6390116134,\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2073333333,\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.640692467,\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2195,\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6423733205,\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2113333333,\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6440541741,\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.22,\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6457350277,\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2401666667,\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6474158813,\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2691666667,\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6490967349,\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.29075,\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6507775884,\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2959166667,\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.652458442,\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3089166667,\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6541392956,\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3348333333,\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6558201492,\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.33425,\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6575010028,\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3328333333,\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6591818563,\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3393333333,\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6608627099,\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3453333333,\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6625435635,\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3605833333,\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6642244171,\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3545,\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6659052707,\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3503333333,\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6675861243,\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3466666667,\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6692669778,\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3353333333,\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6709478314,\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3331666667,\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.672628685,\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3265833333,\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6743095386,\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3271666667,\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6759903922,\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.34325,\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6776712457,\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.35925,\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6793520993,\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3671666667,\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6810329529,\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3674166667,\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6827138065,\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3680833333,\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6843946601,\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3629166667,\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6860755136,\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3658333333,\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6877563672,\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3645,\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6894372208,\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3575833333,\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6911180744,\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3674166667,\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.692798928,\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3995,\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6944797816,\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4033333333,\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6961606351,\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4104166667,\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6978414887,\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4378333333,\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6995223423,\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4835,\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7012031959,\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5021666667,\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7028840495,\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5858333333,\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.704564903,\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6205833333,\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7062457566,\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.62925,\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7079266102,\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.613,\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7096074638,\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6068333333,\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7112883174,\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5824166667,\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7129691709,\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5545,\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7146500245,\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5449166667,\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7163308781,\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.52925,\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7180117317,\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5560833333,\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7196925853,\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5860833333,\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7213734389,\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6116666667,\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7230542924,\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6254166667,\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.724735146,\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6456666667,\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7264159996,\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6994166667,\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7280968532,\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7399166667,\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7297777068,\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7258333333,\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7314585603,\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7075,\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7331394139,\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6853333333,\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7348202675,\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6488333333,\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7365011211,\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6263333333,\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7381819747,\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5839166667,\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7398628282,\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.573,\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7415436818,\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5595,\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7432245354,\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5729166667,\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.744905389,\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5854166667,\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7465862426,\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6298333333,\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7482670962,\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6595833333,\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7499479497,\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6579166667,\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7516288033,\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6485,\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7533096569,\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6289166667,\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7549905105,\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.60925,\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7566713641,\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6384166667,\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7583522176,\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6444166667,\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7600330712,\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6425833333,\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7617139248,\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.62675,\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7633947784,\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6224166667,\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.765075632,\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6113333333,\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7667564855,\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6089166667,\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7684373391,\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.58775,\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7701181927,\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5559166667,\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7717990463,\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5295833333,\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7734798999,\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5176666667,\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7751607535,\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5119166667,\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.776841607,\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5254166667,\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7785224606,\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5641666667,\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7802033142,\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.562,\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7818841678,\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.551,\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7835650214,\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5389166667,\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7852458749,\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5669166667,\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7869267285,\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5478333333,\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7886075821,\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.532,\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7902884357,\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5219166667,\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7919692893,\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5171666667,\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7936501428,\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5091666667,\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7953309964,\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.50775,\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.79701185,\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.543,\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7986927036,\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5984166667,\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8003735572,\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6590833333,\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8020544108,\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7113333333,\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8037352643,\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7231666667,\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8054161179,\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7915,\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8070969715,\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8036666667,\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8087778251,\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7833333333,\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8104586787,\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7961666667,\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8121395322,\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7734166667,\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8138203858,\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7493333333,\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8155012394,\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.709,\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.817182093,\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6539166667,\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8188629466,\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.594,\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8205438001,\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5575,\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8222246537,\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.531,\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8239055073,\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.509,\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8255863609,\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4925,\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8272672145,\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4800833333,\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8289480681,\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.48925,\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8306289216,\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5150833333,\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8323097752,\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5595833333,\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8339906288,\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6145833333,\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8356714824,\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6018333333,\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.837352336,\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6029166667,\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8390331895,\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.56675,\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8407140431,\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5041666667,\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8423948967,\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.44575,\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8440757503,\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4055,\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8457566039,\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3616666667,\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8474374574,\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3309166667,\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.849118311,\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3013333333,\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8507991646,\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2753333333,\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8524800182,\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2565,\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8541608718,\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.217,\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8558417254,\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.19575,\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8575225789,\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1815833333,\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8592034325,\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1470833333,\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8608842861,\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1550833333,\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8625651397,\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.175,\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8642459933,\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1911666667,\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8659268468,\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1951666667,\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8676077004,\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.191,\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.869288554,\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.18775,\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8709694076,\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2014166667,\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8726502612,\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1946666667,\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8743311147,\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2049166667,\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8760119683,\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2063333333,\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8776928219,\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.23225,\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8793736755,\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3095,\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8810545291,\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.37525,\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8827353827,\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4305,\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8844162362,\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4621666667,\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8860970898,\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5031666667,\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8877779434,\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4981666667,\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.889458797,\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4981666667,\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8911396506,\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4885,\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8928205041,\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.49,\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8945013577,\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4839166667,\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8961822113,\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4909166667,\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8978630649,\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4819166667,\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8995439185,\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4848333333,\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.901224772,\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.47,\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9029056256,\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.473,\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9045864792,\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.47825,\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9062673328,\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4840833333,\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9079481864,\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4753333333,\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.90962904,\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4848333333,\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9113098935,\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4994166667,\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9129907471,\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4964166667,\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9146716007,\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.48975,\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9163524543,\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.487,\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9180333079,\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4855833333,\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9197141614,\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.49675,\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.921395015,\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.489,\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9230758686,\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4896666667,\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9247567222,\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4935,\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9264375758,\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4884166667,\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9281184293,\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5038333333,\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9297992829,\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.526,\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9314801365,\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5265,\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9331609901,\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5418333333,\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9348418437,\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.53,\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9365226973,\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5349166667,\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9382035508,\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5301666667,\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9398844044,\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5036666667,\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.941565258,\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4781666667,\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9432461116,\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4655833333,\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9449269652,\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.46025,\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9466078187,\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.462,\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9482886723,\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.49375,\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9499695259,\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5318333333,\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9516503795,\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5385,\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9533312331,\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.54725,\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9550120866,\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5548333333,\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9566929402,\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5669166667,\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9583737938,\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6178333333,\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9600546474,\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6974166667,\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.961735501,\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.75,\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9634163546,\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7515833333,\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9650972081,\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7805833333,\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9667780617,\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8073333333,\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9684589153,\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8255833333,\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9701397689,\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7935,\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9718206225,\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7578333333,\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.973501476,\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.739,\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9751823296,\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7065,\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9768631832,\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.683,\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9785440368,\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6653333333,\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9802248904,\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6220833333,\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9819057439,\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5969166667,\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9835865975,\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.597,\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9852674511,\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5835833333,\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9869483047,\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5686666667,\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9886291583,\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.57975,\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9903100119,\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6100833333,\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9919908654,\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.59225,\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.993671719,\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5835833333,\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9953525726,\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5844166667,\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9970334262,\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6138333333,\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9987142798,\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.616,\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0003951333,\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.60775,\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0020759869,\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6225833333,\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0037568405,\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6566666667,\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0054376941,\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7179166667,\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0071185477,\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8441666667,\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0087994012,\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8455,\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0104802548,\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.82,\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0121611084,\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.79925,\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.013841962,\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.749,\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0155228156,\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7005833333,\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0172036692,\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.68025,\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0188845227,\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6696666667,\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0205653763,\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6673333333,\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0222462299,\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6398333333,\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0239270835,\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6315833333,\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0256079371,\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6018333333,\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0272887906,\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5941666667,\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0289696442,\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.60675,\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0306504978,\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5871666667,\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0323313514,\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5726666667,\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.034012205,\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.56125,\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0356930585,\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5781666667,\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0373739121,\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5713333333,\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0390547657,\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5993333333,\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0407356193,\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6494166667,\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0424164729,\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6829166667,\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0440973265,\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.711,\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.04577818,\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7094166667,\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0474590336,\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7310833333,\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0491398872,\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.74075,\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0508207408,\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7856666667,\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0525015944,\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8166666667,\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0541824479,\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8374166667,\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0558633015,\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8249166667,\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0575441551,\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8415,\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0592250087,\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8549166667,\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0609058623,\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8768333333,\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0625867158,\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8833333333,\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0642675694,\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.90625,\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.065948423,\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9049166667,\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0676292766,\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.93375,\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0693101302,\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0290833333,\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0709909838,\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1054166667,\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0726718373,\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1555,\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0743526909,\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1475833333,\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0760335445,\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1325,\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0777143981,\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0908333333,\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0793952517,\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.04575,\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0810761052,\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0275,\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0827569588,\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0013333333,\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0844378124,\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0170833333,\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.086118666,\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.026,\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0877995196,\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.004,\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0894803731,\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9855,\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0911612267,\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.974,\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0928420803,\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9690833333,\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0945229339,\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9764166667,\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0962037875,\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9636666667,\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0978846411,\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9471666667,\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0995654946,\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9415,\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1012463482,\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9576666667,\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1029272018,\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.00625,\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1046080554,\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.03225,\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.106288909,\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.09025,\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1079697625,\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.135,\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1096506161,\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1330833333,\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1113314697,\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1336666667,\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1130123233,\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1045833333,\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1146931769,\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0746666667,\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1163740304,\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0511666667,\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.118054884,\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.04525,\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1197357376,\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0135833333,\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1214165912,\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.95375,\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1230974448,\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.918,\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1247782984,\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8945833333,\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1264591519,\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8795833333,\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1281400055,\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8873333333,\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1298208591,\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.91075,\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1315017127,\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9419166667,\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1331825663,\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.999,\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1348634198,\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9995,\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1365442734,\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.99025,\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.138225127,\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9981666667,\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1399059806,\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0178333333,\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1415868342,\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0865,\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1432676877,\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1434166667,\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1449485413,\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1928333333,\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1466293949,\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.239,\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1483102485,\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3041666667,\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1499911021,\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3708333333,\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1516719557,\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3345833333,\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1533528092,\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3335,\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1550336628,\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3328333333,\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1567145164,\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2903333333,\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.15839537,\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.26375,\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1600762236,\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2278333333,\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1617570771,\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1991666667,\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1634379307,\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.21325,\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1651187843,\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2250833333,\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1667996379,\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2561666667,\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1684804915,\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3065,\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1701613451,\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3208333333,\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1718421986,\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4215,\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1735230522,\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4158333333,\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1752039058,\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.394,\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1768847594,\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3951666667,\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.178565613,\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4658333333,\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1802464665,\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6425,\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1819273201,\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7038333333,\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1836081737,\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7031666667,\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1852890273,\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.17175,\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1869698809,\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0609166667,\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1886507344,\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.90075,\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.190331588,\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9080833333,\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1920124416,\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0210833333,\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1936932952,\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9484166667,\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1953741488,\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.832,\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1970550024,\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.71075,\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1987358559,\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5878333333,\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2004167095,\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4826666667,\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2020975631,\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.39925,\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2037784167,\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3025833333,\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2054592703,\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2535833333,\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2071401238,\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.24,\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2088209774,\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2729166667,\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.210501831,\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2985833333,\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2121826846,\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2854166667,\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2138635382,\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.32275,\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2155443917,\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4150833333,\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2172252453,\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4175,\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2189060989,\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4330833333,\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2205869525,\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4538333333,\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2222678061,\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4425,\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2239486597,\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3883333333,\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2256295132,\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.34125,\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2273103668,\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3454166667,\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2289912204,\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4161666667,\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.230672074,\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4521666667,\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2323529276,\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5919166667,\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2340337811,\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.58975,\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2357146347,\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.679,\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2373954883,\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7751666667,\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2390763419,\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.87575,\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2407571955,\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.01425,\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.242438049,\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0286666667,\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2441189026,\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.026,\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2457997562,\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0613333333,\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2474806098,\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0135833333,\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2491614634,\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.98525,\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.250842317,\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0086666667,\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2525231705,\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0198333333,\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2542040241,\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9880833333,\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2558848777,\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9829166667,\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2575657313,\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0421666667,\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2592465849,\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0805833333,\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2609274384,\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.09625,\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.262608292,\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.10925,\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2642891456,\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1105833333,\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2659699992,\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1380833333,\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2676508528,\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1065833333,\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2693317063,\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0330833333,\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2710125599,\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9561666667,\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2726934135,\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8425,\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2743742671,\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.73825,\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2760551207,\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6185,\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2777359743,\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4983333333,\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2794168278,\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4245,\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2810976814,\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.37075,\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.282778535,\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3316666667,\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2844593886,\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3078333333,\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2861402422,\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3133333333,\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2878210957,\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2950833333,\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2895019493,\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3283333333,\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2911828029,\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3375833333,\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2928636565,\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3456666667,\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2945445101,\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3929166667,\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2962253636,\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.39325,\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2979062172,\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4204166667,\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2995870708,\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4443333333,\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3012679244,\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4400833333,\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.302948778,\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4170833333,\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3046296316,\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3470833333,\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3063104851,\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.285,\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3079913387,\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2755,\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3096721923,\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.296,\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3113530459,\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3460833333,\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3130338995,\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3995833333,\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.314714753,\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4864166667,\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3163956066,\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6093333333,\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3180764602,\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6698333333,\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3197573138,\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6906666667,\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3214381674,\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7228333333,\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3231190209,\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8213333333,\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3247998745,\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9113333333,\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3264807281,\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9845833333,\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3281615817,\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9815833333,\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3298424353,\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0775833333,\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3315232889,\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1566666667,\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3332041424,\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1949166667,\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.334884996,\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2998333333,\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3365658496,\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2950833333,\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3382467032,\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2505,\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3399275568,\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.17925,\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3416084103,\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1141666667,\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3432892639,\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0856666667,\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3449701175,\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0596666667,\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3466509711,\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0726666667,\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3483318247,\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1346666667,\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3500126782,\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0573333333,\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3516935318,\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9830833333,\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3533743854,\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9445,\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.355055239,\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8753333333,\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3567360926,\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8784166667,\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3584169462,\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8395833333,\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3600977997,\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8755833333,\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3617786533,\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8976666667,\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3634595069,\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8786666667,\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3651403605,\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9046666667,\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3668212141,\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8880833333,\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3685020676,\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.87325,\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3701829212,\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.86825,\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3718637748,\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9268333333,\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3735446284,\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.97275,\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.375225482,\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1065,\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3769063355,\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2076666667,\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3785871891,\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2023333333,\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3802680427,\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2025833333,\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3819488963,\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.17275,\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3836297499,\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.11825,\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3853106035,\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1125,\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.386991457,\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0951666667,\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3886723106,\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1611666667,\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3903531642,\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.214,\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3920340178,\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1775833333,\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3937148714,\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1298333333,\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3953957249,\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0889166667,\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3970765785,\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.08375,\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3987574321,\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0645,\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4004382857,\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1416666667,\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4021191393,\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2320833333,\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4037999928,\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2688333333,\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4054808464,\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3283333333,\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4071617,\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3881666667,\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4088425536,\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3705,\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4105234072,\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3976666667,\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4122042608,\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4386666667,\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4138851143,\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4974166667,\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4155659679,\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.618,\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4172468215,\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7129166667,\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4189276751,\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.72475,\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4206085287,\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8268333333,\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4222893822,\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8965,\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4239702358,\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0405833333,\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4256510894,\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0870833333,\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.427331943,\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1576666667,\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4290127966,\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2085,\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4306936501,\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2068333333,\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4323745037,\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2181666667,\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4340553573,\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2355833333,\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4357362109,\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2320833333,\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4374170645,\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1891666667,\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4390979181,\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0839166667,\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4407787716,\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0065833333,\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4424596252,\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9318333333,\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4441404788,\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8578333333,\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4458213324,\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7986666667,\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.447502186,\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7900833333,\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4491830395,\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7563333333,\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4508638931,\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9248333333,\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4525447467,\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.81875,\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4542256003,\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.73675,\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4559064539,\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.598,\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4575873074,\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2870833333,\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.459268161,\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0535,\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4609490146,\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.801,\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4626298682,\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5434166667,\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4643107218,\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3621666667,\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4659915754,\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2063333333,\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4676724289,\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0235,\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4693532825,\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9355833333,\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4710341361,\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8225833333,\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4727149897,\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7749166667,\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4743958433,\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7714166667,\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4760766968,\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7331666667,\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4777575504,\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7925,\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.479438404,\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8889166667,\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4811192576,\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9520833333,\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4828001112,\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9475833333,\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4844809647,\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0001666667,\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4861618183,\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0380833333,\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4878426719,\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0774166667,\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4895235255,\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.029,\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4912043791,\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.04775,\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4928852327,\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0509166667,\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4945660862,\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0240833333,\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4962469398,\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0690833333,\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4979277934,\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1516666667,\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.499608647,\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.14875,\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5012895006,\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1625833333,\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5029703541,\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1716666667,\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5046512077,\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1639166667,\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5063320613,\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1895,\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5080129149,\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3448333333,\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5096937685,\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.418,\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.511374622,\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5395,\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5130554756,\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.625,\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5147363292,\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.727,\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5164171828,\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7804166667,\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5180980364,\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8056666667,\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.51977889,\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7625833333,\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5214597435,\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7340833333,\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5231405971,\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6543333333,\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5248214507,\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5905833333,\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5265023043,\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6231666667,\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5281831579,\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6755833333,\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5298640114,\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.76725,\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.531544865,\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7614166667,\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5332257186,\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.75225,\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5349065722,\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7399166667,\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5365874258,\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7181666667,\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5382682793,\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7104166667,\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5399491329,\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6855833333,\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5416299865,\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6331666667,\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5433108401,\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6019166667,\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5449916937,\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6148333333,\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5466725473,\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6908333333,\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5483534008,\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7878333333,\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5500342544,\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.80825,\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.551715108,\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.78425,\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5533959616,\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7516666667,\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5550768152,\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7580833333,\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5567576687,\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.74875,\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5584385223,\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7535833333,\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5601193759,\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.72225,\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5618002295,\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7128333333,\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5634810831,\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7283333333,\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5651619366,\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7819166667,\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5668427902,\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8648333333,\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5685236438,\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8563333333,\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5702044974,\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8261666667,\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.571885351,\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.784,\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5735662046,\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7740833333,\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5752470581,\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7338333333,\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5769279117,\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7724166667,\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5786087653,\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8181666667,\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5802896189,\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.864,\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5819704725,\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8996666667,\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.583651326,\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.92825,\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5853321796,\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.91175,\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5870130332,\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.93575,\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5886938868,\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9665833333,\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5903747404,\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9691666667,\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5920555939,\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9620833333,\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5937364475,\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0093333333,\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5954173011,\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0193333333,\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5970981547,\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.983,\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5987790083,\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9106666667,\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6004598619,\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.85425,\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6021407154,\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8503333333,\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.603821569,\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8255,\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6055024226,\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8619166667,\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6071832762,\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.87475,\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6088641298,\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8473333333,\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6105449833,\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.84,\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6122258369,\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8430833333,\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6139066905,\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8665,\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6155875441,\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8558333333,\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6172683977,\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8999166667,\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6189492512,\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.86625,\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6206301048,\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8288333333,\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6223109584,\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8029166667,\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.623991812,\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7980833333,\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6256726656,\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8306666667,\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6273535192,\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.83275,\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6290343727,\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8078333333,\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6307152263,\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8433333333,\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6323960799,\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.92875,\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6340769335,\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9503333333,\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6357577871,\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9365,\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6374386406,\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9285833333,\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6391194942,\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9778333333,\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6408003478,\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0080833333,\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6424812014,\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3,\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.644162055,\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9825833333,\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6458429085,\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0786666667,\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6475237621,\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1004166667,\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6492046157,\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.10525,\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6508854693,\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1688333333,\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6525663229,\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1865,\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6542471765,\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2041666667,\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.65592803,\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2201666667,\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6576088836,\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2259166667,\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6592897372,\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2195,\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6609705908,\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2478333333,\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6626514444,\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2588333333,\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6643322979,\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3095,\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6660131515,\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4985833333,\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6676940051,\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6375833333,\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6693748587,\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6886666667,\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6710557123,\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6863333333,\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6727365658,\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7195,\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6744174194,\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8025,\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.676098273,\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.909,\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6777791266,\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9649166667,\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6794599802,\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.002,\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6811408338,\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0819166667,\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6828216873,\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.08775,\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6845025409,\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0836666667,\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6861833945,\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9784166667,\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6878642481,\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.91875,\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6895451017,\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8975,\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6912259552,\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8353333333,\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6929068088,\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7805833333,\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6945876624,\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7065833333,\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.696268516,\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7025,\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6979493696,\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7580833333,\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6996302231,\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7989166667,\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7013110767,\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8170833333,\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7029919303,\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8271666667,\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7046727839,\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.79175,\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7063536375,\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7258333333,\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7080344911,\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.70175,\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7097153446,\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7428333333,\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7113961982,\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7889166667,\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7130770518,\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7779166667,\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7147579054,\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7255,\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.716438759,\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6406666667,\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7181196125,\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5676666667,\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7198004661,\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5489166667,\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7214813197,\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6025,\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7231621733,\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5915,\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7248430269,\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5828333333,\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7265238804,\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5561666667,\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.728204734,\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.56775,\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7298855876,\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5034166667,\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7315664412,\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.447,\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7332472948,\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4248333333,\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7349281484,\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4170833333,\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7366090019,\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3644166667,\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7382898555,\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3875,\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7399707091,\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.429,\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7416515627,\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.513,\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7433324163,\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.52275,\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7450132698,\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5246666667,\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7466941234,\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5743333333,\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.748374977,\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.61375,\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7500558306,\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6596666667,\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7517366842,\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.732,\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7534175377,\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8614166667,\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7550983913,\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9273333333,\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7567792449,\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.964,\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7584600985,\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0018333333,\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7601409521,\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0504166667,\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7618218057,\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0706666667,\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7635026592,\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.07175,\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7651835128,\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0521666667,\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7668643664,\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0058333333,\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.76854522,\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9668333333,\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7702260736,\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.92975,\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7719069271,\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.905,\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7735877807,\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8615,\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7752686343,\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8170833333,\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7769494879,\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7609166667,\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7786303415,\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7135833333,\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.780311195,\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6640833333,\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7819920486,\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5713333333,\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7836729022,\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4944166667,\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7853537558,\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5433333333,\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7870346094,\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5616666667,\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.788715463,\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6311666667,\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7903963165,\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6438333333,\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7920771701,\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.76925,\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7937580237,\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8539166667,\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7954388773,\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8799166667,\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7971197309,\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9118333333,\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7988005844,\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.974,\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.800481438,\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9806666667,\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8021622916,\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.012,\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8038431452,\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9665833333,\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8055239988,\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.94525,\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8072048523,\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0136666667,\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8088857059,\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.98625,\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8105665595,\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8585,\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8122474131,\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7351666667,\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8139282667,\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6595833333,\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8156091203,\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6109166667,\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8172899738,\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5866666667,\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8189708274,\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5889166667,\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.820651681,\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5489166667,\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8223325346,\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5030833333,\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8240133882,\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4101666667,\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8256942417,\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4134166667,\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8273750953,\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4539166667,\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8290559489,\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4639166667,\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8307368025,\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.469,\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8324176561,\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4744166667,\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8340985096,\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5135,\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8357793632,\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6901666667,\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8374602168,\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7646666667,\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8391410704,\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8923333333,\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.840821924,\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9339166667,\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8425027776,\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.91,\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8441836311,\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.86525,\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8458644847,\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8494166667,\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8475453383,\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8305833333,\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8492261919,\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8023333333,\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8509070455,\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7638333333,\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.852587899,\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7015,\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8542687526,\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.688,\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8559496062,\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6716666667,\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8576304598,\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6834166667,\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8593113134,\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.74425,\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8609921669,\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7975,\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8626730205,\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7765833333,\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8643538741,\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7738333333,\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8660347277,\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.78475,\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8677155813,\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7660833333,\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8693964349,\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7355,\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8710772884,\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6634166667,\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.872758142,\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.65675,\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8744389956,\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7924166667,\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8761198492,\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8378333333,\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8778007028,\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.80725,\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8794815563,\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.78775,\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8811624099,\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7235833333,\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8828432635,\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7071666667,\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8845241171,\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.70625,\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8862049707,\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.754,\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8878858242,\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7398333333,\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8895666778,\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7113333333,\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8912475314,\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6588333333,\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.892928385,\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.59425,\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8946092386,\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.53525,\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8962900922,\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.52225,\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8979709457,\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5230833333,\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8996517993,\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4666666667,\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9013326529,\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.43525,\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9030135065,\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3709166667,\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9046943601,\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3919166667,\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9063752136,\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4623333333,\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9080560672,\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4495,\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9097369208,\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.44625,\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9114177744,\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4215,\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.913098628,\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.45025,\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9147794816,\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5034166667,\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9164603351,\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5093333333,\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9181411887,\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4998333333,\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9198220423,\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4701666667,\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9215028959,\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4669166667,\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9231837495,\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.46375,\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.924864603,\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.479,\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9265454566,\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5475,\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9282263102,\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.60675,\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9299071638,\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.64175,\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9315880174,\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6708333333,\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9332688709,\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.706,\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9349497245,\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7111666667,\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9366305781,\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7381666667,\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9383114317,\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7605,\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9399922853,\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.816,\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9416731389,\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.85025,\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9433539924,\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8839166667,\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.945034846,\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.85875,\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9467156996,\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8420833333,\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9483965532,\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8385833333,\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9500774068,\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.84325,\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9517582603,\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8565833333,\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9534391139,\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8398333333,\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9551199675,\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.85,\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9568008211,\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8686666667,\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9584816747,\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8699166667,\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9601625282,\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8475,\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9618433818,\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.80875,\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9635242354,\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7668333333,\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.965205089,\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7155833333,\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9668859426,\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6915,\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9685667962,\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6748333333,\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9702476497,\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.64375,\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9719285033,\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6246666667,\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9736093569,\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6250833333,\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9752902105,\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6225,\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9769710641,\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5761666667,\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9786519176,\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5251666667,\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9803327712,\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5249166667,\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9820136248,\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4766666667,\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9836944784,\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3915,\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.985375332,\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3021666667,\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9870561855,\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2323333333,\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9887370391,\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.17,\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9904178927,\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.116,\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9920987463,\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0705833333,\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9937795999,\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0020833333,\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9954604535,\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9605,\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.997141307,\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8666666667,\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9988221606,\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.74625,\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0005030142,\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6041666667,\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0021838678,\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5036666667,\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0038647214,\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.42375,\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0055455749,\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3450833333,\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0072264285,\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2650833333,\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0089072821,\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2385833333,\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0105881357,\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2544166667,\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0122689893,\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3746666667,\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0139498428,\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.45975,\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0156306964,\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5195833333,\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.01731155,\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.67225,\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0189924036,\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6890833333,\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0206732572,\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.65525,\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0223541108,\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6515833333,\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0240349643,\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.64325,\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0257158179,\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6116666667,\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0273966715,\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6054166667,\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0290775251,\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6794166667,\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0307583787,\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.776,\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0324392322,\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8776666667,\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0341200858,\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9048333333,\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0358009394,\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.95325,\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.037481793,\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9800833333,\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0391626466,\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9816666667,\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0408435001,\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9790833333,\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0425243537,\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0245833333,\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0442052073,\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0031666667,\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0458860609,\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9933333333,\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0475669145,\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9863333333,\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0492477681,\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0495833333,\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0509286216,\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.01825,\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0526094752,\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.964,\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0542903288,\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9108333333,\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0559711824,\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8488333333,\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.057652036,\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9221666667,\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0593328895,\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8459166667,\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0610137431,\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7256666667,\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0626945967,\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6556666667,\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0643754503,\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5951666667,\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0660563039,\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5485833333,\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0677371574,\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5356666667,\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.069418011,\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.52875,\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0710988646,\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5398333333,\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0727797182,\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4845833333,\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0744605718,\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4403333333,\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0761414254,\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.43425,\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0778222789,\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.45025,\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0795031325,\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.40075,\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0811839861,\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3225,\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0828648397,\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2930833333,\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0845456933,\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2871666667,\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0862265468,\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2714166667,\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0879074004,\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2659166667,\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.089588254,\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2755,\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0912691076,\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2711666667,\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0929499612,\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2410833333,\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0946308147,\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.15825,\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0963116683,\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1033333333,\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0979925219,\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0665833333,\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0996733755,\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0065,\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1013542291,\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9654166667,\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1030350827,\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9610833333,\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1047159362,\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0085,\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1063967898,\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0591666667,\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1080776434,\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1816666667,\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.109758497,\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2295,\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1114393506,\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.29525,\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1131202041,\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3093333333,\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1148010577,\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2985833333,\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1164819113,\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3630833333,\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1181627649,\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3878333333,\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1198436185,\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4613333333,\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.121524472,\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.448,\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1232053256,\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4648333333,\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1248861792,\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5193333333,\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1265670328,\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5528333333,\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1282478864,\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5924166667,\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.12992874,\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6095,\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1316095935,\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.57025,\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1332904471,\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.554,\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1349713007,\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5216666667,\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1366521543,\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.48475,\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1383330079,\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.46225,\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1400138614,\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4148333333,\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.141694715,\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3898333333,\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1433755686,\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.37575,\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1450564222,\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3731666667,\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1467372758,\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.41625,\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1484181293,\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4548333333,\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1500989829,\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4455833333,\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1517798365,\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.43125,\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1534606901,\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4525833333,\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1551415437,\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.455,\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1568223973,\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4759166667,\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1585032508,\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5001666667,\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1601841044,\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4879166667,\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.161864958,\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4775833333,\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1635458116,\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4675833333,\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1652266652,\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4754166667,\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1669075187,\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.43125,\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1685883723,\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.401,\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1702692259,\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3985833333,\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1719500795,\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.449,\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1736309331,\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4711666667,\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1753117866,\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.49825,\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1769926402,\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5386666667,\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1786734938,\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6046666667,\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1803543474,\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.61675,\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.182035201,\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.58775,\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1837160546,\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.56,\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1853969081,\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5350833333,\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1870777617,\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5325,\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1887586153,\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.54775,\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1904394689,\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5439166667,\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1921203225,\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5585,\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.193801176,\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5819166667,\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1954820296,\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5659166667,\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1971628832,\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.56525,\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1988437368,\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5618333333,\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2005245904,\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6004166667,\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2022054439,\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6600833333,\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2038862975,\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6749166667,\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2055671511,\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6858333333,\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2072480047,\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6525833333,\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2089288583,\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.61625,\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2106097119,\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6148333333,\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2122905654,\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.64425,\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.213971419,\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6515,\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2156522726,\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6581666667,\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2173331262,\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.61375,\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2190139798,\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5715,\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2206948333,\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.54175,\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2223756869,\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5163333333,\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2240565405,\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5458333333,\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2257373941,\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5284166667,\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2274182477,\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5604166667,\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2290991012,\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6000833333,\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2307799548,\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.62575,\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2324608084,\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6303333333,\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.234141662,\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6093333333,\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2358225156,\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6433333333,\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2375033692,\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.92375,\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2391842227,\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9299166667,\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2408650763,\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8819166667,\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2425459299,\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8330833333,\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2442267835,\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.81325,\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2459076371,\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7553333333,\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2475884906,\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7374166667,\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2492693442,\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7245,\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2509501978,\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7345833333,\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2526310514,\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8086666667,\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.254311905,\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8403333333,\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2559927585,\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8186666667,\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2576736121,\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7854166667,\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2593544657,\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.75475,\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2610353193,\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7375833333,\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2627161729,\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.707,\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2643970265,\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.72575,\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.26607788,\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7724166667,\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2677587336,\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.77875,\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2694395872,\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8083333333,\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2711204408,\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8210833333,\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2728012944,\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8610833333,\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2744821479,\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8919166667,\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2761630015,\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8649166667,\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2778438551,\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8209166667,\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2795247087,\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.81125,\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2812055623,\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8225833333,\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2828864158,\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8216666667,\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2845672694,\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8598333333,\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.286248123,\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9085833333,\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2879289766,\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.96025,\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2896098302,\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9554166667,\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2912906838,\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.00425,\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2929715373,\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0555833333,\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2946523909,\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1013333333,\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2963332445,\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.10325,\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2980140981,\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1435833333,\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2996949517,\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1908333333,\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3013758052,\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2299166667,\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3030566588,\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2145833333,\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3047375124,\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1860833333,\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.306418366,\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1563333333,\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3080992196,\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1141666667,\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3097800731,\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1225,\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3114609267,\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1355,\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3131417803,\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1366666667,\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3148226339,\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1070833333,\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3165034875,\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1183333333,\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3181843411,\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1210833333,\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3198651946,\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.11275,\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3215460482,\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0929166667,\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3232269018,\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.09825,\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3249077554,\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0974166667,\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.326588609,\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1075833333,\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3282694625,\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1165,\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3299503161,\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.11675,\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3316311697,\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.14475,\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3333120233,\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1826666667,\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3349928769,\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1639166667,\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3366737304,\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.13325,\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.338354584,\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.10525,\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3400354376,\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0535,\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3417162912,\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9895833333,\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3433971448,\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9201666667,\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3450779984,\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8581666667,\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3467588519,\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7746666667,\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3484397055,\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7373333333,\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3501205591,\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6884166667,\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3518014127,\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6433333333,\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3534822663,\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5909166667,\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3551631198,\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5606666667,\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3568439734,\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.564,\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.358524827,\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.56425,\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3602056806,\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5623333333,\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3618865342,\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5584166667,\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3635673877,\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.57625,\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3652482413,\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6099166667,\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3669290949,\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6711666667,\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3686099485,\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6981666667,\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3702908021,\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.74175,\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3719716557,\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8166666667,\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3736525092,\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8960833333,\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3753333628,\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9681666667,\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3770142164,\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0340833333,\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.37869507,\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1266666667,\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3803759236,\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.14875,\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3820567771,\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.19725,\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3837376307,\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.21075,\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3854184843,\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1830833333,\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3870993379,\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1685,\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3887801915,\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1375833333,\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.390461045,\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1171666667,\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3921418986,\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0486666667,\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3938227522,\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.99025,\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3955036058,\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9665,\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3971844594,\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.01575,\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.398865313,\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0401666667,\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4005461665,\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0685833333,\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4022270201,\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0430833333,\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4039078737,\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0111666667,\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4055887273,\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.987,\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4072695809,\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9296666667,\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4089504344,\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9025833333,\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.410631288,\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.883,\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4123121416,\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8750833333,\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4139929952,\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8625833333,\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4156738488,\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.86325,\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4173547023,\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9605,\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4190355559,\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.98525,\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4207164095,\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9979166667,\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4223972631,\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.985,\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4240781167,\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9860833333,\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4257589703,\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.94375,\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4274398238,\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9556666667,\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4291206774,\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9631666667,\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.430801531,\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9349166667,\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4324823846,\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9135833333,\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4341632382,\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8996666667,\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4358440917,\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.88125,\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4375249453,\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8563333333,\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4392057989,\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8466666667,\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4408866525,\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8751666667,\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4425675061,\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8808333333,\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4442483596,\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.87475,\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4459292132,\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8461666667,\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4476100668,\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8190833333,\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4492909204,\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7765,\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.450971774,\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7435833333,\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4526526276,\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.74575,\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4543334811,\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7789166667,\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4560143347,\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7453333333,\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4576951883,\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7021666667,\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4593760419,\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.58475,\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4610568955,\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4628333333,\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.462737749,\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.355,\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4644186026,\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2745833333,\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4660994562,\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.20125,\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4677803098,\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1604166667,\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4694611634,\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.11725,\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4711420169,\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1213333333,\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4728228705,\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1696666667,\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4745037241,\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1990833333,\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4761845777,\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2720833333,\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4778654313,\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2890833333,\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4795462849,\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.344,\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4812271384,\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4030833333,\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.482907992,\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.43225,\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4845888456,\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4748333333,\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4862696992,\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.48025,\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4879505528,\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.49975,\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4896314063,\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4939166667,\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4913122599,\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4895,\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4929931135,\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.49,\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4946739671,\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4801666667,\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4963548207,\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4823333333,\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4980356742,\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.498,\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4997165278,\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5341666667,\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5013973814,\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5275,\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.503078235,\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5030833333,\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5047590886,\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4869166667,\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5064399422,\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4848333333,\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5081207957,\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4865,\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5098016493,\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4828333333,\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5114825029,\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4681666667,\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5131633565,\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4629166667,\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5148442101,\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.436,\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5165250636,\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.42075,\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5182059172,\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4341666667,\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5198867708,\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4274166667,\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5215676244,\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.443,\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.523248478,\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4734166667,\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5249293315,\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4745,\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5266101851,\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5308333333,\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5282910387,\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5481666667,\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5299718923,\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5546666667,\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5316527459,\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6196666667,\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5333335995,\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6805,\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.535014453,\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6963333333,\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5366953066,\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7136666667,\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5383761602,\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.76625,\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5400570138,\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8070833333,\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5417378674,\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9301666667,\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5434187209,\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0103333333,\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5450995745,\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0729166667,\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5467804281,\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1585,\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5484612817,\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1751666667,\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5501421353,\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1625833333,\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5518229888,\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.16725,\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5535038424,\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1645833333,\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.555184696,\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.172,\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5568655496,\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1914166667,\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5585464032,\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2116666667,\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5602272568,\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2814166667,\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5619081103,\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.34575,\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5635889639,\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.34525,\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5652698175,\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.35275,\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5669506711,\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3636666667,\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5686315247,\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.39425,\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5703123782,\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3904166667,\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5719932318,\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4235,\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5736740854,\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4525833333,\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.575354939,\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4655,\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5770357926,\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4844166667,\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5787166461,\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4724166667,\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5803974997,\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4996666667,\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5820783533,\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5111666667,\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5837592069,\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.51675,\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5854400605,\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4896666667,\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5871209141,\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4851666667,\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5888017676,\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5165833333,\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5904826212,\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5061666667,\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5921634748,\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5210833333,\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5938443284,\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5143333333,\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.595525182,\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5270833333,\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5972060355,\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5971666667,\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5988868891,\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.65275,\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6005677427,\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7156666667,\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6022485963,\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7273333333,\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6039294499,\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7481666667,\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6056103034,\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7454166667,\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.607291157,\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.74575,\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6089720106,\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7333333333,\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6106528642,\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.69975,\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6123337178,\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6755,\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6140145714,\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6595,\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6156954249,\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6401666667,\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6173762785,\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.64475,\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6190571321,\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6535833333,\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6207379857,\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6615,\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6224188393,\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6755,\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6240996928,\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7140833333,\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6257805464,\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7806666667,\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6274614,\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.82275,\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6291422536,\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8669166667,\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6308231072,\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9433333333,\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6325039608,\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4456666667,\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6341848143,\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.6726666667,\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6358656679,\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.6170833333,\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6375465215,\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.61125,\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6392273751,\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.5525833333,\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6409082287,\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4771666667,\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6425890822,\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4511666667,\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6442699358,\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4879166667,\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6459507894,\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.5610833333,\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.647631643,\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.701,\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6493124966,\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.8656666667,\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6509933501,\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.9719166667,\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6526742037,\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.012,\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6543550573,\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.2535,\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6560359109,\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.38075,\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6577167645,\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.3458333333,\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6593976181,\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.2643333333,\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6610784716,\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.1664166667,\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6627593252,\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.0398333333,\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6644401788,\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.883,\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6661210324,\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.7291666667,\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.667801886,\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.5989166667,\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6694827395,\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4489166667,\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6711635931,\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.349,\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6728444467,\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2890833333,\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6745253003,\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2285,\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6762061539,\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1523333333,\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6778870074,\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1074166667,\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.679567861,\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0789166667,\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6812487146,\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.14825,\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6829295682,\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2526666667,\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6846104218,\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.3633333333,\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6862912754,\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.3120833333,\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6879721289,\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1995833333,\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6896529825,\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1658333333,\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6913338361,\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2105,\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6930146897,\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.17825,\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6946955433,\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0665,\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6963763968,\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9478333333,\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6980572504,\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7958333333,\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.699738104,\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6435833333,\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7014189576,\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.523,\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7030998112,\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4898333333,\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7047806647,\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6025,\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7064615183,\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6311666667,\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7081423719,\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.67775,\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7098232255,\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.774,\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7115040791,\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8493333333,\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7131849327,\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8183333333,\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7148657862,\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.77675,\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7165466398,\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.776,\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7182274934,\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7435833333,\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.719908347,\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7944166667,\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7215892006,\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8526666667,\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7232700541,\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.81625,\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7249509077,\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.81875,\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7266317613,\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.883,\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7283126149,\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9720833333,\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7299934685,\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0398333333,\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.731674322,\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0428333333,\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7333551756,\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9936666667,\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7350360292,\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9304166667,\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7367168828,\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9295,\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7383977364,\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9285833333,\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.74007859,\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9719166667,\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7417594435,\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9455833333,\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7434402971,\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.995,\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7451211507,\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.98025,\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7468020043,\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9753333333,\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7484828579,\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9385833333,\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7501637114,\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9613333333,\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.751844565,\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9698333333,\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7535254186,\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0019166667,\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7552062722,\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1503333333,\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7568871258,\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2188333333,\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7585679793,\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2440833333,\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7602488329,\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2770833333,\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7619296865,\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.23275,\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7636105401,\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.22625,\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7652913937,\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2460833333,\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7669722473,\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.323,\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7686531008,\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2991666667,\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7703339544,\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.28625,\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.772014808,\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1599166667,\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7736956616,\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0485,\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7753765152,\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.99475,\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7770573687,\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9290833333,\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7787382223,\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8448333333,\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7804190759,\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.789,\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7820999295,\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7325833333,\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7837807831,\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6828333333,\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7854616366,\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6656666667,\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7871424902,\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5654166667,\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7888233438,\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4815,\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7905041974,\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5409166667,\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.792185051,\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5228333333,\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7938659046,\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5079166667,\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7955467581,\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4788333333,\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7972276117,\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4768333333,\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.7989084653,\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5109166667,\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8005893189,\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.54975,\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8022701725,\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5989166667,\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.803951026,\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6731666667,\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8056318796,\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6526666667,\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8073127332,\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7561666667,\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8089935868,\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.781,\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8106744404,\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8548333333,\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8123552939,\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9271666667,\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8140361475,\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9306666667,\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8157170011,\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0188333333,\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8173978547,\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.06375,\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8190787083,\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.10625,\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8207595619,\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.09125,\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8224404154,\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0814166667,\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.824121269,\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0420833333,\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8258021226,\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0134166667,\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8274829762,\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.00925,\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8291638298,\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9465,\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8308446833,\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8579166667,\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8325255369,\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8586666667,\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8342063905,\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8534166667,\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8358872441,\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8831666667,\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8375680977,\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.90025,\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8392489512,\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9055,\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8409298048,\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.87175,\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8426106584,\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.879,\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.844291512,\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.84375,\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8459723656,\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8125,\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8476532192,\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7886666667,\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8493340727,\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7275,\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8510149263,\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7145,\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8526957799,\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6693333333,\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8543766335,\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.62675,\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8560574871,\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6224166667,\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8577383406,\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6073333333,\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8594191942,\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5685833333,\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8611000478,\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5970833333,\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8627809014,\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5735,\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.864461755,\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5249166667,\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8661426085,\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.493,\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8678234621,\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4789166667,\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8695043157,\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4660833333,\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8711851693,\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4660833333,\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8728660229,\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.45425,\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8745468765,\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.431,\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.87622773,\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.431,\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8779085836,\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4395,\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8795894372,\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4266666667,\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8812702908,\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4620833333,\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8829511444,\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4610833333,\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8846319979,\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5243333333,\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8863128515,\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.522,\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8879937051,\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5101666667,\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8896745587,\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5611666667,\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8913554123,\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5964166667,\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8930362658,\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.57775,\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8947171194,\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5271666667,\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.896397973,\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.51375,\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8980788266,\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4978333333,\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.8997596802,\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5485833333,\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9014405338,\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6035,\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9031213873,\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6863333333,\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9048022409,\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.613,\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9064830945,\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.58525,\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9081639481,\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.57875,\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9098448017,\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5851666667,\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9115256552,\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5728333333,\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9132065088,\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6244166667,\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9148873624,\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6089166667,\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.916568216,\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5746666667,\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9182490696,\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5501666667,\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9199299231,\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5765,\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9216107767,\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6445833333,\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.9232916303,\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9264132155,\"date\":\"2025-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9280940691,\"date\":\"2025-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9297749227,\"date\":\"2025-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9314557763,\"date\":\"2025-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9331366299,\"date\":\"2025-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9348174834,\"date\":\"2025-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.936498337,\"date\":\"2025-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9381791906,\"date\":\"2025-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9398600442,\"date\":\"2025-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9415408978,\"date\":\"2025-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9432217513,\"date\":\"2025-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9449026049,\"date\":\"2025-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9465834585,\"date\":\"2025-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9482643121,\"date\":\"2025-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9499451657,\"date\":\"2025-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9516260193,\"date\":\"2025-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9533068728,\"date\":\"2025-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9549877264,\"date\":\"2025-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.95666858,\"date\":\"2025-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9583494336,\"date\":\"2025-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9600302872,\"date\":\"2025-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9617111407,\"date\":\"2025-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9633919943,\"date\":\"2025-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9650728479,\"date\":\"2025-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9667537015,\"date\":\"2025-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9684345551,\"date\":\"2025-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9701154086,\"date\":\"2026-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9717962622,\"date\":\"2026-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9734771158,\"date\":\"2026-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9751579694,\"date\":\"2026-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.976838823,\"date\":\"2026-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9785196766,\"date\":\"2026-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9802005301,\"date\":\"2026-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9818813837,\"date\":\"2026-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9835622373,\"date\":\"2026-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9852430909,\"date\":\"2026-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9869239445,\"date\":\"2026-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.988604798,\"date\":\"2026-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9902856516,\"date\":\"2026-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9919665052,\"date\":\"2026-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9936473588,\"date\":\"2026-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9953282124,\"date\":\"2026-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9970090659,\"date\":\"2026-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.9986899195,\"date\":\"2026-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0003707731,\"date\":\"2026-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0020516267,\"date\":\"2026-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0037324803,\"date\":\"2026-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0054133339,\"date\":\"2026-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0070941874,\"date\":\"2026-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.008775041,\"date\":\"2026-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0104558946,\"date\":\"2026-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0121367482,\"date\":\"2026-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0138176018,\"date\":\"2026-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0154984553,\"date\":\"2026-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0171793089,\"date\":\"2026-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0188601625,\"date\":\"2026-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0205410161,\"date\":\"2026-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0222218697,\"date\":\"2026-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0239027232,\"date\":\"2026-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0255835768,\"date\":\"2026-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0272644304,\"date\":\"2026-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.028945284,\"date\":\"2026-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0306261376,\"date\":\"2026-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0323069912,\"date\":\"2026-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0339878447,\"date\":\"2026-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0356686983,\"date\":\"2026-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0373495519,\"date\":\"2026-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0390304055,\"date\":\"2026-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0407112591,\"date\":\"2026-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0423921126,\"date\":\"2026-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0440729662,\"date\":\"2026-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0457538198,\"date\":\"2026-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0474346734,\"date\":\"2026-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.049115527,\"date\":\"2026-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0507963805,\"date\":\"2026-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0524772341,\"date\":\"2026-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0541580877,\"date\":\"2026-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0558389413,\"date\":\"2026-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0575197949,\"date\":\"2027-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0592006485,\"date\":\"2027-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.060881502,\"date\":\"2027-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0625623556,\"date\":\"2027-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0642432092,\"date\":\"2027-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0659240628,\"date\":\"2027-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0676049164,\"date\":\"2027-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0692857699,\"date\":\"2027-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0709666235,\"date\":\"2027-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0726474771,\"date\":\"2027-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0743283307,\"date\":\"2027-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0760091843,\"date\":\"2027-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0776900378,\"date\":\"2027-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0793708914,\"date\":\"2027-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.081051745,\"date\":\"2027-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0827325986,\"date\":\"2027-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0844134522,\"date\":\"2027-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0860943058,\"date\":\"2027-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0877751593,\"date\":\"2027-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0894560129,\"date\":\"2027-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0911368665,\"date\":\"2027-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0928177201,\"date\":\"2027-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0944985737,\"date\":\"2027-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0961794272,\"date\":\"2027-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0978602808,\"date\":\"2027-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.0995411344,\"date\":\"2027-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.101221988,\"date\":\"2027-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1029028416,\"date\":\"2027-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1045836951,\"date\":\"2027-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1062645487,\"date\":\"2027-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1079454023,\"date\":\"2027-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1096262559,\"date\":\"2027-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1113071095,\"date\":\"2027-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1129879631,\"date\":\"2027-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1146688166,\"date\":\"2027-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1163496702,\"date\":\"2027-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1180305238,\"date\":\"2027-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1197113774,\"date\":\"2027-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.121392231,\"date\":\"2027-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1230730845,\"date\":\"2027-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1247539381,\"date\":\"2027-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1264347917,\"date\":\"2027-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1281156453,\"date\":\"2027-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1297964989,\"date\":\"2027-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1314773524,\"date\":\"2027-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.133158206,\"date\":\"2027-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1348390596,\"date\":\"2027-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1365199132,\"date\":\"2027-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1382007668,\"date\":\"2027-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1398816204,\"date\":\"2027-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1415624739,\"date\":\"2027-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1432433275,\"date\":\"2027-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1449241811,\"date\":\"2028-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1466050347,\"date\":\"2028-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1482858883,\"date\":\"2028-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1499667418,\"date\":\"2028-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1516475954,\"date\":\"2028-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.153328449,\"date\":\"2028-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1550093026,\"date\":\"2028-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1566901562,\"date\":\"2028-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1583710097,\"date\":\"2028-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1600518633,\"date\":\"2028-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1617327169,\"date\":\"2028-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1634135705,\"date\":\"2028-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1650944241,\"date\":\"2028-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1667752777,\"date\":\"2028-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1684561312,\"date\":\"2028-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1701369848,\"date\":\"2028-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1718178384,\"date\":\"2028-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.173498692,\"date\":\"2028-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1751795456,\"date\":\"2028-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1768603991,\"date\":\"2028-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1785412527,\"date\":\"2028-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1802221063,\"date\":\"2028-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1819029599,\"date\":\"2028-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1835838135,\"date\":\"2028-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.185264667,\"date\":\"2028-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1869455206,\"date\":\"2028-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1886263742,\"date\":\"2028-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1903072278,\"date\":\"2028-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1919880814,\"date\":\"2028-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.193668935,\"date\":\"2028-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1953497885,\"date\":\"2028-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1970306421,\"date\":\"2028-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.1987114957,\"date\":\"2028-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2003923493,\"date\":\"2028-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2020732029,\"date\":\"2028-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2037540564,\"date\":\"2028-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.20543491,\"date\":\"2028-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2071157636,\"date\":\"2028-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2087966172,\"date\":\"2028-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2104774708,\"date\":\"2028-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2121583243,\"date\":\"2028-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2138391779,\"date\":\"2028-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2155200315,\"date\":\"2028-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2172008851,\"date\":\"2028-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2188817387,\"date\":\"2028-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2205625923,\"date\":\"2028-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2222434458,\"date\":\"2028-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2239242994,\"date\":\"2028-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.225605153,\"date\":\"2028-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2272860066,\"date\":\"2028-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2289668602,\"date\":\"2028-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2306477137,\"date\":\"2028-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2323285673,\"date\":\"2028-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2340094209,\"date\":\"2029-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2356902745,\"date\":\"2029-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2373711281,\"date\":\"2029-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2390519816,\"date\":\"2029-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2407328352,\"date\":\"2029-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2424136888,\"date\":\"2029-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2440945424,\"date\":\"2029-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.245775396,\"date\":\"2029-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2474562496,\"date\":\"2029-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2491371031,\"date\":\"2029-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2508179567,\"date\":\"2029-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2524988103,\"date\":\"2029-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2541796639,\"date\":\"2029-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2558605175,\"date\":\"2029-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.257541371,\"date\":\"2029-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2592222246,\"date\":\"2029-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2609030782,\"date\":\"2029-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2625839318,\"date\":\"2029-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2642647854,\"date\":\"2029-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2659456389,\"date\":\"2029-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2676264925,\"date\":\"2029-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2693073461,\"date\":\"2029-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2709881997,\"date\":\"2029-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2726690533,\"date\":\"2029-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2743499069,\"date\":\"2029-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2760307604,\"date\":\"2029-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.277711614,\"date\":\"2029-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2793924676,\"date\":\"2029-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2810733212,\"date\":\"2029-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2827541748,\"date\":\"2029-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2844350283,\"date\":\"2029-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2861158819,\"date\":\"2029-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2877967355,\"date\":\"2029-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2894775891,\"date\":\"2029-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2911584427,\"date\":\"2029-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2928392962,\"date\":\"2029-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2945201498,\"date\":\"2029-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2962010034,\"date\":\"2029-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.297881857,\"date\":\"2029-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.2995627106,\"date\":\"2029-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3012435642,\"date\":\"2029-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3029244177,\"date\":\"2029-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3046052713,\"date\":\"2029-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3062861249,\"date\":\"2029-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3079669785,\"date\":\"2029-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3096478321,\"date\":\"2029-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3113286856,\"date\":\"2029-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3130095392,\"date\":\"2029-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3146903928,\"date\":\"2029-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3163712464,\"date\":\"2029-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3180521,\"date\":\"2029-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3197329535,\"date\":\"2029-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3214138071,\"date\":\"2030-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3230946607,\"date\":\"2030-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3247755143,\"date\":\"2030-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3264563679,\"date\":\"2030-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3281372215,\"date\":\"2030-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.329818075,\"date\":\"2030-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3314989286,\"date\":\"2030-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3331797822,\"date\":\"2030-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3348606358,\"date\":\"2030-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3365414894,\"date\":\"2030-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3382223429,\"date\":\"2030-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3399031965,\"date\":\"2030-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3415840501,\"date\":\"2030-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3432649037,\"date\":\"2030-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3449457573,\"date\":\"2030-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3466266108,\"date\":\"2030-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3483074644,\"date\":\"2030-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.349988318,\"date\":\"2030-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3516691716,\"date\":\"2030-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3533500252,\"date\":\"2030-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3550308788,\"date\":\"2030-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3567117323,\"date\":\"2030-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3583925859,\"date\":\"2030-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3600734395,\"date\":\"2030-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":4.3617542931,\"date\":\"2030-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"}],\"metadata\":{\"avg_price\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"date\":{\"type\":\"date\",\"semanticType\":\"Date\"},\"fuel\":{\"type\":\"string\",\"semanticType\":\"String\"},\"is_predicted\":{\"type\":\"string\",\"semanticType\":\"String\",\"levels\":[\"original\",\"regression\",\"forecasting\"]}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn.linear_model import LinearRegression\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    historical_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    historical_df = historical_df.rename(columns={'price': 'avg_price'})\\n    historical_df = historical_df.sort_values('date')\\n    \\n    # Convert date to datetime for easier manipulation\\n    historical_df['date'] = pd.to_datetime(historical_df['date'])\\n    \\n    # Prepare the result dataframe\\n    all_data = []\\n    \\n    # Process each fuel type separately\\n    for fuel_type in historical_df['fuel'].unique():\\n        fuel_data = historical_df[historical_df['fuel'] == fuel_type].copy()\\n        \\n        # Create numeric representation of dates for regression (days since first date)\\n        min_date = fuel_data['date'].min()\\n        fuel_data['days_since_start'] = (fuel_data['date'] - min_date).dt.days\\n        \\n        # Prepare training data\\n        X = fuel_data[['days_since_start']].values\\n        y = fuel_data['avg_price'].values\\n        \\n        # Train linear regression model\\n        model = LinearRegression()\\n        model.fit(X, y)\\n        \\n        # Add original data with 'original' label\\n        fuel_data_original = fuel_data[['date', 'avg_price']].copy()\\n        fuel_data_original['fuel'] = fuel_type\\n        fuel_data_original['is_predicted'] = 'original'\\n        all_data.append(fuel_data_original[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate regression values for historical dates\\n        regression_prices = model.predict(X)\\n        fuel_data_regression = fuel_data[['date']].copy()\\n        fuel_data_regression['fuel'] = fuel_type\\n        fuel_data_regression['avg_price'] = regression_prices\\n        fuel_data_regression['is_predicted'] = 'regression'\\n        all_data.append(fuel_data_regression[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate forecast for next 5 years\\n        max_date = fuel_data['date'].max()\\n        future_dates = pd.date_range(start=max_date + pd.Timedelta(days=7), periods=260, freq='W')\\n        future_days = (future_dates - min_date).days.values.reshape(-1, 1)\\n        \\n        future_prices = model.predict(future_days)\\n        \\n        forecast_df = pd.DataFrame({\\n            'date': future_dates,\\n            'fuel': fuel_type,\\n            'avg_price': future_prices,\\n            'is_predicted': 'forecasting'\\n        })\\n        all_data.append(forecast_df)\\n    \\n    # Combine all data\\n    transformed_df = pd.concat(all_data, ignore_index=True)\\n    transformed_df = transformed_df.sort_values(['fuel', 'date'])\\n    \\n    # Convert date back to string format for output\\n    transformed_df['date'] = transformed_df['date'].dt.strftime('%Y-%m-%d')\\n    \\n    return transformed_df\\n\",\"source\":[\"weekly_gas_prices\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (weekly_gas_prices)\\n\\n## fields\\n\\t*date -- type: object, values: 1990-08-20, 1990-08-27, 1990-09-03, ..., 2025-06-02, 2025-06-09, 2025-06-16, 2025-06-23\\n\\t*fuel -- type: object, values: diesel, gasoline\\n\\t*grade -- type: object, values: all, low_sulfur, midgrade, premium, regular, ultra_low_sulfur\\n\\t*formulation -- type: object, values: NA, all, conventional, reformulated\\n\\t*price -- type: float64, values: 0.885, 0.891, 0.899, ..., 5.955, 5.964, 6.033, 6.064\\n\\n## sample\\n         date      fuel    grade   formulation  price\\n0  1990-08-20  gasoline  regular           all  1.191\\n1  1990-08-20  gasoline  regular  conventional  1.191\\n2  1990-08-27  gasoline  regular           all  1.245\\n3  1990-08-27  gasoline  regular  conventional  1.245\\n4  1990-09-03  gasoline  regular           all  1.242\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nWhat are the major **price trends** across all fuel types from 1990 to 2025?\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to visualize the major price trends across all fuel types from 1990 to 2025 to understand how fuel prices have evolved over time.\\\",\\n    \\\"display_instruction\\\": \\\"Show **price** trends over time for different **fuel** types\\\",\\n    \\\"recommendation\\\": \\\"To visualize price trends over time across fuel types, we should aggregate the data by date and fuel type. Since there are multiple grades and formulations for each fuel type, we'll calculate the average price for each fuel type on each date. A line chart with date on the x-axis, average price on the y-axis, and different colored lines for each fuel type will clearly show the trends and allow easy comparison.\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"fuel\\\", \\\"avg_price\\\"],\\n    \\\"chart_type\\\": \\\"line\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"avg_price\\\",\\n        \\\"color\\\": \\\"fuel\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    transformed_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Rename the price column to avg_price for clarity\\n    transformed_df = transformed_df.rename(columns={'price': 'avg_price'})\\n    \\n    # Sort by date for proper line chart rendering\\n    transformed_df = transformed_df.sort_values('date')\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n         date      fuel  avg_price\\n0  1990-08-20  gasoline      1.191\\n1  1990-08-27  gasoline      1.245\\n2  1990-09-03  gasoline      1.242\\n3  1990-09-10  gasoline      1.252\\n4  1990-09-17  gasoline      1.266\\n5  1990-09-24  gasoline      1.272\\n6  1990-10-01  gasoline      1.321\\n7  1990-10-08  gasoline      1.333\\n8  1990-10-15  gasoline      1.339\\n9  1990-10-22  gasoline      1.345\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"forecast the price trend for the next 5 years with some propert model!\\\",\\n    \\\"chart_type\\\": \\\"Line Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"avg_price\\\",\\n        \\\"color\\\": \\\"fuel\\\",\\n        \\\"column\\\": \\\"fuel\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Build upon the previous price trends visualization by adding forecasted prices for the next 5 years (2025-2030) using a time series forecasting model. The output should include both historical actual prices and forecasted prices, with an indicator to distinguish between them.\\\",\\n    \\\"display_instruction\\\": \\\"Forecast **price** trends for the next 5 years for each **fuel** type\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"fuel\\\", \\\"avg_price\\\", \\\"is_predicted\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"avg_price\\\",\\n        \\\"color\\\": \\\"fuel\\\",\\n        \\\"facet\\\": \\\"is_predicted\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to extend the price trend analysis with forecasting for the next 5 years. Following the guidelines for forecasting, the output should include a 'is_predicted' column to distinguish between actual historical data, regression on historical data, and forecasted future values. The chart should be a line chart showing both historical and predicted values for each fuel type.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn.linear_model import LinearRegression\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    historical_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    historical_df = historical_df.rename(columns={'price': 'avg_price'})\\n    historical_df = historical_df.sort_values('date')\\n    \\n    # Convert date to datetime for easier manipulation\\n    historical_df['date'] = pd.to_datetime(historical_df['date'])\\n    \\n    # Prepare the result dataframe\\n    all_data = []\\n    \\n    # Process each fuel type separately\\n    for fuel_type in historical_df['fuel'].unique():\\n        fuel_data = historical_df[historical_df['fuel'] == fuel_type].copy()\\n        \\n        # Create numeric representation of dates for regression (days since first date)\\n        min_date = fuel_data['date'].min()\\n        fuel_data['days_since_start'] = (fuel_data['date'] - min_date).dt.days\\n        \\n        # Prepare training data\\n        X = fuel_data[['days_since_start']].values\\n        y = fuel_data['avg_price'].values\\n        \\n        # Train linear regression model\\n        model = LinearRegression()\\n        model.fit(X, y)\\n        \\n        # Add original data with 'original' label\\n        fuel_data_original = fuel_data[['date', 'avg_price']].copy()\\n        fuel_data_original['fuel'] = fuel_type\\n        fuel_data_original['is_predicted'] = 'original'\\n        all_data.append(fuel_data_original[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate regression values for historical dates\\n        regression_prices = model.predict(X)\\n        fuel_data_regression = fuel_data[['date']].copy()\\n        fuel_data_regression['fuel'] = fuel_type\\n        fuel_data_regression['avg_price'] = regression_prices\\n        fuel_data_regression['is_predicted'] = 'regression'\\n        all_data.append(fuel_data_regression[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate forecast for next 5 years\\n        max_date = fuel_data['date'].max()\\n        future_dates = pd.date_range(start=max_date + pd.Timedelta(days=7), periods=260, freq='W')\\n        future_days = (future_dates - min_date).days.values.reshape(-1, 1)\\n        \\n        future_prices = model.predict(future_days)\\n        \\n        forecast_df = pd.DataFrame({\\n            'date': future_dates,\\n            'fuel': fuel_type,\\n            'avg_price': future_prices,\\n            'is_predicted': 'forecasting'\\n        })\\n        all_data.append(forecast_df)\\n    \\n    # Combine all data\\n    transformed_df = pd.concat(all_data, ignore_index=True)\\n    transformed_df = transformed_df.sort_values(['fuel', 'date'])\\n    \\n    # Convert date back to string format for output\\n    transformed_df['date'] = transformed_df['date'].dt.strftime('%Y-%m-%d')\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"table-904593\",\"sourceTableIds\":[\"weekly_gas_prices\"],\"instruction\":\"forecast the price trend for the next 5 years with some propert model!\",\"displayInstruction\":\"Forecast **price** trends for the next 5 years for each **fuel** type\",\"chart\":{\"id\":\"chart-1760745146503\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--weekly_gas_prices--date\"},\"y\":{\"fieldID\":\"concept-avg_price-1760744859365\"},\"color\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-904593\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-34\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"This code performs **time series analysis and forecasting** on historical gas prices:\\n\\n1. **Aggregate historical prices** by calculating the mean `price` across all `grade` and `formulation` values for each `date` and `fuel` type combination, creating an `avg_price` metric.\\n\\n2. **Prepare temporal features** by converting `date` to datetime format and calculating `days_since_start` (the number of days elapsed since the earliest date) for each `fuel` type separately.\\n\\n3. **Train linear regression models** for each `fuel` type (diesel, gasoline) using `days_since_start` as the predictor variable and `avg_price` as the target variable.\\n\\n4. **Generate three data series** for each fuel type:\\n   - **Original**: Historical `avg_price` values with label `is_predicted = 'original'`\\n   - **Regression**: Fitted values from the linear model for historical dates with label `is_predicted = 'regression'`\\n   - **Forecasting**: Predicted prices for the next **5 years** (260 weekly periods) beyond the latest historical date with label `is_predicted = 'forecasting'`\\n\\n5. **Combine and format** all series into a single dataset sorted by `fuel` and `date`, with dates converted back to string format.\",\"concepts\":[{\"explanation\":\"This analysis uses **linear regression modeling** to capture long-term price trends and forecast future gas prices. The model treats time as a continuous predictor variable (days_since_start) to predict average price. Each fuel type is modeled independently to account for different pricing dynamics. The approach assumes a linear relationship between time and price, which captures overall trend but may not account for cyclical patterns, seasonality, or market shocks. **Alternative modeling approaches** could include: (1) ARIMA/SARIMA models to capture autocorrelation and seasonality, (2) exponential smoothing methods (Holt-Winters) for trend and seasonal components, (3) polynomial regression for non-linear trends, or (4) more advanced machine learning methods like LSTM neural networks for complex temporal patterns.\",\"field\":\"Statistical Analysis\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (weekly_gas_prices)\\n\\n## fields\\n\\t*date -- type: object, values: 1990-08-20, 1990-08-27, 1990-09-03, ..., 2025-06-02, 2025-06-09, 2025-06-16, 2025-06-23\\n\\t*fuel -- type: object, values: diesel, gasoline\\n\\t*grade -- type: object, values: all, low_sulfur, midgrade, premium, regular, ultra_low_sulfur\\n\\t*formulation -- type: object, values: NA, all, conventional, reformulated\\n\\t*price -- type: float64, values: 0.885, 0.891, 0.899, ..., 5.955, 5.964, 6.033, 6.064\\n\\n## sample\\n         date      fuel    grade   formulation  price\\n0  1990-08-20  gasoline  regular           all  1.191\\n1  1990-08-20  gasoline  regular  conventional  1.191\\n2  1990-08-27  gasoline  regular           all  1.245\\n3  1990-08-27  gasoline  regular  conventional  1.245\\n4  1990-09-03  gasoline  regular           all  1.242\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn.linear_model import LinearRegression\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    historical_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    historical_df = historical_df.rename(columns={'price': 'avg_price'})\\n    historical_df = historical_df.sort_values('date')\\n    \\n    # Convert date to datetime for easier manipulation\\n    historical_df['date'] = pd.to_datetime(historical_df['date'])\\n    \\n    # Prepare the result dataframe\\n    all_data = []\\n    \\n    # Process each fuel type separately\\n    for fuel_type in historical_df['fuel'].unique():\\n        fuel_data = historical_df[historical_df['fuel'] == fuel_type].copy()\\n        \\n        # Create numeric representation of dates for regression (days since first date)\\n        min_date = fuel_data['date'].min()\\n        fuel_data['days_since_start'] = (fuel_data['date'] - min_date).dt.days\\n        \\n        # Prepare training data\\n        X = fuel_data[['days_since_start']].values\\n        y = fuel_data['avg_price'].values\\n        \\n        # Train linear regression model\\n        model = LinearRegression()\\n        model.fit(X, y)\\n        \\n        # Add original data with 'original' label\\n        fuel_data_original = fuel_data[['date', 'avg_price']].copy()\\n        fuel_data_original['fuel'] = fuel_type\\n        fuel_data_original['is_predicted'] = 'original'\\n        all_data.append(fuel_data_original[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate regression values for historical dates\\n        regression_prices = model.predict(X)\\n        fuel_data_regression = fuel_data[['date']].copy()\\n        fuel_data_regression['fuel'] = fuel_type\\n        fuel_data_regression['avg_price'] = regression_prices\\n        fuel_data_regression['is_predicted'] = 'regression'\\n        all_data.append(fuel_data_regression[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate forecast for next 5 years\\n        max_date = fuel_data['date'].max()\\n        future_dates = pd.date_range(start=max_date + pd.Timedelta(days=7), periods=260, freq='W')\\n        future_days = (future_dates - min_date).days.values.reshape(-1, 1)\\n        \\n        future_prices = model.predict(future_days)\\n        \\n        forecast_df = pd.DataFrame({\\n            'date': future_dates,\\n            'fuel': fuel_type,\\n            'avg_price': future_prices,\\n            'is_predicted': 'forecasting'\\n        })\\n        all_data.append(forecast_df)\\n    \\n    # Combine all data\\n    transformed_df = pd.concat(all_data, ignore_index=True)\\n    transformed_df = transformed_df.sort_values(['fuel', 'date'])\\n    \\n    # Convert date back to string format for output\\n    transformed_df['date'] = transformed_df['date'].dt.strftime('%Y-%m-%d')\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThis code performs **time series analysis and forecasting** on historical gas prices:\\n\\n1. **Aggregate historical prices** by calculating the mean `price` across all `grade` and `formulation` values for each `date` and `fuel` type combination, creating an `avg_price` metric.\\n\\n2. **Prepare temporal features** by converting `date` to datetime format and calculating `days_since_start` (the number of days elapsed since the earliest date) for each `fuel` type separately.\\n\\n3. **Train linear regression models** for each `fuel` type (diesel, gasoline) using `days_since_start` as the predictor variable and `avg_price` as the target variable.\\n\\n4. **Generate three data series** for each fuel type:\\n   - **Original**: Historical `avg_price` values with label `is_predicted = 'original'`\\n   - **Regression**: Fitted values from the linear model for historical dates with label `is_predicted = 'regression'`\\n   - **Forecasting**: Predicted prices for the next **5 years** (260 weekly periods) beyond the latest historical date with label `is_predicted = 'forecasting'`\\n\\n5. **Combine and format** all series into a single dataset sorted by `fuel` and `date`, with dates converted back to string format.\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"Statistical Analysis\\\",\\n        \\\"explanation\\\": \\\"This analysis uses **linear regression modeling** to capture long-term price trends and forecast future gas prices. The model treats time as a continuous predictor variable (days_since_start) to predict average price. Each fuel type is modeled independently to account for different pricing dynamics. The approach assumes a linear relationship between time and price, which captures overall trend but may not account for cyclical patterns, seasonality, or market shocks. **Alternative modeling approaches** could include: (1) ARIMA/SARIMA models to capture autocorrelation and seasonality, (2) exponential smoothing methods (Holt-Winters) for trend and seasonal components, (3) polynomial regression for non-linear trends, or (4) more advanced machine learning methods like LSTM neural networks for complex temporal patterns.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-22\",\"displayId\":\"fuel-price-forecast1\",\"names\":[\"avg_price\",\"date\",\"fuel\",\"is_predicted\"],\"rows\":[{\"avg_price\":1.106,\"date\":\"1994-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.5951388141,\"date\":\"1994-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.107,\"date\":\"1994-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.5986628745,\"date\":\"1994-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.109,\"date\":\"1994-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6021849755,\"date\":\"1994-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.108,\"date\":\"1994-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6057051172,\"date\":\"1994-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.105,\"date\":\"1994-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6092232996,\"date\":\"1994-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1994-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6127395226,\"date\":\"1994-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.104,\"date\":\"1994-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6162537863,\"date\":\"1994-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.101,\"date\":\"1994-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6197660906,\"date\":\"1994-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1994-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6232764356,\"date\":\"1994-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1994-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6267848212,\"date\":\"1994-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.098,\"date\":\"1994-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6302912475,\"date\":\"1994-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.101,\"date\":\"1994-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6337957144,\"date\":\"1994-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.098,\"date\":\"1994-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.637298222,\"date\":\"1994-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.103,\"date\":\"1994-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6407987703,\"date\":\"1994-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.108,\"date\":\"1994-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6442973591,\"date\":\"1994-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.109,\"date\":\"1994-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6477939887,\"date\":\"1994-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.11,\"date\":\"1994-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6512886589,\"date\":\"1994-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.111,\"date\":\"1994-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6547813697,\"date\":\"1994-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.111,\"date\":\"1994-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6582721212,\"date\":\"1994-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.116,\"date\":\"1994-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6617609134,\"date\":\"1994-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.127,\"date\":\"1994-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6652477462,\"date\":\"1994-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.127,\"date\":\"1994-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6687326197,\"date\":\"1994-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1994-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6722155338,\"date\":\"1994-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.122,\"date\":\"1994-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6756964886,\"date\":\"1994-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1994-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.679175484,\"date\":\"1994-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.128,\"date\":\"1994-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6826525201,\"date\":\"1994-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1994-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6861275968,\"date\":\"1994-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.12,\"date\":\"1994-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6896007142,\"date\":\"1994-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.118,\"date\":\"1994-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6930718722,\"date\":\"1994-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.117,\"date\":\"1994-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.6965410709,\"date\":\"1994-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.119,\"date\":\"1994-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7000083102,\"date\":\"1994-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.122,\"date\":\"1994-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7034735902,\"date\":\"1994-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.133,\"date\":\"1994-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7069369109,\"date\":\"1994-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.133,\"date\":\"1994-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7103982722,\"date\":\"1994-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.135,\"date\":\"1994-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7138576741,\"date\":\"1994-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.13,\"date\":\"1994-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7173151167,\"date\":\"1994-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1994-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7207706,\"date\":\"1994-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.123,\"date\":\"1994-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7242241239,\"date\":\"1994-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.114,\"date\":\"1994-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7276756885,\"date\":\"1994-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.109,\"date\":\"1994-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7311252937,\"date\":\"1994-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1994-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7345729396,\"date\":\"1994-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.104,\"date\":\"1995-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7380186261,\"date\":\"1995-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.102,\"date\":\"1995-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7414623533,\"date\":\"1995-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1,\"date\":\"1995-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7449041211,\"date\":\"1995-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.095,\"date\":\"1995-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7483439296,\"date\":\"1995-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.09,\"date\":\"1995-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7517817787,\"date\":\"1995-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.086,\"date\":\"1995-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7552176685,\"date\":\"1995-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.088,\"date\":\"1995-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.758651599,\"date\":\"1995-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.088,\"date\":\"1995-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7620835701,\"date\":\"1995-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.089,\"date\":\"1995-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7655135818,\"date\":\"1995-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.089,\"date\":\"1995-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7689416342,\"date\":\"1995-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.088,\"date\":\"1995-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7723677273,\"date\":\"1995-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.085,\"date\":\"1995-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.775791861,\"date\":\"1995-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.088,\"date\":\"1995-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7792140353,\"date\":\"1995-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.094,\"date\":\"1995-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7826342504,\"date\":\"1995-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.101,\"date\":\"1995-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.786052506,\"date\":\"1995-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1995-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7894688023,\"date\":\"1995-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.115,\"date\":\"1995-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7928831393,\"date\":\"1995-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.119,\"date\":\"1995-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.796295517,\"date\":\"1995-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1995-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.7997059352,\"date\":\"1995-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1995-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8031143942,\"date\":\"1995-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1995-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8065208938,\"date\":\"1995-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.13,\"date\":\"1995-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.809925434,\"date\":\"1995-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1995-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8133280149,\"date\":\"1995-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.122,\"date\":\"1995-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8167286364,\"date\":\"1995-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.117,\"date\":\"1995-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8201272986,\"date\":\"1995-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.112,\"date\":\"1995-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8235240015,\"date\":\"1995-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1995-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.826918745,\"date\":\"1995-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.103,\"date\":\"1995-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8303115291,\"date\":\"1995-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1995-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.833702354,\"date\":\"1995-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.098,\"date\":\"1995-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8370912194,\"date\":\"1995-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.093,\"date\":\"1995-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8404781255,\"date\":\"1995-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1995-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8438630723,\"date\":\"1995-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1995-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8472460597,\"date\":\"1995-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1995-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8506270878,\"date\":\"1995-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.109,\"date\":\"1995-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8540061565,\"date\":\"1995-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.115,\"date\":\"1995-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8573832659,\"date\":\"1995-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.119,\"date\":\"1995-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.860758416,\"date\":\"1995-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.122,\"date\":\"1995-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8641316066,\"date\":\"1995-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.121,\"date\":\"1995-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.867502838,\"date\":\"1995-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.117,\"date\":\"1995-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.87087211,\"date\":\"1995-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.117,\"date\":\"1995-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8742394226,\"date\":\"1995-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.117,\"date\":\"1995-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8776047759,\"date\":\"1995-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.114,\"date\":\"1995-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8809681699,\"date\":\"1995-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.11,\"date\":\"1995-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8843296045,\"date\":\"1995-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.118,\"date\":\"1995-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8876890797,\"date\":\"1995-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.118,\"date\":\"1995-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8910465957,\"date\":\"1995-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.119,\"date\":\"1995-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8944021522,\"date\":\"1995-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1995-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.8977557494,\"date\":\"1995-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.123,\"date\":\"1995-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9011073873,\"date\":\"1995-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1995-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9044570658,\"date\":\"1995-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.13,\"date\":\"1995-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.907804785,\"date\":\"1995-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.141,\"date\":\"1995-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9111505449,\"date\":\"1995-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.148,\"date\":\"1996-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9144943453,\"date\":\"1996-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.146,\"date\":\"1996-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9178361865,\"date\":\"1996-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.152,\"date\":\"1996-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9211760683,\"date\":\"1996-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.144,\"date\":\"1996-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9245139907,\"date\":\"1996-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.136,\"date\":\"1996-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9278499538,\"date\":\"1996-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.13,\"date\":\"1996-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9311839576,\"date\":\"1996-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.134,\"date\":\"1996-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.934516002,\"date\":\"1996-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.151,\"date\":\"1996-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.937846087,\"date\":\"1996-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.164,\"date\":\"1996-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9411742127,\"date\":\"1996-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.175,\"date\":\"1996-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9445003791,\"date\":\"1996-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.173,\"date\":\"1996-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9478245861,\"date\":\"1996-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.172,\"date\":\"1996-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9511468338,\"date\":\"1996-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.21,\"date\":\"1996-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9544671221,\"date\":\"1996-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.222,\"date\":\"1996-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9577854511,\"date\":\"1996-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.249,\"date\":\"1996-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9611018207,\"date\":\"1996-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.305,\"date\":\"1996-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.964416231,\"date\":\"1996-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.304,\"date\":\"1996-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9677286819,\"date\":\"1996-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.285,\"date\":\"1996-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9710391735,\"date\":\"1996-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.292,\"date\":\"1996-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9743477057,\"date\":\"1996-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.285,\"date\":\"1996-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9776542786,\"date\":\"1996-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.274,\"date\":\"1996-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9809588922,\"date\":\"1996-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.254,\"date\":\"1996-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9842615464,\"date\":\"1996-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.24,\"date\":\"1996-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9875622412,\"date\":\"1996-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.215,\"date\":\"1996-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9908609767,\"date\":\"1996-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.193,\"date\":\"1996-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9941577529,\"date\":\"1996-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.179,\"date\":\"1996-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":0.9974525697,\"date\":\"1996-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.172,\"date\":\"1996-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0007454272,\"date\":\"1996-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.173,\"date\":\"1996-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0040363253,\"date\":\"1996-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.178,\"date\":\"1996-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.007325264,\"date\":\"1996-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.184,\"date\":\"1996-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0106122435,\"date\":\"1996-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.178,\"date\":\"1996-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0138972635,\"date\":\"1996-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.184,\"date\":\"1996-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0171803243,\"date\":\"1996-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.191,\"date\":\"1996-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0204614257,\"date\":\"1996-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.206,\"date\":\"1996-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0237405677,\"date\":\"1996-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.222,\"date\":\"1996-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0270177504,\"date\":\"1996-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.231,\"date\":\"1996-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0302929737,\"date\":\"1996-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.25,\"date\":\"1996-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0335662377,\"date\":\"1996-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.276,\"date\":\"1996-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0368375424,\"date\":\"1996-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.277,\"date\":\"1996-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0401068877,\"date\":\"1996-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.289,\"date\":\"1996-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0433742736,\"date\":\"1996-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.308,\"date\":\"1996-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0466397002,\"date\":\"1996-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.326,\"date\":\"1996-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0499031675,\"date\":\"1996-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.329,\"date\":\"1996-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0531646754,\"date\":\"1996-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.329,\"date\":\"1996-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.056424224,\"date\":\"1996-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.323,\"date\":\"1996-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0596818132,\"date\":\"1996-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.316,\"date\":\"1996-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0629374431,\"date\":\"1996-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.324,\"date\":\"1996-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0661911136,\"date\":\"1996-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.327,\"date\":\"1996-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0694428248,\"date\":\"1996-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.323,\"date\":\"1996-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0726925766,\"date\":\"1996-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.32,\"date\":\"1996-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0759403691,\"date\":\"1996-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.307,\"date\":\"1996-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0791862022,\"date\":\"1996-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3,\"date\":\"1996-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.082430076,\"date\":\"1996-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.295,\"date\":\"1996-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0856719904,\"date\":\"1996-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.291,\"date\":\"1997-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0889119455,\"date\":\"1997-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.296,\"date\":\"1997-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0921499413,\"date\":\"1997-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.293,\"date\":\"1997-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0953859777,\"date\":\"1997-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.283,\"date\":\"1997-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.0986200548,\"date\":\"1997-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.288,\"date\":\"1997-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1018521725,\"date\":\"1997-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.285,\"date\":\"1997-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1050823308,\"date\":\"1997-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.278,\"date\":\"1997-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1083105298,\"date\":\"1997-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.269,\"date\":\"1997-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1115367695,\"date\":\"1997-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.252,\"date\":\"1997-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1147610498,\"date\":\"1997-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.23,\"date\":\"1997-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1179833708,\"date\":\"1997-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.22,\"date\":\"1997-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1212037324,\"date\":\"1997-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.22,\"date\":\"1997-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1244221347,\"date\":\"1997-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.225,\"date\":\"1997-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1276385776,\"date\":\"1997-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.217,\"date\":\"1997-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1308530612,\"date\":\"1997-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.216,\"date\":\"1997-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1340655855,\"date\":\"1997-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.211,\"date\":\"1997-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1372761504,\"date\":\"1997-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.205,\"date\":\"1997-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1404847559,\"date\":\"1997-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.205,\"date\":\"1997-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1436914021,\"date\":\"1997-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.191,\"date\":\"1997-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.146896089,\"date\":\"1997-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.191,\"date\":\"1997-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1500988165,\"date\":\"1997-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.196,\"date\":\"1997-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1532995846,\"date\":\"1997-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.19,\"date\":\"1997-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1564983934,\"date\":\"1997-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.187,\"date\":\"1997-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1596952429,\"date\":\"1997-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.172,\"date\":\"1997-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.162890133,\"date\":\"1997-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.162,\"date\":\"1997-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1660830638,\"date\":\"1997-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.153,\"date\":\"1997-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1692740352,\"date\":\"1997-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.159,\"date\":\"1997-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1724630473,\"date\":\"1997-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.152,\"date\":\"1997-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1756501,\"date\":\"1997-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.147,\"date\":\"1997-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1788351934,\"date\":\"1997-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.145,\"date\":\"1997-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1820183274,\"date\":\"1997-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.155,\"date\":\"1997-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1851995021,\"date\":\"1997-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.168,\"date\":\"1997-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1883787175,\"date\":\"1997-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.167,\"date\":\"1997-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1915559735,\"date\":\"1997-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.169,\"date\":\"1997-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1947312701,\"date\":\"1997-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.165,\"date\":\"1997-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.1979046074,\"date\":\"1997-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.163,\"date\":\"1997-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2010759854,\"date\":\"1997-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.156,\"date\":\"1997-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.204245404,\"date\":\"1997-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.154,\"date\":\"1997-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2074128632,\"date\":\"1997-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.16,\"date\":\"1997-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2105783631,\"date\":\"1997-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.175,\"date\":\"1997-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2137419037,\"date\":\"1997-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.185,\"date\":\"1997-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2169034849,\"date\":\"1997-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.185,\"date\":\"1997-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2200631068,\"date\":\"1997-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.185,\"date\":\"1997-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2232207693,\"date\":\"1997-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.188,\"date\":\"1997-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2263764725,\"date\":\"1997-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.19,\"date\":\"1997-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2295302163,\"date\":\"1997-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.195,\"date\":\"1997-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2326820008,\"date\":\"1997-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.193,\"date\":\"1997-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.235831826,\"date\":\"1997-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.189,\"date\":\"1997-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2389796917,\"date\":\"1997-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.174,\"date\":\"1997-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2421255982,\"date\":\"1997-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.162,\"date\":\"1997-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2452695453,\"date\":\"1997-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.155,\"date\":\"1997-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.248411533,\"date\":\"1997-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.15,\"date\":\"1997-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2515515614,\"date\":\"1997-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.147,\"date\":\"1998-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2546896305,\"date\":\"1998-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1998-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2578257402,\"date\":\"1998-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.109,\"date\":\"1998-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2609598906,\"date\":\"1998-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.096,\"date\":\"1998-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2640920816,\"date\":\"1998-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.091,\"date\":\"1998-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2672223132,\"date\":\"1998-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.085,\"date\":\"1998-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2703505856,\"date\":\"1998-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.082,\"date\":\"1998-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2734768985,\"date\":\"1998-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.079,\"date\":\"1998-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2766012522,\"date\":\"1998-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.074,\"date\":\"1998-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2797236464,\"date\":\"1998-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.066,\"date\":\"1998-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2828440814,\"date\":\"1998-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.057,\"date\":\"1998-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.285962557,\"date\":\"1998-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.049,\"date\":\"1998-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2890790732,\"date\":\"1998-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.068,\"date\":\"1998-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2921936301,\"date\":\"1998-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.067,\"date\":\"1998-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2953062276,\"date\":\"1998-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.065,\"date\":\"1998-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.2984168658,\"date\":\"1998-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.065,\"date\":\"1998-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3015255447,\"date\":\"1998-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.07,\"date\":\"1998-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3046322642,\"date\":\"1998-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.072,\"date\":\"1998-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3077370244,\"date\":\"1998-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.075,\"date\":\"1998-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3108398252,\"date\":\"1998-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.069,\"date\":\"1998-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3139406666,\"date\":\"1998-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.06,\"date\":\"1998-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3170395488,\"date\":\"1998-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.053,\"date\":\"1998-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3201364715,\"date\":\"1998-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.045,\"date\":\"1998-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3232314349,\"date\":\"1998-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.04,\"date\":\"1998-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.326324439,\"date\":\"1998-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.033,\"date\":\"1998-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3294154838,\"date\":\"1998-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.034,\"date\":\"1998-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3325045691,\"date\":\"1998-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.036,\"date\":\"1998-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3355916952,\"date\":\"1998-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.031,\"date\":\"1998-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3386768619,\"date\":\"1998-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.027,\"date\":\"1998-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3417600692,\"date\":\"1998-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.02,\"date\":\"1998-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3448413172,\"date\":\"1998-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.016,\"date\":\"1998-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3479206058,\"date\":\"1998-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.01,\"date\":\"1998-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3509979351,\"date\":\"1998-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.007,\"date\":\"1998-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3540733051,\"date\":\"1998-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.004,\"date\":\"1998-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3571467157,\"date\":\"1998-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1,\"date\":\"1998-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.360218167,\"date\":\"1998-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.009,\"date\":\"1998-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3632876589,\"date\":\"1998-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.019,\"date\":\"1998-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3663551914,\"date\":\"1998-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.03,\"date\":\"1998-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3694207647,\"date\":\"1998-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.039,\"date\":\"1998-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3724843785,\"date\":\"1998-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.041,\"date\":\"1998-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3755460331,\"date\":\"1998-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.041,\"date\":\"1998-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3786057282,\"date\":\"1998-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.036,\"date\":\"1998-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3816634641,\"date\":\"1998-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.036,\"date\":\"1998-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3847192406,\"date\":\"1998-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.035,\"date\":\"1998-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3877730577,\"date\":\"1998-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.034,\"date\":\"1998-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3908249155,\"date\":\"1998-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.026,\"date\":\"1998-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3938748139,\"date\":\"1998-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.012,\"date\":\"1998-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.396922753,\"date\":\"1998-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.004,\"date\":\"1998-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.3999687328,\"date\":\"1998-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.986,\"date\":\"1998-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4030127532,\"date\":\"1998-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.972,\"date\":\"1998-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4060548142,\"date\":\"1998-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.968,\"date\":\"1998-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4090949159,\"date\":\"1998-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.966,\"date\":\"1998-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4121330583,\"date\":\"1998-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.965,\"date\":\"1999-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4151692413,\"date\":\"1999-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.967,\"date\":\"1999-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.418203465,\"date\":\"1999-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.97,\"date\":\"1999-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4212357293,\"date\":\"1999-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.964,\"date\":\"1999-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4242660343,\"date\":\"1999-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.962,\"date\":\"1999-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4272943799,\"date\":\"1999-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.962,\"date\":\"1999-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4303207662,\"date\":\"1999-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.959,\"date\":\"1999-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4333451931,\"date\":\"1999-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.953,\"date\":\"1999-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4363676607,\"date\":\"1999-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.956,\"date\":\"1999-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4393881689,\"date\":\"1999-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":0.964,\"date\":\"1999-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4424067178,\"date\":\"1999-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1,\"date\":\"1999-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4454233074,\"date\":\"1999-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.018,\"date\":\"1999-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4484379376,\"date\":\"1999-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.046,\"date\":\"1999-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4514506084,\"date\":\"1999-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.075,\"date\":\"1999-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4544613199,\"date\":\"1999-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.084,\"date\":\"1999-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4574700721,\"date\":\"1999-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.08,\"date\":\"1999-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4604768649,\"date\":\"1999-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.078,\"date\":\"1999-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4634816984,\"date\":\"1999-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.078,\"date\":\"1999-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4664845725,\"date\":\"1999-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.083,\"date\":\"1999-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4694854873,\"date\":\"1999-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.075,\"date\":\"1999-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4724844427,\"date\":\"1999-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.066,\"date\":\"1999-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4754814388,\"date\":\"1999-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.065,\"date\":\"1999-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4784764755,\"date\":\"1999-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.059,\"date\":\"1999-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4814695529,\"date\":\"1999-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.068,\"date\":\"1999-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4844606709,\"date\":\"1999-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.082,\"date\":\"1999-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4874498296,\"date\":\"1999-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.087,\"date\":\"1999-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4904370289,\"date\":\"1999-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.102,\"date\":\"1999-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4934222689,\"date\":\"1999-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.114,\"date\":\"1999-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4964055496,\"date\":\"1999-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.133,\"date\":\"1999-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.4993868709,\"date\":\"1999-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.137,\"date\":\"1999-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5023662328,\"date\":\"1999-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.146,\"date\":\"1999-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5053436354,\"date\":\"1999-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.156,\"date\":\"1999-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5083190787,\"date\":\"1999-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.178,\"date\":\"1999-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5112925626,\"date\":\"1999-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.186,\"date\":\"1999-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5142640872,\"date\":\"1999-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.194,\"date\":\"1999-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5172336524,\"date\":\"1999-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.198,\"date\":\"1999-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5202012583,\"date\":\"1999-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.209,\"date\":\"1999-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5231669048,\"date\":\"1999-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.226,\"date\":\"1999-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.526130592,\"date\":\"1999-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.226,\"date\":\"1999-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5290923198,\"date\":\"1999-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.234,\"date\":\"1999-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5320520883,\"date\":\"1999-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.228,\"date\":\"1999-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5350098974,\"date\":\"1999-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.224,\"date\":\"1999-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5379657472,\"date\":\"1999-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.226,\"date\":\"1999-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5409196377,\"date\":\"1999-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.229,\"date\":\"1999-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5438715688,\"date\":\"1999-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.234,\"date\":\"1999-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5468215405,\"date\":\"1999-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.261,\"date\":\"1999-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5497695529,\"date\":\"1999-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.289,\"date\":\"1999-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.552715606,\"date\":\"1999-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.304,\"date\":\"1999-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5556596997,\"date\":\"1999-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.294,\"date\":\"1999-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.558601834,\"date\":\"1999-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.288,\"date\":\"1999-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5615420091,\"date\":\"1999-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.287,\"date\":\"1999-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5644802247,\"date\":\"1999-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.298,\"date\":\"1999-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.567416481,\"date\":\"1999-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.309,\"date\":\"2000-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.570350778,\"date\":\"2000-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.307,\"date\":\"2000-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5732831156,\"date\":\"2000-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.307,\"date\":\"2000-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5762134939,\"date\":\"2000-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.418,\"date\":\"2000-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5791419129,\"date\":\"2000-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.439,\"date\":\"2000-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5820683724,\"date\":\"2000-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.47,\"date\":\"2000-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5849928727,\"date\":\"2000-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.456,\"date\":\"2000-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5879154136,\"date\":\"2000-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.456,\"date\":\"2000-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5908359951,\"date\":\"2000-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.461,\"date\":\"2000-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5937546173,\"date\":\"2000-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.49,\"date\":\"2000-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5966712802,\"date\":\"2000-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.496,\"date\":\"2000-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.5995859837,\"date\":\"2000-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.479,\"date\":\"2000-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6024987278,\"date\":\"2000-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.451,\"date\":\"2000-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6054095126,\"date\":\"2000-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.442,\"date\":\"2000-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6083183381,\"date\":\"2000-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.419,\"date\":\"2000-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6112252042,\"date\":\"2000-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.398,\"date\":\"2000-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.614130111,\"date\":\"2000-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.428,\"date\":\"2000-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6170330584,\"date\":\"2000-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.418,\"date\":\"2000-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6199340465,\"date\":\"2000-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.402,\"date\":\"2000-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6228330752,\"date\":\"2000-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.415,\"date\":\"2000-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6257301446,\"date\":\"2000-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.432,\"date\":\"2000-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6286252546,\"date\":\"2000-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.431,\"date\":\"2000-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6315184053,\"date\":\"2000-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.419,\"date\":\"2000-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6344095967,\"date\":\"2000-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.411,\"date\":\"2000-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6372988287,\"date\":\"2000-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.423,\"date\":\"2000-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6401861013,\"date\":\"2000-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.432,\"date\":\"2000-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6430714146,\"date\":\"2000-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.453,\"date\":\"2000-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6459547686,\"date\":\"2000-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.449,\"date\":\"2000-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6488361632,\"date\":\"2000-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.435,\"date\":\"2000-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6517155984,\"date\":\"2000-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.424,\"date\":\"2000-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6545930744,\"date\":\"2000-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.408,\"date\":\"2000-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6574685909,\"date\":\"2000-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.41,\"date\":\"2000-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6603421481,\"date\":\"2000-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.447,\"date\":\"2000-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.663213746,\"date\":\"2000-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.471,\"date\":\"2000-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6660833845,\"date\":\"2000-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.536,\"date\":\"2000-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6689510637,\"date\":\"2000-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.609,\"date\":\"2000-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6718167835,\"date\":\"2000-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.629,\"date\":\"2000-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.674680544,\"date\":\"2000-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.653,\"date\":\"2000-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6775423452,\"date\":\"2000-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.657,\"date\":\"2000-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.680402187,\"date\":\"2000-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.625,\"date\":\"2000-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6832600694,\"date\":\"2000-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.614,\"date\":\"2000-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6861159925,\"date\":\"2000-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.67,\"date\":\"2000-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6889699563,\"date\":\"2000-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.648,\"date\":\"2000-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6918219607,\"date\":\"2000-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.629,\"date\":\"2000-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6946720057,\"date\":\"2000-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.61,\"date\":\"2000-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.6975200914,\"date\":\"2000-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.603,\"date\":\"2000-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7003662178,\"date\":\"2000-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.627,\"date\":\"2000-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7032103848,\"date\":\"2000-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.645,\"date\":\"2000-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7060525925,\"date\":\"2000-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.622,\"date\":\"2000-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7088928408,\"date\":\"2000-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.577,\"date\":\"2000-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7117311298,\"date\":\"2000-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.545,\"date\":\"2000-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7145674594,\"date\":\"2000-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.515,\"date\":\"2000-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7174018297,\"date\":\"2000-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.522,\"date\":\"2001-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7202342406,\"date\":\"2001-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.52,\"date\":\"2001-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7230646922,\"date\":\"2001-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.509,\"date\":\"2001-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7258931844,\"date\":\"2001-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.528,\"date\":\"2001-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7287197173,\"date\":\"2001-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.539,\"date\":\"2001-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7315442909,\"date\":\"2001-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.52,\"date\":\"2001-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7343669051,\"date\":\"2001-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.518,\"date\":\"2001-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7371875599,\"date\":\"2001-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.48,\"date\":\"2001-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7400062554,\"date\":\"2001-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.451,\"date\":\"2001-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7428229916,\"date\":\"2001-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.42,\"date\":\"2001-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7456377684,\"date\":\"2001-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.406,\"date\":\"2001-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7484505859,\"date\":\"2001-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.392,\"date\":\"2001-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.751261444,\"date\":\"2001-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.379,\"date\":\"2001-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7540703427,\"date\":\"2001-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.391,\"date\":\"2001-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7568772822,\"date\":\"2001-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.397,\"date\":\"2001-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7596822622,\"date\":\"2001-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.437,\"date\":\"2001-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.762485283,\"date\":\"2001-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.443,\"date\":\"2001-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7652863444,\"date\":\"2001-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.442,\"date\":\"2001-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7680854464,\"date\":\"2001-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.47,\"date\":\"2001-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7708825891,\"date\":\"2001-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.491,\"date\":\"2001-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7736777724,\"date\":\"2001-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.494,\"date\":\"2001-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7764709964,\"date\":\"2001-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.529,\"date\":\"2001-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7792622611,\"date\":\"2001-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.514,\"date\":\"2001-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7820515664,\"date\":\"2001-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.486,\"date\":\"2001-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7848389123,\"date\":\"2001-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.48,\"date\":\"2001-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7876242989,\"date\":\"2001-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.447,\"date\":\"2001-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7904077262,\"date\":\"2001-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.407,\"date\":\"2001-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7931891941,\"date\":\"2001-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.392,\"date\":\"2001-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7959687027,\"date\":\"2001-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.38,\"date\":\"2001-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.7987462519,\"date\":\"2001-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.348,\"date\":\"2001-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8015218418,\"date\":\"2001-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.347,\"date\":\"2001-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8042954723,\"date\":\"2001-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.345,\"date\":\"2001-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8070671435,\"date\":\"2001-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.367,\"date\":\"2001-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8098368553,\"date\":\"2001-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.394,\"date\":\"2001-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8126046078,\"date\":\"2001-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.452,\"date\":\"2001-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8153704009,\"date\":\"2001-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.488,\"date\":\"2001-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8181342347,\"date\":\"2001-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.492,\"date\":\"2001-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8208961091,\"date\":\"2001-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.527,\"date\":\"2001-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8236560242,\"date\":\"2001-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.473,\"date\":\"2001-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.82641398,\"date\":\"2001-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.39,\"date\":\"2001-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8291699764,\"date\":\"2001-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.371,\"date\":\"2001-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8319240134,\"date\":\"2001-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.353,\"date\":\"2001-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8346760912,\"date\":\"2001-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.318,\"date\":\"2001-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8374262095,\"date\":\"2001-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.31,\"date\":\"2001-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8401743685,\"date\":\"2001-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.291,\"date\":\"2001-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8429205682,\"date\":\"2001-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.269,\"date\":\"2001-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8456648085,\"date\":\"2001-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.252,\"date\":\"2001-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8484070895,\"date\":\"2001-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.223,\"date\":\"2001-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8511474111,\"date\":\"2001-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.194,\"date\":\"2001-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8538857734,\"date\":\"2001-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.173,\"date\":\"2001-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8566221763,\"date\":\"2001-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.143,\"date\":\"2001-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8593566199,\"date\":\"2001-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.154,\"date\":\"2001-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8620891042,\"date\":\"2001-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.169,\"date\":\"2001-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8648196291,\"date\":\"2001-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.168,\"date\":\"2002-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8675481946,\"date\":\"2002-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.159,\"date\":\"2002-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8702748008,\"date\":\"2002-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.14,\"date\":\"2002-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8729994477,\"date\":\"2002-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.144,\"date\":\"2002-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8757221352,\"date\":\"2002-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.144,\"date\":\"2002-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8784428633,\"date\":\"2002-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.153,\"date\":\"2002-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8811616321,\"date\":\"2002-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.156,\"date\":\"2002-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8838784416,\"date\":\"2002-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.154,\"date\":\"2002-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8865932917,\"date\":\"2002-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.173,\"date\":\"2002-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8893061825,\"date\":\"2002-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.216,\"date\":\"2002-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8920171139,\"date\":\"2002-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.251,\"date\":\"2002-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.894726086,\"date\":\"2002-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.281,\"date\":\"2002-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.8974330987,\"date\":\"2002-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.295,\"date\":\"2002-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9001381521,\"date\":\"2002-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.323,\"date\":\"2002-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9028412461,\"date\":\"2002-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.32,\"date\":\"2002-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9055423808,\"date\":\"2002-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.304,\"date\":\"2002-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9082415562,\"date\":\"2002-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.302,\"date\":\"2002-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9109387722,\"date\":\"2002-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.305,\"date\":\"2002-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9136340288,\"date\":\"2002-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.299,\"date\":\"2002-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9163273261,\"date\":\"2002-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.309,\"date\":\"2002-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9190186641,\"date\":\"2002-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.308,\"date\":\"2002-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9217080427,\"date\":\"2002-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3,\"date\":\"2002-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9243954619,\"date\":\"2002-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.286,\"date\":\"2002-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9270809218,\"date\":\"2002-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.275,\"date\":\"2002-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9297644224,\"date\":\"2002-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.281,\"date\":\"2002-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9324459636,\"date\":\"2002-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.289,\"date\":\"2002-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9351255455,\"date\":\"2002-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.294,\"date\":\"2002-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.937803168,\"date\":\"2002-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3,\"date\":\"2002-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9404788312,\"date\":\"2002-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.311,\"date\":\"2002-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.943152535,\"date\":\"2002-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.303,\"date\":\"2002-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9458242795,\"date\":\"2002-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.304,\"date\":\"2002-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9484940647,\"date\":\"2002-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.303,\"date\":\"2002-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9511618904,\"date\":\"2002-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.333,\"date\":\"2002-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9538277569,\"date\":\"2002-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.37,\"date\":\"2002-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.956491664,\"date\":\"2002-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.388,\"date\":\"2002-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9591536117,\"date\":\"2002-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.396,\"date\":\"2002-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9618136001,\"date\":\"2002-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.414,\"date\":\"2002-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9644716292,\"date\":\"2002-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.417,\"date\":\"2002-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9671276989,\"date\":\"2002-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.438,\"date\":\"2002-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9697818093,\"date\":\"2002-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.46,\"date\":\"2002-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9724339603,\"date\":\"2002-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.461,\"date\":\"2002-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9750841519,\"date\":\"2002-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.469,\"date\":\"2002-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9777323843,\"date\":\"2002-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.456,\"date\":\"2002-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9803786572,\"date\":\"2002-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.442,\"date\":\"2002-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9830229709,\"date\":\"2002-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.427,\"date\":\"2002-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9856653251,\"date\":\"2002-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.405,\"date\":\"2002-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9883057201,\"date\":\"2002-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.405,\"date\":\"2002-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9909441557,\"date\":\"2002-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.407,\"date\":\"2002-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9935806319,\"date\":\"2002-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.405,\"date\":\"2002-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9962151488,\"date\":\"2002-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.401,\"date\":\"2002-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":1.9988477063,\"date\":\"2002-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.44,\"date\":\"2002-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0014783045,\"date\":\"2002-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.491,\"date\":\"2002-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0041069434,\"date\":\"2002-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.501,\"date\":\"2003-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0067336229,\"date\":\"2003-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.478,\"date\":\"2003-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0093583431,\"date\":\"2003-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.48,\"date\":\"2003-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0119811039,\"date\":\"2003-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.492,\"date\":\"2003-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0146019053,\"date\":\"2003-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.542,\"date\":\"2003-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0172207475,\"date\":\"2003-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.662,\"date\":\"2003-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0198376302,\"date\":\"2003-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.704,\"date\":\"2003-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0224525536,\"date\":\"2003-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.709,\"date\":\"2003-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0250655177,\"date\":\"2003-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.753,\"date\":\"2003-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0276765225,\"date\":\"2003-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.771,\"date\":\"2003-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0302855678,\"date\":\"2003-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.752,\"date\":\"2003-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0328926539,\"date\":\"2003-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.662,\"date\":\"2003-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0354977806,\"date\":\"2003-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.602,\"date\":\"2003-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0381009479,\"date\":\"2003-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.554,\"date\":\"2003-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0407021559,\"date\":\"2003-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.539,\"date\":\"2003-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0433014045,\"date\":\"2003-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.529,\"date\":\"2003-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0458986938,\"date\":\"2003-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.508,\"date\":\"2003-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0484940238,\"date\":\"2003-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.484,\"date\":\"2003-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0510873944,\"date\":\"2003-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.444,\"date\":\"2003-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0536788057,\"date\":\"2003-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.443,\"date\":\"2003-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0562682576,\"date\":\"2003-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.434,\"date\":\"2003-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0588557501,\"date\":\"2003-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.423,\"date\":\"2003-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0614412834,\"date\":\"2003-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.422,\"date\":\"2003-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0640248572,\"date\":\"2003-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.432,\"date\":\"2003-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0666064718,\"date\":\"2003-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.423,\"date\":\"2003-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0691861269,\"date\":\"2003-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.42,\"date\":\"2003-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0717638228,\"date\":\"2003-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.428,\"date\":\"2003-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0743395593,\"date\":\"2003-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.435,\"date\":\"2003-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0769133364,\"date\":\"2003-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.439,\"date\":\"2003-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0794851542,\"date\":\"2003-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.438,\"date\":\"2003-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0820550126,\"date\":\"2003-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.453,\"date\":\"2003-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0846229117,\"date\":\"2003-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.492,\"date\":\"2003-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0871888515,\"date\":\"2003-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.498,\"date\":\"2003-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0897528319,\"date\":\"2003-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.503,\"date\":\"2003-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0923148529,\"date\":\"2003-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.501,\"date\":\"2003-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.0948749146,\"date\":\"2003-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.488,\"date\":\"2003-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.097433017,\"date\":\"2003-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.471,\"date\":\"2003-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.09998916,\"date\":\"2003-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.444,\"date\":\"2003-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1025433437,\"date\":\"2003-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.429,\"date\":\"2003-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.105095568,\"date\":\"2003-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.445,\"date\":\"2003-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.107645833,\"date\":\"2003-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.483,\"date\":\"2003-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1101941386,\"date\":\"2003-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.502,\"date\":\"2003-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1127404849,\"date\":\"2003-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.495,\"date\":\"2003-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1152848718,\"date\":\"2003-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.481,\"date\":\"2003-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1178272994,\"date\":\"2003-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.476,\"date\":\"2003-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1203677676,\"date\":\"2003-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.481,\"date\":\"2003-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1229062765,\"date\":\"2003-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.491,\"date\":\"2003-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1254428261,\"date\":\"2003-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.476,\"date\":\"2003-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1279774163,\"date\":\"2003-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.481,\"date\":\"2003-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1305100471,\"date\":\"2003-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.486,\"date\":\"2003-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1330407186,\"date\":\"2003-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.504,\"date\":\"2003-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1355694308,\"date\":\"2003-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.502,\"date\":\"2003-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1380961836,\"date\":\"2003-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.503,\"date\":\"2004-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1406209771,\"date\":\"2004-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.551,\"date\":\"2004-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1431438112,\"date\":\"2004-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.559,\"date\":\"2004-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.145664686,\"date\":\"2004-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.591,\"date\":\"2004-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1481836014,\"date\":\"2004-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.581,\"date\":\"2004-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1507005575,\"date\":\"2004-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.568,\"date\":\"2004-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1532155542,\"date\":\"2004-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.584,\"date\":\"2004-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1557285916,\"date\":\"2004-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.595,\"date\":\"2004-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1582396696,\"date\":\"2004-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.619,\"date\":\"2004-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1607487883,\"date\":\"2004-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.628,\"date\":\"2004-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1632559476,\"date\":\"2004-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.617,\"date\":\"2004-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1657611476,\"date\":\"2004-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.641,\"date\":\"2004-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1682643883,\"date\":\"2004-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.642,\"date\":\"2004-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1707656696,\"date\":\"2004-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.648,\"date\":\"2004-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1732649915,\"date\":\"2004-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.679,\"date\":\"2004-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1757623541,\"date\":\"2004-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.724,\"date\":\"2004-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1782577574,\"date\":\"2004-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.718,\"date\":\"2004-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1807512013,\"date\":\"2004-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.717,\"date\":\"2004-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1832426859,\"date\":\"2004-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.745,\"date\":\"2004-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1857322111,\"date\":\"2004-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.763,\"date\":\"2004-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.188219777,\"date\":\"2004-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.761,\"date\":\"2004-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1907053835,\"date\":\"2004-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.746,\"date\":\"2004-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1931890307,\"date\":\"2004-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.734,\"date\":\"2004-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.1956707185,\"date\":\"2004-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.711,\"date\":\"2004-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.198150447,\"date\":\"2004-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7,\"date\":\"2004-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2006282161,\"date\":\"2004-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7,\"date\":\"2004-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2031040259,\"date\":\"2004-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.716,\"date\":\"2004-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2055778764,\"date\":\"2004-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.74,\"date\":\"2004-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2080497675,\"date\":\"2004-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.744,\"date\":\"2004-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2105196992,\"date\":\"2004-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.754,\"date\":\"2004-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2129876716,\"date\":\"2004-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.78,\"date\":\"2004-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2154536847,\"date\":\"2004-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.814,\"date\":\"2004-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2179177384,\"date\":\"2004-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.825,\"date\":\"2004-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2203798327,\"date\":\"2004-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.874,\"date\":\"2004-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2228399678,\"date\":\"2004-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.871,\"date\":\"2004-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2252981434,\"date\":\"2004-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.869,\"date\":\"2004-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2277543597,\"date\":\"2004-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.874,\"date\":\"2004-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2302086167,\"date\":\"2004-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.912,\"date\":\"2004-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2326609143,\"date\":\"2004-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.012,\"date\":\"2004-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2351112526,\"date\":\"2004-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.053,\"date\":\"2004-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2375596316,\"date\":\"2004-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.092,\"date\":\"2004-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2400060512,\"date\":\"2004-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.18,\"date\":\"2004-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2424505114,\"date\":\"2004-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.212,\"date\":\"2004-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2448930123,\"date\":\"2004-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.206,\"date\":\"2004-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2473335538,\"date\":\"2004-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.163,\"date\":\"2004-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.249772136,\"date\":\"2004-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.132,\"date\":\"2004-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2522087589,\"date\":\"2004-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.116,\"date\":\"2004-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2546434224,\"date\":\"2004-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.116,\"date\":\"2004-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2570761265,\"date\":\"2004-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.069,\"date\":\"2004-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2595068714,\"date\":\"2004-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.997,\"date\":\"2004-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2619356568,\"date\":\"2004-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.984,\"date\":\"2004-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2643624829,\"date\":\"2004-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.987,\"date\":\"2004-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2667873497,\"date\":\"2004-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.957,\"date\":\"2005-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2692102571,\"date\":\"2005-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.934,\"date\":\"2005-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2716312052,\"date\":\"2005-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.952,\"date\":\"2005-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2740501939,\"date\":\"2005-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.959,\"date\":\"2005-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2764672233,\"date\":\"2005-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.992,\"date\":\"2005-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2788822934,\"date\":\"2005-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.983,\"date\":\"2005-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.281295404,\"date\":\"2005-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.986,\"date\":\"2005-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2837065554,\"date\":\"2005-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.02,\"date\":\"2005-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2861157474,\"date\":\"2005-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.118,\"date\":\"2005-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.28852298,\"date\":\"2005-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.168,\"date\":\"2005-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2909282533,\"date\":\"2005-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.194,\"date\":\"2005-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2933315673,\"date\":\"2005-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.244,\"date\":\"2005-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2957329219,\"date\":\"2005-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.249,\"date\":\"2005-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.2981323171,\"date\":\"2005-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.303,\"date\":\"2005-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3005297531,\"date\":\"2005-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.316,\"date\":\"2005-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3029252296,\"date\":\"2005-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.259,\"date\":\"2005-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3053187468,\"date\":\"2005-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.289,\"date\":\"2005-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3077103047,\"date\":\"2005-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.262,\"date\":\"2005-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3100999032,\"date\":\"2005-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.227,\"date\":\"2005-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3124875424,\"date\":\"2005-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.189,\"date\":\"2005-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3148732223,\"date\":\"2005-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.156,\"date\":\"2005-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3172569427,\"date\":\"2005-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.16,\"date\":\"2005-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3196387039,\"date\":\"2005-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.234,\"date\":\"2005-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3220185057,\"date\":\"2005-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.276,\"date\":\"2005-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3243963481,\"date\":\"2005-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.313,\"date\":\"2005-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3267722312,\"date\":\"2005-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.336,\"date\":\"2005-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.329146155,\"date\":\"2005-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.348,\"date\":\"2005-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3315181194,\"date\":\"2005-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.408,\"date\":\"2005-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3338881244,\"date\":\"2005-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.392,\"date\":\"2005-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3362561701,\"date\":\"2005-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.342,\"date\":\"2005-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3386222565,\"date\":\"2005-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.348,\"date\":\"2005-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3409863835,\"date\":\"2005-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.407,\"date\":\"2005-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3433485512,\"date\":\"2005-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.567,\"date\":\"2005-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3457087595,\"date\":\"2005-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.588,\"date\":\"2005-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3480670085,\"date\":\"2005-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.59,\"date\":\"2005-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3504232981,\"date\":\"2005-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.898,\"date\":\"2005-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3527776284,\"date\":\"2005-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.847,\"date\":\"2005-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3551299993,\"date\":\"2005-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.732,\"date\":\"2005-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3574804109,\"date\":\"2005-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.798,\"date\":\"2005-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3598288631,\"date\":\"2005-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.144,\"date\":\"2005-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.362175356,\"date\":\"2005-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.15,\"date\":\"2005-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3645198896,\"date\":\"2005-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.148,\"date\":\"2005-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3668624638,\"date\":\"2005-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.157,\"date\":\"2005-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3692030786,\"date\":\"2005-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.876,\"date\":\"2005-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3715417341,\"date\":\"2005-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.698,\"date\":\"2005-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3738784303,\"date\":\"2005-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.602,\"date\":\"2005-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3762131671,\"date\":\"2005-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.513,\"date\":\"2005-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3785459446,\"date\":\"2005-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.479,\"date\":\"2005-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3808767627,\"date\":\"2005-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.425,\"date\":\"2005-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3832056214,\"date\":\"2005-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.436,\"date\":\"2005-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3855325209,\"date\":\"2005-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.462,\"date\":\"2005-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3878574609,\"date\":\"2005-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.448,\"date\":\"2005-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3901804417,\"date\":\"2005-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.442,\"date\":\"2006-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3925014631,\"date\":\"2006-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.485,\"date\":\"2006-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3948205251,\"date\":\"2006-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.449,\"date\":\"2006-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3971376278,\"date\":\"2006-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.472,\"date\":\"2006-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.3994527711,\"date\":\"2006-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.489,\"date\":\"2006-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4017659551,\"date\":\"2006-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.499,\"date\":\"2006-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4040771798,\"date\":\"2006-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.476,\"date\":\"2006-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4063864451,\"date\":\"2006-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.455,\"date\":\"2006-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.408693751,\"date\":\"2006-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.471,\"date\":\"2006-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4109990976,\"date\":\"2006-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.545,\"date\":\"2006-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4133024849,\"date\":\"2006-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.543,\"date\":\"2006-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4156039128,\"date\":\"2006-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.581,\"date\":\"2006-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4179033814,\"date\":\"2006-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.565,\"date\":\"2006-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4202008906,\"date\":\"2006-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.617,\"date\":\"2006-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4224964405,\"date\":\"2006-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.654,\"date\":\"2006-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.424790031,\"date\":\"2006-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.765,\"date\":\"2006-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4270816622,\"date\":\"2006-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.876,\"date\":\"2006-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.429371334,\"date\":\"2006-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.896,\"date\":\"2006-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4316590465,\"date\":\"2006-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.897,\"date\":\"2006-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4339447996,\"date\":\"2006-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.92,\"date\":\"2006-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4362285934,\"date\":\"2006-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.888,\"date\":\"2006-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4385104279,\"date\":\"2006-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.882,\"date\":\"2006-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4407903029,\"date\":\"2006-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.89,\"date\":\"2006-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4430682187,\"date\":\"2006-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.918,\"date\":\"2006-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4453441751,\"date\":\"2006-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.915,\"date\":\"2006-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4476181722,\"date\":\"2006-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.867,\"date\":\"2006-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4498902099,\"date\":\"2006-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.898,\"date\":\"2006-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4521602882,\"date\":\"2006-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.918,\"date\":\"2006-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4544284072,\"date\":\"2006-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.926,\"date\":\"2006-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4566945669,\"date\":\"2006-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.946,\"date\":\"2006-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4589587672,\"date\":\"2006-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.98,\"date\":\"2006-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4612210082,\"date\":\"2006-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.055,\"date\":\"2006-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4634812898,\"date\":\"2006-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.065,\"date\":\"2006-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4657396121,\"date\":\"2006-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.033,\"date\":\"2006-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.467995975,\"date\":\"2006-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.027,\"date\":\"2006-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4702503786,\"date\":\"2006-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.967,\"date\":\"2006-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4725028229,\"date\":\"2006-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.857,\"date\":\"2006-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4747533078,\"date\":\"2006-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.713,\"date\":\"2006-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4770018333,\"date\":\"2006-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.595,\"date\":\"2006-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4792483995,\"date\":\"2006-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.546,\"date\":\"2006-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4814930064,\"date\":\"2006-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.506,\"date\":\"2006-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4837356539,\"date\":\"2006-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.503,\"date\":\"2006-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.485976342,\"date\":\"2006-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.524,\"date\":\"2006-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4882150708,\"date\":\"2006-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.517,\"date\":\"2006-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4904518403,\"date\":\"2006-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.506,\"date\":\"2006-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4926866504,\"date\":\"2006-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.552,\"date\":\"2006-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4949195012,\"date\":\"2006-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.553,\"date\":\"2006-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4971503926,\"date\":\"2006-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.567,\"date\":\"2006-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.4993793247,\"date\":\"2006-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.618,\"date\":\"2006-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5016062974,\"date\":\"2006-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.621,\"date\":\"2006-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5038313108,\"date\":\"2006-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.606,\"date\":\"2006-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5060543648,\"date\":\"2006-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.596,\"date\":\"2006-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5082754595,\"date\":\"2006-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.58,\"date\":\"2007-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5104945949,\"date\":\"2007-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.537,\"date\":\"2007-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5127117709,\"date\":\"2007-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.463,\"date\":\"2007-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5149269875,\"date\":\"2007-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.43,\"date\":\"2007-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5171402448,\"date\":\"2007-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.413,\"date\":\"2007-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5193515428,\"date\":\"2007-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4256666667,\"date\":\"2007-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5215608814,\"date\":\"2007-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.466,\"date\":\"2007-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5237682606,\"date\":\"2007-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.481,\"date\":\"2007-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5259736805,\"date\":\"2007-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5423333333,\"date\":\"2007-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5281771411,\"date\":\"2007-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6166666667,\"date\":\"2007-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5303786423,\"date\":\"2007-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.679,\"date\":\"2007-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5325781842,\"date\":\"2007-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.673,\"date\":\"2007-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5347757667,\"date\":\"2007-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6666666667,\"date\":\"2007-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5369713899,\"date\":\"2007-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7813333333,\"date\":\"2007-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5391650537,\"date\":\"2007-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8306666667,\"date\":\"2007-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5413567582,\"date\":\"2007-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8696666667,\"date\":\"2007-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5435465034,\"date\":\"2007-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8416666667,\"date\":\"2007-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5457342891,\"date\":\"2007-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.796,\"date\":\"2007-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5479201156,\"date\":\"2007-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7746666667,\"date\":\"2007-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5501039827,\"date\":\"2007-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.755,\"date\":\"2007-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5522858904,\"date\":\"2007-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7883333333,\"date\":\"2007-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5544658388,\"date\":\"2007-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8016666667,\"date\":\"2007-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5566438279,\"date\":\"2007-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7833333333,\"date\":\"2007-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5588198576,\"date\":\"2007-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.774,\"date\":\"2007-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.560993928,\"date\":\"2007-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7916666667,\"date\":\"2007-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.563166039,\"date\":\"2007-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8226666667,\"date\":\"2007-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5653361907,\"date\":\"2007-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8166666667,\"date\":\"2007-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.567504383,\"date\":\"2007-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.839,\"date\":\"2007-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5696706159,\"date\":\"2007-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.875,\"date\":\"2007-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5718348896,\"date\":\"2007-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8736666667,\"date\":\"2007-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5739972039,\"date\":\"2007-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.872,\"date\":\"2007-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5761575588,\"date\":\"2007-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8846666667,\"date\":\"2007-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5783159544,\"date\":\"2007-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8326666667,\"date\":\"2007-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5804723906,\"date\":\"2007-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8573333333,\"date\":\"2007-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5826268675,\"date\":\"2007-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8523333333,\"date\":\"2007-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5847793851,\"date\":\"2007-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8843333333,\"date\":\"2007-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5869299433,\"date\":\"2007-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9156666667,\"date\":\"2007-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5890785421,\"date\":\"2007-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9563333333,\"date\":\"2007-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5912251816,\"date\":\"2007-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.026,\"date\":\"2007-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5933698618,\"date\":\"2007-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.04,\"date\":\"2007-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5955125826,\"date\":\"2007-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.022,\"date\":\"2007-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.597653344,\"date\":\"2007-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0226666667,\"date\":\"2007-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.5997921462,\"date\":\"2007-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0756666667,\"date\":\"2007-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6019289889,\"date\":\"2007-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.141,\"date\":\"2007-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6040638724,\"date\":\"2007-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2913333333,\"date\":\"2007-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6061967964,\"date\":\"2007-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4103333333,\"date\":\"2007-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6083277612,\"date\":\"2007-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3896666667,\"date\":\"2007-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6104567665,\"date\":\"2007-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4273333333,\"date\":\"2007-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6125838126,\"date\":\"2007-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.393,\"date\":\"2007-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6147088993,\"date\":\"2007-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2963333333,\"date\":\"2007-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6168320266,\"date\":\"2007-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2816666667,\"date\":\"2007-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6189531946,\"date\":\"2007-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2846666667,\"date\":\"2007-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6210724032,\"date\":\"2007-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3243333333,\"date\":\"2007-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6231896526,\"date\":\"2007-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3546666667,\"date\":\"2008-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6253049425,\"date\":\"2008-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2986666667,\"date\":\"2008-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6274182731,\"date\":\"2008-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2416666667,\"date\":\"2008-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6295296444,\"date\":\"2008-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.234,\"date\":\"2008-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6316390563,\"date\":\"2008-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2593333333,\"date\":\"2008-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6337465089,\"date\":\"2008-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.258,\"date\":\"2008-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6358520021,\"date\":\"2008-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3786666667,\"date\":\"2008-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6379555359,\"date\":\"2008-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5403333333,\"date\":\"2008-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6400571105,\"date\":\"2008-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6403333333,\"date\":\"2008-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6421567256,\"date\":\"2008-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.806,\"date\":\"2008-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6442543815,\"date\":\"2008-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.96,\"date\":\"2008-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.646350078,\"date\":\"2008-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.973,\"date\":\"2008-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6484438151,\"date\":\"2008-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9416666667,\"date\":\"2008-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6505355929,\"date\":\"2008-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.932,\"date\":\"2008-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6526254113,\"date\":\"2008-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0383333333,\"date\":\"2008-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6547132704,\"date\":\"2008-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1216666667,\"date\":\"2008-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6567991702,\"date\":\"2008-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.154,\"date\":\"2008-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6588831106,\"date\":\"2008-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.12,\"date\":\"2008-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6609650916,\"date\":\"2008-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.3113333333,\"date\":\"2008-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6630451133,\"date\":\"2008-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4823333333,\"date\":\"2008-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6651231757,\"date\":\"2008-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.7043333333,\"date\":\"2008-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6671992787,\"date\":\"2008-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.6863333333,\"date\":\"2008-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6692734224,\"date\":\"2008-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.668,\"date\":\"2008-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6713456067,\"date\":\"2008-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.6666666667,\"date\":\"2008-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6734158317,\"date\":\"2008-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.6196666667,\"date\":\"2008-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6754840973,\"date\":\"2008-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.6186666667,\"date\":\"2008-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6775504036,\"date\":\"2008-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.712,\"date\":\"2008-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6796147505,\"date\":\"2008-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.7473333333,\"date\":\"2008-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6816771381,\"date\":\"2008-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.692,\"date\":\"2008-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6837375664,\"date\":\"2008-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.5763333333,\"date\":\"2008-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6857960353,\"date\":\"2008-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4706666667,\"date\":\"2008-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6878525448,\"date\":\"2008-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.3203333333,\"date\":\"2008-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.689907095,\"date\":\"2008-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.176,\"date\":\"2008-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6919596858,\"date\":\"2008-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.114,\"date\":\"2008-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6940103174,\"date\":\"2008-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0903333333,\"date\":\"2008-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6960589895,\"date\":\"2008-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0233333333,\"date\":\"2008-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.6981057023,\"date\":\"2008-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.997,\"date\":\"2008-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7001504558,\"date\":\"2008-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9366666667,\"date\":\"2008-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7021932499,\"date\":\"2008-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9383333333,\"date\":\"2008-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7042340847,\"date\":\"2008-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8476666667,\"date\":\"2008-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7062729601,\"date\":\"2008-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6296666667,\"date\":\"2008-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7083098762,\"date\":\"2008-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4456666667,\"date\":\"2008-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7103448329,\"date\":\"2008-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.259,\"date\":\"2008-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7123778303,\"date\":\"2008-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0606666667,\"date\":\"2008-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7144088683,\"date\":\"2008-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9103333333,\"date\":\"2008-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.716437947,\"date\":\"2008-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7766666667,\"date\":\"2008-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7184650663,\"date\":\"2008-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.637,\"date\":\"2008-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7204902263,\"date\":\"2008-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5943333333,\"date\":\"2008-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.722513427,\"date\":\"2008-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.519,\"date\":\"2008-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7245346683,\"date\":\"2008-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.426,\"date\":\"2008-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7265539502,\"date\":\"2008-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3695,\"date\":\"2008-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7285712729,\"date\":\"2008-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.331,\"date\":\"2008-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7305866361,\"date\":\"2008-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.295,\"date\":\"2009-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.73260004,\"date\":\"2009-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.319,\"date\":\"2009-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7346114846,\"date\":\"2009-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3015,\"date\":\"2009-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7366209698,\"date\":\"2009-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.273,\"date\":\"2009-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7386284957,\"date\":\"2009-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.251,\"date\":\"2009-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7406340622,\"date\":\"2009-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2245,\"date\":\"2009-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7426376694,\"date\":\"2009-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1915,\"date\":\"2009-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7446393172,\"date\":\"2009-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.134,\"date\":\"2009-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7466390057,\"date\":\"2009-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.091,\"date\":\"2009-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7486367348,\"date\":\"2009-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.048,\"date\":\"2009-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7506325046,\"date\":\"2009-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.02,\"date\":\"2009-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7526263151,\"date\":\"2009-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0915,\"date\":\"2009-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7546181662,\"date\":\"2009-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.223,\"date\":\"2009-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7566080579,\"date\":\"2009-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2305,\"date\":\"2009-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7585959903,\"date\":\"2009-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2315,\"date\":\"2009-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7605819634,\"date\":\"2009-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2235,\"date\":\"2009-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7625659771,\"date\":\"2009-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.204,\"date\":\"2009-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7645480315,\"date\":\"2009-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1885,\"date\":\"2009-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7665281265,\"date\":\"2009-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2195,\"date\":\"2009-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7685062621,\"date\":\"2009-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.234,\"date\":\"2009-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7704824385,\"date\":\"2009-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.276,\"date\":\"2009-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7724566554,\"date\":\"2009-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.353,\"date\":\"2009-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7744289131,\"date\":\"2009-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4995,\"date\":\"2009-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7763992113,\"date\":\"2009-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5735,\"date\":\"2009-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7783675503,\"date\":\"2009-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6175,\"date\":\"2009-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7803339299,\"date\":\"2009-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.61,\"date\":\"2009-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7822983501,\"date\":\"2009-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.596,\"date\":\"2009-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.784260811,\"date\":\"2009-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.544,\"date\":\"2009-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7862213125,\"date\":\"2009-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4985,\"date\":\"2009-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7881798547,\"date\":\"2009-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.53,\"date\":\"2009-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7901364376,\"date\":\"2009-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.552,\"date\":\"2009-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7920910611,\"date\":\"2009-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6265,\"date\":\"2009-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7940437253,\"date\":\"2009-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.654,\"date\":\"2009-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7959944301,\"date\":\"2009-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.67,\"date\":\"2009-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7979431755,\"date\":\"2009-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6765,\"date\":\"2009-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.7998899616,\"date\":\"2009-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6485,\"date\":\"2009-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8018347884,\"date\":\"2009-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.636,\"date\":\"2009-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8037776558,\"date\":\"2009-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.624,\"date\":\"2009-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8057185639,\"date\":\"2009-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6035,\"date\":\"2009-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8076575126,\"date\":\"2009-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.585,\"date\":\"2009-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.809594502,\"date\":\"2009-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.602,\"date\":\"2009-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8115295321,\"date\":\"2009-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7065,\"date\":\"2009-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8134626028,\"date\":\"2009-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.803,\"date\":\"2009-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8153937141,\"date\":\"2009-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8095,\"date\":\"2009-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8173228661,\"date\":\"2009-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.803,\"date\":\"2009-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8192500587,\"date\":\"2009-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7925,\"date\":\"2009-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.821175292,\"date\":\"2009-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7895,\"date\":\"2009-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.823098566,\"date\":\"2009-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7775,\"date\":\"2009-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8250198806,\"date\":\"2009-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7745,\"date\":\"2009-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8269392359,\"date\":\"2009-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7505,\"date\":\"2009-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8288566318,\"date\":\"2009-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7285,\"date\":\"2009-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8307720683,\"date\":\"2009-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.734,\"date\":\"2009-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8326855456,\"date\":\"2009-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.799,\"date\":\"2010-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8345970634,\"date\":\"2010-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8805,\"date\":\"2010-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.836506622,\"date\":\"2010-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.872,\"date\":\"2010-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8384142211,\"date\":\"2010-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8355,\"date\":\"2010-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.840319861,\"date\":\"2010-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.784,\"date\":\"2010-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8422235414,\"date\":\"2010-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.772,\"date\":\"2010-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8441252626,\"date\":\"2010-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7585,\"date\":\"2010-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8460250244,\"date\":\"2010-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.833,\"date\":\"2010-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8479228268,\"date\":\"2010-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.863,\"date\":\"2010-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8498186699,\"date\":\"2010-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.905,\"date\":\"2010-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8517125537,\"date\":\"2010-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.925,\"date\":\"2010-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8536044781,\"date\":\"2010-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9475,\"date\":\"2010-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8554944431,\"date\":\"2010-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9405,\"date\":\"2010-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8573824488,\"date\":\"2010-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.016,\"date\":\"2010-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8592684952,\"date\":\"2010-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.071,\"date\":\"2010-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8611525822,\"date\":\"2010-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.076,\"date\":\"2010-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8630347099,\"date\":\"2010-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.08,\"date\":\"2010-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8649148782,\"date\":\"2010-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.124,\"date\":\"2010-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8667930872,\"date\":\"2010-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.129,\"date\":\"2010-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8686693368,\"date\":\"2010-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.096,\"date\":\"2010-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8705436271,\"date\":\"2010-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.023,\"date\":\"2010-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.872415958,\"date\":\"2010-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9815,\"date\":\"2010-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8742863296,\"date\":\"2010-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9475,\"date\":\"2010-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8761547418,\"date\":\"2010-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.929,\"date\":\"2010-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8780211947,\"date\":\"2010-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9615,\"date\":\"2010-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8798856883,\"date\":\"2010-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9565,\"date\":\"2010-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8817482225,\"date\":\"2010-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9245,\"date\":\"2010-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8836087973,\"date\":\"2010-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9035,\"date\":\"2010-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8854674128,\"date\":\"2010-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.899,\"date\":\"2010-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.887324069,\"date\":\"2010-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.919,\"date\":\"2010-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8891787658,\"date\":\"2010-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.928,\"date\":\"2010-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8910315033,\"date\":\"2010-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.991,\"date\":\"2010-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8928822814,\"date\":\"2010-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.979,\"date\":\"2010-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8947311002,\"date\":\"2010-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.957,\"date\":\"2010-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8965779596,\"date\":\"2010-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.938,\"date\":\"2010-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.8984228597,\"date\":\"2010-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.931,\"date\":\"2010-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9002658004,\"date\":\"2010-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.943,\"date\":\"2010-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9021067818,\"date\":\"2010-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.96,\"date\":\"2010-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9039458038,\"date\":\"2010-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.951,\"date\":\"2010-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9057828665,\"date\":\"2010-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3,\"date\":\"2010-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9076179698,\"date\":\"2010-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.066,\"date\":\"2010-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9094511138,\"date\":\"2010-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.073,\"date\":\"2010-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9112822985,\"date\":\"2010-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.067,\"date\":\"2010-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9131115238,\"date\":\"2010-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.067,\"date\":\"2010-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9149387897,\"date\":\"2010-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.116,\"date\":\"2010-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9167640963,\"date\":\"2010-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.184,\"date\":\"2010-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9185874436,\"date\":\"2010-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.171,\"date\":\"2010-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9204088315,\"date\":\"2010-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.162,\"date\":\"2010-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9222282601,\"date\":\"2010-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.197,\"date\":\"2010-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9240457293,\"date\":\"2010-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.231,\"date\":\"2010-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9258612392,\"date\":\"2010-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.248,\"date\":\"2010-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9276747897,\"date\":\"2010-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.294,\"date\":\"2010-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9294863809,\"date\":\"2010-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.331,\"date\":\"2011-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9312960127,\"date\":\"2011-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.333,\"date\":\"2011-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9331036852,\"date\":\"2011-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.407,\"date\":\"2011-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9349093983,\"date\":\"2011-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.43,\"date\":\"2011-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9367131521,\"date\":\"2011-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.438,\"date\":\"2011-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9385149466,\"date\":\"2011-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.513,\"date\":\"2011-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9403147817,\"date\":\"2011-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.534,\"date\":\"2011-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9421126574,\"date\":\"2011-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.573,\"date\":\"2011-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9439085738,\"date\":\"2011-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.716,\"date\":\"2011-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9457025309,\"date\":\"2011-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.871,\"date\":\"2011-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9474945286,\"date\":\"2011-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.908,\"date\":\"2011-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9492845669,\"date\":\"2011-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.907,\"date\":\"2011-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.951072646,\"date\":\"2011-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.932,\"date\":\"2011-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9528587656,\"date\":\"2011-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.976,\"date\":\"2011-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9546429259,\"date\":\"2011-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.078,\"date\":\"2011-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9564251269,\"date\":\"2011-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.105,\"date\":\"2011-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9582053685,\"date\":\"2011-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.098,\"date\":\"2011-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9599836508,\"date\":\"2011-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.124,\"date\":\"2011-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9617599738,\"date\":\"2011-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.104,\"date\":\"2011-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9635343373,\"date\":\"2011-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.061,\"date\":\"2011-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9653067416,\"date\":\"2011-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.997,\"date\":\"2011-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9670771865,\"date\":\"2011-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.948,\"date\":\"2011-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.968845672,\"date\":\"2011-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.94,\"date\":\"2011-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9706121982,\"date\":\"2011-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.954,\"date\":\"2011-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9723767651,\"date\":\"2011-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.95,\"date\":\"2011-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9741393726,\"date\":\"2011-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.888,\"date\":\"2011-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9759000207,\"date\":\"2011-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.85,\"date\":\"2011-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9776587095,\"date\":\"2011-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.899,\"date\":\"2011-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.979415439,\"date\":\"2011-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.923,\"date\":\"2011-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9811702091,\"date\":\"2011-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.949,\"date\":\"2011-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9829230199,\"date\":\"2011-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.937,\"date\":\"2011-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9846738713,\"date\":\"2011-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.897,\"date\":\"2011-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9864227634,\"date\":\"2011-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.835,\"date\":\"2011-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9881696961,\"date\":\"2011-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.81,\"date\":\"2011-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9899146695,\"date\":\"2011-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.82,\"date\":\"2011-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9916576835,\"date\":\"2011-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.868,\"date\":\"2011-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9933987382,\"date\":\"2011-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.862,\"date\":\"2011-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9951378336,\"date\":\"2011-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.833,\"date\":\"2011-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9968749696,\"date\":\"2011-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.786,\"date\":\"2011-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":2.9986101462,\"date\":\"2011-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.749,\"date\":\"2011-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0003433635,\"date\":\"2011-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.721,\"date\":\"2011-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0020746215,\"date\":\"2011-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.801,\"date\":\"2011-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0038039201,\"date\":\"2011-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.825,\"date\":\"2011-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0055312593,\"date\":\"2011-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.892,\"date\":\"2011-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0072566393,\"date\":\"2011-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.887,\"date\":\"2011-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0089800598,\"date\":\"2011-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.987,\"date\":\"2011-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.010701521,\"date\":\"2011-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.01,\"date\":\"2011-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0124210229,\"date\":\"2011-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.964,\"date\":\"2011-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0141385654,\"date\":\"2011-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.931,\"date\":\"2011-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0158541486,\"date\":\"2011-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.894,\"date\":\"2011-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0175677724,\"date\":\"2011-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.828,\"date\":\"2011-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0192794369,\"date\":\"2011-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.791,\"date\":\"2011-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0209891421,\"date\":\"2011-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.783,\"date\":\"2012-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0226968879,\"date\":\"2012-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.828,\"date\":\"2012-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0244026743,\"date\":\"2012-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.854,\"date\":\"2012-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0261065014,\"date\":\"2012-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.848,\"date\":\"2012-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0278083692,\"date\":\"2012-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.85,\"date\":\"2012-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0295082776,\"date\":\"2012-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.856,\"date\":\"2012-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0312062266,\"date\":\"2012-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.943,\"date\":\"2012-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0329022163,\"date\":\"2012-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.96,\"date\":\"2012-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0345962467,\"date\":\"2012-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.051,\"date\":\"2012-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0362883177,\"date\":\"2012-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.094,\"date\":\"2012-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0379784294,\"date\":\"2012-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.123,\"date\":\"2012-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0396665817,\"date\":\"2012-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.142,\"date\":\"2012-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0413527747,\"date\":\"2012-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.147,\"date\":\"2012-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0430370083,\"date\":\"2012-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.142,\"date\":\"2012-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0447192826,\"date\":\"2012-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.148,\"date\":\"2012-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0463995975,\"date\":\"2012-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.127,\"date\":\"2012-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0480779531,\"date\":\"2012-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.085,\"date\":\"2012-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0497543493,\"date\":\"2012-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.073,\"date\":\"2012-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0514287862,\"date\":\"2012-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.057,\"date\":\"2012-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0531012638,\"date\":\"2012-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.004,\"date\":\"2012-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.054771782,\"date\":\"2012-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.956,\"date\":\"2012-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0564403408,\"date\":\"2012-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.897,\"date\":\"2012-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0581069403,\"date\":\"2012-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.846,\"date\":\"2012-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0597715805,\"date\":\"2012-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.781,\"date\":\"2012-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0614342613,\"date\":\"2012-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.729,\"date\":\"2012-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0630949828,\"date\":\"2012-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.678,\"date\":\"2012-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0647537449,\"date\":\"2012-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.648,\"date\":\"2012-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0664105476,\"date\":\"2012-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.683,\"date\":\"2012-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0680653911,\"date\":\"2012-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.695,\"date\":\"2012-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0697182751,\"date\":\"2012-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.783,\"date\":\"2012-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0713691999,\"date\":\"2012-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.796,\"date\":\"2012-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0730181653,\"date\":\"2012-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.85,\"date\":\"2012-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0746651713,\"date\":\"2012-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.965,\"date\":\"2012-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.076310218,\"date\":\"2012-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.026,\"date\":\"2012-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0779533053,\"date\":\"2012-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.089,\"date\":\"2012-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0795944333,\"date\":\"2012-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.127,\"date\":\"2012-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.081233602,\"date\":\"2012-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.132,\"date\":\"2012-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0828708113,\"date\":\"2012-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.135,\"date\":\"2012-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0845060612,\"date\":\"2012-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.086,\"date\":\"2012-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0861393518,\"date\":\"2012-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.079,\"date\":\"2012-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0877706831,\"date\":\"2012-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.094,\"date\":\"2012-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.089400055,\"date\":\"2012-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.15,\"date\":\"2012-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0910274676,\"date\":\"2012-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.116,\"date\":\"2012-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0926529208,\"date\":\"2012-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.03,\"date\":\"2012-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0942764147,\"date\":\"2012-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.01,\"date\":\"2012-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0958979492,\"date\":\"2012-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.98,\"date\":\"2012-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0975175244,\"date\":\"2012-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.976,\"date\":\"2012-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.0991351402,\"date\":\"2012-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.034,\"date\":\"2012-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1007507967,\"date\":\"2012-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.027,\"date\":\"2012-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1023644938,\"date\":\"2012-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.991,\"date\":\"2012-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1039762316,\"date\":\"2012-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.945,\"date\":\"2012-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1055860101,\"date\":\"2012-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.923,\"date\":\"2012-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1071938291,\"date\":\"2012-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.918,\"date\":\"2012-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1087996889,\"date\":\"2012-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.911,\"date\":\"2013-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1104035893,\"date\":\"2013-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.894,\"date\":\"2013-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1120055304,\"date\":\"2013-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.902,\"date\":\"2013-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1136055121,\"date\":\"2013-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.927,\"date\":\"2013-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1152035344,\"date\":\"2013-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.022,\"date\":\"2013-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1167995974,\"date\":\"2013-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.104,\"date\":\"2013-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1183937011,\"date\":\"2013-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.157,\"date\":\"2013-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1199858454,\"date\":\"2013-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.159,\"date\":\"2013-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1215760304,\"date\":\"2013-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.13,\"date\":\"2013-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.123164256,\"date\":\"2013-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.088,\"date\":\"2013-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1247505223,\"date\":\"2013-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.047,\"date\":\"2013-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1263348292,\"date\":\"2013-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.006,\"date\":\"2013-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1279171768,\"date\":\"2013-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.993,\"date\":\"2013-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1294975651,\"date\":\"2013-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.977,\"date\":\"2013-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.131075994,\"date\":\"2013-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.942,\"date\":\"2013-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1326524635,\"date\":\"2013-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.887,\"date\":\"2013-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1342269737,\"date\":\"2013-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.851,\"date\":\"2013-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1357995246,\"date\":\"2013-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.845,\"date\":\"2013-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1373701161,\"date\":\"2013-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.866,\"date\":\"2013-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1389387482,\"date\":\"2013-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.89,\"date\":\"2013-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.140505421,\"date\":\"2013-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.88,\"date\":\"2013-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1420701345,\"date\":\"2013-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.869,\"date\":\"2013-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1436328886,\"date\":\"2013-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.849,\"date\":\"2013-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1451936834,\"date\":\"2013-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.841,\"date\":\"2013-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1467525188,\"date\":\"2013-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.838,\"date\":\"2013-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1483093949,\"date\":\"2013-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.817,\"date\":\"2013-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1498643116,\"date\":\"2013-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.828,\"date\":\"2013-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.151417269,\"date\":\"2013-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.867,\"date\":\"2013-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.152968267,\"date\":\"2013-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.903,\"date\":\"2013-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1545173057,\"date\":\"2013-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.915,\"date\":\"2013-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1560643851,\"date\":\"2013-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.909,\"date\":\"2013-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1576095051,\"date\":\"2013-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.896,\"date\":\"2013-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1591526657,\"date\":\"2013-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9,\"date\":\"2013-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.160693867,\"date\":\"2013-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.913,\"date\":\"2013-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.162233109,\"date\":\"2013-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.981,\"date\":\"2013-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1637703916,\"date\":\"2013-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.981,\"date\":\"2013-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1653057148,\"date\":\"2013-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.974,\"date\":\"2013-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1668390787,\"date\":\"2013-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.949,\"date\":\"2013-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1683704833,\"date\":\"2013-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.919,\"date\":\"2013-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1698999285,\"date\":\"2013-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.897,\"date\":\"2013-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1714274144,\"date\":\"2013-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.886,\"date\":\"2013-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1729529409,\"date\":\"2013-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.886,\"date\":\"2013-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1744765081,\"date\":\"2013-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.87,\"date\":\"2013-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1759981159,\"date\":\"2013-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.857,\"date\":\"2013-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1775177644,\"date\":\"2013-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.832,\"date\":\"2013-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1790354536,\"date\":\"2013-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.822,\"date\":\"2013-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1805511834,\"date\":\"2013-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.844,\"date\":\"2013-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1820649538,\"date\":\"2013-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.883,\"date\":\"2013-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1835767649,\"date\":\"2013-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.879,\"date\":\"2013-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1850866166,\"date\":\"2013-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.871,\"date\":\"2013-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.186594509,\"date\":\"2013-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.873,\"date\":\"2013-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1881004421,\"date\":\"2013-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.903,\"date\":\"2013-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1896044158,\"date\":\"2013-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.91,\"date\":\"2014-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1911064302,\"date\":\"2014-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.886,\"date\":\"2014-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1926064852,\"date\":\"2014-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.873,\"date\":\"2014-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1941045809,\"date\":\"2014-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.904,\"date\":\"2014-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1956007172,\"date\":\"2014-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.951,\"date\":\"2014-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1970948941,\"date\":\"2014-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.977,\"date\":\"2014-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.1985871118,\"date\":\"2014-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.989,\"date\":\"2014-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2000773701,\"date\":\"2014-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.017,\"date\":\"2014-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.201565669,\"date\":\"2014-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.016,\"date\":\"2014-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2030520086,\"date\":\"2014-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.021,\"date\":\"2014-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2045363888,\"date\":\"2014-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.003,\"date\":\"2014-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2060188097,\"date\":\"2014-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.988,\"date\":\"2014-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2074992713,\"date\":\"2014-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.975,\"date\":\"2014-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2089777735,\"date\":\"2014-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.959,\"date\":\"2014-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2104543163,\"date\":\"2014-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.952,\"date\":\"2014-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2119288998,\"date\":\"2014-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.971,\"date\":\"2014-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.213401524,\"date\":\"2014-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.975,\"date\":\"2014-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2148721888,\"date\":\"2014-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.964,\"date\":\"2014-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2163408942,\"date\":\"2014-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.948,\"date\":\"2014-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2178076404,\"date\":\"2014-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.934,\"date\":\"2014-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2192724271,\"date\":\"2014-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.925,\"date\":\"2014-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2207352546,\"date\":\"2014-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.918,\"date\":\"2014-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2221961226,\"date\":\"2014-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.892,\"date\":\"2014-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2236550314,\"date\":\"2014-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.882,\"date\":\"2014-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2251119807,\"date\":\"2014-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.919,\"date\":\"2014-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2265669708,\"date\":\"2014-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.92,\"date\":\"2014-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2280200015,\"date\":\"2014-06-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.913,\"date\":\"2014-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2294710728,\"date\":\"2014-07-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.894,\"date\":\"2014-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2309201848,\"date\":\"2014-07-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.869,\"date\":\"2014-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2323673375,\"date\":\"2014-07-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.858,\"date\":\"2014-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2338125308,\"date\":\"2014-07-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.853,\"date\":\"2014-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2352557647,\"date\":\"2014-08-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.843,\"date\":\"2014-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2366970393,\"date\":\"2014-08-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.835,\"date\":\"2014-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2381363546,\"date\":\"2014-08-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.821,\"date\":\"2014-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2395737105,\"date\":\"2014-08-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.814,\"date\":\"2014-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2410091071,\"date\":\"2014-09-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.814,\"date\":\"2014-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2424425443,\"date\":\"2014-09-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.801,\"date\":\"2014-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2438740221,\"date\":\"2014-09-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.778,\"date\":\"2014-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2453035407,\"date\":\"2014-09-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.755,\"date\":\"2014-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2467310999,\"date\":\"2014-09-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.733,\"date\":\"2014-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2481566997,\"date\":\"2014-10-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.698,\"date\":\"2014-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2495803402,\"date\":\"2014-10-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.656,\"date\":\"2014-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2510020213,\"date\":\"2014-10-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.635,\"date\":\"2014-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2524217431,\"date\":\"2014-10-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.623,\"date\":\"2014-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2538395055,\"date\":\"2014-11-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.677,\"date\":\"2014-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2552553086,\"date\":\"2014-11-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.661,\"date\":\"2014-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2566691524,\"date\":\"2014-11-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.628,\"date\":\"2014-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2580810368,\"date\":\"2014-11-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.605,\"date\":\"2014-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2594909618,\"date\":\"2014-12-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.535,\"date\":\"2014-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2608989276,\"date\":\"2014-12-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.419,\"date\":\"2014-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2623049339,\"date\":\"2014-12-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.281,\"date\":\"2014-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2637089809,\"date\":\"2014-12-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.213,\"date\":\"2014-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2651110686,\"date\":\"2014-12-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.137,\"date\":\"2015-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2665111969,\"date\":\"2015-01-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.053,\"date\":\"2015-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2679093659,\"date\":\"2015-01-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.933,\"date\":\"2015-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2693055755,\"date\":\"2015-01-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.866,\"date\":\"2015-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2706998258,\"date\":\"2015-01-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.831,\"date\":\"2015-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2720921167,\"date\":\"2015-02-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.835,\"date\":\"2015-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2734824483,\"date\":\"2015-02-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.865,\"date\":\"2015-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2748708206,\"date\":\"2015-02-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9,\"date\":\"2015-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2762572335,\"date\":\"2015-02-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.936,\"date\":\"2015-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.277641687,\"date\":\"2015-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.944,\"date\":\"2015-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2790241812,\"date\":\"2015-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.917,\"date\":\"2015-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2804047161,\"date\":\"2015-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.864,\"date\":\"2015-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2817832916,\"date\":\"2015-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.824,\"date\":\"2015-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2831599077,\"date\":\"2015-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.784,\"date\":\"2015-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2845345645,\"date\":\"2015-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.754,\"date\":\"2015-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.285907262,\"date\":\"2015-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.78,\"date\":\"2015-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2872780001,\"date\":\"2015-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.811,\"date\":\"2015-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2886467789,\"date\":\"2015-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.854,\"date\":\"2015-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2900135983,\"date\":\"2015-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.878,\"date\":\"2015-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2913784584,\"date\":\"2015-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.904,\"date\":\"2015-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2927413591,\"date\":\"2015-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.914,\"date\":\"2015-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2941023005,\"date\":\"2015-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.909,\"date\":\"2015-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2954612825,\"date\":\"2015-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.884,\"date\":\"2015-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2968183052,\"date\":\"2015-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.87,\"date\":\"2015-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2981733686,\"date\":\"2015-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.859,\"date\":\"2015-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.2995264725,\"date\":\"2015-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.843,\"date\":\"2015-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3008776172,\"date\":\"2015-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.832,\"date\":\"2015-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3022268025,\"date\":\"2015-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.814,\"date\":\"2015-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3035740285,\"date\":\"2015-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.782,\"date\":\"2015-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3049192951,\"date\":\"2015-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.723,\"date\":\"2015-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3062626023,\"date\":\"2015-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.668,\"date\":\"2015-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3076039502,\"date\":\"2015-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.617,\"date\":\"2015-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3089433388,\"date\":\"2015-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.615,\"date\":\"2015-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.310280768,\"date\":\"2015-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.561,\"date\":\"2015-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3116162379,\"date\":\"2015-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.514,\"date\":\"2015-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3129497484,\"date\":\"2015-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.534,\"date\":\"2015-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3142812996,\"date\":\"2015-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.517,\"date\":\"2015-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3156108914,\"date\":\"2015-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.493,\"date\":\"2015-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3169385239,\"date\":\"2015-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.476,\"date\":\"2015-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.318264197,\"date\":\"2015-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.492,\"date\":\"2015-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3195879108,\"date\":\"2015-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.556,\"date\":\"2015-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3209096653,\"date\":\"2015-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.531,\"date\":\"2015-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3222294604,\"date\":\"2015-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.498,\"date\":\"2015-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3235472961,\"date\":\"2015-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.485,\"date\":\"2015-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3248631725,\"date\":\"2015-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.502,\"date\":\"2015-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3261770896,\"date\":\"2015-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.482,\"date\":\"2015-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3274890473,\"date\":\"2015-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.445,\"date\":\"2015-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3287990457,\"date\":\"2015-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.421,\"date\":\"2015-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3301070847,\"date\":\"2015-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.379,\"date\":\"2015-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3314131643,\"date\":\"2015-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.338,\"date\":\"2015-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3327172847,\"date\":\"2015-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.284,\"date\":\"2015-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3340194456,\"date\":\"2015-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.237,\"date\":\"2015-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3353196473,\"date\":\"2015-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.211,\"date\":\"2016-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3366178895,\"date\":\"2016-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.177,\"date\":\"2016-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3379141725,\"date\":\"2016-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.112,\"date\":\"2016-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3392084961,\"date\":\"2016-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.071,\"date\":\"2016-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3405008603,\"date\":\"2016-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.031,\"date\":\"2016-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3417912652,\"date\":\"2016-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.008,\"date\":\"2016-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3430797107,\"date\":\"2016-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.98,\"date\":\"2016-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3443661969,\"date\":\"2016-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.983,\"date\":\"2016-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3456507238,\"date\":\"2016-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":1.989,\"date\":\"2016-02-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3469332913,\"date\":\"2016-02-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.021,\"date\":\"2016-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3482138995,\"date\":\"2016-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.099,\"date\":\"2016-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3494925483,\"date\":\"2016-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.119,\"date\":\"2016-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3507692377,\"date\":\"2016-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.121,\"date\":\"2016-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3520439679,\"date\":\"2016-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.115,\"date\":\"2016-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3533167386,\"date\":\"2016-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.128,\"date\":\"2016-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.35458755,\"date\":\"2016-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.165,\"date\":\"2016-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3558564021,\"date\":\"2016-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.198,\"date\":\"2016-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3571232949,\"date\":\"2016-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.266,\"date\":\"2016-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3583882282,\"date\":\"2016-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.271,\"date\":\"2016-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3596512023,\"date\":\"2016-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.297,\"date\":\"2016-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.360912217,\"date\":\"2016-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.357,\"date\":\"2016-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3621712723,\"date\":\"2016-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.382,\"date\":\"2016-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3634283683,\"date\":\"2016-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.407,\"date\":\"2016-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3646835049,\"date\":\"2016-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.431,\"date\":\"2016-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3659366822,\"date\":\"2016-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.426,\"date\":\"2016-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3671879002,\"date\":\"2016-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.426,\"date\":\"2016-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3684371588,\"date\":\"2016-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.423,\"date\":\"2016-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3696844581,\"date\":\"2016-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.414,\"date\":\"2016-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.370929798,\"date\":\"2016-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.402,\"date\":\"2016-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3721731785,\"date\":\"2016-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.379,\"date\":\"2016-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3734145998,\"date\":\"2016-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.348,\"date\":\"2016-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3746540616,\"date\":\"2016-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.316,\"date\":\"2016-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3758915642,\"date\":\"2016-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.31,\"date\":\"2016-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3771271073,\"date\":\"2016-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.37,\"date\":\"2016-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3783606912,\"date\":\"2016-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.409,\"date\":\"2016-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3795923157,\"date\":\"2016-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.407,\"date\":\"2016-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3808219808,\"date\":\"2016-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.399,\"date\":\"2016-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3820496866,\"date\":\"2016-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.389,\"date\":\"2016-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.383275433,\"date\":\"2016-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.382,\"date\":\"2016-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3844992201,\"date\":\"2016-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.389,\"date\":\"2016-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3857210479,\"date\":\"2016-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.445,\"date\":\"2016-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3869409163,\"date\":\"2016-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.481,\"date\":\"2016-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3881588253,\"date\":\"2016-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.478,\"date\":\"2016-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.389374775,\"date\":\"2016-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.479,\"date\":\"2016-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3905887654,\"date\":\"2016-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.47,\"date\":\"2016-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3918007964,\"date\":\"2016-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.443,\"date\":\"2016-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3930108681,\"date\":\"2016-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.421,\"date\":\"2016-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3942189804,\"date\":\"2016-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.42,\"date\":\"2016-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3954251334,\"date\":\"2016-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.48,\"date\":\"2016-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.396629327,\"date\":\"2016-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.493,\"date\":\"2016-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3978315613,\"date\":\"2016-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.527,\"date\":\"2016-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.3990318362,\"date\":\"2016-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.54,\"date\":\"2016-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4002301518,\"date\":\"2016-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.586,\"date\":\"2017-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4014265081,\"date\":\"2017-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.597,\"date\":\"2017-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4026209049,\"date\":\"2017-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.585,\"date\":\"2017-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4038133425,\"date\":\"2017-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.569,\"date\":\"2017-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4050038207,\"date\":\"2017-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.562,\"date\":\"2017-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4061923395,\"date\":\"2017-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.558,\"date\":\"2017-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.407378899,\"date\":\"2017-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.565,\"date\":\"2017-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4085634992,\"date\":\"2017-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.572,\"date\":\"2017-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.40974614,\"date\":\"2017-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.577,\"date\":\"2017-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4109268215,\"date\":\"2017-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.579,\"date\":\"2017-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4121055436,\"date\":\"2017-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.564,\"date\":\"2017-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4132823064,\"date\":\"2017-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.539,\"date\":\"2017-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4144571098,\"date\":\"2017-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.532,\"date\":\"2017-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4156299539,\"date\":\"2017-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.556,\"date\":\"2017-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4168008386,\"date\":\"2017-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.582,\"date\":\"2017-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.417969764,\"date\":\"2017-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.597,\"date\":\"2017-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.41913673,\"date\":\"2017-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.595,\"date\":\"2017-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4203017367,\"date\":\"2017-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.583,\"date\":\"2017-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.421464784,\"date\":\"2017-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.565,\"date\":\"2017-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.422625872,\"date\":\"2017-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.544,\"date\":\"2017-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4237850007,\"date\":\"2017-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.539,\"date\":\"2017-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.42494217,\"date\":\"2017-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.571,\"date\":\"2017-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4260973799,\"date\":\"2017-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.564,\"date\":\"2017-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4272506305,\"date\":\"2017-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.524,\"date\":\"2017-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4284019218,\"date\":\"2017-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.489,\"date\":\"2017-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4295512537,\"date\":\"2017-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.465,\"date\":\"2017-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4306986263,\"date\":\"2017-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.472,\"date\":\"2017-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4318440395,\"date\":\"2017-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.481,\"date\":\"2017-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4329874934,\"date\":\"2017-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.491,\"date\":\"2017-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4341289879,\"date\":\"2017-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.507,\"date\":\"2017-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4352685231,\"date\":\"2017-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.531,\"date\":\"2017-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4364060989,\"date\":\"2017-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.581,\"date\":\"2017-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4375417154,\"date\":\"2017-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.598,\"date\":\"2017-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4386753725,\"date\":\"2017-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.596,\"date\":\"2017-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4398070703,\"date\":\"2017-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.605,\"date\":\"2017-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4409368088,\"date\":\"2017-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.758,\"date\":\"2017-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4420645879,\"date\":\"2017-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.802,\"date\":\"2017-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4431904076,\"date\":\"2017-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.791,\"date\":\"2017-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.444314268,\"date\":\"2017-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.788,\"date\":\"2017-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4454361691,\"date\":\"2017-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.792,\"date\":\"2017-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4465561108,\"date\":\"2017-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.776,\"date\":\"2017-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4476740931,\"date\":\"2017-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.787,\"date\":\"2017-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4487901162,\"date\":\"2017-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.797,\"date\":\"2017-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4499041798,\"date\":\"2017-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.819,\"date\":\"2017-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4510162842,\"date\":\"2017-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.882,\"date\":\"2017-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4521264291,\"date\":\"2017-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.915,\"date\":\"2017-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4532346148,\"date\":\"2017-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.912,\"date\":\"2017-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.454340841,\"date\":\"2017-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.926,\"date\":\"2017-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.455445108,\"date\":\"2017-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.922,\"date\":\"2017-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4565474156,\"date\":\"2017-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.91,\"date\":\"2017-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4576477638,\"date\":\"2017-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.901,\"date\":\"2017-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4587461527,\"date\":\"2017-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.903,\"date\":\"2017-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4598425822,\"date\":\"2017-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.973,\"date\":\"2018-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4609370524,\"date\":\"2018-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.996,\"date\":\"2018-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4620295633,\"date\":\"2018-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.028,\"date\":\"2018-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4631201148,\"date\":\"2018-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.025,\"date\":\"2018-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4642087069,\"date\":\"2018-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.07,\"date\":\"2018-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4652953398,\"date\":\"2018-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.086,\"date\":\"2018-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4663800132,\"date\":\"2018-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.063,\"date\":\"2018-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4674627273,\"date\":\"2018-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.027,\"date\":\"2018-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4685434821,\"date\":\"2018-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.007,\"date\":\"2018-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4696222775,\"date\":\"2018-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.992,\"date\":\"2018-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4706991136,\"date\":\"2018-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.976,\"date\":\"2018-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4717739903,\"date\":\"2018-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.972,\"date\":\"2018-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4728469077,\"date\":\"2018-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.01,\"date\":\"2018-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4739178658,\"date\":\"2018-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.042,\"date\":\"2018-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4749868644,\"date\":\"2018-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.043,\"date\":\"2018-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4760539038,\"date\":\"2018-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.104,\"date\":\"2018-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4771189838,\"date\":\"2018-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.133,\"date\":\"2018-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4781821044,\"date\":\"2018-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.157,\"date\":\"2018-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4792432657,\"date\":\"2018-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.171,\"date\":\"2018-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4803024677,\"date\":\"2018-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.239,\"date\":\"2018-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4813597103,\"date\":\"2018-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.277,\"date\":\"2018-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4824149936,\"date\":\"2018-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.288,\"date\":\"2018-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4834683175,\"date\":\"2018-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.285,\"date\":\"2018-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.484519682,\"date\":\"2018-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.266,\"date\":\"2018-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4855690873,\"date\":\"2018-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.244,\"date\":\"2018-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4866165331,\"date\":\"2018-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.216,\"date\":\"2018-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4876620197,\"date\":\"2018-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.236,\"date\":\"2018-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4887055468,\"date\":\"2018-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.243,\"date\":\"2018-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4897471147,\"date\":\"2018-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.239,\"date\":\"2018-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4907867231,\"date\":\"2018-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.22,\"date\":\"2018-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4918243723,\"date\":\"2018-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.226,\"date\":\"2018-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4928600621,\"date\":\"2018-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.223,\"date\":\"2018-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4938937925,\"date\":\"2018-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.217,\"date\":\"2018-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4949255636,\"date\":\"2018-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.207,\"date\":\"2018-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4959553754,\"date\":\"2018-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.226,\"date\":\"2018-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4969832278,\"date\":\"2018-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.252,\"date\":\"2018-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4980091208,\"date\":\"2018-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.258,\"date\":\"2018-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.4990330545,\"date\":\"2018-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.268,\"date\":\"2018-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5000550289,\"date\":\"2018-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.271,\"date\":\"2018-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5010750439,\"date\":\"2018-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.313,\"date\":\"2018-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5020930996,\"date\":\"2018-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.385,\"date\":\"2018-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5031091959,\"date\":\"2018-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.394,\"date\":\"2018-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5041233329,\"date\":\"2018-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.38,\"date\":\"2018-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5051355105,\"date\":\"2018-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.355,\"date\":\"2018-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5061457288,\"date\":\"2018-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.338,\"date\":\"2018-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5071539877,\"date\":\"2018-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.317,\"date\":\"2018-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5081602873,\"date\":\"2018-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.282,\"date\":\"2018-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5091646275,\"date\":\"2018-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.261,\"date\":\"2018-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5101670084,\"date\":\"2018-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.207,\"date\":\"2018-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.51116743,\"date\":\"2018-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.161,\"date\":\"2018-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5121658922,\"date\":\"2018-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.121,\"date\":\"2018-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.513162395,\"date\":\"2018-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.077,\"date\":\"2018-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5141569385,\"date\":\"2018-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.048,\"date\":\"2018-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5151495227,\"date\":\"2018-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.013,\"date\":\"2019-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5161401475,\"date\":\"2019-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.976,\"date\":\"2019-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.517128813,\"date\":\"2019-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.965,\"date\":\"2019-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5181155191,\"date\":\"2019-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.965,\"date\":\"2019-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5191002659,\"date\":\"2019-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.966,\"date\":\"2019-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5200830533,\"date\":\"2019-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.966,\"date\":\"2019-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5210638814,\"date\":\"2019-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.006,\"date\":\"2019-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5220427501,\"date\":\"2019-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.048,\"date\":\"2019-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5230196595,\"date\":\"2019-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.076,\"date\":\"2019-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5239946095,\"date\":\"2019-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.079,\"date\":\"2019-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5249676002,\"date\":\"2019-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.07,\"date\":\"2019-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5259386315,\"date\":\"2019-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.08,\"date\":\"2019-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5269077035,\"date\":\"2019-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.078,\"date\":\"2019-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5278748162,\"date\":\"2019-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.093,\"date\":\"2019-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5288399695,\"date\":\"2019-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.118,\"date\":\"2019-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5298031634,\"date\":\"2019-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.147,\"date\":\"2019-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.530764398,\"date\":\"2019-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.169,\"date\":\"2019-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5317236733,\"date\":\"2019-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.171,\"date\":\"2019-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5326809892,\"date\":\"2019-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.16,\"date\":\"2019-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5336363458,\"date\":\"2019-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.163,\"date\":\"2019-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.534589743,\"date\":\"2019-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.151,\"date\":\"2019-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5355411809,\"date\":\"2019-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.136,\"date\":\"2019-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5364906594,\"date\":\"2019-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.105,\"date\":\"2019-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5374381786,\"date\":\"2019-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.07,\"date\":\"2019-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5383837384,\"date\":\"2019-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.043,\"date\":\"2019-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5393273389,\"date\":\"2019-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.042,\"date\":\"2019-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.54026898,\"date\":\"2019-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.055,\"date\":\"2019-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5412086618,\"date\":\"2019-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.051,\"date\":\"2019-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5421463843,\"date\":\"2019-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.044,\"date\":\"2019-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5430821474,\"date\":\"2019-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.034,\"date\":\"2019-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5440159511,\"date\":\"2019-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.032,\"date\":\"2019-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5449477955,\"date\":\"2019-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.011,\"date\":\"2019-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5458776806,\"date\":\"2019-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.994,\"date\":\"2019-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5468056063,\"date\":\"2019-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.983,\"date\":\"2019-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5477315726,\"date\":\"2019-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.976,\"date\":\"2019-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5486555797,\"date\":\"2019-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.971,\"date\":\"2019-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5495776273,\"date\":\"2019-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.987,\"date\":\"2019-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5504977156,\"date\":\"2019-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.081,\"date\":\"2019-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5514158446,\"date\":\"2019-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.066,\"date\":\"2019-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5523320142,\"date\":\"2019-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.047,\"date\":\"2019-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5532462245,\"date\":\"2019-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.051,\"date\":\"2019-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5541584755,\"date\":\"2019-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.05,\"date\":\"2019-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.555068767,\"date\":\"2019-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.064,\"date\":\"2019-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5559770993,\"date\":\"2019-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.062,\"date\":\"2019-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5568834722,\"date\":\"2019-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.073,\"date\":\"2019-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5577878857,\"date\":\"2019-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.074,\"date\":\"2019-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5586903399,\"date\":\"2019-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.066,\"date\":\"2019-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5595908348,\"date\":\"2019-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.07,\"date\":\"2019-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5604893703,\"date\":\"2019-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.049,\"date\":\"2019-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5613859464,\"date\":\"2019-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.046,\"date\":\"2019-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5622805633,\"date\":\"2019-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.041,\"date\":\"2019-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5631732207,\"date\":\"2019-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.069,\"date\":\"2019-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5640639188,\"date\":\"2019-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.079,\"date\":\"2020-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5649526576,\"date\":\"2020-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.064,\"date\":\"2020-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.565839437,\"date\":\"2020-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.037,\"date\":\"2020-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5667242571,\"date\":\"2020-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.01,\"date\":\"2020-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5676071178,\"date\":\"2020-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.956,\"date\":\"2020-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5684880192,\"date\":\"2020-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.91,\"date\":\"2020-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5693669613,\"date\":\"2020-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.89,\"date\":\"2020-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5702439439,\"date\":\"2020-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.882,\"date\":\"2020-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5711189673,\"date\":\"2020-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.851,\"date\":\"2020-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5719920313,\"date\":\"2020-03-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.814,\"date\":\"2020-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5728631359,\"date\":\"2020-03-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.733,\"date\":\"2020-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5737322812,\"date\":\"2020-03-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.659,\"date\":\"2020-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5745994672,\"date\":\"2020-03-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.586,\"date\":\"2020-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5754646938,\"date\":\"2020-03-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.548,\"date\":\"2020-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.576327961,\"date\":\"2020-04-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.507,\"date\":\"2020-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.577189269,\"date\":\"2020-04-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.48,\"date\":\"2020-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5780486175,\"date\":\"2020-04-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.437,\"date\":\"2020-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5789060067,\"date\":\"2020-04-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.399,\"date\":\"2020-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5797614366,\"date\":\"2020-05-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.394,\"date\":\"2020-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5806149071,\"date\":\"2020-05-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.386,\"date\":\"2020-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5814664183,\"date\":\"2020-05-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.39,\"date\":\"2020-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5823159702,\"date\":\"2020-05-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.386,\"date\":\"2020-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5831635626,\"date\":\"2020-06-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.396,\"date\":\"2020-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5840091958,\"date\":\"2020-06-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.403,\"date\":\"2020-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5848528696,\"date\":\"2020-06-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.425,\"date\":\"2020-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.585694584,\"date\":\"2020-06-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.43,\"date\":\"2020-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5865343391,\"date\":\"2020-06-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.437,\"date\":\"2020-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5873721349,\"date\":\"2020-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.438,\"date\":\"2020-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5882079713,\"date\":\"2020-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.433,\"date\":\"2020-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5890418483,\"date\":\"2020-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.427,\"date\":\"2020-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.589873766,\"date\":\"2020-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.424,\"date\":\"2020-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5907037244,\"date\":\"2020-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.428,\"date\":\"2020-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5915317234,\"date\":\"2020-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.427,\"date\":\"2020-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5923577631,\"date\":\"2020-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.426,\"date\":\"2020-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5931818434,\"date\":\"2020-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.441,\"date\":\"2020-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5940039644,\"date\":\"2020-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.435,\"date\":\"2020-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.594824126,\"date\":\"2020-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.422,\"date\":\"2020-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5956423283,\"date\":\"2020-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.404,\"date\":\"2020-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5964585712,\"date\":\"2020-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.394,\"date\":\"2020-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5972728548,\"date\":\"2020-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.387,\"date\":\"2020-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.598085179,\"date\":\"2020-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.395,\"date\":\"2020-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5988955439,\"date\":\"2020-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.388,\"date\":\"2020-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.5997039495,\"date\":\"2020-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.385,\"date\":\"2020-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6005103957,\"date\":\"2020-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.372,\"date\":\"2020-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6013148825,\"date\":\"2020-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.383,\"date\":\"2020-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.60211741,\"date\":\"2020-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.441,\"date\":\"2020-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6029179782,\"date\":\"2020-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.462,\"date\":\"2020-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.603716587,\"date\":\"2020-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.502,\"date\":\"2020-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6045132365,\"date\":\"2020-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.526,\"date\":\"2020-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6053079266,\"date\":\"2020-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.559,\"date\":\"2020-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6061006573,\"date\":\"2020-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.619,\"date\":\"2020-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6068914288,\"date\":\"2020-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.635,\"date\":\"2020-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6076802408,\"date\":\"2020-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.64,\"date\":\"2021-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6084670936,\"date\":\"2021-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.67,\"date\":\"2021-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.609251987,\"date\":\"2021-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.696,\"date\":\"2021-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.610034921,\"date\":\"2021-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.716,\"date\":\"2021-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6108158957,\"date\":\"2021-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.738,\"date\":\"2021-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.611594911,\"date\":\"2021-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.801,\"date\":\"2021-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.612371967,\"date\":\"2021-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.876,\"date\":\"2021-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6131470637,\"date\":\"2021-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":2.973,\"date\":\"2021-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.613920201,\"date\":\"2021-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.072,\"date\":\"2021-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6146913789,\"date\":\"2021-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.143,\"date\":\"2021-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6154605975,\"date\":\"2021-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.191,\"date\":\"2021-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6162278568,\"date\":\"2021-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.194,\"date\":\"2021-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6169931567,\"date\":\"2021-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.161,\"date\":\"2021-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6177564973,\"date\":\"2021-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.144,\"date\":\"2021-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6185178785,\"date\":\"2021-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.129,\"date\":\"2021-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6192773004,\"date\":\"2021-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.124,\"date\":\"2021-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6200347629,\"date\":\"2021-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.124,\"date\":\"2021-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6207902661,\"date\":\"2021-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.142,\"date\":\"2021-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6215438099,\"date\":\"2021-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.186,\"date\":\"2021-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6222953944,\"date\":\"2021-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.249,\"date\":\"2021-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6230450195,\"date\":\"2021-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.253,\"date\":\"2021-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6237926853,\"date\":\"2021-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.255,\"date\":\"2021-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6245383918,\"date\":\"2021-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.274,\"date\":\"2021-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6252821389,\"date\":\"2021-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.286,\"date\":\"2021-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6260239266,\"date\":\"2021-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.287,\"date\":\"2021-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.626763755,\"date\":\"2021-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3,\"date\":\"2021-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6275016241,\"date\":\"2021-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.331,\"date\":\"2021-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6282375338,\"date\":\"2021-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.338,\"date\":\"2021-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6289714841,\"date\":\"2021-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.344,\"date\":\"2021-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6297034751,\"date\":\"2021-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.342,\"date\":\"2021-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6304335068,\"date\":\"2021-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.367,\"date\":\"2021-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6311615791,\"date\":\"2021-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.364,\"date\":\"2021-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6318876921,\"date\":\"2021-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.356,\"date\":\"2021-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6326118457,\"date\":\"2021-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.324,\"date\":\"2021-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.63333404,\"date\":\"2021-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.339,\"date\":\"2021-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.634054275,\"date\":\"2021-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.373,\"date\":\"2021-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6347725505,\"date\":\"2021-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.372,\"date\":\"2021-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6354888668,\"date\":\"2021-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.385,\"date\":\"2021-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6362032237,\"date\":\"2021-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.406,\"date\":\"2021-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6369156212,\"date\":\"2021-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.477,\"date\":\"2021-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6376260594,\"date\":\"2021-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.586,\"date\":\"2021-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6383345383,\"date\":\"2021-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.671,\"date\":\"2021-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6390410578,\"date\":\"2021-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.713,\"date\":\"2021-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6397456179,\"date\":\"2021-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.727,\"date\":\"2021-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6404482187,\"date\":\"2021-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.73,\"date\":\"2021-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6411488602,\"date\":\"2021-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.734,\"date\":\"2021-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6418475423,\"date\":\"2021-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.724,\"date\":\"2021-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6425442651,\"date\":\"2021-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.72,\"date\":\"2021-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6432390285,\"date\":\"2021-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.674,\"date\":\"2021-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6439318326,\"date\":\"2021-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.649,\"date\":\"2021-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6446226773,\"date\":\"2021-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.626,\"date\":\"2021-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6453115627,\"date\":\"2021-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.615,\"date\":\"2021-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6459984887,\"date\":\"2021-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.613,\"date\":\"2022-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6466834554,\"date\":\"2022-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.657,\"date\":\"2022-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6473664628,\"date\":\"2022-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.725,\"date\":\"2022-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6480475108,\"date\":\"2022-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.78,\"date\":\"2022-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6487265994,\"date\":\"2022-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.846,\"date\":\"2022-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6494037287,\"date\":\"2022-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.951,\"date\":\"2022-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6500788987,\"date\":\"2022-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.019,\"date\":\"2022-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6507521093,\"date\":\"2022-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.055,\"date\":\"2022-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6514233605,\"date\":\"2022-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.104,\"date\":\"2022-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6520926525,\"date\":\"2022-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.849,\"date\":\"2022-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.652759985,\"date\":\"2022-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.25,\"date\":\"2022-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6534253582,\"date\":\"2022-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.134,\"date\":\"2022-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6540887721,\"date\":\"2022-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.185,\"date\":\"2022-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6547502266,\"date\":\"2022-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.144,\"date\":\"2022-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6554097218,\"date\":\"2022-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.073,\"date\":\"2022-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6560672576,\"date\":\"2022-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.101,\"date\":\"2022-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6567228341,\"date\":\"2022-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.16,\"date\":\"2022-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6573764513,\"date\":\"2022-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.509,\"date\":\"2022-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6580281091,\"date\":\"2022-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.623,\"date\":\"2022-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6586778075,\"date\":\"2022-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.613,\"date\":\"2022-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6593255466,\"date\":\"2022-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.571,\"date\":\"2022-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6599713263,\"date\":\"2022-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.539,\"date\":\"2022-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6606151468,\"date\":\"2022-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.703,\"date\":\"2022-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6612570078,\"date\":\"2022-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.718,\"date\":\"2022-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6618969095,\"date\":\"2022-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.81,\"date\":\"2022-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6625348519,\"date\":\"2022-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.783,\"date\":\"2022-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6631708349,\"date\":\"2022-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.675,\"date\":\"2022-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6638048586,\"date\":\"2022-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.568,\"date\":\"2022-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6644369229,\"date\":\"2022-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.432,\"date\":\"2022-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6650670279,\"date\":\"2022-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.268,\"date\":\"2022-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6656951735,\"date\":\"2022-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.138,\"date\":\"2022-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6663213598,\"date\":\"2022-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.993,\"date\":\"2022-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6669455867,\"date\":\"2022-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.911,\"date\":\"2022-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6675678543,\"date\":\"2022-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.909,\"date\":\"2022-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6681881625,\"date\":\"2022-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.115,\"date\":\"2022-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6688065114,\"date\":\"2022-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.084,\"date\":\"2022-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.669422901,\"date\":\"2022-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.033,\"date\":\"2022-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6700373312,\"date\":\"2022-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.964,\"date\":\"2022-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.670649802,\"date\":\"2022-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.889,\"date\":\"2022-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6712603135,\"date\":\"2022-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.836,\"date\":\"2022-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6718688657,\"date\":\"2022-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.224,\"date\":\"2022-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6724754585,\"date\":\"2022-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.339,\"date\":\"2022-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.673080092,\"date\":\"2022-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.341,\"date\":\"2022-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6736827661,\"date\":\"2022-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.317,\"date\":\"2022-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6742834808,\"date\":\"2022-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.333,\"date\":\"2022-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6748822363,\"date\":\"2022-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.313,\"date\":\"2022-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6754790323,\"date\":\"2022-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.233,\"date\":\"2022-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6760738691,\"date\":\"2022-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":5.141,\"date\":\"2022-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6766667465,\"date\":\"2022-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.967,\"date\":\"2022-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6772576645,\"date\":\"2022-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.754,\"date\":\"2022-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6778466232,\"date\":\"2022-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.596,\"date\":\"2022-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6784336225,\"date\":\"2022-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.537,\"date\":\"2022-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6790186625,\"date\":\"2022-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.583,\"date\":\"2023-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6796017432,\"date\":\"2023-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.549,\"date\":\"2023-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6801828645,\"date\":\"2023-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.524,\"date\":\"2023-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6807620264,\"date\":\"2023-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.604,\"date\":\"2023-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.681339229,\"date\":\"2023-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.622,\"date\":\"2023-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6819144723,\"date\":\"2023-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.539,\"date\":\"2023-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6824877562,\"date\":\"2023-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.444,\"date\":\"2023-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6830590808,\"date\":\"2023-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.376,\"date\":\"2023-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.683628446,\"date\":\"2023-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.294,\"date\":\"2023-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6841958519,\"date\":\"2023-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.282,\"date\":\"2023-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6847612984,\"date\":\"2023-03-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.247,\"date\":\"2023-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6853247856,\"date\":\"2023-03-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.185,\"date\":\"2023-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6858863134,\"date\":\"2023-03-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.128,\"date\":\"2023-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6864458819,\"date\":\"2023-03-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.105,\"date\":\"2023-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.687003491,\"date\":\"2023-04-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.098,\"date\":\"2023-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6875591408,\"date\":\"2023-04-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.116,\"date\":\"2023-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6881128312,\"date\":\"2023-04-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.077,\"date\":\"2023-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6886645623,\"date\":\"2023-04-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.018,\"date\":\"2023-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6892143341,\"date\":\"2023-05-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.922,\"date\":\"2023-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6897621465,\"date\":\"2023-05-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.897,\"date\":\"2023-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6903079996,\"date\":\"2023-05-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.883,\"date\":\"2023-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6908518933,\"date\":\"2023-05-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.855,\"date\":\"2023-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6913938276,\"date\":\"2023-05-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.797,\"date\":\"2023-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6919338026,\"date\":\"2023-06-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.794,\"date\":\"2023-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6924718183,\"date\":\"2023-06-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.815,\"date\":\"2023-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6930078746,\"date\":\"2023-06-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.801,\"date\":\"2023-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6935419716,\"date\":\"2023-06-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.767,\"date\":\"2023-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6940741092,\"date\":\"2023-07-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.806,\"date\":\"2023-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6946042875,\"date\":\"2023-07-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.806,\"date\":\"2023-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6951325064,\"date\":\"2023-07-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.905,\"date\":\"2023-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.695658766,\"date\":\"2023-07-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.127,\"date\":\"2023-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6961830663,\"date\":\"2023-07-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.239,\"date\":\"2023-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6967054072,\"date\":\"2023-08-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.378,\"date\":\"2023-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6972257887,\"date\":\"2023-08-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.389,\"date\":\"2023-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6977442109,\"date\":\"2023-08-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.475,\"date\":\"2023-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6982606738,\"date\":\"2023-08-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.492,\"date\":\"2023-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6987751773,\"date\":\"2023-09-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.54,\"date\":\"2023-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6992877214,\"date\":\"2023-09-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.633,\"date\":\"2023-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.6997983062,\"date\":\"2023-09-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.586,\"date\":\"2023-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7003069317,\"date\":\"2023-09-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.593,\"date\":\"2023-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7008135978,\"date\":\"2023-10-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.498,\"date\":\"2023-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7013183046,\"date\":\"2023-10-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.444,\"date\":\"2023-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.701821052,\"date\":\"2023-10-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.545,\"date\":\"2023-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7023218401,\"date\":\"2023-10-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.454,\"date\":\"2023-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7028206688,\"date\":\"2023-10-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.366,\"date\":\"2023-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7033175382,\"date\":\"2023-11-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.294,\"date\":\"2023-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7038124482,\"date\":\"2023-11-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.209,\"date\":\"2023-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7043053989,\"date\":\"2023-11-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.146,\"date\":\"2023-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7047963903,\"date\":\"2023-11-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.092,\"date\":\"2023-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7052854223,\"date\":\"2023-12-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.987,\"date\":\"2023-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7057724949,\"date\":\"2023-12-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.894,\"date\":\"2023-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7062576082,\"date\":\"2023-12-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.914,\"date\":\"2023-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7067407622,\"date\":\"2023-12-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.876,\"date\":\"2024-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7072219568,\"date\":\"2024-01-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.828,\"date\":\"2024-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.707701192,\"date\":\"2024-01-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.863,\"date\":\"2024-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7081784679,\"date\":\"2024-01-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.838,\"date\":\"2024-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7086537845,\"date\":\"2024-01-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.867,\"date\":\"2024-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7091271417,\"date\":\"2024-01-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.899,\"date\":\"2024-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7095985396,\"date\":\"2024-02-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.109,\"date\":\"2024-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7100679781,\"date\":\"2024-02-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.109,\"date\":\"2024-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7105354573,\"date\":\"2024-02-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.058,\"date\":\"2024-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7110009771,\"date\":\"2024-02-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.022,\"date\":\"2024-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7114645376,\"date\":\"2024-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.004,\"date\":\"2024-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7119261388,\"date\":\"2024-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.028,\"date\":\"2024-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7123857806,\"date\":\"2024-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.034,\"date\":\"2024-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.712843463,\"date\":\"2024-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.996,\"date\":\"2024-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7132991861,\"date\":\"2024-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.061,\"date\":\"2024-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7137529498,\"date\":\"2024-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":4.015,\"date\":\"2024-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7142047542,\"date\":\"2024-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.992,\"date\":\"2024-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7146545993,\"date\":\"2024-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.947,\"date\":\"2024-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.715102485,\"date\":\"2024-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.894,\"date\":\"2024-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7155484114,\"date\":\"2024-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.848,\"date\":\"2024-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7159923784,\"date\":\"2024-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.789,\"date\":\"2024-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7164343861,\"date\":\"2024-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.758,\"date\":\"2024-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7168744344,\"date\":\"2024-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.726,\"date\":\"2024-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7173125234,\"date\":\"2024-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.658,\"date\":\"2024-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.717748653,\"date\":\"2024-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.735,\"date\":\"2024-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7181828233,\"date\":\"2024-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.769,\"date\":\"2024-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7186150342,\"date\":\"2024-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.813,\"date\":\"2024-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7190452858,\"date\":\"2024-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.865,\"date\":\"2024-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.719473578,\"date\":\"2024-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.826,\"date\":\"2024-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7198999109,\"date\":\"2024-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.779,\"date\":\"2024-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7203242845,\"date\":\"2024-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.768,\"date\":\"2024-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7207466987,\"date\":\"2024-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.755,\"date\":\"2024-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7211671535,\"date\":\"2024-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.704,\"date\":\"2024-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.721585649,\"date\":\"2024-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.688,\"date\":\"2024-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7220021852,\"date\":\"2024-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.651,\"date\":\"2024-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.722416762,\"date\":\"2024-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.625,\"date\":\"2024-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7228293794,\"date\":\"2024-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.555,\"date\":\"2024-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7232400376,\"date\":\"2024-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.526,\"date\":\"2024-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7236487363,\"date\":\"2024-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.539,\"date\":\"2024-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7240554758,\"date\":\"2024-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.544,\"date\":\"2024-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7244602558,\"date\":\"2024-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.584,\"date\":\"2024-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7248630766,\"date\":\"2024-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.631,\"date\":\"2024-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7252639379,\"date\":\"2024-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.553,\"date\":\"2024-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.72566284,\"date\":\"2024-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.573,\"date\":\"2024-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7260597827,\"date\":\"2024-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.536,\"date\":\"2024-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.726454766,\"date\":\"2024-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.521,\"date\":\"2024-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.72684779,\"date\":\"2024-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.491,\"date\":\"2024-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7272388547,\"date\":\"2024-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.539,\"date\":\"2024-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.72762796,\"date\":\"2024-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.54,\"date\":\"2024-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7280151059,\"date\":\"2024-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.458,\"date\":\"2024-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7284002925,\"date\":\"2024-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.494,\"date\":\"2024-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7287835198,\"date\":\"2024-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.476,\"date\":\"2024-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7291647877,\"date\":\"2024-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.503,\"date\":\"2024-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7295440963,\"date\":\"2024-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.561,\"date\":\"2025-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7299214455,\"date\":\"2025-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.602,\"date\":\"2025-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7302968354,\"date\":\"2025-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.715,\"date\":\"2025-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7306702659,\"date\":\"2025-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.659,\"date\":\"2025-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7310417371,\"date\":\"2025-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.66,\"date\":\"2025-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7314112489,\"date\":\"2025-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.665,\"date\":\"2025-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7317788014,\"date\":\"2025-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.677,\"date\":\"2025-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7321443945,\"date\":\"2025-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.697,\"date\":\"2025-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7325080283,\"date\":\"2025-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.635,\"date\":\"2025-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7328697027,\"date\":\"2025-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.582,\"date\":\"2025-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7332294178,\"date\":\"2025-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.549,\"date\":\"2025-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7335871736,\"date\":\"2025-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.567,\"date\":\"2025-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.73394297,\"date\":\"2025-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.592,\"date\":\"2025-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.734296807,\"date\":\"2025-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.639,\"date\":\"2025-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7346486848,\"date\":\"2025-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.579,\"date\":\"2025-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7349986031,\"date\":\"2025-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.534,\"date\":\"2025-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7353465621,\"date\":\"2025-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.514,\"date\":\"2025-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7356925618,\"date\":\"2025-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.497,\"date\":\"2025-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7360366021,\"date\":\"2025-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.476,\"date\":\"2025-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7363786831,\"date\":\"2025-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.536,\"date\":\"2025-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7367188047,\"date\":\"2025-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.487,\"date\":\"2025-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.737056967,\"date\":\"2025-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.451,\"date\":\"2025-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7373931699,\"date\":\"2025-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.471,\"date\":\"2025-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7377274135,\"date\":\"2025-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.571,\"date\":\"2025-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7380596978,\"date\":\"2025-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.775,\"date\":\"2025-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"original\"},{\"avg_price\":3.7383900227,\"date\":\"2025-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7389982849,\"date\":\"2025-07-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7393230117,\"date\":\"2025-07-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7396457791,\"date\":\"2025-07-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7399665871,\"date\":\"2025-07-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7402854359,\"date\":\"2025-08-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7406023252,\"date\":\"2025-08-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7409172553,\"date\":\"2025-08-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7412302259,\"date\":\"2025-08-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7415412373,\"date\":\"2025-08-31\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7418502892,\"date\":\"2025-09-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7421573819,\"date\":\"2025-09-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7424625152,\"date\":\"2025-09-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7427656891,\"date\":\"2025-09-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7430669037,\"date\":\"2025-10-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.743366159,\"date\":\"2025-10-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7436634549,\"date\":\"2025-10-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7439587914,\"date\":\"2025-10-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7442521686,\"date\":\"2025-11-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7445435865,\"date\":\"2025-11-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.744833045,\"date\":\"2025-11-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7451205442,\"date\":\"2025-11-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.745406084,\"date\":\"2025-11-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7456896645,\"date\":\"2025-12-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7459712856,\"date\":\"2025-12-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7462509474,\"date\":\"2025-12-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7465286498,\"date\":\"2025-12-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7468043929,\"date\":\"2026-01-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7470781766,\"date\":\"2026-01-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.747350001,\"date\":\"2026-01-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7476198661,\"date\":\"2026-01-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7478877718,\"date\":\"2026-02-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7481537181,\"date\":\"2026-02-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7484177051,\"date\":\"2026-02-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7486797328,\"date\":\"2026-02-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7489398011,\"date\":\"2026-03-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.74919791,\"date\":\"2026-03-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7494540597,\"date\":\"2026-03-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7497082499,\"date\":\"2026-03-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7499604808,\"date\":\"2026-03-29\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7502107524,\"date\":\"2026-04-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7504590646,\"date\":\"2026-04-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7507054175,\"date\":\"2026-04-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7509498111,\"date\":\"2026-04-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7511922452,\"date\":\"2026-05-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7514327201,\"date\":\"2026-05-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7516712356,\"date\":\"2026-05-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7519077917,\"date\":\"2026-05-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7521423885,\"date\":\"2026-05-31\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.752375026,\"date\":\"2026-06-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7526057041,\"date\":\"2026-06-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7528344228,\"date\":\"2026-06-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7530611823,\"date\":\"2026-06-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7532859823,\"date\":\"2026-07-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.753508823,\"date\":\"2026-07-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7537297044,\"date\":\"2026-07-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7539486264,\"date\":\"2026-07-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7541655891,\"date\":\"2026-08-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7543805924,\"date\":\"2026-08-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7545936364,\"date\":\"2026-08-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7548047211,\"date\":\"2026-08-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7550138463,\"date\":\"2026-08-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7552210123,\"date\":\"2026-09-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7554262189,\"date\":\"2026-09-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7556294661,\"date\":\"2026-09-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.755830754,\"date\":\"2026-09-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7560300826,\"date\":\"2026-10-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7562274518,\"date\":\"2026-10-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7564228617,\"date\":\"2026-10-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7566163122,\"date\":\"2026-10-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7568078033,\"date\":\"2026-11-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7569973352,\"date\":\"2026-11-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7571849076,\"date\":\"2026-11-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7573705208,\"date\":\"2026-11-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7575541745,\"date\":\"2026-11-29\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.757735869,\"date\":\"2026-12-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7579156041,\"date\":\"2026-12-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7580933798,\"date\":\"2026-12-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7582691962,\"date\":\"2026-12-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7584430532,\"date\":\"2027-01-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7586149509,\"date\":\"2027-01-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7587848893,\"date\":\"2027-01-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7589528683,\"date\":\"2027-01-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7591188879,\"date\":\"2027-01-31\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7592829482,\"date\":\"2027-02-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7594450492,\"date\":\"2027-02-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7596051908,\"date\":\"2027-02-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7597633731,\"date\":\"2027-02-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.759919596,\"date\":\"2027-03-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7600738596,\"date\":\"2027-03-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7602261638,\"date\":\"2027-03-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7603765087,\"date\":\"2027-03-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7605248942,\"date\":\"2027-04-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7606713204,\"date\":\"2027-04-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7608157873,\"date\":\"2027-04-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7609582948,\"date\":\"2027-04-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7610988429,\"date\":\"2027-05-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7612374317,\"date\":\"2027-05-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7613740612,\"date\":\"2027-05-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7615087313,\"date\":\"2027-05-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.761641442,\"date\":\"2027-05-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7617721934,\"date\":\"2027-06-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7619009855,\"date\":\"2027-06-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7620278182,\"date\":\"2027-06-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7621526916,\"date\":\"2027-06-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7622756056,\"date\":\"2027-07-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7623965603,\"date\":\"2027-07-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7625155556,\"date\":\"2027-07-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7626325916,\"date\":\"2027-07-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7627476682,\"date\":\"2027-08-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7628607855,\"date\":\"2027-08-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7629719435,\"date\":\"2027-08-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7630811421,\"date\":\"2027-08-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7631883813,\"date\":\"2027-08-29\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7632936612,\"date\":\"2027-09-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7633969818,\"date\":\"2027-09-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.763498343,\"date\":\"2027-09-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7635977448,\"date\":\"2027-09-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7636951874,\"date\":\"2027-10-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7637906705,\"date\":\"2027-10-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7638841943,\"date\":\"2027-10-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7639757588,\"date\":\"2027-10-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7640653639,\"date\":\"2027-10-31\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7641530097,\"date\":\"2027-11-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7642386961,\"date\":\"2027-11-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7643224232,\"date\":\"2027-11-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.764404191,\"date\":\"2027-11-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7644839994,\"date\":\"2027-12-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7645618484,\"date\":\"2027-12-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7646377381,\"date\":\"2027-12-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7647116685,\"date\":\"2027-12-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7647836395,\"date\":\"2028-01-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7648536511,\"date\":\"2028-01-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7649217034,\"date\":\"2028-01-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7649877964,\"date\":\"2028-01-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.76505193,\"date\":\"2028-01-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7651141043,\"date\":\"2028-02-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7651743192,\"date\":\"2028-02-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7652325748,\"date\":\"2028-02-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.765288871,\"date\":\"2028-02-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7653432079,\"date\":\"2028-03-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7653955854,\"date\":\"2028-03-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7654460036,\"date\":\"2028-03-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7654944624,\"date\":\"2028-03-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7655409619,\"date\":\"2028-04-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7655855021,\"date\":\"2028-04-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7656280829,\"date\":\"2028-04-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7656687043,\"date\":\"2028-04-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7657073664,\"date\":\"2028-04-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7657440692,\"date\":\"2028-05-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7657788126,\"date\":\"2028-05-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7658115967,\"date\":\"2028-05-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7658424214,\"date\":\"2028-05-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7658712868,\"date\":\"2028-06-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7658981928,\"date\":\"2028-06-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7659231395,\"date\":\"2028-06-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7659461268,\"date\":\"2028-06-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7659671548,\"date\":\"2028-07-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7659862234,\"date\":\"2028-07-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660033327,\"date\":\"2028-07-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660184826,\"date\":\"2028-07-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660316732,\"date\":\"2028-07-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660429045,\"date\":\"2028-08-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660521764,\"date\":\"2028-08-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660594889,\"date\":\"2028-08-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660648422,\"date\":\"2028-08-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.766068236,\"date\":\"2028-09-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660696705,\"date\":\"2028-09-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660691457,\"date\":\"2028-09-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660666615,\"date\":\"2028-09-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.766062218,\"date\":\"2028-10-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660558151,\"date\":\"2028-10-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660474529,\"date\":\"2028-10-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660371313,\"date\":\"2028-10-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660248504,\"date\":\"2028-10-29\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660106101,\"date\":\"2028-11-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7659944105,\"date\":\"2028-11-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7659762516,\"date\":\"2028-11-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7659561333,\"date\":\"2028-11-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7659340556,\"date\":\"2028-12-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7659100186,\"date\":\"2028-12-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7658840223,\"date\":\"2028-12-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7658560666,\"date\":\"2028-12-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7658261516,\"date\":\"2028-12-31\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7657942772,\"date\":\"2029-01-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7657604435,\"date\":\"2029-01-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7657246504,\"date\":\"2029-01-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7656868979,\"date\":\"2029-01-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7656471862,\"date\":\"2029-02-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7656055151,\"date\":\"2029-02-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7655618846,\"date\":\"2029-02-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7655162948,\"date\":\"2029-02-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7654687456,\"date\":\"2029-03-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7654192371,\"date\":\"2029-03-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7653677693,\"date\":\"2029-03-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7653143421,\"date\":\"2029-03-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7652589555,\"date\":\"2029-04-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7652016096,\"date\":\"2029-04-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7651423044,\"date\":\"2029-04-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7650810398,\"date\":\"2029-04-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7650178159,\"date\":\"2029-04-29\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7649526326,\"date\":\"2029-05-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7648854899,\"date\":\"2029-05-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.764816388,\"date\":\"2029-05-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7647453266,\"date\":\"2029-05-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.764672306,\"date\":\"2029-06-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.764597326,\"date\":\"2029-06-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7645203866,\"date\":\"2029-06-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7644414879,\"date\":\"2029-06-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7643606298,\"date\":\"2029-07-01\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7642778124,\"date\":\"2029-07-08\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7641930357,\"date\":\"2029-07-15\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7641062996,\"date\":\"2029-07-22\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7640176041,\"date\":\"2029-07-29\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7639269493,\"date\":\"2029-08-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7638343352,\"date\":\"2029-08-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7637397617,\"date\":\"2029-08-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7636432289,\"date\":\"2029-08-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7635447367,\"date\":\"2029-09-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7634442852,\"date\":\"2029-09-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7633418743,\"date\":\"2029-09-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7632375041,\"date\":\"2029-09-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7631311745,\"date\":\"2029-09-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7630228856,\"date\":\"2029-10-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7629126373,\"date\":\"2029-10-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7628004297,\"date\":\"2029-10-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7626862628,\"date\":\"2029-10-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7625701365,\"date\":\"2029-11-04\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7624520508,\"date\":\"2029-11-11\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7623320058,\"date\":\"2029-11-18\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7622100015,\"date\":\"2029-11-25\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7620860378,\"date\":\"2029-12-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7619601147,\"date\":\"2029-12-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7618322324,\"date\":\"2029-12-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7617023906,\"date\":\"2029-12-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7615705895,\"date\":\"2029-12-30\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7614368291,\"date\":\"2030-01-06\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7613011094,\"date\":\"2030-01-13\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7611634302,\"date\":\"2030-01-20\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7610237918,\"date\":\"2030-01-27\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.760882194,\"date\":\"2030-02-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7607386368,\"date\":\"2030-02-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7605931203,\"date\":\"2030-02-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7604456444,\"date\":\"2030-02-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7602962092,\"date\":\"2030-03-03\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7601448147,\"date\":\"2030-03-10\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7599914608,\"date\":\"2030-03-17\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7598361476,\"date\":\"2030-03-24\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.759678875,\"date\":\"2030-03-31\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.759519643,\"date\":\"2030-04-07\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7593584517,\"date\":\"2030-04-14\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7591953011,\"date\":\"2030-04-21\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7590301911,\"date\":\"2030-04-28\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7588631218,\"date\":\"2030-05-05\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7586940931,\"date\":\"2030-05-12\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7585231051,\"date\":\"2030-05-19\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7583501578,\"date\":\"2030-05-26\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7581752511,\"date\":\"2030-06-02\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.757998385,\"date\":\"2030-06-09\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7578195596,\"date\":\"2030-06-16\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7576387748,\"date\":\"2030-06-23\",\"fuel\":\"diesel\",\"is_predicted\":\"forecasting\"},{\"avg_price\":1.191,\"date\":\"1990-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6232239578,\"date\":\"1990-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.245,\"date\":\"1990-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6257036097,\"date\":\"1990-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.242,\"date\":\"1990-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.628182385,\"date\":\"1990-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.252,\"date\":\"1990-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6306602838,\"date\":\"1990-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.266,\"date\":\"1990-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.633137306,\"date\":\"1990-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.272,\"date\":\"1990-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6356134516,\"date\":\"1990-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.321,\"date\":\"1990-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6380887207,\"date\":\"1990-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.333,\"date\":\"1990-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6405631132,\"date\":\"1990-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.339,\"date\":\"1990-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6430366292,\"date\":\"1990-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.345,\"date\":\"1990-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6455092686,\"date\":\"1990-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.339,\"date\":\"1990-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6479810315,\"date\":\"1990-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.334,\"date\":\"1990-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6504519178,\"date\":\"1990-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.328,\"date\":\"1990-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6529219276,\"date\":\"1990-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.323,\"date\":\"1990-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6553910607,\"date\":\"1990-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.311,\"date\":\"1990-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6578593174,\"date\":\"1990-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.341,\"date\":\"1990-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6603266975,\"date\":\"1990-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.192,\"date\":\"1991-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6775738144,\"date\":\"1991-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.168,\"date\":\"1991-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.680034182,\"date\":\"1991-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.139,\"date\":\"1991-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6824936731,\"date\":\"1991-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1991-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6849522876,\"date\":\"1991-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.078,\"date\":\"1991-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6874100256,\"date\":\"1991-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.054,\"date\":\"1991-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6898668869,\"date\":\"1991-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.025,\"date\":\"1991-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6923228718,\"date\":\"1991-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.045,\"date\":\"1991-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6947779801,\"date\":\"1991-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.043,\"date\":\"1991-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.6972322118,\"date\":\"1991-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.047,\"date\":\"1991-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.699685567,\"date\":\"1991-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.052,\"date\":\"1991-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7021380456,\"date\":\"1991-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.066,\"date\":\"1991-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7045896476,\"date\":\"1991-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.069,\"date\":\"1991-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7070403731,\"date\":\"1991-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.09,\"date\":\"1991-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7094902221,\"date\":\"1991-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.104,\"date\":\"1991-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7119391944,\"date\":\"1991-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.113,\"date\":\"1991-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7143872903,\"date\":\"1991-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.121,\"date\":\"1991-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7168345095,\"date\":\"1991-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.129,\"date\":\"1991-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7192808522,\"date\":\"1991-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.14,\"date\":\"1991-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7217263184,\"date\":\"1991-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.138,\"date\":\"1991-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.724170908,\"date\":\"1991-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.135,\"date\":\"1991-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.726614621,\"date\":\"1991-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1991-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7290574575,\"date\":\"1991-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.114,\"date\":\"1991-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7314994175,\"date\":\"1991-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.104,\"date\":\"1991-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7339405008,\"date\":\"1991-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.098,\"date\":\"1991-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7363807076,\"date\":\"1991-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.094,\"date\":\"1991-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7388200379,\"date\":\"1991-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.091,\"date\":\"1991-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7412584916,\"date\":\"1991-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.091,\"date\":\"1991-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7436960687,\"date\":\"1991-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1991-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7461327693,\"date\":\"1991-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.112,\"date\":\"1991-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7485685934,\"date\":\"1991-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1991-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7510035408,\"date\":\"1991-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1991-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7534376117,\"date\":\"1991-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.127,\"date\":\"1991-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7558708061,\"date\":\"1991-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.12,\"date\":\"1991-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7583031239,\"date\":\"1991-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.11,\"date\":\"1991-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7607345652,\"date\":\"1991-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.097,\"date\":\"1991-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7631651298,\"date\":\"1991-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.092,\"date\":\"1991-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.765594818,\"date\":\"1991-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.089,\"date\":\"1991-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7680236295,\"date\":\"1991-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.084,\"date\":\"1991-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7704515646,\"date\":\"1991-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.088,\"date\":\"1991-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.772878623,\"date\":\"1991-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.091,\"date\":\"1991-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7753048049,\"date\":\"1991-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.091,\"date\":\"1991-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7777301103,\"date\":\"1991-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.102,\"date\":\"1991-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7801545391,\"date\":\"1991-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.104,\"date\":\"1991-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7825780913,\"date\":\"1991-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1991-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.785000767,\"date\":\"1991-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.099,\"date\":\"1991-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7874225661,\"date\":\"1991-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.091,\"date\":\"1991-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7898434887,\"date\":\"1991-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.075,\"date\":\"1991-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7922635347,\"date\":\"1991-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.063,\"date\":\"1991-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7946827041,\"date\":\"1991-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.053,\"date\":\"1991-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.797100997,\"date\":\"1991-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.042,\"date\":\"1992-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.7995184133,\"date\":\"1992-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.026,\"date\":\"1992-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8019349531,\"date\":\"1992-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.014,\"date\":\"1992-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8043506163,\"date\":\"1992-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.006,\"date\":\"1992-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.806765403,\"date\":\"1992-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":0.995,\"date\":\"1992-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8091793131,\"date\":\"1992-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.004,\"date\":\"1992-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8115923467,\"date\":\"1992-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.011,\"date\":\"1992-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8140045037,\"date\":\"1992-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.014,\"date\":\"1992-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8164157841,\"date\":\"1992-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.012,\"date\":\"1992-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.818826188,\"date\":\"1992-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.013,\"date\":\"1992-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8212357153,\"date\":\"1992-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.01,\"date\":\"1992-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8236443661,\"date\":\"1992-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.015,\"date\":\"1992-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8260521403,\"date\":\"1992-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.013,\"date\":\"1992-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8284590379,\"date\":\"1992-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.026,\"date\":\"1992-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.830865059,\"date\":\"1992-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.051,\"date\":\"1992-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8332702036,\"date\":\"1992-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.058,\"date\":\"1992-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8356744716,\"date\":\"1992-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.072,\"date\":\"1992-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.838077863,\"date\":\"1992-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.089,\"date\":\"1992-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8404803779,\"date\":\"1992-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.102,\"date\":\"1992-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8428820162,\"date\":\"1992-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.118,\"date\":\"1992-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8452827779,\"date\":\"1992-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.12,\"date\":\"1992-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8476826631,\"date\":\"1992-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.128,\"date\":\"1992-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8500816718,\"date\":\"1992-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.143,\"date\":\"1992-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8524798038,\"date\":\"1992-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.151,\"date\":\"1992-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8548770594,\"date\":\"1992-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.153,\"date\":\"1992-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8572734383,\"date\":\"1992-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.149,\"date\":\"1992-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8596689408,\"date\":\"1992-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.147,\"date\":\"1992-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8620635666,\"date\":\"1992-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.139,\"date\":\"1992-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8644573159,\"date\":\"1992-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.132,\"date\":\"1992-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8668501887,\"date\":\"1992-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.128,\"date\":\"1992-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8692421848,\"date\":\"1992-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.126,\"date\":\"1992-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8716333045,\"date\":\"1992-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.123,\"date\":\"1992-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8740235475,\"date\":\"1992-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.116,\"date\":\"1992-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8764129141,\"date\":\"1992-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.123,\"date\":\"1992-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.878801404,\"date\":\"1992-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.121,\"date\":\"1992-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8811890174,\"date\":\"1992-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.121,\"date\":\"1992-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8835757543,\"date\":\"1992-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.124,\"date\":\"1992-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8859616146,\"date\":\"1992-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.123,\"date\":\"1992-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8883465983,\"date\":\"1992-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.118,\"date\":\"1992-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8907307055,\"date\":\"1992-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.115,\"date\":\"1992-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8931139361,\"date\":\"1992-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.115,\"date\":\"1992-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8954962901,\"date\":\"1992-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.113,\"date\":\"1992-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.8978777676,\"date\":\"1992-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.113,\"date\":\"1992-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9002583686,\"date\":\"1992-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.12,\"date\":\"1992-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.902638093,\"date\":\"1992-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.12,\"date\":\"1992-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9050169408,\"date\":\"1992-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.112,\"date\":\"1992-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9073949121,\"date\":\"1992-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1992-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9097720068,\"date\":\"1992-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.098,\"date\":\"1992-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.912148225,\"date\":\"1992-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.089,\"date\":\"1992-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9145235666,\"date\":\"1992-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.078,\"date\":\"1992-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9168980316,\"date\":\"1992-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.074,\"date\":\"1992-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9192716201,\"date\":\"1992-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.069,\"date\":\"1992-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9216443321,\"date\":\"1992-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.065,\"date\":\"1993-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9240161674,\"date\":\"1993-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.066,\"date\":\"1993-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9263871263,\"date\":\"1993-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.061,\"date\":\"1993-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9287572085,\"date\":\"1993-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.055,\"date\":\"1993-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9311264142,\"date\":\"1993-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.055,\"date\":\"1993-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9334947434,\"date\":\"1993-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.062,\"date\":\"1993-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.935862196,\"date\":\"1993-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.053,\"date\":\"1993-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.938228772,\"date\":\"1993-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.047,\"date\":\"1993-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9405944715,\"date\":\"1993-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.042,\"date\":\"1993-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9429592944,\"date\":\"1993-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.048,\"date\":\"1993-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9453232408,\"date\":\"1993-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.058,\"date\":\"1993-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9476863106,\"date\":\"1993-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.056,\"date\":\"1993-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9500485038,\"date\":\"1993-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.057,\"date\":\"1993-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9524098205,\"date\":\"1993-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.068,\"date\":\"1993-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9547702607,\"date\":\"1993-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.079,\"date\":\"1993-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9571298243,\"date\":\"1993-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.079,\"date\":\"1993-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9594885113,\"date\":\"1993-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.086,\"date\":\"1993-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9618463218,\"date\":\"1993-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.086,\"date\":\"1993-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9642032557,\"date\":\"1993-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.097,\"date\":\"1993-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.966559313,\"date\":\"1993-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1993-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9689144938,\"date\":\"1993-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1993-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9712687981,\"date\":\"1993-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.107,\"date\":\"1993-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9736222257,\"date\":\"1993-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.104,\"date\":\"1993-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9759747769,\"date\":\"1993-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.101,\"date\":\"1993-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9783264514,\"date\":\"1993-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.095,\"date\":\"1993-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9806772495,\"date\":\"1993-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.089,\"date\":\"1993-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9830271709,\"date\":\"1993-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.086,\"date\":\"1993-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9853762158,\"date\":\"1993-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.081,\"date\":\"1993-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9877243842,\"date\":\"1993-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.075,\"date\":\"1993-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9900716759,\"date\":\"1993-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.069,\"date\":\"1993-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9924180912,\"date\":\"1993-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.062,\"date\":\"1993-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9947636298,\"date\":\"1993-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.06,\"date\":\"1993-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.997108292,\"date\":\"1993-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.059,\"date\":\"1993-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":0.9994520775,\"date\":\"1993-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.065,\"date\":\"1993-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0017949865,\"date\":\"1993-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.062,\"date\":\"1993-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.004137019,\"date\":\"1993-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.055,\"date\":\"1993-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0064781748,\"date\":\"1993-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.051,\"date\":\"1993-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0088184542,\"date\":\"1993-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.045,\"date\":\"1993-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.011157857,\"date\":\"1993-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.047,\"date\":\"1993-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0134963832,\"date\":\"1993-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.092,\"date\":\"1993-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0158340328,\"date\":\"1993-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.09,\"date\":\"1993-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0181708059,\"date\":\"1993-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.093,\"date\":\"1993-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0205067025,\"date\":\"1993-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.092,\"date\":\"1993-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0228417225,\"date\":\"1993-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.084,\"date\":\"1993-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0251758659,\"date\":\"1993-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.075,\"date\":\"1993-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0275091328,\"date\":\"1993-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.064,\"date\":\"1993-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0298415231,\"date\":\"1993-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.058,\"date\":\"1993-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0321730369,\"date\":\"1993-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.051,\"date\":\"1993-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0345036741,\"date\":\"1993-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.036,\"date\":\"1993-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0368334347,\"date\":\"1993-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.018,\"date\":\"1993-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0391623188,\"date\":\"1993-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.003,\"date\":\"1993-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0414903263,\"date\":\"1993-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":0.999,\"date\":\"1993-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0438174573,\"date\":\"1993-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":0.992,\"date\":\"1994-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0461437117,\"date\":\"1994-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":0.995,\"date\":\"1994-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0484690896,\"date\":\"1994-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.001,\"date\":\"1994-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0507935909,\"date\":\"1994-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":0.999,\"date\":\"1994-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0531172157,\"date\":\"1994-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.005,\"date\":\"1994-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0554399639,\"date\":\"1994-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.007,\"date\":\"1994-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0577618355,\"date\":\"1994-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.016,\"date\":\"1994-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0600828306,\"date\":\"1994-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.009,\"date\":\"1994-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0624029491,\"date\":\"1994-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.004,\"date\":\"1994-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0647221911,\"date\":\"1994-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.007,\"date\":\"1994-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0670405565,\"date\":\"1994-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.005,\"date\":\"1994-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0693580453,\"date\":\"1994-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.007,\"date\":\"1994-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0716746576,\"date\":\"1994-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.012,\"date\":\"1994-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0739903934,\"date\":\"1994-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.011,\"date\":\"1994-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0763052525,\"date\":\"1994-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.028,\"date\":\"1994-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0786192352,\"date\":\"1994-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.033,\"date\":\"1994-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0809323412,\"date\":\"1994-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.037,\"date\":\"1994-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0832445707,\"date\":\"1994-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.04,\"date\":\"1994-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0855559237,\"date\":\"1994-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.045,\"date\":\"1994-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0878664001,\"date\":\"1994-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.046,\"date\":\"1994-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0901759999,\"date\":\"1994-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.05,\"date\":\"1994-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0924847232,\"date\":\"1994-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.056,\"date\":\"1994-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0947925699,\"date\":\"1994-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.065,\"date\":\"1994-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0970995401,\"date\":\"1994-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.073,\"date\":\"1994-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.0994056337,\"date\":\"1994-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.079,\"date\":\"1994-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1017108508,\"date\":\"1994-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.095,\"date\":\"1994-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1040151913,\"date\":\"1994-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.097,\"date\":\"1994-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1063186552,\"date\":\"1994-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.103,\"date\":\"1994-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1086212426,\"date\":\"1994-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.109,\"date\":\"1994-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1109229534,\"date\":\"1994-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.114,\"date\":\"1994-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1132237877,\"date\":\"1994-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.13,\"date\":\"1994-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1155237454,\"date\":\"1994-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.157,\"date\":\"1994-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1178228266,\"date\":\"1994-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.161,\"date\":\"1994-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1201210312,\"date\":\"1994-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.165,\"date\":\"1994-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1224183592,\"date\":\"1994-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.161,\"date\":\"1994-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1247148107,\"date\":\"1994-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.156,\"date\":\"1994-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1270103857,\"date\":\"1994-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.15,\"date\":\"1994-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.129305084,\"date\":\"1994-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.14,\"date\":\"1994-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1315989058,\"date\":\"1994-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.129,\"date\":\"1994-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1338918511,\"date\":\"1994-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.12,\"date\":\"1994-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1361839198,\"date\":\"1994-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.114,\"date\":\"1994-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.138475112,\"date\":\"1994-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.106,\"date\":\"1994-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1407654275,\"date\":\"1994-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.107,\"date\":\"1994-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1430548666,\"date\":\"1994-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.121,\"date\":\"1994-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1453434291,\"date\":\"1994-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.123,\"date\":\"1994-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.147631115,\"date\":\"1994-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.122,\"date\":\"1994-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1499179243,\"date\":\"1994-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.113,\"date\":\"1994-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1522038571,\"date\":\"1994-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2025833333,\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1544889134,\"date\":\"1994-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2031666667,\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1567730931,\"date\":\"1994-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.19275,\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1590563962,\"date\":\"1994-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1849166667,\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1613388228,\"date\":\"1994-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1778333333,\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1636203728,\"date\":\"1994-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1921666667,\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1659010463,\"date\":\"1995-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1970833333,\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1681808432,\"date\":\"1995-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.19125,\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1704597635,\"date\":\"1995-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1944166667,\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1727378073,\"date\":\"1995-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.192,\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1750149746,\"date\":\"1995-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.187,\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1772912652,\"date\":\"1995-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1839166667,\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1795666794,\"date\":\"1995-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1785,\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1818412169,\"date\":\"1995-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.182,\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1841148779,\"date\":\"1995-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.18225,\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1863876624,\"date\":\"1995-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.17525,\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1886595703,\"date\":\"1995-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.174,\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1909306016,\"date\":\"1995-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1771666667,\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1932007564,\"date\":\"1995-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1860833333,\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1954700346,\"date\":\"1995-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2000833333,\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.1977384363,\"date\":\"1995-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2124166667,\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2000059614,\"date\":\"1995-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2325833333,\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.20227261,\"date\":\"1995-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.24275,\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.204538382,\"date\":\"1995-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2643333333,\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2068032774,\"date\":\"1995-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.274,\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2090672963,\"date\":\"1995-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2905833333,\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2113304386,\"date\":\"1995-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.29425,\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2135927044,\"date\":\"1995-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2939166667,\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2158540936,\"date\":\"1995-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2913333333,\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2181146062,\"date\":\"1995-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.28575,\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2203742423,\"date\":\"1995-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2798333333,\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2226330019,\"date\":\"1995-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2730833333,\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2248908849,\"date\":\"1995-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2644166667,\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2271478913,\"date\":\"1995-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2545833333,\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2294040212,\"date\":\"1995-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2445833333,\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2316592745,\"date\":\"1995-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2321666667,\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2339136512,\"date\":\"1995-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2270833333,\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2361671514,\"date\":\"1995-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2228333333,\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2384197751,\"date\":\"1995-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2206666667,\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2406715222,\"date\":\"1995-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.21325,\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2429223927,\"date\":\"1995-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2110833333,\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2451723867,\"date\":\"1995-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2075833333,\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2474215041,\"date\":\"1995-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2063333333,\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.249669745,\"date\":\"1995-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2041666667,\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2519171093,\"date\":\"1995-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2005833333,\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.254163597,\"date\":\"1995-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1949166667,\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2564092082,\"date\":\"1995-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1870833333,\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2586539428,\"date\":\"1995-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1790833333,\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2608978009,\"date\":\"1995-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1693333333,\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2631407824,\"date\":\"1995-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.16475,\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2653828874,\"date\":\"1995-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1621666667,\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2676241158,\"date\":\"1995-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.158,\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2698644676,\"date\":\"1995-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1574166667,\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2721039429,\"date\":\"1995-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1586666667,\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2743425417,\"date\":\"1995-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1598333333,\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2765802638,\"date\":\"1995-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1716666667,\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2788171095,\"date\":\"1995-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1763333333,\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2810530785,\"date\":\"1995-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.178,\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.283288171,\"date\":\"1996-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1848333333,\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.285522387,\"date\":\"1996-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1918333333,\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2877557264,\"date\":\"1996-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.18725,\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2899881892,\"date\":\"1996-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.18275,\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2922197755,\"date\":\"1996-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1796666667,\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2944504852,\"date\":\"1996-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1765833333,\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.2966803184,\"date\":\"1996-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1820833333,\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.298909275,\"date\":\"1996-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.20075,\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.301137355,\"date\":\"1996-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.216,\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3033645585,\"date\":\"1996-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2185,\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3055908855,\"date\":\"1996-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2275833333,\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3078163359,\"date\":\"1996-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2536666667,\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3100409097,\"date\":\"1996-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2685833333,\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3122646069,\"date\":\"1996-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2933333333,\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3144874277,\"date\":\"1996-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3344166667,\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3167093718,\"date\":\"1996-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.35825,\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3189304394,\"date\":\"1996-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3765833333,\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3211506304,\"date\":\"1996-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3811666667,\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3233699449,\"date\":\"1996-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.38375,\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3255883829,\"date\":\"1996-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3891666667,\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3278059442,\"date\":\"1996-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.37975,\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.330022629,\"date\":\"1996-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3785833333,\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3322384373,\"date\":\"1996-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.36975,\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.334453369,\"date\":\"1996-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3625,\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3366674241,\"date\":\"1996-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3511666667,\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3388806027,\"date\":\"1996-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.34025,\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3410929047,\"date\":\"1996-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3360833333,\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3433043302,\"date\":\"1996-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.332,\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3455148791,\"date\":\"1996-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3288333333,\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3477245515,\"date\":\"1996-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3199166667,\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3499333473,\"date\":\"1996-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.30975,\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3521412665,\"date\":\"1996-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3026666667,\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3543483092,\"date\":\"1996-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3000833333,\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3565544753,\"date\":\"1996-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3024166667,\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3587597649,\"date\":\"1996-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2905,\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3609641779,\"date\":\"1996-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2938333333,\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3631677144,\"date\":\"1996-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2966666667,\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3653703743,\"date\":\"1996-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.29675,\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3675721576,\"date\":\"1996-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2916666667,\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3697730644,\"date\":\"1996-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2855,\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3719730947,\"date\":\"1996-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2918333333,\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3741722483,\"date\":\"1996-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2916666667,\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3763705255,\"date\":\"1996-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2986666667,\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.378567926,\"date\":\"1996-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3048333333,\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.38076445,\"date\":\"1996-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3065833333,\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3829600975,\"date\":\"1996-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.31575,\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3851548684,\"date\":\"1996-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.32175,\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3873487627,\"date\":\"1996-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3219166667,\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3895417805,\"date\":\"1996-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.32275,\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3917339217,\"date\":\"1996-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.32075,\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3939251864,\"date\":\"1996-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3175,\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.3961155745,\"date\":\"1996-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3154166667,\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.398305086,\"date\":\"1996-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.31525,\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.400493721,\"date\":\"1997-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3293333333,\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4026814794,\"date\":\"1997-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3296666667,\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4048683613,\"date\":\"1997-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3268333333,\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4070543666,\"date\":\"1997-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3263333333,\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4092394954,\"date\":\"1997-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3243333333,\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4114237476,\"date\":\"1997-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3195,\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4136071233,\"date\":\"1997-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3165833333,\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4157896224,\"date\":\"1997-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.30825,\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4179712449,\"date\":\"1997-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3035833333,\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4201519909,\"date\":\"1997-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2974166667,\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4223318603,\"date\":\"1997-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2995833333,\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4245108532,\"date\":\"1997-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2985833333,\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4266889695,\"date\":\"1997-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3015833333,\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4288662092,\"date\":\"1997-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2985833333,\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4310425724,\"date\":\"1997-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2971666667,\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4332180591,\"date\":\"1997-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2928333333,\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4353926692,\"date\":\"1997-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2909166667,\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4375664027,\"date\":\"1997-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2889166667,\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4397392597,\"date\":\"1997-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2956666667,\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4419112401,\"date\":\"1997-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3023333333,\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4440823439,\"date\":\"1997-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3034166667,\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4462525712,\"date\":\"1997-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.298,\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.448421922,\"date\":\"1997-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2903333333,\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4505903961,\"date\":\"1997-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2814166667,\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4527579938,\"date\":\"1997-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2731666667,\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4549247148,\"date\":\"1997-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.26925,\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4570905594,\"date\":\"1997-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.26475,\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4592555273,\"date\":\"1997-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.26675,\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4614196187,\"date\":\"1997-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2615833333,\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4635828336,\"date\":\"1997-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.282,\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4657451718,\"date\":\"1997-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3171666667,\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4679066336,\"date\":\"1997-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3226666667,\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4700672187,\"date\":\"1997-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3403333333,\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4722269274,\"date\":\"1997-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3423333333,\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4743857594,\"date\":\"1997-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3435833333,\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4765437149,\"date\":\"1997-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3390833333,\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4787007939,\"date\":\"1997-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3289166667,\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4808569963,\"date\":\"1997-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3160833333,\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4830123221,\"date\":\"1997-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3143333333,\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4851667714,\"date\":\"1997-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3075,\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4873203441,\"date\":\"1997-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2989166667,\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4894730402,\"date\":\"1997-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2889166667,\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4916248598,\"date\":\"1997-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2814166667,\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4937758029,\"date\":\"1997-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2804166667,\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4959258694,\"date\":\"1997-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.27175,\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.4980750593,\"date\":\"1997-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2656666667,\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5002233727,\"date\":\"1997-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2570833333,\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5023708095,\"date\":\"1997-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2458333333,\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5045173698,\"date\":\"1997-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2355833333,\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5066630535,\"date\":\"1997-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2255,\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5088078606,\"date\":\"1997-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2175833333,\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5109517912,\"date\":\"1997-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2095,\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5130948453,\"date\":\"1998-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1999166667,\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5152370227,\"date\":\"1998-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1858333333,\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5173783237,\"date\":\"1998-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1703333333,\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.519518748,\"date\":\"1998-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1635833333,\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5216582958,\"date\":\"1998-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1553333333,\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5237969671,\"date\":\"1998-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1394166667,\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5259347618,\"date\":\"1998-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1393333333,\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5280716799,\"date\":\"1998-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1236666667,\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5302077215,\"date\":\"1998-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1116666667,\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5323428865,\"date\":\"1998-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1015,\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.534477175,\"date\":\"1998-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.093,\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5366105869,\"date\":\"1998-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1211666667,\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5387431222,\"date\":\"1998-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1190833333,\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.540874781,\"date\":\"1998-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1186666667,\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5430055633,\"date\":\"1998-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1206666667,\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.545135469,\"date\":\"1998-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1316666667,\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5472644981,\"date\":\"1998-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1455,\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5493926507,\"date\":\"1998-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1580833333,\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5515199267,\"date\":\"1998-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1619166667,\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5536463261,\"date\":\"1998-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1605833333,\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.555771849,\"date\":\"1998-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1571666667,\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5578964954,\"date\":\"1998-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1628333333,\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5600202652,\"date\":\"1998-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1561666667,\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5621431584,\"date\":\"1998-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.15,\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.564265175,\"date\":\"1998-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1484166667,\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5663863152,\"date\":\"1998-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1486666667,\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5685065787,\"date\":\"1998-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1450833333,\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5706259657,\"date\":\"1998-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1476666667,\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5727444762,\"date\":\"1998-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1401666667,\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.57486211,\"date\":\"1998-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1303333333,\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5769788674,\"date\":\"1998-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1250833333,\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5790947481,\"date\":\"1998-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1194166667,\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5812097524,\"date\":\"1998-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.11275,\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.58332388,\"date\":\"1998-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.107,\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5854371311,\"date\":\"1998-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1015,\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5875495057,\"date\":\"1998-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.09725,\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5896610037,\"date\":\"1998-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1071666667,\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5917716251,\"date\":\"1998-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1075833333,\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.59388137,\"date\":\"1998-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1115,\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.5959902383,\"date\":\"1998-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1158333333,\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.59809823,\"date\":\"1998-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1113333333,\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6002053452,\"date\":\"1998-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1086666667,\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6023115839,\"date\":\"1998-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1045,\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.604416946,\"date\":\"1998-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1028333333,\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6065214315,\"date\":\"1998-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0931666667,\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6086250405,\"date\":\"1998-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0886666667,\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6107277729,\"date\":\"1998-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0763333333,\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6128296288,\"date\":\"1998-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0594166667,\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6149306081,\"date\":\"1998-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.05125,\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6170307108,\"date\":\"1998-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.049,\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.619129937,\"date\":\"1998-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.043,\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6212282867,\"date\":\"1998-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0405833333,\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6233257597,\"date\":\"1999-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0429166667,\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6254223563,\"date\":\"1999-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0458333333,\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6275180762,\"date\":\"1999-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0391666667,\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6296129196,\"date\":\"1999-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0320833333,\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6317068865,\"date\":\"1999-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.02875,\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6337999768,\"date\":\"1999-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0210833333,\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6358921905,\"date\":\"1999-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.012,\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6379835277,\"date\":\"1999-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0169166667,\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6400739883,\"date\":\"1999-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0249166667,\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6421635724,\"date\":\"1999-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.0733333333,\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6442522799,\"date\":\"1999-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1114166667,\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6463401108,\"date\":\"1999-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1826666667,\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6484270652,\"date\":\"1999-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.22625,\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6505131431,\"date\":\"1999-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2495,\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6525983444,\"date\":\"1999-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2458333333,\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6546826691,\"date\":\"1999-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2426666667,\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6567661173,\"date\":\"1999-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.244,\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6588486889,\"date\":\"1999-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2485,\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6609303839,\"date\":\"1999-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2455833333,\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6630112024,\"date\":\"1999-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2296666667,\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6650911444,\"date\":\"1999-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2144166667,\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6671702097,\"date\":\"1999-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.21125,\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6692483986,\"date\":\"1999-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2073333333,\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6713257108,\"date\":\"1999-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2195,\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6734021466,\"date\":\"1999-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2113333333,\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6754777057,\"date\":\"1999-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.22,\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6775523883,\"date\":\"1999-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2401666667,\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6796261944,\"date\":\"1999-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2691666667,\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6816991238,\"date\":\"1999-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.29075,\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6837711768,\"date\":\"1999-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2959166667,\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6858423531,\"date\":\"1999-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3089166667,\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.687912653,\"date\":\"1999-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3348333333,\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6899820762,\"date\":\"1999-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.33425,\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6920506229,\"date\":\"1999-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3328333333,\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6941182931,\"date\":\"1999-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3393333333,\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6961850866,\"date\":\"1999-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3453333333,\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.6982510037,\"date\":\"1999-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3605833333,\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7003160442,\"date\":\"1999-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3545,\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7023802081,\"date\":\"1999-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3503333333,\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7044434954,\"date\":\"1999-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3466666667,\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7065059062,\"date\":\"1999-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3353333333,\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7085674405,\"date\":\"1999-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3331666667,\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7106280982,\"date\":\"1999-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3265833333,\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7126878793,\"date\":\"1999-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3271666667,\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7147467839,\"date\":\"1999-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.34325,\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7168048119,\"date\":\"1999-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.35925,\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7188619634,\"date\":\"1999-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3671666667,\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7209182383,\"date\":\"1999-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3674166667,\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7229736366,\"date\":\"1999-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3680833333,\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7250281584,\"date\":\"1999-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3629166667,\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7270818036,\"date\":\"1999-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3658333333,\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7291345723,\"date\":\"1999-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3645,\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7311864644,\"date\":\"2000-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3575833333,\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.73323748,\"date\":\"2000-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3674166667,\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.735287619,\"date\":\"2000-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3995,\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7373368815,\"date\":\"2000-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4033333333,\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7393852674,\"date\":\"2000-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4104166667,\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7414327767,\"date\":\"2000-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4378333333,\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7434794095,\"date\":\"2000-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4835,\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7455251657,\"date\":\"2000-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5021666667,\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7475700454,\"date\":\"2000-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5858333333,\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7496140485,\"date\":\"2000-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6205833333,\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.751657175,\"date\":\"2000-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.62925,\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.753699425,\"date\":\"2000-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.613,\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7557407985,\"date\":\"2000-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6068333333,\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7577812953,\"date\":\"2000-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5824166667,\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7598209157,\"date\":\"2000-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5545,\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7618596594,\"date\":\"2000-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5449166667,\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7638975266,\"date\":\"2000-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.52925,\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7659345173,\"date\":\"2000-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5560833333,\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7679706314,\"date\":\"2000-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5860833333,\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7700058689,\"date\":\"2000-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6116666667,\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7720402299,\"date\":\"2000-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6254166667,\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7740737143,\"date\":\"2000-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6456666667,\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7761063222,\"date\":\"2000-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6994166667,\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7781380535,\"date\":\"2000-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7399166667,\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7801689083,\"date\":\"2000-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7258333333,\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7821988865,\"date\":\"2000-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7075,\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7842279881,\"date\":\"2000-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6853333333,\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7862562132,\"date\":\"2000-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6488333333,\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7882835617,\"date\":\"2000-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6263333333,\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7903100337,\"date\":\"2000-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5839166667,\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7923356291,\"date\":\"2000-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.573,\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.794360348,\"date\":\"2000-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5595,\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.7963841903,\"date\":\"2000-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5729166667,\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.798407156,\"date\":\"2000-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5854166667,\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8004292452,\"date\":\"2000-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6298333333,\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8024504578,\"date\":\"2000-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6595833333,\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8044707939,\"date\":\"2000-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6579166667,\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8064902534,\"date\":\"2000-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6485,\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8085088364,\"date\":\"2000-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6289166667,\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8105265428,\"date\":\"2000-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.60925,\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8125433726,\"date\":\"2000-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6384166667,\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8145593259,\"date\":\"2000-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6444166667,\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8165744027,\"date\":\"2000-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6425833333,\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8185886028,\"date\":\"2000-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.62675,\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8206019265,\"date\":\"2000-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6224166667,\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8226143735,\"date\":\"2000-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6113333333,\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.824625944,\"date\":\"2000-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6089166667,\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.826636638,\"date\":\"2000-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.58775,\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8286464554,\"date\":\"2000-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5559166667,\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8306553962,\"date\":\"2000-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5295833333,\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8326634605,\"date\":\"2000-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5176666667,\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8346706482,\"date\":\"2000-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5119166667,\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8366769594,\"date\":\"2001-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5254166667,\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.838682394,\"date\":\"2001-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5641666667,\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.840686952,\"date\":\"2001-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.562,\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8426906335,\"date\":\"2001-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.551,\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8446934384,\"date\":\"2001-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5389166667,\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8466953668,\"date\":\"2001-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5669166667,\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8486964187,\"date\":\"2001-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5478333333,\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8506965939,\"date\":\"2001-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.532,\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8526958926,\"date\":\"2001-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5219166667,\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8546943148,\"date\":\"2001-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5171666667,\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8566918604,\"date\":\"2001-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5091666667,\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8586885294,\"date\":\"2001-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.50775,\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8606843219,\"date\":\"2001-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.543,\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8626792378,\"date\":\"2001-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5984166667,\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8646732772,\"date\":\"2001-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6590833333,\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.86666644,\"date\":\"2001-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7113333333,\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8686587262,\"date\":\"2001-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7231666667,\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8706501359,\"date\":\"2001-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7915,\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8726406691,\"date\":\"2001-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8036666667,\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8746303257,\"date\":\"2001-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7833333333,\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8766191057,\"date\":\"2001-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7961666667,\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8786070092,\"date\":\"2001-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7734166667,\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8805940361,\"date\":\"2001-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7493333333,\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8825801864,\"date\":\"2001-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.709,\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8845654602,\"date\":\"2001-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6539166667,\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8865498575,\"date\":\"2001-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.594,\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8885333782,\"date\":\"2001-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5575,\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8905160223,\"date\":\"2001-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.531,\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8924977899,\"date\":\"2001-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.509,\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8944786809,\"date\":\"2001-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4925,\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8964586953,\"date\":\"2001-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4800833333,\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.8984378332,\"date\":\"2001-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.48925,\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9004160946,\"date\":\"2001-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5150833333,\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9023934794,\"date\":\"2001-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5595833333,\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9043699876,\"date\":\"2001-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6145833333,\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9063456193,\"date\":\"2001-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6018333333,\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9083203744,\"date\":\"2001-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6029166667,\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9102942529,\"date\":\"2001-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.56675,\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9122672549,\"date\":\"2001-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5041666667,\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9142393804,\"date\":\"2001-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.44575,\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9162106293,\"date\":\"2001-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4055,\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9181810016,\"date\":\"2001-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3616666667,\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9201504974,\"date\":\"2001-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3309166667,\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9221191166,\"date\":\"2001-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3013333333,\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9240868593,\"date\":\"2001-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2753333333,\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9260537254,\"date\":\"2001-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2565,\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9280197149,\"date\":\"2001-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.217,\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9299848279,\"date\":\"2001-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.19575,\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9319490643,\"date\":\"2001-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1815833333,\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9339124242,\"date\":\"2001-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1470833333,\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9358749075,\"date\":\"2001-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1550833333,\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9378365143,\"date\":\"2001-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.175,\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9397972445,\"date\":\"2001-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1911666667,\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9417570982,\"date\":\"2002-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1951666667,\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9437160753,\"date\":\"2002-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.191,\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9456741758,\"date\":\"2002-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.18775,\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9476313998,\"date\":\"2002-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2014166667,\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9495877472,\"date\":\"2002-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.1946666667,\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9515432181,\"date\":\"2002-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2049166667,\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9534978124,\"date\":\"2002-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.2063333333,\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9554515301,\"date\":\"2002-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.23225,\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9574043713,\"date\":\"2002-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.3095,\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.959356336,\"date\":\"2002-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.37525,\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.961307424,\"date\":\"2002-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4305,\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9632576356,\"date\":\"2002-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4621666667,\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9652069705,\"date\":\"2002-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5031666667,\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9671554289,\"date\":\"2002-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4981666667,\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9691030108,\"date\":\"2002-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4981666667,\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9710497161,\"date\":\"2002-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4885,\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9729955448,\"date\":\"2002-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.49,\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.974940497,\"date\":\"2002-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4839166667,\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9768845726,\"date\":\"2002-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4909166667,\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9788277717,\"date\":\"2002-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4819166667,\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9807700942,\"date\":\"2002-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4848333333,\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9827115402,\"date\":\"2002-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.47,\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9846521096,\"date\":\"2002-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.473,\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9865918024,\"date\":\"2002-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.47825,\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9885306187,\"date\":\"2002-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4840833333,\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9904685584,\"date\":\"2002-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4753333333,\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9924056216,\"date\":\"2002-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4848333333,\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9943418082,\"date\":\"2002-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4994166667,\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9962771183,\"date\":\"2002-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4964166667,\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":1.9982115518,\"date\":\"2002-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.48975,\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0001451087,\"date\":\"2002-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.487,\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0020777891,\"date\":\"2002-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4855833333,\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0040095929,\"date\":\"2002-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.49675,\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0059405202,\"date\":\"2002-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.489,\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0078705709,\"date\":\"2002-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4896666667,\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0097997451,\"date\":\"2002-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4935,\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0117280427,\"date\":\"2002-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4884166667,\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0136554637,\"date\":\"2002-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5038333333,\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0155820082,\"date\":\"2002-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.526,\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0175076761,\"date\":\"2002-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5265,\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0194324675,\"date\":\"2002-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5418333333,\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0213563823,\"date\":\"2002-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.53,\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0232794206,\"date\":\"2002-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5349166667,\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0252015823,\"date\":\"2002-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5301666667,\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0271228675,\"date\":\"2002-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5036666667,\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.029043276,\"date\":\"2002-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4781666667,\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0309628081,\"date\":\"2002-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.4655833333,\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0328814636,\"date\":\"2002-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.46025,\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0347992425,\"date\":\"2002-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.462,\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0367161448,\"date\":\"2002-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.49375,\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0386321706,\"date\":\"2002-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5318333333,\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0405473199,\"date\":\"2002-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5385,\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0424615926,\"date\":\"2003-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.54725,\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0443749887,\"date\":\"2003-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5548333333,\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0462875083,\"date\":\"2003-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5669166667,\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0481991513,\"date\":\"2003-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6178333333,\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0501099178,\"date\":\"2003-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6974166667,\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0520198077,\"date\":\"2003-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.75,\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.053928821,\"date\":\"2003-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7515833333,\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0558369578,\"date\":\"2003-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7805833333,\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0577442181,\"date\":\"2003-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8073333333,\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0596506018,\"date\":\"2003-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8255833333,\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0615561089,\"date\":\"2003-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7935,\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0634607394,\"date\":\"2003-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7578333333,\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0653644935,\"date\":\"2003-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.739,\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0672673709,\"date\":\"2003-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7065,\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0691693718,\"date\":\"2003-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.683,\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0710704961,\"date\":\"2003-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6653333333,\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0729707439,\"date\":\"2003-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6220833333,\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0748701152,\"date\":\"2003-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5969166667,\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0767686098,\"date\":\"2003-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.597,\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0786662279,\"date\":\"2003-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5835833333,\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0805629695,\"date\":\"2003-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5686666667,\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0824588345,\"date\":\"2003-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.57975,\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0843538229,\"date\":\"2003-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6100833333,\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0862479348,\"date\":\"2003-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.59225,\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0881411701,\"date\":\"2003-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5835833333,\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0900335289,\"date\":\"2003-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5844166667,\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0919250111,\"date\":\"2003-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6138333333,\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0938156168,\"date\":\"2003-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.616,\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0957053459,\"date\":\"2003-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.60775,\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0975941984,\"date\":\"2003-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6225833333,\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.0994821744,\"date\":\"2003-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6566666667,\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1013692738,\"date\":\"2003-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7179166667,\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1032554967,\"date\":\"2003-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8441666667,\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.105140843,\"date\":\"2003-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8455,\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1070253128,\"date\":\"2003-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.82,\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.108908906,\"date\":\"2003-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.79925,\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1107916226,\"date\":\"2003-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.749,\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1126734627,\"date\":\"2003-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7005833333,\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1145544263,\"date\":\"2003-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.68025,\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1164345132,\"date\":\"2003-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6696666667,\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1183137237,\"date\":\"2003-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6673333333,\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1201920575,\"date\":\"2003-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6398333333,\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1220695148,\"date\":\"2003-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6315833333,\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1239460956,\"date\":\"2003-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6018333333,\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1258217998,\"date\":\"2003-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5941666667,\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1276966274,\"date\":\"2003-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.60675,\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1295705785,\"date\":\"2003-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5871666667,\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.131443653,\"date\":\"2003-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5726666667,\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1333158509,\"date\":\"2003-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.56125,\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1351871724,\"date\":\"2003-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5781666667,\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1370576172,\"date\":\"2003-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5713333333,\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1389271855,\"date\":\"2003-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.5993333333,\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1407958772,\"date\":\"2004-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6494166667,\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1426636924,\"date\":\"2004-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.6829166667,\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.144530631,\"date\":\"2004-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.711,\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1463966931,\"date\":\"2004-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7094166667,\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1482618786,\"date\":\"2004-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7310833333,\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1501261876,\"date\":\"2004-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.74075,\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1519896199,\"date\":\"2004-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7856666667,\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1538521758,\"date\":\"2004-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8166666667,\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1557138551,\"date\":\"2004-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8374166667,\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1575746578,\"date\":\"2004-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8249166667,\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.159434584,\"date\":\"2004-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8415,\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1612936336,\"date\":\"2004-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8549166667,\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1631518066,\"date\":\"2004-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8768333333,\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1650091031,\"date\":\"2004-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8833333333,\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1668655231,\"date\":\"2004-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.90625,\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1687210664,\"date\":\"2004-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9049166667,\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1705757333,\"date\":\"2004-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.93375,\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1724295235,\"date\":\"2004-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0290833333,\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1742824372,\"date\":\"2004-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1054166667,\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1761344744,\"date\":\"2004-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1555,\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.177985635,\"date\":\"2004-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1475833333,\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.179835919,\"date\":\"2004-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1325,\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1816853265,\"date\":\"2004-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0908333333,\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1835338574,\"date\":\"2004-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.04575,\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1853815118,\"date\":\"2004-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0275,\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1872282896,\"date\":\"2004-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0013333333,\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1890741909,\"date\":\"2004-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0170833333,\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1909192156,\"date\":\"2004-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.026,\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1927633637,\"date\":\"2004-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.004,\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1946066353,\"date\":\"2004-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9855,\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1964490303,\"date\":\"2004-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.974,\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.1982905488,\"date\":\"2004-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9690833333,\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2001311907,\"date\":\"2004-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9764166667,\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2019709561,\"date\":\"2004-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9636666667,\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2038098449,\"date\":\"2004-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9471666667,\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2056478571,\"date\":\"2004-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9415,\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2074849928,\"date\":\"2004-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9576666667,\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.209321252,\"date\":\"2004-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.00625,\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2111566345,\"date\":\"2004-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.03225,\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2129911405,\"date\":\"2004-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.09025,\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.21482477,\"date\":\"2004-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.135,\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2166575229,\"date\":\"2004-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1330833333,\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2184893993,\"date\":\"2004-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1336666667,\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.220320399,\"date\":\"2004-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1045833333,\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2221505223,\"date\":\"2004-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0746666667,\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.223979769,\"date\":\"2004-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0511666667,\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2258081391,\"date\":\"2004-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.04525,\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2276356326,\"date\":\"2004-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0135833333,\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2294622496,\"date\":\"2004-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.95375,\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2312879901,\"date\":\"2004-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.918,\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.233112854,\"date\":\"2004-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8945833333,\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2349368413,\"date\":\"2004-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8795833333,\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2367599521,\"date\":\"2005-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8873333333,\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2385821863,\"date\":\"2005-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.91075,\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.240403544,\"date\":\"2005-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9419166667,\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2422240251,\"date\":\"2005-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.999,\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2440436296,\"date\":\"2005-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9995,\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2458623576,\"date\":\"2005-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.99025,\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2476802091,\"date\":\"2005-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9981666667,\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.249497184,\"date\":\"2005-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0178333333,\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2513132823,\"date\":\"2005-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0865,\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.253128504,\"date\":\"2005-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1434166667,\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2549428493,\"date\":\"2005-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1928333333,\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2567563179,\"date\":\"2005-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.239,\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.25856891,\"date\":\"2005-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3041666667,\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2603806255,\"date\":\"2005-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3708333333,\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2621914645,\"date\":\"2005-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3345833333,\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2640014269,\"date\":\"2005-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3335,\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2658105128,\"date\":\"2005-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3328333333,\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2676187221,\"date\":\"2005-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2903333333,\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2694260549,\"date\":\"2005-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.26375,\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2712325111,\"date\":\"2005-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2278333333,\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2730380907,\"date\":\"2005-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1991666667,\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2748427938,\"date\":\"2005-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.21325,\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2766466203,\"date\":\"2005-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2250833333,\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2784495703,\"date\":\"2005-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2561666667,\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2802516437,\"date\":\"2005-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3065,\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2820528406,\"date\":\"2005-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3208333333,\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2838531609,\"date\":\"2005-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4215,\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2856526046,\"date\":\"2005-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4158333333,\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2874511718,\"date\":\"2005-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.394,\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2892488624,\"date\":\"2005-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3951666667,\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2910456765,\"date\":\"2005-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4658333333,\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.292841614,\"date\":\"2005-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6425,\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.294636675,\"date\":\"2005-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7038333333,\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2964308594,\"date\":\"2005-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7031666667,\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.2982241672,\"date\":\"2005-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.17175,\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3000165985,\"date\":\"2005-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0609166667,\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3018081532,\"date\":\"2005-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.90075,\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3035988314,\"date\":\"2005-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9080833333,\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.305388633,\"date\":\"2005-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0210833333,\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3071775581,\"date\":\"2005-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9484166667,\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3089656066,\"date\":\"2005-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.832,\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3107527785,\"date\":\"2005-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.71075,\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3125390739,\"date\":\"2005-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5878333333,\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3143244928,\"date\":\"2005-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4826666667,\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.316109035,\"date\":\"2005-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.39925,\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3178927008,\"date\":\"2005-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3025833333,\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3196754899,\"date\":\"2005-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2535833333,\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3214574025,\"date\":\"2005-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.24,\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3232384386,\"date\":\"2005-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2729166667,\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3250185981,\"date\":\"2005-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2985833333,\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.326797881,\"date\":\"2005-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2854166667,\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3285762874,\"date\":\"2005-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.32275,\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3303538172,\"date\":\"2006-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4150833333,\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3321304705,\"date\":\"2006-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4175,\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3339062472,\"date\":\"2006-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4330833333,\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3356811473,\"date\":\"2006-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4538333333,\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3374551709,\"date\":\"2006-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4425,\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3392283179,\"date\":\"2006-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3883333333,\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3410005884,\"date\":\"2006-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.34125,\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3427719823,\"date\":\"2006-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3454166667,\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3445424997,\"date\":\"2006-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4161666667,\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3463121405,\"date\":\"2006-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4521666667,\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3480809048,\"date\":\"2006-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5919166667,\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3498487925,\"date\":\"2006-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.58975,\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3516158036,\"date\":\"2006-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.679,\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3533819382,\"date\":\"2006-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7751666667,\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3551471962,\"date\":\"2006-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.87575,\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3569115777,\"date\":\"2006-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.01425,\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3586750826,\"date\":\"2006-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0286666667,\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3604377109,\"date\":\"2006-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.026,\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3621994627,\"date\":\"2006-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0613333333,\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.363960338,\"date\":\"2006-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0135833333,\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3657203367,\"date\":\"2006-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.98525,\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3674794588,\"date\":\"2006-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0086666667,\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3692377044,\"date\":\"2006-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0198333333,\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3709950734,\"date\":\"2006-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9880833333,\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3727515658,\"date\":\"2006-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9829166667,\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3745071817,\"date\":\"2006-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0421666667,\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3762619211,\"date\":\"2006-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0805833333,\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3780157839,\"date\":\"2006-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.09625,\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3797687701,\"date\":\"2006-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.10925,\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3815208798,\"date\":\"2006-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1105833333,\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3832721129,\"date\":\"2006-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1380833333,\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3850224694,\"date\":\"2006-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1065833333,\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3867719494,\"date\":\"2006-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0330833333,\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3885205529,\"date\":\"2006-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9561666667,\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3902682798,\"date\":\"2006-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8425,\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3920151301,\"date\":\"2006-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.73825,\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3937611039,\"date\":\"2006-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6185,\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3955062011,\"date\":\"2006-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4983333333,\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3972504217,\"date\":\"2006-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4245,\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.3989937658,\"date\":\"2006-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.37075,\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4007362334,\"date\":\"2006-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3316666667,\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4024778244,\"date\":\"2006-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3078333333,\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4042185388,\"date\":\"2006-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3133333333,\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4059583767,\"date\":\"2006-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2950833333,\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.407697338,\"date\":\"2006-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3283333333,\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4094354228,\"date\":\"2006-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3375833333,\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.411172631,\"date\":\"2006-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3456666667,\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4129089626,\"date\":\"2006-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3929166667,\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4146444177,\"date\":\"2006-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.39325,\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4163789963,\"date\":\"2006-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4204166667,\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4181126982,\"date\":\"2006-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4443333333,\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4198455236,\"date\":\"2006-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4400833333,\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4215774725,\"date\":\"2007-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4170833333,\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4233085448,\"date\":\"2007-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3470833333,\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4250387406,\"date\":\"2007-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.285,\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4267680598,\"date\":\"2007-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2755,\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4284965024,\"date\":\"2007-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.296,\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4302240685,\"date\":\"2007-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3460833333,\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.431950758,\"date\":\"2007-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3995833333,\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.433676571,\"date\":\"2007-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4864166667,\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4354015074,\"date\":\"2007-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6093333333,\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4371255672,\"date\":\"2007-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6698333333,\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4388487505,\"date\":\"2007-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6906666667,\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4405710573,\"date\":\"2007-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7228333333,\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4422924874,\"date\":\"2007-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8213333333,\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4440130411,\"date\":\"2007-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9113333333,\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4457327181,\"date\":\"2007-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9845833333,\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4474515186,\"date\":\"2007-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9815833333,\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4491694426,\"date\":\"2007-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0775833333,\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.45088649,\"date\":\"2007-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1566666667,\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4526026608,\"date\":\"2007-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1949166667,\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4543179551,\"date\":\"2007-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2998333333,\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4560323728,\"date\":\"2007-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2950833333,\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.457745914,\"date\":\"2007-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2505,\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4594585786,\"date\":\"2007-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.17925,\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4611703667,\"date\":\"2007-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1141666667,\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4628812782,\"date\":\"2007-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0856666667,\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4645913131,\"date\":\"2007-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0596666667,\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4663004715,\"date\":\"2007-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0726666667,\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4680087533,\"date\":\"2007-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1346666667,\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4697161586,\"date\":\"2007-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0573333333,\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4714226873,\"date\":\"2007-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9830833333,\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4731283395,\"date\":\"2007-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9445,\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4748331151,\"date\":\"2007-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8753333333,\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4765370141,\"date\":\"2007-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8784166667,\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4782400366,\"date\":\"2007-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8395833333,\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4799421825,\"date\":\"2007-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8755833333,\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4816434519,\"date\":\"2007-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8976666667,\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4833438447,\"date\":\"2007-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8786666667,\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.485043361,\"date\":\"2007-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9046666667,\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4867420007,\"date\":\"2007-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8880833333,\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4884397638,\"date\":\"2007-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.87325,\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4901366504,\"date\":\"2007-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.86825,\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4918326605,\"date\":\"2007-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9268333333,\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4935277939,\"date\":\"2007-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.97275,\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4952220509,\"date\":\"2007-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1065,\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.4969154312,\"date\":\"2007-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2076666667,\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.498607935,\"date\":\"2007-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2023333333,\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5002995623,\"date\":\"2007-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2025833333,\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.501990313,\"date\":\"2007-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.17275,\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5036801871,\"date\":\"2007-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.11825,\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5053691847,\"date\":\"2007-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1125,\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5070573057,\"date\":\"2007-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0951666667,\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5087445502,\"date\":\"2007-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1611666667,\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5104309181,\"date\":\"2007-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.214,\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5121164094,\"date\":\"2008-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1775833333,\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5138010242,\"date\":\"2008-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1298333333,\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5154847624,\"date\":\"2008-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0889166667,\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5171676241,\"date\":\"2008-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.08375,\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5188496092,\"date\":\"2008-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0645,\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5205307178,\"date\":\"2008-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1416666667,\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5222109498,\"date\":\"2008-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2320833333,\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5238903053,\"date\":\"2008-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2688333333,\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5255687842,\"date\":\"2008-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3283333333,\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5272463865,\"date\":\"2008-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3881666667,\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5289231123,\"date\":\"2008-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3705,\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5305989615,\"date\":\"2008-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3976666667,\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5322739342,\"date\":\"2008-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4386666667,\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5339480303,\"date\":\"2008-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4974166667,\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5356212498,\"date\":\"2008-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.618,\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5372935928,\"date\":\"2008-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7129166667,\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5389650593,\"date\":\"2008-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.72475,\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5406356491,\"date\":\"2008-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8268333333,\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5423053625,\"date\":\"2008-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8965,\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5439741992,\"date\":\"2008-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0405833333,\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5456421595,\"date\":\"2008-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0870833333,\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5473092431,\"date\":\"2008-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1576666667,\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5489754502,\"date\":\"2008-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2085,\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5506407808,\"date\":\"2008-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2068333333,\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5523052347,\"date\":\"2008-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2181666667,\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5539688122,\"date\":\"2008-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2355833333,\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.555631513,\"date\":\"2008-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2320833333,\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5572933373,\"date\":\"2008-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1891666667,\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5589542851,\"date\":\"2008-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0839166667,\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5606143563,\"date\":\"2008-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0065833333,\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5622735509,\"date\":\"2008-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9318333333,\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.563931869,\"date\":\"2008-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8578333333,\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5655893106,\"date\":\"2008-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7986666667,\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5672458755,\"date\":\"2008-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7900833333,\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.568901564,\"date\":\"2008-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7563333333,\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5705563758,\"date\":\"2008-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9248333333,\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5722103111,\"date\":\"2008-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.81875,\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5738633699,\"date\":\"2008-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.73675,\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5755155521,\"date\":\"2008-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.598,\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5771668577,\"date\":\"2008-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2870833333,\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5788172868,\"date\":\"2008-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0535,\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5804668393,\"date\":\"2008-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.801,\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5821155152,\"date\":\"2008-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5434166667,\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5837633146,\"date\":\"2008-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3621666667,\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5854102375,\"date\":\"2008-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2063333333,\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5870562838,\"date\":\"2008-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0235,\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5887014535,\"date\":\"2008-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9355833333,\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5903457467,\"date\":\"2008-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8225833333,\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5919891633,\"date\":\"2008-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7749166667,\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5936317034,\"date\":\"2008-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7714166667,\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5952733669,\"date\":\"2008-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7331666667,\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5969141538,\"date\":\"2008-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.7925,\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.5985540642,\"date\":\"2009-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.8889166667,\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6001930981,\"date\":\"2009-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9520833333,\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6018312553,\"date\":\"2009-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9475833333,\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6034685361,\"date\":\"2009-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0001666667,\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6051049402,\"date\":\"2009-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0380833333,\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6067404678,\"date\":\"2009-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0774166667,\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6083751189,\"date\":\"2009-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.029,\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6100088934,\"date\":\"2009-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.04775,\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6116417913,\"date\":\"2009-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0509166667,\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6132738127,\"date\":\"2009-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0240833333,\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6149049575,\"date\":\"2009-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0690833333,\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6165352258,\"date\":\"2009-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1516666667,\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6181646175,\"date\":\"2009-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.14875,\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6197931326,\"date\":\"2009-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1625833333,\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6214207712,\"date\":\"2009-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1716666667,\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6230475333,\"date\":\"2009-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1639166667,\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6246734188,\"date\":\"2009-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1895,\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6262984277,\"date\":\"2009-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3448333333,\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6279225601,\"date\":\"2009-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.418,\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6295458159,\"date\":\"2009-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5395,\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6311681951,\"date\":\"2009-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.625,\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6327896978,\"date\":\"2009-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.727,\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.634410324,\"date\":\"2009-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7804166667,\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6360300735,\"date\":\"2009-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8056666667,\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6376489466,\"date\":\"2009-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7625833333,\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.639266943,\"date\":\"2009-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7340833333,\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.640884063,\"date\":\"2009-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6543333333,\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6425003063,\"date\":\"2009-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5905833333,\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6441156731,\"date\":\"2009-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6231666667,\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6457301634,\"date\":\"2009-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6755833333,\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.647343777,\"date\":\"2009-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.76725,\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6489565142,\"date\":\"2009-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7614166667,\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6505683747,\"date\":\"2009-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.75225,\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6521793588,\"date\":\"2009-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7399166667,\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6537894662,\"date\":\"2009-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7181666667,\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6553986971,\"date\":\"2009-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7104166667,\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6570070515,\"date\":\"2009-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6855833333,\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6586145293,\"date\":\"2009-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6331666667,\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6602211305,\"date\":\"2009-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6019166667,\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6618268552,\"date\":\"2009-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6148333333,\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6634317033,\"date\":\"2009-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6908333333,\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6650356748,\"date\":\"2009-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7878333333,\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6666387698,\"date\":\"2009-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.80825,\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6682409883,\"date\":\"2009-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.78425,\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6698423302,\"date\":\"2009-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7516666667,\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6714427955,\"date\":\"2009-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7580833333,\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6730423843,\"date\":\"2009-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.74875,\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6746410965,\"date\":\"2009-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7535833333,\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6762389322,\"date\":\"2009-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.72225,\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6778358913,\"date\":\"2009-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7128333333,\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6794319738,\"date\":\"2009-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7283333333,\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6810271798,\"date\":\"2009-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7819166667,\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6826215093,\"date\":\"2010-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8648333333,\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6842149621,\"date\":\"2010-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8563333333,\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6858075385,\"date\":\"2010-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8261666667,\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6873992382,\"date\":\"2010-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.784,\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6889900614,\"date\":\"2010-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7740833333,\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6905800081,\"date\":\"2010-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7338333333,\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6921690782,\"date\":\"2010-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7724166667,\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6937572717,\"date\":\"2010-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8181666667,\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6953445887,\"date\":\"2010-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.864,\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.6969310291,\"date\":\"2010-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8996666667,\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.698516593,\"date\":\"2010-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.92825,\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7001012803,\"date\":\"2010-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.91175,\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.701685091,\"date\":\"2010-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.93575,\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7032680252,\"date\":\"2010-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9665833333,\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7048500829,\"date\":\"2010-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9691666667,\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.706431264,\"date\":\"2010-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9620833333,\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7080115685,\"date\":\"2010-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0093333333,\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7095909965,\"date\":\"2010-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0193333333,\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7111695479,\"date\":\"2010-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.983,\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7127472227,\"date\":\"2010-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9106666667,\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.714324021,\"date\":\"2010-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.85425,\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7158999428,\"date\":\"2010-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8503333333,\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7174749879,\"date\":\"2010-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8255,\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7190491566,\"date\":\"2010-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8619166667,\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7206224486,\"date\":\"2010-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.87475,\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7221948642,\"date\":\"2010-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8473333333,\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7237664031,\"date\":\"2010-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.84,\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7253370655,\"date\":\"2010-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8430833333,\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7269068514,\"date\":\"2010-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8665,\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7284757606,\"date\":\"2010-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8558333333,\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7300437934,\"date\":\"2010-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8999166667,\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7316109495,\"date\":\"2010-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.86625,\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7331772292,\"date\":\"2010-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8288333333,\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7347426322,\"date\":\"2010-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8029166667,\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7363071587,\"date\":\"2010-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7980833333,\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7378708087,\"date\":\"2010-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8306666667,\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.739433582,\"date\":\"2010-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.83275,\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7409954789,\"date\":\"2010-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8078333333,\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7425564992,\"date\":\"2010-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8433333333,\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7441166429,\"date\":\"2010-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.92875,\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.74567591,\"date\":\"2010-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9503333333,\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7472343006,\"date\":\"2010-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9365,\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7487918147,\"date\":\"2010-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9285833333,\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7503484522,\"date\":\"2010-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9778333333,\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7519042131,\"date\":\"2010-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0080833333,\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7534590975,\"date\":\"2010-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3,\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7550131053,\"date\":\"2010-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9825833333,\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7565662366,\"date\":\"2010-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0786666667,\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7581184913,\"date\":\"2010-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1004166667,\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7596698694,\"date\":\"2010-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.10525,\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.761220371,\"date\":\"2010-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1688333333,\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.762769996,\"date\":\"2010-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1865,\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7643187445,\"date\":\"2011-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2041666667,\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7658666164,\"date\":\"2011-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2201666667,\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7674136118,\"date\":\"2011-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2259166667,\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7689597306,\"date\":\"2011-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2195,\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7705049729,\"date\":\"2011-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2478333333,\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7720493386,\"date\":\"2011-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2588333333,\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7735928277,\"date\":\"2011-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3095,\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7751354403,\"date\":\"2011-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4985833333,\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7766771763,\"date\":\"2011-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6375833333,\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7782180358,\"date\":\"2011-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6886666667,\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7797580187,\"date\":\"2011-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6863333333,\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.781297125,\"date\":\"2011-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7195,\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7828353548,\"date\":\"2011-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8025,\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7843727081,\"date\":\"2011-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.909,\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7859091847,\"date\":\"2011-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9649166667,\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7874447849,\"date\":\"2011-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.002,\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7889795084,\"date\":\"2011-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0819166667,\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7905133554,\"date\":\"2011-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.08775,\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7920463259,\"date\":\"2011-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0836666667,\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7935784198,\"date\":\"2011-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9784166667,\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7951096371,\"date\":\"2011-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.91875,\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7966399779,\"date\":\"2011-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8975,\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7981694421,\"date\":\"2011-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8353333333,\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.7996980298,\"date\":\"2011-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7805833333,\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8012257409,\"date\":\"2011-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7065833333,\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8027525755,\"date\":\"2011-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7025,\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8042785335,\"date\":\"2011-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7580833333,\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8058036149,\"date\":\"2011-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7989166667,\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8073278198,\"date\":\"2011-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8170833333,\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8088511481,\"date\":\"2011-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8271666667,\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8103735999,\"date\":\"2011-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.79175,\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8118951751,\"date\":\"2011-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7258333333,\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8134158738,\"date\":\"2011-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.70175,\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8149356959,\"date\":\"2011-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7428333333,\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8164546414,\"date\":\"2011-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7889166667,\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8179727104,\"date\":\"2011-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7779166667,\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8194899029,\"date\":\"2011-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7255,\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8210062187,\"date\":\"2011-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6406666667,\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.822521658,\"date\":\"2011-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5676666667,\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8240362208,\"date\":\"2011-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5489166667,\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.825549907,\"date\":\"2011-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6025,\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8270627167,\"date\":\"2011-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5915,\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8285746497,\"date\":\"2011-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5828333333,\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8300857063,\"date\":\"2011-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5561666667,\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8315958862,\"date\":\"2011-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.56775,\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8331051897,\"date\":\"2011-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5034166667,\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8346136165,\"date\":\"2011-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.447,\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8361211668,\"date\":\"2011-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4248333333,\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8376278406,\"date\":\"2011-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4170833333,\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8391336378,\"date\":\"2011-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3644166667,\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8406385584,\"date\":\"2011-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3875,\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8421426025,\"date\":\"2011-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.429,\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.84364577,\"date\":\"2012-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.513,\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.845148061,\"date\":\"2012-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.52275,\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8466494754,\"date\":\"2012-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5246666667,\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8481500132,\"date\":\"2012-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5743333333,\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8496496745,\"date\":\"2012-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.61375,\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8511484593,\"date\":\"2012-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6596666667,\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8526463674,\"date\":\"2012-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.732,\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8541433991,\"date\":\"2012-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8614166667,\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8556395541,\"date\":\"2012-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9273333333,\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8571348326,\"date\":\"2012-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.964,\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8586292346,\"date\":\"2012-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0018333333,\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.86012276,\"date\":\"2012-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0504166667,\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8616154088,\"date\":\"2012-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0706666667,\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8631071811,\"date\":\"2012-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.07175,\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8645980768,\"date\":\"2012-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0521666667,\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.866088096,\"date\":\"2012-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0058333333,\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8675772386,\"date\":\"2012-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9668333333,\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8690655047,\"date\":\"2012-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.92975,\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8705528942,\"date\":\"2012-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.905,\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8720394071,\"date\":\"2012-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8615,\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8735250435,\"date\":\"2012-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8170833333,\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8750098033,\"date\":\"2012-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7609166667,\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8764936866,\"date\":\"2012-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7135833333,\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8779766933,\"date\":\"2012-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6640833333,\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8794588234,\"date\":\"2012-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5713333333,\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.880940077,\"date\":\"2012-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4944166667,\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8824204541,\"date\":\"2012-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5433333333,\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8838999546,\"date\":\"2012-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5616666667,\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8853785785,\"date\":\"2012-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6311666667,\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8868563259,\"date\":\"2012-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6438333333,\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8883331967,\"date\":\"2012-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.76925,\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8898091909,\"date\":\"2012-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8539166667,\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8912843086,\"date\":\"2012-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8799166667,\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8927585498,\"date\":\"2012-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9118333333,\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8942319144,\"date\":\"2012-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.974,\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8957044024,\"date\":\"2012-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9806666667,\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8971760139,\"date\":\"2012-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.012,\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.8986467488,\"date\":\"2012-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9665833333,\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9001166072,\"date\":\"2012-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.94525,\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.901585589,\"date\":\"2012-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0136666667,\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9030536942,\"date\":\"2012-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.98625,\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9045209229,\"date\":\"2012-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8585,\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.905987275,\"date\":\"2012-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7351666667,\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9074527506,\"date\":\"2012-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6595833333,\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9089173496,\"date\":\"2012-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6109166667,\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9103810721,\"date\":\"2012-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5866666667,\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.911843918,\"date\":\"2012-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5889166667,\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9133058873,\"date\":\"2012-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5489166667,\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9147669801,\"date\":\"2012-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5030833333,\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9162271964,\"date\":\"2012-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4101666667,\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.917686536,\"date\":\"2012-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4134166667,\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9191449992,\"date\":\"2012-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4539166667,\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9206025857,\"date\":\"2012-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4639166667,\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9220592957,\"date\":\"2013-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.469,\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9235151292,\"date\":\"2013-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4744166667,\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9249700861,\"date\":\"2013-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5135,\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9264241664,\"date\":\"2013-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6901666667,\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9278773702,\"date\":\"2013-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7646666667,\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9293296974,\"date\":\"2013-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8923333333,\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9307811481,\"date\":\"2013-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9339166667,\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9322317222,\"date\":\"2013-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.91,\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9336814197,\"date\":\"2013-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.86525,\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9351302407,\"date\":\"2013-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8494166667,\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9365781852,\"date\":\"2013-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8305833333,\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.938025253,\"date\":\"2013-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8023333333,\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9394714444,\"date\":\"2013-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7638333333,\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9409167591,\"date\":\"2013-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7015,\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9423611973,\"date\":\"2013-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.688,\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.943804759,\"date\":\"2013-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6716666667,\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9452474441,\"date\":\"2013-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6834166667,\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9466892526,\"date\":\"2013-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.74425,\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9481301846,\"date\":\"2013-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7975,\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.94957024,\"date\":\"2013-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7765833333,\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9510094189,\"date\":\"2013-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7738333333,\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9524477212,\"date\":\"2013-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.78475,\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.953885147,\"date\":\"2013-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7660833333,\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9553216962,\"date\":\"2013-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7355,\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9567573688,\"date\":\"2013-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6634166667,\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9581921649,\"date\":\"2013-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.65675,\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9596260844,\"date\":\"2013-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7924166667,\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9610591274,\"date\":\"2013-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8378333333,\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9624912938,\"date\":\"2013-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.80725,\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9639225837,\"date\":\"2013-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.78775,\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.965352997,\"date\":\"2013-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7235833333,\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9667825337,\"date\":\"2013-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7071666667,\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9682111939,\"date\":\"2013-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.70625,\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9696389775,\"date\":\"2013-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.754,\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9710658846,\"date\":\"2013-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7398333333,\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9724919151,\"date\":\"2013-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7113333333,\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9739170691,\"date\":\"2013-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6588333333,\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9753413465,\"date\":\"2013-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.59425,\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9767647473,\"date\":\"2013-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.53525,\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9781872716,\"date\":\"2013-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.52225,\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9796089194,\"date\":\"2013-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5230833333,\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9810296905,\"date\":\"2013-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4666666667,\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9824495852,\"date\":\"2013-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.43525,\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9838686032,\"date\":\"2013-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3709166667,\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9852867447,\"date\":\"2013-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3919166667,\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9867040097,\"date\":\"2013-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4623333333,\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9881203981,\"date\":\"2013-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4495,\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9895359099,\"date\":\"2013-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.44625,\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9909505452,\"date\":\"2013-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4215,\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9923643039,\"date\":\"2013-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.45025,\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9937771861,\"date\":\"2013-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5034166667,\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9951891917,\"date\":\"2013-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5093333333,\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9966003207,\"date\":\"2014-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4998333333,\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9980105732,\"date\":\"2014-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4701666667,\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":2.9994199491,\"date\":\"2014-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4669166667,\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0008284485,\"date\":\"2014-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.46375,\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0022360713,\"date\":\"2014-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.479,\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0036428176,\"date\":\"2014-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5475,\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0050486873,\"date\":\"2014-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.60675,\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0064536805,\"date\":\"2014-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.64175,\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0078577971,\"date\":\"2014-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6708333333,\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0092610371,\"date\":\"2014-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.706,\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0106634006,\"date\":\"2014-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7111666667,\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0120648875,\"date\":\"2014-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7381666667,\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0134654979,\"date\":\"2014-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7605,\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0148652317,\"date\":\"2014-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.816,\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0162640889,\"date\":\"2014-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.85025,\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0176620696,\"date\":\"2014-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8839166667,\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0190591738,\"date\":\"2014-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.85875,\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0204554013,\"date\":\"2014-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8420833333,\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0218507524,\"date\":\"2014-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8385833333,\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0232452268,\"date\":\"2014-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.84325,\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0246388248,\"date\":\"2014-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8565833333,\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0260315461,\"date\":\"2014-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8398333333,\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0274233909,\"date\":\"2014-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.85,\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0288143591,\"date\":\"2014-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8686666667,\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0302044508,\"date\":\"2014-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8699166667,\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.031593666,\"date\":\"2014-06-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8475,\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0329820045,\"date\":\"2014-07-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.80875,\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0343694665,\"date\":\"2014-07-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7668333333,\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.035756052,\"date\":\"2014-07-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7155833333,\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0371417609,\"date\":\"2014-07-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6915,\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0385265932,\"date\":\"2014-08-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6748333333,\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.039910549,\"date\":\"2014-08-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.64375,\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0412936283,\"date\":\"2014-08-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6246666667,\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0426758309,\"date\":\"2014-08-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6250833333,\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0440571571,\"date\":\"2014-09-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6225,\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0454376066,\"date\":\"2014-09-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5761666667,\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0468171796,\"date\":\"2014-09-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5251666667,\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0481958761,\"date\":\"2014-09-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5249166667,\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0495736959,\"date\":\"2014-09-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4766666667,\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0509506393,\"date\":\"2014-10-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3915,\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0523267061,\"date\":\"2014-10-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3021666667,\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0537018963,\"date\":\"2014-10-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2323333333,\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0550762099,\"date\":\"2014-10-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.17,\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.056449647,\"date\":\"2014-11-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.116,\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0578222076,\"date\":\"2014-11-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0705833333,\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0591938916,\"date\":\"2014-11-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0020833333,\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.060564699,\"date\":\"2014-11-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9605,\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0619346299,\"date\":\"2014-12-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8666666667,\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0633036842,\"date\":\"2014-12-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.74625,\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.064671862,\"date\":\"2014-12-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6041666667,\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0660391632,\"date\":\"2014-12-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5036666667,\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0674055878,\"date\":\"2014-12-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.42375,\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0687711359,\"date\":\"2015-01-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3450833333,\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0701358074,\"date\":\"2015-01-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2650833333,\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0714996024,\"date\":\"2015-01-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2385833333,\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0728625208,\"date\":\"2015-01-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2544166667,\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0742245627,\"date\":\"2015-02-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3746666667,\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.075585728,\"date\":\"2015-02-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.45975,\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0769460168,\"date\":\"2015-02-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5195833333,\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.078305429,\"date\":\"2015-02-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.67225,\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0796639646,\"date\":\"2015-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6890833333,\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0810216237,\"date\":\"2015-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.65525,\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0823784062,\"date\":\"2015-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6515833333,\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0837343122,\"date\":\"2015-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.64325,\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0850893416,\"date\":\"2015-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6116666667,\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0864434944,\"date\":\"2015-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6054166667,\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0877967707,\"date\":\"2015-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6794166667,\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0891491705,\"date\":\"2015-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.776,\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0905006937,\"date\":\"2015-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8776666667,\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0918513403,\"date\":\"2015-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9048333333,\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0932011103,\"date\":\"2015-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.95325,\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0945500039,\"date\":\"2015-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9800833333,\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0958980208,\"date\":\"2015-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9816666667,\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0972451612,\"date\":\"2015-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9790833333,\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0985914251,\"date\":\"2015-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0245833333,\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.0999368123,\"date\":\"2015-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0031666667,\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1012813231,\"date\":\"2015-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9933333333,\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1026249572,\"date\":\"2015-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9863333333,\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1039677149,\"date\":\"2015-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0495833333,\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1053095959,\"date\":\"2015-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.01825,\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1066506004,\"date\":\"2015-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.964,\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1079907284,\"date\":\"2015-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9108333333,\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1093299797,\"date\":\"2015-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8488333333,\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1106683546,\"date\":\"2015-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9221666667,\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1120058528,\"date\":\"2015-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8459166667,\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1133424746,\"date\":\"2015-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7256666667,\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1146782197,\"date\":\"2015-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6556666667,\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1160130883,\"date\":\"2015-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5951666667,\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1173470804,\"date\":\"2015-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5485833333,\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1186801958,\"date\":\"2015-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5356666667,\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1200124348,\"date\":\"2015-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.52875,\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1213437972,\"date\":\"2015-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5398333333,\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.122674283,\"date\":\"2015-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4845833333,\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1240038922,\"date\":\"2015-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4403333333,\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1253326249,\"date\":\"2015-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.43425,\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1266604811,\"date\":\"2015-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.45025,\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1279874607,\"date\":\"2015-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.40075,\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1293135637,\"date\":\"2015-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3225,\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1306387902,\"date\":\"2015-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2930833333,\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1319631401,\"date\":\"2015-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2871666667,\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1332866135,\"date\":\"2015-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2714166667,\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1346092103,\"date\":\"2015-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2659166667,\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1359309305,\"date\":\"2015-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2755,\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1372517742,\"date\":\"2015-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2711666667,\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1385717413,\"date\":\"2016-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2410833333,\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1398908319,\"date\":\"2016-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.15825,\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1412090459,\"date\":\"2016-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1033333333,\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1425263834,\"date\":\"2016-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0665833333,\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1438428443,\"date\":\"2016-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0065,\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1451584287,\"date\":\"2016-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9654166667,\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1464731365,\"date\":\"2016-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":1.9610833333,\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1477869677,\"date\":\"2016-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0085,\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1490999224,\"date\":\"2016-02-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.0591666667,\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1504120005,\"date\":\"2016-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1816666667,\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1517232021,\"date\":\"2016-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2295,\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1530335271,\"date\":\"2016-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.29525,\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1543429755,\"date\":\"2016-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3093333333,\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1556515474,\"date\":\"2016-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2985833333,\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1569592428,\"date\":\"2016-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3630833333,\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1582660615,\"date\":\"2016-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3878333333,\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1595720038,\"date\":\"2016-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4613333333,\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1608770694,\"date\":\"2016-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.448,\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1621812586,\"date\":\"2016-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4648333333,\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1634845711,\"date\":\"2016-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5193333333,\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1647870071,\"date\":\"2016-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5528333333,\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1660885665,\"date\":\"2016-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5924166667,\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1673892494,\"date\":\"2016-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6095,\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1686890558,\"date\":\"2016-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.57025,\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1699879855,\"date\":\"2016-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.554,\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1712860387,\"date\":\"2016-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5216666667,\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1725832154,\"date\":\"2016-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.48475,\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1738795155,\"date\":\"2016-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.46225,\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.175174939,\"date\":\"2016-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4148333333,\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.176469486,\"date\":\"2016-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3898333333,\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1777631565,\"date\":\"2016-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.37575,\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1790559503,\"date\":\"2016-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3731666667,\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1803478676,\"date\":\"2016-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.41625,\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1816389084,\"date\":\"2016-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4548333333,\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1829290726,\"date\":\"2016-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4455833333,\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1842183602,\"date\":\"2016-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.43125,\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1855067713,\"date\":\"2016-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4525833333,\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1867943059,\"date\":\"2016-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.455,\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1880809638,\"date\":\"2016-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4759166667,\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1893667453,\"date\":\"2016-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5001666667,\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1906516501,\"date\":\"2016-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4879166667,\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1919356784,\"date\":\"2016-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4775833333,\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1932188302,\"date\":\"2016-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4675833333,\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1945011054,\"date\":\"2016-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4754166667,\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.195782504,\"date\":\"2016-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.43125,\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1970630261,\"date\":\"2016-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.401,\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1983426716,\"date\":\"2016-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.3985833333,\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.1996214405,\"date\":\"2016-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.449,\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2008993329,\"date\":\"2016-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4711666667,\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2021763488,\"date\":\"2016-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.49825,\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2034524881,\"date\":\"2016-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5386666667,\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2047277508,\"date\":\"2016-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6046666667,\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.206002137,\"date\":\"2017-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.61675,\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2072756466,\"date\":\"2017-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.58775,\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2085482797,\"date\":\"2017-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.56,\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2098200362,\"date\":\"2017-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5350833333,\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2110909161,\"date\":\"2017-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5325,\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2123609195,\"date\":\"2017-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.54775,\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2136300464,\"date\":\"2017-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5439166667,\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2148982967,\"date\":\"2017-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5585,\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2161656704,\"date\":\"2017-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5819166667,\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2174321675,\"date\":\"2017-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5659166667,\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2186977882,\"date\":\"2017-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.56525,\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2199625322,\"date\":\"2017-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5618333333,\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2212263997,\"date\":\"2017-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6004166667,\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2224893906,\"date\":\"2017-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6600833333,\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.223751505,\"date\":\"2017-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6749166667,\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2250127428,\"date\":\"2017-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6858333333,\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2262731041,\"date\":\"2017-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6525833333,\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2275325888,\"date\":\"2017-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.61625,\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.228791197,\"date\":\"2017-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6148333333,\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2300489286,\"date\":\"2017-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.64425,\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2313057836,\"date\":\"2017-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6515,\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2325617621,\"date\":\"2017-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6581666667,\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.233816864,\"date\":\"2017-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.61375,\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2350710894,\"date\":\"2017-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5715,\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2363244382,\"date\":\"2017-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.54175,\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2375769105,\"date\":\"2017-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5163333333,\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2388285062,\"date\":\"2017-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5458333333,\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2400792253,\"date\":\"2017-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5284166667,\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2413290679,\"date\":\"2017-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5604166667,\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2425780339,\"date\":\"2017-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6000833333,\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2438261234,\"date\":\"2017-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.62575,\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2450733363,\"date\":\"2017-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6303333333,\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2463196727,\"date\":\"2017-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6093333333,\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2475651325,\"date\":\"2017-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6433333333,\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2488097157,\"date\":\"2017-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.92375,\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2500534224,\"date\":\"2017-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9299166667,\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2512962525,\"date\":\"2017-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8819166667,\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2525382061,\"date\":\"2017-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8330833333,\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2537792831,\"date\":\"2017-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.81325,\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2550194836,\"date\":\"2017-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7553333333,\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2562588075,\"date\":\"2017-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7374166667,\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2574972548,\"date\":\"2017-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7245,\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2587348256,\"date\":\"2017-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7345833333,\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2599715198,\"date\":\"2017-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8086666667,\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2612073375,\"date\":\"2017-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8403333333,\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2624422786,\"date\":\"2017-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8186666667,\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2636763432,\"date\":\"2017-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7854166667,\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2649095312,\"date\":\"2017-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.75475,\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2661418427,\"date\":\"2017-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7375833333,\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2673732775,\"date\":\"2017-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.707,\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2686038359,\"date\":\"2017-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.72575,\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2698335177,\"date\":\"2017-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7724166667,\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2710623229,\"date\":\"2018-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.77875,\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2722902515,\"date\":\"2018-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8083333333,\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2735173037,\"date\":\"2018-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8210833333,\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2747434792,\"date\":\"2018-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8610833333,\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2759687782,\"date\":\"2018-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8919166667,\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2771932006,\"date\":\"2018-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8649166667,\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2784167465,\"date\":\"2018-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8209166667,\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2796394158,\"date\":\"2018-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.81125,\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2808612086,\"date\":\"2018-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8225833333,\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2820821248,\"date\":\"2018-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8216666667,\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2833021645,\"date\":\"2018-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8598333333,\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2845213276,\"date\":\"2018-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9085833333,\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2857396141,\"date\":\"2018-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.96025,\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2869570241,\"date\":\"2018-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9554166667,\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2881735575,\"date\":\"2018-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.00425,\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2893892144,\"date\":\"2018-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0555833333,\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2906039947,\"date\":\"2018-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1013333333,\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2918178984,\"date\":\"2018-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.10325,\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2930309256,\"date\":\"2018-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1435833333,\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2942430763,\"date\":\"2018-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1908333333,\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2954543504,\"date\":\"2018-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2299166667,\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2966647479,\"date\":\"2018-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2145833333,\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2978742688,\"date\":\"2018-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1860833333,\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.2990829133,\"date\":\"2018-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1563333333,\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3002906811,\"date\":\"2018-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1141666667,\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3014975724,\"date\":\"2018-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1225,\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3027035872,\"date\":\"2018-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1355,\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3039087253,\"date\":\"2018-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1366666667,\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.305112987,\"date\":\"2018-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1070833333,\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.306316372,\"date\":\"2018-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1183333333,\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3075188806,\"date\":\"2018-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1210833333,\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3087205125,\"date\":\"2018-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.11275,\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3099212679,\"date\":\"2018-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0929166667,\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3111211468,\"date\":\"2018-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.09825,\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.312320149,\"date\":\"2018-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0974166667,\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3135182748,\"date\":\"2018-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1075833333,\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3147155239,\"date\":\"2018-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1165,\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3159118966,\"date\":\"2018-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.11675,\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3171073926,\"date\":\"2018-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.14475,\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3183020121,\"date\":\"2018-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1826666667,\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3194957551,\"date\":\"2018-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1639166667,\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3206886215,\"date\":\"2018-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.13325,\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3218806113,\"date\":\"2018-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.10525,\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3230717246,\"date\":\"2018-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0535,\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3242619613,\"date\":\"2018-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9895833333,\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3254513214,\"date\":\"2018-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9201666667,\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3266398051,\"date\":\"2018-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8581666667,\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3278274121,\"date\":\"2018-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7746666667,\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3290141426,\"date\":\"2018-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7373333333,\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3301999965,\"date\":\"2018-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6884166667,\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3313849739,\"date\":\"2018-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6433333333,\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3325690747,\"date\":\"2018-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5909166667,\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.333752299,\"date\":\"2018-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5606666667,\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3349346467,\"date\":\"2019-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.564,\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3361161178,\"date\":\"2019-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.56425,\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3372967124,\"date\":\"2019-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5623333333,\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3384764305,\"date\":\"2019-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5584166667,\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.339655272,\"date\":\"2019-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.57625,\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3408332369,\"date\":\"2019-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6099166667,\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3420103252,\"date\":\"2019-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6711666667,\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.343186537,\"date\":\"2019-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6981666667,\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3443618723,\"date\":\"2019-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.74175,\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.345536331,\"date\":\"2019-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8166666667,\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3467099131,\"date\":\"2019-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8960833333,\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3478826187,\"date\":\"2019-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9681666667,\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3490544477,\"date\":\"2019-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0340833333,\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3502254002,\"date\":\"2019-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1266666667,\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3513954761,\"date\":\"2019-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.14875,\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3525646755,\"date\":\"2019-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.19725,\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3537329983,\"date\":\"2019-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.21075,\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3549004445,\"date\":\"2019-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1830833333,\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3560670142,\"date\":\"2019-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1685,\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3572327073,\"date\":\"2019-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1375833333,\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3583975239,\"date\":\"2019-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1171666667,\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3595614639,\"date\":\"2019-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0486666667,\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3607245273,\"date\":\"2019-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.99025,\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3618867142,\"date\":\"2019-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9665,\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3630480246,\"date\":\"2019-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.01575,\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3642084584,\"date\":\"2019-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0401666667,\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3653680156,\"date\":\"2019-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0685833333,\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3665266963,\"date\":\"2019-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0430833333,\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3676845004,\"date\":\"2019-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0111666667,\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3688414279,\"date\":\"2019-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.987,\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3699974789,\"date\":\"2019-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9296666667,\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3711526534,\"date\":\"2019-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9025833333,\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3723069513,\"date\":\"2019-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.883,\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3734603726,\"date\":\"2019-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8750833333,\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3746129174,\"date\":\"2019-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8625833333,\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3757645856,\"date\":\"2019-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.86325,\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3769153773,\"date\":\"2019-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9605,\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3780652924,\"date\":\"2019-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.98525,\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3792143309,\"date\":\"2019-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9979166667,\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3803624929,\"date\":\"2019-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.985,\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3815097783,\"date\":\"2019-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9860833333,\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3826561872,\"date\":\"2019-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.94375,\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3838017195,\"date\":\"2019-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9556666667,\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3849463753,\"date\":\"2019-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9631666667,\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3860901545,\"date\":\"2019-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9349166667,\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3872330571,\"date\":\"2019-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9135833333,\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3883750832,\"date\":\"2019-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8996666667,\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3895162328,\"date\":\"2019-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.88125,\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3906565057,\"date\":\"2019-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8563333333,\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3917959021,\"date\":\"2019-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8466666667,\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.392934422,\"date\":\"2019-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8751666667,\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3940720653,\"date\":\"2019-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8808333333,\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3952088321,\"date\":\"2020-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.87475,\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3963447223,\"date\":\"2020-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8461666667,\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3974797359,\"date\":\"2020-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8190833333,\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.398613873,\"date\":\"2020-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7765,\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.3997471335,\"date\":\"2020-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7435833333,\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4008795175,\"date\":\"2020-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.74575,\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4020110249,\"date\":\"2020-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7789166667,\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4031416557,\"date\":\"2020-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7453333333,\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.40427141,\"date\":\"2020-03-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7021666667,\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4054002878,\"date\":\"2020-03-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.58475,\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4065282889,\"date\":\"2020-03-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4628333333,\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4076554136,\"date\":\"2020-03-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.355,\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4087816616,\"date\":\"2020-03-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2745833333,\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4099070331,\"date\":\"2020-04-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.20125,\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4110315281,\"date\":\"2020-04-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1604166667,\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4121551465,\"date\":\"2020-04-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.11725,\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4132778883,\"date\":\"2020-04-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1213333333,\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4143997536,\"date\":\"2020-05-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1696666667,\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4155207423,\"date\":\"2020-05-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.1990833333,\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4166408545,\"date\":\"2020-05-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2720833333,\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4177600901,\"date\":\"2020-05-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.2890833333,\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4188784492,\"date\":\"2020-06-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.344,\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4199959317,\"date\":\"2020-06-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4030833333,\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4211125376,\"date\":\"2020-06-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.43225,\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.422228267,\"date\":\"2020-06-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4748333333,\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4233431198,\"date\":\"2020-06-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.48025,\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4244570961,\"date\":\"2020-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.49975,\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4255701958,\"date\":\"2020-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4939166667,\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.426682419,\"date\":\"2020-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4895,\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4277937656,\"date\":\"2020-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.49,\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4289042356,\"date\":\"2020-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4801666667,\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4300138291,\"date\":\"2020-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4823333333,\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.431122546,\"date\":\"2020-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.498,\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4322303864,\"date\":\"2020-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5341666667,\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4333373502,\"date\":\"2020-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5275,\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4344434375,\"date\":\"2020-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5030833333,\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4355486482,\"date\":\"2020-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4869166667,\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4366529823,\"date\":\"2020-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4848333333,\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4377564399,\"date\":\"2020-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4865,\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4388590209,\"date\":\"2020-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4828333333,\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4399607254,\"date\":\"2020-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4681666667,\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4410615533,\"date\":\"2020-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4629166667,\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4421615047,\"date\":\"2020-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.436,\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4432605795,\"date\":\"2020-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.42075,\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4443587777,\"date\":\"2020-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4341666667,\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4454560994,\"date\":\"2020-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4274166667,\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4465525446,\"date\":\"2020-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.443,\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4476481131,\"date\":\"2020-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4734166667,\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4487428052,\"date\":\"2020-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.4745,\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4498366206,\"date\":\"2020-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5308333333,\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4509295595,\"date\":\"2020-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5481666667,\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4520216219,\"date\":\"2020-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.5546666667,\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4531128077,\"date\":\"2021-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6196666667,\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4542031169,\"date\":\"2021-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6805,\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4552925496,\"date\":\"2021-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.6963333333,\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4563811057,\"date\":\"2021-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.7136666667,\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4574687853,\"date\":\"2021-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.76625,\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4585555883,\"date\":\"2021-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.8070833333,\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4596415147,\"date\":\"2021-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":2.9301666667,\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4607265646,\"date\":\"2021-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0103333333,\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.461810738,\"date\":\"2021-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.0729166667,\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4628940347,\"date\":\"2021-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1585,\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.463976455,\"date\":\"2021-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1751666667,\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4650579986,\"date\":\"2021-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1625833333,\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4661386657,\"date\":\"2021-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.16725,\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4672184563,\"date\":\"2021-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1645833333,\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4682973703,\"date\":\"2021-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.172,\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4693754077,\"date\":\"2021-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.1914166667,\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4704525686,\"date\":\"2021-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2116666667,\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4715288529,\"date\":\"2021-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.2814166667,\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4726042607,\"date\":\"2021-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.34575,\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4736787919,\"date\":\"2021-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.34525,\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4747524466,\"date\":\"2021-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.35275,\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4758252247,\"date\":\"2021-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3636666667,\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4768971262,\"date\":\"2021-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.39425,\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4779681512,\"date\":\"2021-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.3904166667,\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4790382996,\"date\":\"2021-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4235,\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4801075715,\"date\":\"2021-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4525833333,\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4811759668,\"date\":\"2021-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4655,\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4822434856,\"date\":\"2021-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4844166667,\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4833101278,\"date\":\"2021-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4724166667,\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4843758934,\"date\":\"2021-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4996666667,\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4854407825,\"date\":\"2021-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5111666667,\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.486504795,\"date\":\"2021-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.51675,\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.487567931,\"date\":\"2021-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4896666667,\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4886301904,\"date\":\"2021-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4851666667,\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4896915733,\"date\":\"2021-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5165833333,\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4907520796,\"date\":\"2021-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5061666667,\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4918117093,\"date\":\"2021-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5210833333,\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4928704625,\"date\":\"2021-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5143333333,\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4939283391,\"date\":\"2021-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5270833333,\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4949853392,\"date\":\"2021-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5971666667,\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4960414627,\"date\":\"2021-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.65275,\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4970967097,\"date\":\"2021-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7156666667,\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4981510801,\"date\":\"2021-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7273333333,\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.4992045739,\"date\":\"2021-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7481666667,\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5002571912,\"date\":\"2021-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7454166667,\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.501308932,\"date\":\"2021-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.74575,\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5023597961,\"date\":\"2021-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7333333333,\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5034097837,\"date\":\"2021-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.69975,\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5044588948,\"date\":\"2021-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6755,\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5055071293,\"date\":\"2021-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6595,\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5065544873,\"date\":\"2021-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6401666667,\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5076009687,\"date\":\"2021-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.64475,\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5086465735,\"date\":\"2022-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6535833333,\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5096913018,\"date\":\"2022-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6615,\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5107351535,\"date\":\"2022-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6755,\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5117781287,\"date\":\"2022-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7140833333,\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5128202273,\"date\":\"2022-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7806666667,\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5138614493,\"date\":\"2022-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.82275,\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5149017948,\"date\":\"2022-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8669166667,\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5159412637,\"date\":\"2022-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9433333333,\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5169798561,\"date\":\"2022-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4456666667,\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5180175719,\"date\":\"2022-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.6726666667,\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5190544112,\"date\":\"2022-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.6170833333,\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5200903739,\"date\":\"2022-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.61125,\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5211254601,\"date\":\"2022-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.5525833333,\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5221596697,\"date\":\"2022-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4771666667,\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5231930027,\"date\":\"2022-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4511666667,\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5242254592,\"date\":\"2022-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4879166667,\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5252570391,\"date\":\"2022-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.5610833333,\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5262877425,\"date\":\"2022-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.701,\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5273175693,\"date\":\"2022-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.8656666667,\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5283465195,\"date\":\"2022-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.9719166667,\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5293745932,\"date\":\"2022-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.012,\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5304017904,\"date\":\"2022-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.2535,\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.531428111,\"date\":\"2022-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.38075,\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.532453555,\"date\":\"2022-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.3458333333,\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5334781225,\"date\":\"2022-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.2643333333,\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5345018134,\"date\":\"2022-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.1664166667,\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5355246277,\"date\":\"2022-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":5.0398333333,\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5365465655,\"date\":\"2022-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.883,\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5375676268,\"date\":\"2022-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.7291666667,\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5385878115,\"date\":\"2022-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.5989166667,\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5396071196,\"date\":\"2022-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.4489166667,\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5406255512,\"date\":\"2022-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.349,\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5416431062,\"date\":\"2022-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2890833333,\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5426597846,\"date\":\"2022-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2285,\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5436755865,\"date\":\"2022-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1523333333,\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5446905119,\"date\":\"2022-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1074166667,\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5457045607,\"date\":\"2022-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0789166667,\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5467177329,\"date\":\"2022-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.14825,\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5477300286,\"date\":\"2022-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2526666667,\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5487414477,\"date\":\"2022-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.3633333333,\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5497519903,\"date\":\"2022-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.3120833333,\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5507616563,\"date\":\"2022-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1995833333,\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5517704457,\"date\":\"2022-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1658333333,\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5527783586,\"date\":\"2022-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2105,\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5537853949,\"date\":\"2022-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.17825,\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5547915547,\"date\":\"2022-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0665,\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5557968379,\"date\":\"2022-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9478333333,\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5568012446,\"date\":\"2022-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7958333333,\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5578047747,\"date\":\"2022-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6435833333,\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5588074282,\"date\":\"2022-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.523,\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5598092052,\"date\":\"2022-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4898333333,\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5608101057,\"date\":\"2022-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6025,\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5618101295,\"date\":\"2023-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6311666667,\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5628092769,\"date\":\"2023-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.67775,\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5638075476,\"date\":\"2023-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.774,\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5648049418,\"date\":\"2023-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8493333333,\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5658014595,\"date\":\"2023-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8183333333,\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5667971006,\"date\":\"2023-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.77675,\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5677918651,\"date\":\"2023-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.776,\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5687857531,\"date\":\"2023-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7435833333,\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5697787645,\"date\":\"2023-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7944166667,\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5707708994,\"date\":\"2023-03-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8526666667,\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5717621577,\"date\":\"2023-03-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.81625,\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5727525394,\"date\":\"2023-03-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.81875,\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5737420446,\"date\":\"2023-03-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.883,\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5747306733,\"date\":\"2023-04-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9720833333,\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5757184254,\"date\":\"2023-04-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0398333333,\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5767053009,\"date\":\"2023-04-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0428333333,\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5776912998,\"date\":\"2023-04-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9936666667,\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5786764223,\"date\":\"2023-05-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9304166667,\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5796606681,\"date\":\"2023-05-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9295,\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5806440374,\"date\":\"2023-05-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9285833333,\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5816265302,\"date\":\"2023-05-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9719166667,\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5826081463,\"date\":\"2023-05-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9455833333,\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.583588886,\"date\":\"2023-06-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.995,\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.584568749,\"date\":\"2023-06-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.98025,\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5855477355,\"date\":\"2023-06-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9753333333,\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5865258455,\"date\":\"2023-06-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9385833333,\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5875030789,\"date\":\"2023-07-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9613333333,\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5884794357,\"date\":\"2023-07-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9698333333,\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.589454916,\"date\":\"2023-07-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0019166667,\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5904295198,\"date\":\"2023-07-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1503333333,\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5914032469,\"date\":\"2023-07-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2188333333,\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5923760975,\"date\":\"2023-08-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2440833333,\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5933480716,\"date\":\"2023-08-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2770833333,\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5943191691,\"date\":\"2023-08-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.23275,\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.59528939,\"date\":\"2023-08-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.22625,\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5962587344,\"date\":\"2023-09-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2460833333,\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5972272023,\"date\":\"2023-09-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.323,\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5981947935,\"date\":\"2023-09-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.2991666667,\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.5991615083,\"date\":\"2023-09-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.28625,\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6001273464,\"date\":\"2023-10-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.1599166667,\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.601092308,\"date\":\"2023-10-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0485,\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6020563931,\"date\":\"2023-10-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.99475,\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6030196015,\"date\":\"2023-10-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9290833333,\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6039819335,\"date\":\"2023-10-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8448333333,\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6049433889,\"date\":\"2023-11-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.789,\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6059039677,\"date\":\"2023-11-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7325833333,\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6068636699,\"date\":\"2023-11-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6828333333,\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6078224956,\"date\":\"2023-11-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6656666667,\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6087804448,\"date\":\"2023-12-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5654166667,\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6097375174,\"date\":\"2023-12-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4815,\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6106937134,\"date\":\"2023-12-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5409166667,\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6116490329,\"date\":\"2023-12-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5228333333,\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6126034758,\"date\":\"2024-01-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5079166667,\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6135570422,\"date\":\"2024-01-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4788333333,\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.614509732,\"date\":\"2024-01-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4768333333,\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6154615452,\"date\":\"2024-01-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5109166667,\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6164124819,\"date\":\"2024-01-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.54975,\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6173625421,\"date\":\"2024-02-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5989166667,\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6183117256,\"date\":\"2024-02-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6731666667,\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6192600327,\"date\":\"2024-02-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6526666667,\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6202074631,\"date\":\"2024-02-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7561666667,\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.621154017,\"date\":\"2024-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.781,\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6220996944,\"date\":\"2024-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8548333333,\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6230444952,\"date\":\"2024-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9271666667,\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6239884194,\"date\":\"2024-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9306666667,\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6249314671,\"date\":\"2024-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0188333333,\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6258736382,\"date\":\"2024-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.06375,\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6268149328,\"date\":\"2024-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.10625,\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6277553508,\"date\":\"2024-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.09125,\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6286948923,\"date\":\"2024-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0814166667,\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6296335572,\"date\":\"2024-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0420833333,\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6305713455,\"date\":\"2024-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.0134166667,\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6315082573,\"date\":\"2024-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":4.00925,\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6324442925,\"date\":\"2024-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9465,\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6333794512,\"date\":\"2024-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8579166667,\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6343137333,\"date\":\"2024-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8586666667,\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6352471388,\"date\":\"2024-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8534166667,\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6361796678,\"date\":\"2024-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8831666667,\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6371113203,\"date\":\"2024-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.90025,\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6380420962,\"date\":\"2024-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.9055,\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6389719955,\"date\":\"2024-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.87175,\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6399010183,\"date\":\"2024-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.879,\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6408291645,\"date\":\"2024-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.84375,\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6417564341,\"date\":\"2024-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.8125,\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6426828272,\"date\":\"2024-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7886666667,\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6436083438,\"date\":\"2024-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7275,\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6445329838,\"date\":\"2024-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.7145,\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6454567472,\"date\":\"2024-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6693333333,\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6463796341,\"date\":\"2024-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.62675,\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6473016444,\"date\":\"2024-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6224166667,\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6482227782,\"date\":\"2024-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6073333333,\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6491430354,\"date\":\"2024-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5685833333,\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.650062416,\"date\":\"2024-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5970833333,\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6509809201,\"date\":\"2024-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5735,\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6518985476,\"date\":\"2024-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5249166667,\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6528152986,\"date\":\"2024-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.493,\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.653731173,\"date\":\"2024-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4789166667,\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6546461709,\"date\":\"2024-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4660833333,\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6555602922,\"date\":\"2024-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4660833333,\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6564735369,\"date\":\"2024-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.45425,\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6573859051,\"date\":\"2024-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.431,\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6582973968,\"date\":\"2024-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.431,\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6592080118,\"date\":\"2024-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4395,\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6601177503,\"date\":\"2024-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4266666667,\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6610266123,\"date\":\"2024-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4620833333,\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6619345977,\"date\":\"2025-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4610833333,\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6628417066,\"date\":\"2025-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5243333333,\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6637479389,\"date\":\"2025-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.522,\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6646532946,\"date\":\"2025-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5101666667,\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6655577738,\"date\":\"2025-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5611666667,\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6664613764,\"date\":\"2025-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5964166667,\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6673641025,\"date\":\"2025-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.57775,\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.668265952,\"date\":\"2025-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5271666667,\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6691669249,\"date\":\"2025-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.51375,\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6700670213,\"date\":\"2025-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.4978333333,\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6709662412,\"date\":\"2025-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5485833333,\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6718645844,\"date\":\"2025-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6035,\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6727620512,\"date\":\"2025-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6863333333,\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6736586413,\"date\":\"2025-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.613,\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6745543549,\"date\":\"2025-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.58525,\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.675449192,\"date\":\"2025-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.57875,\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6763431525,\"date\":\"2025-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5851666667,\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6772362364,\"date\":\"2025-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5728333333,\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6781284438,\"date\":\"2025-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6244166667,\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6790197746,\"date\":\"2025-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6089166667,\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6799102289,\"date\":\"2025-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5746666667,\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6807998066,\"date\":\"2025-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5501666667,\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6816885078,\"date\":\"2025-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.5765,\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6825763324,\"date\":\"2025-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6445833333,\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"original\"},{\"avg_price\":3.6834632804,\"date\":\"2025-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"regression\"},{\"avg_price\":3.6851081441,\"date\":\"2025-07-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6859925877,\"date\":\"2025-07-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6868761547,\"date\":\"2025-07-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6877588452,\"date\":\"2025-07-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6886406591,\"date\":\"2025-08-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6895215965,\"date\":\"2025-08-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6904016573,\"date\":\"2025-08-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6912808415,\"date\":\"2025-08-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6921591492,\"date\":\"2025-08-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6930365804,\"date\":\"2025-09-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6939131349,\"date\":\"2025-09-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.694788813,\"date\":\"2025-09-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6956636144,\"date\":\"2025-09-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6965375394,\"date\":\"2025-10-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6974105877,\"date\":\"2025-10-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6982827595,\"date\":\"2025-10-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.6991540547,\"date\":\"2025-10-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7000244734,\"date\":\"2025-11-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7008940156,\"date\":\"2025-11-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7017626811,\"date\":\"2025-11-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7026304701,\"date\":\"2025-11-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7034973826,\"date\":\"2025-11-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7043634185,\"date\":\"2025-12-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7052285778,\"date\":\"2025-12-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7060928606,\"date\":\"2025-12-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7069562668,\"date\":\"2025-12-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7078187965,\"date\":\"2026-01-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7086804496,\"date\":\"2026-01-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7095412262,\"date\":\"2026-01-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7104011262,\"date\":\"2026-01-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7112601496,\"date\":\"2026-02-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7121182965,\"date\":\"2026-02-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7129755669,\"date\":\"2026-02-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7138319606,\"date\":\"2026-02-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7146874778,\"date\":\"2026-03-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7155421185,\"date\":\"2026-03-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7163958826,\"date\":\"2026-03-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7172487702,\"date\":\"2026-03-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7181007811,\"date\":\"2026-03-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7189519156,\"date\":\"2026-04-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7198021734,\"date\":\"2026-04-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7206515548,\"date\":\"2026-04-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7215000595,\"date\":\"2026-04-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7223476877,\"date\":\"2026-05-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7231944394,\"date\":\"2026-05-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7240403145,\"date\":\"2026-05-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.724885313,\"date\":\"2026-05-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.725729435,\"date\":\"2026-05-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7265726804,\"date\":\"2026-06-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7274150493,\"date\":\"2026-06-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7282565416,\"date\":\"2026-06-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7290971573,\"date\":\"2026-06-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7299368965,\"date\":\"2026-07-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7307757592,\"date\":\"2026-07-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7316137452,\"date\":\"2026-07-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7324508548,\"date\":\"2026-07-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7332870877,\"date\":\"2026-08-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7341224441,\"date\":\"2026-08-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.734956924,\"date\":\"2026-08-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7357905273,\"date\":\"2026-08-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.736623254,\"date\":\"2026-08-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7374551042,\"date\":\"2026-09-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7382860778,\"date\":\"2026-09-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7391161749,\"date\":\"2026-09-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7399453954,\"date\":\"2026-09-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7407737394,\"date\":\"2026-10-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7416012067,\"date\":\"2026-10-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7424277976,\"date\":\"2026-10-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7432535119,\"date\":\"2026-10-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7440783496,\"date\":\"2026-11-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7449023108,\"date\":\"2026-11-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7457253954,\"date\":\"2026-11-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7465476034,\"date\":\"2026-11-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7473689349,\"date\":\"2026-11-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7481893899,\"date\":\"2026-12-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7490089683,\"date\":\"2026-12-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7498276701,\"date\":\"2026-12-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7506454954,\"date\":\"2026-12-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7514624441,\"date\":\"2027-01-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7522785162,\"date\":\"2027-01-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7530937118,\"date\":\"2027-01-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7539080309,\"date\":\"2027-01-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7547214734,\"date\":\"2027-01-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7555340393,\"date\":\"2027-02-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7563457287,\"date\":\"2027-02-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7571565415,\"date\":\"2027-02-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7579664777,\"date\":\"2027-02-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7587755374,\"date\":\"2027-03-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7595837206,\"date\":\"2027-03-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7603910272,\"date\":\"2027-03-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7611974572,\"date\":\"2027-03-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7620030107,\"date\":\"2027-04-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7628076876,\"date\":\"2027-04-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.763611488,\"date\":\"2027-04-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7644144118,\"date\":\"2027-04-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.765216459,\"date\":\"2027-05-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7660176297,\"date\":\"2027-05-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7668179238,\"date\":\"2027-05-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7676173414,\"date\":\"2027-05-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7684158824,\"date\":\"2027-05-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7692135469,\"date\":\"2027-06-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7700103348,\"date\":\"2027-06-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7708062462,\"date\":\"2027-06-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.771601281,\"date\":\"2027-06-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7723954392,\"date\":\"2027-07-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7731887209,\"date\":\"2027-07-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.773981126,\"date\":\"2027-07-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7747726546,\"date\":\"2027-07-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7755633066,\"date\":\"2027-08-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.776353082,\"date\":\"2027-08-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7771419809,\"date\":\"2027-08-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7779300032,\"date\":\"2027-08-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.778717149,\"date\":\"2027-08-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7795034183,\"date\":\"2027-09-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7802888109,\"date\":\"2027-09-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.781073327,\"date\":\"2027-09-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7818569666,\"date\":\"2027-09-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7826397296,\"date\":\"2027-10-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.783421616,\"date\":\"2027-10-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7842026259,\"date\":\"2027-10-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7849827592,\"date\":\"2027-10-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.785762016,\"date\":\"2027-10-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7865403962,\"date\":\"2027-11-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7873178999,\"date\":\"2027-11-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.788094527,\"date\":\"2027-11-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7888702775,\"date\":\"2027-11-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7896451515,\"date\":\"2027-12-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7904191489,\"date\":\"2027-12-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7911922698,\"date\":\"2027-12-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7919645141,\"date\":\"2027-12-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7927358819,\"date\":\"2028-01-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7935063731,\"date\":\"2028-01-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7942759877,\"date\":\"2028-01-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7950447258,\"date\":\"2028-01-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7958125873,\"date\":\"2028-01-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7965795723,\"date\":\"2028-02-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7973456807,\"date\":\"2028-02-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7981109126,\"date\":\"2028-02-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7988752679,\"date\":\"2028-02-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.7996387466,\"date\":\"2028-03-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8004013488,\"date\":\"2028-03-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8011630744,\"date\":\"2028-03-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8019239235,\"date\":\"2028-03-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.802683896,\"date\":\"2028-04-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.803442992,\"date\":\"2028-04-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8042012114,\"date\":\"2028-04-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8049585542,\"date\":\"2028-04-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8057150205,\"date\":\"2028-04-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8064706103,\"date\":\"2028-05-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8072253234,\"date\":\"2028-05-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8079791601,\"date\":\"2028-05-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8087321201,\"date\":\"2028-05-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8094842036,\"date\":\"2028-06-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8102354106,\"date\":\"2028-06-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.810985741,\"date\":\"2028-06-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8117351948,\"date\":\"2028-06-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8124837721,\"date\":\"2028-07-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8132314728,\"date\":\"2028-07-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.813978297,\"date\":\"2028-07-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8147242446,\"date\":\"2028-07-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8154693156,\"date\":\"2028-07-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8162135101,\"date\":\"2028-08-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8169568281,\"date\":\"2028-08-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8176992694,\"date\":\"2028-08-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8184408343,\"date\":\"2028-08-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8191815225,\"date\":\"2028-09-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8199213342,\"date\":\"2028-09-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8206602694,\"date\":\"2028-09-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.821398328,\"date\":\"2028-09-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.82213551,\"date\":\"2028-10-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8228718155,\"date\":\"2028-10-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8236072444,\"date\":\"2028-10-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8243417968,\"date\":\"2028-10-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8250754726,\"date\":\"2028-10-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8258082719,\"date\":\"2028-11-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8265401946,\"date\":\"2028-11-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8272712407,\"date\":\"2028-11-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8280014103,\"date\":\"2028-11-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8287307033,\"date\":\"2028-12-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8294591198,\"date\":\"2028-12-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8301866597,\"date\":\"2028-12-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8309133231,\"date\":\"2028-12-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8316391099,\"date\":\"2028-12-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8323640201,\"date\":\"2029-01-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8330880538,\"date\":\"2029-01-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8338112109,\"date\":\"2029-01-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8345334915,\"date\":\"2029-01-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8352548955,\"date\":\"2029-02-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.835975423,\"date\":\"2029-02-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8366950739,\"date\":\"2029-02-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8374138482,\"date\":\"2029-02-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.838131746,\"date\":\"2029-03-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8388487672,\"date\":\"2029-03-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8395649119,\"date\":\"2029-03-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.84028018,\"date\":\"2029-03-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8409945716,\"date\":\"2029-04-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8417080866,\"date\":\"2029-04-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.842420725,\"date\":\"2029-04-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8431324869,\"date\":\"2029-04-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8438433723,\"date\":\"2029-04-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.844553381,\"date\":\"2029-05-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8452625133,\"date\":\"2029-05-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8459707689,\"date\":\"2029-05-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.846678148,\"date\":\"2029-05-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8473846506,\"date\":\"2029-06-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8480902766,\"date\":\"2029-06-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.848795026,\"date\":\"2029-06-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8494988989,\"date\":\"2029-06-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8502018952,\"date\":\"2029-07-01\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.850904015,\"date\":\"2029-07-08\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8516052582,\"date\":\"2029-07-15\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8523056248,\"date\":\"2029-07-22\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8530051149,\"date\":\"2029-07-29\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8537037285,\"date\":\"2029-08-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8544014654,\"date\":\"2029-08-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8550983259,\"date\":\"2029-08-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8557943097,\"date\":\"2029-08-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.856489417,\"date\":\"2029-09-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8571836478,\"date\":\"2029-09-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.857877002,\"date\":\"2029-09-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8585694796,\"date\":\"2029-09-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8592610807,\"date\":\"2029-09-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8599518052,\"date\":\"2029-10-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8606416532,\"date\":\"2029-10-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8613306246,\"date\":\"2029-10-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8620187195,\"date\":\"2029-10-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8627059378,\"date\":\"2029-11-04\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8633922795,\"date\":\"2029-11-11\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8640777447,\"date\":\"2029-11-18\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8647623333,\"date\":\"2029-11-25\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8654460454,\"date\":\"2029-12-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8661288809,\"date\":\"2029-12-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8668108399,\"date\":\"2029-12-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8674919223,\"date\":\"2029-12-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8681721281,\"date\":\"2029-12-30\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8688514574,\"date\":\"2030-01-06\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8695299101,\"date\":\"2030-01-13\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8702074863,\"date\":\"2030-01-20\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8708841859,\"date\":\"2030-01-27\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.871560009,\"date\":\"2030-02-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8722349555,\"date\":\"2030-02-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8729090254,\"date\":\"2030-02-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8735822188,\"date\":\"2030-02-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8742545356,\"date\":\"2030-03-03\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8749259759,\"date\":\"2030-03-10\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8755965396,\"date\":\"2030-03-17\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8762662268,\"date\":\"2030-03-24\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8769350374,\"date\":\"2030-03-31\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8776029714,\"date\":\"2030-04-07\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8782700289,\"date\":\"2030-04-14\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8789362098,\"date\":\"2030-04-21\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8796015142,\"date\":\"2030-04-28\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.880265942,\"date\":\"2030-05-05\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8809294933,\"date\":\"2030-05-12\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.881592168,\"date\":\"2030-05-19\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8822539662,\"date\":\"2030-05-26\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8829148877,\"date\":\"2030-06-02\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8835749328,\"date\":\"2030-06-09\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8842341013,\"date\":\"2030-06-16\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"},{\"avg_price\":3.8848923932,\"date\":\"2030-06-23\",\"fuel\":\"gasoline\",\"is_predicted\":\"forecasting\"}],\"metadata\":{\"avg_price\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"date\":{\"type\":\"date\",\"semanticType\":\"Date\"},\"fuel\":{\"type\":\"string\",\"semanticType\":\"String\"},\"is_predicted\":{\"type\":\"string\",\"semanticType\":\"String\",\"levels\":[\"original\",\"regression\",\"forecasting\"]}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn.preprocessing import PolynomialFeatures\\nfrom sklearn.linear_model import LinearRegression\\nfrom sklearn.pipeline import make_pipeline\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    historical_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    historical_df = historical_df.rename(columns={'price': 'avg_price'})\\n    historical_df = historical_df.sort_values('date')\\n    \\n    # Convert date to datetime for easier manipulation\\n    historical_df['date'] = pd.to_datetime(historical_df['date'])\\n    \\n    # Prepare the result dataframe\\n    all_data = []\\n    \\n    # Process each fuel type separately\\n    for fuel_type in historical_df['fuel'].unique():\\n        fuel_data = historical_df[historical_df['fuel'] == fuel_type].copy()\\n        \\n        # Create numeric representation of dates for regression (days since first date)\\n        min_date = fuel_data['date'].min()\\n        fuel_data['days_since_start'] = (fuel_data['date'] - min_date).dt.days\\n        \\n        # Prepare training data\\n        X = fuel_data[['days_since_start']].values\\n        y = fuel_data['avg_price'].values\\n        \\n        # Train polynomial regression model (degree 2 for non-linear trends)\\n        model = make_pipeline(PolynomialFeatures(degree=2), LinearRegression())\\n        model.fit(X, y)\\n        \\n        # Add original data with 'original' label\\n        fuel_data_original = fuel_data[['date', 'avg_price']].copy()\\n        fuel_data_original['fuel'] = fuel_type\\n        fuel_data_original['is_predicted'] = 'original'\\n        all_data.append(fuel_data_original[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate regression values for historical dates\\n        regression_prices = model.predict(X)\\n        fuel_data_regression = fuel_data[['date']].copy()\\n        fuel_data_regression['fuel'] = fuel_type\\n        fuel_data_regression['avg_price'] = regression_prices\\n        fuel_data_regression['is_predicted'] = 'regression'\\n        all_data.append(fuel_data_regression[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate forecast for next 5 years\\n        max_date = fuel_data['date'].max()\\n        future_dates = pd.date_range(start=max_date + pd.Timedelta(days=7), periods=260, freq='W')\\n        future_days = (future_dates - min_date).days.values.reshape(-1, 1)\\n        \\n        future_prices = model.predict(future_days)\\n        \\n        forecast_df = pd.DataFrame({\\n            'date': future_dates,\\n            'fuel': fuel_type,\\n            'avg_price': future_prices,\\n            'is_predicted': 'forecasting'\\n        })\\n        all_data.append(forecast_df)\\n    \\n    # Combine all data\\n    transformed_df = pd.concat(all_data, ignore_index=True)\\n    transformed_df = transformed_df.sort_values(['fuel', 'date'])\\n    \\n    # Convert date back to string format for output\\n    transformed_df['date'] = transformed_df['date'].dt.strftime('%Y-%m-%d')\\n    \\n    return transformed_df\\n\",\"source\":[\"weekly_gas_prices\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (weekly_gas_prices)\\n\\n## fields\\n\\t*date -- type: object, values: 1990-08-20, 1990-08-27, 1990-09-03, ..., 2025-06-02, 2025-06-09, 2025-06-16, 2025-06-23\\n\\t*fuel -- type: object, values: diesel, gasoline\\n\\t*grade -- type: object, values: all, low_sulfur, midgrade, premium, regular, ultra_low_sulfur\\n\\t*formulation -- type: object, values: NA, all, conventional, reformulated\\n\\t*price -- type: float64, values: 0.885, 0.891, 0.899, ..., 5.955, 5.964, 6.033, 6.064\\n\\n## sample\\n         date      fuel    grade   formulation  price\\n0  1990-08-20  gasoline  regular           all  1.191\\n1  1990-08-20  gasoline  regular  conventional  1.191\\n2  1990-08-27  gasoline  regular           all  1.245\\n3  1990-08-27  gasoline  regular  conventional  1.245\\n4  1990-09-03  gasoline  regular           all  1.242\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nWhat are the major **price trends** across all fuel types from 1990 to 2025?\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to visualize the major price trends across all fuel types from 1990 to 2025 to understand how fuel prices have evolved over time.\\\",\\n    \\\"display_instruction\\\": \\\"Show **price** trends over time for different **fuel** types\\\",\\n    \\\"recommendation\\\": \\\"To visualize price trends over time across fuel types, we should aggregate the data by date and fuel type. Since there are multiple grades and formulations for each fuel type, we'll calculate the average price for each fuel type on each date. A line chart with date on the x-axis, average price on the y-axis, and different colored lines for each fuel type will clearly show the trends and allow easy comparison.\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"fuel\\\", \\\"avg_price\\\"],\\n    \\\"chart_type\\\": \\\"line\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"avg_price\\\",\\n        \\\"color\\\": \\\"fuel\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    transformed_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    \\n    # Rename the price column to avg_price for clarity\\n    transformed_df = transformed_df.rename(columns={'price': 'avg_price'})\\n    \\n    # Sort by date for proper line chart rendering\\n    transformed_df = transformed_df.sort_values('date')\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n         date      fuel  avg_price\\n0  1990-08-20  gasoline      1.191\\n1  1990-08-27  gasoline      1.245\\n2  1990-09-03  gasoline      1.242\\n3  1990-09-10  gasoline      1.252\\n4  1990-09-17  gasoline      1.266\\n5  1990-09-24  gasoline      1.272\\n6  1990-10-01  gasoline      1.321\\n7  1990-10-08  gasoline      1.333\\n8  1990-10-15  gasoline      1.339\\n9  1990-10-22  gasoline      1.345\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"forecast the price trend for the next 5 years with some propert model!\\\",\\n    \\\"chart_type\\\": \\\"Line Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"avg_price\\\",\\n        \\\"color\\\": \\\"fuel\\\",\\n        \\\"column\\\": \\\"fuel\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Build upon the previous price trends visualization by adding forecasted prices for the next 5 years (2025-2030) using a time series forecasting model. The output should include both historical actual prices and forecasted prices, with an indicator to distinguish between them.\\\",\\n    \\\"display_instruction\\\": \\\"Forecast **price** trends for the next 5 years for each **fuel** type\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"fuel\\\", \\\"avg_price\\\", \\\"is_predicted\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"avg_price\\\",\\n        \\\"color\\\": \\\"fuel\\\",\\n        \\\"facet\\\": \\\"is_predicted\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to extend the price trend analysis with forecasting for the next 5 years. Following the guidelines for forecasting, the output should include a 'is_predicted' column to distinguish between actual historical data, regression on historical data, and forecasted future values. The chart should be a line chart showing both historical and predicted values for each fuel type.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn.linear_model import LinearRegression\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    historical_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    historical_df = historical_df.rename(columns={'price': 'avg_price'})\\n    historical_df = historical_df.sort_values('date')\\n    \\n    # Convert date to datetime for easier manipulation\\n    historical_df['date'] = pd.to_datetime(historical_df['date'])\\n    \\n    # Prepare the result dataframe\\n    all_data = []\\n    \\n    # Process each fuel type separately\\n    for fuel_type in historical_df['fuel'].unique():\\n        fuel_data = historical_df[historical_df['fuel'] == fuel_type].copy()\\n        \\n        # Create numeric representation of dates for regression (days since first date)\\n        min_date = fuel_data['date'].min()\\n        fuel_data['days_since_start'] = (fuel_data['date'] - min_date).dt.days\\n        \\n        # Prepare training data\\n        X = fuel_data[['days_since_start']].values\\n        y = fuel_data['avg_price'].values\\n        \\n        # Train linear regression model\\n        model = LinearRegression()\\n        model.fit(X, y)\\n        \\n        # Add original data with 'original' label\\n        fuel_data_original = fuel_data[['date', 'avg_price']].copy()\\n        fuel_data_original['fuel'] = fuel_type\\n        fuel_data_original['is_predicted'] = 'original'\\n        all_data.append(fuel_data_original[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate regression values for historical dates\\n        regression_prices = model.predict(X)\\n        fuel_data_regression = fuel_data[['date']].copy()\\n        fuel_data_regression['fuel'] = fuel_type\\n        fuel_data_regression['avg_price'] = regression_prices\\n        fuel_data_regression['is_predicted'] = 'regression'\\n        all_data.append(fuel_data_regression[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate forecast for next 5 years\\n        max_date = fuel_data['date'].max()\\n        future_dates = pd.date_range(start=max_date + pd.Timedelta(days=7), periods=260, freq='W')\\n        future_days = (future_dates - min_date).days.values.reshape(-1, 1)\\n        \\n        future_prices = model.predict(future_days)\\n        \\n        forecast_df = pd.DataFrame({\\n            'date': future_dates,\\n            'fuel': fuel_type,\\n            'avg_price': future_prices,\\n            'is_predicted': 'forecasting'\\n        })\\n        all_data.append(forecast_df)\\n    \\n    # Combine all data\\n    transformed_df = pd.concat(all_data, ignore_index=True)\\n    transformed_df = transformed_df.sort_values(['fuel', 'date'])\\n    \\n    # Convert date back to string format for output\\n    transformed_df['date'] = transformed_df['date'].dt.strftime('%Y-%m-%d')\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n   avg_price        date    fuel is_predicted\\n0   1.106000  1994-03-21  diesel     original\\n1   1.029221  1994-03-21  diesel   regression\\n2   1.107000  1994-03-28  diesel     original\\n3   1.031148  1994-03-28  diesel   regression\\n4   1.109000  1994-04-04  diesel     original\\n5   1.033075  1994-04-04  diesel   regression\\n6   1.108000  1994-04-11  diesel     original\\n7   1.035002  1994-04-11  diesel   regression\\n8   1.105000  1994-04-18  diesel     original\\n9   1.036929  1994-04-18  diesel   regression\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"use some more complex model\\\",\\n    \\\"chart_type\\\": \\\"Line Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"avg_price\\\",\\n        \\\"color\\\": \\\"is_predicted\\\",\\n        \\\"column\\\": \\\"fuel\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Improve the forecasting model by using a more sophisticated time series model (polynomial regression with degree 2) instead of simple linear regression to better capture non-linear trends in fuel price data. The output should still include historical actual prices, regression fitted values, and forecasted prices for the next 5 years.\\\",\\n    \\\"display_instruction\\\": \\\"Forecast **price** trends using a more complex model for each **fuel** type\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"fuel\\\", \\\"avg_price\\\", \\\"is_predicted\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"avg_price\\\",\\n        \\\"color\\\": \\\"is_predicted\\\",\\n        \\\"facet\\\": \\\"fuel\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to use a more complex forecasting model to potentially capture non-linear trends better. We'll use polynomial regression (degree 2) which can model curved trends while still being interpretable. The chart encodings are updated to color by prediction type and facet by fuel type as specified by the user.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn.preprocessing import PolynomialFeatures\\nfrom sklearn.linear_model import LinearRegression\\nfrom sklearn.pipeline import make_pipeline\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    historical_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    historical_df = historical_df.rename(columns={'price': 'avg_price'})\\n    historical_df = historical_df.sort_values('date')\\n    \\n    # Convert date to datetime for easier manipulation\\n    historical_df['date'] = pd.to_datetime(historical_df['date'])\\n    \\n    # Prepare the result dataframe\\n    all_data = []\\n    \\n    # Process each fuel type separately\\n    for fuel_type in historical_df['fuel'].unique():\\n        fuel_data = historical_df[historical_df['fuel'] == fuel_type].copy()\\n        \\n        # Create numeric representation of dates for regression (days since first date)\\n        min_date = fuel_data['date'].min()\\n        fuel_data['days_since_start'] = (fuel_data['date'] - min_date).dt.days\\n        \\n        # Prepare training data\\n        X = fuel_data[['days_since_start']].values\\n        y = fuel_data['avg_price'].values\\n        \\n        # Train polynomial regression model (degree 2 for non-linear trends)\\n        model = make_pipeline(PolynomialFeatures(degree=2), LinearRegression())\\n        model.fit(X, y)\\n        \\n        # Add original data with 'original' label\\n        fuel_data_original = fuel_data[['date', 'avg_price']].copy()\\n        fuel_data_original['fuel'] = fuel_type\\n        fuel_data_original['is_predicted'] = 'original'\\n        all_data.append(fuel_data_original[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate regression values for historical dates\\n        regression_prices = model.predict(X)\\n        fuel_data_regression = fuel_data[['date']].copy()\\n        fuel_data_regression['fuel'] = fuel_type\\n        fuel_data_regression['avg_price'] = regression_prices\\n        fuel_data_regression['is_predicted'] = 'regression'\\n        all_data.append(fuel_data_regression[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate forecast for next 5 years\\n        max_date = fuel_data['date'].max()\\n        future_dates = pd.date_range(start=max_date + pd.Timedelta(days=7), periods=260, freq='W')\\n        future_days = (future_dates - min_date).days.values.reshape(-1, 1)\\n        \\n        future_prices = model.predict(future_days)\\n        \\n        forecast_df = pd.DataFrame({\\n            'date': future_dates,\\n            'fuel': fuel_type,\\n            'avg_price': future_prices,\\n            'is_predicted': 'forecasting'\\n        })\\n        all_data.append(forecast_df)\\n    \\n    # Combine all data\\n    transformed_df = pd.concat(all_data, ignore_index=True)\\n    transformed_df = transformed_df.sort_values(['fuel', 'date'])\\n    \\n    # Convert date back to string format for output\\n    transformed_df['date'] = transformed_df['date'].dt.strftime('%Y-%m-%d')\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"table-34\",\"sourceTableIds\":[\"weekly_gas_prices\"],\"instruction\":\"use some more complex model\",\"displayInstruction\":\"Forecast **price** trends using a more complex model for each **fuel** type\",\"chart\":{\"id\":\"chart-1760745227478\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--weekly_gas_prices--date\"},\"y\":{\"fieldID\":\"concept-avg_price-1760744859365\"},\"color\":{\"fieldID\":\"concept-is_predicted-1760745153175\",\"sortBy\":\"[\\\"original\\\",\\\"regression\\\",\\\"forecasting\\\"]\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-34\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-22\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"This code performs **price trend analysis and forecasting** for different fuel types:\\n\\n1. **Aggregates** historical gas prices by calculating the **mean price** across all **grades** and **formulations** for each **date** and **fuel** type\\n2. **Prepares** time series data by converting **dates** to datetime format and creating a **days_since_start** numeric variable (days elapsed since the first recorded date)\\n3. **Trains** a **polynomial regression model** (degree 2) separately for each **fuel type** to capture non-linear price trends over time\\n4. **Generates** three types of price records for each fuel:\\n   - **Original**: actual historical average prices with label `'original'`\\n   - **Regression**: model-fitted prices for historical dates with label `'regression'`\\n   - **Forecasting**: predicted prices for the **next 5 years** (260 weekly periods) with label `'forecasting'`\\n5. **Combines** all records and sorts by **fuel** type and **date**\",\"concepts\":[{\"explanation\":\"A numeric time variable representing the number of days elapsed since the first recorded date in the dataset. This transforms calendar dates into a continuous numeric scale suitable for regression modeling: \\\\( \\\\text{days\\\\_since\\\\_start} = (\\\\text{current\\\\_date} - \\\\text{min\\\\_date}) \\\\)\",\"field\":\"days_since_start\"},{\"explanation\":\"A categorical label indicating the source and nature of the price data: 'original' for actual historical observations, 'regression' for model-fitted values on historical dates (representing the polynomial trend), and 'forecasting' for future price predictions beyond the observed data range.\",\"field\":\"is_predicted\"},{\"explanation\":\"This analysis models fuel price trends using **polynomial regression (degree 2)** to capture non-linear patterns in price evolution over time. The model treats time (days since start) as the independent variable and average price as the dependent variable, fitted separately for each fuel type. The quadratic polynomial allows the model to capture acceleration or deceleration in price trends (e.g., prices rising faster over time or stabilizing). Alternative approaches could include: **ARIMA models** for capturing autocorrelation and seasonality, **exponential smoothing** for weighted recent observations, **Prophet** for handling multiple seasonality patterns and holidays, or **LSTM neural networks** for complex non-linear temporal dependencies.\",\"field\":\"Statistical Analysis\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (weekly_gas_prices)\\n\\n## fields\\n\\t*date -- type: object, values: 1990-08-20, 1990-08-27, 1990-09-03, ..., 2025-06-02, 2025-06-09, 2025-06-16, 2025-06-23\\n\\t*fuel -- type: object, values: diesel, gasoline\\n\\t*grade -- type: object, values: all, low_sulfur, midgrade, premium, regular, ultra_low_sulfur\\n\\t*formulation -- type: object, values: NA, all, conventional, reformulated\\n\\t*price -- type: float64, values: 0.885, 0.891, 0.899, ..., 5.955, 5.964, 6.033, 6.064\\n\\n## sample\\n         date      fuel    grade   formulation  price\\n0  1990-08-20  gasoline  regular           all  1.191\\n1  1990-08-20  gasoline  regular  conventional  1.191\\n2  1990-08-27  gasoline  regular           all  1.245\\n3  1990-08-27  gasoline  regular  conventional  1.245\\n4  1990-09-03  gasoline  regular           all  1.242\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn.preprocessing import PolynomialFeatures\\nfrom sklearn.linear_model import LinearRegression\\nfrom sklearn.pipeline import make_pipeline\\n\\ndef transform_data(df_gas_prices):\\n    # Group by date and fuel to get average price across all grades and formulations\\n    historical_df = df_gas_prices.groupby(['date', 'fuel'], as_index=False).agg({\\n        'price': 'mean'\\n    })\\n    historical_df = historical_df.rename(columns={'price': 'avg_price'})\\n    historical_df = historical_df.sort_values('date')\\n    \\n    # Convert date to datetime for easier manipulation\\n    historical_df['date'] = pd.to_datetime(historical_df['date'])\\n    \\n    # Prepare the result dataframe\\n    all_data = []\\n    \\n    # Process each fuel type separately\\n    for fuel_type in historical_df['fuel'].unique():\\n        fuel_data = historical_df[historical_df['fuel'] == fuel_type].copy()\\n        \\n        # Create numeric representation of dates for regression (days since first date)\\n        min_date = fuel_data['date'].min()\\n        fuel_data['days_since_start'] = (fuel_data['date'] - min_date).dt.days\\n        \\n        # Prepare training data\\n        X = fuel_data[['days_since_start']].values\\n        y = fuel_data['avg_price'].values\\n        \\n        # Train polynomial regression model (degree 2 for non-linear trends)\\n        model = make_pipeline(PolynomialFeatures(degree=2), LinearRegression())\\n        model.fit(X, y)\\n        \\n        # Add original data with 'original' label\\n        fuel_data_original = fuel_data[['date', 'avg_price']].copy()\\n        fuel_data_original['fuel'] = fuel_type\\n        fuel_data_original['is_predicted'] = 'original'\\n        all_data.append(fuel_data_original[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate regression values for historical dates\\n        regression_prices = model.predict(X)\\n        fuel_data_regression = fuel_data[['date']].copy()\\n        fuel_data_regression['fuel'] = fuel_type\\n        fuel_data_regression['avg_price'] = regression_prices\\n        fuel_data_regression['is_predicted'] = 'regression'\\n        all_data.append(fuel_data_regression[['date', 'fuel', 'avg_price', 'is_predicted']])\\n        \\n        # Generate forecast for next 5 years\\n        max_date = fuel_data['date'].max()\\n        future_dates = pd.date_range(start=max_date + pd.Timedelta(days=7), periods=260, freq='W')\\n        future_days = (future_dates - min_date).days.values.reshape(-1, 1)\\n        \\n        future_prices = model.predict(future_days)\\n        \\n        forecast_df = pd.DataFrame({\\n            'date': future_dates,\\n            'fuel': fuel_type,\\n            'avg_price': future_prices,\\n            'is_predicted': 'forecasting'\\n        })\\n        all_data.append(forecast_df)\\n    \\n    # Combine all data\\n    transformed_df = pd.concat(all_data, ignore_index=True)\\n    transformed_df = transformed_df.sort_values(['fuel', 'date'])\\n    \\n    # Convert date back to string format for output\\n    transformed_df['date'] = transformed_df['date'].dt.strftime('%Y-%m-%d')\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThis code performs **price trend analysis and forecasting** for different fuel types:\\n\\n1. **Aggregates** historical gas prices by calculating the **mean price** across all **grades** and **formulations** for each **date** and **fuel** type\\n2. **Prepares** time series data by converting **dates** to datetime format and creating a **days_since_start** numeric variable (days elapsed since the first recorded date)\\n3. **Trains** a **polynomial regression model** (degree 2) separately for each **fuel type** to capture non-linear price trends over time\\n4. **Generates** three types of price records for each fuel:\\n   - **Original**: actual historical average prices with label `'original'`\\n   - **Regression**: model-fitted prices for historical dates with label `'regression'`\\n   - **Forecasting**: predicted prices for the **next 5 years** (260 weekly periods) with label `'forecasting'`\\n5. **Combines** all records and sorts by **fuel** type and **date**\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"days_since_start\\\",\\n        \\\"explanation\\\": \\\"A numeric time variable representing the number of days elapsed since the first recorded date in the dataset. This transforms calendar dates into a continuous numeric scale suitable for regression modeling: \\\\\\\\( \\\\\\\\text{days\\\\\\\\_since\\\\\\\\_start} = (\\\\\\\\text{current\\\\\\\\_date} - \\\\\\\\text{min\\\\\\\\_date}) \\\\\\\\)\\\"\\n    },\\n    {\\n        \\\"field\\\": \\\"is_predicted\\\",\\n        \\\"explanation\\\": \\\"A categorical label indicating the source and nature of the price data: 'original' for actual historical observations, 'regression' for model-fitted values on historical dates (representing the polynomial trend), and 'forecasting' for future price predictions beyond the observed data range.\\\"\\n    },\\n    {\\n        \\\"field\\\": \\\"Statistical Analysis\\\",\\n        \\\"explanation\\\": \\\"This analysis models fuel price trends using **polynomial regression (degree 2)** to capture non-linear patterns in price evolution over time. The model treats time (days since start) as the independent variable and average price as the dependent variable, fitted separately for each fuel type. The quadratic polynomial allows the model to capture acceleration or deceleration in price trends (e.g., prices rising faster over time or stabilizing). Alternative approaches could include: **ARIMA models** for capturing autocorrelation and seasonality, **exponential smoothing** for weighted recent observations, **Prophet** for handling multiple seasonality patterns and holidays, or **LSTM neural networks** for complex non-linear temporal dependencies.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"}],\"charts\":[{\"id\":\"chart-1760745227133\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--weekly_gas_prices--date\"},\"y\":{\"fieldID\":\"concept-avg_price-1760744859365\"},\"color\":{\"fieldID\":\"concept-is_predicted-1760745153175\",\"sortBy\":\"[\\\"original\\\",\\\"regression\\\",\\\"forecasting\\\"]\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-22\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760745149814\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--weekly_gas_prices--date\"},\"y\":{\"fieldID\":\"concept-avg_price-1760744859365\"},\"color\":{\"fieldID\":\"concept-is_predicted-1760745153175\",\"sortBy\":\"[\\\"original\\\",\\\"regression\\\",\\\"forecasting\\\"]\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-34\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760744944490\",\"chartType\":\"Grouped Bar Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"y\":{\"fieldID\":\"concept-coefficient_of_variation-1760744946001-0.1428610684738313\"},\"color\":{\"fieldID\":\"concept-period-1760744946001-0.2526720867029991\",\"sortBy\":\"[\\\"Pre-2000 (1990-1999)\\\",\\\"Post-2000 (2000-2025)\\\"]\"},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-937785\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760744923768\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--weekly_gas_prices--date\"},\"y\":{\"fieldID\":\"concept-absolute_change-1760744928850-0.13994508966754027\"},\"color\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"opacity\":{},\"column\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-922023\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760744910486\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--weekly_gas_prices--date\"},\"y\":{\"fieldID\":\"concept-price_premium-1760744912591\"},\"color\":{\"fieldID\":\"original--weekly_gas_prices--grade\",\"sortBy\":\"[\\\"all\\\",\\\"midgrade\\\",\\\"premium\\\"]\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-906894\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760744903250\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--weekly_gas_prices--date\"},\"y\":{\"fieldID\":\"concept-avg_price-1760744859365\"},\"color\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-904593\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760745061868\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--weekly_gas_prices--date\"},\"y\":{\"fieldID\":\"concept-percentage_change-1760744928850-0.05895473410098917\"},\"color\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"opacity\":{},\"column\":{\"fieldID\":\"original--weekly_gas_prices--fuel\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-922023\",\"saved\":false,\"source\":\"user\",\"unread\":false}],\"conceptShelfItems\":[{\"id\":\"concept-is_predicted-1760745153175\",\"name\":\"is_predicted\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-period-1760744946001-0.2526720867029991\",\"name\":\"period\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-std_dev-1760744946001-0.8917004422728384\",\"name\":\"std_dev\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-coefficient_of_variation-1760744946001-0.1428610684738313\",\"name\":\"coefficient_of_variation\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-current_price-1760744928850-0.34299289766164665\",\"name\":\"current_price\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-yoy_price-1760744928850-0.04566871507692338\",\"name\":\"yoy_price\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-absolute_change-1760744928850-0.13994508966754027\",\"name\":\"absolute_change\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-percentage_change-1760744928850-0.05895473410098917\",\"name\":\"percentage_change\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-price_premium-1760744912591\",\"name\":\"price_premium\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-avg_price-1760744859365\",\"name\":\"avg_price\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-avg_price-1760744857739-0.586061332977602\",\"name\":\"avg_price\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"original--weekly_gas_prices--date\",\"name\":\"date\",\"type\":\"date\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"weekly_gas_prices\"},{\"id\":\"original--weekly_gas_prices--fuel\",\"name\":\"fuel\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"weekly_gas_prices\"},{\"id\":\"original--weekly_gas_prices--grade\",\"name\":\"grade\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"weekly_gas_prices\"},{\"id\":\"original--weekly_gas_prices--formulation\",\"name\":\"formulation\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"weekly_gas_prices\"},{\"id\":\"original--weekly_gas_prices--price\",\"name\":\"price\",\"type\":\"number\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"weekly_gas_prices\"}],\"messages\":[{\"timestamp\":1760830949676,\"type\":\"success\",\"component\":\"data formulator\",\"value\":\"Successfully loaded Gas Prices\"}],\"displayedMessageIdx\":0,\"focusedTableId\":\"table-22\",\"focusedChartId\":\"chart-1760745227133\",\"viewMode\":\"report\",\"chartSynthesisInProgress\":[],\"config\":{\"formulateTimeoutSeconds\":60,\"maxRepairAttempts\":1,\"defaultChartWidth\":300,\"defaultChartHeight\":300},\"agentActions\":[{\"actionId\":\"exploreDataFromNL_1760744902503\",\"tableId\":\"table-937785\",\"description\":\"• **Long-term price trends (1990-2025)**: Both diesel and gasoline showed overall upward trends from 1990 to mid-2000s, peaking around 2008, then stabilizing at higher levels with fluctuations through 2025. Diesel consistently priced higher than gasoline throughout most of the period.\\n\\n• **Year-over-year volatility**: The scatter plot reveals several dramatic price spikes, with the largest absolute changes (~2.5) and percentage changes (70-75%) occurring in recent years (2021-2025), indicating major price disruptions in the post-pandemic period.\\n\\n• **Price stability comparison**: Price volatility increased dramatically post-2000, with coefficient of variation rising from ~7-9% (pre-2000) to ~29-33% (post-2000) for both fuel types, indicating prices became 3-4x more volatile in recent decades. Diesel shows slightly higher volatility than gasoline in both periods.\",\"status\":\"completed\",\"hidden\":false,\"lastUpdate\":1760744954367}],\"dataCleanBlocks\":[],\"cleanInProgress\":false,\"generatedReports\":[{\"id\":\"report-1760831021256-7310\",\"content\":\"# Fuel Price Volatility and Premium Trends: A Three-Decade Analysis\\n\\nThe U.S. fuel market has undergone dramatic shifts in pricing dynamics over the past 35 years, with post-2000 prices showing significantly higher volatility and expanding premium differentials across gasoline grades.\\n\\n[IMAGE(chart-1760744944490)]\\n\\n**Price volatility has intensified dramatically in the modern era.** The coefficient of variation—a measure of price instability relative to average costs—reveals that both diesel and gasoline experienced roughly **four-fold increases** in volatility post-2000. Diesel prices showed particularly heightened instability with a coefficient of variation of 33.48% (2000-2025) compared to just 7.65% in the 1990s. This shift reflects increased sensitivity to global crude oil market fluctuations, geopolitical tensions, and refining capacity constraints. Average prices also more than doubled across both fuel types, with diesel climbing from $1.14 to $2.93 per gallon.\\n\\n[IMAGE(chart-1760744910486)]\\n\\n**Premium gasoline pricing has steadily diverged from regular grades over time.** The price premium commanded by higher-octane gasoline grades has expanded substantially, with premium gasoline reaching spreads of **$0.90-$0.95 above regular** by 2025—nearly five times the $0.18-$0.20 premium observed in the mid-1990s. Midgrade gasoline follows a similar trajectory, reaching $0.55-$0.60 premiums. This widening gap suggests evolving refining economics, increased consumer segmentation, and potentially higher margins on premium products.\\n\\n**In summary**, the fuel market has transitioned from relative price stability in the 1990s to an era characterized by substantial volatility and expanding price differentiation. Consumers and businesses face both higher absolute costs and greater uncertainty in budgeting for fuel expenses. Key questions for further investigation include: What specific market mechanisms drive the premium expansion? How do regional variations affect these national trends? What role do alternative fuels play in moderating future volatility?\",\"style\":\"executive summary\",\"selectedChartIds\":[\"chart-1760744944490\",\"chart-1760744910486\"],\"createdAt\":1760831035718},{\"id\":\"report-1760830985775-9885\",\"content\":\"# Fuel Prices Set to Continue Rising Through 2030\\n\\nHistorical data reveals a clear upward trend in both diesel and gasoline prices since the 1990s. Our polynomial regression model shows prices have increased nearly sixfold over three decades, with notable volatility around 2008 and 2022 reflecting global economic shocks.\\n\\n[IMAGE(chart-1760745227133)]\\n\\nThe forecast suggests this upward trajectory will persist, with both fuel types projected to reach approximately $3.80-$3.90 per gallon by 2030. While short-term fluctuations are inevitable, the long-term trend remains consistently upward.\\n\\n**In summary**, fuel prices have demonstrated sustained growth over 35 years and are expected to continue rising. Consumers and businesses should anticipate higher energy costs in coming years and consider efficiency improvements or alternative energy sources.\",\"style\":\"short note\",\"selectedChartIds\":[\"chart-1760745227133\"],\"createdAt\":1760830993075}],\"currentReport\":{\"id\":\"report-1760750575650-2619\",\"content\":\"# Hollywood's Billion-Dollar Hitmakers\\n\\n*Avatar* stands alone—earning over $2.5B in profit, dwarfing all competition. Action and Adventure films dominate the most profitable titles, with franchises like *Jurassic Park*, *The Dark Knight*, and *Lord of the Rings* proving blockbuster formulas work.\\n\\n<img src=\\\"blob:http://localhost:5173/de49db0f-5fad-4c15-b1b9-cda87ef53107\\\" alt=\\\"Chart\\\" width=\\\"3384\\\" height=\\\"1728\\\" />\\n\\nSteven Spielberg leads all directors with $7.2B in total profit across his career, showcasing remarkable consistency with hits spanning decades—from *Jurassic Park* to *E.T.* His nearest competitors trail by billions, underlining his unmatched commercial impact.\\n\\n<img src=\\\"blob:http://localhost:5173/d7a91ff7-1d87-4299-bcd7-f9b69558cac7\\\" alt=\\\"Chart\\\" width=\\\"2764\\\" height=\\\"1712\\\" />\\n\\n**In summary**, mega-budget Action and Adventure films generate extraordinary returns when they succeed, and a handful of elite directors—led by Spielberg—have mastered the formula for sustained box office dominance.\",\"style\":\"short note\",\"selectedChartIds\":[\"chart-1760743347871\",\"chart-1760743768741\"],\"chartImages\":{},\"createdAt\":1760750584189,\"title\":\"Report - 10/17/2025\"},\"activeChallenges\":[],\"agentWorkInProgress\":[],\"_persist\":{\"version\":-1,\"rehydrated\":true}}"
  },
  {
    "path": "public/df_global_energy.json",
    "content": "{\"tables\":[{\"id\":\"global-energy-20-small.csv\",\"displayId\":\"energy-co2\",\"names\":[\"Year\",\"Entity\",\"Value_co2_emissions_kt_by_country\",\"Electricity from fossil fuels (TWh)\",\"Electricity from nuclear (TWh)\",\"Electricity from renewables (TWh)\"],\"metadata\":{\"Year\":{\"type\":\"number\",\"semanticType\":\"Year\"},\"Entity\":{\"type\":\"string\",\"semanticType\":\"Location\"},\"Value_co2_emissions_kt_by_country\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Electricity from fossil fuels (TWh)\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Electricity from nuclear (TWh)\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Electricity from renewables (TWh)\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"rows\":[{\"Year\":2000,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":339450,\"Electricity from fossil fuels (TWh)\":181.05,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":17.11},{\"Year\":2001,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":345640,\"Electricity from fossil fuels (TWh)\":194.33,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":17.4},{\"Year\":2002,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":353369.9951,\"Electricity from fossil fuels (TWh)\":197.29,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":17.35},{\"Year\":2003,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":352579.9866,\"Electricity from fossil fuels (TWh)\":195.13,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":18.5},{\"Year\":2004,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":365809.9976,\"Electricity from fossil fuels (TWh)\":203.66,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":19.41},{\"Year\":2005,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":370089.9963,\"Electricity from fossil fuels (TWh)\":195.95,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":19.75},{\"Year\":2006,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":375489.9902,\"Electricity from fossil fuels (TWh)\":198.72,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":21.19},{\"Year\":2007,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":385750,\"Electricity from fossil fuels (TWh)\":208.59,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":20.93},{\"Year\":2008,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":388940.0024,\"Electricity from fossil fuels (TWh)\":211.06,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":18.49},{\"Year\":2009,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":395290.0085,\"Electricity from fossil fuels (TWh)\":216.42,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":18.32},{\"Year\":2010,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":387540.0085,\"Electricity from fossil fuels (TWh)\":212.5,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":21.13},{\"Year\":2011,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":386380.0049,\"Electricity from fossil fuels (TWh)\":213.56,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":27.33},{\"Year\":2012,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":386970.0012,\"Electricity from fossil fuels (TWh)\":206.75,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":26.63},{\"Year\":2013,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":380279.9988,\"Electricity from fossil fuels (TWh)\":195.78,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":34.2},{\"Year\":2014,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":371630.0049,\"Electricity from fossil fuels (TWh)\":205.46,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":36.15},{\"Year\":2015,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":377799.9878,\"Electricity from fossil fuels (TWh)\":197.72,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":33.12},{\"Year\":2016,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":384989.9902,\"Electricity from fossil fuels (TWh)\":207.66,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":38.41},{\"Year\":2017,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":389160.0037,\"Electricity from fossil fuels (TWh)\":209.14,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":40.77},{\"Year\":2018,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":387070.0073,\"Electricity from fossil fuels (TWh)\":207.45,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":42.93},{\"Year\":2019,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":386529.9988,\"Electricity from fossil fuels (TWh)\":196.45,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":53.41},{\"Year\":2020,\"Entity\":\"Australia\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":186.92,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":63.99},{\"Year\":2000,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":313670,\"Electricity from fossil fuels (TWh)\":28.87,\"Electricity from nuclear (TWh)\":4.94,\"Electricity from renewables (TWh)\":308.77},{\"Year\":2001,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":319380,\"Electricity from fossil fuels (TWh)\":35.19,\"Electricity from nuclear (TWh)\":14.27,\"Electricity from renewables (TWh)\":273.71},{\"Year\":2002,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":317760.0098,\"Electricity from fossil fuels (TWh)\":33.5,\"Electricity from nuclear (TWh)\":13.84,\"Electricity from renewables (TWh)\":292.95},{\"Year\":2003,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":310809.9976,\"Electricity from fossil fuels (TWh)\":31.62,\"Electricity from nuclear (TWh)\":13.4,\"Electricity from renewables (TWh)\":313.88},{\"Year\":2004,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":328519.989,\"Electricity from fossil fuels (TWh)\":40.14,\"Electricity from nuclear (TWh)\":11.6,\"Electricity from renewables (TWh)\":329.43},{\"Year\":2005,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":331690.0024,\"Electricity from fossil fuels (TWh)\":39.56,\"Electricity from nuclear (TWh)\":9.2,\"Electricity from renewables (TWh)\":346.96},{\"Year\":2006,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":335619.9951,\"Electricity from fossil fuels (TWh)\":39.4,\"Electricity from nuclear (TWh)\":12.98,\"Electricity from renewables (TWh)\":359.55},{\"Year\":2007,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":352559.9976,\"Electricity from fossil fuels (TWh)\":37.64,\"Electricity from nuclear (TWh)\":11.65,\"Electricity from renewables (TWh)\":387.88},{\"Year\":2008,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":373630.0049,\"Electricity from fossil fuels (TWh)\":55.87,\"Electricity from nuclear (TWh)\":13.21,\"Electricity from renewables (TWh)\":385.61},{\"Year\":2009,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":350000,\"Electricity from fossil fuels (TWh)\":36.32,\"Electricity from nuclear (TWh)\":12.22,\"Electricity from renewables (TWh)\":410.13},{\"Year\":2010,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":397929.9927,\"Electricity from fossil fuels (TWh)\":61.02,\"Electricity from nuclear (TWh)\":13.77,\"Electricity from renewables (TWh)\":435.99},{\"Year\":2011,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":418309.9976,\"Electricity from fossil fuels (TWh)\":50.27,\"Electricity from nuclear (TWh)\":14.8,\"Electricity from renewables (TWh)\":462.32},{\"Year\":2012,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":454230.011,\"Electricity from fossil fuels (TWh)\":77.21,\"Electricity from nuclear (TWh)\":15.17,\"Electricity from renewables (TWh)\":454.78},{\"Year\":2013,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":486839.9963,\"Electricity from fossil fuels (TWh)\":112,\"Electricity from nuclear (TWh)\":14.65,\"Electricity from renewables (TWh)\":436.84},{\"Year\":2014,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":511619.9951,\"Electricity from fossil fuels (TWh)\":136.58,\"Electricity from nuclear (TWh)\":14.46,\"Electricity from renewables (TWh)\":430.82},{\"Year\":2015,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":485339.9963,\"Electricity from fossil fuels (TWh)\":128.85,\"Electricity from nuclear (TWh)\":13.91,\"Electricity from renewables (TWh)\":428.81},{\"Year\":2016,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":447079.9866,\"Electricity from fossil fuels (TWh)\":93.06,\"Electricity from nuclear (TWh)\":14.97,\"Electricity from renewables (TWh)\":463.37},{\"Year\":2017,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":456489.9902,\"Electricity from fossil fuels (TWh)\":101.9,\"Electricity from nuclear (TWh)\":14.86,\"Electricity from renewables (TWh)\":464.4},{\"Year\":2018,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":433989.9902,\"Electricity from fossil fuels (TWh)\":86.69,\"Electricity from nuclear (TWh)\":14.79,\"Electricity from renewables (TWh)\":492.66},{\"Year\":2019,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":434299.9878,\"Electricity from fossil fuels (TWh)\":90.91,\"Electricity from nuclear (TWh)\":15.16,\"Electricity from renewables (TWh)\":512.59},{\"Year\":2020,\"Entity\":\"Brazil\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":81.15,\"Electricity from nuclear (TWh)\":13.21,\"Electricity from renewables (TWh)\":520.01},{\"Year\":2000,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":514220,\"Electricity from fossil fuels (TWh)\":155.56,\"Electricity from nuclear (TWh)\":69.16,\"Electricity from renewables (TWh)\":363.7},{\"Year\":2001,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":506620,\"Electricity from fossil fuels (TWh)\":159.93,\"Electricity from nuclear (TWh)\":72.86,\"Electricity from renewables (TWh)\":339.58},{\"Year\":2002,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":524349.9756,\"Electricity from fossil fuels (TWh)\":155.12,\"Electricity from nuclear (TWh)\":71.75,\"Electricity from renewables (TWh)\":357.06},{\"Year\":2003,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":544539.978,\"Electricity from fossil fuels (TWh)\":157.35,\"Electricity from nuclear (TWh)\":71.15,\"Electricity from renewables (TWh)\":343.88},{\"Year\":2004,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":536419.9829,\"Electricity from fossil fuels (TWh)\":148.86,\"Electricity from nuclear (TWh)\":85.87,\"Electricity from renewables (TWh)\":347.68},{\"Year\":2005,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":549030.0293,\"Electricity from fossil fuels (TWh)\":150.78,\"Electricity from nuclear (TWh)\":86.83,\"Electricity from renewables (TWh)\":368.86},{\"Year\":2006,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":540530.0293,\"Electricity from fossil fuels (TWh)\":139.71,\"Electricity from nuclear (TWh)\":92.44,\"Electricity from renewables (TWh)\":360.48},{\"Year\":2007,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":571630.0049,\"Electricity from fossil fuels (TWh)\":149.36,\"Electricity from nuclear (TWh)\":88.19,\"Electricity from renewables (TWh)\":375.42},{\"Year\":2008,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":550469.9707,\"Electricity from fossil fuels (TWh)\":141.33,\"Electricity from nuclear (TWh)\":88.3,\"Electricity from renewables (TWh)\":385.21},{\"Year\":2009,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":521320.0073,\"Electricity from fossil fuels (TWh)\":129.76,\"Electricity from nuclear (TWh)\":85.13,\"Electricity from renewables (TWh)\":380.24},{\"Year\":2010,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":537010.0098,\"Electricity from fossil fuels (TWh)\":130.08,\"Electricity from nuclear (TWh)\":85.53,\"Electricity from renewables (TWh)\":366.21},{\"Year\":2011,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":549289.978,\"Electricity from fossil fuels (TWh)\":131.3,\"Electricity from nuclear (TWh)\":88.29,\"Electricity from renewables (TWh)\":391.95},{\"Year\":2012,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":546210.022,\"Electricity from fossil fuels (TWh)\":124.2,\"Electricity from nuclear (TWh)\":89.49,\"Electricity from renewables (TWh)\":398.58},{\"Year\":2013,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":555659.9731,\"Electricity from fossil fuels (TWh)\":122.87,\"Electricity from nuclear (TWh)\":97.58,\"Electricity from renewables (TWh)\":417.28},{\"Year\":2014,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":561679.9927,\"Electricity from fossil fuels (TWh)\":122.75,\"Electricity from nuclear (TWh)\":101.21,\"Electricity from renewables (TWh)\":412.13},{\"Year\":2015,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":558700.0122,\"Electricity from fossil fuels (TWh)\":125.7,\"Electricity from nuclear (TWh)\":96.05,\"Electricity from renewables (TWh)\":417.2},{\"Year\":2016,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":556830.0171,\"Electricity from fossil fuels (TWh)\":122.35,\"Electricity from nuclear (TWh)\":95.69,\"Electricity from renewables (TWh)\":426.84},{\"Year\":2017,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":568080.0171,\"Electricity from fossil fuels (TWh)\":113.7,\"Electricity from nuclear (TWh)\":95.57,\"Electricity from renewables (TWh)\":435.43},{\"Year\":2018,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":580090.0269,\"Electricity from fossil fuels (TWh)\":112.47,\"Electricity from nuclear (TWh)\":95.03,\"Electricity from renewables (TWh)\":428.39},{\"Year\":2019,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":580210.022,\"Electricity from fossil fuels (TWh)\":110.65,\"Electricity from nuclear (TWh)\":95.47,\"Electricity from renewables (TWh)\":421.8},{\"Year\":2020,\"Entity\":\"Canada\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":102.19,\"Electricity from nuclear (TWh)\":92.65,\"Electricity from renewables (TWh)\":429.24},{\"Year\":2000,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":3346530,\"Electricity from fossil fuels (TWh)\":1113.3,\"Electricity from nuclear (TWh)\":16.74,\"Electricity from renewables (TWh)\":225.56},{\"Year\":2001,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":3529080,\"Electricity from fossil fuels (TWh)\":1182.59,\"Electricity from nuclear (TWh)\":17.47,\"Electricity from renewables (TWh)\":280.73},{\"Year\":2002,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":3810060.059,\"Electricity from fossil fuels (TWh)\":1337.46,\"Electricity from nuclear (TWh)\":25.13,\"Electricity from renewables (TWh)\":291.41},{\"Year\":2003,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":4415910.156,\"Electricity from fossil fuels (TWh)\":1579.96,\"Electricity from nuclear (TWh)\":43.34,\"Electricity from renewables (TWh)\":287.28},{\"Year\":2004,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":5124819.824,\"Electricity from fossil fuels (TWh)\":1795.41,\"Electricity from nuclear (TWh)\":50.47,\"Electricity from renewables (TWh)\":357.43},{\"Year\":2005,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":5824629.883,\"Electricity from fossil fuels (TWh)\":2042.8,\"Electricity from nuclear (TWh)\":53.09,\"Electricity from renewables (TWh)\":404.37},{\"Year\":2006,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":6437470.215,\"Electricity from fossil fuels (TWh)\":2364.16,\"Electricity from nuclear (TWh)\":54.84,\"Electricity from renewables (TWh)\":446.72},{\"Year\":2007,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":6993180.176,\"Electricity from fossil fuels (TWh)\":2718.7,\"Electricity from nuclear (TWh)\":62.13,\"Electricity from renewables (TWh)\":500.71},{\"Year\":2008,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":7199600.098,\"Electricity from fossil fuels (TWh)\":2762.29,\"Electricity from nuclear (TWh)\":68.39,\"Electricity from renewables (TWh)\":665.08},{\"Year\":2009,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":7719069.824,\"Electricity from fossil fuels (TWh)\":2980.2,\"Electricity from nuclear (TWh)\":70.05,\"Electricity from renewables (TWh)\":664.39},{\"Year\":2010,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":8474919.922,\"Electricity from fossil fuels (TWh)\":3326.19,\"Electricity from nuclear (TWh)\":74.74,\"Electricity from renewables (TWh)\":786.38},{\"Year\":2011,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":9282549.805,\"Electricity from fossil fuels (TWh)\":3811.77,\"Electricity from nuclear (TWh)\":87.2,\"Electricity from renewables (TWh)\":792.38},{\"Year\":2012,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":9541870.117,\"Electricity from fossil fuels (TWh)\":3869.38,\"Electricity from nuclear (TWh)\":98.32,\"Electricity from renewables (TWh)\":999.56},{\"Year\":2013,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":9984570.313,\"Electricity from fossil fuels (TWh)\":4203.77,\"Electricity from nuclear (TWh)\":111.5,\"Electricity from renewables (TWh)\":1093.37},{\"Year\":2014,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":10006669.92,\"Electricity from fossil fuels (TWh)\":4345.86,\"Electricity from nuclear (TWh)\":133.22,\"Electricity from renewables (TWh)\":1289.23},{\"Year\":2015,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":9861099.609,\"Electricity from fossil fuels (TWh)\":4222.76,\"Electricity from nuclear (TWh)\":171.38,\"Electricity from renewables (TWh)\":1393.66},{\"Year\":2016,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":9874660.156,\"Electricity from fossil fuels (TWh)\":4355,\"Electricity from nuclear (TWh)\":213.18,\"Electricity from renewables (TWh)\":1522.79},{\"Year\":2017,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":10096009.77,\"Electricity from fossil fuels (TWh)\":4643.1,\"Electricity from nuclear (TWh)\":248.1,\"Electricity from renewables (TWh)\":1667.06},{\"Year\":2018,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":10502929.69,\"Electricity from fossil fuels (TWh)\":4990.28,\"Electricity from nuclear (TWh)\":295,\"Electricity from renewables (TWh)\":1835.32},{\"Year\":2019,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":10707219.73,\"Electricity from fossil fuels (TWh)\":5098.22,\"Electricity from nuclear (TWh)\":348.7,\"Electricity from renewables (TWh)\":2014.57},{\"Year\":2020,\"Entity\":\"China\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":5184.13,\"Electricity from nuclear (TWh)\":366.2,\"Electricity from renewables (TWh)\":2184.94},{\"Year\":2000,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":373120,\"Electricity from fossil fuels (TWh)\":50.61,\"Electricity from nuclear (TWh)\":415.16,\"Electricity from renewables (TWh)\":67.83},{\"Year\":2001,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":376730,\"Electricity from fossil fuels (TWh)\":46.48,\"Electricity from nuclear (TWh)\":421.08,\"Electricity from renewables (TWh)\":76.09},{\"Year\":2002,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":371019.989,\"Electricity from fossil fuels (TWh)\":52.67,\"Electricity from nuclear (TWh)\":436.76,\"Electricity from renewables (TWh)\":62.69},{\"Year\":2003,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":376709.9915,\"Electricity from fossil fuels (TWh)\":57.38,\"Electricity from nuclear (TWh)\":441.07,\"Electricity from renewables (TWh)\":61.47},{\"Year\":2004,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":377790.0085,\"Electricity from fossil fuels (TWh)\":56.53,\"Electricity from nuclear (TWh)\":448.24,\"Electricity from renewables (TWh)\":62.42},{\"Year\":2005,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":380660.0037,\"Electricity from fossil fuels (TWh)\":63.35,\"Electricity from nuclear (TWh)\":451.53,\"Electricity from renewables (TWh)\":54.98},{\"Year\":2006,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":371549.9878,\"Electricity from fossil fuels (TWh)\":56.9,\"Electricity from nuclear (TWh)\":450.19,\"Electricity from renewables (TWh)\":60.91},{\"Year\":2007,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":362829.9866,\"Electricity from fossil fuels (TWh)\":58.18,\"Electricity from nuclear (TWh)\":439.73,\"Electricity from renewables (TWh)\":64.3},{\"Year\":2008,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":357989.9902,\"Electricity from fossil fuels (TWh)\":55.57,\"Electricity from nuclear (TWh)\":439.45,\"Electricity from renewables (TWh)\":72.33},{\"Year\":2009,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":343730.011,\"Electricity from fossil fuels (TWh)\":51.32,\"Electricity from nuclear (TWh)\":409.74,\"Electricity from renewables (TWh)\":68.15},{\"Year\":2010,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":347779.9988,\"Electricity from fossil fuels (TWh)\":57.63,\"Electricity from nuclear (TWh)\":428.52,\"Electricity from renewables (TWh)\":76.68},{\"Year\":2011,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":335140.0146,\"Electricity from fossil fuels (TWh)\":58.99,\"Electricity from nuclear (TWh)\":442.39,\"Electricity from renewables (TWh)\":66.02},{\"Year\":2012,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":338420.0134,\"Electricity from fossil fuels (TWh)\":56.42,\"Electricity from nuclear (TWh)\":425.41,\"Electricity from renewables (TWh)\":85.25},{\"Year\":2013,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":338559.9976,\"Electricity from fossil fuels (TWh)\":53.35,\"Electricity from nuclear (TWh)\":423.68,\"Electricity from renewables (TWh)\":99.42},{\"Year\":2014,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":306100.0061,\"Electricity from fossil fuels (TWh)\":35.68,\"Electricity from nuclear (TWh)\":436.48,\"Electricity from renewables (TWh)\":94.03},{\"Year\":2015,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":311299.9878,\"Electricity from fossil fuels (TWh)\":44.65,\"Electricity from nuclear (TWh)\":437.43,\"Electricity from renewables (TWh)\":91.84},{\"Year\":2016,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":313920.0134,\"Electricity from fossil fuels (TWh)\":56.45,\"Electricity from nuclear (TWh)\":403.2,\"Electricity from renewables (TWh)\":99},{\"Year\":2017,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":317829.9866,\"Electricity from fossil fuels (TWh)\":65.09,\"Electricity from nuclear (TWh)\":398.36,\"Electricity from renewables (TWh)\":92.63},{\"Year\":2018,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":307049.9878,\"Electricity from fossil fuels (TWh)\":49.27,\"Electricity from nuclear (TWh)\":412.94,\"Electricity from renewables (TWh)\":113.62},{\"Year\":2019,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":300519.989,\"Electricity from fossil fuels (TWh)\":53.5,\"Electricity from nuclear (TWh)\":399.01,\"Electricity from renewables (TWh)\":113.21},{\"Year\":2020,\"Entity\":\"France\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":48.14,\"Electricity from nuclear (TWh)\":353.83,\"Electricity from renewables (TWh)\":125.28},{\"Year\":2000,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":830280,\"Electricity from fossil fuels (TWh)\":367.22,\"Electricity from nuclear (TWh)\":169.61,\"Electricity from renewables (TWh)\":35.47},{\"Year\":2001,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":847680,\"Electricity from fossil fuels (TWh)\":372.69,\"Electricity from nuclear (TWh)\":171.3,\"Electricity from renewables (TWh)\":37.9},{\"Year\":2002,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":833380.0049,\"Electricity from fossil fuels (TWh)\":372.64,\"Electricity from nuclear (TWh)\":164.84,\"Electricity from renewables (TWh)\":44.48},{\"Year\":2003,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":836789.978,\"Electricity from fossil fuels (TWh)\":390.81,\"Electricity from nuclear (TWh)\":165.06,\"Electricity from renewables (TWh)\":46.67},{\"Year\":2004,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":821070.0073,\"Electricity from fossil fuels (TWh)\":385.24,\"Electricity from nuclear (TWh)\":167.07,\"Electricity from renewables (TWh)\":57.97},{\"Year\":2005,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":802380.0049,\"Electricity from fossil fuels (TWh)\":386.96,\"Electricity from nuclear (TWh)\":163.05,\"Electricity from renewables (TWh)\":63.4},{\"Year\":2006,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":814409.9731,\"Electricity from fossil fuels (TWh)\":390.03,\"Electricity from nuclear (TWh)\":167.27,\"Electricity from renewables (TWh)\":72.51},{\"Year\":2007,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":783799.9878,\"Electricity from fossil fuels (TWh)\":402.4,\"Electricity from nuclear (TWh)\":140.53,\"Electricity from renewables (TWh)\":89.38},{\"Year\":2008,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":789690.0024,\"Electricity from fossil fuels (TWh)\":390.43,\"Electricity from nuclear (TWh)\":148.49,\"Electricity from renewables (TWh)\":94.28},{\"Year\":2009,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":734809.9976,\"Electricity from fossil fuels (TWh)\":358.07,\"Electricity from nuclear (TWh)\":134.93,\"Electricity from renewables (TWh)\":95.94},{\"Year\":2010,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":773070.0073,\"Electricity from fossil fuels (TWh)\":378.9,\"Electricity from nuclear (TWh)\":140.56,\"Electricity from renewables (TWh)\":105.18},{\"Year\":2011,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":746479.9805,\"Electricity from fossil fuels (TWh)\":373.16,\"Electricity from nuclear (TWh)\":107.97,\"Electricity from renewables (TWh)\":124.04},{\"Year\":2012,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":760130.0049,\"Electricity from fossil fuels (TWh)\":377.89,\"Electricity from nuclear (TWh)\":99.46,\"Electricity from renewables (TWh)\":143.04},{\"Year\":2013,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":776150.0244,\"Electricity from fossil fuels (TWh)\":381.52,\"Electricity from nuclear (TWh)\":97.29,\"Electricity from renewables (TWh)\":152.34},{\"Year\":2014,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":736010.0098,\"Electricity from fossil fuels (TWh)\":360.28,\"Electricity from nuclear (TWh)\":97.13,\"Electricity from renewables (TWh)\":162.54},{\"Year\":2015,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":742309.9976,\"Electricity from fossil fuels (TWh)\":359.99,\"Electricity from nuclear (TWh)\":91.79,\"Electricity from renewables (TWh)\":188.79},{\"Year\":2016,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":747150.0244,\"Electricity from fossil fuels (TWh)\":368.67,\"Electricity from nuclear (TWh)\":84.63,\"Electricity from renewables (TWh)\":189.67},{\"Year\":2017,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":732200.0122,\"Electricity from fossil fuels (TWh)\":353.37,\"Electricity from nuclear (TWh)\":76.32,\"Electricity from renewables (TWh)\":216.32},{\"Year\":2018,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":707700.0122,\"Electricity from fossil fuels (TWh)\":334.65,\"Electricity from nuclear (TWh)\":76,\"Electricity from renewables (TWh)\":222.07},{\"Year\":2019,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":657400.0244,\"Electricity from fossil fuels (TWh)\":284.09,\"Electricity from nuclear (TWh)\":75.07,\"Electricity from renewables (TWh)\":240.33},{\"Year\":2020,\"Entity\":\"Germany\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":251.4,\"Electricity from nuclear (TWh)\":64.38,\"Electricity from renewables (TWh)\":251.48},{\"Year\":2000,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":937860,\"Electricity from fossil fuels (TWh)\":475.35,\"Electricity from nuclear (TWh)\":15.77,\"Electricity from renewables (TWh)\":80.27},{\"Year\":2001,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":953540,\"Electricity from fossil fuels (TWh)\":491.01,\"Electricity from nuclear (TWh)\":18.89,\"Electricity from renewables (TWh)\":76.19},{\"Year\":2002,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":985450.0122,\"Electricity from fossil fuels (TWh)\":517.51,\"Electricity from nuclear (TWh)\":19.35,\"Electricity from renewables (TWh)\":72.78},{\"Year\":2003,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":1011770.02,\"Electricity from fossil fuels (TWh)\":545.36,\"Electricity from nuclear (TWh)\":18.14,\"Electricity from renewables (TWh)\":74.63},{\"Year\":2004,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":1085670.044,\"Electricity from fossil fuels (TWh)\":567.86,\"Electricity from nuclear (TWh)\":21.26,\"Electricity from renewables (TWh)\":109.2},{\"Year\":2005,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":1136469.971,\"Electricity from fossil fuels (TWh)\":579.32,\"Electricity from nuclear (TWh)\":17.73,\"Electricity from renewables (TWh)\":107.47},{\"Year\":2006,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":1215209.961,\"Electricity from fossil fuels (TWh)\":599.24,\"Electricity from nuclear (TWh)\":17.63,\"Electricity from renewables (TWh)\":127.56},{\"Year\":2007,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":1336739.99,\"Electricity from fossil fuels (TWh)\":636.68,\"Electricity from nuclear (TWh)\":17.83,\"Electricity from renewables (TWh)\":141.75},{\"Year\":2008,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":1424380.005,\"Electricity from fossil fuels (TWh)\":674.27,\"Electricity from nuclear (TWh)\":15.23,\"Electricity from renewables (TWh)\":138.91},{\"Year\":2009,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":1564880.005,\"Electricity from fossil fuels (TWh)\":728.56,\"Electricity from nuclear (TWh)\":16.82,\"Electricity from renewables (TWh)\":134.33},{\"Year\":2010,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":1659979.98,\"Electricity from fossil fuels (TWh)\":771.78,\"Electricity from nuclear (TWh)\":23.08,\"Electricity from renewables (TWh)\":142.61},{\"Year\":2011,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":1756739.99,\"Electricity from fossil fuels (TWh)\":828.16,\"Electricity from nuclear (TWh)\":32.22,\"Electricity from renewables (TWh)\":173.62},{\"Year\":2012,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":1909439.941,\"Electricity from fossil fuels (TWh)\":893.45,\"Electricity from nuclear (TWh)\":33.14,\"Electricity from renewables (TWh)\":165.25},{\"Year\":2013,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":1972430.054,\"Electricity from fossil fuels (TWh)\":924.93,\"Electricity from nuclear (TWh)\":33.31,\"Electricity from renewables (TWh)\":187.9},{\"Year\":2014,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":2147110.107,\"Electricity from fossil fuels (TWh)\":1025.29,\"Electricity from nuclear (TWh)\":34.69,\"Electricity from renewables (TWh)\":202.04},{\"Year\":2015,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":2158020.02,\"Electricity from fossil fuels (TWh)\":1080.44,\"Electricity from nuclear (TWh)\":38.31,\"Electricity from renewables (TWh)\":203.21},{\"Year\":2016,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":2195250,\"Electricity from fossil fuels (TWh)\":1155.52,\"Electricity from nuclear (TWh)\":37.9,\"Electricity from renewables (TWh)\":208.21},{\"Year\":2017,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":2320409.912,\"Electricity from fossil fuels (TWh)\":1198.85,\"Electricity from nuclear (TWh)\":37.41,\"Electricity from renewables (TWh)\":234.9},{\"Year\":2018,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":2451929.932,\"Electricity from fossil fuels (TWh)\":1276.32,\"Electricity from nuclear (TWh)\":39.05,\"Electricity from renewables (TWh)\":263.61},{\"Year\":2019,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":2456300.049,\"Electricity from fossil fuels (TWh)\":1273.59,\"Electricity from nuclear (TWh)\":45.16,\"Electricity from renewables (TWh)\":303.16},{\"Year\":2020,\"Entity\":\"India\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":1202.34,\"Electricity from nuclear (TWh)\":44.61,\"Electricity from renewables (TWh)\":315.76},{\"Year\":2000,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":280650,\"Electricity from fossil fuels (TWh)\":78.43,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":19.6},{\"Year\":2001,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":302060,\"Electricity from fossil fuels (TWh)\":83.96,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":22.19},{\"Year\":2002,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":305640.0146,\"Electricity from fossil fuels (TWh)\":92.03,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":21},{\"Year\":2003,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":333890.0146,\"Electricity from fossil fuels (TWh)\":97.57,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":19.82},{\"Year\":2004,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":341239.9902,\"Electricity from fossil fuels (TWh)\":103.8,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":20.97},{\"Year\":2005,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":342149.9939,\"Electricity from fossil fuels (TWh)\":110.22,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":22.66},{\"Year\":2006,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":364470.0012,\"Electricity from fossil fuels (TWh)\":116.8,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":21.18},{\"Year\":2007,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":379959.9915,\"Electricity from fossil fuels (TWh)\":124.1,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":24.29},{\"Year\":2008,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":376140.0146,\"Electricity from fossil fuels (TWh)\":129.55,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":26.34},{\"Year\":2009,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":391079.9866,\"Electricity from fossil fuels (TWh)\":136.05,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":26.79},{\"Year\":2010,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":415519.989,\"Electricity from fossil fuels (TWh)\":142.88,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":34.63},{\"Year\":2011,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":475309.9976,\"Electricity from fossil fuels (TWh)\":161.41,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":30.46},{\"Year\":2012,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":481510.0098,\"Electricity from fossil fuels (TWh)\":177.83,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":31.11},{\"Year\":2013,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":447940.0024,\"Electricity from fossil fuels (TWh)\":189.66,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":35.5},{\"Year\":2014,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":483910.0037,\"Electricity from fossil fuels (TWh)\":203.11,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":34.41},{\"Year\":2015,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":488549.9878,\"Electricity from fossil fuels (TWh)\":209.71,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":33.56},{\"Year\":2016,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":482510.0098,\"Electricity from fossil fuels (TWh)\":217.97,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":39.58},{\"Year\":2017,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":517320.0073,\"Electricity from fossil fuels (TWh)\":222.64,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":43.17},{\"Year\":2018,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":576989.9902,\"Electricity from fossil fuels (TWh)\":235.41,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":48.38},{\"Year\":2019,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":619840.0269,\"Electricity from fossil fuels (TWh)\":247.39,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":48.04},{\"Year\":2020,\"Entity\":\"Indonesia\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":238.91,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":52.91},{\"Year\":2000,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":436300,\"Electricity from fossil fuels (TWh)\":218.28,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":50.87},{\"Year\":2001,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":436570,\"Electricity from fossil fuels (TWh)\":216.73,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":54.35},{\"Year\":2002,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":443470.0012,\"Electricity from fossil fuels (TWh)\":228.45,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":48.31},{\"Year\":2003,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":462200.0122,\"Electricity from fossil fuels (TWh)\":238.52,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":46.86},{\"Year\":2004,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":472399.9939,\"Electricity from fossil fuels (TWh)\":240.95,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":53.88},{\"Year\":2005,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":473829.9866,\"Electricity from fossil fuels (TWh)\":247.29,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":48.43},{\"Year\":2006,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":466649.9939,\"Electricity from fossil fuels (TWh)\":256.03,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":50.64},{\"Year\":2007,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":459369.9951,\"Electricity from fossil fuels (TWh)\":259.49,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":47.72},{\"Year\":2008,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":444980.011,\"Electricity from fossil fuels (TWh)\":254.34,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":58.16},{\"Year\":2009,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":397059.9976,\"Electricity from fossil fuels (TWh)\":218.32,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":69.26},{\"Year\":2010,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":405269.989,\"Electricity from fossil fuels (TWh)\":220.93,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":76.98},{\"Year\":2011,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":396690.0024,\"Electricity from fossil fuels (TWh)\":216.78,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":82.96},{\"Year\":2012,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":376750,\"Electricity from fossil fuels (TWh)\":204.26,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":92.22},{\"Year\":2013,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":346459.9915,\"Electricity from fossil fuels (TWh)\":175.07,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":112},{\"Year\":2014,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":327500,\"Electricity from fossil fuels (TWh)\":156.76,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":120.68},{\"Year\":2015,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":337859.9854,\"Electricity from fossil fuels (TWh)\":172.06,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":108.89},{\"Year\":2016,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":333339.9963,\"Electricity from fossil fuels (TWh)\":179.19,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":108.01},{\"Year\":2017,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":329190.0024,\"Electricity from fossil fuels (TWh)\":189.44,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":103.89},{\"Year\":2018,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":324880.0049,\"Electricity from fossil fuels (TWh)\":172.98,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":114.41},{\"Year\":2019,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":317239.9902,\"Electricity from fossil fuels (TWh)\":175.52,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":115.83},{\"Year\":2020,\"Entity\":\"Italy\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":161.17,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":116.9},{\"Year\":2000,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1182610,\"Electricity from fossil fuels (TWh)\":578.29,\"Electricity from nuclear (TWh)\":305.95,\"Electricity from renewables (TWh)\":104.16},{\"Year\":2001,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1170380,\"Electricity from fossil fuels (TWh)\":564.95,\"Electricity from nuclear (TWh)\":303.86,\"Electricity from renewables (TWh)\":101.36},{\"Year\":2002,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1206599.976,\"Electricity from fossil fuels (TWh)\":605.12,\"Electricity from nuclear (TWh)\":280.34,\"Electricity from renewables (TWh)\":101.1},{\"Year\":2003,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1214949.951,\"Electricity from fossil fuels (TWh)\":633.76,\"Electricity from nuclear (TWh)\":228.01,\"Electricity from renewables (TWh)\":114.18},{\"Year\":2004,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1209849.976,\"Electricity from fossil fuels (TWh)\":621.6,\"Electricity from nuclear (TWh)\":268.32,\"Electricity from renewables (TWh)\":114.73},{\"Year\":2005,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1212819.946,\"Electricity from fossil fuels (TWh)\":634.09,\"Electricity from nuclear (TWh)\":280.5,\"Electricity from renewables (TWh)\":100.57},{\"Year\":2006,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1189520.02,\"Electricity from fossil fuels (TWh)\":628.77,\"Electricity from nuclear (TWh)\":291.54,\"Electricity from renewables (TWh)\":112.07},{\"Year\":2007,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1225069.946,\"Electricity from fossil fuels (TWh)\":705.37,\"Electricity from nuclear (TWh)\":267.34,\"Electricity from renewables (TWh)\":100.8},{\"Year\":2008,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1158219.971,\"Electricity from fossil fuels (TWh)\":663.88,\"Electricity from nuclear (TWh)\":241.25,\"Electricity from renewables (TWh)\":100.79},{\"Year\":2009,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1100979.98,\"Electricity from fossil fuels (TWh)\":611.86,\"Electricity from nuclear (TWh)\":263.05,\"Electricity from renewables (TWh)\":102.28},{\"Year\":2010,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1156479.98,\"Electricity from fossil fuels (TWh)\":689.89,\"Electricity from nuclear (TWh)\":278.36,\"Electricity from renewables (TWh)\":113.92},{\"Year\":2011,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1213520.02,\"Electricity from fossil fuels (TWh)\":777.1,\"Electricity from nuclear (TWh)\":153.38,\"Electricity from renewables (TWh)\":116.5},{\"Year\":2012,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1253609.985,\"Electricity from fossil fuels (TWh)\":920.39,\"Electricity from nuclear (TWh)\":15.12,\"Electricity from renewables (TWh)\":111.09},{\"Year\":2013,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1262780.029,\"Electricity from fossil fuels (TWh)\":897.88,\"Electricity from nuclear (TWh)\":10.43,\"Electricity from renewables (TWh)\":121.48},{\"Year\":2014,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1217119.995,\"Electricity from fossil fuels (TWh)\":892.18,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":136.53},{\"Year\":2015,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1179439.941,\"Electricity from fossil fuels (TWh)\":844.23,\"Electricity from nuclear (TWh)\":3.24,\"Electricity from renewables (TWh)\":157.34},{\"Year\":2016,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1167790.039,\"Electricity from fossil fuels (TWh)\":832.4,\"Electricity from nuclear (TWh)\":14.87,\"Electricity from renewables (TWh)\":157.7},{\"Year\":2017,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1155229.98,\"Electricity from fossil fuels (TWh)\":806.12,\"Electricity from nuclear (TWh)\":27.75,\"Electricity from renewables (TWh)\":175.12},{\"Year\":2018,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1116150.024,\"Electricity from fossil fuels (TWh)\":780.61,\"Electricity from nuclear (TWh)\":47.82,\"Electricity from renewables (TWh)\":183.63},{\"Year\":2019,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":1081569.946,\"Electricity from fossil fuels (TWh)\":735.66,\"Electricity from nuclear (TWh)\":63.88,\"Electricity from renewables (TWh)\":192.72},{\"Year\":2020,\"Entity\":\"Japan\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":716.67,\"Electricity from nuclear (TWh)\":41.86,\"Electricity from renewables (TWh)\":205.6},{\"Year\":2000,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":120150,\"Electricity from fossil fuels (TWh)\":44.11,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":7.53},{\"Year\":2001,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":117440,\"Electricity from fossil fuels (TWh)\":47.3,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":8.08},{\"Year\":2002,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":131059.9976,\"Electricity from fossil fuels (TWh)\":49.44,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":8.89},{\"Year\":2003,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":146139.9994,\"Electricity from fossil fuels (TWh)\":55.24,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":8.62},{\"Year\":2004,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":158029.9988,\"Electricity from fossil fuels (TWh)\":58.89,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":8.06},{\"Year\":2005,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":169210.0067,\"Electricity from fossil fuels (TWh)\":60.06,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":7.86},{\"Year\":2006,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":185300.0031,\"Electricity from fossil fuels (TWh)\":63.89,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":7.77},{\"Year\":2007,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":198389.9994,\"Electricity from fossil fuels (TWh)\":68.45,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":8.17},{\"Year\":2008,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":242029.9988,\"Electricity from fossil fuels (TWh)\":72.89,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":7.46},{\"Year\":2009,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":213610.0006,\"Electricity from fossil fuels (TWh)\":71.85,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":6.88},{\"Year\":2010,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":229699.9969,\"Electricity from fossil fuels (TWh)\":74.63,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":8.02},{\"Year\":2011,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":245449.9969,\"Electricity from fossil fuels (TWh)\":78.7,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":7.88},{\"Year\":2012,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":244600.0061,\"Electricity from fossil fuels (TWh)\":82.98,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":7.64},{\"Year\":2013,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":260010.0098,\"Electricity from fossil fuels (TWh)\":84.88,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":7.73},{\"Year\":2014,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":209229.9957,\"Electricity from fossil fuels (TWh)\":86.37,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":8.27},{\"Year\":2015,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":190729.9957,\"Electricity from fossil fuels (TWh)\":82.2,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":9.45},{\"Year\":2016,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":202149.9939,\"Electricity from fossil fuels (TWh)\":82.65,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":11.98},{\"Year\":2017,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":214580.0018,\"Electricity from fossil fuels (TWh)\":91.48,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":11.64},{\"Year\":2018,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":216600.0061,\"Electricity from fossil fuels (TWh)\":96.36,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":10.91},{\"Year\":2019,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":212110.0006,\"Electricity from fossil fuels (TWh)\":95.39,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":11.09},{\"Year\":2020,\"Entity\":\"Kazakhstan\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":96.7,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":11.94},{\"Year\":2000,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":379180,\"Electricity from fossil fuels (TWh)\":141.8,\"Electricity from nuclear (TWh)\":7.81,\"Electricity from renewables (TWh)\":44.51},{\"Year\":2001,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":378830,\"Electricity from fossil fuels (TWh)\":153.32,\"Electricity from nuclear (TWh)\":8.29,\"Electricity from renewables (TWh)\":39.56},{\"Year\":2002,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":386000,\"Electricity from fossil fuels (TWh)\":159.81,\"Electricity from nuclear (TWh)\":9.26,\"Electricity from renewables (TWh)\":35.67},{\"Year\":2003,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":404690.0024,\"Electricity from fossil fuels (TWh)\":160.45,\"Electricity from nuclear (TWh)\":9.98,\"Electricity from renewables (TWh)\":32.11},{\"Year\":2004,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":414100.0061,\"Electricity from fossil fuels (TWh)\":173.66,\"Electricity from nuclear (TWh)\":8.73,\"Electricity from renewables (TWh)\":38.19},{\"Year\":2005,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":432190.0024,\"Electricity from fossil fuels (TWh)\":178.76,\"Electricity from nuclear (TWh)\":10.32,\"Electricity from renewables (TWh)\":42.29},{\"Year\":2006,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":448299.9878,\"Electricity from fossil fuels (TWh)\":182.76,\"Electricity from nuclear (TWh)\":10.4,\"Electricity from renewables (TWh)\":43.63},{\"Year\":2007,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":457119.9951,\"Electricity from fossil fuels (TWh)\":191.83,\"Electricity from nuclear (TWh)\":9.95,\"Electricity from renewables (TWh)\":42.14},{\"Year\":2008,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":459549.9878,\"Electricity from fossil fuels (TWh)\":184.51,\"Electricity from nuclear (TWh)\":9.36,\"Electricity from renewables (TWh)\":53.22},{\"Year\":2009,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":448369.9951,\"Electricity from fossil fuels (TWh)\":194.75,\"Electricity from nuclear (TWh)\":10.11,\"Electricity from renewables (TWh)\":40.59},{\"Year\":2010,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":462869.9951,\"Electricity from fossil fuels (TWh)\":207.38,\"Electricity from nuclear (TWh)\":5.66,\"Electricity from renewables (TWh)\":51.37},{\"Year\":2011,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":478399.9939,\"Electricity from fossil fuels (TWh)\":219.88,\"Electricity from nuclear (TWh)\":9.66,\"Electricity from renewables (TWh)\":50.7},{\"Year\":2012,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":486450.0122,\"Electricity from fossil fuels (TWh)\":229.14,\"Electricity from nuclear (TWh)\":8.41,\"Electricity from renewables (TWh)\":47.2},{\"Year\":2013,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":475739.9902,\"Electricity from fossil fuels (TWh)\":231.23,\"Electricity from nuclear (TWh)\":11.38,\"Electricity from renewables (TWh)\":44.67},{\"Year\":2014,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":462239.9902,\"Electricity from fossil fuels (TWh)\":223.43,\"Electricity from nuclear (TWh)\":9.3,\"Electricity from renewables (TWh)\":57.46},{\"Year\":2015,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":471630.0049,\"Electricity from fossil fuels (TWh)\":234.28,\"Electricity from nuclear (TWh)\":11.18,\"Electricity from renewables (TWh)\":52.42},{\"Year\":2016,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":473309.9976,\"Electricity from fossil fuels (TWh)\":239.78,\"Electricity from nuclear (TWh)\":10.27,\"Electricity from renewables (TWh)\":52.97},{\"Year\":2017,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":471579.9866,\"Electricity from fossil fuels (TWh)\":242.69,\"Electricity from nuclear (TWh)\":10.57,\"Electricity from renewables (TWh)\":55.88},{\"Year\":2018,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":452570.0073,\"Electricity from fossil fuels (TWh)\":259.92,\"Electricity from nuclear (TWh)\":13.32,\"Electricity from renewables (TWh)\":58.78},{\"Year\":2019,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":449269.989,\"Electricity from fossil fuels (TWh)\":248.2,\"Electricity from nuclear (TWh)\":10.88,\"Electricity from renewables (TWh)\":59},{\"Year\":2020,\"Entity\":\"Mexico\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":245.46,\"Electricity from nuclear (TWh)\":10.87,\"Electricity from renewables (TWh)\":69.19},{\"Year\":2000,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":295770,\"Electricity from fossil fuels (TWh)\":140.85,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":2.33},{\"Year\":2001,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":293630,\"Electricity from fossil fuels (TWh)\":140.94,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":2.78},{\"Year\":2002,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":287320.0073,\"Electricity from fossil fuels (TWh)\":139.72,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":2.77},{\"Year\":2003,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":297730.011,\"Electricity from fossil fuels (TWh)\":147.76,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":2.25},{\"Year\":2004,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":301850.0061,\"Electricity from fossil fuels (TWh)\":149.06,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":3.2},{\"Year\":2005,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":301350.0061,\"Electricity from fossil fuels (TWh)\":151.2,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":3.85},{\"Year\":2006,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":314089.9963,\"Electricity from fossil fuels (TWh)\":156.16,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":4.29},{\"Year\":2007,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":313380.0049,\"Electricity from fossil fuels (TWh)\":153.08,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":5.43},{\"Year\":2008,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":308329.9866,\"Electricity from fossil fuels (TWh)\":148.03,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":6.61},{\"Year\":2009,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":297260.0098,\"Electricity from fossil fuels (TWh)\":142.4,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":8.69},{\"Year\":2010,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":313739.9902,\"Electricity from fossil fuels (TWh)\":146.12,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":10.88},{\"Year\":2011,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":310589.9963,\"Electricity from fossil fuels (TWh)\":149.88,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":13.13},{\"Year\":2012,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":303350.0061,\"Electricity from fossil fuels (TWh)\":144.75,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":16.88},{\"Year\":2013,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":298299.9878,\"Electricity from fossil fuels (TWh)\":146.85,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":17.06},{\"Year\":2014,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":285730.011,\"Electricity from fossil fuels (TWh)\":138.53,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":19.85},{\"Year\":2015,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":289079.9866,\"Electricity from fossil fuels (TWh)\":141.55,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":22.69},{\"Year\":2016,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":299799.9878,\"Electricity from fossil fuels (TWh)\":143.28,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":22.81},{\"Year\":2017,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":312859.9854,\"Electricity from fossil fuels (TWh)\":145.8,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":24.13},{\"Year\":2018,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":311910.0037,\"Electricity from fossil fuels (TWh)\":147.87,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":21.62},{\"Year\":2019,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":295130.0049,\"Electricity from fossil fuels (TWh)\":137.58,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":25.46},{\"Year\":2020,\"Entity\":\"Poland\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":128.91,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":28.23},{\"Year\":2000,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":249660,\"Electricity from fossil fuels (TWh)\":138.68,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0},{\"Year\":2001,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":254090,\"Electricity from fossil fuels (TWh)\":146.09,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0},{\"Year\":2002,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":272250,\"Electricity from fossil fuels (TWh)\":154.91,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0},{\"Year\":2003,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":284829.9866,\"Electricity from fossil fuels (TWh)\":166.58,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0},{\"Year\":2004,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":299890.0146,\"Electricity from fossil fuels (TWh)\":173.41,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0},{\"Year\":2005,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":315290.0085,\"Electricity from fossil fuels (TWh)\":191.05,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0},{\"Year\":2006,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":335440.0024,\"Electricity from fossil fuels (TWh)\":196.31,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0},{\"Year\":2007,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":354619.9951,\"Electricity from fossil fuels (TWh)\":204.43,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0},{\"Year\":2008,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":389720.0012,\"Electricity from fossil fuels (TWh)\":204.2,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0},{\"Year\":2009,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":406529.9988,\"Electricity from fossil fuels (TWh)\":217.31,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0},{\"Year\":2010,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":446130.0049,\"Electricity from fossil fuels (TWh)\":240.06,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0},{\"Year\":2011,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":463769.989,\"Electricity from fossil fuels (TWh)\":250.07,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0.01},{\"Year\":2012,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":492470.0012,\"Electricity from fossil fuels (TWh)\":271.68,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0.03},{\"Year\":2013,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":503209.9915,\"Electricity from fossil fuels (TWh)\":284.02,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0.04},{\"Year\":2014,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":540520.0195,\"Electricity from fossil fuels (TWh)\":311.81,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0.05},{\"Year\":2015,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":565190.0024,\"Electricity from fossil fuels (TWh)\":338.34,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0.05},{\"Year\":2016,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":561229.9805,\"Electricity from fossil fuels (TWh)\":337.38,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0.05},{\"Year\":2017,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":545070.0073,\"Electricity from fossil fuels (TWh)\":354.3,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0.07},{\"Year\":2018,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":521260.0098,\"Electricity from fossil fuels (TWh)\":334.7,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0.16},{\"Year\":2019,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":523780.0293,\"Electricity from fossil fuels (TWh)\":335.24,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0.21},{\"Year\":2020,\"Entity\":\"Saudi Arabia\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":337.82,\"Electricity from nuclear (TWh)\":null,\"Electricity from renewables (TWh)\":0.21},{\"Year\":2000,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":284660,\"Electricity from fossil fuels (TWh)\":181.67,\"Electricity from nuclear (TWh)\":13.01,\"Electricity from renewables (TWh)\":1.79},{\"Year\":2001,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":320540,\"Electricity from fossil fuels (TWh)\":183.36,\"Electricity from nuclear (TWh)\":10.72,\"Electricity from renewables (TWh)\":2.46},{\"Year\":2002,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":331320.0073,\"Electricity from fossil fuels (TWh)\":188.79,\"Electricity from nuclear (TWh)\":11.99,\"Electricity from renewables (TWh)\":2.81},{\"Year\":2003,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":353089.9963,\"Electricity from fossil fuels (TWh)\":204.39,\"Electricity from nuclear (TWh)\":12.66,\"Electricity from renewables (TWh)\":1.19},{\"Year\":2004,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":379989.9902,\"Electricity from fossil fuels (TWh)\":212.63,\"Electricity from nuclear (TWh)\":14.28,\"Electricity from renewables (TWh)\":1.33},{\"Year\":2005,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":377649.9939,\"Electricity from fossil fuels (TWh)\":215.23,\"Electricity from nuclear (TWh)\":12.24,\"Electricity from renewables (TWh)\":1.75},{\"Year\":2006,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":379790.0085,\"Electricity from fossil fuels (TWh)\":223.25,\"Electricity from nuclear (TWh)\":10.07,\"Electricity from renewables (TWh)\":3.28},{\"Year\":2007,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":397059.9976,\"Electricity from fossil fuels (TWh)\":232.91,\"Electricity from nuclear (TWh)\":12.6,\"Electricity from renewables (TWh)\":1.3},{\"Year\":2008,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":426739.9902,\"Electricity from fossil fuels (TWh)\":226.32,\"Electricity from nuclear (TWh)\":12.75,\"Electricity from renewables (TWh)\":1.66},{\"Year\":2009,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":404200.0122,\"Electricity from fossil fuels (TWh)\":218.17,\"Electricity from nuclear (TWh)\":11.57,\"Electricity from renewables (TWh)\":1.86},{\"Year\":2010,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":425309.9976,\"Electricity from fossil fuels (TWh)\":227.57,\"Electricity from nuclear (TWh)\":12.9,\"Electricity from renewables (TWh)\":2.51},{\"Year\":2011,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":409260.0098,\"Electricity from fossil fuels (TWh)\":229.06,\"Electricity from nuclear (TWh)\":12.94,\"Electricity from renewables (TWh)\":2.49},{\"Year\":2012,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":426779.9988,\"Electricity from fossil fuels (TWh)\":226.84,\"Electricity from nuclear (TWh)\":12.4,\"Electricity from renewables (TWh)\":1.66},{\"Year\":2013,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":436920.0134,\"Electricity from fossil fuels (TWh)\":223.28,\"Electricity from nuclear (TWh)\":13.61,\"Electricity from renewables (TWh)\":1.62},{\"Year\":2014,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":447929.9927,\"Electricity from fossil fuels (TWh)\":218.42,\"Electricity from nuclear (TWh)\":14.76,\"Electricity from renewables (TWh)\":3.38},{\"Year\":2015,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":424809.9976,\"Electricity from fossil fuels (TWh)\":214.88,\"Electricity from nuclear (TWh)\":10.97,\"Electricity from renewables (TWh)\":6.09},{\"Year\":2016,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":425140.0146,\"Electricity from fossil fuels (TWh)\":213.09,\"Electricity from nuclear (TWh)\":15.21,\"Electricity from renewables (TWh)\":7.69},{\"Year\":2017,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":435649.9939,\"Electricity from fossil fuels (TWh)\":212.77,\"Electricity from nuclear (TWh)\":15.09,\"Electricity from renewables (TWh)\":10.04},{\"Year\":2018,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":434350.0061,\"Electricity from fossil fuels (TWh)\":214.25,\"Electricity from nuclear (TWh)\":10.56,\"Electricity from renewables (TWh)\":12.22},{\"Year\":2019,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":439640.0146,\"Electricity from fossil fuels (TWh)\":208.39,\"Electricity from nuclear (TWh)\":13.6,\"Electricity from renewables (TWh)\":12.57},{\"Year\":2020,\"Entity\":\"South Africa\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":197.5,\"Electricity from nuclear (TWh)\":11.62,\"Electricity from renewables (TWh)\":12.83},{\"Year\":2000,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":293310,\"Electricity from fossil fuels (TWh)\":124.22,\"Electricity from nuclear (TWh)\":62.21,\"Electricity from renewables (TWh)\":34.49},{\"Year\":2001,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":294790,\"Electricity from fossil fuels (TWh)\":120.06,\"Electricity from nuclear (TWh)\":63.71,\"Electricity from renewables (TWh)\":49.3},{\"Year\":2002,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":312750,\"Electricity from fossil fuels (TWh)\":143.72,\"Electricity from nuclear (TWh)\":63.02,\"Electricity from renewables (TWh)\":33.17},{\"Year\":2003,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":318660.0037,\"Electricity from fossil fuels (TWh)\":139.67,\"Electricity from nuclear (TWh)\":61.88,\"Electricity from renewables (TWh)\":55.75},{\"Year\":2004,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":335559.9976,\"Electricity from fossil fuels (TWh)\":159.91,\"Electricity from nuclear (TWh)\":63.61,\"Electricity from renewables (TWh)\":50.13},{\"Year\":2005,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":350500,\"Electricity from fossil fuels (TWh)\":184.65,\"Electricity from nuclear (TWh)\":57.54,\"Electricity from renewables (TWh)\":42.27},{\"Year\":2006,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":341779.9988,\"Electricity from fossil fuels (TWh)\":182.98,\"Electricity from nuclear (TWh)\":60.13,\"Electricity from renewables (TWh)\":52.15},{\"Year\":2007,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":354679.9927,\"Electricity from fossil fuels (TWh)\":188.13,\"Electricity from nuclear (TWh)\":55.1,\"Electricity from renewables (TWh)\":58.3},{\"Year\":2008,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":324269.989,\"Electricity from fossil fuels (TWh)\":189.55,\"Electricity from nuclear (TWh)\":58.97,\"Electricity from renewables (TWh)\":62.15},{\"Year\":2009,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":287489.9902,\"Electricity from fossil fuels (TWh)\":164.69,\"Electricity from nuclear (TWh)\":52.76,\"Electricity from renewables (TWh)\":74.08},{\"Year\":2010,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":273250,\"Electricity from fossil fuels (TWh)\":138.39,\"Electricity from nuclear (TWh)\":61.99,\"Electricity from renewables (TWh)\":97.77},{\"Year\":2011,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":274399.9939,\"Electricity from fossil fuels (TWh)\":146.12,\"Electricity from nuclear (TWh)\":57.72,\"Electricity from renewables (TWh)\":87.53},{\"Year\":2012,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":269269.989,\"Electricity from fossil fuels (TWh)\":145.33,\"Electricity from nuclear (TWh)\":61.47,\"Electricity from renewables (TWh)\":86.97},{\"Year\":2013,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":242809.9976,\"Electricity from fossil fuels (TWh)\":113.32,\"Electricity from nuclear (TWh)\":56.73,\"Electricity from renewables (TWh)\":111.42},{\"Year\":2014,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":240960.0067,\"Electricity from fossil fuels (TWh)\":107.37,\"Electricity from nuclear (TWh)\":57.31,\"Electricity from renewables (TWh)\":110.26},{\"Year\":2015,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":256279.9988,\"Electricity from fossil fuels (TWh)\":123.19,\"Electricity from nuclear (TWh)\":57.2,\"Electricity from renewables (TWh)\":97.09},{\"Year\":2016,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":247029.9988,\"Electricity from fossil fuels (TWh)\":107.93,\"Electricity from nuclear (TWh)\":58.63,\"Electricity from renewables (TWh)\":104.63},{\"Year\":2017,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":263450.0122,\"Electricity from fossil fuels (TWh)\":126.93,\"Electricity from nuclear (TWh)\":58.04,\"Electricity from renewables (TWh)\":87.93},{\"Year\":2018,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":257040.0085,\"Electricity from fossil fuels (TWh)\":112.23,\"Electricity from nuclear (TWh)\":55.77,\"Electricity from renewables (TWh)\":103.88},{\"Year\":2019,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":239979.9957,\"Electricity from fossil fuels (TWh)\":111.55,\"Electricity from nuclear (TWh)\":58.35,\"Electricity from renewables (TWh)\":100.99},{\"Year\":2020,\"Entity\":\"Spain\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":87.64,\"Electricity from nuclear (TWh)\":58.3,\"Electricity from renewables (TWh)\":113.79},{\"Year\":2000,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":164490,\"Electricity from fossil fuels (TWh)\":83.15,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":6.38},{\"Year\":2001,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":173160,\"Electricity from fossil fuels (TWh)\":88.97,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":6.76},{\"Year\":2002,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":184240.0055,\"Electricity from fossil fuels (TWh)\":93.51,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":8.07},{\"Year\":2003,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":191929.9927,\"Electricity from fossil fuels (TWh)\":100.61,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":8.36},{\"Year\":2004,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":210190.0024,\"Electricity from fossil fuels (TWh)\":109.46,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":7.63},{\"Year\":2005,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":217770.0043,\"Electricity from fossil fuels (TWh)\":115.58,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":7.42},{\"Year\":2006,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":219880.0049,\"Electricity from fossil fuels (TWh)\":119.41,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":9.82},{\"Year\":2007,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":224589.9963,\"Electricity from fossil fuels (TWh)\":122.12,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":10.2},{\"Year\":2008,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":227580.0018,\"Electricity from fossil fuels (TWh)\":127.43,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":8.95},{\"Year\":2009,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":220259.9945,\"Electricity from fossil fuels (TWh)\":128.09,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":9.09},{\"Year\":2010,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":234380.0049,\"Electricity from fossil fuels (TWh)\":141.72,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":8.58},{\"Year\":2011,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":233600.0061,\"Electricity from fossil fuels (TWh)\":135.31,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":11.83},{\"Year\":2012,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":250679.9927,\"Electricity from fossil fuels (TWh)\":143.73,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":13.42},{\"Year\":2013,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":260700.0122,\"Electricity from fossil fuels (TWh)\":148.29,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":12.33},{\"Year\":2014,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":256799.9878,\"Electricity from fossil fuels (TWh)\":149.26,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":13.68},{\"Year\":2015,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":264000,\"Electricity from fossil fuels (TWh)\":153.4,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":13.33},{\"Year\":2016,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":261600.0061,\"Electricity from fossil fuels (TWh)\":161.79,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":15.97},{\"Year\":2017,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":258820.0073,\"Electricity from fossil fuels (TWh)\":161.88,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":19.92},{\"Year\":2018,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":257049.9878,\"Electricity from fossil fuels (TWh)\":156.26,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":25.84},{\"Year\":2019,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":267089.9963,\"Electricity from fossil fuels (TWh)\":162.59,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":28.02},{\"Year\":2020,\"Entity\":\"Thailand\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":154.52,\"Electricity from nuclear (TWh)\":0,\"Electricity from renewables (TWh)\":24.73},{\"Year\":2000,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":297380,\"Electricity from fossil fuels (TWh)\":82.65,\"Electricity from nuclear (TWh)\":77.34,\"Electricity from renewables (TWh)\":11.28},{\"Year\":2001,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":300550,\"Electricity from fossil fuels (TWh)\":84.59,\"Electricity from nuclear (TWh)\":76.17,\"Electricity from renewables (TWh)\":12.05},{\"Year\":2002,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":303940.0024,\"Electricity from fossil fuels (TWh)\":85.93,\"Electricity from nuclear (TWh)\":77.99,\"Electricity from renewables (TWh)\":9.65},{\"Year\":2003,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":330230.011,\"Electricity from fossil fuels (TWh)\":89.52,\"Electricity from nuclear (TWh)\":81.41,\"Electricity from renewables (TWh)\":9.27},{\"Year\":2004,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":307140.0146,\"Electricity from fossil fuels (TWh)\":83.22,\"Electricity from nuclear (TWh)\":87.02,\"Electricity from renewables (TWh)\":11.78},{\"Year\":2005,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":295410.0037,\"Electricity from fossil fuels (TWh)\":84.75,\"Electricity from nuclear (TWh)\":88.76,\"Electricity from renewables (TWh)\":12.4},{\"Year\":2006,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":303989.9902,\"Electricity from fossil fuels (TWh)\":90.09,\"Electricity from nuclear (TWh)\":90.22,\"Electricity from renewables (TWh)\":12.92},{\"Year\":2007,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":312140.0146,\"Electricity from fossil fuels (TWh)\":93.13,\"Electricity from nuclear (TWh)\":92.54,\"Electricity from renewables (TWh)\":10.47},{\"Year\":2008,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":301200.0122,\"Electricity from fossil fuels (TWh)\":90.92,\"Electricity from nuclear (TWh)\":89.84,\"Electricity from renewables (TWh)\":11.82},{\"Year\":2009,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":251619.9951,\"Electricity from fossil fuels (TWh)\":78.58,\"Electricity from nuclear (TWh)\":82.92,\"Electricity from renewables (TWh)\":12.12},{\"Year\":2010,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":268920.0134,\"Electricity from fossil fuels (TWh)\":86.28,\"Electricity from nuclear (TWh)\":89.15,\"Electricity from renewables (TWh)\":13.39},{\"Year\":2011,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":283339.9963,\"Electricity from fossil fuels (TWh)\":93.5,\"Electricity from nuclear (TWh)\":90.25,\"Electricity from renewables (TWh)\":11.2},{\"Year\":2012,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":277109.9854,\"Electricity from fossil fuels (TWh)\":96.99,\"Electricity from nuclear (TWh)\":90.14,\"Electricity from renewables (TWh)\":11.23},{\"Year\":2013,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":270269.989,\"Electricity from fossil fuels (TWh)\":95.39,\"Electricity from nuclear (TWh)\":83.21,\"Electricity from renewables (TWh)\":15.11},{\"Year\":2014,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":237729.9957,\"Electricity from fossil fuels (TWh)\":83.42,\"Electricity from nuclear (TWh)\":88.39,\"Electricity from renewables (TWh)\":10.17},{\"Year\":2015,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":191070.0073,\"Electricity from fossil fuels (TWh)\":66.91,\"Electricity from nuclear (TWh)\":87.63,\"Electricity from renewables (TWh)\":7.1},{\"Year\":2016,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":201660.0037,\"Electricity from fossil fuels (TWh)\":72.66,\"Electricity from nuclear (TWh)\":80.95,\"Electricity from renewables (TWh)\":9.25},{\"Year\":2017,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":174940.0024,\"Electricity from fossil fuels (TWh)\":57.96,\"Electricity from nuclear (TWh)\":85.58,\"Electricity from renewables (TWh)\":10.88},{\"Year\":2018,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":185619.9951,\"Electricity from fossil fuels (TWh)\":60.81,\"Electricity from nuclear (TWh)\":84.4,\"Electricity from renewables (TWh)\":13.02},{\"Year\":2019,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":174729.9957,\"Electricity from fossil fuels (TWh)\":57.79,\"Electricity from nuclear (TWh)\":83,\"Electricity from renewables (TWh)\":11.87},{\"Year\":2020,\"Entity\":\"Ukraine\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":54.5,\"Electricity from nuclear (TWh)\":76.2,\"Electricity from renewables (TWh)\":17.56},{\"Year\":2000,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":530890,\"Electricity from fossil fuels (TWh)\":279.34,\"Electricity from nuclear (TWh)\":85.06,\"Electricity from renewables (TWh)\":9.98},{\"Year\":2001,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":545260,\"Electricity from fossil fuels (TWh)\":282.72,\"Electricity from nuclear (TWh)\":90.09,\"Electricity from renewables (TWh)\":9.56},{\"Year\":2002,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":530789.978,\"Electricity from fossil fuels (TWh)\":285.62,\"Electricity from nuclear (TWh)\":87.85,\"Electricity from renewables (TWh)\":11.13},{\"Year\":2003,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":543039.978,\"Electricity from fossil fuels (TWh)\":296.15,\"Electricity from nuclear (TWh)\":88.69,\"Electricity from renewables (TWh)\":10.62},{\"Year\":2004,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":543080.0171,\"Electricity from fossil fuels (TWh)\":297.15,\"Electricity from nuclear (TWh)\":80,\"Electricity from renewables (TWh)\":14.14},{\"Year\":2005,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":540919.9829,\"Electricity from fossil fuels (TWh)\":296.87,\"Electricity from nuclear (TWh)\":81.62,\"Electricity from renewables (TWh)\":16.93},{\"Year\":2006,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":542059.9976,\"Electricity from fossil fuels (TWh)\":299.88,\"Electricity from nuclear (TWh)\":75.45,\"Electricity from renewables (TWh)\":18.11},{\"Year\":2007,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":530500,\"Electricity from fossil fuels (TWh)\":310.26,\"Electricity from nuclear (TWh)\":63.03,\"Electricity from renewables (TWh)\":19.69},{\"Year\":2008,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":515340.0269,\"Electricity from fossil fuels (TWh)\":310.5,\"Electricity from nuclear (TWh)\":52.49,\"Electricity from renewables (TWh)\":21.85},{\"Year\":2009,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":466489.9902,\"Electricity from fossil fuels (TWh)\":278.73,\"Electricity from nuclear (TWh)\":69.1,\"Electricity from renewables (TWh)\":25.25},{\"Year\":2010,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":482440.0024,\"Electricity from fossil fuels (TWh)\":290.59,\"Electricity from nuclear (TWh)\":62.14,\"Electricity from renewables (TWh)\":26.18},{\"Year\":2011,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":445589.9963,\"Electricity from fossil fuels (TWh)\":260.88,\"Electricity from nuclear (TWh)\":68.98,\"Electricity from renewables (TWh)\":35.2},{\"Year\":2012,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":467779.9988,\"Electricity from fossil fuels (TWh)\":249.25,\"Electricity from nuclear (TWh)\":70.4,\"Electricity from renewables (TWh)\":41.24},{\"Year\":2013,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":453760.0098,\"Electricity from fossil fuels (TWh)\":231.56,\"Electricity from nuclear (TWh)\":70.61,\"Electricity from renewables (TWh)\":53.21},{\"Year\":2014,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":415600.0061,\"Electricity from fossil fuels (TWh)\":206.94,\"Electricity from nuclear (TWh)\":63.75,\"Electricity from renewables (TWh)\":64.52},{\"Year\":2015,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":401079.9866,\"Electricity from fossil fuels (TWh)\":182.43,\"Electricity from nuclear (TWh)\":70.34,\"Electricity from renewables (TWh)\":82.57},{\"Year\":2016,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":380809.9976,\"Electricity from fossil fuels (TWh)\":181.56,\"Electricity from nuclear (TWh)\":71.73,\"Electricity from renewables (TWh)\":82.99},{\"Year\":2017,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":367000,\"Electricity from fossil fuels (TWh)\":165.91,\"Electricity from nuclear (TWh)\":70.34,\"Electricity from renewables (TWh)\":98.85},{\"Year\":2018,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":360730.011,\"Electricity from fossil fuels (TWh)\":155.41,\"Electricity from nuclear (TWh)\":65.06,\"Electricity from renewables (TWh)\":110.03},{\"Year\":2019,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":348920.0134,\"Electricity from fossil fuels (TWh)\":144.99,\"Electricity from nuclear (TWh)\":56.18,\"Electricity from renewables (TWh)\":120.48},{\"Year\":2020,\"Entity\":\"United Kingdom\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":124.78,\"Electricity from nuclear (TWh)\":50.85,\"Electricity from renewables (TWh)\":131.74},{\"Year\":2000,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5775810,\"Electricity from fossil fuels (TWh)\":2697.28,\"Electricity from nuclear (TWh)\":753.89,\"Electricity from renewables (TWh)\":350.93},{\"Year\":2001,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5748260,\"Electricity from fossil fuels (TWh)\":2678.68,\"Electricity from nuclear (TWh)\":768.83,\"Electricity from renewables (TWh)\":280.06},{\"Year\":2002,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5593029.785,\"Electricity from fossil fuels (TWh)\":2727.83,\"Electricity from nuclear (TWh)\":780.06,\"Electricity from renewables (TWh)\":336.34},{\"Year\":2003,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5658990.234,\"Electricity from fossil fuels (TWh)\":2756.03,\"Electricity from nuclear (TWh)\":763.73,\"Electricity from renewables (TWh)\":349.18},{\"Year\":2004,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5738290.039,\"Electricity from fossil fuels (TWh)\":2818.28,\"Electricity from nuclear (TWh)\":788.53,\"Electricity from renewables (TWh)\":345.14},{\"Year\":2005,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5753490.234,\"Electricity from fossil fuels (TWh)\":2899.96,\"Electricity from nuclear (TWh)\":781.99,\"Electricity from renewables (TWh)\":353.04},{\"Year\":2006,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5653080.078,\"Electricity from fossil fuels (TWh)\":2878.56,\"Electricity from nuclear (TWh)\":787.22,\"Electricity from renewables (TWh)\":381.16},{\"Year\":2007,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5736319.824,\"Electricity from fossil fuels (TWh)\":2988.24,\"Electricity from nuclear (TWh)\":806.42,\"Electricity from renewables (TWh)\":347.91},{\"Year\":2008,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5558379.883,\"Electricity from fossil fuels (TWh)\":2924.21,\"Electricity from nuclear (TWh)\":806.21,\"Electricity from renewables (TWh)\":377.11},{\"Year\":2009,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5156430.176,\"Electricity from fossil fuels (TWh)\":2725.41,\"Electricity from nuclear (TWh)\":798.85,\"Electricity from renewables (TWh)\":415.56},{\"Year\":2010,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5392109.863,\"Electricity from fossil fuels (TWh)\":2882.49,\"Electricity from nuclear (TWh)\":806.97,\"Electricity from renewables (TWh)\":424.48},{\"Year\":2011,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5173600.098,\"Electricity from fossil fuels (TWh)\":2788.93,\"Electricity from nuclear (TWh)\":790.2,\"Electricity from renewables (TWh)\":509.74},{\"Year\":2012,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":4956060.059,\"Electricity from fossil fuels (TWh)\":2779.02,\"Electricity from nuclear (TWh)\":769.33,\"Electricity from renewables (TWh)\":492.32},{\"Year\":2013,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5092100.098,\"Electricity from fossil fuels (TWh)\":2746.21,\"Electricity from nuclear (TWh)\":789.02,\"Electricity from renewables (TWh)\":520.38},{\"Year\":2014,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":5107209.961,\"Electricity from fossil fuels (TWh)\":2752.01,\"Electricity from nuclear (TWh)\":797.17,\"Electricity from renewables (TWh)\":546.83},{\"Year\":2015,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":4990709.961,\"Electricity from fossil fuels (TWh)\":2730.32,\"Electricity from nuclear (TWh)\":797.18,\"Electricity from renewables (TWh)\":556.49},{\"Year\":2016,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":4894500,\"Electricity from fossil fuels (TWh)\":2656.96,\"Electricity from nuclear (TWh)\":805.69,\"Electricity from renewables (TWh)\":624.91},{\"Year\":2017,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":4819370.117,\"Electricity from fossil fuels (TWh)\":2540.17,\"Electricity from nuclear (TWh)\":804.95,\"Electricity from renewables (TWh)\":707.19},{\"Year\":2018,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":4975310.059,\"Electricity from fossil fuels (TWh)\":2661.3,\"Electricity from nuclear (TWh)\":807.08,\"Electricity from renewables (TWh)\":733.17},{\"Year\":2019,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":4817720.215,\"Electricity from fossil fuels (TWh)\":2588.21,\"Electricity from nuclear (TWh)\":809.41,\"Electricity from renewables (TWh)\":760.76},{\"Year\":2020,\"Entity\":\"United States\",\"Value_co2_emissions_kt_by_country\":null,\"Electricity from fossil fuels (TWh)\":2431.9,\"Electricity from nuclear (TWh)\":789.88,\"Electricity from renewables (TWh)\":821.4}],\"anchored\":true,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-82\",\"displayId\":\"energy-source\",\"names\":[\"Entity\",\"Year\",\"energy\",\"source\"],\"rows\":[{\"Entity\":\"Australia\",\"Year\":2000,\"energy\":181.05,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2001,\"energy\":194.33,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2002,\"energy\":197.29,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2003,\"energy\":195.13,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2004,\"energy\":203.66,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2005,\"energy\":195.95,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2006,\"energy\":198.72,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2007,\"energy\":208.59,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2008,\"energy\":211.06,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2009,\"energy\":216.42,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2010,\"energy\":212.5,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2011,\"energy\":213.56,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2012,\"energy\":206.75,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2013,\"energy\":195.78,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2014,\"energy\":205.46,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2015,\"energy\":197.72,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2016,\"energy\":207.66,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2017,\"energy\":209.14,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2018,\"energy\":207.45,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2019,\"energy\":196.45,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2020,\"energy\":186.92,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2000,\"energy\":28.87,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2001,\"energy\":35.19,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2002,\"energy\":33.5,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2003,\"energy\":31.62,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2004,\"energy\":40.14,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2005,\"energy\":39.56,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2006,\"energy\":39.4,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2007,\"energy\":37.64,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2008,\"energy\":55.87,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2009,\"energy\":36.32,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2010,\"energy\":61.02,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2011,\"energy\":50.27,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2012,\"energy\":77.21,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2013,\"energy\":112,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2014,\"energy\":136.58,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2015,\"energy\":128.85,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2016,\"energy\":93.06,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2017,\"energy\":101.9,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2018,\"energy\":86.69,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2019,\"energy\":90.91,\"source\":\"fossil fuels\"},{\"Entity\":\"Brazil\",\"Year\":2020,\"energy\":81.15,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2000,\"energy\":155.56,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2001,\"energy\":159.93,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2002,\"energy\":155.12,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2003,\"energy\":157.35,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2004,\"energy\":148.86,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2005,\"energy\":150.78,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2006,\"energy\":139.71,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2007,\"energy\":149.36,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2008,\"energy\":141.33,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2009,\"energy\":129.76,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2010,\"energy\":130.08,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2011,\"energy\":131.3,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2012,\"energy\":124.2,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2013,\"energy\":122.87,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2014,\"energy\":122.75,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2015,\"energy\":125.7,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2016,\"energy\":122.35,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2017,\"energy\":113.7,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2018,\"energy\":112.47,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2019,\"energy\":110.65,\"source\":\"fossil fuels\"},{\"Entity\":\"Canada\",\"Year\":2020,\"energy\":102.19,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2000,\"energy\":1113.3,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2001,\"energy\":1182.59,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2002,\"energy\":1337.46,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2003,\"energy\":1579.96,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2004,\"energy\":1795.41,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2005,\"energy\":2042.8,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2006,\"energy\":2364.16,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2007,\"energy\":2718.7,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2008,\"energy\":2762.29,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2009,\"energy\":2980.2,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2010,\"energy\":3326.19,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2011,\"energy\":3811.77,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2012,\"energy\":3869.38,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2013,\"energy\":4203.77,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2014,\"energy\":4345.86,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2015,\"energy\":4222.76,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2016,\"energy\":4355,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2017,\"energy\":4643.1,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2018,\"energy\":4990.28,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2019,\"energy\":5098.22,\"source\":\"fossil fuels\"},{\"Entity\":\"China\",\"Year\":2020,\"energy\":5184.13,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2000,\"energy\":50.61,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2001,\"energy\":46.48,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2002,\"energy\":52.67,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2003,\"energy\":57.38,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2004,\"energy\":56.53,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2005,\"energy\":63.35,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2006,\"energy\":56.9,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2007,\"energy\":58.18,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2008,\"energy\":55.57,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2009,\"energy\":51.32,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2010,\"energy\":57.63,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2011,\"energy\":58.99,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2012,\"energy\":56.42,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2013,\"energy\":53.35,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2014,\"energy\":35.68,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2015,\"energy\":44.65,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2016,\"energy\":56.45,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2017,\"energy\":65.09,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2018,\"energy\":49.27,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2019,\"energy\":53.5,\"source\":\"fossil fuels\"},{\"Entity\":\"France\",\"Year\":2020,\"energy\":48.14,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2000,\"energy\":367.22,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2001,\"energy\":372.69,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2002,\"energy\":372.64,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2003,\"energy\":390.81,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2004,\"energy\":385.24,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2005,\"energy\":386.96,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2006,\"energy\":390.03,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2007,\"energy\":402.4,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2008,\"energy\":390.43,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2009,\"energy\":358.07,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2010,\"energy\":378.9,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2011,\"energy\":373.16,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2012,\"energy\":377.89,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2013,\"energy\":381.52,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2014,\"energy\":360.28,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2015,\"energy\":359.99,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2016,\"energy\":368.67,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2017,\"energy\":353.37,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2018,\"energy\":334.65,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2019,\"energy\":284.09,\"source\":\"fossil fuels\"},{\"Entity\":\"Germany\",\"Year\":2020,\"energy\":251.4,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2000,\"energy\":475.35,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2001,\"energy\":491.01,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2002,\"energy\":517.51,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2003,\"energy\":545.36,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2004,\"energy\":567.86,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2005,\"energy\":579.32,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2006,\"energy\":599.24,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2007,\"energy\":636.68,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2008,\"energy\":674.27,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2009,\"energy\":728.56,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2010,\"energy\":771.78,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2011,\"energy\":828.16,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2012,\"energy\":893.45,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2013,\"energy\":924.93,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2014,\"energy\":1025.29,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2015,\"energy\":1080.44,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2016,\"energy\":1155.52,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2017,\"energy\":1198.85,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2018,\"energy\":1276.32,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2019,\"energy\":1273.59,\"source\":\"fossil fuels\"},{\"Entity\":\"India\",\"Year\":2020,\"energy\":1202.34,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2000,\"energy\":78.43,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2001,\"energy\":83.96,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2002,\"energy\":92.03,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2003,\"energy\":97.57,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2004,\"energy\":103.8,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2005,\"energy\":110.22,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2006,\"energy\":116.8,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2007,\"energy\":124.1,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2008,\"energy\":129.55,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2009,\"energy\":136.05,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2010,\"energy\":142.88,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2011,\"energy\":161.41,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2012,\"energy\":177.83,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2013,\"energy\":189.66,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2014,\"energy\":203.11,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2015,\"energy\":209.71,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2016,\"energy\":217.97,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2017,\"energy\":222.64,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2018,\"energy\":235.41,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2019,\"energy\":247.39,\"source\":\"fossil fuels\"},{\"Entity\":\"Indonesia\",\"Year\":2020,\"energy\":238.91,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2000,\"energy\":218.28,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2001,\"energy\":216.73,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2002,\"energy\":228.45,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2003,\"energy\":238.52,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2004,\"energy\":240.95,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2005,\"energy\":247.29,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2006,\"energy\":256.03,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2007,\"energy\":259.49,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2008,\"energy\":254.34,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2009,\"energy\":218.32,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2010,\"energy\":220.93,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2011,\"energy\":216.78,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2012,\"energy\":204.26,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2013,\"energy\":175.07,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2014,\"energy\":156.76,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2015,\"energy\":172.06,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2016,\"energy\":179.19,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2017,\"energy\":189.44,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2018,\"energy\":172.98,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2019,\"energy\":175.52,\"source\":\"fossil fuels\"},{\"Entity\":\"Italy\",\"Year\":2020,\"energy\":161.17,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2000,\"energy\":578.29,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2001,\"energy\":564.95,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2002,\"energy\":605.12,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2003,\"energy\":633.76,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2004,\"energy\":621.6,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2005,\"energy\":634.09,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2006,\"energy\":628.77,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2007,\"energy\":705.37,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2008,\"energy\":663.88,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2009,\"energy\":611.86,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2010,\"energy\":689.89,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2011,\"energy\":777.1,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2012,\"energy\":920.39,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2013,\"energy\":897.88,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2014,\"energy\":892.18,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2015,\"energy\":844.23,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2016,\"energy\":832.4,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2017,\"energy\":806.12,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2018,\"energy\":780.61,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2019,\"energy\":735.66,\"source\":\"fossil fuels\"},{\"Entity\":\"Japan\",\"Year\":2020,\"energy\":716.67,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2000,\"energy\":44.11,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2001,\"energy\":47.3,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2002,\"energy\":49.44,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2003,\"energy\":55.24,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2004,\"energy\":58.89,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2005,\"energy\":60.06,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2006,\"energy\":63.89,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2007,\"energy\":68.45,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2008,\"energy\":72.89,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2009,\"energy\":71.85,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2010,\"energy\":74.63,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2011,\"energy\":78.7,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2012,\"energy\":82.98,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2013,\"energy\":84.88,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2014,\"energy\":86.37,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2015,\"energy\":82.2,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2016,\"energy\":82.65,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2017,\"energy\":91.48,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2018,\"energy\":96.36,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2019,\"energy\":95.39,\"source\":\"fossil fuels\"},{\"Entity\":\"Kazakhstan\",\"Year\":2020,\"energy\":96.7,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2000,\"energy\":141.8,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2001,\"energy\":153.32,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2002,\"energy\":159.81,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2003,\"energy\":160.45,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2004,\"energy\":173.66,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2005,\"energy\":178.76,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2006,\"energy\":182.76,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2007,\"energy\":191.83,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2008,\"energy\":184.51,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2009,\"energy\":194.75,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2010,\"energy\":207.38,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2011,\"energy\":219.88,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2012,\"energy\":229.14,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2013,\"energy\":231.23,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2014,\"energy\":223.43,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2015,\"energy\":234.28,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2016,\"energy\":239.78,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2017,\"energy\":242.69,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2018,\"energy\":259.92,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2019,\"energy\":248.2,\"source\":\"fossil fuels\"},{\"Entity\":\"Mexico\",\"Year\":2020,\"energy\":245.46,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2000,\"energy\":140.85,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2001,\"energy\":140.94,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2002,\"energy\":139.72,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2003,\"energy\":147.76,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2004,\"energy\":149.06,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2005,\"energy\":151.2,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2006,\"energy\":156.16,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2007,\"energy\":153.08,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2008,\"energy\":148.03,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2009,\"energy\":142.4,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2010,\"energy\":146.12,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2011,\"energy\":149.88,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2012,\"energy\":144.75,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2013,\"energy\":146.85,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2014,\"energy\":138.53,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2015,\"energy\":141.55,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2016,\"energy\":143.28,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2017,\"energy\":145.8,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2018,\"energy\":147.87,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2019,\"energy\":137.58,\"source\":\"fossil fuels\"},{\"Entity\":\"Poland\",\"Year\":2020,\"energy\":128.91,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2000,\"energy\":138.68,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2001,\"energy\":146.09,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2002,\"energy\":154.91,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2003,\"energy\":166.58,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2004,\"energy\":173.41,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2005,\"energy\":191.05,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2006,\"energy\":196.31,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2007,\"energy\":204.43,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2008,\"energy\":204.2,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2009,\"energy\":217.31,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2010,\"energy\":240.06,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2011,\"energy\":250.07,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2012,\"energy\":271.68,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2013,\"energy\":284.02,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2014,\"energy\":311.81,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2015,\"energy\":338.34,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2016,\"energy\":337.38,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2017,\"energy\":354.3,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2018,\"energy\":334.7,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2019,\"energy\":335.24,\"source\":\"fossil fuels\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2020,\"energy\":337.82,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2000,\"energy\":181.67,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2001,\"energy\":183.36,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2002,\"energy\":188.79,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2003,\"energy\":204.39,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2004,\"energy\":212.63,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2005,\"energy\":215.23,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2006,\"energy\":223.25,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2007,\"energy\":232.91,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2008,\"energy\":226.32,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2009,\"energy\":218.17,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2010,\"energy\":227.57,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2011,\"energy\":229.06,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2012,\"energy\":226.84,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2013,\"energy\":223.28,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2014,\"energy\":218.42,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2015,\"energy\":214.88,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2016,\"energy\":213.09,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2017,\"energy\":212.77,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2018,\"energy\":214.25,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2019,\"energy\":208.39,\"source\":\"fossil fuels\"},{\"Entity\":\"South Africa\",\"Year\":2020,\"energy\":197.5,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2000,\"energy\":124.22,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2001,\"energy\":120.06,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2002,\"energy\":143.72,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2003,\"energy\":139.67,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2004,\"energy\":159.91,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2005,\"energy\":184.65,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2006,\"energy\":182.98,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2007,\"energy\":188.13,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2008,\"energy\":189.55,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2009,\"energy\":164.69,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2010,\"energy\":138.39,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2011,\"energy\":146.12,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2012,\"energy\":145.33,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2013,\"energy\":113.32,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2014,\"energy\":107.37,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2015,\"energy\":123.19,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2016,\"energy\":107.93,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2017,\"energy\":126.93,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2018,\"energy\":112.23,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2019,\"energy\":111.55,\"source\":\"fossil fuels\"},{\"Entity\":\"Spain\",\"Year\":2020,\"energy\":87.64,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2000,\"energy\":83.15,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2001,\"energy\":88.97,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2002,\"energy\":93.51,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2003,\"energy\":100.61,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2004,\"energy\":109.46,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2005,\"energy\":115.58,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2006,\"energy\":119.41,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2007,\"energy\":122.12,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2008,\"energy\":127.43,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2009,\"energy\":128.09,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2010,\"energy\":141.72,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2011,\"energy\":135.31,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2012,\"energy\":143.73,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2013,\"energy\":148.29,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2014,\"energy\":149.26,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2015,\"energy\":153.4,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2016,\"energy\":161.79,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2017,\"energy\":161.88,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2018,\"energy\":156.26,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2019,\"energy\":162.59,\"source\":\"fossil fuels\"},{\"Entity\":\"Thailand\",\"Year\":2020,\"energy\":154.52,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2000,\"energy\":82.65,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2001,\"energy\":84.59,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2002,\"energy\":85.93,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2003,\"energy\":89.52,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2004,\"energy\":83.22,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2005,\"energy\":84.75,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2006,\"energy\":90.09,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2007,\"energy\":93.13,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2008,\"energy\":90.92,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2009,\"energy\":78.58,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2010,\"energy\":86.28,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2011,\"energy\":93.5,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2012,\"energy\":96.99,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2013,\"energy\":95.39,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2014,\"energy\":83.42,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2015,\"energy\":66.91,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2016,\"energy\":72.66,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2017,\"energy\":57.96,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2018,\"energy\":60.81,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2019,\"energy\":57.79,\"source\":\"fossil fuels\"},{\"Entity\":\"Ukraine\",\"Year\":2020,\"energy\":54.5,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2000,\"energy\":279.34,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2001,\"energy\":282.72,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2002,\"energy\":285.62,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2003,\"energy\":296.15,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2004,\"energy\":297.15,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2005,\"energy\":296.87,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2006,\"energy\":299.88,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2007,\"energy\":310.26,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2008,\"energy\":310.5,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2009,\"energy\":278.73,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2010,\"energy\":290.59,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2011,\"energy\":260.88,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2012,\"energy\":249.25,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2013,\"energy\":231.56,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2014,\"energy\":206.94,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2015,\"energy\":182.43,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2016,\"energy\":181.56,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2017,\"energy\":165.91,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2018,\"energy\":155.41,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2019,\"energy\":144.99,\"source\":\"fossil fuels\"},{\"Entity\":\"United Kingdom\",\"Year\":2020,\"energy\":124.78,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2000,\"energy\":2697.28,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2001,\"energy\":2678.68,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2002,\"energy\":2727.83,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2003,\"energy\":2756.03,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2004,\"energy\":2818.28,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2005,\"energy\":2899.96,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2006,\"energy\":2878.56,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2007,\"energy\":2988.24,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2008,\"energy\":2924.21,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2009,\"energy\":2725.41,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2010,\"energy\":2882.49,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2011,\"energy\":2788.93,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2012,\"energy\":2779.02,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2013,\"energy\":2746.21,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2014,\"energy\":2752.01,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2015,\"energy\":2730.32,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2016,\"energy\":2656.96,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2017,\"energy\":2540.17,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2018,\"energy\":2661.3,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2019,\"energy\":2588.21,\"source\":\"fossil fuels\"},{\"Entity\":\"United States\",\"Year\":2020,\"energy\":2431.9,\"source\":\"fossil fuels\"},{\"Entity\":\"Australia\",\"Year\":2000,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2001,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2002,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2003,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2004,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2005,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2006,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2007,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2008,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2009,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2010,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2011,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2012,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2013,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2014,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2015,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2016,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2017,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2018,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2019,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2020,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2000,\"energy\":4.94,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2001,\"energy\":14.27,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2002,\"energy\":13.84,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2003,\"energy\":13.4,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2004,\"energy\":11.6,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2005,\"energy\":9.2,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2006,\"energy\":12.98,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2007,\"energy\":11.65,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2008,\"energy\":13.21,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2009,\"energy\":12.22,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2010,\"energy\":13.77,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2011,\"energy\":14.8,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2012,\"energy\":15.17,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2013,\"energy\":14.65,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2014,\"energy\":14.46,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2015,\"energy\":13.91,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2016,\"energy\":14.97,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2017,\"energy\":14.86,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2018,\"energy\":14.79,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2019,\"energy\":15.16,\"source\":\"nuclear\"},{\"Entity\":\"Brazil\",\"Year\":2020,\"energy\":13.21,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2000,\"energy\":69.16,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2001,\"energy\":72.86,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2002,\"energy\":71.75,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2003,\"energy\":71.15,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2004,\"energy\":85.87,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2005,\"energy\":86.83,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2006,\"energy\":92.44,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2007,\"energy\":88.19,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2008,\"energy\":88.3,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2009,\"energy\":85.13,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2010,\"energy\":85.53,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2011,\"energy\":88.29,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2012,\"energy\":89.49,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2013,\"energy\":97.58,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2014,\"energy\":101.21,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2015,\"energy\":96.05,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2016,\"energy\":95.69,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2017,\"energy\":95.57,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2018,\"energy\":95.03,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2019,\"energy\":95.47,\"source\":\"nuclear\"},{\"Entity\":\"Canada\",\"Year\":2020,\"energy\":92.65,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2000,\"energy\":16.74,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2001,\"energy\":17.47,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2002,\"energy\":25.13,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2003,\"energy\":43.34,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2004,\"energy\":50.47,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2005,\"energy\":53.09,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2006,\"energy\":54.84,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2007,\"energy\":62.13,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2008,\"energy\":68.39,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2009,\"energy\":70.05,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2010,\"energy\":74.74,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2011,\"energy\":87.2,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2012,\"energy\":98.32,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2013,\"energy\":111.5,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2014,\"energy\":133.22,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2015,\"energy\":171.38,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2016,\"energy\":213.18,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2017,\"energy\":248.1,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2018,\"energy\":295,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2019,\"energy\":348.7,\"source\":\"nuclear\"},{\"Entity\":\"China\",\"Year\":2020,\"energy\":366.2,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2000,\"energy\":415.16,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2001,\"energy\":421.08,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2002,\"energy\":436.76,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2003,\"energy\":441.07,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2004,\"energy\":448.24,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2005,\"energy\":451.53,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2006,\"energy\":450.19,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2007,\"energy\":439.73,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2008,\"energy\":439.45,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2009,\"energy\":409.74,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2010,\"energy\":428.52,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2011,\"energy\":442.39,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2012,\"energy\":425.41,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2013,\"energy\":423.68,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2014,\"energy\":436.48,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2015,\"energy\":437.43,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2016,\"energy\":403.2,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2017,\"energy\":398.36,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2018,\"energy\":412.94,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2019,\"energy\":399.01,\"source\":\"nuclear\"},{\"Entity\":\"France\",\"Year\":2020,\"energy\":353.83,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2000,\"energy\":169.61,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2001,\"energy\":171.3,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2002,\"energy\":164.84,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2003,\"energy\":165.06,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2004,\"energy\":167.07,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2005,\"energy\":163.05,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2006,\"energy\":167.27,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2007,\"energy\":140.53,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2008,\"energy\":148.49,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2009,\"energy\":134.93,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2010,\"energy\":140.56,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2011,\"energy\":107.97,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2012,\"energy\":99.46,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2013,\"energy\":97.29,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2014,\"energy\":97.13,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2015,\"energy\":91.79,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2016,\"energy\":84.63,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2017,\"energy\":76.32,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2018,\"energy\":76,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2019,\"energy\":75.07,\"source\":\"nuclear\"},{\"Entity\":\"Germany\",\"Year\":2020,\"energy\":64.38,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2000,\"energy\":15.77,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2001,\"energy\":18.89,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2002,\"energy\":19.35,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2003,\"energy\":18.14,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2004,\"energy\":21.26,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2005,\"energy\":17.73,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2006,\"energy\":17.63,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2007,\"energy\":17.83,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2008,\"energy\":15.23,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2009,\"energy\":16.82,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2010,\"energy\":23.08,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2011,\"energy\":32.22,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2012,\"energy\":33.14,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2013,\"energy\":33.31,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2014,\"energy\":34.69,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2015,\"energy\":38.31,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2016,\"energy\":37.9,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2017,\"energy\":37.41,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2018,\"energy\":39.05,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2019,\"energy\":45.16,\"source\":\"nuclear\"},{\"Entity\":\"India\",\"Year\":2020,\"energy\":44.61,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2000,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2001,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2002,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2003,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2004,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2005,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2006,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2007,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2008,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2009,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2010,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2011,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2012,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2013,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2014,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2015,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2016,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2017,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2018,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2019,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Indonesia\",\"Year\":2020,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2000,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2001,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2002,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2003,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2004,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2005,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2006,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2007,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2008,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2009,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2010,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2011,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2012,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2013,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2014,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2015,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2016,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2017,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2018,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2019,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Italy\",\"Year\":2020,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2000,\"energy\":305.95,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2001,\"energy\":303.86,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2002,\"energy\":280.34,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2003,\"energy\":228.01,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2004,\"energy\":268.32,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2005,\"energy\":280.5,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2006,\"energy\":291.54,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2007,\"energy\":267.34,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2008,\"energy\":241.25,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2009,\"energy\":263.05,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2010,\"energy\":278.36,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2011,\"energy\":153.38,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2012,\"energy\":15.12,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2013,\"energy\":10.43,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2014,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2015,\"energy\":3.24,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2016,\"energy\":14.87,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2017,\"energy\":27.75,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2018,\"energy\":47.82,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2019,\"energy\":63.88,\"source\":\"nuclear\"},{\"Entity\":\"Japan\",\"Year\":2020,\"energy\":41.86,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2000,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2001,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2002,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2003,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2004,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2005,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2006,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2007,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2008,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2009,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2010,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2011,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2012,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2013,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2014,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2015,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2016,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2017,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2018,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2019,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Kazakhstan\",\"Year\":2020,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2000,\"energy\":7.81,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2001,\"energy\":8.29,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2002,\"energy\":9.26,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2003,\"energy\":9.98,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2004,\"energy\":8.73,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2005,\"energy\":10.32,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2006,\"energy\":10.4,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2007,\"energy\":9.95,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2008,\"energy\":9.36,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2009,\"energy\":10.11,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2010,\"energy\":5.66,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2011,\"energy\":9.66,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2012,\"energy\":8.41,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2013,\"energy\":11.38,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2014,\"energy\":9.3,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2015,\"energy\":11.18,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2016,\"energy\":10.27,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2017,\"energy\":10.57,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2018,\"energy\":13.32,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2019,\"energy\":10.88,\"source\":\"nuclear\"},{\"Entity\":\"Mexico\",\"Year\":2020,\"energy\":10.87,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2000,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2001,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2002,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2003,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2004,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2005,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2006,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2007,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2008,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2009,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2010,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2011,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2012,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2013,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2014,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2015,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2016,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2017,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2018,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2019,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Poland\",\"Year\":2020,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2000,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2001,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2002,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2003,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2004,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2005,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2006,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2007,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2008,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2009,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2010,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2011,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2012,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2013,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2014,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2015,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2016,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2017,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2018,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2019,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2020,\"energy\":null,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2000,\"energy\":13.01,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2001,\"energy\":10.72,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2002,\"energy\":11.99,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2003,\"energy\":12.66,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2004,\"energy\":14.28,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2005,\"energy\":12.24,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2006,\"energy\":10.07,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2007,\"energy\":12.6,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2008,\"energy\":12.75,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2009,\"energy\":11.57,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2010,\"energy\":12.9,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2011,\"energy\":12.94,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2012,\"energy\":12.4,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2013,\"energy\":13.61,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2014,\"energy\":14.76,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2015,\"energy\":10.97,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2016,\"energy\":15.21,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2017,\"energy\":15.09,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2018,\"energy\":10.56,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2019,\"energy\":13.6,\"source\":\"nuclear\"},{\"Entity\":\"South Africa\",\"Year\":2020,\"energy\":11.62,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2000,\"energy\":62.21,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2001,\"energy\":63.71,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2002,\"energy\":63.02,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2003,\"energy\":61.88,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2004,\"energy\":63.61,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2005,\"energy\":57.54,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2006,\"energy\":60.13,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2007,\"energy\":55.1,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2008,\"energy\":58.97,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2009,\"energy\":52.76,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2010,\"energy\":61.99,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2011,\"energy\":57.72,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2012,\"energy\":61.47,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2013,\"energy\":56.73,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2014,\"energy\":57.31,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2015,\"energy\":57.2,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2016,\"energy\":58.63,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2017,\"energy\":58.04,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2018,\"energy\":55.77,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2019,\"energy\":58.35,\"source\":\"nuclear\"},{\"Entity\":\"Spain\",\"Year\":2020,\"energy\":58.3,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2000,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2001,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2002,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2003,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2004,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2005,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2006,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2007,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2008,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2009,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2010,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2011,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2012,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2013,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2014,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2015,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2016,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2017,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2018,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2019,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Thailand\",\"Year\":2020,\"energy\":0,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2000,\"energy\":77.34,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2001,\"energy\":76.17,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2002,\"energy\":77.99,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2003,\"energy\":81.41,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2004,\"energy\":87.02,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2005,\"energy\":88.76,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2006,\"energy\":90.22,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2007,\"energy\":92.54,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2008,\"energy\":89.84,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2009,\"energy\":82.92,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2010,\"energy\":89.15,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2011,\"energy\":90.25,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2012,\"energy\":90.14,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2013,\"energy\":83.21,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2014,\"energy\":88.39,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2015,\"energy\":87.63,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2016,\"energy\":80.95,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2017,\"energy\":85.58,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2018,\"energy\":84.4,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2019,\"energy\":83,\"source\":\"nuclear\"},{\"Entity\":\"Ukraine\",\"Year\":2020,\"energy\":76.2,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2000,\"energy\":85.06,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2001,\"energy\":90.09,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2002,\"energy\":87.85,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2003,\"energy\":88.69,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2004,\"energy\":80,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2005,\"energy\":81.62,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2006,\"energy\":75.45,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2007,\"energy\":63.03,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2008,\"energy\":52.49,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2009,\"energy\":69.1,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2010,\"energy\":62.14,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2011,\"energy\":68.98,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2012,\"energy\":70.4,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2013,\"energy\":70.61,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2014,\"energy\":63.75,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2015,\"energy\":70.34,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2016,\"energy\":71.73,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2017,\"energy\":70.34,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2018,\"energy\":65.06,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2019,\"energy\":56.18,\"source\":\"nuclear\"},{\"Entity\":\"United Kingdom\",\"Year\":2020,\"energy\":50.85,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2000,\"energy\":753.89,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2001,\"energy\":768.83,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2002,\"energy\":780.06,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2003,\"energy\":763.73,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2004,\"energy\":788.53,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2005,\"energy\":781.99,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2006,\"energy\":787.22,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2007,\"energy\":806.42,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2008,\"energy\":806.21,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2009,\"energy\":798.85,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2010,\"energy\":806.97,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2011,\"energy\":790.2,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2012,\"energy\":769.33,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2013,\"energy\":789.02,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2014,\"energy\":797.17,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2015,\"energy\":797.18,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2016,\"energy\":805.69,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2017,\"energy\":804.95,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2018,\"energy\":807.08,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2019,\"energy\":809.41,\"source\":\"nuclear\"},{\"Entity\":\"United States\",\"Year\":2020,\"energy\":789.88,\"source\":\"nuclear\"},{\"Entity\":\"Australia\",\"Year\":2000,\"energy\":17.11,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2001,\"energy\":17.4,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2002,\"energy\":17.35,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2003,\"energy\":18.5,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2004,\"energy\":19.41,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2005,\"energy\":19.75,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2006,\"energy\":21.19,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2007,\"energy\":20.93,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2008,\"energy\":18.49,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2009,\"energy\":18.32,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2010,\"energy\":21.13,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2011,\"energy\":27.33,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2012,\"energy\":26.63,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2013,\"energy\":34.2,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2014,\"energy\":36.15,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2015,\"energy\":33.12,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2016,\"energy\":38.41,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2017,\"energy\":40.77,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2018,\"energy\":42.93,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2019,\"energy\":53.41,\"source\":\"renewables\"},{\"Entity\":\"Australia\",\"Year\":2020,\"energy\":63.99,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2000,\"energy\":308.77,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2001,\"energy\":273.71,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2002,\"energy\":292.95,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2003,\"energy\":313.88,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2004,\"energy\":329.43,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2005,\"energy\":346.96,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2006,\"energy\":359.55,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2007,\"energy\":387.88,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2008,\"energy\":385.61,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2009,\"energy\":410.13,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2010,\"energy\":435.99,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2011,\"energy\":462.32,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2012,\"energy\":454.78,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2013,\"energy\":436.84,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2014,\"energy\":430.82,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2015,\"energy\":428.81,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2016,\"energy\":463.37,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2017,\"energy\":464.4,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2018,\"energy\":492.66,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2019,\"energy\":512.59,\"source\":\"renewables\"},{\"Entity\":\"Brazil\",\"Year\":2020,\"energy\":520.01,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2000,\"energy\":363.7,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2001,\"energy\":339.58,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2002,\"energy\":357.06,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2003,\"energy\":343.88,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2004,\"energy\":347.68,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2005,\"energy\":368.86,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2006,\"energy\":360.48,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2007,\"energy\":375.42,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2008,\"energy\":385.21,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2009,\"energy\":380.24,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2010,\"energy\":366.21,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2011,\"energy\":391.95,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2012,\"energy\":398.58,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2013,\"energy\":417.28,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2014,\"energy\":412.13,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2015,\"energy\":417.2,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2016,\"energy\":426.84,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2017,\"energy\":435.43,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2018,\"energy\":428.39,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2019,\"energy\":421.8,\"source\":\"renewables\"},{\"Entity\":\"Canada\",\"Year\":2020,\"energy\":429.24,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2000,\"energy\":225.56,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2001,\"energy\":280.73,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2002,\"energy\":291.41,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2003,\"energy\":287.28,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2004,\"energy\":357.43,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2005,\"energy\":404.37,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2006,\"energy\":446.72,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2007,\"energy\":500.71,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2008,\"energy\":665.08,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2009,\"energy\":664.39,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2010,\"energy\":786.38,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2011,\"energy\":792.38,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2012,\"energy\":999.56,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2013,\"energy\":1093.37,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2014,\"energy\":1289.23,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2015,\"energy\":1393.66,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2016,\"energy\":1522.79,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2017,\"energy\":1667.06,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2018,\"energy\":1835.32,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2019,\"energy\":2014.57,\"source\":\"renewables\"},{\"Entity\":\"China\",\"Year\":2020,\"energy\":2184.94,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2000,\"energy\":67.83,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2001,\"energy\":76.09,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2002,\"energy\":62.69,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2003,\"energy\":61.47,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2004,\"energy\":62.42,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2005,\"energy\":54.98,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2006,\"energy\":60.91,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2007,\"energy\":64.3,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2008,\"energy\":72.33,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2009,\"energy\":68.15,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2010,\"energy\":76.68,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2011,\"energy\":66.02,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2012,\"energy\":85.25,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2013,\"energy\":99.42,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2014,\"energy\":94.03,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2015,\"energy\":91.84,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2016,\"energy\":99,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2017,\"energy\":92.63,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2018,\"energy\":113.62,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2019,\"energy\":113.21,\"source\":\"renewables\"},{\"Entity\":\"France\",\"Year\":2020,\"energy\":125.28,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2000,\"energy\":35.47,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2001,\"energy\":37.9,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2002,\"energy\":44.48,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2003,\"energy\":46.67,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2004,\"energy\":57.97,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2005,\"energy\":63.4,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2006,\"energy\":72.51,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2007,\"energy\":89.38,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2008,\"energy\":94.28,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2009,\"energy\":95.94,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2010,\"energy\":105.18,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2011,\"energy\":124.04,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2012,\"energy\":143.04,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2013,\"energy\":152.34,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2014,\"energy\":162.54,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2015,\"energy\":188.79,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2016,\"energy\":189.67,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2017,\"energy\":216.32,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2018,\"energy\":222.07,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2019,\"energy\":240.33,\"source\":\"renewables\"},{\"Entity\":\"Germany\",\"Year\":2020,\"energy\":251.48,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2000,\"energy\":80.27,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2001,\"energy\":76.19,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2002,\"energy\":72.78,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2003,\"energy\":74.63,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2004,\"energy\":109.2,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2005,\"energy\":107.47,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2006,\"energy\":127.56,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2007,\"energy\":141.75,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2008,\"energy\":138.91,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2009,\"energy\":134.33,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2010,\"energy\":142.61,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2011,\"energy\":173.62,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2012,\"energy\":165.25,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2013,\"energy\":187.9,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2014,\"energy\":202.04,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2015,\"energy\":203.21,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2016,\"energy\":208.21,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2017,\"energy\":234.9,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2018,\"energy\":263.61,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2019,\"energy\":303.16,\"source\":\"renewables\"},{\"Entity\":\"India\",\"Year\":2020,\"energy\":315.76,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2000,\"energy\":19.6,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2001,\"energy\":22.19,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2002,\"energy\":21,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2003,\"energy\":19.82,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2004,\"energy\":20.97,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2005,\"energy\":22.66,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2006,\"energy\":21.18,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2007,\"energy\":24.29,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2008,\"energy\":26.34,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2009,\"energy\":26.79,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2010,\"energy\":34.63,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2011,\"energy\":30.46,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2012,\"energy\":31.11,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2013,\"energy\":35.5,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2014,\"energy\":34.41,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2015,\"energy\":33.56,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2016,\"energy\":39.58,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2017,\"energy\":43.17,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2018,\"energy\":48.38,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2019,\"energy\":48.04,\"source\":\"renewables\"},{\"Entity\":\"Indonesia\",\"Year\":2020,\"energy\":52.91,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2000,\"energy\":50.87,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2001,\"energy\":54.35,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2002,\"energy\":48.31,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2003,\"energy\":46.86,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2004,\"energy\":53.88,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2005,\"energy\":48.43,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2006,\"energy\":50.64,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2007,\"energy\":47.72,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2008,\"energy\":58.16,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2009,\"energy\":69.26,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2010,\"energy\":76.98,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2011,\"energy\":82.96,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2012,\"energy\":92.22,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2013,\"energy\":112,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2014,\"energy\":120.68,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2015,\"energy\":108.89,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2016,\"energy\":108.01,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2017,\"energy\":103.89,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2018,\"energy\":114.41,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2019,\"energy\":115.83,\"source\":\"renewables\"},{\"Entity\":\"Italy\",\"Year\":2020,\"energy\":116.9,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2000,\"energy\":104.16,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2001,\"energy\":101.36,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2002,\"energy\":101.1,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2003,\"energy\":114.18,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2004,\"energy\":114.73,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2005,\"energy\":100.57,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2006,\"energy\":112.07,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2007,\"energy\":100.8,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2008,\"energy\":100.79,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2009,\"energy\":102.28,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2010,\"energy\":113.92,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2011,\"energy\":116.5,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2012,\"energy\":111.09,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2013,\"energy\":121.48,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2014,\"energy\":136.53,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2015,\"energy\":157.34,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2016,\"energy\":157.7,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2017,\"energy\":175.12,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2018,\"energy\":183.63,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2019,\"energy\":192.72,\"source\":\"renewables\"},{\"Entity\":\"Japan\",\"Year\":2020,\"energy\":205.6,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2000,\"energy\":7.53,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2001,\"energy\":8.08,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2002,\"energy\":8.89,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2003,\"energy\":8.62,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2004,\"energy\":8.06,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2005,\"energy\":7.86,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2006,\"energy\":7.77,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2007,\"energy\":8.17,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2008,\"energy\":7.46,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2009,\"energy\":6.88,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2010,\"energy\":8.02,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2011,\"energy\":7.88,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2012,\"energy\":7.64,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2013,\"energy\":7.73,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2014,\"energy\":8.27,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2015,\"energy\":9.45,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2016,\"energy\":11.98,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2017,\"energy\":11.64,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2018,\"energy\":10.91,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2019,\"energy\":11.09,\"source\":\"renewables\"},{\"Entity\":\"Kazakhstan\",\"Year\":2020,\"energy\":11.94,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2000,\"energy\":44.51,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2001,\"energy\":39.56,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2002,\"energy\":35.67,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2003,\"energy\":32.11,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2004,\"energy\":38.19,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2005,\"energy\":42.29,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2006,\"energy\":43.63,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2007,\"energy\":42.14,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2008,\"energy\":53.22,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2009,\"energy\":40.59,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2010,\"energy\":51.37,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2011,\"energy\":50.7,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2012,\"energy\":47.2,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2013,\"energy\":44.67,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2014,\"energy\":57.46,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2015,\"energy\":52.42,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2016,\"energy\":52.97,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2017,\"energy\":55.88,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2018,\"energy\":58.78,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2019,\"energy\":59,\"source\":\"renewables\"},{\"Entity\":\"Mexico\",\"Year\":2020,\"energy\":69.19,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2000,\"energy\":2.33,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2001,\"energy\":2.78,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2002,\"energy\":2.77,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2003,\"energy\":2.25,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2004,\"energy\":3.2,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2005,\"energy\":3.85,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2006,\"energy\":4.29,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2007,\"energy\":5.43,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2008,\"energy\":6.61,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2009,\"energy\":8.69,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2010,\"energy\":10.88,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2011,\"energy\":13.13,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2012,\"energy\":16.88,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2013,\"energy\":17.06,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2014,\"energy\":19.85,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2015,\"energy\":22.69,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2016,\"energy\":22.81,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2017,\"energy\":24.13,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2018,\"energy\":21.62,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2019,\"energy\":25.46,\"source\":\"renewables\"},{\"Entity\":\"Poland\",\"Year\":2020,\"energy\":28.23,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2000,\"energy\":0,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2001,\"energy\":0,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2002,\"energy\":0,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2003,\"energy\":0,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2004,\"energy\":0,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2005,\"energy\":0,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2006,\"energy\":0,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2007,\"energy\":0,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2008,\"energy\":0,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2009,\"energy\":0,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2010,\"energy\":0,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2011,\"energy\":0.01,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2012,\"energy\":0.03,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2013,\"energy\":0.04,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2014,\"energy\":0.05,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2015,\"energy\":0.05,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2016,\"energy\":0.05,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2017,\"energy\":0.07,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2018,\"energy\":0.16,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2019,\"energy\":0.21,\"source\":\"renewables\"},{\"Entity\":\"Saudi Arabia\",\"Year\":2020,\"energy\":0.21,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2000,\"energy\":1.79,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2001,\"energy\":2.46,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2002,\"energy\":2.81,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2003,\"energy\":1.19,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2004,\"energy\":1.33,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2005,\"energy\":1.75,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2006,\"energy\":3.28,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2007,\"energy\":1.3,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2008,\"energy\":1.66,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2009,\"energy\":1.86,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2010,\"energy\":2.51,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2011,\"energy\":2.49,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2012,\"energy\":1.66,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2013,\"energy\":1.62,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2014,\"energy\":3.38,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2015,\"energy\":6.09,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2016,\"energy\":7.69,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2017,\"energy\":10.04,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2018,\"energy\":12.22,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2019,\"energy\":12.57,\"source\":\"renewables\"},{\"Entity\":\"South Africa\",\"Year\":2020,\"energy\":12.83,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2000,\"energy\":34.49,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2001,\"energy\":49.3,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2002,\"energy\":33.17,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2003,\"energy\":55.75,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2004,\"energy\":50.13,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2005,\"energy\":42.27,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2006,\"energy\":52.15,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2007,\"energy\":58.3,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2008,\"energy\":62.15,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2009,\"energy\":74.08,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2010,\"energy\":97.77,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2011,\"energy\":87.53,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2012,\"energy\":86.97,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2013,\"energy\":111.42,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2014,\"energy\":110.26,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2015,\"energy\":97.09,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2016,\"energy\":104.63,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2017,\"energy\":87.93,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2018,\"energy\":103.88,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2019,\"energy\":100.99,\"source\":\"renewables\"},{\"Entity\":\"Spain\",\"Year\":2020,\"energy\":113.79,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2000,\"energy\":6.38,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2001,\"energy\":6.76,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2002,\"energy\":8.07,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2003,\"energy\":8.36,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2004,\"energy\":7.63,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2005,\"energy\":7.42,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2006,\"energy\":9.82,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2007,\"energy\":10.2,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2008,\"energy\":8.95,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2009,\"energy\":9.09,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2010,\"energy\":8.58,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2011,\"energy\":11.83,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2012,\"energy\":13.42,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2013,\"energy\":12.33,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2014,\"energy\":13.68,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2015,\"energy\":13.33,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2016,\"energy\":15.97,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2017,\"energy\":19.92,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2018,\"energy\":25.84,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2019,\"energy\":28.02,\"source\":\"renewables\"},{\"Entity\":\"Thailand\",\"Year\":2020,\"energy\":24.73,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2000,\"energy\":11.28,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2001,\"energy\":12.05,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2002,\"energy\":9.65,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2003,\"energy\":9.27,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2004,\"energy\":11.78,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2005,\"energy\":12.4,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2006,\"energy\":12.92,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2007,\"energy\":10.47,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2008,\"energy\":11.82,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2009,\"energy\":12.12,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2010,\"energy\":13.39,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2011,\"energy\":11.2,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2012,\"energy\":11.23,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2013,\"energy\":15.11,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2014,\"energy\":10.17,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2015,\"energy\":7.1,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2016,\"energy\":9.25,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2017,\"energy\":10.88,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2018,\"energy\":13.02,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2019,\"energy\":11.87,\"source\":\"renewables\"},{\"Entity\":\"Ukraine\",\"Year\":2020,\"energy\":17.56,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2000,\"energy\":9.98,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2001,\"energy\":9.56,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2002,\"energy\":11.13,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2003,\"energy\":10.62,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2004,\"energy\":14.14,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2005,\"energy\":16.93,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2006,\"energy\":18.11,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2007,\"energy\":19.69,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2008,\"energy\":21.85,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2009,\"energy\":25.25,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2010,\"energy\":26.18,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2011,\"energy\":35.2,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2012,\"energy\":41.24,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2013,\"energy\":53.21,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2014,\"energy\":64.52,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2015,\"energy\":82.57,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2016,\"energy\":82.99,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2017,\"energy\":98.85,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2018,\"energy\":110.03,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2019,\"energy\":120.48,\"source\":\"renewables\"},{\"Entity\":\"United Kingdom\",\"Year\":2020,\"energy\":131.74,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2000,\"energy\":350.93,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2001,\"energy\":280.06,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2002,\"energy\":336.34,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2003,\"energy\":349.18,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2004,\"energy\":345.14,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2005,\"energy\":353.04,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2006,\"energy\":381.16,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2007,\"energy\":347.91,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2008,\"energy\":377.11,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2009,\"energy\":415.56,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2010,\"energy\":424.48,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2011,\"energy\":509.74,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2012,\"energy\":492.32,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2013,\"energy\":520.38,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2014,\"energy\":546.83,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2015,\"energy\":556.49,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2016,\"energy\":624.91,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2017,\"energy\":707.19,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2018,\"energy\":733.17,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2019,\"energy\":760.76,\"source\":\"renewables\"},{\"Entity\":\"United States\",\"Year\":2020,\"energy\":821.4,\"source\":\"renewables\"}],\"metadata\":{\"Entity\":{\"type\":\"string\",\"semanticType\":\"Location\"},\"Year\":{\"type\":\"number\",\"semanticType\":\"Year\"},\"energy\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"source\":{\"type\":\"string\",\"semanticType\":\"String\",\"levels\":[\"fossil fuels\",\"nuclear\",\"renewables\"]}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Unpivot the energy source columns into long format\\n    transformed_df = pd.melt(\\n        df_energy,\\n        id_vars=['Year', 'Entity'],\\n        value_vars=[\\n            'Electricity from fossil fuels (TWh)',\\n            'Electricity from nuclear (TWh)',\\n            'Electricity from renewables (TWh)'\\n        ],\\n        var_name='source',\\n        value_name='energy'\\n    )\\n    \\n    # Clean up the source names to be more readable\\n    transformed_df['source'] = transformed_df['source'].str.replace('Electricity from ', '').str.replace(' (TWh)', '')\\n    \\n    return transformed_df\\n\",\"source\":[\"global-energy-20-small.csv\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 158029.9988, 190729.9957, 209229.9957, ..., 6993180.176, 9861099.609, 9874660.156, 10096009.77\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., 90.14, 91.79, 92.54, 804.95\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\n{\\n    \\\"instruction\\\": \\\"\\\",\\n    \\\"chart_type\\\": \\\"Line Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"energy\\\",\\n        \\\"color\\\": \\\"Entity\\\",\\n        \\\"column\\\": \\\"source\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Transform the data into a long format where different energy sources (fossil fuels, nuclear, renewables) are unpivoted into separate rows. Each row should contain the year, entity (country), energy source type, and the corresponding energy value in TWh. This will enable visualization of energy generation trends over time by source and country.\\\",\\n    \\\"display_instruction\\\": \\\"Show **energy generation** trends by **source** and **Entity** over **Year**\\\",\\n    \\\"output_fields\\\": [\\\"Year\\\", \\\"Entity\\\", \\\"source\\\", \\\"energy\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"energy\\\",\\n        \\\"color\\\": \\\"Entity\\\",\\n        \\\"column\\\": \\\"source\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to visualize energy data across different sources with a line chart faceted by source. The original data has energy sources in separate columns (fossil fuels, nuclear, renewables), so we need to unpivot these columns into a long format with 'source' and 'energy' fields. The chart_encodings provided by the user are appropriate for this visualization goal, using faceting (column) to separate different energy sources.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Unpivot the energy source columns into long format\\n    transformed_df = pd.melt(\\n        df_energy,\\n        id_vars=['Year', 'Entity'],\\n        value_vars=[\\n            'Electricity from fossil fuels (TWh)',\\n            'Electricity from nuclear (TWh)',\\n            'Electricity from renewables (TWh)'\\n        ],\\n        var_name='source',\\n        value_name='energy'\\n    )\\n    \\n    # Clean up the source names to be more readable\\n    transformed_df['source'] = transformed_df['source'].str.replace('Electricity from ', '').str.replace(' (TWh)', '')\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"global-energy-20-small.csv\",\"sourceTableIds\":[\"global-energy-20-small.csv\"],\"instruction\":\"\",\"displayInstruction\":\"Show **energy generation** trends by **source** and **Entity** over **Year**\",\"chart\":{\"id\":\"chart-1760738394155\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"y\":{\"channel\":\"y\",\"bin\":false,\"fieldID\":\"concept-1760738385163\"},\"color\":{\"fieldID\":\"original--global-energy-20-small.csv--Entity\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false,\"fieldID\":\"concept-1760738389404\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"global-energy-20-small.csv\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-82\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"The code performs a data transformation to restructure the energy data from a wide format to a long format:\\n\\n1. **Unpivot energy columns**: Uses `pd.melt()` to transform the three energy source columns (**Electricity from fossil fuels**, **Electricity from nuclear**, and **Electricity from renewables**) from separate columns into rows, while keeping **Year** and **Entity** as identifier columns.\\n\\n2. **Create source classification**: Generates a new **source** column that captures which energy type each row represents, and stores the corresponding energy values in an **energy** column.\\n\\n3. **Clean source labels**: Removes the prefix \\\"Electricity from \\\" and suffix \\\" (TWh)\\\" from the source names, resulting in cleaner labels: **fossil fuels**, **nuclear**, and **renewables**.\\n\\n4. **Return restructured data**: The final dataset has each country-year-energy source combination as a separate row, making it easier to analyze and visualize energy mix across countries and time periods.\",\"concepts\":[],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small_csv)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 190729.9957, 227580.0018, 233600.0061, ..., 5736319.824, 5738290.039, nan, 9861099.609\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., 90.14, 91.79, 92.54, nan\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Unpivot the energy source columns into long format\\n    transformed_df = pd.melt(\\n        df_energy,\\n        id_vars=['Year', 'Entity'],\\n        value_vars=[\\n            'Electricity from fossil fuels (TWh)',\\n            'Electricity from nuclear (TWh)',\\n            'Electricity from renewables (TWh)'\\n        ],\\n        var_name='source',\\n        value_name='energy'\\n    )\\n    \\n    # Clean up the source names to be more readable\\n    transformed_df['source'] = transformed_df['source'].str.replace('Electricity from ', '').str.replace(' (TWh)', '')\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThe code performs a data transformation to restructure the energy data from a wide format to a long format:\\n\\n1. **Unpivot energy columns**: Uses `pd.melt()` to transform the three energy source columns (**Electricity from fossil fuels**, **Electricity from nuclear**, and **Electricity from renewables**) from separate columns into rows, while keeping **Year** and **Entity** as identifier columns.\\n\\n2. **Create source classification**: Generates a new **source** column that captures which energy type each row represents, and stores the corresponding energy values in an **energy** column.\\n\\n3. **Clean source labels**: Removes the prefix \\\"Electricity from \\\" and suffix \\\" (TWh)\\\" from the source names, resulting in cleaner labels: **fossil fuels**, **nuclear**, and **renewables**.\\n\\n4. **Return restructured data**: The final dataset has each country-year-energy source combination as a separate row, making it easier to analyze and visualize energy mix across countries and time periods.\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-45\",\"displayId\":\"renewable-energy\",\"names\":[\"Entity\",\"Year\",\"renewable_percentage\"],\"rows\":[{\"Entity\":\"Australia\",\"Year\":2000,\"renewable_percentage\":8.6344368187},{\"Entity\":\"Australia\",\"Year\":2001,\"renewable_percentage\":8.2180135078},{\"Entity\":\"Australia\",\"Year\":2002,\"renewable_percentage\":8.0833022736},{\"Entity\":\"Australia\",\"Year\":2003,\"renewable_percentage\":8.6598324205},{\"Entity\":\"Australia\",\"Year\":2004,\"renewable_percentage\":8.7013045232},{\"Entity\":\"Australia\",\"Year\":2005,\"renewable_percentage\":9.1562355123},{\"Entity\":\"Australia\",\"Year\":2006,\"renewable_percentage\":9.6357600837},{\"Entity\":\"Australia\",\"Year\":2007,\"renewable_percentage\":9.1190310213},{\"Entity\":\"Australia\",\"Year\":2008,\"renewable_percentage\":8.0548900022},{\"Entity\":\"Australia\",\"Year\":2009,\"renewable_percentage\":7.8043793133},{\"Entity\":\"Australia\",\"Year\":2010,\"renewable_percentage\":9.0442152121},{\"Entity\":\"Australia\",\"Year\":2011,\"renewable_percentage\":11.3454273735},{\"Entity\":\"Australia\",\"Year\":2012,\"renewable_percentage\":11.4105750279},{\"Entity\":\"Australia\",\"Year\":2013,\"renewable_percentage\":14.8708583355},{\"Entity\":\"Australia\",\"Year\":2014,\"renewable_percentage\":14.9621290509},{\"Entity\":\"Australia\",\"Year\":2015,\"renewable_percentage\":14.3476000693},{\"Entity\":\"Australia\",\"Year\":2016,\"renewable_percentage\":15.6093794449},{\"Entity\":\"Australia\",\"Year\":2017,\"renewable_percentage\":16.3138729943},{\"Entity\":\"Australia\",\"Year\":2018,\"renewable_percentage\":17.145938174},{\"Entity\":\"Australia\",\"Year\":2019,\"renewable_percentage\":21.3759705435},{\"Entity\":\"Australia\",\"Year\":2020,\"renewable_percentage\":25.5031684668},{\"Entity\":\"Brazil\",\"Year\":2000,\"renewable_percentage\":90.1307723743},{\"Entity\":\"Brazil\",\"Year\":2001,\"renewable_percentage\":84.6953615744},{\"Entity\":\"Brazil\",\"Year\":2002,\"renewable_percentage\":86.0883364189},{\"Entity\":\"Brazil\",\"Year\":2003,\"renewable_percentage\":87.4561159097},{\"Entity\":\"Brazil\",\"Year\":2004,\"renewable_percentage\":86.4260041451},{\"Entity\":\"Brazil\",\"Year\":2005,\"renewable_percentage\":87.6781562721},{\"Entity\":\"Brazil\",\"Year\":2006,\"renewable_percentage\":87.2842473236},{\"Entity\":\"Brazil\",\"Year\":2007,\"renewable_percentage\":88.7252098726},{\"Entity\":\"Brazil\",\"Year\":2008,\"renewable_percentage\":84.8072313004},{\"Entity\":\"Brazil\",\"Year\":2009,\"renewable_percentage\":89.4172280725},{\"Entity\":\"Brazil\",\"Year\":2010,\"renewable_percentage\":85.3576882415},{\"Entity\":\"Brazil\",\"Year\":2011,\"renewable_percentage\":87.6618820986},{\"Entity\":\"Brazil\",\"Year\":2012,\"renewable_percentage\":83.1164558813},{\"Entity\":\"Brazil\",\"Year\":2013,\"renewable_percentage\":77.5240022006},{\"Entity\":\"Brazil\",\"Year\":2014,\"renewable_percentage\":74.0418657409},{\"Entity\":\"Brazil\",\"Year\":2015,\"renewable_percentage\":75.0231817625},{\"Entity\":\"Brazil\",\"Year\":2016,\"renewable_percentage\":81.0938046902},{\"Entity\":\"Brazil\",\"Year\":2017,\"renewable_percentage\":79.9091472228},{\"Entity\":\"Brazil\",\"Year\":2018,\"renewable_percentage\":82.9198505403},{\"Entity\":\"Brazil\",\"Year\":2019,\"renewable_percentage\":82.8548799017},{\"Entity\":\"Brazil\",\"Year\":2020,\"renewable_percentage\":84.6411771408},{\"Entity\":\"Canada\",\"Year\":2000,\"renewable_percentage\":61.8095917882},{\"Entity\":\"Canada\",\"Year\":2001,\"renewable_percentage\":59.3287558747},{\"Entity\":\"Canada\",\"Year\":2002,\"renewable_percentage\":61.1477403113},{\"Entity\":\"Canada\",\"Year\":2003,\"renewable_percentage\":60.0789685174},{\"Entity\":\"Canada\",\"Year\":2004,\"renewable_percentage\":59.6967771845},{\"Entity\":\"Canada\",\"Year\":2005,\"renewable_percentage\":60.8208155391},{\"Entity\":\"Canada\",\"Year\":2006,\"renewable_percentage\":60.8271602855},{\"Entity\":\"Canada\",\"Year\":2007,\"renewable_percentage\":61.2460642446},{\"Entity\":\"Canada\",\"Year\":2008,\"renewable_percentage\":62.6520720838},{\"Entity\":\"Canada\",\"Year\":2009,\"renewable_percentage\":63.8919227732},{\"Entity\":\"Canada\",\"Year\":2010,\"renewable_percentage\":62.9421470558},{\"Entity\":\"Canada\",\"Year\":2011,\"renewable_percentage\":64.0922915917},{\"Entity\":\"Canada\",\"Year\":2012,\"renewable_percentage\":65.098730952},{\"Entity\":\"Canada\",\"Year\":2013,\"renewable_percentage\":65.4320794066},{\"Entity\":\"Canada\",\"Year\":2014,\"renewable_percentage\":64.791145907},{\"Entity\":\"Canada\",\"Year\":2015,\"renewable_percentage\":65.2946239925},{\"Entity\":\"Canada\",\"Year\":2016,\"renewable_percentage\":66.1890584295},{\"Entity\":\"Canada\",\"Year\":2017,\"renewable_percentage\":67.5399410579},{\"Entity\":\"Canada\",\"Year\":2018,\"renewable_percentage\":67.3685700357},{\"Entity\":\"Canada\",\"Year\":2019,\"renewable_percentage\":67.1741623137},{\"Entity\":\"Canada\",\"Year\":2020,\"renewable_percentage\":68.7796436354},{\"Entity\":\"China\",\"Year\":2000,\"renewable_percentage\":16.639126586},{\"Entity\":\"China\",\"Year\":2001,\"renewable_percentage\":18.9581237042},{\"Entity\":\"China\",\"Year\":2002,\"renewable_percentage\":17.6185006046},{\"Entity\":\"China\",\"Year\":2003,\"renewable_percentage\":15.0362717081},{\"Entity\":\"China\",\"Year\":2004,\"renewable_percentage\":16.2224108273},{\"Entity\":\"China\",\"Year\":2005,\"renewable_percentage\":16.1731179957},{\"Entity\":\"China\",\"Year\":2006,\"renewable_percentage\":15.5884036124},{\"Entity\":\"China\",\"Year\":2007,\"renewable_percentage\":15.2583847828},{\"Entity\":\"China\",\"Year\":2008,\"renewable_percentage\":19.0253335469},{\"Entity\":\"China\",\"Year\":2009,\"renewable_percentage\":17.8857170547},{\"Entity\":\"China\",\"Year\":2010,\"renewable_percentage\":18.7800759915},{\"Entity\":\"China\",\"Year\":2011,\"renewable_percentage\":16.8902341543},{\"Entity\":\"China\",\"Year\":2012,\"renewable_percentage\":20.122965176},{\"Entity\":\"China\",\"Year\":2013,\"renewable_percentage\":20.2152481955},{\"Entity\":\"China\",\"Year\":2014,\"renewable_percentage\":22.3502204285},{\"Entity\":\"China\",\"Year\":2015,\"renewable_percentage\":24.079270189},{\"Entity\":\"China\",\"Year\":2016,\"renewable_percentage\":25.0007798429},{\"Entity\":\"China\",\"Year\":2017,\"renewable_percentage\":25.419242299},{\"Entity\":\"China\",\"Year\":2018,\"renewable_percentage\":25.7747942589},{\"Entity\":\"China\",\"Year\":2019,\"renewable_percentage\":26.9995671106},{\"Entity\":\"China\",\"Year\":2020,\"renewable_percentage\":28.2464606924},{\"Entity\":\"France\",\"Year\":2000,\"renewable_percentage\":12.7117691154},{\"Entity\":\"France\",\"Year\":2001,\"renewable_percentage\":13.9961372206},{\"Entity\":\"France\",\"Year\":2002,\"renewable_percentage\":11.3544157067},{\"Entity\":\"France\",\"Year\":2003,\"renewable_percentage\":10.9783540506},{\"Entity\":\"France\",\"Year\":2004,\"renewable_percentage\":11.0051305559},{\"Entity\":\"France\",\"Year\":2005,\"renewable_percentage\":9.6479837153},{\"Entity\":\"France\",\"Year\":2006,\"renewable_percentage\":10.7235915493},{\"Entity\":\"France\",\"Year\":2007,\"renewable_percentage\":11.4370075239},{\"Entity\":\"France\",\"Year\":2008,\"renewable_percentage\":12.7487441615},{\"Entity\":\"France\",\"Year\":2009,\"renewable_percentage\":12.8776856068},{\"Entity\":\"France\",\"Year\":2010,\"renewable_percentage\":13.6240072491},{\"Entity\":\"France\",\"Year\":2011,\"renewable_percentage\":11.63553049},{\"Entity\":\"France\",\"Year\":2012,\"renewable_percentage\":15.0331522889},{\"Entity\":\"France\",\"Year\":2013,\"renewable_percentage\":17.2469424928},{\"Entity\":\"France\",\"Year\":2014,\"renewable_percentage\":16.6074992494},{\"Entity\":\"France\",\"Year\":2015,\"renewable_percentage\":16.002230276},{\"Entity\":\"France\",\"Year\":2016,\"renewable_percentage\":17.7212924013},{\"Entity\":\"France\",\"Year\":2017,\"renewable_percentage\":16.6576751547},{\"Entity\":\"France\",\"Year\":2018,\"renewable_percentage\":19.7315179827},{\"Entity\":\"France\",\"Year\":2019,\"renewable_percentage\":20.0116665488},{\"Entity\":\"France\",\"Year\":2020,\"renewable_percentage\":23.7610241821},{\"Entity\":\"Germany\",\"Year\":2000,\"renewable_percentage\":6.1977983575},{\"Entity\":\"Germany\",\"Year\":2001,\"renewable_percentage\":6.5132585197},{\"Entity\":\"Germany\",\"Year\":2002,\"renewable_percentage\":7.6431369854},{\"Entity\":\"Germany\",\"Year\":2003,\"renewable_percentage\":7.7455438643},{\"Entity\":\"Germany\",\"Year\":2004,\"renewable_percentage\":9.4989185292},{\"Entity\":\"Germany\",\"Year\":2005,\"renewable_percentage\":10.3356645637},{\"Entity\":\"Germany\",\"Year\":2006,\"renewable_percentage\":11.5129959829},{\"Entity\":\"Germany\",\"Year\":2007,\"renewable_percentage\":14.135471525},{\"Entity\":\"Germany\",\"Year\":2008,\"renewable_percentage\":14.8894504106},{\"Entity\":\"Germany\",\"Year\":2009,\"renewable_percentage\":16.2902842395},{\"Entity\":\"Germany\",\"Year\":2010,\"renewable_percentage\":16.8384989754},{\"Entity\":\"Germany\",\"Year\":2011,\"renewable_percentage\":20.4967199299},{\"Entity\":\"Germany\",\"Year\":2012,\"renewable_percentage\":23.056464482},{\"Entity\":\"Germany\",\"Year\":2013,\"renewable_percentage\":24.1368929731},{\"Entity\":\"Germany\",\"Year\":2014,\"renewable_percentage\":26.2182434067},{\"Entity\":\"Germany\",\"Year\":2015,\"renewable_percentage\":29.4721888318},{\"Entity\":\"Germany\",\"Year\":2016,\"renewable_percentage\":29.4990435013},{\"Entity\":\"Germany\",\"Year\":2017,\"renewable_percentage\":33.4855497593},{\"Entity\":\"Germany\",\"Year\":2018,\"renewable_percentage\":35.0976735365},{\"Entity\":\"Germany\",\"Year\":2019,\"renewable_percentage\":40.0890757144},{\"Entity\":\"Germany\",\"Year\":2020,\"renewable_percentage\":44.3324048937},{\"Entity\":\"India\",\"Year\":2000,\"renewable_percentage\":14.0481982534},{\"Entity\":\"India\",\"Year\":2001,\"renewable_percentage\":12.9997099422},{\"Entity\":\"India\",\"Year\":2002,\"renewable_percentage\":11.938193032},{\"Entity\":\"India\",\"Year\":2003,\"renewable_percentage\":11.695109147},{\"Entity\":\"India\",\"Year\":2004,\"renewable_percentage\":15.6375300722},{\"Entity\":\"India\",\"Year\":2005,\"renewable_percentage\":15.2543575768},{\"Entity\":\"India\",\"Year\":2006,\"renewable_percentage\":17.1352578483},{\"Entity\":\"India\",\"Year\":2007,\"renewable_percentage\":17.8019742295},{\"Entity\":\"India\",\"Year\":2008,\"renewable_percentage\":16.768266921},{\"Entity\":\"India\",\"Year\":2009,\"renewable_percentage\":15.269804822},{\"Entity\":\"India\",\"Year\":2010,\"renewable_percentage\":15.2122201244},{\"Entity\":\"India\",\"Year\":2011,\"renewable_percentage\":16.7911025145},{\"Entity\":\"India\",\"Year\":2012,\"renewable_percentage\":15.1350014654},{\"Entity\":\"India\",\"Year\":2013,\"renewable_percentage\":16.3941577818},{\"Entity\":\"India\",\"Year\":2014,\"renewable_percentage\":16.0092550039},{\"Entity\":\"India\",\"Year\":2015,\"renewable_percentage\":15.3718720687},{\"Entity\":\"India\",\"Year\":2016,\"renewable_percentage\":14.8548475703},{\"Entity\":\"India\",\"Year\":2017,\"renewable_percentage\":15.9669920335},{\"Entity\":\"India\",\"Year\":2018,\"renewable_percentage\":16.6949549709},{\"Entity\":\"India\",\"Year\":2019,\"renewable_percentage\":18.6915426873},{\"Entity\":\"India\",\"Year\":2020,\"renewable_percentage\":20.2059243238},{\"Entity\":\"Indonesia\",\"Year\":2000,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2001,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2002,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2003,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2004,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2005,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2006,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2007,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2008,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2009,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2010,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2011,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2012,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2013,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2014,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2015,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2016,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2017,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2018,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2019,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2020,\"renewable_percentage\":null},{\"Entity\":\"Italy\",\"Year\":2000,\"renewable_percentage\":18.900241501},{\"Entity\":\"Italy\",\"Year\":2001,\"renewable_percentage\":20.049431902},{\"Entity\":\"Italy\",\"Year\":2002,\"renewable_percentage\":17.4555571614},{\"Entity\":\"Italy\",\"Year\":2003,\"renewable_percentage\":16.4202116476},{\"Entity\":\"Italy\",\"Year\":2004,\"renewable_percentage\":18.2749380999},{\"Entity\":\"Italy\",\"Year\":2005,\"renewable_percentage\":16.3769782226},{\"Entity\":\"Italy\",\"Year\":2006,\"renewable_percentage\":16.5128639906},{\"Entity\":\"Italy\",\"Year\":2007,\"renewable_percentage\":15.5333485238},{\"Entity\":\"Italy\",\"Year\":2008,\"renewable_percentage\":18.6112},{\"Entity\":\"Italy\",\"Year\":2009,\"renewable_percentage\":24.0837332221},{\"Entity\":\"Italy\",\"Year\":2010,\"renewable_percentage\":25.8400187976},{\"Entity\":\"Italy\",\"Year\":2011,\"renewable_percentage\":27.6773203443},{\"Entity\":\"Italy\",\"Year\":2012,\"renewable_percentage\":31.1049649217},{\"Entity\":\"Italy\",\"Year\":2013,\"renewable_percentage\":39.0148744209},{\"Entity\":\"Italy\",\"Year\":2014,\"renewable_percentage\":43.4976931949},{\"Entity\":\"Italy\",\"Year\":2015,\"renewable_percentage\":38.7577860829},{\"Entity\":\"Italy\",\"Year\":2016,\"renewable_percentage\":37.6079387187},{\"Entity\":\"Italy\",\"Year\":2017,\"renewable_percentage\":35.4174479255},{\"Entity\":\"Italy\",\"Year\":2018,\"renewable_percentage\":39.8100142663},{\"Entity\":\"Italy\",\"Year\":2019,\"renewable_percentage\":39.7563068474},{\"Entity\":\"Italy\",\"Year\":2020,\"renewable_percentage\":42.0397741576},{\"Entity\":\"Japan\",\"Year\":2000,\"renewable_percentage\":10.5382436261},{\"Entity\":\"Japan\",\"Year\":2001,\"renewable_percentage\":10.447653504},{\"Entity\":\"Japan\",\"Year\":2002,\"renewable_percentage\":10.2477294843},{\"Entity\":\"Japan\",\"Year\":2003,\"renewable_percentage\":11.6993698448},{\"Entity\":\"Japan\",\"Year\":2004,\"renewable_percentage\":11.4198974767},{\"Entity\":\"Japan\",\"Year\":2005,\"renewable_percentage\":9.9068127192},{\"Entity\":\"Japan\",\"Year\":2006,\"renewable_percentage\":10.8554989442},{\"Entity\":\"Japan\",\"Year\":2007,\"renewable_percentage\":9.3897588285},{\"Entity\":\"Japan\",\"Year\":2008,\"renewable_percentage\":10.0196834738},{\"Entity\":\"Japan\",\"Year\":2009,\"renewable_percentage\":10.4667464874},{\"Entity\":\"Japan\",\"Year\":2010,\"renewable_percentage\":10.5269966826},{\"Entity\":\"Japan\",\"Year\":2011,\"renewable_percentage\":11.1272421632},{\"Entity\":\"Japan\",\"Year\":2012,\"renewable_percentage\":10.6143703421},{\"Entity\":\"Japan\",\"Year\":2013,\"renewable_percentage\":11.7965798852},{\"Entity\":\"Japan\",\"Year\":2014,\"renewable_percentage\":13.2719619718},{\"Entity\":\"Japan\",\"Year\":2015,\"renewable_percentage\":15.6586817408},{\"Entity\":\"Japan\",\"Year\":2016,\"renewable_percentage\":15.6920107068},{\"Entity\":\"Japan\",\"Year\":2017,\"renewable_percentage\":17.3559698312},{\"Entity\":\"Japan\",\"Year\":2018,\"renewable_percentage\":18.144181175},{\"Entity\":\"Japan\",\"Year\":2019,\"renewable_percentage\":19.4223288251},{\"Entity\":\"Japan\",\"Year\":2020,\"renewable_percentage\":21.324925062},{\"Entity\":\"Kazakhstan\",\"Year\":2000,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2001,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2002,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2003,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2004,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2005,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2006,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2007,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2008,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2009,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2010,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2011,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2012,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2013,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2014,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2015,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2016,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2017,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2018,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2019,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2020,\"renewable_percentage\":null},{\"Entity\":\"Mexico\",\"Year\":2000,\"renewable_percentage\":22.9291160107},{\"Entity\":\"Mexico\",\"Year\":2001,\"renewable_percentage\":19.6649599841},{\"Entity\":\"Mexico\",\"Year\":2002,\"renewable_percentage\":17.4220963173},{\"Entity\":\"Mexico\",\"Year\":2003,\"renewable_percentage\":15.8536585366},{\"Entity\":\"Mexico\",\"Year\":2004,\"renewable_percentage\":17.3134463687},{\"Entity\":\"Mexico\",\"Year\":2005,\"renewable_percentage\":18.2780827246},{\"Entity\":\"Mexico\",\"Year\":2006,\"renewable_percentage\":18.4256091896},{\"Entity\":\"Mexico\",\"Year\":2007,\"renewable_percentage\":17.2761561168},{\"Entity\":\"Mexico\",\"Year\":2008,\"renewable_percentage\":21.5387105913},{\"Entity\":\"Mexico\",\"Year\":2009,\"renewable_percentage\":16.5369729069},{\"Entity\":\"Mexico\",\"Year\":2010,\"renewable_percentage\":19.4281608109},{\"Entity\":\"Mexico\",\"Year\":2011,\"renewable_percentage\":18.0916357408},{\"Entity\":\"Mexico\",\"Year\":2012,\"renewable_percentage\":16.5759438104},{\"Entity\":\"Mexico\",\"Year\":2013,\"renewable_percentage\":15.5492898914},{\"Entity\":\"Mexico\",\"Year\":2014,\"renewable_percentage\":19.8008201523},{\"Entity\":\"Mexico\",\"Year\":2015,\"renewable_percentage\":17.5976903451},{\"Entity\":\"Mexico\",\"Year\":2016,\"renewable_percentage\":17.4806943436},{\"Entity\":\"Mexico\",\"Year\":2017,\"renewable_percentage\":18.0759526428},{\"Entity\":\"Mexico\",\"Year\":2018,\"renewable_percentage\":17.703752786},{\"Entity\":\"Mexico\",\"Year\":2019,\"renewable_percentage\":18.5487927565},{\"Entity\":\"Mexico\",\"Year\":2020,\"renewable_percentage\":21.2552224134},{\"Entity\":\"Poland\",\"Year\":2000,\"renewable_percentage\":1.6273222517},{\"Entity\":\"Poland\",\"Year\":2001,\"renewable_percentage\":1.934316727},{\"Entity\":\"Poland\",\"Year\":2002,\"renewable_percentage\":1.9439960699},{\"Entity\":\"Poland\",\"Year\":2003,\"renewable_percentage\":1.4999000067},{\"Entity\":\"Poland\",\"Year\":2004,\"renewable_percentage\":2.1016681991},{\"Entity\":\"Poland\",\"Year\":2005,\"renewable_percentage\":2.4830699774},{\"Entity\":\"Poland\",\"Year\":2006,\"renewable_percentage\":2.673730134},{\"Entity\":\"Poland\",\"Year\":2007,\"renewable_percentage\":3.4256513785},{\"Entity\":\"Poland\",\"Year\":2008,\"renewable_percentage\":4.2744438696},{\"Entity\":\"Poland\",\"Year\":2009,\"renewable_percentage\":5.7515388179},{\"Entity\":\"Poland\",\"Year\":2010,\"renewable_percentage\":6.9299363057},{\"Entity\":\"Poland\",\"Year\":2011,\"renewable_percentage\":8.0547205693},{\"Entity\":\"Poland\",\"Year\":2012,\"renewable_percentage\":10.4436057663},{\"Entity\":\"Poland\",\"Year\":2013,\"renewable_percentage\":10.4081508145},{\"Entity\":\"Poland\",\"Year\":2014,\"renewable_percentage\":12.5331481248},{\"Entity\":\"Poland\",\"Year\":2015,\"renewable_percentage\":13.8151485631},{\"Entity\":\"Poland\",\"Year\":2016,\"renewable_percentage\":13.7335179722},{\"Entity\":\"Poland\",\"Year\":2017,\"renewable_percentage\":14.1999646913},{\"Entity\":\"Poland\",\"Year\":2018,\"renewable_percentage\":12.7559148032},{\"Entity\":\"Poland\",\"Year\":2019,\"renewable_percentage\":15.6157998037},{\"Entity\":\"Poland\",\"Year\":2020,\"renewable_percentage\":17.9648720886},{\"Entity\":\"Saudi Arabia\",\"Year\":2000,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2001,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2002,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2003,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2004,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2005,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2006,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2007,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2008,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2009,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2010,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2011,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2012,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2013,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2014,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2015,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2016,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2017,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2018,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2019,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2020,\"renewable_percentage\":null},{\"Entity\":\"South Africa\",\"Year\":2000,\"renewable_percentage\":0.9110805721},{\"Entity\":\"South Africa\",\"Year\":2001,\"renewable_percentage\":1.2516536074},{\"Entity\":\"South Africa\",\"Year\":2002,\"renewable_percentage\":1.3802249619},{\"Entity\":\"South Africa\",\"Year\":2003,\"renewable_percentage\":0.545271261},{\"Entity\":\"South Africa\",\"Year\":2004,\"renewable_percentage\":0.5827199439},{\"Entity\":\"South Africa\",\"Year\":2005,\"renewable_percentage\":0.763458686},{\"Entity\":\"South Africa\",\"Year\":2006,\"renewable_percentage\":1.3863060017},{\"Entity\":\"South Africa\",\"Year\":2007,\"renewable_percentage\":0.5267209594},{\"Entity\":\"South Africa\",\"Year\":2008,\"renewable_percentage\":0.6895692269},{\"Entity\":\"South Africa\",\"Year\":2009,\"renewable_percentage\":0.8031088083},{\"Entity\":\"South Africa\",\"Year\":2010,\"renewable_percentage\":1.0330068318},{\"Entity\":\"South Africa\",\"Year\":2011,\"renewable_percentage\":1.0184465622},{\"Entity\":\"South Africa\",\"Year\":2012,\"renewable_percentage\":0.6890826069},{\"Entity\":\"South Africa\",\"Year\":2013,\"renewable_percentage\":0.6792168043},{\"Entity\":\"South Africa\",\"Year\":2014,\"renewable_percentage\":1.4288129861},{\"Entity\":\"South Africa\",\"Year\":2015,\"renewable_percentage\":2.6256790549},{\"Entity\":\"South Africa\",\"Year\":2016,\"renewable_percentage\":3.2586126531},{\"Entity\":\"South Africa\",\"Year\":2017,\"renewable_percentage\":4.2202606137},{\"Entity\":\"South Africa\",\"Year\":2018,\"renewable_percentage\":5.1554655529},{\"Entity\":\"South Africa\",\"Year\":2019,\"renewable_percentage\":5.3589699864},{\"Entity\":\"South Africa\",\"Year\":2020,\"renewable_percentage\":5.780581212},{\"Entity\":\"Spain\",\"Year\":2000,\"renewable_percentage\":15.6119862394},{\"Entity\":\"Spain\",\"Year\":2001,\"renewable_percentage\":21.1524434719},{\"Entity\":\"Spain\",\"Year\":2002,\"renewable_percentage\":13.8260180901},{\"Entity\":\"Spain\",\"Year\":2003,\"renewable_percentage\":21.667314419},{\"Entity\":\"Spain\",\"Year\":2004,\"renewable_percentage\":18.3190206468},{\"Entity\":\"Spain\",\"Year\":2005,\"renewable_percentage\":14.8597342333},{\"Entity\":\"Spain\",\"Year\":2006,\"renewable_percentage\":17.6623992413},{\"Entity\":\"Spain\",\"Year\":2007,\"renewable_percentage\":19.3347262296},{\"Entity\":\"Spain\",\"Year\":2008,\"renewable_percentage\":20.0051501593},{\"Entity\":\"Spain\",\"Year\":2009,\"renewable_percentage\":25.4107639008},{\"Entity\":\"Spain\",\"Year\":2010,\"renewable_percentage\":32.7922186819},{\"Entity\":\"Spain\",\"Year\":2011,\"renewable_percentage\":30.0408415417},{\"Entity\":\"Spain\",\"Year\":2012,\"renewable_percentage\":29.6047928652},{\"Entity\":\"Spain\",\"Year\":2013,\"renewable_percentage\":39.5850357054},{\"Entity\":\"Spain\",\"Year\":2014,\"renewable_percentage\":40.1032952644},{\"Entity\":\"Spain\",\"Year\":2015,\"renewable_percentage\":34.9899091826},{\"Entity\":\"Spain\",\"Year\":2016,\"renewable_percentage\":38.5818061138},{\"Entity\":\"Spain\",\"Year\":2017,\"renewable_percentage\":32.220593624},{\"Entity\":\"Spain\",\"Year\":2018,\"renewable_percentage\":38.2080329557},{\"Entity\":\"Spain\",\"Year\":2019,\"renewable_percentage\":37.280815091},{\"Entity\":\"Spain\",\"Year\":2020,\"renewable_percentage\":43.8108805298},{\"Entity\":\"Thailand\",\"Year\":2000,\"renewable_percentage\":7.1261029822},{\"Entity\":\"Thailand\",\"Year\":2001,\"renewable_percentage\":7.061527212},{\"Entity\":\"Thailand\",\"Year\":2002,\"renewable_percentage\":7.9444772593},{\"Entity\":\"Thailand\",\"Year\":2003,\"renewable_percentage\":7.6718362852},{\"Entity\":\"Thailand\",\"Year\":2004,\"renewable_percentage\":6.5163549406},{\"Entity\":\"Thailand\",\"Year\":2005,\"renewable_percentage\":6.0325203252},{\"Entity\":\"Thailand\",\"Year\":2006,\"renewable_percentage\":7.5988547551},{\"Entity\":\"Thailand\",\"Year\":2007,\"renewable_percentage\":7.7085852479},{\"Entity\":\"Thailand\",\"Year\":2008,\"renewable_percentage\":6.5625458278},{\"Entity\":\"Thailand\",\"Year\":2009,\"renewable_percentage\":6.6263303689},{\"Entity\":\"Thailand\",\"Year\":2010,\"renewable_percentage\":5.7085828343},{\"Entity\":\"Thailand\",\"Year\":2011,\"renewable_percentage\":8.039961941},{\"Entity\":\"Thailand\",\"Year\":2012,\"renewable_percentage\":8.5396118358},{\"Entity\":\"Thailand\",\"Year\":2013,\"renewable_percentage\":7.6765035487},{\"Entity\":\"Thailand\",\"Year\":2014,\"renewable_percentage\":8.395728489},{\"Entity\":\"Thailand\",\"Year\":2015,\"renewable_percentage\":7.9949619145},{\"Entity\":\"Thailand\",\"Year\":2016,\"renewable_percentage\":8.9840234023},{\"Entity\":\"Thailand\",\"Year\":2017,\"renewable_percentage\":10.9570957096},{\"Entity\":\"Thailand\",\"Year\":2018,\"renewable_percentage\":14.1900054915},{\"Entity\":\"Thailand\",\"Year\":2019,\"renewable_percentage\":14.7001731284},{\"Entity\":\"Thailand\",\"Year\":2020,\"renewable_percentage\":13.7963737796},{\"Entity\":\"Ukraine\",\"Year\":2000,\"renewable_percentage\":6.5860921352},{\"Entity\":\"Ukraine\",\"Year\":2001,\"renewable_percentage\":6.9729761009},{\"Entity\":\"Ukraine\",\"Year\":2002,\"renewable_percentage\":5.5597165409},{\"Entity\":\"Ukraine\",\"Year\":2003,\"renewable_percentage\":5.1442841287},{\"Entity\":\"Ukraine\",\"Year\":2004,\"renewable_percentage\":6.4718162839},{\"Entity\":\"Ukraine\",\"Year\":2005,\"renewable_percentage\":6.6698940347},{\"Entity\":\"Ukraine\",\"Year\":2006,\"renewable_percentage\":6.68633235},{\"Entity\":\"Ukraine\",\"Year\":2007,\"renewable_percentage\":5.3380238605},{\"Entity\":\"Ukraine\",\"Year\":2008,\"renewable_percentage\":6.1377090041},{\"Entity\":\"Ukraine\",\"Year\":2009,\"renewable_percentage\":6.980762585},{\"Entity\":\"Ukraine\",\"Year\":2010,\"renewable_percentage\":7.0914098083},{\"Entity\":\"Ukraine\",\"Year\":2011,\"renewable_percentage\":5.7450628366},{\"Entity\":\"Ukraine\",\"Year\":2012,\"renewable_percentage\":5.6614236741},{\"Entity\":\"Ukraine\",\"Year\":2013,\"renewable_percentage\":7.8003200661},{\"Entity\":\"Ukraine\",\"Year\":2014,\"renewable_percentage\":5.5885262117},{\"Entity\":\"Ukraine\",\"Year\":2015,\"renewable_percentage\":4.3924771096},{\"Entity\":\"Ukraine\",\"Year\":2016,\"renewable_percentage\":5.6797249171},{\"Entity\":\"Ukraine\",\"Year\":2017,\"renewable_percentage\":7.0457194664},{\"Entity\":\"Ukraine\",\"Year\":2018,\"renewable_percentage\":8.228528092},{\"Entity\":\"Ukraine\",\"Year\":2019,\"renewable_percentage\":7.7754487096},{\"Entity\":\"Ukraine\",\"Year\":2020,\"renewable_percentage\":11.8440577364},{\"Entity\":\"United Kingdom\",\"Year\":2000,\"renewable_percentage\":2.6657406913},{\"Entity\":\"United Kingdom\",\"Year\":2001,\"renewable_percentage\":2.5001961451},{\"Entity\":\"United Kingdom\",\"Year\":2002,\"renewable_percentage\":2.8939157566},{\"Entity\":\"United Kingdom\",\"Year\":2003,\"renewable_percentage\":2.6854802003},{\"Entity\":\"United Kingdom\",\"Year\":2004,\"renewable_percentage\":3.6136880575},{\"Entity\":\"United Kingdom\",\"Year\":2005,\"renewable_percentage\":4.2815234434},{\"Entity\":\"United Kingdom\",\"Year\":2006,\"renewable_percentage\":4.6029890199},{\"Entity\":\"United Kingdom\",\"Year\":2007,\"renewable_percentage\":5.0104331009},{\"Entity\":\"United Kingdom\",\"Year\":2008,\"renewable_percentage\":5.6776842324},{\"Entity\":\"United Kingdom\",\"Year\":2009,\"renewable_percentage\":6.7679854187},{\"Entity\":\"United Kingdom\",\"Year\":2010,\"renewable_percentage\":6.9092924441},{\"Entity\":\"United Kingdom\",\"Year\":2011,\"renewable_percentage\":9.6422505889},{\"Entity\":\"United Kingdom\",\"Year\":2012,\"renewable_percentage\":11.4273047189},{\"Entity\":\"United Kingdom\",\"Year\":2013,\"renewable_percentage\":14.9727052732},{\"Entity\":\"United Kingdom\",\"Year\":2014,\"renewable_percentage\":19.2476358104},{\"Entity\":\"United Kingdom\",\"Year\":2015,\"renewable_percentage\":24.6227709191},{\"Entity\":\"United Kingdom\",\"Year\":2016,\"renewable_percentage\":24.6788390627},{\"Entity\":\"United Kingdom\",\"Year\":2017,\"renewable_percentage\":29.4986571173},{\"Entity\":\"United Kingdom\",\"Year\":2018,\"renewable_percentage\":33.2919818457},{\"Entity\":\"United Kingdom\",\"Year\":2019,\"renewable_percentage\":37.4568630499},{\"Entity\":\"United Kingdom\",\"Year\":2020,\"renewable_percentage\":42.8603962651},{\"Entity\":\"United States\",\"Year\":2000,\"renewable_percentage\":9.2298992662},{\"Entity\":\"United States\",\"Year\":2001,\"renewable_percentage\":7.5132056541},{\"Entity\":\"United States\",\"Year\":2002,\"renewable_percentage\":8.749216358},{\"Entity\":\"United States\",\"Year\":2003,\"renewable_percentage\":9.0252110397},{\"Entity\":\"United States\",\"Year\":2004,\"renewable_percentage\":8.7334100887},{\"Entity\":\"United States\",\"Year\":2005,\"renewable_percentage\":8.7494640631},{\"Entity\":\"United States\",\"Year\":2006,\"renewable_percentage\":9.4184742052},{\"Entity\":\"United States\",\"Year\":2007,\"renewable_percentage\":8.3984096829},{\"Entity\":\"United States\",\"Year\":2008,\"renewable_percentage\":9.180943292},{\"Entity\":\"United States\",\"Year\":2009,\"renewable_percentage\":10.547689996},{\"Entity\":\"United States\",\"Year\":2010,\"renewable_percentage\":10.3180892283},{\"Entity\":\"United States\",\"Year\":2011,\"renewable_percentage\":12.4665249812},{\"Entity\":\"United States\",\"Year\":2012,\"renewable_percentage\":12.1841179804},{\"Entity\":\"United States\",\"Year\":2013,\"renewable_percentage\":12.8311154179},{\"Entity\":\"United States\",\"Year\":2014,\"renewable_percentage\":13.3503092033},{\"Entity\":\"United States\",\"Year\":2015,\"renewable_percentage\":13.6261352256},{\"Entity\":\"United States\",\"Year\":2016,\"renewable_percentage\":15.2880936304},{\"Entity\":\"United States\",\"Year\":2017,\"renewable_percentage\":17.4515276472},{\"Entity\":\"United States\",\"Year\":2018,\"renewable_percentage\":17.4499886946},{\"Entity\":\"United States\",\"Year\":2019,\"renewable_percentage\":18.2946243489},{\"Entity\":\"United States\",\"Year\":2020,\"renewable_percentage\":20.3156921037}],\"metadata\":{\"Entity\":{\"type\":\"string\",\"semanticType\":\"Location\"},\"Year\":{\"type\":\"number\",\"semanticType\":\"Year\"},\"renewable_percentage\":{\"type\":\"number\",\"semanticType\":\"Percentage\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Calculate total energy for each row\\n    df_energy['total_energy'] = (\\n        df_energy['Electricity from fossil fuels (TWh)'] + \\n        df_energy['Electricity from nuclear (TWh)'] + \\n        df_energy['Electricity from renewables (TWh)']\\n    )\\n    \\n    # Calculate renewable percentage\\n    df_energy['renewable_percentage'] = (\\n        df_energy['Electricity from renewables (TWh)'] / df_energy['total_energy'] * 100\\n    )\\n    \\n    # Handle division by zero cases\\n    df_energy['renewable_percentage'] = df_energy['renewable_percentage'].replace([np.inf, -np.inf], np.nan)\\n    \\n    # Select only the required columns\\n    transformed_df = df_energy[['Year', 'Entity', 'renewable_percentage']].copy()\\n    \\n    return transformed_df\\n\",\"source\":[\"global-energy-20-small.csv\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 158029.9988, 190729.9957, 209229.9957, ..., 6993180.176, 9861099.609, 9874660.156, 10096009.77\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., 90.14, 91.79, 92.54, 804.95\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\n{\\n    \\\"instruction\\\": \\\"\\\",\\n    \\\"chart_type\\\": \\\"Line Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"energy\\\",\\n        \\\"color\\\": \\\"Entity\\\",\\n        \\\"column\\\": \\\"source\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Transform the data into a long format where different energy sources (fossil fuels, nuclear, renewables) are unpivoted into separate rows. Each row should contain the year, entity (country), energy source type, and the corresponding energy value in TWh. This will enable visualization of energy generation trends over time by source and country.\\\",\\n    \\\"display_instruction\\\": \\\"Show **energy generation** trends by **source** and **Entity** over **Year**\\\",\\n    \\\"output_fields\\\": [\\\"Year\\\", \\\"Entity\\\", \\\"source\\\", \\\"energy\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"energy\\\",\\n        \\\"color\\\": \\\"Entity\\\",\\n        \\\"column\\\": \\\"source\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to visualize energy data across different sources with a line chart faceted by source. The original data has energy sources in separate columns (fossil fuels, nuclear, renewables), so we need to unpivot these columns into a long format with 'source' and 'energy' fields. The chart_encodings provided by the user are appropriate for this visualization goal, using faceting (column) to separate different energy sources.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Unpivot the energy source columns into long format\\n    transformed_df = pd.melt(\\n        df_energy,\\n        id_vars=['Year', 'Entity'],\\n        value_vars=[\\n            'Electricity from fossil fuels (TWh)',\\n            'Electricity from nuclear (TWh)',\\n            'Electricity from renewables (TWh)'\\n        ],\\n        var_name='source',\\n        value_name='energy'\\n    )\\n    \\n    # Clean up the source names to be more readable\\n    transformed_df['source'] = transformed_df['source'].str.replace('Electricity from ', '').str.replace(' (TWh)', '')\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n      Entity  Year  energy        source\\n0  Australia  2000  181.05  fossil fuels\\n1  Australia  2001  194.33  fossil fuels\\n2  Australia  2002  197.29  fossil fuels\\n3  Australia  2003  195.13  fossil fuels\\n4  Australia  2004  203.66  fossil fuels\\n5  Australia  2005  195.95  fossil fuels\\n6  Australia  2006  198.72  fossil fuels\\n7  Australia  2007  208.59  fossil fuels\\n8  Australia  2008  211.06  fossil fuels\\n9  Australia  2009  216.42  fossil fuels\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"show renewable percentage for each country\\\",\\n    \\\"chart_type\\\": \\\"Line Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"energy\\\",\\n        \\\"color\\\": \\\"Entity\\\",\\n        \\\"column\\\": \\\"source\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Calculate the renewable energy percentage for each country and year. The renewable percentage is computed as the ratio of renewable energy to total energy (sum of fossil fuels, nuclear, and renewables) multiplied by 100. The output should contain year, entity (country), and the renewable percentage value.\\\",\\n    \\\"display_instruction\\\": \\\"Show **renewable percentage** for each **Entity** over **Year**\\\",\\n    \\\"output_fields\\\": [\\\"Year\\\", \\\"Entity\\\", \\\"renewable_percentage\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"renewable_percentage\\\",\\n        \\\"color\\\": \\\"Entity\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to see renewable percentage trends, which requires calculating the proportion of renewable energy relative to total energy generation. This is a single metric per country per year, so we don't need the 'column' faceting by source anymore. The chart_encodings are updated to reflect that we're now showing a percentage metric rather than absolute energy values by source.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Calculate total energy for each row\\n    df_energy['total_energy'] = (\\n        df_energy['Electricity from fossil fuels (TWh)'] + \\n        df_energy['Electricity from nuclear (TWh)'] + \\n        df_energy['Electricity from renewables (TWh)']\\n    )\\n    \\n    # Calculate renewable percentage\\n    df_energy['renewable_percentage'] = (\\n        df_energy['Electricity from renewables (TWh)'] / df_energy['total_energy'] * 100\\n    )\\n    \\n    # Handle division by zero cases\\n    df_energy['renewable_percentage'] = df_energy['renewable_percentage'].replace([np.inf, -np.inf], np.nan)\\n    \\n    # Select only the required columns\\n    transformed_df = df_energy[['Year', 'Entity', 'renewable_percentage']].copy()\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"table-82\",\"sourceTableIds\":[\"global-energy-20-small.csv\"],\"instruction\":\"show renewable percentage for each country\",\"displayInstruction\":\"Show **renewable percentage** for each **Entity** over **Year**\",\"chart\":{\"id\":\"chart-1760738416626\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"y\":{\"fieldID\":\"concept-1760738385163\"},\"color\":{\"fieldID\":\"original--global-energy-20-small.csv--Entity\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"fieldID\":\"concept-1760738389404\",\"sortBy\":\"[\\\"fossil fuels\\\",\\\"nuclear\\\",\\\"renewables\\\"]\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-82\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-45\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"The code transforms global energy data to analyze renewable energy adoption:\\n\\n- Calculates **total_energy** by summing electricity generation from three sources: **fossil fuels**, **nuclear**, and **renewables** (all measured in TWh)\\n- Computes **renewable_percentage** by dividing **Electricity from renewables (TWh)** by **total_energy** and multiplying by **100**\\n- Handles edge cases by replacing infinite values (from division by zero) with **NaN**\\n- Filters the dataset to retain only **Year**, **Entity** (country), and **renewable_percentage** columns\",\"concepts\":[{\"explanation\":\"The proportion of a country's total electricity generation that comes from renewable sources, expressed as a percentage. Calculated as: \\\\( \\\\frac{\\\\text{Electricity from renewables}}{\\\\text{Total electricity generation}} \\\\times 100 \\\\). This metric indicates the degree of renewable energy adoption in each country's energy mix.\",\"field\":\"renewable_percentage\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small_csv)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 117440.0, 146139.9994, 158029.9988, ..., 5738290.039, 9861099.609, 10502929.69, 10707219.73\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., nan, nan, nan, nan\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Calculate total energy for each row\\n    df_energy['total_energy'] = (\\n        df_energy['Electricity from fossil fuels (TWh)'] + \\n        df_energy['Electricity from nuclear (TWh)'] + \\n        df_energy['Electricity from renewables (TWh)']\\n    )\\n    \\n    # Calculate renewable percentage\\n    df_energy['renewable_percentage'] = (\\n        df_energy['Electricity from renewables (TWh)'] / df_energy['total_energy'] * 100\\n    )\\n    \\n    # Handle division by zero cases\\n    df_energy['renewable_percentage'] = df_energy['renewable_percentage'].replace([np.inf, -np.inf], np.nan)\\n    \\n    # Select only the required columns\\n    transformed_df = df_energy[['Year', 'Entity', 'renewable_percentage']].copy()\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThe code transforms global energy data to analyze renewable energy adoption:\\n\\n- Calculates **total_energy** by summing electricity generation from three sources: **fossil fuels**, **nuclear**, and **renewables** (all measured in TWh)\\n- Computes **renewable_percentage** by dividing **Electricity from renewables (TWh)** by **total_energy** and multiplying by **100**\\n- Handles edge cases by replacing infinite values (from division by zero) with **NaN**\\n- Filters the dataset to retain only **Year**, **Entity** (country), and **renewable_percentage** columns\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"renewable_percentage\\\",\\n        \\\"explanation\\\": \\\"The proportion of a country's total electricity generation that comes from renewable sources, expressed as a percentage. Calculated as: \\\\\\\\( \\\\\\\\frac{\\\\\\\\text{Electricity from renewables}}{\\\\\\\\text{Total electricity generation}} \\\\\\\\times 100 \\\\\\\\). This metric indicates the degree of renewable energy adoption in each country's energy mix.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-78\",\"displayId\":\"renewable-energy-rank\",\"names\":[\"Entity\",\"Year\",\"rank\",\"renewable_percentage\"],\"rows\":[{\"Entity\":\"Australia\",\"Year\":2000,\"rank\":11,\"renewable_percentage\":8.6344368187},{\"Entity\":\"Australia\",\"Year\":2001,\"rank\":10,\"renewable_percentage\":8.2180135078},{\"Entity\":\"Australia\",\"Year\":2002,\"rank\":11,\"renewable_percentage\":8.0833022736},{\"Entity\":\"Australia\",\"Year\":2003,\"rank\":11,\"renewable_percentage\":8.6598324205},{\"Entity\":\"Australia\",\"Year\":2004,\"rank\":12,\"renewable_percentage\":8.7013045232},{\"Entity\":\"Australia\",\"Year\":2005,\"rank\":11,\"renewable_percentage\":9.1562355123},{\"Entity\":\"Australia\",\"Year\":2006,\"rank\":11,\"renewable_percentage\":9.6357600837},{\"Entity\":\"Australia\",\"Year\":2007,\"rank\":11,\"renewable_percentage\":9.1190310213},{\"Entity\":\"Australia\",\"Year\":2008,\"rank\":12,\"renewable_percentage\":8.0548900022},{\"Entity\":\"Australia\",\"Year\":2009,\"rank\":12,\"renewable_percentage\":7.8043793133},{\"Entity\":\"Australia\",\"Year\":2010,\"rank\":12,\"renewable_percentage\":9.0442152121},{\"Entity\":\"Australia\",\"Year\":2011,\"rank\":11,\"renewable_percentage\":11.3454273735},{\"Entity\":\"Australia\",\"Year\":2012,\"rank\":12,\"renewable_percentage\":11.4105750279},{\"Entity\":\"Australia\",\"Year\":2013,\"rank\":11,\"renewable_percentage\":14.8708583355},{\"Entity\":\"Australia\",\"Year\":2014,\"rank\":11,\"renewable_percentage\":14.9621290509},{\"Entity\":\"Australia\",\"Year\":2015,\"rank\":12,\"renewable_percentage\":14.3476000693},{\"Entity\":\"Australia\",\"Year\":2016,\"rank\":11,\"renewable_percentage\":15.6093794449},{\"Entity\":\"Australia\",\"Year\":2017,\"rank\":12,\"renewable_percentage\":16.3138729943},{\"Entity\":\"Australia\",\"Year\":2018,\"rank\":12,\"renewable_percentage\":17.145938174},{\"Entity\":\"Australia\",\"Year\":2019,\"rank\":8,\"renewable_percentage\":21.3759705435},{\"Entity\":\"Australia\",\"Year\":2020,\"rank\":8,\"renewable_percentage\":25.5031684668},{\"Entity\":\"Brazil\",\"Year\":2000,\"rank\":1,\"renewable_percentage\":90.1307723743},{\"Entity\":\"Brazil\",\"Year\":2001,\"rank\":1,\"renewable_percentage\":84.6953615744},{\"Entity\":\"Brazil\",\"Year\":2002,\"rank\":1,\"renewable_percentage\":86.0883364189},{\"Entity\":\"Brazil\",\"Year\":2003,\"rank\":1,\"renewable_percentage\":87.4561159097},{\"Entity\":\"Brazil\",\"Year\":2004,\"rank\":1,\"renewable_percentage\":86.4260041451},{\"Entity\":\"Brazil\",\"Year\":2005,\"rank\":1,\"renewable_percentage\":87.6781562721},{\"Entity\":\"Brazil\",\"Year\":2006,\"rank\":1,\"renewable_percentage\":87.2842473236},{\"Entity\":\"Brazil\",\"Year\":2007,\"rank\":1,\"renewable_percentage\":88.7252098726},{\"Entity\":\"Brazil\",\"Year\":2008,\"rank\":1,\"renewable_percentage\":84.8072313004},{\"Entity\":\"Brazil\",\"Year\":2009,\"rank\":1,\"renewable_percentage\":89.4172280725},{\"Entity\":\"Brazil\",\"Year\":2010,\"rank\":1,\"renewable_percentage\":85.3576882415},{\"Entity\":\"Brazil\",\"Year\":2011,\"rank\":1,\"renewable_percentage\":87.6618820986},{\"Entity\":\"Brazil\",\"Year\":2012,\"rank\":1,\"renewable_percentage\":83.1164558813},{\"Entity\":\"Brazil\",\"Year\":2013,\"rank\":1,\"renewable_percentage\":77.5240022006},{\"Entity\":\"Brazil\",\"Year\":2014,\"rank\":1,\"renewable_percentage\":74.0418657409},{\"Entity\":\"Brazil\",\"Year\":2015,\"rank\":1,\"renewable_percentage\":75.0231817625},{\"Entity\":\"Brazil\",\"Year\":2016,\"rank\":1,\"renewable_percentage\":81.0938046902},{\"Entity\":\"Brazil\",\"Year\":2017,\"rank\":1,\"renewable_percentage\":79.9091472228},{\"Entity\":\"Brazil\",\"Year\":2018,\"rank\":1,\"renewable_percentage\":82.9198505403},{\"Entity\":\"Brazil\",\"Year\":2019,\"rank\":1,\"renewable_percentage\":82.8548799017},{\"Entity\":\"Brazil\",\"Year\":2020,\"rank\":1,\"renewable_percentage\":84.6411771408},{\"Entity\":\"Canada\",\"Year\":2000,\"rank\":2,\"renewable_percentage\":61.8095917882},{\"Entity\":\"Canada\",\"Year\":2001,\"rank\":2,\"renewable_percentage\":59.3287558747},{\"Entity\":\"Canada\",\"Year\":2002,\"rank\":2,\"renewable_percentage\":61.1477403113},{\"Entity\":\"Canada\",\"Year\":2003,\"rank\":2,\"renewable_percentage\":60.0789685174},{\"Entity\":\"Canada\",\"Year\":2004,\"rank\":2,\"renewable_percentage\":59.6967771845},{\"Entity\":\"Canada\",\"Year\":2005,\"rank\":2,\"renewable_percentage\":60.8208155391},{\"Entity\":\"Canada\",\"Year\":2006,\"rank\":2,\"renewable_percentage\":60.8271602855},{\"Entity\":\"Canada\",\"Year\":2007,\"rank\":2,\"renewable_percentage\":61.2460642446},{\"Entity\":\"Canada\",\"Year\":2008,\"rank\":2,\"renewable_percentage\":62.6520720838},{\"Entity\":\"Canada\",\"Year\":2009,\"rank\":2,\"renewable_percentage\":63.8919227732},{\"Entity\":\"Canada\",\"Year\":2010,\"rank\":2,\"renewable_percentage\":62.9421470558},{\"Entity\":\"Canada\",\"Year\":2011,\"rank\":2,\"renewable_percentage\":64.0922915917},{\"Entity\":\"Canada\",\"Year\":2012,\"rank\":2,\"renewable_percentage\":65.098730952},{\"Entity\":\"Canada\",\"Year\":2013,\"rank\":2,\"renewable_percentage\":65.4320794066},{\"Entity\":\"Canada\",\"Year\":2014,\"rank\":2,\"renewable_percentage\":64.791145907},{\"Entity\":\"Canada\",\"Year\":2015,\"rank\":2,\"renewable_percentage\":65.2946239925},{\"Entity\":\"Canada\",\"Year\":2016,\"rank\":2,\"renewable_percentage\":66.1890584295},{\"Entity\":\"Canada\",\"Year\":2017,\"rank\":2,\"renewable_percentage\":67.5399410579},{\"Entity\":\"Canada\",\"Year\":2018,\"rank\":2,\"renewable_percentage\":67.3685700357},{\"Entity\":\"Canada\",\"Year\":2019,\"rank\":2,\"renewable_percentage\":67.1741623137},{\"Entity\":\"Canada\",\"Year\":2020,\"rank\":2,\"renewable_percentage\":68.7796436354},{\"Entity\":\"China\",\"Year\":2000,\"rank\":5,\"renewable_percentage\":16.639126586},{\"Entity\":\"China\",\"Year\":2001,\"rank\":6,\"renewable_percentage\":18.9581237042},{\"Entity\":\"China\",\"Year\":2002,\"rank\":3,\"renewable_percentage\":17.6185006046},{\"Entity\":\"China\",\"Year\":2003,\"rank\":6,\"renewable_percentage\":15.0362717081},{\"Entity\":\"China\",\"Year\":2004,\"rank\":6,\"renewable_percentage\":16.2224108273},{\"Entity\":\"China\",\"Year\":2005,\"rank\":5,\"renewable_percentage\":16.1731179957},{\"Entity\":\"China\",\"Year\":2006,\"rank\":7,\"renewable_percentage\":15.5884036124},{\"Entity\":\"China\",\"Year\":2007,\"rank\":7,\"renewable_percentage\":15.2583847828},{\"Entity\":\"China\",\"Year\":2008,\"rank\":5,\"renewable_percentage\":19.0253335469},{\"Entity\":\"China\",\"Year\":2009,\"rank\":5,\"renewable_percentage\":17.8857170547},{\"Entity\":\"China\",\"Year\":2010,\"rank\":6,\"renewable_percentage\":18.7800759915},{\"Entity\":\"China\",\"Year\":2011,\"rank\":7,\"renewable_percentage\":16.8902341543},{\"Entity\":\"China\",\"Year\":2012,\"rank\":6,\"renewable_percentage\":20.122965176},{\"Entity\":\"China\",\"Year\":2013,\"rank\":6,\"renewable_percentage\":20.2152481955},{\"Entity\":\"China\",\"Year\":2014,\"rank\":6,\"renewable_percentage\":22.3502204285},{\"Entity\":\"China\",\"Year\":2015,\"rank\":7,\"renewable_percentage\":24.079270189},{\"Entity\":\"China\",\"Year\":2016,\"rank\":6,\"renewable_percentage\":25.0007798429},{\"Entity\":\"China\",\"Year\":2017,\"rank\":7,\"renewable_percentage\":25.419242299},{\"Entity\":\"China\",\"Year\":2018,\"rank\":7,\"renewable_percentage\":25.7747942589},{\"Entity\":\"China\",\"Year\":2019,\"rank\":7,\"renewable_percentage\":26.9995671106},{\"Entity\":\"China\",\"Year\":2020,\"rank\":7,\"renewable_percentage\":28.2464606924},{\"Entity\":\"France\",\"Year\":2000,\"rank\":8,\"renewable_percentage\":12.7117691154},{\"Entity\":\"France\",\"Year\":2001,\"rank\":7,\"renewable_percentage\":13.9961372206},{\"Entity\":\"France\",\"Year\":2002,\"rank\":8,\"renewable_percentage\":11.3544157067},{\"Entity\":\"France\",\"Year\":2003,\"rank\":9,\"renewable_percentage\":10.9783540506},{\"Entity\":\"France\",\"Year\":2004,\"rank\":9,\"renewable_percentage\":11.0051305559},{\"Entity\":\"France\",\"Year\":2005,\"rank\":10,\"renewable_percentage\":9.6479837153},{\"Entity\":\"France\",\"Year\":2006,\"rank\":10,\"renewable_percentage\":10.7235915493},{\"Entity\":\"France\",\"Year\":2007,\"rank\":9,\"renewable_percentage\":11.4370075239},{\"Entity\":\"France\",\"Year\":2008,\"rank\":9,\"renewable_percentage\":12.7487441615},{\"Entity\":\"France\",\"Year\":2009,\"rank\":9,\"renewable_percentage\":12.8776856068},{\"Entity\":\"France\",\"Year\":2010,\"rank\":9,\"renewable_percentage\":13.6240072491},{\"Entity\":\"France\",\"Year\":2011,\"rank\":10,\"renewable_percentage\":11.63553049},{\"Entity\":\"France\",\"Year\":2012,\"rank\":9,\"renewable_percentage\":15.0331522889},{\"Entity\":\"France\",\"Year\":2013,\"rank\":7,\"renewable_percentage\":17.2469424928},{\"Entity\":\"France\",\"Year\":2014,\"rank\":9,\"renewable_percentage\":16.6074992494},{\"Entity\":\"France\",\"Year\":2015,\"rank\":9,\"renewable_percentage\":16.002230276},{\"Entity\":\"France\",\"Year\":2016,\"rank\":8,\"renewable_percentage\":17.7212924013},{\"Entity\":\"France\",\"Year\":2017,\"rank\":11,\"renewable_percentage\":16.6576751547},{\"Entity\":\"France\",\"Year\":2018,\"rank\":8,\"renewable_percentage\":19.7315179827},{\"Entity\":\"France\",\"Year\":2019,\"rank\":9,\"renewable_percentage\":20.0116665488},{\"Entity\":\"France\",\"Year\":2020,\"rank\":9,\"renewable_percentage\":23.7610241821},{\"Entity\":\"Germany\",\"Year\":2000,\"rank\":14,\"renewable_percentage\":6.1977983575},{\"Entity\":\"Germany\",\"Year\":2001,\"rank\":14,\"renewable_percentage\":6.5132585197},{\"Entity\":\"Germany\",\"Year\":2002,\"rank\":13,\"renewable_percentage\":7.6431369854},{\"Entity\":\"Germany\",\"Year\":2003,\"rank\":12,\"renewable_percentage\":7.7455438643},{\"Entity\":\"Germany\",\"Year\":2004,\"rank\":10,\"renewable_percentage\":9.4989185292},{\"Entity\":\"Germany\",\"Year\":2005,\"rank\":8,\"renewable_percentage\":10.3356645637},{\"Entity\":\"Germany\",\"Year\":2006,\"rank\":8,\"renewable_percentage\":11.5129959829},{\"Entity\":\"Germany\",\"Year\":2007,\"rank\":8,\"renewable_percentage\":14.135471525},{\"Entity\":\"Germany\",\"Year\":2008,\"rank\":8,\"renewable_percentage\":14.8894504106},{\"Entity\":\"Germany\",\"Year\":2009,\"rank\":7,\"renewable_percentage\":16.2902842395},{\"Entity\":\"Germany\",\"Year\":2010,\"rank\":7,\"renewable_percentage\":16.8384989754},{\"Entity\":\"Germany\",\"Year\":2011,\"rank\":5,\"renewable_percentage\":20.4967199299},{\"Entity\":\"Germany\",\"Year\":2012,\"rank\":5,\"renewable_percentage\":23.056464482},{\"Entity\":\"Germany\",\"Year\":2013,\"rank\":5,\"renewable_percentage\":24.1368929731},{\"Entity\":\"Germany\",\"Year\":2014,\"rank\":5,\"renewable_percentage\":26.2182434067},{\"Entity\":\"Germany\",\"Year\":2015,\"rank\":5,\"renewable_percentage\":29.4721888318},{\"Entity\":\"Germany\",\"Year\":2016,\"rank\":5,\"renewable_percentage\":29.4990435013},{\"Entity\":\"Germany\",\"Year\":2017,\"rank\":4,\"renewable_percentage\":33.4855497593},{\"Entity\":\"Germany\",\"Year\":2018,\"rank\":5,\"renewable_percentage\":35.0976735365},{\"Entity\":\"Germany\",\"Year\":2019,\"rank\":3,\"renewable_percentage\":40.0890757144},{\"Entity\":\"Germany\",\"Year\":2020,\"rank\":3,\"renewable_percentage\":44.3324048937},{\"Entity\":\"India\",\"Year\":2000,\"rank\":7,\"renewable_percentage\":14.0481982534},{\"Entity\":\"India\",\"Year\":2001,\"rank\":8,\"renewable_percentage\":12.9997099422},{\"Entity\":\"India\",\"Year\":2002,\"rank\":7,\"renewable_percentage\":11.938193032},{\"Entity\":\"India\",\"Year\":2003,\"rank\":8,\"renewable_percentage\":11.695109147},{\"Entity\":\"India\",\"Year\":2004,\"rank\":7,\"renewable_percentage\":15.6375300722},{\"Entity\":\"India\",\"Year\":2005,\"rank\":6,\"renewable_percentage\":15.2543575768},{\"Entity\":\"India\",\"Year\":2006,\"rank\":5,\"renewable_percentage\":17.1352578483},{\"Entity\":\"India\",\"Year\":2007,\"rank\":4,\"renewable_percentage\":17.8019742295},{\"Entity\":\"India\",\"Year\":2008,\"rank\":7,\"renewable_percentage\":16.768266921},{\"Entity\":\"India\",\"Year\":2009,\"rank\":8,\"renewable_percentage\":15.269804822},{\"Entity\":\"India\",\"Year\":2010,\"rank\":8,\"renewable_percentage\":15.2122201244},{\"Entity\":\"India\",\"Year\":2011,\"rank\":8,\"renewable_percentage\":16.7911025145},{\"Entity\":\"India\",\"Year\":2012,\"rank\":8,\"renewable_percentage\":15.1350014654},{\"Entity\":\"India\",\"Year\":2013,\"rank\":8,\"renewable_percentage\":16.3941577818},{\"Entity\":\"India\",\"Year\":2014,\"rank\":10,\"renewable_percentage\":16.0092550039},{\"Entity\":\"India\",\"Year\":2015,\"rank\":11,\"renewable_percentage\":15.3718720687},{\"Entity\":\"India\",\"Year\":2016,\"rank\":13,\"renewable_percentage\":14.8548475703},{\"Entity\":\"India\",\"Year\":2017,\"rank\":13,\"renewable_percentage\":15.9669920335},{\"Entity\":\"India\",\"Year\":2018,\"rank\":13,\"renewable_percentage\":16.6949549709},{\"Entity\":\"India\",\"Year\":2019,\"rank\":11,\"renewable_percentage\":18.6915426873},{\"Entity\":\"India\",\"Year\":2020,\"rank\":13,\"renewable_percentage\":20.2059243238},{\"Entity\":\"Indonesia\",\"Year\":2000,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2001,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2002,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2003,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2004,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2005,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2006,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2007,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2008,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2009,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2010,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2011,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2012,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2013,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2014,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2015,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2016,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2017,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2018,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2019,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Indonesia\",\"Year\":2020,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Italy\",\"Year\":2000,\"rank\":4,\"renewable_percentage\":18.900241501},{\"Entity\":\"Italy\",\"Year\":2001,\"rank\":4,\"renewable_percentage\":20.049431902},{\"Entity\":\"Italy\",\"Year\":2002,\"rank\":4,\"renewable_percentage\":17.4555571614},{\"Entity\":\"Italy\",\"Year\":2003,\"rank\":4,\"renewable_percentage\":16.4202116476},{\"Entity\":\"Italy\",\"Year\":2004,\"rank\":4,\"renewable_percentage\":18.2749380999},{\"Entity\":\"Italy\",\"Year\":2005,\"rank\":4,\"renewable_percentage\":16.3769782226},{\"Entity\":\"Italy\",\"Year\":2006,\"rank\":6,\"renewable_percentage\":16.5128639906},{\"Entity\":\"Italy\",\"Year\":2007,\"rank\":6,\"renewable_percentage\":15.5333485238},{\"Entity\":\"Italy\",\"Year\":2008,\"rank\":6,\"renewable_percentage\":18.6112},{\"Entity\":\"Italy\",\"Year\":2009,\"rank\":4,\"renewable_percentage\":24.0837332221},{\"Entity\":\"Italy\",\"Year\":2010,\"rank\":4,\"renewable_percentage\":25.8400187976},{\"Entity\":\"Italy\",\"Year\":2011,\"rank\":4,\"renewable_percentage\":27.6773203443},{\"Entity\":\"Italy\",\"Year\":2012,\"rank\":3,\"renewable_percentage\":31.1049649217},{\"Entity\":\"Italy\",\"Year\":2013,\"rank\":4,\"renewable_percentage\":39.0148744209},{\"Entity\":\"Italy\",\"Year\":2014,\"rank\":3,\"renewable_percentage\":43.4976931949},{\"Entity\":\"Italy\",\"Year\":2015,\"rank\":3,\"renewable_percentage\":38.7577860829},{\"Entity\":\"Italy\",\"Year\":2016,\"rank\":4,\"renewable_percentage\":37.6079387187},{\"Entity\":\"Italy\",\"Year\":2017,\"rank\":3,\"renewable_percentage\":35.4174479255},{\"Entity\":\"Italy\",\"Year\":2018,\"rank\":3,\"renewable_percentage\":39.8100142663},{\"Entity\":\"Italy\",\"Year\":2019,\"rank\":4,\"renewable_percentage\":39.7563068474},{\"Entity\":\"Italy\",\"Year\":2020,\"rank\":6,\"renewable_percentage\":42.0397741576},{\"Entity\":\"Japan\",\"Year\":2000,\"rank\":9,\"renewable_percentage\":10.5382436261},{\"Entity\":\"Japan\",\"Year\":2001,\"rank\":9,\"renewable_percentage\":10.447653504},{\"Entity\":\"Japan\",\"Year\":2002,\"rank\":9,\"renewable_percentage\":10.2477294843},{\"Entity\":\"Japan\",\"Year\":2003,\"rank\":7,\"renewable_percentage\":11.6993698448},{\"Entity\":\"Japan\",\"Year\":2004,\"rank\":8,\"renewable_percentage\":11.4198974767},{\"Entity\":\"Japan\",\"Year\":2005,\"rank\":9,\"renewable_percentage\":9.9068127192},{\"Entity\":\"Japan\",\"Year\":2006,\"rank\":9,\"renewable_percentage\":10.8554989442},{\"Entity\":\"Japan\",\"Year\":2007,\"rank\":10,\"renewable_percentage\":9.3897588285},{\"Entity\":\"Japan\",\"Year\":2008,\"rank\":10,\"renewable_percentage\":10.0196834738},{\"Entity\":\"Japan\",\"Year\":2009,\"rank\":11,\"renewable_percentage\":10.4667464874},{\"Entity\":\"Japan\",\"Year\":2010,\"rank\":10,\"renewable_percentage\":10.5269966826},{\"Entity\":\"Japan\",\"Year\":2011,\"rank\":12,\"renewable_percentage\":11.1272421632},{\"Entity\":\"Japan\",\"Year\":2012,\"rank\":13,\"renewable_percentage\":10.6143703421},{\"Entity\":\"Japan\",\"Year\":2013,\"rank\":13,\"renewable_percentage\":11.7965798852},{\"Entity\":\"Japan\",\"Year\":2014,\"rank\":13,\"renewable_percentage\":13.2719619718},{\"Entity\":\"Japan\",\"Year\":2015,\"rank\":10,\"renewable_percentage\":15.6586817408},{\"Entity\":\"Japan\",\"Year\":2016,\"rank\":10,\"renewable_percentage\":15.6920107068},{\"Entity\":\"Japan\",\"Year\":2017,\"rank\":10,\"renewable_percentage\":17.3559698312},{\"Entity\":\"Japan\",\"Year\":2018,\"rank\":9,\"renewable_percentage\":18.144181175},{\"Entity\":\"Japan\",\"Year\":2019,\"rank\":10,\"renewable_percentage\":19.4223288251},{\"Entity\":\"Japan\",\"Year\":2020,\"rank\":10,\"renewable_percentage\":21.324925062},{\"Entity\":\"Kazakhstan\",\"Year\":2000,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2001,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2002,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2003,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2004,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2005,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2006,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2007,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2008,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2009,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2010,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2011,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2012,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2013,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2014,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2015,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2016,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2017,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2018,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2019,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Kazakhstan\",\"Year\":2020,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Mexico\",\"Year\":2000,\"rank\":3,\"renewable_percentage\":22.9291160107},{\"Entity\":\"Mexico\",\"Year\":2001,\"rank\":5,\"renewable_percentage\":19.6649599841},{\"Entity\":\"Mexico\",\"Year\":2002,\"rank\":5,\"renewable_percentage\":17.4220963173},{\"Entity\":\"Mexico\",\"Year\":2003,\"rank\":5,\"renewable_percentage\":15.8536585366},{\"Entity\":\"Mexico\",\"Year\":2004,\"rank\":5,\"renewable_percentage\":17.3134463687},{\"Entity\":\"Mexico\",\"Year\":2005,\"rank\":3,\"renewable_percentage\":18.2780827246},{\"Entity\":\"Mexico\",\"Year\":2006,\"rank\":3,\"renewable_percentage\":18.4256091896},{\"Entity\":\"Mexico\",\"Year\":2007,\"rank\":5,\"renewable_percentage\":17.2761561168},{\"Entity\":\"Mexico\",\"Year\":2008,\"rank\":3,\"renewable_percentage\":21.5387105913},{\"Entity\":\"Mexico\",\"Year\":2009,\"rank\":6,\"renewable_percentage\":16.5369729069},{\"Entity\":\"Mexico\",\"Year\":2010,\"rank\":5,\"renewable_percentage\":19.4281608109},{\"Entity\":\"Mexico\",\"Year\":2011,\"rank\":6,\"renewable_percentage\":18.0916357408},{\"Entity\":\"Mexico\",\"Year\":2012,\"rank\":7,\"renewable_percentage\":16.5759438104},{\"Entity\":\"Mexico\",\"Year\":2013,\"rank\":9,\"renewable_percentage\":15.5492898914},{\"Entity\":\"Mexico\",\"Year\":2014,\"rank\":7,\"renewable_percentage\":19.8008201523},{\"Entity\":\"Mexico\",\"Year\":2015,\"rank\":8,\"renewable_percentage\":17.5976903451},{\"Entity\":\"Mexico\",\"Year\":2016,\"rank\":9,\"renewable_percentage\":17.4806943436},{\"Entity\":\"Mexico\",\"Year\":2017,\"rank\":8,\"renewable_percentage\":18.0759526428},{\"Entity\":\"Mexico\",\"Year\":2018,\"rank\":10,\"renewable_percentage\":17.703752786},{\"Entity\":\"Mexico\",\"Year\":2019,\"rank\":12,\"renewable_percentage\":18.5487927565},{\"Entity\":\"Mexico\",\"Year\":2020,\"rank\":11,\"renewable_percentage\":21.2552224134},{\"Entity\":\"Poland\",\"Year\":2000,\"rank\":16,\"renewable_percentage\":1.6273222517},{\"Entity\":\"Poland\",\"Year\":2001,\"rank\":16,\"renewable_percentage\":1.934316727},{\"Entity\":\"Poland\",\"Year\":2002,\"rank\":16,\"renewable_percentage\":1.9439960699},{\"Entity\":\"Poland\",\"Year\":2003,\"rank\":16,\"renewable_percentage\":1.4999000067},{\"Entity\":\"Poland\",\"Year\":2004,\"rank\":16,\"renewable_percentage\":2.1016681991},{\"Entity\":\"Poland\",\"Year\":2005,\"rank\":16,\"renewable_percentage\":2.4830699774},{\"Entity\":\"Poland\",\"Year\":2006,\"rank\":16,\"renewable_percentage\":2.673730134},{\"Entity\":\"Poland\",\"Year\":2007,\"rank\":16,\"renewable_percentage\":3.4256513785},{\"Entity\":\"Poland\",\"Year\":2008,\"rank\":16,\"renewable_percentage\":4.2744438696},{\"Entity\":\"Poland\",\"Year\":2009,\"rank\":16,\"renewable_percentage\":5.7515388179},{\"Entity\":\"Poland\",\"Year\":2010,\"rank\":14,\"renewable_percentage\":6.9299363057},{\"Entity\":\"Poland\",\"Year\":2011,\"rank\":14,\"renewable_percentage\":8.0547205693},{\"Entity\":\"Poland\",\"Year\":2012,\"rank\":14,\"renewable_percentage\":10.4436057663},{\"Entity\":\"Poland\",\"Year\":2013,\"rank\":14,\"renewable_percentage\":10.4081508145},{\"Entity\":\"Poland\",\"Year\":2014,\"rank\":14,\"renewable_percentage\":12.5331481248},{\"Entity\":\"Poland\",\"Year\":2015,\"rank\":13,\"renewable_percentage\":13.8151485631},{\"Entity\":\"Poland\",\"Year\":2016,\"rank\":14,\"renewable_percentage\":13.7335179722},{\"Entity\":\"Poland\",\"Year\":2017,\"rank\":14,\"renewable_percentage\":14.1999646913},{\"Entity\":\"Poland\",\"Year\":2018,\"rank\":15,\"renewable_percentage\":12.7559148032},{\"Entity\":\"Poland\",\"Year\":2019,\"rank\":14,\"renewable_percentage\":15.6157998037},{\"Entity\":\"Poland\",\"Year\":2020,\"rank\":14,\"renewable_percentage\":17.9648720886},{\"Entity\":\"Saudi Arabia\",\"Year\":2000,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2001,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2002,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2003,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2004,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2005,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2006,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2007,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2008,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2009,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2010,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2011,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2012,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2013,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2014,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2015,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2016,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2017,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2018,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2019,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"Saudi Arabia\",\"Year\":2020,\"rank\":null,\"renewable_percentage\":null},{\"Entity\":\"South Africa\",\"Year\":2000,\"rank\":17,\"renewable_percentage\":0.9110805721},{\"Entity\":\"South Africa\",\"Year\":2001,\"rank\":17,\"renewable_percentage\":1.2516536074},{\"Entity\":\"South Africa\",\"Year\":2002,\"rank\":17,\"renewable_percentage\":1.3802249619},{\"Entity\":\"South Africa\",\"Year\":2003,\"rank\":17,\"renewable_percentage\":0.545271261},{\"Entity\":\"South Africa\",\"Year\":2004,\"rank\":17,\"renewable_percentage\":0.5827199439},{\"Entity\":\"South Africa\",\"Year\":2005,\"rank\":17,\"renewable_percentage\":0.763458686},{\"Entity\":\"South Africa\",\"Year\":2006,\"rank\":17,\"renewable_percentage\":1.3863060017},{\"Entity\":\"South Africa\",\"Year\":2007,\"rank\":17,\"renewable_percentage\":0.5267209594},{\"Entity\":\"South Africa\",\"Year\":2008,\"rank\":17,\"renewable_percentage\":0.6895692269},{\"Entity\":\"South Africa\",\"Year\":2009,\"rank\":17,\"renewable_percentage\":0.8031088083},{\"Entity\":\"South Africa\",\"Year\":2010,\"rank\":17,\"renewable_percentage\":1.0330068318},{\"Entity\":\"South Africa\",\"Year\":2011,\"rank\":17,\"renewable_percentage\":1.0184465622},{\"Entity\":\"South Africa\",\"Year\":2012,\"rank\":17,\"renewable_percentage\":0.6890826069},{\"Entity\":\"South Africa\",\"Year\":2013,\"rank\":17,\"renewable_percentage\":0.6792168043},{\"Entity\":\"South Africa\",\"Year\":2014,\"rank\":17,\"renewable_percentage\":1.4288129861},{\"Entity\":\"South Africa\",\"Year\":2015,\"rank\":17,\"renewable_percentage\":2.6256790549},{\"Entity\":\"South Africa\",\"Year\":2016,\"rank\":17,\"renewable_percentage\":3.2586126531},{\"Entity\":\"South Africa\",\"Year\":2017,\"rank\":17,\"renewable_percentage\":4.2202606137},{\"Entity\":\"South Africa\",\"Year\":2018,\"rank\":17,\"renewable_percentage\":5.1554655529},{\"Entity\":\"South Africa\",\"Year\":2019,\"rank\":17,\"renewable_percentage\":5.3589699864},{\"Entity\":\"South Africa\",\"Year\":2020,\"rank\":17,\"renewable_percentage\":5.780581212},{\"Entity\":\"Spain\",\"Year\":2000,\"rank\":6,\"renewable_percentage\":15.6119862394},{\"Entity\":\"Spain\",\"Year\":2001,\"rank\":3,\"renewable_percentage\":21.1524434719},{\"Entity\":\"Spain\",\"Year\":2002,\"rank\":6,\"renewable_percentage\":13.8260180901},{\"Entity\":\"Spain\",\"Year\":2003,\"rank\":3,\"renewable_percentage\":21.667314419},{\"Entity\":\"Spain\",\"Year\":2004,\"rank\":3,\"renewable_percentage\":18.3190206468},{\"Entity\":\"Spain\",\"Year\":2005,\"rank\":7,\"renewable_percentage\":14.8597342333},{\"Entity\":\"Spain\",\"Year\":2006,\"rank\":4,\"renewable_percentage\":17.6623992413},{\"Entity\":\"Spain\",\"Year\":2007,\"rank\":3,\"renewable_percentage\":19.3347262296},{\"Entity\":\"Spain\",\"Year\":2008,\"rank\":4,\"renewable_percentage\":20.0051501593},{\"Entity\":\"Spain\",\"Year\":2009,\"rank\":3,\"renewable_percentage\":25.4107639008},{\"Entity\":\"Spain\",\"Year\":2010,\"rank\":3,\"renewable_percentage\":32.7922186819},{\"Entity\":\"Spain\",\"Year\":2011,\"rank\":3,\"renewable_percentage\":30.0408415417},{\"Entity\":\"Spain\",\"Year\":2012,\"rank\":4,\"renewable_percentage\":29.6047928652},{\"Entity\":\"Spain\",\"Year\":2013,\"rank\":3,\"renewable_percentage\":39.5850357054},{\"Entity\":\"Spain\",\"Year\":2014,\"rank\":4,\"renewable_percentage\":40.1032952644},{\"Entity\":\"Spain\",\"Year\":2015,\"rank\":4,\"renewable_percentage\":34.9899091826},{\"Entity\":\"Spain\",\"Year\":2016,\"rank\":3,\"renewable_percentage\":38.5818061138},{\"Entity\":\"Spain\",\"Year\":2017,\"rank\":5,\"renewable_percentage\":32.220593624},{\"Entity\":\"Spain\",\"Year\":2018,\"rank\":4,\"renewable_percentage\":38.2080329557},{\"Entity\":\"Spain\",\"Year\":2019,\"rank\":6,\"renewable_percentage\":37.280815091},{\"Entity\":\"Spain\",\"Year\":2020,\"rank\":4,\"renewable_percentage\":43.8108805298},{\"Entity\":\"Thailand\",\"Year\":2000,\"rank\":12,\"renewable_percentage\":7.1261029822},{\"Entity\":\"Thailand\",\"Year\":2001,\"rank\":12,\"renewable_percentage\":7.061527212},{\"Entity\":\"Thailand\",\"Year\":2002,\"rank\":12,\"renewable_percentage\":7.9444772593},{\"Entity\":\"Thailand\",\"Year\":2003,\"rank\":13,\"renewable_percentage\":7.6718362852},{\"Entity\":\"Thailand\",\"Year\":2004,\"rank\":13,\"renewable_percentage\":6.5163549406},{\"Entity\":\"Thailand\",\"Year\":2005,\"rank\":14,\"renewable_percentage\":6.0325203252},{\"Entity\":\"Thailand\",\"Year\":2006,\"rank\":13,\"renewable_percentage\":7.5988547551},{\"Entity\":\"Thailand\",\"Year\":2007,\"rank\":13,\"renewable_percentage\":7.7085852479},{\"Entity\":\"Thailand\",\"Year\":2008,\"rank\":13,\"renewable_percentage\":6.5625458278},{\"Entity\":\"Thailand\",\"Year\":2009,\"rank\":15,\"renewable_percentage\":6.6263303689},{\"Entity\":\"Thailand\",\"Year\":2010,\"rank\":16,\"renewable_percentage\":5.7085828343},{\"Entity\":\"Thailand\",\"Year\":2011,\"rank\":15,\"renewable_percentage\":8.039961941},{\"Entity\":\"Thailand\",\"Year\":2012,\"rank\":15,\"renewable_percentage\":8.5396118358},{\"Entity\":\"Thailand\",\"Year\":2013,\"rank\":16,\"renewable_percentage\":7.6765035487},{\"Entity\":\"Thailand\",\"Year\":2014,\"rank\":15,\"renewable_percentage\":8.395728489},{\"Entity\":\"Thailand\",\"Year\":2015,\"rank\":15,\"renewable_percentage\":7.9949619145},{\"Entity\":\"Thailand\",\"Year\":2016,\"rank\":15,\"renewable_percentage\":8.9840234023},{\"Entity\":\"Thailand\",\"Year\":2017,\"rank\":15,\"renewable_percentage\":10.9570957096},{\"Entity\":\"Thailand\",\"Year\":2018,\"rank\":14,\"renewable_percentage\":14.1900054915},{\"Entity\":\"Thailand\",\"Year\":2019,\"rank\":15,\"renewable_percentage\":14.7001731284},{\"Entity\":\"Thailand\",\"Year\":2020,\"rank\":15,\"renewable_percentage\":13.7963737796},{\"Entity\":\"Ukraine\",\"Year\":2000,\"rank\":13,\"renewable_percentage\":6.5860921352},{\"Entity\":\"Ukraine\",\"Year\":2001,\"rank\":13,\"renewable_percentage\":6.9729761009},{\"Entity\":\"Ukraine\",\"Year\":2002,\"rank\":14,\"renewable_percentage\":5.5597165409},{\"Entity\":\"Ukraine\",\"Year\":2003,\"rank\":14,\"renewable_percentage\":5.1442841287},{\"Entity\":\"Ukraine\",\"Year\":2004,\"rank\":14,\"renewable_percentage\":6.4718162839},{\"Entity\":\"Ukraine\",\"Year\":2005,\"rank\":13,\"renewable_percentage\":6.6698940347},{\"Entity\":\"Ukraine\",\"Year\":2006,\"rank\":14,\"renewable_percentage\":6.68633235},{\"Entity\":\"Ukraine\",\"Year\":2007,\"rank\":14,\"renewable_percentage\":5.3380238605},{\"Entity\":\"Ukraine\",\"Year\":2008,\"rank\":14,\"renewable_percentage\":6.1377090041},{\"Entity\":\"Ukraine\",\"Year\":2009,\"rank\":13,\"renewable_percentage\":6.980762585},{\"Entity\":\"Ukraine\",\"Year\":2010,\"rank\":13,\"renewable_percentage\":7.0914098083},{\"Entity\":\"Ukraine\",\"Year\":2011,\"rank\":16,\"renewable_percentage\":5.7450628366},{\"Entity\":\"Ukraine\",\"Year\":2012,\"rank\":16,\"renewable_percentage\":5.6614236741},{\"Entity\":\"Ukraine\",\"Year\":2013,\"rank\":15,\"renewable_percentage\":7.8003200661},{\"Entity\":\"Ukraine\",\"Year\":2014,\"rank\":16,\"renewable_percentage\":5.5885262117},{\"Entity\":\"Ukraine\",\"Year\":2015,\"rank\":16,\"renewable_percentage\":4.3924771096},{\"Entity\":\"Ukraine\",\"Year\":2016,\"rank\":16,\"renewable_percentage\":5.6797249171},{\"Entity\":\"Ukraine\",\"Year\":2017,\"rank\":16,\"renewable_percentage\":7.0457194664},{\"Entity\":\"Ukraine\",\"Year\":2018,\"rank\":16,\"renewable_percentage\":8.228528092},{\"Entity\":\"Ukraine\",\"Year\":2019,\"rank\":16,\"renewable_percentage\":7.7754487096},{\"Entity\":\"Ukraine\",\"Year\":2020,\"rank\":16,\"renewable_percentage\":11.8440577364},{\"Entity\":\"United Kingdom\",\"Year\":2000,\"rank\":15,\"renewable_percentage\":2.6657406913},{\"Entity\":\"United Kingdom\",\"Year\":2001,\"rank\":15,\"renewable_percentage\":2.5001961451},{\"Entity\":\"United Kingdom\",\"Year\":2002,\"rank\":15,\"renewable_percentage\":2.8939157566},{\"Entity\":\"United Kingdom\",\"Year\":2003,\"rank\":15,\"renewable_percentage\":2.6854802003},{\"Entity\":\"United Kingdom\",\"Year\":2004,\"rank\":15,\"renewable_percentage\":3.6136880575},{\"Entity\":\"United Kingdom\",\"Year\":2005,\"rank\":15,\"renewable_percentage\":4.2815234434},{\"Entity\":\"United Kingdom\",\"Year\":2006,\"rank\":15,\"renewable_percentage\":4.6029890199},{\"Entity\":\"United Kingdom\",\"Year\":2007,\"rank\":15,\"renewable_percentage\":5.0104331009},{\"Entity\":\"United Kingdom\",\"Year\":2008,\"rank\":15,\"renewable_percentage\":5.6776842324},{\"Entity\":\"United Kingdom\",\"Year\":2009,\"rank\":14,\"renewable_percentage\":6.7679854187},{\"Entity\":\"United Kingdom\",\"Year\":2010,\"rank\":15,\"renewable_percentage\":6.9092924441},{\"Entity\":\"United Kingdom\",\"Year\":2011,\"rank\":13,\"renewable_percentage\":9.6422505889},{\"Entity\":\"United Kingdom\",\"Year\":2012,\"rank\":11,\"renewable_percentage\":11.4273047189},{\"Entity\":\"United Kingdom\",\"Year\":2013,\"rank\":10,\"renewable_percentage\":14.9727052732},{\"Entity\":\"United Kingdom\",\"Year\":2014,\"rank\":8,\"renewable_percentage\":19.2476358104},{\"Entity\":\"United Kingdom\",\"Year\":2015,\"rank\":6,\"renewable_percentage\":24.6227709191},{\"Entity\":\"United Kingdom\",\"Year\":2016,\"rank\":7,\"renewable_percentage\":24.6788390627},{\"Entity\":\"United Kingdom\",\"Year\":2017,\"rank\":6,\"renewable_percentage\":29.4986571173},{\"Entity\":\"United Kingdom\",\"Year\":2018,\"rank\":6,\"renewable_percentage\":33.2919818457},{\"Entity\":\"United Kingdom\",\"Year\":2019,\"rank\":5,\"renewable_percentage\":37.4568630499},{\"Entity\":\"United Kingdom\",\"Year\":2020,\"rank\":5,\"renewable_percentage\":42.8603962651},{\"Entity\":\"United States\",\"Year\":2000,\"rank\":10,\"renewable_percentage\":9.2298992662},{\"Entity\":\"United States\",\"Year\":2001,\"rank\":11,\"renewable_percentage\":7.5132056541},{\"Entity\":\"United States\",\"Year\":2002,\"rank\":10,\"renewable_percentage\":8.749216358},{\"Entity\":\"United States\",\"Year\":2003,\"rank\":10,\"renewable_percentage\":9.0252110397},{\"Entity\":\"United States\",\"Year\":2004,\"rank\":11,\"renewable_percentage\":8.7334100887},{\"Entity\":\"United States\",\"Year\":2005,\"rank\":12,\"renewable_percentage\":8.7494640631},{\"Entity\":\"United States\",\"Year\":2006,\"rank\":12,\"renewable_percentage\":9.4184742052},{\"Entity\":\"United States\",\"Year\":2007,\"rank\":12,\"renewable_percentage\":8.3984096829},{\"Entity\":\"United States\",\"Year\":2008,\"rank\":11,\"renewable_percentage\":9.180943292},{\"Entity\":\"United States\",\"Year\":2009,\"rank\":10,\"renewable_percentage\":10.547689996},{\"Entity\":\"United States\",\"Year\":2010,\"rank\":11,\"renewable_percentage\":10.3180892283},{\"Entity\":\"United States\",\"Year\":2011,\"rank\":9,\"renewable_percentage\":12.4665249812},{\"Entity\":\"United States\",\"Year\":2012,\"rank\":10,\"renewable_percentage\":12.1841179804},{\"Entity\":\"United States\",\"Year\":2013,\"rank\":12,\"renewable_percentage\":12.8311154179},{\"Entity\":\"United States\",\"Year\":2014,\"rank\":12,\"renewable_percentage\":13.3503092033},{\"Entity\":\"United States\",\"Year\":2015,\"rank\":14,\"renewable_percentage\":13.6261352256},{\"Entity\":\"United States\",\"Year\":2016,\"rank\":12,\"renewable_percentage\":15.2880936304},{\"Entity\":\"United States\",\"Year\":2017,\"rank\":9,\"renewable_percentage\":17.4515276472},{\"Entity\":\"United States\",\"Year\":2018,\"rank\":11,\"renewable_percentage\":17.4499886946},{\"Entity\":\"United States\",\"Year\":2019,\"rank\":13,\"renewable_percentage\":18.2946243489},{\"Entity\":\"United States\",\"Year\":2020,\"rank\":12,\"renewable_percentage\":20.3156921037}],\"metadata\":{\"Entity\":{\"type\":\"string\",\"semanticType\":\"Location\"},\"Year\":{\"type\":\"number\",\"semanticType\":\"Year\"},\"rank\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"renewable_percentage\":{\"type\":\"number\",\"semanticType\":\"Percentage\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Calculate total energy for each row\\n    df_energy['total_energy'] = (\\n        df_energy['Electricity from fossil fuels (TWh)'] + \\n        df_energy['Electricity from nuclear (TWh)'] + \\n        df_energy['Electricity from renewables (TWh)']\\n    )\\n    \\n    # Calculate renewable percentage\\n    df_energy['renewable_percentage'] = (\\n        df_energy['Electricity from renewables (TWh)'] / df_energy['total_energy'] * 100\\n    )\\n    \\n    # Handle division by zero cases\\n    df_energy['renewable_percentage'] = df_energy['renewable_percentage'].replace([np.inf, -np.inf], np.nan)\\n    \\n    # Rank countries by renewable percentage within each year (highest percentage = rank 1)\\n    df_energy['rank'] = df_energy.groupby('Year')['renewable_percentage'].rank(\\n        method='dense', \\n        ascending=False\\n    )\\n    \\n    # Select only the required columns\\n    transformed_df = df_energy[['Year', 'Entity', 'renewable_percentage', 'rank']].copy()\\n    \\n    return transformed_df\\n\",\"source\":[\"global-energy-20-small.csv\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 158029.9988, 190729.9957, 209229.9957, ..., 6993180.176, 9861099.609, 9874660.156, 10096009.77\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., 90.14, 91.79, 92.54, 804.95\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\n{\\n    \\\"instruction\\\": \\\"\\\",\\n    \\\"chart_type\\\": \\\"Line Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"energy\\\",\\n        \\\"color\\\": \\\"Entity\\\",\\n        \\\"column\\\": \\\"source\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Transform the data into a long format where different energy sources (fossil fuels, nuclear, renewables) are unpivoted into separate rows. Each row should contain the year, entity (country), energy source type, and the corresponding energy value in TWh. This will enable visualization of energy generation trends over time by source and country.\\\",\\n    \\\"display_instruction\\\": \\\"Show **energy generation** trends by **source** and **Entity** over **Year**\\\",\\n    \\\"output_fields\\\": [\\\"Year\\\", \\\"Entity\\\", \\\"source\\\", \\\"energy\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"energy\\\",\\n        \\\"color\\\": \\\"Entity\\\",\\n        \\\"column\\\": \\\"source\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to visualize energy data across different sources with a line chart faceted by source. The original data has energy sources in separate columns (fossil fuels, nuclear, renewables), so we need to unpivot these columns into a long format with 'source' and 'energy' fields. The chart_encodings provided by the user are appropriate for this visualization goal, using faceting (column) to separate different energy sources.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Unpivot the energy source columns into long format\\n    transformed_df = pd.melt(\\n        df_energy,\\n        id_vars=['Year', 'Entity'],\\n        value_vars=[\\n            'Electricity from fossil fuels (TWh)',\\n            'Electricity from nuclear (TWh)',\\n            'Electricity from renewables (TWh)'\\n        ],\\n        var_name='source',\\n        value_name='energy'\\n    )\\n    \\n    # Clean up the source names to be more readable\\n    transformed_df['source'] = transformed_df['source'].str.replace('Electricity from ', '').str.replace(' (TWh)', '')\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n      Entity  Year  energy        source\\n0  Australia  2000  181.05  fossil fuels\\n1  Australia  2001  194.33  fossil fuels\\n2  Australia  2002  197.29  fossil fuels\\n3  Australia  2003  195.13  fossil fuels\\n4  Australia  2004  203.66  fossil fuels\\n5  Australia  2005  195.95  fossil fuels\\n6  Australia  2006  198.72  fossil fuels\\n7  Australia  2007  208.59  fossil fuels\\n8  Australia  2008  211.06  fossil fuels\\n9  Australia  2009  216.42  fossil fuels\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"show renewable percentage for each country\\\",\\n    \\\"chart_type\\\": \\\"Line Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"energy\\\",\\n        \\\"color\\\": \\\"Entity\\\",\\n        \\\"column\\\": \\\"source\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Calculate the renewable energy percentage for each country and year. The renewable percentage is computed as the ratio of renewable energy to total energy (sum of fossil fuels, nuclear, and renewables) multiplied by 100. The output should contain year, entity (country), and the renewable percentage value.\\\",\\n    \\\"display_instruction\\\": \\\"Show **renewable percentage** for each **Entity** over **Year**\\\",\\n    \\\"output_fields\\\": [\\\"Year\\\", \\\"Entity\\\", \\\"renewable_percentage\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"renewable_percentage\\\",\\n        \\\"color\\\": \\\"Entity\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to see renewable percentage trends, which requires calculating the proportion of renewable energy relative to total energy generation. This is a single metric per country per year, so we don't need the 'column' faceting by source anymore. The chart_encodings are updated to reflect that we're now showing a percentage metric rather than absolute energy values by source.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Calculate total energy for each row\\n    df_energy['total_energy'] = (\\n        df_energy['Electricity from fossil fuels (TWh)'] + \\n        df_energy['Electricity from nuclear (TWh)'] + \\n        df_energy['Electricity from renewables (TWh)']\\n    )\\n    \\n    # Calculate renewable percentage\\n    df_energy['renewable_percentage'] = (\\n        df_energy['Electricity from renewables (TWh)'] / df_energy['total_energy'] * 100\\n    )\\n    \\n    # Handle division by zero cases\\n    df_energy['renewable_percentage'] = df_energy['renewable_percentage'].replace([np.inf, -np.inf], np.nan)\\n    \\n    # Select only the required columns\\n    transformed_df = df_energy[['Year', 'Entity', 'renewable_percentage']].copy()\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n      Entity  Year  renewable_percentage\\n0  Australia  2000              8.634437\\n1  Australia  2001              8.218014\\n2  Australia  2002              8.083302\\n3  Australia  2003              8.659832\\n4  Australia  2004              8.701305\\n5  Australia  2005              9.156236\\n6  Australia  2006              9.635760\\n7  Australia  2007              9.119031\\n8  Australia  2008              8.054890\\n9  Australia  2009              7.804379\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"rank countries by their renewable percentage\\\",\\n    \\\"chart_type\\\": \\\"Line Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"renewable_percentage\\\",\\n        \\\"color\\\": \\\"Entity\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Calculate the renewable energy percentage for each country and year, then rank countries based on their renewable percentage. The ranking should be computed for each year, showing which countries have the highest to lowest renewable percentage. The output should contain year, entity (country), renewable percentage, and the rank of each country within that year.\\\",\\n    \\\"display_instruction\\\": \\\"Show **countries ranked** by **renewable percentage** over **Year**\\\",\\n    \\\"output_fields\\\": [\\\"Year\\\", \\\"Entity\\\", \\\"renewable_percentage\\\", \\\"rank\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"renewable_percentage\\\",\\n        \\\"color\\\": \\\"Entity\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to rank countries by their renewable percentage, which requires adding a rank field that orders countries within each year based on their renewable percentage (highest percentage = rank 1). This allows comparison of countries' relative positions in renewable energy adoption over time. The chart_encodings remain the same as the previous step since we're still visualizing renewable percentage trends, but now with ranking information available.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Calculate total energy for each row\\n    df_energy['total_energy'] = (\\n        df_energy['Electricity from fossil fuels (TWh)'] + \\n        df_energy['Electricity from nuclear (TWh)'] + \\n        df_energy['Electricity from renewables (TWh)']\\n    )\\n    \\n    # Calculate renewable percentage\\n    df_energy['renewable_percentage'] = (\\n        df_energy['Electricity from renewables (TWh)'] / df_energy['total_energy'] * 100\\n    )\\n    \\n    # Handle division by zero cases\\n    df_energy['renewable_percentage'] = df_energy['renewable_percentage'].replace([np.inf, -np.inf], np.nan)\\n    \\n    # Rank countries by renewable percentage within each year (highest percentage = rank 1)\\n    df_energy['rank'] = df_energy.groupby('Year')['renewable_percentage'].rank(\\n        method='dense', \\n        ascending=False\\n    )\\n    \\n    # Select only the required columns\\n    transformed_df = df_energy[['Year', 'Entity', 'renewable_percentage', 'rank']].copy()\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"table-45\",\"sourceTableIds\":[\"global-energy-20-small.csv\"],\"instruction\":\"rank countries by their renewable percentage\",\"displayInstruction\":\"Show **countries ranked** by **renewable percentage** over **Year**\",\"chart\":{\"id\":\"chart-1760738441793\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"y\":{\"fieldID\":\"concept-renewable_percentage-1760738424337\"},\"color\":{\"fieldID\":\"original--global-energy-20-small.csv--Entity\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-45\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-78\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"- Calculate **total_energy** for each country-year by summing electricity generated from **fossil fuels**, **nuclear**, and **renewables** (all measured in TWh)\\n- Compute **renewable_percentage** by dividing **Electricity from renewables (TWh)** by **total_energy** and multiplying by **100**\\n- Replace any infinite values in **renewable_percentage** with NaN to handle cases where total energy is zero\\n- Assign a **rank** to each country within each **Year** based on **renewable_percentage**, where rank **1** represents the highest renewable percentage (using dense ranking method)\\n- Return a dataset containing **Year**, **Entity** (country name), **renewable_percentage**, and **rank**\",\"concepts\":[{\"explanation\":\"The proportion of a country's total electricity generation that comes from renewable sources, expressed as a percentage. Calculated as: \\\\[ \\\\text{renewable\\\\_percentage} = \\\\frac{\\\\text{Electricity from renewables (TWh)}}{\\\\text{total\\\\_energy}} \\\\times 100 \\\\]\",\"field\":\"renewable_percentage\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small_csv)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 190729.9957, 227580.0018, 233600.0061, ..., 9282549.805, 9861099.609, 9874660.156, 10096009.77\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., 88.76, 90.14, 91.79, 92.54\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Calculate total energy for each row\\n    df_energy['total_energy'] = (\\n        df_energy['Electricity from fossil fuels (TWh)'] + \\n        df_energy['Electricity from nuclear (TWh)'] + \\n        df_energy['Electricity from renewables (TWh)']\\n    )\\n    \\n    # Calculate renewable percentage\\n    df_energy['renewable_percentage'] = (\\n        df_energy['Electricity from renewables (TWh)'] / df_energy['total_energy'] * 100\\n    )\\n    \\n    # Handle division by zero cases\\n    df_energy['renewable_percentage'] = df_energy['renewable_percentage'].replace([np.inf, -np.inf], np.nan)\\n    \\n    # Rank countries by renewable percentage within each year (highest percentage = rank 1)\\n    df_energy['rank'] = df_energy.groupby('Year')['renewable_percentage'].rank(\\n        method='dense', \\n        ascending=False\\n    )\\n    \\n    # Select only the required columns\\n    transformed_df = df_energy[['Year', 'Entity', 'renewable_percentage', 'rank']].copy()\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\n- Calculate **total_energy** for each country-year by summing electricity generated from **fossil fuels**, **nuclear**, and **renewables** (all measured in TWh)\\n- Compute **renewable_percentage** by dividing **Electricity from renewables (TWh)** by **total_energy** and multiplying by **100**\\n- Replace any infinite values in **renewable_percentage** with NaN to handle cases where total energy is zero\\n- Assign a **rank** to each country within each **Year** based on **renewable_percentage**, where rank **1** represents the highest renewable percentage (using dense ranking method)\\n- Return a dataset containing **Year**, **Entity** (country name), **renewable_percentage**, and **rank**\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"renewable_percentage\\\",\\n        \\\"explanation\\\": \\\"The proportion of a country's total electricity generation that comes from renewable sources, expressed as a percentage. Calculated as: \\\\\\\\[ \\\\\\\\text{renewable\\\\\\\\_percentage} = \\\\\\\\frac{\\\\\\\\text{Electricity from renewables (TWh)}}{\\\\\\\\text{total\\\\\\\\_energy}} \\\\\\\\times 100 \\\\\\\\]\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-97\",\"displayId\":\"renewable-elec\",\"names\":[\"Electricity from renewables (TWh)\",\"Entity\",\"Year\"],\"rows\":[{\"Electricity from renewables (TWh)\":17.11,\"Entity\":\"Australia\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":63.99,\"Entity\":\"Australia\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":308.77,\"Entity\":\"Brazil\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":520.01,\"Entity\":\"Brazil\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":363.7,\"Entity\":\"Canada\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":429.24,\"Entity\":\"Canada\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":225.56,\"Entity\":\"China\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":2184.94,\"Entity\":\"China\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":67.83,\"Entity\":\"France\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":125.28,\"Entity\":\"France\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":35.47,\"Entity\":\"Germany\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":251.48,\"Entity\":\"Germany\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":80.27,\"Entity\":\"India\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":315.76,\"Entity\":\"India\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":19.6,\"Entity\":\"Indonesia\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":52.91,\"Entity\":\"Indonesia\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":50.87,\"Entity\":\"Italy\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":116.9,\"Entity\":\"Italy\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":104.16,\"Entity\":\"Japan\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":205.6,\"Entity\":\"Japan\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":7.53,\"Entity\":\"Kazakhstan\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":11.94,\"Entity\":\"Kazakhstan\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":44.51,\"Entity\":\"Mexico\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":69.19,\"Entity\":\"Mexico\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":2.33,\"Entity\":\"Poland\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":28.23,\"Entity\":\"Poland\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":0,\"Entity\":\"Saudi Arabia\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":0.21,\"Entity\":\"Saudi Arabia\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":1.79,\"Entity\":\"South Africa\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":12.83,\"Entity\":\"South Africa\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":34.49,\"Entity\":\"Spain\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":113.79,\"Entity\":\"Spain\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":6.38,\"Entity\":\"Thailand\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":24.73,\"Entity\":\"Thailand\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":11.28,\"Entity\":\"Ukraine\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":17.56,\"Entity\":\"Ukraine\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":9.98,\"Entity\":\"United Kingdom\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":131.74,\"Entity\":\"United Kingdom\",\"Year\":\"2020\"},{\"Electricity from renewables (TWh)\":350.93,\"Entity\":\"United States\",\"Year\":\"2000\"},{\"Electricity from renewables (TWh)\":821.4,\"Entity\":\"United States\",\"Year\":\"2020\"}],\"metadata\":{\"Electricity from renewables (TWh)\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Entity\":{\"type\":\"string\",\"semanticType\":\"Location\"},\"Year\":{\"type\":\"number\",\"semanticType\":\"Year\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Filter data for years 2000 and 2020\\n    transformed_df = df_energy[df_energy['Year'].isin([2000, 2020])].copy()\\n    \\n    # Select only the required columns\\n    transformed_df = transformed_df[['Entity', 'Year', 'Electricity from renewables (TWh)']]\\n    \\n    # Convert Year to string for better visualization as a categorical variable\\n    transformed_df['Year'] = transformed_df['Year'].astype(str)\\n    \\n    # Sort by Entity and Year for better readability\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year']).reset_index(drop=True)\\n    \\n    return transformed_df\\n\",\"source\":[\"global-energy-20-small.csv\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 117440.0, 146139.9994, 158029.9988, ..., 5736319.824, 5738290.039, nan, 9861099.609\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., 61.99, 62.21, 63.02, 63.71\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\n{\\n    \\\"instruction\\\": \\\"compare each countries renewable between 2000 and 2020\\\",\\n    \\\"chart_type\\\": \\\"Grouped Bar Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Renewable Energy\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Compare renewable energy (Electricity from renewables) for each country between the years 2000 and 2020. Filter the data to include only years 2000 and 2020, and prepare the output with country names, year, and renewable energy values for visualization as a grouped bar chart.\\\",\\n    \\\"display_instruction\\\": \\\"Compare **renewable energy** by **country** between **2000** and **2020**\\\",\\n    \\\"output_fields\\\": [\\\"Entity\\\", \\\"Year\\\", \\\"Electricity from renewables (TWh)\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Electricity from renewables (TWh)\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to compare renewable energy across countries between 2000 and 2020. The output field 'Renewable Energy' mentioned in the original chart_encodings maps to 'Electricity from renewables (TWh)' in the dataset. To create a grouped bar chart comparing these two years, we need to filter the data to only include years 2000 and 2020, and output the Entity (country), Year, and the renewable energy values. The chart_encodings are updated to use the actual column name from the dataset.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Filter data for years 2000 and 2020\\n    transformed_df = df_energy[df_energy['Year'].isin([2000, 2020])].copy()\\n    \\n    # Select only the required columns\\n    transformed_df = transformed_df[['Entity', 'Year', 'Electricity from renewables (TWh)']]\\n    \\n    # Convert Year to string for better visualization as a categorical variable\\n    transformed_df['Year'] = transformed_df['Year'].astype(str)\\n    \\n    # Sort by Entity and Year for better readability\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year']).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"global-energy-20-small.csv\",\"sourceTableIds\":[\"global-energy-20-small.csv\"],\"instruction\":\"compare each countries renewable between 2000 and 2020\",\"displayInstruction\":\"Compare **renewable energy** by **country** between **2000** and **2020**\",\"chart\":{\"id\":\"chart-1760738769634\",\"chartType\":\"Grouped Bar Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--global-energy-20-small.csv--Entity\"},\"y\":{\"fieldID\":\"concept-1760738743125\"},\"color\":{\"channel\":\"color\",\"bin\":false,\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"global-energy-20-small.csv\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-97\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"The code performs a straightforward comparison analysis of renewable energy generation across countries:\\n\\n- **Filters** the dataset to include only data from years **2000** and **2020**, creating a 20-year comparison window\\n- **Selects** three key columns: `Entity` (country name), `Year`, and `Electricity from renewables (TWh)` (renewable energy generation)\\n- **Converts** the `Year` field to string format to treat it as a categorical variable for visualization purposes\\n- **Sorts** the results by `Entity` and `Year` to organize countries alphabetically with their respective year data grouped together\\n- **Returns** a cleaned dataset showing how renewable electricity generation has changed for each country between 2000 and 2020\",\"concepts\":[],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small_csv)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 117440.0, 146139.9994, 158029.9988, ..., 10006669.92, 10502929.69, 10707219.73, nan\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., 56.18, 61.99, 63.02, 63.71\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Filter data for years 2000 and 2020\\n    transformed_df = df_energy[df_energy['Year'].isin([2000, 2020])].copy()\\n    \\n    # Select only the required columns\\n    transformed_df = transformed_df[['Entity', 'Year', 'Electricity from renewables (TWh)']]\\n    \\n    # Convert Year to string for better visualization as a categorical variable\\n    transformed_df['Year'] = transformed_df['Year'].astype(str)\\n    \\n    # Sort by Entity and Year for better readability\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year']).reset_index(drop=True)\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThe code performs a straightforward comparison analysis of renewable energy generation across countries:\\n\\n- **Filters** the dataset to include only data from years **2000** and **2020**, creating a 20-year comparison window\\n- **Selects** three key columns: `Entity` (country name), `Year`, and `Electricity from renewables (TWh)` (renewable energy generation)\\n- **Converts** the `Year` field to string format to treat it as a categorical variable for visualization purposes\\n- **Sorts** the results by `Entity` and `Year` to organize countries alphabetically with their respective year data grouped together\\n- **Returns** a cleaned dataset showing how renewable electricity generation has changed for each country between 2000 and 2020\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-27\",\"displayId\":\"renewable-energy1\",\"names\":[\"Entity\",\"Renewable Percentage\",\"Year\"],\"rows\":[{\"Entity\":\"Australia\",\"Renewable Percentage\":8.6344368187,\"Year\":\"2000\"},{\"Entity\":\"Australia\",\"Renewable Percentage\":25.5031684668,\"Year\":\"2020\"},{\"Entity\":\"Brazil\",\"Renewable Percentage\":90.1307723743,\"Year\":\"2000\"},{\"Entity\":\"Brazil\",\"Renewable Percentage\":84.6411771408,\"Year\":\"2020\"},{\"Entity\":\"Canada\",\"Renewable Percentage\":61.8095917882,\"Year\":\"2000\"},{\"Entity\":\"Canada\",\"Renewable Percentage\":68.7796436354,\"Year\":\"2020\"},{\"Entity\":\"China\",\"Renewable Percentage\":16.639126586,\"Year\":\"2000\"},{\"Entity\":\"China\",\"Renewable Percentage\":28.2464606924,\"Year\":\"2020\"},{\"Entity\":\"France\",\"Renewable Percentage\":12.7117691154,\"Year\":\"2000\"},{\"Entity\":\"France\",\"Renewable Percentage\":23.7610241821,\"Year\":\"2020\"},{\"Entity\":\"Germany\",\"Renewable Percentage\":6.1977983575,\"Year\":\"2000\"},{\"Entity\":\"Germany\",\"Renewable Percentage\":44.3324048937,\"Year\":\"2020\"},{\"Entity\":\"Global Average\",\"Renewable Percentage\":16.4213212559,\"Year\":\"2000\"},{\"Entity\":\"Global Average\",\"Renewable Percentage\":29.2955247263,\"Year\":\"2020\"},{\"Entity\":\"India\",\"Renewable Percentage\":14.0481982534,\"Year\":\"2000\"},{\"Entity\":\"India\",\"Renewable Percentage\":20.2059243238,\"Year\":\"2020\"},{\"Entity\":\"Indonesia\",\"Renewable Percentage\":null,\"Year\":\"2000\"},{\"Entity\":\"Indonesia\",\"Renewable Percentage\":null,\"Year\":\"2020\"},{\"Entity\":\"Italy\",\"Renewable Percentage\":18.900241501,\"Year\":\"2000\"},{\"Entity\":\"Italy\",\"Renewable Percentage\":42.0397741576,\"Year\":\"2020\"},{\"Entity\":\"Japan\",\"Renewable Percentage\":10.5382436261,\"Year\":\"2000\"},{\"Entity\":\"Japan\",\"Renewable Percentage\":21.324925062,\"Year\":\"2020\"},{\"Entity\":\"Kazakhstan\",\"Renewable Percentage\":null,\"Year\":\"2000\"},{\"Entity\":\"Kazakhstan\",\"Renewable Percentage\":null,\"Year\":\"2020\"},{\"Entity\":\"Mexico\",\"Renewable Percentage\":22.9291160107,\"Year\":\"2000\"},{\"Entity\":\"Mexico\",\"Renewable Percentage\":21.2552224134,\"Year\":\"2020\"},{\"Entity\":\"Poland\",\"Renewable Percentage\":1.6273222517,\"Year\":\"2000\"},{\"Entity\":\"Poland\",\"Renewable Percentage\":17.9648720886,\"Year\":\"2020\"},{\"Entity\":\"Saudi Arabia\",\"Renewable Percentage\":null,\"Year\":\"2000\"},{\"Entity\":\"Saudi Arabia\",\"Renewable Percentage\":null,\"Year\":\"2020\"},{\"Entity\":\"South Africa\",\"Renewable Percentage\":0.9110805721,\"Year\":\"2000\"},{\"Entity\":\"South Africa\",\"Renewable Percentage\":5.780581212,\"Year\":\"2020\"},{\"Entity\":\"Spain\",\"Renewable Percentage\":15.6119862394,\"Year\":\"2000\"},{\"Entity\":\"Spain\",\"Renewable Percentage\":43.8108805298,\"Year\":\"2020\"},{\"Entity\":\"Thailand\",\"Renewable Percentage\":7.1261029822,\"Year\":\"2000\"},{\"Entity\":\"Thailand\",\"Renewable Percentage\":13.7963737796,\"Year\":\"2020\"},{\"Entity\":\"Ukraine\",\"Renewable Percentage\":6.5860921352,\"Year\":\"2000\"},{\"Entity\":\"Ukraine\",\"Renewable Percentage\":11.8440577364,\"Year\":\"2020\"},{\"Entity\":\"United Kingdom\",\"Renewable Percentage\":2.6657406913,\"Year\":\"2000\"},{\"Entity\":\"United Kingdom\",\"Renewable Percentage\":42.8603962651,\"Year\":\"2020\"},{\"Entity\":\"United States\",\"Renewable Percentage\":9.2298992662,\"Year\":\"2000\"},{\"Entity\":\"United States\",\"Renewable Percentage\":20.3156921037,\"Year\":\"2020\"}],\"metadata\":{\"Entity\":{\"type\":\"string\",\"semanticType\":\"Name\"},\"Renewable Percentage\":{\"type\":\"number\",\"semanticType\":\"Percentage\"},\"Year\":{\"type\":\"number\",\"semanticType\":\"Year\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Filter data for years 2000 and 2020\\n    df_filtered = df_energy[df_energy['Year'].isin([2000, 2020])].copy()\\n    \\n    # Calculate total electricity generation\\n    df_filtered['Total Electricity'] = (\\n        df_filtered['Electricity from fossil fuels (TWh)'] + \\n        df_filtered['Electricity from nuclear (TWh)'] + \\n        df_filtered['Electricity from renewables (TWh)']\\n    )\\n    \\n    # Calculate renewable percentage\\n    df_filtered['Renewable Percentage'] = (\\n        df_filtered['Electricity from renewables (TWh)'] / df_filtered['Total Electricity'] * 100\\n    )\\n    \\n    # Select required columns for individual countries\\n    country_data = df_filtered[['Entity', 'Year', 'Renewable Percentage']].copy()\\n    \\n    # Calculate global average for each year\\n    global_avg = df_filtered.groupby('Year').apply(\\n        lambda x: pd.Series({\\n            'Entity': 'Global Average',\\n            'Year': x['Year'].iloc[0],\\n            'Renewable Percentage': (\\n                x['Electricity from renewables (TWh)'].sum() / x['Total Electricity'].sum() * 100\\n            )\\n        })\\n    ).reset_index(drop=True)\\n    \\n    # Combine country data with global average\\n    transformed_df = pd.concat([country_data, global_avg], ignore_index=True)\\n    \\n    # Convert Year to string for better visualization\\n    transformed_df['Year'] = transformed_df['Year'].astype(str)\\n    \\n    # Sort by Entity and Year\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year']).reset_index(drop=True)\\n    \\n    return transformed_df\\n\",\"source\":[\"global-energy-20-small.csv\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 117440.0, 146139.9994, 158029.9988, ..., 5736319.824, 5738290.039, nan, 9861099.609\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., 61.99, 62.21, 63.02, 63.71\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\n{\\n    \\\"instruction\\\": \\\"compare each countries renewable between 2000 and 2020\\\",\\n    \\\"chart_type\\\": \\\"Grouped Bar Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Renewable Energy\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Compare renewable energy (Electricity from renewables) for each country between the years 2000 and 2020. Filter the data to include only years 2000 and 2020, and prepare the output with country names, year, and renewable energy values for visualization as a grouped bar chart.\\\",\\n    \\\"display_instruction\\\": \\\"Compare **renewable energy** by **country** between **2000** and **2020**\\\",\\n    \\\"output_fields\\\": [\\\"Entity\\\", \\\"Year\\\", \\\"Electricity from renewables (TWh)\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Electricity from renewables (TWh)\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to compare renewable energy across countries between 2000 and 2020. The output field 'Renewable Energy' mentioned in the original chart_encodings maps to 'Electricity from renewables (TWh)' in the dataset. To create a grouped bar chart comparing these two years, we need to filter the data to only include years 2000 and 2020, and output the Entity (country), Year, and the renewable energy values. The chart_encodings are updated to use the actual column name from the dataset.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Filter data for years 2000 and 2020\\n    transformed_df = df_energy[df_energy['Year'].isin([2000, 2020])].copy()\\n    \\n    # Select only the required columns\\n    transformed_df = transformed_df[['Entity', 'Year', 'Electricity from renewables (TWh)']]\\n    \\n    # Convert Year to string for better visualization as a categorical variable\\n    transformed_df['Year'] = transformed_df['Year'].astype(str)\\n    \\n    # Sort by Entity and Year for better readability\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year']).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n   Electricity from renewables (TWh)     Entity  Year\\n0                              17.11  Australia  2000\\n1                              63.99  Australia  2020\\n2                             308.77     Brazil  2000\\n3                             520.01     Brazil  2020\\n4                             363.70     Canada  2000\\n5                             429.24     Canada  2020\\n6                             225.56      China  2000\\n7                            2184.94      China  2020\\n8                              67.83     France  2000\\n9                             125.28     France  2020\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"show their renewable percentage instead, and add an entity to show global average\\\",\\n    \\\"chart_type\\\": \\\"Grouped Bar Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Electricity from renewables (TWh)\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Calculate the renewable energy percentage (proportion of renewables to total electricity generation from all sources) for each country between 2000 and 2020. Add a 'Global Average' entity that represents the worldwide average renewable percentage for each year. The output should include Entity (with 'Global Average' added), Year, and the renewable percentage.\\\",\\n    \\\"display_instruction\\\": \\\"Show **renewable energy percentage** by **country** with **global average** for **2000** and **2020**\\\",\\n    \\\"output_fields\\\": [\\\"Entity\\\", \\\"Year\\\", \\\"Renewable Percentage\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Renewable Percentage\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to see renewable percentage instead of absolute values, and wants to add a global average entity for comparison. Renewable percentage is calculated as the ratio of renewable energy to total electricity generation (fossil fuels + nuclear + renewables). A 'Global Average' entity needs to be computed by aggregating all countries' data for each year. The y-axis encoding is updated to reflect the new metric 'Renewable Percentage'.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Filter data for years 2000 and 2020\\n    df_filtered = df_energy[df_energy['Year'].isin([2000, 2020])].copy()\\n    \\n    # Calculate total electricity generation\\n    df_filtered['Total Electricity'] = (\\n        df_filtered['Electricity from fossil fuels (TWh)'] + \\n        df_filtered['Electricity from nuclear (TWh)'] + \\n        df_filtered['Electricity from renewables (TWh)']\\n    )\\n    \\n    # Calculate renewable percentage\\n    df_filtered['Renewable Percentage'] = (\\n        df_filtered['Electricity from renewables (TWh)'] / df_filtered['Total Electricity'] * 100\\n    )\\n    \\n    # Select required columns for individual countries\\n    country_data = df_filtered[['Entity', 'Year', 'Renewable Percentage']].copy()\\n    \\n    # Calculate global average for each year\\n    global_avg = df_filtered.groupby('Year').apply(\\n        lambda x: pd.Series({\\n            'Entity': 'Global Average',\\n            'Year': x['Year'].iloc[0],\\n            'Renewable Percentage': (\\n                x['Electricity from renewables (TWh)'].sum() / x['Total Electricity'].sum() * 100\\n            )\\n        })\\n    ).reset_index(drop=True)\\n    \\n    # Combine country data with global average\\n    transformed_df = pd.concat([country_data, global_avg], ignore_index=True)\\n    \\n    # Convert Year to string for better visualization\\n    transformed_df['Year'] = transformed_df['Year'].astype(str)\\n    \\n    # Sort by Entity and Year\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year']).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"table-97\",\"sourceTableIds\":[\"global-energy-20-small.csv\"],\"instruction\":\"show their renewable percentage instead, and add an entity to show global average\",\"displayInstruction\":\"Show **renewable energy percentage** by **country** with **global average** for **2000** and **2020**\",\"chart\":{\"id\":\"chart-1760738813383\",\"chartType\":\"Grouped Bar Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--global-energy-20-small.csv--Entity\"},\"y\":{\"fieldID\":\"original--global-energy-20-small.csv--Electricity from renewables (TWh)\"},\"color\":{\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-97\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-27\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"The code performs the following transformation steps:\\n\\n1. **Filter data** to include only records from **2000** and **2020**\\n2. Calculate **Total Electricity** generation by summing three sources: **fossil fuels**, **nuclear**, and **renewables** (all measured in TWh)\\n3. Compute **Renewable Percentage** for each country and year by dividing **Electricity from renewables** by **Total Electricity** and multiplying by 100\\n4. Extract relevant columns: **Entity** (country name), **Year**, and **Renewable Percentage**\\n5. Calculate **Global Average** renewable percentage for each year by:\\n   - Summing all countries' **renewable electricity** generation\\n   - Dividing by the sum of all countries' **total electricity** generation\\n   - Multiplying by 100 to get percentage\\n6. Combine individual country data with the **Global Average** statistics\\n7. Convert **Year** values to string format\\n8. Sort results by **Entity** name and **Year**\",\"concepts\":[{\"explanation\":\"The sum of electricity generated from all three sources (fossil fuels, nuclear, and renewables) measured in terawatt-hours (TWh). This represents the total electricity production capacity for each country.\",\"field\":\"Total Electricity\"},{\"explanation\":\"The proportion of electricity generated from renewable sources relative to total electricity production, expressed as a percentage: \\\\( \\\\text{Renewable Percentage} = \\\\frac{\\\\text{Electricity from renewables}}{\\\\text{Total Electricity}} \\\\times 100 \\\\). This metric indicates the extent of renewable energy adoption in a country's electricity mix.\",\"field\":\"Renewable Percentage\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small_csv)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 117440.0, 146139.9994, 158029.9988, ..., 10096009.77, 10502929.69, 10707219.73, nan\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., nan, nan, nan, nan\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Filter data for years 2000 and 2020\\n    df_filtered = df_energy[df_energy['Year'].isin([2000, 2020])].copy()\\n    \\n    # Calculate total electricity generation\\n    df_filtered['Total Electricity'] = (\\n        df_filtered['Electricity from fossil fuels (TWh)'] + \\n        df_filtered['Electricity from nuclear (TWh)'] + \\n        df_filtered['Electricity from renewables (TWh)']\\n    )\\n    \\n    # Calculate renewable percentage\\n    df_filtered['Renewable Percentage'] = (\\n        df_filtered['Electricity from renewables (TWh)'] / df_filtered['Total Electricity'] * 100\\n    )\\n    \\n    # Select required columns for individual countries\\n    country_data = df_filtered[['Entity', 'Year', 'Renewable Percentage']].copy()\\n    \\n    # Calculate global average for each year\\n    global_avg = df_filtered.groupby('Year').apply(\\n        lambda x: pd.Series({\\n            'Entity': 'Global Average',\\n            'Year': x['Year'].iloc[0],\\n            'Renewable Percentage': (\\n                x['Electricity from renewables (TWh)'].sum() / x['Total Electricity'].sum() * 100\\n            )\\n        })\\n    ).reset_index(drop=True)\\n    \\n    # Combine country data with global average\\n    transformed_df = pd.concat([country_data, global_avg], ignore_index=True)\\n    \\n    # Convert Year to string for better visualization\\n    transformed_df['Year'] = transformed_df['Year'].astype(str)\\n    \\n    # Sort by Entity and Year\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year']).reset_index(drop=True)\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThe code performs the following transformation steps:\\n\\n1. **Filter data** to include only records from **2000** and **2020**\\n2. Calculate **Total Electricity** generation by summing three sources: **fossil fuels**, **nuclear**, and **renewables** (all measured in TWh)\\n3. Compute **Renewable Percentage** for each country and year by dividing **Electricity from renewables** by **Total Electricity** and multiplying by 100\\n4. Extract relevant columns: **Entity** (country name), **Year**, and **Renewable Percentage**\\n5. Calculate **Global Average** renewable percentage for each year by:\\n   - Summing all countries' **renewable electricity** generation\\n   - Dividing by the sum of all countries' **total electricity** generation\\n   - Multiplying by 100 to get percentage\\n6. Combine individual country data with the **Global Average** statistics\\n7. Convert **Year** values to string format\\n8. Sort results by **Entity** name and **Year**\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"Total Electricity\\\",\\n        \\\"explanation\\\": \\\"The sum of electricity generated from all three sources (fossil fuels, nuclear, and renewables) measured in terawatt-hours (TWh). This represents the total electricity production capacity for each country.\\\"\\n    },\\n    {\\n        \\\"field\\\": \\\"Renewable Percentage\\\",\\n        \\\"explanation\\\": \\\"The proportion of electricity generated from renewable sources relative to total electricity production, expressed as a percentage: \\\\\\\\( \\\\\\\\text{Renewable Percentage} = \\\\\\\\frac{\\\\\\\\text{Electricity from renewables}}{\\\\\\\\text{Total Electricity}} \\\\\\\\times 100 \\\\\\\\). This metric indicates the extent of renewable energy adoption in a country's electricity mix.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-81\",\"displayId\":\"energy-source1\",\"names\":[\"Energy\",\"Energy Source\",\"Year\"],\"rows\":[{\"Energy\":7160.71,\"Energy Source\":\"Fossil Fuels\",\"Year\":2000},{\"Energy\":1996.65,\"Energy Source\":\"Nuclear\",\"Year\":2000},{\"Energy\":1742.56,\"Energy Source\":\"Renewables\",\"Year\":2000},{\"Energy\":7273.89,\"Energy Source\":\"Fossil Fuels\",\"Year\":2001},{\"Energy\":2037.54,\"Energy Source\":\"Nuclear\",\"Year\":2001},{\"Energy\":1690.11,\"Energy Source\":\"Renewables\",\"Year\":2001},{\"Energy\":7621.07,\"Energy Source\":\"Fossil Fuels\",\"Year\":2002},{\"Energy\":2042.18,\"Energy Source\":\"Nuclear\",\"Year\":2002},{\"Energy\":1757.63,\"Energy Source\":\"Renewables\",\"Year\":2002},{\"Energy\":8043.86,\"Energy Source\":\"Fossil Fuels\",\"Year\":2003},{\"Energy\":1998.52,\"Energy Source\":\"Nuclear\",\"Year\":2003},{\"Energy\":1804.52,\"Energy Source\":\"Renewables\",\"Year\":2003},{\"Energy\":8399.72,\"Energy Source\":\"Fossil Fuels\",\"Year\":2004},{\"Energy\":2095,\"Energy Source\":\"Nuclear\",\"Year\":2004},{\"Energy\":1952.72,\"Energy Source\":\"Renewables\",\"Year\":2004},{\"Energy\":8828.43,\"Energy Source\":\"Fossil Fuels\",\"Year\":2005},{\"Energy\":2094.4,\"Energy Source\":\"Nuclear\",\"Year\":2005},{\"Energy\":2025.26,\"Energy Source\":\"Renewables\",\"Year\":2005},{\"Energy\":9183.05,\"Energy Source\":\"Fossil Fuels\",\"Year\":2006},{\"Energy\":2120.38,\"Energy Source\":\"Nuclear\",\"Year\":2006},{\"Energy\":2165.94,\"Energy Source\":\"Renewables\",\"Year\":2006},{\"Energy\":9853.09,\"Energy Source\":\"Fossil Fuels\",\"Year\":2007},{\"Energy\":2067.04,\"Energy Source\":\"Nuclear\",\"Year\":2007},{\"Energy\":2256.79,\"Energy Source\":\"Renewables\",\"Year\":2007},{\"Energy\":9817.15,\"Energy Source\":\"Fossil Fuels\",\"Year\":2008},{\"Energy\":2043.94,\"Energy Source\":\"Nuclear\",\"Year\":2008},{\"Energy\":2496.03,\"Energy Source\":\"Renewables\",\"Year\":2008},{\"Energy\":9686.86,\"Energy Source\":\"Fossil Fuels\",\"Year\":2009},{\"Energy\":2017.25,\"Energy Source\":\"Nuclear\",\"Year\":2009},{\"Energy\":2563.95,\"Energy Source\":\"Renewables\",\"Year\":2009},{\"Energy\":10427.03,\"Energy Source\":\"Fossil Fuels\",\"Year\":2010},{\"Energy\":2083.37,\"Energy Source\":\"Nuclear\",\"Year\":2010},{\"Energy\":2802.89,\"Energy Source\":\"Renewables\",\"Year\":2010},{\"Energy\":10974.83,\"Energy Source\":\"Fossil Fuels\",\"Year\":2011},{\"Energy\":1956,\"Energy Source\":\"Nuclear\",\"Year\":2011},{\"Energy\":2997.29,\"Energy Source\":\"Renewables\",\"Year\":2011},{\"Energy\":11277.49,\"Energy Source\":\"Fossil Fuels\",\"Year\":2012},{\"Energy\":1788.26,\"Energy Source\":\"Nuclear\",\"Year\":2012},{\"Energy\":3226.1,\"Energy Source\":\"Renewables\",\"Year\":2012},{\"Energy\":11561.86,\"Energy Source\":\"Fossil Fuels\",\"Year\":2013},{\"Energy\":1813,\"Energy Source\":\"Nuclear\",\"Year\":2013},{\"Energy\":3473.9,\"Energy Source\":\"Renewables\",\"Year\":2013},{\"Energy\":11761.51,\"Energy Source\":\"Fossil Fuels\",\"Year\":2014},{\"Energy\":1847.87,\"Energy Source\":\"Nuclear\",\"Year\":2014},{\"Energy\":3753.03,\"Energy Source\":\"Renewables\",\"Year\":2014},{\"Energy\":11653.61,\"Energy Source\":\"Fossil Fuels\",\"Year\":2015},{\"Energy\":1886.61,\"Energy Source\":\"Nuclear\",\"Year\":2015},{\"Energy\":3903.7,\"Energy Source\":\"Renewables\",\"Year\":2015},{\"Energy\":11785.35,\"Energy Source\":\"Fossil Fuels\",\"Year\":2016},{\"Energy\":1906.92,\"Energy Source\":\"Nuclear\",\"Year\":2016},{\"Energy\":4186.83,\"Energy Source\":\"Renewables\",\"Year\":2016},{\"Energy\":12003.24,\"Energy Source\":\"Fossil Fuels\",\"Year\":2017},{\"Energy\":1942.94,\"Energy Source\":\"Nuclear\",\"Year\":2017},{\"Energy\":4500.22,\"Energy Source\":\"Renewables\",\"Year\":2017},{\"Energy\":12445.24,\"Energy Source\":\"Fossil Fuels\",\"Year\":2018},{\"Energy\":2016.82,\"Energy Source\":\"Nuclear\",\"Year\":2018},{\"Energy\":4834.65,\"Energy Source\":\"Renewables\",\"Year\":2018},{\"Energy\":12355.91,\"Energy Source\":\"Fossil Fuels\",\"Year\":2019},{\"Energy\":2073.87,\"Energy Source\":\"Nuclear\",\"Year\":2019},{\"Energy\":5146.11,\"Energy Source\":\"Renewables\",\"Year\":2019},{\"Energy\":12032.75,\"Energy Source\":\"Fossil Fuels\",\"Year\":2020},{\"Energy\":1974.46,\"Energy Source\":\"Nuclear\",\"Year\":2020},{\"Energy\":5497.73,\"Energy Source\":\"Renewables\",\"Year\":2020}],\"metadata\":{\"Energy\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Energy Source\":{\"type\":\"string\",\"semanticType\":\"String\",\"levels\":[\"Fossil Fuels\",\"Nuclear\",\"Renewables\"]},\"Year\":{\"type\":\"number\",\"semanticType\":\"Year\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Group by Year and sum electricity generation from all countries\\n    global_energy = df_energy.groupby('Year').agg({\\n        'Electricity from fossil fuels (TWh)': 'sum',\\n        'Electricity from nuclear (TWh)': 'sum',\\n        'Electricity from renewables (TWh)': 'sum'\\n    }).reset_index()\\n    \\n    # Rename columns for clarity\\n    global_energy.columns = ['Year', 'Fossil Fuels', 'Nuclear', 'Renewables']\\n    \\n    # Transform to long format\\n    transformed_df = pd.melt(\\n        global_energy,\\n        id_vars=['Year'],\\n        value_vars=['Fossil Fuels', 'Nuclear', 'Renewables'],\\n        var_name='Energy Source',\\n        value_name='Energy'\\n    )\\n    \\n    # Sort by Year and Energy Source\\n    transformed_df = transformed_df.sort_values(['Year', 'Energy Source']).reset_index(drop=True)\\n    \\n    return transformed_df\\n\",\"source\":[\"global-energy-20-small.csv\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 117440.0, 146139.9994, 158029.9988, ..., 5736319.824, 5738290.039, nan, 9861099.609\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., 61.99, 62.21, 63.02, 63.71\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\n{\\n    \\\"instruction\\\": \\\"compare each countries renewable between 2000 and 2020\\\",\\n    \\\"chart_type\\\": \\\"Grouped Bar Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Renewable Energy\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Compare renewable energy (Electricity from renewables) for each country between the years 2000 and 2020. Filter the data to include only years 2000 and 2020, and prepare the output with country names, year, and renewable energy values for visualization as a grouped bar chart.\\\",\\n    \\\"display_instruction\\\": \\\"Compare **renewable energy** by **country** between **2000** and **2020**\\\",\\n    \\\"output_fields\\\": [\\\"Entity\\\", \\\"Year\\\", \\\"Electricity from renewables (TWh)\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Electricity from renewables (TWh)\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to compare renewable energy across countries between 2000 and 2020. The output field 'Renewable Energy' mentioned in the original chart_encodings maps to 'Electricity from renewables (TWh)' in the dataset. To create a grouped bar chart comparing these two years, we need to filter the data to only include years 2000 and 2020, and output the Entity (country), Year, and the renewable energy values. The chart_encodings are updated to use the actual column name from the dataset.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Filter data for years 2000 and 2020\\n    transformed_df = df_energy[df_energy['Year'].isin([2000, 2020])].copy()\\n    \\n    # Select only the required columns\\n    transformed_df = transformed_df[['Entity', 'Year', 'Electricity from renewables (TWh)']]\\n    \\n    # Convert Year to string for better visualization as a categorical variable\\n    transformed_df['Year'] = transformed_df['Year'].astype(str)\\n    \\n    # Sort by Entity and Year for better readability\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year']).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n   Electricity from renewables (TWh)     Entity  Year\\n0                              17.11  Australia  2000\\n1                              63.99  Australia  2020\\n2                             308.77     Brazil  2000\\n3                             520.01     Brazil  2020\\n4                             363.70     Canada  2000\\n5                             429.24     Canada  2020\\n6                             225.56      China  2000\\n7                            2184.94      China  2020\\n8                              67.83     France  2000\\n9                             125.28     France  2020\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"show their renewable percentage instead, and add an entity to show global average\\\",\\n    \\\"chart_type\\\": \\\"Grouped Bar Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Electricity from renewables (TWh)\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Calculate the renewable energy percentage (proportion of renewables to total electricity generation from all sources) for each country between 2000 and 2020. Add a 'Global Average' entity that represents the worldwide average renewable percentage for each year. The output should include Entity (with 'Global Average' added), Year, and the renewable percentage.\\\",\\n    \\\"display_instruction\\\": \\\"Show **renewable energy percentage** by **country** with **global average** for **2000** and **2020**\\\",\\n    \\\"output_fields\\\": [\\\"Entity\\\", \\\"Year\\\", \\\"Renewable Percentage\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Renewable Percentage\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to see renewable percentage instead of absolute values, and wants to add a global average entity for comparison. Renewable percentage is calculated as the ratio of renewable energy to total electricity generation (fossil fuels + nuclear + renewables). A 'Global Average' entity needs to be computed by aggregating all countries' data for each year. The y-axis encoding is updated to reflect the new metric 'Renewable Percentage'.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Filter data for years 2000 and 2020\\n    df_filtered = df_energy[df_energy['Year'].isin([2000, 2020])].copy()\\n    \\n    # Calculate total electricity generation\\n    df_filtered['Total Electricity'] = (\\n        df_filtered['Electricity from fossil fuels (TWh)'] + \\n        df_filtered['Electricity from nuclear (TWh)'] + \\n        df_filtered['Electricity from renewables (TWh)']\\n    )\\n    \\n    # Calculate renewable percentage\\n    df_filtered['Renewable Percentage'] = (\\n        df_filtered['Electricity from renewables (TWh)'] / df_filtered['Total Electricity'] * 100\\n    )\\n    \\n    # Select required columns for individual countries\\n    country_data = df_filtered[['Entity', 'Year', 'Renewable Percentage']].copy()\\n    \\n    # Calculate global average for each year\\n    global_avg = df_filtered.groupby('Year').apply(\\n        lambda x: pd.Series({\\n            'Entity': 'Global Average',\\n            'Year': x['Year'].iloc[0],\\n            'Renewable Percentage': (\\n                x['Electricity from renewables (TWh)'].sum() / x['Total Electricity'].sum() * 100\\n            )\\n        })\\n    ).reset_index(drop=True)\\n    \\n    # Combine country data with global average\\n    transformed_df = pd.concat([country_data, global_avg], ignore_index=True)\\n    \\n    # Convert Year to string for better visualization\\n    transformed_df['Year'] = transformed_df['Year'].astype(str)\\n    \\n    # Sort by Entity and Year\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year']).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n      Entity  Renewable Percentage  Year\\n0  Australia              8.634437  2000\\n1  Australia             25.503168  2020\\n2     Brazil             90.130772  2000\\n3     Brazil             84.641177  2020\\n4     Canada             61.809592  2000\\n5     Canada             68.779644  2020\\n6      China             16.639127  2000\\n7      China             28.246461  2020\\n8     France             12.711769  2000\\n9     France             23.761024  2020\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"show global energy composition over time\\\",\\n    \\\"chart_type\\\": \\\"Custom Area\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"Energy\\\",\\n        \\\"color\\\": \\\"Energy Source\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Show the global energy composition over time by aggregating electricity generation from all countries for each year, broken down by energy source (fossil fuels, nuclear, and renewables). The output should be in long format with Year, Energy Source, and Energy values to support a stacked area chart visualization.\\\",\\n    \\\"display_instruction\\\": \\\"Show global **energy composition** by **energy source** over time\\\",\\n    \\\"output_fields\\\": [\\\"Year\\\", \\\"Energy Source\\\", \\\"Energy\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"Energy\\\",\\n        \\\"color\\\": \\\"Energy Source\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to visualize global energy composition over time, which requires aggregating electricity generation data across all countries for each year and breaking it down by energy source type. The data needs to be transformed into long format where each row represents a year-energy source combination, with the total energy value for that source globally. This follows up from the previous renewable percentage analysis by showing the overall energy mix trends rather than focusing on specific countries or percentages.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Group by Year and sum electricity generation from all countries\\n    global_energy = df_energy.groupby('Year').agg({\\n        'Electricity from fossil fuels (TWh)': 'sum',\\n        'Electricity from nuclear (TWh)': 'sum',\\n        'Electricity from renewables (TWh)': 'sum'\\n    }).reset_index()\\n    \\n    # Rename columns for clarity\\n    global_energy.columns = ['Year', 'Fossil Fuels', 'Nuclear', 'Renewables']\\n    \\n    # Transform to long format\\n    transformed_df = pd.melt(\\n        global_energy,\\n        id_vars=['Year'],\\n        value_vars=['Fossil Fuels', 'Nuclear', 'Renewables'],\\n        var_name='Energy Source',\\n        value_name='Energy'\\n    )\\n    \\n    # Sort by Year and Energy Source\\n    transformed_df = transformed_df.sort_values(['Year', 'Energy Source']).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"table-27\",\"sourceTableIds\":[\"global-energy-20-small.csv\"],\"instruction\":\"show global energy composition over time\",\"displayInstruction\":\"Show global **energy composition** by **energy source** over time\",\"chart\":{\"id\":\"chart-1760738942326\",\"chartType\":\"Custom Area\",\"encodingMap\":{\"x\":{\"channel\":\"x\",\"bin\":false,\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"y\":{\"channel\":\"y\",\"bin\":false,\"fieldID\":\"concept-1760738917347\"},\"x2\":{\"channel\":\"x2\",\"bin\":false},\"y2\":{\"channel\":\"y2\",\"bin\":false},\"color\":{\"channel\":\"color\",\"bin\":false,\"fieldID\":\"concept-1760738921927\"},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-27\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-81\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"- Group the energy data by **Year** and aggregate electricity generation values across all countries by summing **Electricity from fossil fuels (TWh)**, **Electricity from nuclear (TWh)**, and **Electricity from renewables (TWh)**\\n- Rename the aggregated columns to simplified labels: **Fossil Fuels**, **Nuclear**, and **Renewables**\\n- Transform the data from wide format to long format by unpivoting the three energy source columns into two columns: **Energy Source** (containing the type of energy) and **Energy** (containing the generation value in TWh)\\n- Sort the resulting dataset by **Year** and **Energy Source** for consistent ordering\",\"concepts\":[],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small_csv)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 158029.9988, 190729.9957, 209229.9957, ..., nan, 4956060.059, nan, 9861099.609\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., nan, nan, nan, nan\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Group by Year and sum electricity generation from all countries\\n    global_energy = df_energy.groupby('Year').agg({\\n        'Electricity from fossil fuels (TWh)': 'sum',\\n        'Electricity from nuclear (TWh)': 'sum',\\n        'Electricity from renewables (TWh)': 'sum'\\n    }).reset_index()\\n    \\n    # Rename columns for clarity\\n    global_energy.columns = ['Year', 'Fossil Fuels', 'Nuclear', 'Renewables']\\n    \\n    # Transform to long format\\n    transformed_df = pd.melt(\\n        global_energy,\\n        id_vars=['Year'],\\n        value_vars=['Fossil Fuels', 'Nuclear', 'Renewables'],\\n        var_name='Energy Source',\\n        value_name='Energy'\\n    )\\n    \\n    # Sort by Year and Energy Source\\n    transformed_df = transformed_df.sort_values(['Year', 'Energy Source']).reset_index(drop=True)\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\n- Group the energy data by **Year** and aggregate electricity generation values across all countries by summing **Electricity from fossil fuels (TWh)**, **Electricity from nuclear (TWh)**, and **Electricity from renewables (TWh)**\\n- Rename the aggregated columns to simplified labels: **Fossil Fuels**, **Nuclear**, and **Renewables**\\n- Transform the data from wide format to long format by unpivoting the three energy source columns into two columns: **Energy Source** (containing the type of energy) and **Energy** (containing the generation value in TWh)\\n- Sort the resulting dataset by **Year** and **Energy Source** for consistent ordering\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-10\",\"displayId\":\"energy-source2\",\"names\":[\"Energy\",\"Energy Source\",\"Entity\",\"Year\"],\"rows\":[{\"Energy\":1113.3,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2000},{\"Energy\":16.74,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2000},{\"Energy\":225.56,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2000},{\"Energy\":1182.59,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2001},{\"Energy\":17.47,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2001},{\"Energy\":280.73,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2001},{\"Energy\":1337.46,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2002},{\"Energy\":25.13,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2002},{\"Energy\":291.41,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2002},{\"Energy\":1579.96,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2003},{\"Energy\":43.34,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2003},{\"Energy\":287.28,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2003},{\"Energy\":1795.41,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2004},{\"Energy\":50.47,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2004},{\"Energy\":357.43,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2004},{\"Energy\":2042.8,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2005},{\"Energy\":53.09,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2005},{\"Energy\":404.37,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2005},{\"Energy\":2364.16,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2006},{\"Energy\":54.84,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2006},{\"Energy\":446.72,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2006},{\"Energy\":2718.7,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2007},{\"Energy\":62.13,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2007},{\"Energy\":500.71,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2007},{\"Energy\":2762.29,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2008},{\"Energy\":68.39,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2008},{\"Energy\":665.08,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2008},{\"Energy\":2980.2,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2009},{\"Energy\":70.05,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2009},{\"Energy\":664.39,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2009},{\"Energy\":3326.19,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2010},{\"Energy\":74.74,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2010},{\"Energy\":786.38,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2010},{\"Energy\":3811.77,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2011},{\"Energy\":87.2,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2011},{\"Energy\":792.38,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2011},{\"Energy\":3869.38,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2012},{\"Energy\":98.32,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2012},{\"Energy\":999.56,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2012},{\"Energy\":4203.77,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2013},{\"Energy\":111.5,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2013},{\"Energy\":1093.37,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2013},{\"Energy\":4345.86,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2014},{\"Energy\":133.22,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2014},{\"Energy\":1289.23,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2014},{\"Energy\":4222.76,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2015},{\"Energy\":171.38,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2015},{\"Energy\":1393.66,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2015},{\"Energy\":4355,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2016},{\"Energy\":213.18,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2016},{\"Energy\":1522.79,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2016},{\"Energy\":4643.1,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2017},{\"Energy\":248.1,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2017},{\"Energy\":1667.06,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2017},{\"Energy\":4990.28,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2018},{\"Energy\":295,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2018},{\"Energy\":1835.32,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2018},{\"Energy\":5098.22,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2019},{\"Energy\":348.7,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2019},{\"Energy\":2014.57,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2019},{\"Energy\":5184.13,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"China\",\"Year\":2020},{\"Energy\":366.2,\"Energy Source\":\"Nuclear\",\"Entity\":\"China\",\"Year\":2020},{\"Energy\":2184.94,\"Energy Source\":\"Renewables\",\"Entity\":\"China\",\"Year\":2020},{\"Energy\":475.35,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2000},{\"Energy\":15.77,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2000},{\"Energy\":80.27,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2000},{\"Energy\":491.01,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2001},{\"Energy\":18.89,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2001},{\"Energy\":76.19,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2001},{\"Energy\":517.51,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2002},{\"Energy\":19.35,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2002},{\"Energy\":72.78,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2002},{\"Energy\":545.36,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2003},{\"Energy\":18.14,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2003},{\"Energy\":74.63,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2003},{\"Energy\":567.86,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2004},{\"Energy\":21.26,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2004},{\"Energy\":109.2,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2004},{\"Energy\":579.32,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2005},{\"Energy\":17.73,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2005},{\"Energy\":107.47,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2005},{\"Energy\":599.24,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2006},{\"Energy\":17.63,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2006},{\"Energy\":127.56,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2006},{\"Energy\":636.68,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2007},{\"Energy\":17.83,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2007},{\"Energy\":141.75,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2007},{\"Energy\":674.27,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2008},{\"Energy\":15.23,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2008},{\"Energy\":138.91,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2008},{\"Energy\":728.56,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2009},{\"Energy\":16.82,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2009},{\"Energy\":134.33,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2009},{\"Energy\":771.78,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2010},{\"Energy\":23.08,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2010},{\"Energy\":142.61,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2010},{\"Energy\":828.16,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2011},{\"Energy\":32.22,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2011},{\"Energy\":173.62,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2011},{\"Energy\":893.45,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2012},{\"Energy\":33.14,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2012},{\"Energy\":165.25,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2012},{\"Energy\":924.93,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2013},{\"Energy\":33.31,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2013},{\"Energy\":187.9,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2013},{\"Energy\":1025.29,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2014},{\"Energy\":34.69,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2014},{\"Energy\":202.04,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2014},{\"Energy\":1080.44,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2015},{\"Energy\":38.31,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2015},{\"Energy\":203.21,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2015},{\"Energy\":1155.52,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2016},{\"Energy\":37.9,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2016},{\"Energy\":208.21,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2016},{\"Energy\":1198.85,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2017},{\"Energy\":37.41,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2017},{\"Energy\":234.9,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2017},{\"Energy\":1276.32,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2018},{\"Energy\":39.05,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2018},{\"Energy\":263.61,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2018},{\"Energy\":1273.59,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2019},{\"Energy\":45.16,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2019},{\"Energy\":303.16,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2019},{\"Energy\":1202.34,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"India\",\"Year\":2020},{\"Energy\":44.61,\"Energy Source\":\"Nuclear\",\"Entity\":\"India\",\"Year\":2020},{\"Energy\":315.76,\"Energy Source\":\"Renewables\",\"Entity\":\"India\",\"Year\":2020},{\"Energy\":2697.28,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2000},{\"Energy\":753.89,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2000},{\"Energy\":350.93,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2000},{\"Energy\":2678.68,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2001},{\"Energy\":768.83,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2001},{\"Energy\":280.06,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2001},{\"Energy\":2727.83,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2002},{\"Energy\":780.06,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2002},{\"Energy\":336.34,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2002},{\"Energy\":2756.03,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2003},{\"Energy\":763.73,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2003},{\"Energy\":349.18,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2003},{\"Energy\":2818.28,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2004},{\"Energy\":788.53,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2004},{\"Energy\":345.14,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2004},{\"Energy\":2899.96,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2005},{\"Energy\":781.99,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2005},{\"Energy\":353.04,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2005},{\"Energy\":2878.56,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2006},{\"Energy\":787.22,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2006},{\"Energy\":381.16,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2006},{\"Energy\":2988.24,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2007},{\"Energy\":806.42,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2007},{\"Energy\":347.91,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2007},{\"Energy\":2924.21,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2008},{\"Energy\":806.21,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2008},{\"Energy\":377.11,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2008},{\"Energy\":2725.41,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2009},{\"Energy\":798.85,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2009},{\"Energy\":415.56,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2009},{\"Energy\":2882.49,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2010},{\"Energy\":806.97,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2010},{\"Energy\":424.48,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2010},{\"Energy\":2788.93,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2011},{\"Energy\":790.2,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2011},{\"Energy\":509.74,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2011},{\"Energy\":2779.02,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2012},{\"Energy\":769.33,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2012},{\"Energy\":492.32,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2012},{\"Energy\":2746.21,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2013},{\"Energy\":789.02,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2013},{\"Energy\":520.38,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2013},{\"Energy\":2752.01,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2014},{\"Energy\":797.17,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2014},{\"Energy\":546.83,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2014},{\"Energy\":2730.32,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2015},{\"Energy\":797.18,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2015},{\"Energy\":556.49,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2015},{\"Energy\":2656.96,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2016},{\"Energy\":805.69,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2016},{\"Energy\":624.91,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2016},{\"Energy\":2540.17,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2017},{\"Energy\":804.95,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2017},{\"Energy\":707.19,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2017},{\"Energy\":2661.3,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2018},{\"Energy\":807.08,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2018},{\"Energy\":733.17,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2018},{\"Energy\":2588.21,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2019},{\"Energy\":809.41,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2019},{\"Energy\":760.76,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2019},{\"Energy\":2431.9,\"Energy Source\":\"Fossil Fuels\",\"Entity\":\"United States\",\"Year\":2020},{\"Energy\":789.88,\"Energy Source\":\"Nuclear\",\"Entity\":\"United States\",\"Year\":2020},{\"Energy\":821.4,\"Energy Source\":\"Renewables\",\"Entity\":\"United States\",\"Year\":2020}],\"metadata\":{\"Energy\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Energy Source\":{\"type\":\"string\",\"semanticType\":\"String\",\"levels\":[\"Fossil Fuels\",\"Nuclear\",\"Renewables\"]},\"Entity\":{\"type\":\"string\",\"semanticType\":\"Location\"},\"Year\":{\"type\":\"number\",\"semanticType\":\"Year\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Calculate total CO2 emissions by country across all years\\n    total_co2_by_country = df_energy.groupby('Entity')['Value_co2_emissions_kt_by_country'].sum().reset_index()\\n    \\n    # Get top 3 CO2 emitting countries\\n    top3_countries = total_co2_by_country.nlargest(3, 'Value_co2_emissions_kt_by_country')['Entity'].tolist()\\n    \\n    # Filter data for top 3 countries\\n    df_top3 = df_energy[df_energy['Entity'].isin(top3_countries)].copy()\\n    \\n    # Select relevant columns and rename for clarity\\n    df_top3 = df_top3[['Year', 'Entity', 'Electricity from fossil fuels (TWh)', \\n                        'Electricity from nuclear (TWh)', 'Electricity from renewables (TWh)']].copy()\\n    \\n    df_top3.columns = ['Year', 'Entity', 'Fossil Fuels', 'Nuclear', 'Renewables']\\n    \\n    # Transform to long format\\n    transformed_df = pd.melt(\\n        df_top3,\\n        id_vars=['Year', 'Entity'],\\n        value_vars=['Fossil Fuels', 'Nuclear', 'Renewables'],\\n        var_name='Energy Source',\\n        value_name='Energy'\\n    )\\n    \\n    # Sort by Entity, Year, and Energy Source\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year', 'Energy Source']).reset_index(drop=True)\\n    \\n    return transformed_df\\n\",\"source\":[\"global-energy-20-small.csv\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 117440.0, 146139.9994, 158029.9988, ..., 5736319.824, 5738290.039, nan, 9861099.609\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., 61.99, 62.21, 63.02, 63.71\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\n{\\n    \\\"instruction\\\": \\\"compare each countries renewable between 2000 and 2020\\\",\\n    \\\"chart_type\\\": \\\"Grouped Bar Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Renewable Energy\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Compare renewable energy (Electricity from renewables) for each country between the years 2000 and 2020. Filter the data to include only years 2000 and 2020, and prepare the output with country names, year, and renewable energy values for visualization as a grouped bar chart.\\\",\\n    \\\"display_instruction\\\": \\\"Compare **renewable energy** by **country** between **2000** and **2020**\\\",\\n    \\\"output_fields\\\": [\\\"Entity\\\", \\\"Year\\\", \\\"Electricity from renewables (TWh)\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Electricity from renewables (TWh)\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to compare renewable energy across countries between 2000 and 2020. The output field 'Renewable Energy' mentioned in the original chart_encodings maps to 'Electricity from renewables (TWh)' in the dataset. To create a grouped bar chart comparing these two years, we need to filter the data to only include years 2000 and 2020, and output the Entity (country), Year, and the renewable energy values. The chart_encodings are updated to use the actual column name from the dataset.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Filter data for years 2000 and 2020\\n    transformed_df = df_energy[df_energy['Year'].isin([2000, 2020])].copy()\\n    \\n    # Select only the required columns\\n    transformed_df = transformed_df[['Entity', 'Year', 'Electricity from renewables (TWh)']]\\n    \\n    # Convert Year to string for better visualization as a categorical variable\\n    transformed_df['Year'] = transformed_df['Year'].astype(str)\\n    \\n    # Sort by Entity and Year for better readability\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year']).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n   Electricity from renewables (TWh)     Entity  Year\\n0                              17.11  Australia  2000\\n1                              63.99  Australia  2020\\n2                             308.77     Brazil  2000\\n3                             520.01     Brazil  2020\\n4                             363.70     Canada  2000\\n5                             429.24     Canada  2020\\n6                             225.56      China  2000\\n7                            2184.94      China  2020\\n8                              67.83     France  2000\\n9                             125.28     France  2020\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"show their renewable percentage instead, and add an entity to show global average\\\",\\n    \\\"chart_type\\\": \\\"Grouped Bar Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Electricity from renewables (TWh)\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Calculate the renewable energy percentage (proportion of renewables to total electricity generation from all sources) for each country between 2000 and 2020. Add a 'Global Average' entity that represents the worldwide average renewable percentage for each year. The output should include Entity (with 'Global Average' added), Year, and the renewable percentage.\\\",\\n    \\\"display_instruction\\\": \\\"Show **renewable energy percentage** by **country** with **global average** for **2000** and **2020**\\\",\\n    \\\"output_fields\\\": [\\\"Entity\\\", \\\"Year\\\", \\\"Renewable Percentage\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Entity\\\",\\n        \\\"y\\\": \\\"Renewable Percentage\\\",\\n        \\\"color\\\": \\\"Year\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to see renewable percentage instead of absolute values, and wants to add a global average entity for comparison. Renewable percentage is calculated as the ratio of renewable energy to total electricity generation (fossil fuels + nuclear + renewables). A 'Global Average' entity needs to be computed by aggregating all countries' data for each year. The y-axis encoding is updated to reflect the new metric 'Renewable Percentage'.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Filter data for years 2000 and 2020\\n    df_filtered = df_energy[df_energy['Year'].isin([2000, 2020])].copy()\\n    \\n    # Calculate total electricity generation\\n    df_filtered['Total Electricity'] = (\\n        df_filtered['Electricity from fossil fuels (TWh)'] + \\n        df_filtered['Electricity from nuclear (TWh)'] + \\n        df_filtered['Electricity from renewables (TWh)']\\n    )\\n    \\n    # Calculate renewable percentage\\n    df_filtered['Renewable Percentage'] = (\\n        df_filtered['Electricity from renewables (TWh)'] / df_filtered['Total Electricity'] * 100\\n    )\\n    \\n    # Select required columns for individual countries\\n    country_data = df_filtered[['Entity', 'Year', 'Renewable Percentage']].copy()\\n    \\n    # Calculate global average for each year\\n    global_avg = df_filtered.groupby('Year').apply(\\n        lambda x: pd.Series({\\n            'Entity': 'Global Average',\\n            'Year': x['Year'].iloc[0],\\n            'Renewable Percentage': (\\n                x['Electricity from renewables (TWh)'].sum() / x['Total Electricity'].sum() * 100\\n            )\\n        })\\n    ).reset_index(drop=True)\\n    \\n    # Combine country data with global average\\n    transformed_df = pd.concat([country_data, global_avg], ignore_index=True)\\n    \\n    # Convert Year to string for better visualization\\n    transformed_df['Year'] = transformed_df['Year'].astype(str)\\n    \\n    # Sort by Entity and Year\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year']).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n      Entity  Renewable Percentage  Year\\n0  Australia              8.634437  2000\\n1  Australia             25.503168  2020\\n2     Brazil             90.130772  2000\\n3     Brazil             84.641177  2020\\n4     Canada             61.809592  2000\\n5     Canada             68.779644  2020\\n6      China             16.639127  2000\\n7      China             28.246461  2020\\n8     France             12.711769  2000\\n9     France             23.761024  2020\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"show global energy composition over time\\\",\\n    \\\"chart_type\\\": \\\"Custom Area\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"Energy\\\",\\n        \\\"color\\\": \\\"Energy Source\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Show the global energy composition over time by aggregating electricity generation from all countries for each year, broken down by energy source (fossil fuels, nuclear, and renewables). The output should be in long format with Year, Energy Source, and Energy values to support a stacked area chart visualization.\\\",\\n    \\\"display_instruction\\\": \\\"Show global **energy composition** by **energy source** over time\\\",\\n    \\\"output_fields\\\": [\\\"Year\\\", \\\"Energy Source\\\", \\\"Energy\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"Energy\\\",\\n        \\\"color\\\": \\\"Energy Source\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to visualize global energy composition over time, which requires aggregating electricity generation data across all countries for each year and breaking it down by energy source type. The data needs to be transformed into long format where each row represents a year-energy source combination, with the total energy value for that source globally. This follows up from the previous renewable percentage analysis by showing the overall energy mix trends rather than focusing on specific countries or percentages.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Group by Year and sum electricity generation from all countries\\n    global_energy = df_energy.groupby('Year').agg({\\n        'Electricity from fossil fuels (TWh)': 'sum',\\n        'Electricity from nuclear (TWh)': 'sum',\\n        'Electricity from renewables (TWh)': 'sum'\\n    }).reset_index()\\n    \\n    # Rename columns for clarity\\n    global_energy.columns = ['Year', 'Fossil Fuels', 'Nuclear', 'Renewables']\\n    \\n    # Transform to long format\\n    transformed_df = pd.melt(\\n        global_energy,\\n        id_vars=['Year'],\\n        value_vars=['Fossil Fuels', 'Nuclear', 'Renewables'],\\n        var_name='Energy Source',\\n        value_name='Energy'\\n    )\\n    \\n    # Sort by Year and Energy Source\\n    transformed_df = transformed_df.sort_values(['Year', 'Energy Source']).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n    Energy Energy Source  Year\\n0  7160.71  Fossil Fuels  2000\\n1  1996.65       Nuclear  2000\\n2  1742.56    Renewables  2000\\n3  7273.89  Fossil Fuels  2001\\n4  2037.54       Nuclear  2001\\n5  1690.11    Renewables  2001\\n6  7621.07  Fossil Fuels  2002\\n7  2042.18       Nuclear  2002\\n8  1757.63    Renewables  2002\\n9  8043.86  Fossil Fuels  2003\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"show the composition of top 3 CO2 emitting countries\\\",\\n    \\\"chart_type\\\": \\\"Custom Area\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"Energy\\\",\\n        \\\"color\\\": \\\"Energy Source\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Identify the top 3 CO2 emitting countries based on total CO2 emissions across all years, then show the energy composition (fossil fuels, nuclear, and renewables) for each of these countries over time. The output should be in long format with Year, Entity (country), Energy Source, and Energy values to support faceted area charts.\\\",\\n    \\\"display_instruction\\\": \\\"Show **energy composition** of **top 3 CO2 emitting countries** over time\\\",\\n    \\\"output_fields\\\": [\\\"Year\\\", \\\"Entity\\\", \\\"Energy Source\\\", \\\"Energy\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Year\\\",\\n        \\\"y\\\": \\\"Energy\\\",\\n        \\\"color\\\": \\\"Energy Source\\\",\\n        \\\"facet\\\": \\\"Entity\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to see the energy composition specifically for the top 3 CO2 emitting countries over time, following up from the global energy composition view. We need to identify which countries have the highest total CO2 emissions, filter the data for those countries, and transform it into long format by energy source. A facet encoding is added to show separate area charts for each of the top 3 countries, allowing comparison of their individual energy compositions over time.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Calculate total CO2 emissions by country across all years\\n    total_co2_by_country = df_energy.groupby('Entity')['Value_co2_emissions_kt_by_country'].sum().reset_index()\\n    \\n    # Get top 3 CO2 emitting countries\\n    top3_countries = total_co2_by_country.nlargest(3, 'Value_co2_emissions_kt_by_country')['Entity'].tolist()\\n    \\n    # Filter data for top 3 countries\\n    df_top3 = df_energy[df_energy['Entity'].isin(top3_countries)].copy()\\n    \\n    # Select relevant columns and rename for clarity\\n    df_top3 = df_top3[['Year', 'Entity', 'Electricity from fossil fuels (TWh)', \\n                        'Electricity from nuclear (TWh)', 'Electricity from renewables (TWh)']].copy()\\n    \\n    df_top3.columns = ['Year', 'Entity', 'Fossil Fuels', 'Nuclear', 'Renewables']\\n    \\n    # Transform to long format\\n    transformed_df = pd.melt(\\n        df_top3,\\n        id_vars=['Year', 'Entity'],\\n        value_vars=['Fossil Fuels', 'Nuclear', 'Renewables'],\\n        var_name='Energy Source',\\n        value_name='Energy'\\n    )\\n    \\n    # Sort by Entity, Year, and Energy Source\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year', 'Energy Source']).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"table-81\",\"sourceTableIds\":[\"global-energy-20-small.csv\"],\"instruction\":\"show the composition of top 3 CO2 emitting countries\",\"displayInstruction\":\"Show **energy composition** of **top 3 CO2 emitting countries** over time\",\"chart\":{\"id\":\"chart-1760739075465\",\"chartType\":\"Custom Area\",\"encodingMap\":{\"x\":{\"channel\":\"x\",\"bin\":false,\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"y\":{\"channel\":\"y\",\"bin\":false,\"fieldID\":\"concept-1760738917347\"},\"x2\":{},\"y2\":{\"channel\":\"y2\",\"bin\":false},\"color\":{\"fieldID\":\"concept-1760738921927\",\"sortBy\":\"[\\\"Fossil Fuels\\\",\\\"Nuclear\\\",\\\"Renewables\\\"]\"},\"column\":{},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-81\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-10\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"The code performs the following high-level transformations:\\n\\n1. **Identifies top polluters**: Calculates the total `Value_co2_emissions_kt_by_country` across all years for each `Entity` (country), then selects the **top 3** countries with the highest cumulative CO2 emissions.\\n\\n2. **Filters the dataset**: Retains only records for the **top 3 CO2-emitting countries** from the original energy data.\\n\\n3. **Simplifies column structure**: Extracts the relevant energy production columns (`Electricity from fossil fuels (TWh)`, `Electricity from nuclear (TWh)`, `Electricity from renewables (TWh)`) and renames them to **Fossil Fuels**, **Nuclear**, and **Renewables** for clarity.\\n\\n4. **Reshapes data to long format**: Transforms the data from wide format (separate columns for each energy source) to long format, where each row represents a specific `Year`, `Entity`, and `Energy Source` combination with its corresponding `Energy` production value.\\n\\n5. **Sorts the output**: Orders the final dataset by `Entity`, `Year`, and `Energy Source` for systematic presentation.\",\"concepts\":[],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (global_energy_20_small_csv)\\n\\n## fields\\n\\t*Year -- type: int64, values: 2000, 2001, 2002, ..., 2017, 2018, 2019, 2020\\n\\t*Entity -- type: object, values: Australia, Brazil, Canada, ..., Thailand, Ukraine, United Kingdom, United States\\n\\t*Value_co2_emissions_kt_by_country -- type: float64, values: 117440.0, 146139.9994, 158029.9988, ..., 5593029.785, 5736319.824, 5738290.039, 9861099.609\\n\\t*Electricity from fossil fuels (TWh) -- type: float64, values: 28.87, 31.62, 33.5, ..., 4643.1, 4990.28, 5098.22, 5184.13\\n\\t*Electricity from nuclear (TWh) -- type: float64, values: 0.0, 3.24, 4.94, ..., 62.21, 63.02, 63.71, 439.73\\n\\t*Electricity from renewables (TWh) -- type: float64, values: 0.0, 0.01, 0.03, ..., 1667.06, 1835.32, 2014.57, 2184.94\\n\\n## sample\\n   Year     Entity  Value_co2_emissions_kt_by_country  Electricity from fossil fuels (TWh)  Electricity from nuclear (TWh)  Electricity from renewables (TWh)\\n0  2000  Australia                        339450.0000                               181.05                               0                              17.11\\n1  2001  Australia                        345640.0000                               194.33                               0                              17.40\\n2  2002  Australia                        353369.9951                               197.29                               0                              17.35\\n3  2003  Australia                        352579.9866                               195.13                               0                              18.50\\n4  2004  Australia                        365809.9976                               203.66                               0                              19.41\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_energy):\\n    # Calculate total CO2 emissions by country across all years\\n    total_co2_by_country = df_energy.groupby('Entity')['Value_co2_emissions_kt_by_country'].sum().reset_index()\\n    \\n    # Get top 3 CO2 emitting countries\\n    top3_countries = total_co2_by_country.nlargest(3, 'Value_co2_emissions_kt_by_country')['Entity'].tolist()\\n    \\n    # Filter data for top 3 countries\\n    df_top3 = df_energy[df_energy['Entity'].isin(top3_countries)].copy()\\n    \\n    # Select relevant columns and rename for clarity\\n    df_top3 = df_top3[['Year', 'Entity', 'Electricity from fossil fuels (TWh)', \\n                        'Electricity from nuclear (TWh)', 'Electricity from renewables (TWh)']].copy()\\n    \\n    df_top3.columns = ['Year', 'Entity', 'Fossil Fuels', 'Nuclear', 'Renewables']\\n    \\n    # Transform to long format\\n    transformed_df = pd.melt(\\n        df_top3,\\n        id_vars=['Year', 'Entity'],\\n        value_vars=['Fossil Fuels', 'Nuclear', 'Renewables'],\\n        var_name='Energy Source',\\n        value_name='Energy'\\n    )\\n    \\n    # Sort by Entity, Year, and Energy Source\\n    transformed_df = transformed_df.sort_values(['Entity', 'Year', 'Energy Source']).reset_index(drop=True)\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThe code performs the following high-level transformations:\\n\\n1. **Identifies top polluters**: Calculates the total `Value_co2_emissions_kt_by_country` across all years for each `Entity` (country), then selects the **top 3** countries with the highest cumulative CO2 emissions.\\n\\n2. **Filters the dataset**: Retains only records for the **top 3 CO2-emitting countries** from the original energy data.\\n\\n3. **Simplifies column structure**: Extracts the relevant energy production columns (`Electricity from fossil fuels (TWh)`, `Electricity from nuclear (TWh)`, `Electricity from renewables (TWh)`) and renames them to **Fossil Fuels**, **Nuclear**, and **Renewables** for clarity.\\n\\n4. **Reshapes data to long format**: Transforms the data from wide format (separate columns for each energy source) to long format, where each row represents a specific `Year`, `Entity`, and `Energy Source` combination with its corresponding `Energy` production value.\\n\\n5. **Sorts the output**: Orders the final dataset by `Entity`, `Year`, and `Energy Source` for systematic presentation.\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"}],\"charts\":[{\"id\":\"chart-1760739084455\",\"chartType\":\"Custom Area\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"y\":{\"fieldID\":\"concept-1760738917347\"},\"x2\":{},\"y2\":{\"channel\":\"y2\",\"bin\":false},\"color\":{\"fieldID\":\"concept-1760738921927\"},\"column\":{\"fieldID\":\"original--global-energy-20-small.csv--Entity\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-10\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760739021201\",\"chartType\":\"Custom Area\",\"encodingMap\":{\"x\":{\"channel\":\"x\",\"bin\":false,\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"y\":{\"channel\":\"y\",\"bin\":false,\"fieldID\":\"concept-1760738917347\"},\"x2\":{},\"y2\":{\"channel\":\"y2\",\"bin\":false},\"color\":{\"fieldID\":\"concept-1760738921927\",\"sortBy\":\"[\\\"Fossil Fuels\\\",\\\"Nuclear\\\",\\\"Renewables\\\"]\"},\"column\":{},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-81\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760738819387\",\"chartType\":\"Grouped Bar Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--global-energy-20-small.csv--Entity\"},\"y\":{\"fieldID\":\"concept-Renewable Percentage-1760738820889\"},\"color\":{\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-27\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760738770100\",\"chartType\":\"Grouped Bar Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--global-energy-20-small.csv--Entity\"},\"y\":{\"fieldID\":\"original--global-energy-20-small.csv--Electricity from renewables (TWh)\"},\"color\":{\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-97\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760738436615\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--global-energy-20-small.csv--Year\",\"sortOrder\":\"ascending\"},\"y\":{\"fieldID\":\"concept-rank-1760738444550\",\"sortOrder\":\"descending\"},\"color\":{\"fieldID\":\"original--global-energy-20-small.csv--Entity\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-78\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760738423852\",\"chartType\":\"Dotted Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"y\":{\"fieldID\":\"concept-renewable_percentage-1760738424337\"},\"color\":{\"fieldID\":\"original--global-energy-20-small.csv--Entity\"},\"column\":{},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-45\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760738400970\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"y\":{\"fieldID\":\"concept-1760738385163\"},\"color\":{\"fieldID\":\"original--global-energy-20-small.csv--Entity\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"fieldID\":\"concept-1760738389404\",\"sortBy\":\"[\\\"fossil fuels\\\",\\\"nuclear\\\",\\\"renewables\\\"]\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-82\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760738355655\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--global-energy-20-small.csv--Year\"},\"y\":{\"fieldID\":\"original--global-energy-20-small.csv--Value_co2_emissions_kt_by_country\"},\"color\":{\"fieldID\":\"original--global-energy-20-small.csv--Entity\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"global-energy-20-small.csv\",\"saved\":false,\"source\":\"user\",\"unread\":false}],\"conceptShelfItems\":[{\"id\":\"concept-1760738921927\",\"name\":\"Energy Source\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\"},{\"id\":\"concept-1760738917347\",\"name\":\"Energy\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\"},{\"id\":\"concept-Renewable Percentage-1760738820889\",\"name\":\"Renewable Percentage\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-1760738743125\",\"name\":\"Renewable Energy\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\"},{\"id\":\"concept-rank-1760738444550\",\"name\":\"rank\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-renewable_percentage-1760738424337\",\"name\":\"renewable_percentage\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-1760738389404\",\"name\":\"source\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\"},{\"id\":\"concept-1760738385163\",\"name\":\"energy\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\"},{\"id\":\"original--global-energy-20-small.csv--Year\",\"name\":\"Year\",\"type\":\"integer\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"global-energy-20-small.csv\"},{\"id\":\"original--global-energy-20-small.csv--Entity\",\"name\":\"Entity\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"global-energy-20-small.csv\"},{\"id\":\"original--global-energy-20-small.csv--Value_co2_emissions_kt_by_country\",\"name\":\"Value_co2_emissions_kt_by_country\",\"type\":\"number\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"global-energy-20-small.csv\"},{\"id\":\"original--global-energy-20-small.csv--Electricity from fossil fuels (TWh)\",\"name\":\"Electricity from fossil fuels (TWh)\",\"type\":\"number\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"global-energy-20-small.csv\"},{\"id\":\"original--global-energy-20-small.csv--Electricity from nuclear (TWh)\",\"name\":\"Electricity from nuclear (TWh)\",\"type\":\"number\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"global-energy-20-small.csv\"},{\"id\":\"original--global-energy-20-small.csv--Electricity from renewables (TWh)\",\"name\":\"Electricity from renewables (TWh)\",\"type\":\"number\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"global-energy-20-small.csv\"}],\"messages\":[{\"timestamp\":1760831081885,\"type\":\"success\",\"component\":\"data formulator\",\"value\":\"Successfully loaded Global Energy\"}],\"displayedMessageIdx\":0,\"focusedTableId\":\"global-energy-20-small.csv\",\"focusedChartId\":\"chart-1760738355655\",\"viewMode\":\"report\",\"chartSynthesisInProgress\":[],\"config\":{\"formulateTimeoutSeconds\":60,\"maxRepairAttempts\":1,\"defaultChartWidth\":300,\"defaultChartHeight\":300},\"agentActions\":[],\"dataCleanBlocks\":[],\"cleanInProgress\":false,\"generatedReports\":[{\"id\":\"report-1760831156182-8277\",\"content\":\"# Global Renewable Energy Shift: 2000 to 2020\\n\\nBetween 2000 and 2020, the world witnessed a notable transformation in renewable energy adoption. Global renewable electricity nearly doubled from 16% to 29% of total generation, signaling meaningful progress in the energy transition.\\n\\n[IMAGE(chart-1760738819387)]\\n\\nThe data reveals striking regional variations. Brazil maintained renewable leadership above 84%, while countries like Australia, Germany, and Italy dramatically expanded their renewable capacity—Australia tripling from 9% to 26%. However, some nations like Mexico experienced declining renewable shares, highlighting uneven progress across different energy systems.\\n\\n**In summary**, while the 20-year period shows encouraging momentum toward cleaner energy, the pace and direction vary significantly by country, suggesting that achieving global renewable energy goals will require sustained, coordinated efforts tailored to each nation's unique energy landscape and policy environment.\",\"style\":\"short note\",\"selectedChartIds\":[\"chart-1760738819387\"],\"createdAt\":1760831163718},{\"id\":\"report-1760831130105-4063\",\"content\":\"# The Global Renewable Energy Revolution: Two Decades of Transformation\\n\\nThe world's energy landscape has undergone a remarkable transformation between 2000 and 2020, with renewable electricity generation emerging as a critical component of the global energy mix. This shift reflects both technological advancement and growing commitment to sustainable energy solutions.\\n\\n[IMAGE(chart-1760738770100)]\\n\\nLooking at renewable energy adoption across major economies, the growth has been nothing short of extraordinary. China leads the pack with a staggering increase from 225.56 TWh in 2000 to 2,184.94 TWh in 2020—nearly a tenfold expansion. The United States more than doubled its renewable output from 335.45 TWh to 821.40 TWh, while Brazil grew from 308.77 TWh to 520.01 TWh. Notably, countries like Australia, India, and Germany also demonstrated significant gains, with Australia jumping from just 17.11 TWh to 63.99 TWh during this period.\\n\\n[IMAGE(chart-1760739084455)]\\n\\nWhen examining the energy portfolios of the three largest CO2 emitters—China, India, and the United States—a complex picture emerges. While China's total energy consumption has grown exponentially, with fossil fuels still dominating, the renewable sector (shown in red) has expanded substantially. The United States shows a more stable total energy consumption, with renewables gradually claiming a larger share. India's energy growth, though significant, remains heavily reliant on fossil fuels, though renewable adoption is accelerating.\\n\\n**In summary**, the past two decades reveal a global energy transition in progress. While renewable energy has achieved impressive growth worldwide, fossil fuels continue to dominate electricity generation in major economies. Key questions remain: Can this momentum accelerate sufficiently to meet climate goals? What policies will drive faster renewable adoption in emerging economies?\",\"style\":\"blog post\",\"selectedChartIds\":[\"chart-1760739084455\",\"chart-1760738770100\"],\"createdAt\":1760831142289},{\"id\":\"report-1760831094231-2424\",\"content\":\"# Global Renewable Energy: A Tale of Leaders and Laggards\\n\\nThe global energy landscape has undergone significant transformation over the past two decades, with renewable energy emerging as a critical player in the electricity mix. Analyzing data from 21 major economies between 2000 and 2020 reveals striking disparities in how nations have embraced clean energy alternatives.\\n\\n[IMAGE(chart-1760738423852)]\\n\\nThe first visualization reveals a fascinating divergence in renewable energy adoption. **Brazil** stands out as a consistent leader, maintaining renewable electricity percentages between 75-90% throughout the entire period, thanks largely to its robust hydroelectric infrastructure. **Canada** follows a similar trajectory, steadily increasing from about 60% to nearly 70% by 2020. Meanwhile, **Germany, Spain, Italy, and the United Kingdom** show remarkable growth trajectories, climbing from under 20% in the early 2000s to over 40% by 2020—demonstrating that nations can dramatically reshape their energy portfolios within two decades.\\n\\nOn the opposite end of the spectrum, **South Africa** remains nearly flat at the bottom, showing minimal renewable adoption despite global trends. **Saudi Arabia** and **Poland** also lag significantly, though both show modest upticks in recent years.\\n\\n[IMAGE(chart-1760738436615)]\\n\\nThe ranking chart illustrates the competitive dynamics of renewable energy leadership. **Brazil and Canada** maintain their dominance at ranks 1-2 throughout most years, while European nations like **Germany, Spain, and the UK** engage in a dynamic competition for the 3rd-5th positions, particularly after 2010. The volatility in middle rankings reflects the rapid changes in energy policy and investment across different nations, with countries like **China** climbing from lower ranks to break into the top 7 by 2020.\\n\\n**In summary**, the data reveals a bifurcated global energy transition: a group of progressive nations have successfully scaled renewable electricity to 40-90% of their mix, while others remain heavily dependent on fossil fuels. These patterns suggest that political will, natural resource endowment, and infrastructure investment are key determinants of renewable energy success. Important follow-up questions include: What policy mechanisms enabled top performers to achieve such high renewable percentages? Can lagging nations replicate these successes, or do geographic and economic constraints create insurmountable barriers?\",\"style\":\"blog post\",\"selectedChartIds\":[\"chart-1760738423852\",\"chart-1760738436615\"],\"createdAt\":1760831110064}],\"currentReport\":{\"id\":\"report-1760750575650-2619\",\"content\":\"# Hollywood's Billion-Dollar Hitmakers\\n\\n*Avatar* stands alone—earning over $2.5B in profit, dwarfing all competition. Action and Adventure films dominate the most profitable titles, with franchises like *Jurassic Park*, *The Dark Knight*, and *Lord of the Rings* proving blockbuster formulas work.\\n\\n<img src=\\\"blob:http://localhost:5173/de49db0f-5fad-4c15-b1b9-cda87ef53107\\\" alt=\\\"Chart\\\" width=\\\"3384\\\" height=\\\"1728\\\" />\\n\\nSteven Spielberg leads all directors with $7.2B in total profit across his career, showcasing remarkable consistency with hits spanning decades—from *Jurassic Park* to *E.T.* His nearest competitors trail by billions, underlining his unmatched commercial impact.\\n\\n<img src=\\\"blob:http://localhost:5173/d7a91ff7-1d87-4299-bcd7-f9b69558cac7\\\" alt=\\\"Chart\\\" width=\\\"2764\\\" height=\\\"1712\\\" />\\n\\n**In summary**, mega-budget Action and Adventure films generate extraordinary returns when they succeed, and a handful of elite directors—led by Spielberg—have mastered the formula for sustained box office dominance.\",\"style\":\"short note\",\"selectedChartIds\":[\"chart-1760743347871\",\"chart-1760743768741\"],\"chartImages\":{},\"createdAt\":1760750584189,\"title\":\"Report - 10/17/2025\"},\"activeChallenges\":[],\"agentWorkInProgress\":[],\"_persist\":{\"version\":-1,\"rehydrated\":true}}"
  },
  {
    "path": "public/df_movies.json",
    "content": "{\"tables\":[{\"id\":\"movies\",\"displayId\":\"movies\",\"names\":[\"Title\",\"US Gross\",\"Worldwide Gross\",\"US DVD Sales\",\"Production Budget\",\"Release Date\",\"MPAA Rating\",\"Running Time min\",\"Distributor\",\"Source\",\"Major Genre\",\"Creative Type\",\"Director\",\"Rotten Tomatoes Rating\",\"IMDB Rating\",\"IMDB Votes\"],\"metadata\":{\"Title\":{\"type\":\"string\",\"semanticType\":\"Name\"},\"US Gross\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Worldwide Gross\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"US DVD Sales\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Production Budget\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Release Date\":{\"type\":\"date\",\"semanticType\":\"Date\"},\"MPAA Rating\":{\"type\":\"string\",\"semanticType\":\"String\",\"levels\":[\"G\",\"PG\",\"PG-13\",\"R\",\"NC-17\",\"Not Rated\",\"Open\"]},\"Running Time min\":{\"type\":\"number\",\"semanticType\":\"Duration\"},\"Distributor\":{\"type\":\"string\",\"semanticType\":\"Name\"},\"Source\":{\"type\":\"string\",\"semanticType\":\"String\"},\"Major Genre\":{\"type\":\"string\",\"semanticType\":\"String\"},\"Creative Type\":{\"type\":\"string\",\"semanticType\":\"String\"},\"Director\":{\"type\":\"string\",\"semanticType\":\"Name\"},\"Rotten Tomatoes Rating\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"IMDB Rating\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"IMDB Votes\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"rows\":[{\"Title\":\"The Land Girls\",\"US Gross\":146083,\"Worldwide Gross\":146083,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Jun 12 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Gramercy\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":1071},{\"Title\":\"First Love, Last Rites\",\"US Gross\":10876,\"Worldwide Gross\":10876,\"US DVD Sales\":null,\"Production Budget\":300000,\"Release Date\":\"Aug 07 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Strand\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":207},{\"Title\":\"I Married a Strange Person\",\"US Gross\":203134,\"Worldwide Gross\":203134,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Aug 28 1998\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":865},{\"Title\":\"Let's Talk About Sex\",\"US Gross\":373615,\"Worldwide Gross\":373615,\"US DVD Sales\":null,\"Production Budget\":300000,\"Release Date\":\"Sep 11 1998\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Slam\",\"US Gross\":1009819,\"Worldwide Gross\":1087521,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Oct 09 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Trimark\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":3.4,\"IMDB Votes\":165},{\"Title\":\"Mississippi Mermaid\",\"US Gross\":24551,\"Worldwide Gross\":2624551,\"US DVD Sales\":null,\"Production Budget\":1600000,\"Release Date\":\"Jan 15 1999\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Following\",\"US Gross\":44705,\"Worldwide Gross\":44705,\"US DVD Sales\":null,\"Production Budget\":6000,\"Release Date\":\"Apr 04 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Zeitgeist\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Christopher Nolan\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.7,\"IMDB Votes\":15133},{\"Title\":\"Foolish\",\"US Gross\":6026908,\"Worldwide Gross\":6026908,\"US DVD Sales\":null,\"Production Budget\":1600000,\"Release Date\":\"Apr 09 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.8,\"IMDB Votes\":353},{\"Title\":\"Pirates\",\"US Gross\":1641825,\"Worldwide Gross\":6341825,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jul 01 1986\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Roman Polanski\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":5.8,\"IMDB Votes\":3275},{\"Title\":\"Duel in the Sun\",\"US Gross\":20400000,\"Worldwide Gross\":20400000,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Dec 31 2046\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7,\"IMDB Votes\":2906},{\"Title\":\"Tom Jones\",\"US Gross\":37600000,\"Worldwide Gross\":37600000,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Oct 07 1963\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7,\"IMDB Votes\":4035},{\"Title\":\"Oliver!\",\"US Gross\":37402877,\"Worldwide Gross\":37402877,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Dec 11 1968\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":null,\"Major Genre\":\"Musical\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7.5,\"IMDB Votes\":9111},{\"Title\":\"To Kill A Mockingbird\",\"US Gross\":13129846,\"Worldwide Gross\":13129846,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Dec 25 1962\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.4,\"IMDB Votes\":82786},{\"Title\":\"Tora, Tora, Tora\",\"US Gross\":29548291,\"Worldwide Gross\":29548291,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Sep 23 1970\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Richard Fleischer\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Hollywood Shuffle\",\"US Gross\":5228617,\"Worldwide Gross\":5228617,\"US DVD Sales\":null,\"Production Budget\":100000,\"Release Date\":\"Mar 01 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":6.8,\"IMDB Votes\":1532},{\"Title\":\"Over the Hill to the Poorhouse\",\"US Gross\":3000000,\"Worldwide Gross\":3000000,\"US DVD Sales\":null,\"Production Budget\":100000,\"Release Date\":\"Sep 17 2020\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Wilson\",\"US Gross\":2000000,\"Worldwide Gross\":2000000,\"US DVD Sales\":null,\"Production Budget\":5200000,\"Release Date\":\"Aug 01 2044\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":451},{\"Title\":\"Darling Lili\",\"US Gross\":5000000,\"Worldwide Gross\":5000000,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Jan 01 1970\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Blake Edwards\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":858},{\"Title\":\"The Ten Commandments\",\"US Gross\":80000000,\"Worldwide Gross\":80000000,\"US DVD Sales\":null,\"Production Budget\":13500000,\"Release Date\":\"Oct 05 1956\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":2.5,\"IMDB Votes\":1677},{\"Title\":\"12 Angry Men\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":340000,\"Release Date\":\"Apr 13 1957\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Sidney Lumet\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.9,\"IMDB Votes\":119101},{\"Title\":\"Twelve Monkeys\",\"US Gross\":57141459,\"Worldwide Gross\":168841459,\"US DVD Sales\":null,\"Production Budget\":29000000,\"Release Date\":\"Dec 27 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Short Film\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Terry Gilliam\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.1,\"IMDB Votes\":169858},{\"Title\":1776,\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Nov 09 1972\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":7,\"IMDB Votes\":4099},{\"Title\":1941,\"US Gross\":34175000,\"Worldwide Gross\":94875000,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Dec 14 1979\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.6,\"IMDB Votes\":13364},{\"Title\":\"Chacun sa nuit\",\"US Gross\":18435,\"Worldwide Gross\":18435,\"US DVD Sales\":null,\"Production Budget\":1900000,\"Release Date\":\"Jun 29 2007\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Strand\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":365},{\"Title\":\"2001: A Space Odyssey\",\"US Gross\":56700000,\"Worldwide Gross\":68700000,\"US DVD Sales\":null,\"Production Budget\":10500000,\"Release Date\":\"Apr 02 1968\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":null,\"Creative Type\":\"Science Fiction\",\"Director\":\"Stanley Kubrick\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8.4,\"IMDB Votes\":160342},{\"Title\":\"20,000 Leagues Under the Sea\",\"US Gross\":28200000,\"Worldwide Gross\":28200000,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Dec 23 1954\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":null,\"Director\":\"Richard Fleischer\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"20,000 Leagues Under the Sea\",\"US Gross\":8000000,\"Worldwide Gross\":8000000,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Dec 24 2016\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"24 7: Twenty Four Seven\",\"US Gross\":72544,\"Worldwide Gross\":72544,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Apr 15 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"October Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Shane Meadows\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":1417},{\"Title\":\"Twin Falls Idaho\",\"US Gross\":985341,\"Worldwide Gross\":1027228,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Jul 30 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Polish\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7.1,\"IMDB Votes\":2810},{\"Title\":\"Three Kingdoms: Resurrection of the Dragon\",\"US Gross\":0,\"Worldwide Gross\":22139590,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Apr 03 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"3 Men and a Baby\",\"US Gross\":167780960,\"Worldwide Gross\":167780960,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Nov 25 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Leonard Nimoy\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":16764},{\"Title\":\"3 Ninjas Kick Back\",\"US Gross\":11744960,\"Worldwide Gross\":11744960,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"May 06 1994\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":3.2,\"IMDB Votes\":3107},{\"Title\":\"Forty Shades of Blue\",\"US Gross\":75828,\"Worldwide Gross\":172569,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Sep 28 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Vitagraph Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":873},{\"Title\":\"42nd Street\",\"US Gross\":2300000,\"Worldwide Gross\":2300000,\"US DVD Sales\":null,\"Production Budget\":439000,\"Release Date\":\"Mar 09 2033\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Musical\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":7.7,\"IMDB Votes\":4263},{\"Title\":\"Four Rooms\",\"US Gross\":4301000,\"Worldwide Gross\":4301000,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Dec 25 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Rodriguez\",\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":6.4,\"IMDB Votes\":34328},{\"Title\":\"The Four Seasons\",\"US Gross\":42488161,\"Worldwide Gross\":42488161,\"US DVD Sales\":null,\"Production Budget\":6500000,\"Release Date\":\"May 22 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alan Alda\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":7,\"IMDB Votes\":1814},{\"Title\":\"Four Weddings and a Funeral\",\"US Gross\":52700832,\"Worldwide Gross\":242895809,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Mar 09 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Gramercy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mike Newell\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.1,\"IMDB Votes\":39003},{\"Title\":\"51 Birch Street\",\"US Gross\":84689,\"Worldwide Gross\":84689,\"US DVD Sales\":null,\"Production Budget\":350000,\"Release Date\":\"Oct 18 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Truly Indie\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":7.4,\"IMDB Votes\":439},{\"Title\":\"55 Days at Peking\",\"US Gross\":10000000,\"Worldwide Gross\":10000000,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Dec 31 1962\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6.8,\"IMDB Votes\":2104},{\"Title\":\"Nine 1/2 Weeks\",\"US Gross\":6734844,\"Worldwide Gross\":6734844,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Feb 21 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Adrian Lyne\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.4,\"IMDB Votes\":12731},{\"Title\":\"AstÈrix aux Jeux Olympiques\",\"US Gross\":999811,\"Worldwide Gross\":132999811,\"US DVD Sales\":null,\"Production Budget\":113500000,\"Release Date\":\"Jul 04 2008\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Alliance\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":5620},{\"Title\":\"The Abyss\",\"US Gross\":54243125,\"Worldwide Gross\":54243125,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Aug 09 1989\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"James Cameron\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.6,\"IMDB Votes\":51018},{\"Title\":\"Action Jackson\",\"US Gross\":20257000,\"Worldwide Gross\":20257000,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Feb 12 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Lorimar Motion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":4.6,\"IMDB Votes\":3856},{\"Title\":\"Ace Ventura: Pet Detective\",\"US Gross\":72217396,\"Worldwide Gross\":107217396,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Feb 04 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tom Shadyac\",\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":6.6,\"IMDB Votes\":63543},{\"Title\":\"Ace Ventura: When Nature Calls\",\"US Gross\":108360063,\"Worldwide Gross\":212400000,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Nov 10 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steve Oedekerk\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":51275},{\"Title\":\"April Fool's Day\",\"US Gross\":12947763,\"Worldwide Gross\":12947763,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Mar 27 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Among Giants\",\"US Gross\":64359,\"Worldwide Gross\":64359,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Mar 26 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":546},{\"Title\":\"Annie Get Your Gun\",\"US Gross\":8000000,\"Worldwide Gross\":8000000,\"US DVD Sales\":null,\"Production Budget\":3768785,\"Release Date\":\"May 17 1950\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Musical\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.1,\"IMDB Votes\":1326},{\"Title\":\"Alice in Wonderland\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Jul 28 1951\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"RKO Radio Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Musical\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":6.7,\"IMDB Votes\":63458},{\"Title\":\"The Princess and the Cobbler\",\"US Gross\":669276,\"Worldwide Gross\":669276,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Aug 25 1995\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":893},{\"Title\":\"The Alamo\",\"US Gross\":7900000,\"Worldwide Gross\":7900000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Oct 24 1960\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"John Wayne\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":5.9,\"IMDB Votes\":10063},{\"Title\":\"Alexander's Ragtime Band\",\"US Gross\":4000000,\"Worldwide Gross\":4000000,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Dec 31 1937\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Alive\",\"US Gross\":36299670,\"Worldwide Gross\":36299670,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Jan 15 1993\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Dramatization\",\"Director\":\"Frank Marshall\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":3.2,\"IMDB Votes\":124},{\"Title\":\"Amen\",\"US Gross\":274299,\"Worldwide Gross\":274299,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Jan 24 2003\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Kino International\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Costa-Gavras\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":5416},{\"Title\":\"American Graffiti\",\"US Gross\":115000000,\"Worldwide Gross\":140000000,\"US DVD Sales\":null,\"Production Budget\":777000,\"Release Date\":\"Aug 11 1973\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"George Lucas\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":7.6,\"IMDB Votes\":30952},{\"Title\":\"American Ninja 2: The Confrontation\",\"US Gross\":4000000,\"Worldwide Gross\":4000000,\"US DVD Sales\":null,\"Production Budget\":350000,\"Release Date\":\"Dec 31 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":\"Sam Firstenberg\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.7,\"IMDB Votes\":2495},{\"Title\":\"The American President\",\"US Gross\":60022813,\"Worldwide Gross\":107822813,\"US DVD Sales\":null,\"Production Budget\":62000000,\"Release Date\":\"Nov 17 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rob Reiner\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":6.8,\"IMDB Votes\":22780},{\"Title\":\"Annie Hall\",\"US Gross\":38251425,\"Worldwide Gross\":38251425,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Apr 20 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.2,\"IMDB Votes\":65406},{\"Title\":\"Anatomie\",\"US Gross\":9598,\"Worldwide Gross\":9598,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Sep 08 2000\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":6266},{\"Title\":\"The Adventures of Huck Finn\",\"US Gross\":24103594,\"Worldwide Gross\":24103594,\"US DVD Sales\":null,\"Production Budget\":6500000,\"Release Date\":\"Apr 02 1993\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Stephen Sommers\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":5.8,\"IMDB Votes\":3095},{\"Title\":\"The Apartment\",\"US Gross\":18600000,\"Worldwide Gross\":24600000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Dec 31 1959\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":null,\"Director\":\"Billy Wilder\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8.4,\"IMDB Votes\":36485},{\"Title\":\"Apocalypse Now\",\"US Gross\":78800000,\"Worldwide Gross\":78800000,\"US DVD Sales\":3479242,\"Production Budget\":31500000,\"Release Date\":\"Aug 15 1979\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.6,\"IMDB Votes\":173141},{\"Title\":\"Arachnophobia\",\"US Gross\":53208180,\"Worldwide Gross\":53208180,\"US DVD Sales\":null,\"Production Budget\":31000000,\"Release Date\":\"Jul 18 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Frank Marshall\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":6.2,\"IMDB Votes\":20528},{\"Title\":\"Arn - Tempelriddaren\",\"US Gross\":0,\"Worldwide Gross\":14900000,\"US DVD Sales\":null,\"Production Budget\":16500000,\"Release Date\":\"Dec 25 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":6251},{\"Title\":\"Arnolds Park\",\"US Gross\":23616,\"Worldwide Gross\":23616,\"US DVD Sales\":null,\"Production Budget\":600000,\"Release Date\":\"Oct 19 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"The Movie Partners\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.1,\"IMDB Votes\":77},{\"Title\":\"Sweet Sweetback's Baad Asssss Song\",\"US Gross\":15200000,\"Worldwide Gross\":15200000,\"US DVD Sales\":null,\"Production Budget\":150000,\"Release Date\":\"Jan 01 1971\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":1769},{\"Title\":\"And Then Came Love\",\"US Gross\":8158,\"Worldwide Gross\":8158,\"US DVD Sales\":null,\"Production Budget\":989000,\"Release Date\":\"Jun 01 2007\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Fox Meadow\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":4.4,\"IMDB Votes\":200},{\"Title\":\"Around the World in 80 Days\",\"US Gross\":42000000,\"Worldwide Gross\":42000000,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Oct 17 1956\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":5.6,\"IMDB Votes\":21516},{\"Title\":\"Barbarella\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Oct 10 1968\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":5.7,\"IMDB Votes\":10794},{\"Title\":\"Barry Lyndon\",\"US Gross\":20000000,\"Worldwide Gross\":20000000,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Dec 31 1974\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Stanley Kubrick\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":8.1,\"IMDB Votes\":39909},{\"Title\":\"Barbarians, The\",\"US Gross\":800000,\"Worldwide Gross\":800000,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Mar 01 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.4,\"IMDB Votes\":236},{\"Title\":\"Babe\",\"US Gross\":63658910,\"Worldwide Gross\":246100000,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Aug 04 1995\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Chris Noonan\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":7.3,\"IMDB Votes\":35644},{\"Title\":\"Boynton Beach Club\",\"US Gross\":3127472,\"Worldwide Gross\":3127472,\"US DVD Sales\":null,\"Production Budget\":2900000,\"Release Date\":\"Mar 24 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":104,\"Distributor\":\"Wingate Distribution\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Baby's Day Out\",\"US Gross\":16581575,\"Worldwide Gross\":16581575,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Jul 01 1994\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Patrick Read Johnson\",\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":5,\"IMDB Votes\":8332},{\"Title\":\"Bound by Honor\",\"US Gross\":4496583,\"Worldwide Gross\":4496583,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Apr 16 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Taylor Hackford\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.7,\"IMDB Votes\":10142},{\"Title\":\"Bon Cop, Bad Cop\",\"US Gross\":12671300,\"Worldwide Gross\":12671300,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Aug 04 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Alliance\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.9,\"IMDB Votes\":151},{\"Title\":\"Back to the Future\",\"US Gross\":210609762,\"Worldwide Gross\":381109762,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Jul 03 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Robert Zemeckis\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8.4,\"IMDB Votes\":201598},{\"Title\":\"Back to the Future Part II\",\"US Gross\":118450002,\"Worldwide Gross\":332000000,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Nov 22 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Robert Zemeckis\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":7.5,\"IMDB Votes\":87341},{\"Title\":\"Back to the Future Part III\",\"US Gross\":87666629,\"Worldwide Gross\":243700000,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"May 24 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Robert Zemeckis\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":7.1,\"IMDB Votes\":77541},{\"Title\":\"Butch Cassidy and the Sundance Kid\",\"US Gross\":102308900,\"Worldwide Gross\":102308900,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Oct 24 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":null,\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"George Roy Hill\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":8.2,\"IMDB Votes\":57602},{\"Title\":\"Bad Boys\",\"US Gross\":65647413,\"Worldwide Gross\":141247413,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Apr 07 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Bay\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.6,\"IMDB Votes\":53929},{\"Title\":\"Body Double\",\"US Gross\":8801940,\"Worldwide Gross\":8801940,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 26 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.4,\"IMDB Votes\":9738},{\"Title\":\"The Beast from 20,000 Fathoms\",\"US Gross\":5000000,\"Worldwide Gross\":5000000,\"US DVD Sales\":null,\"Production Budget\":210000,\"Release Date\":\"Jun 13 1953\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Beastmaster 2: Through the Portal of Time\",\"US Gross\":773490,\"Worldwide Gross\":773490,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Aug 30 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":null,\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":3.3,\"IMDB Votes\":1327},{\"Title\":\"The Beastmaster\",\"US Gross\":10751126,\"Worldwide Gross\":10751126,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Aug 20 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":5.7,\"IMDB Votes\":5734},{\"Title\":\"Ben-Hur\",\"US Gross\":9000000,\"Worldwide Gross\":9000000,\"US DVD Sales\":null,\"Production Budget\":3900000,\"Release Date\":\"Dec 30 2025\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.2,\"IMDB Votes\":58510},{\"Title\":\"Ben-Hur\",\"US Gross\":73000000,\"Worldwide Gross\":73000000,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Nov 18 1959\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":null,\"Director\":\"William Wyler\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8.2,\"IMDB Votes\":58510},{\"Title\":\"Benji\",\"US Gross\":31559560,\"Worldwide Gross\":31559560,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Nov 15 1974\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":5.8,\"IMDB Votes\":1801},{\"Title\":\"Before Sunrise\",\"US Gross\":5274005,\"Worldwide Gross\":5274005,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Jan 27 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Linklater\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":8,\"IMDB Votes\":39705},{\"Title\":\"Beauty and the Beast\",\"US Gross\":171340294,\"Worldwide Gross\":403476931,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Nov 13 1991\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Fantasy\",\"Director\":\"Gary Trousdale\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":3.4,\"IMDB Votes\":354},{\"Title\":\"The Best Years of Our Lives\",\"US Gross\":23600000,\"Worldwide Gross\":23600000,\"US DVD Sales\":null,\"Production Budget\":2100000,\"Release Date\":\"Nov 21 2046\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"RKO Radio Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"William Wyler\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.2,\"IMDB Votes\":17338},{\"Title\":\"The Ballad of Gregorio Cortez\",\"US Gross\":909000,\"Worldwide Gross\":909000,\"US DVD Sales\":null,\"Production Budget\":1305000,\"Release Date\":\"Aug 19 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Embassy\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"My Big Fat Independent Movie\",\"US Gross\":4655,\"Worldwide Gross\":4655,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Sep 30 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Big Fat Movies\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":3.2,\"IMDB Votes\":1119},{\"Title\":\"Battle for the Planet of the Apes\",\"US Gross\":8800000,\"Worldwide Gross\":8800000,\"US DVD Sales\":null,\"Production Budget\":1800000,\"Release Date\":\"Dec 31 1972\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":\"Science Fiction\",\"Director\":\"Jack Lee Thompson\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5,\"IMDB Votes\":6094},{\"Title\":\"Big Things\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":50000,\"Release Date\":\"Dec 31 2009\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Bogus\",\"US Gross\":4357406,\"Worldwide Gross\":4357406,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Sep 06 1996\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Norman Jewison\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":4.8,\"IMDB Votes\":2742},{\"Title\":\"Beverly Hills Cop\",\"US Gross\":234760478,\"Worldwide Gross\":316300000,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 05 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martin Brest\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.3,\"IMDB Votes\":45065},{\"Title\":\"Beverly Hills Cop II\",\"US Gross\":153665036,\"Worldwide Gross\":276665036,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"May 20 1987\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tony Scott\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.1,\"IMDB Votes\":29712},{\"Title\":\"Beverly Hills Cop III\",\"US Gross\":42586861,\"Worldwide Gross\":119180938,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"May 25 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Landis\",\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":5,\"IMDB Votes\":21199},{\"Title\":\"The Black Hole\",\"US Gross\":35841901,\"Worldwide Gross\":35841901,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 21 1979\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":null,\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":5.6,\"IMDB Votes\":7810},{\"Title\":\"Bathory\",\"US Gross\":0,\"Worldwide Gross\":3436763,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jul 10 2008\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":1446},{\"Title\":\"Big\",\"US Gross\":114968774,\"Worldwide Gross\":151668774,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Jun 03 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Penny Marshall\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.2,\"IMDB Votes\":49256},{\"Title\":\"The Big Parade\",\"US Gross\":11000000,\"Worldwide Gross\":22000000,\"US DVD Sales\":null,\"Production Budget\":245000,\"Release Date\":\"Jan 01 2025\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"King Vidor\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":8.4,\"IMDB Votes\":2600},{\"Title\":\"Boyz n the Hood\",\"US Gross\":56190094,\"Worldwide Gross\":56190094,\"US DVD Sales\":null,\"Production Budget\":6500000,\"Release Date\":\"Jul 12 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Singleton\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":7.8,\"IMDB Votes\":30299},{\"Title\":\"The Book of Mormon Movie, Volume 1: The Journey\",\"US Gross\":1660865,\"Worldwide Gross\":1660865,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Sep 12 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Distributor Unknown\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Return to the Blue Lagoon\",\"US Gross\":2000000,\"Worldwide Gross\":2000000,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Dec 31 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.3,\"IMDB Votes\":4632},{\"Title\":\"Bright Lights, Big City\",\"US Gross\":16118077,\"Worldwide Gross\":16118077,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Apr 01 1988\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6.8,\"IMDB Votes\":11929},{\"Title\":\"The Blue Bird\",\"US Gross\":887000,\"Worldwide Gross\":887000,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Dec 31 1975\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Play\",\"Major Genre\":null,\"Creative Type\":\"Fantasy\",\"Director\":\"George Cukor\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":359},{\"Title\":\"The Blue Butterfly\",\"US Gross\":1610194,\"Worldwide Gross\":1610194,\"US DVD Sales\":null,\"Production Budget\":10400000,\"Release Date\":\"Feb 20 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Alliance\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6.2,\"IMDB Votes\":817},{\"Title\":\"Blade Runner\",\"US Gross\":32656328,\"Worldwide Gross\":33139618,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Jun 25 1982\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":8.3,\"IMDB Votes\":185546},{\"Title\":\"Bloodsport\",\"US Gross\":11806119,\"Worldwide Gross\":11806119,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Feb 26 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Cannon\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":19816},{\"Title\":\"The Blues Brothers\",\"US Gross\":57229890,\"Worldwide Gross\":57229890,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Jun 20 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Landis\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7.9,\"IMDB Votes\":62941},{\"Title\":\"Blow Out\",\"US Gross\":13747234,\"Worldwide Gross\":13747234,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Jul 24 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Filmways Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.1,\"IMDB Votes\":10239},{\"Title\":\"De battre mon coeur s'est arrÍtÈ\",\"US Gross\":1023424,\"Worldwide Gross\":8589831,\"US DVD Sales\":null,\"Production Budget\":5500000,\"Release Date\":\"Jul 01 2005\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"WellSpring\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":7295},{\"Title\":\"The Broadway Melody\",\"US Gross\":2800000,\"Worldwide Gross\":4358000,\"US DVD Sales\":null,\"Production Budget\":379000,\"Release Date\":\"Dec 31 1928\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":6.7,\"IMDB Votes\":2017},{\"Title\":\"Boom Town\",\"US Gross\":9172000,\"Worldwide Gross\":9172000,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Dec 31 1939\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":1115},{\"Title\":\"Bound\",\"US Gross\":3802260,\"Worldwide Gross\":6300000,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Oct 04 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Gramercy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andy Wachowski\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.4,\"IMDB Votes\":23564},{\"Title\":\"Bang\",\"US Gross\":527,\"Worldwide Gross\":527,\"US DVD Sales\":null,\"Production Budget\":10000,\"Release Date\":\"Apr 01 1996\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"JeTi Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jeff \\\"\\\"King Jeff\\\"\\\" Hollins\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":369},{\"Title\":\"Bananas\",\"US Gross\":null,\"Worldwide Gross\":null,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Apr 28 1971\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.1,\"IMDB Votes\":12415},{\"Title\":\"Bill & Ted's Bogus Journey\",\"US Gross\":37537675,\"Worldwide Gross\":37537675,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Jul 19 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Peter Hewitt\",\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":5.8,\"IMDB Votes\":20188},{\"Title\":\"The Birth of a Nation\",\"US Gross\":10000000,\"Worldwide Gross\":11000000,\"US DVD Sales\":null,\"Production Budget\":110000,\"Release Date\":\"Feb 08 2015\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.1,\"IMDB Votes\":8901},{\"Title\":\"The Ballad of Cable Hogue\",\"US Gross\":3500000,\"Worldwide Gross\":5000000,\"US DVD Sales\":null,\"Production Budget\":3716946,\"Release Date\":\"May 13 1970\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Sam Peckinpah\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.3,\"IMDB Votes\":3125},{\"Title\":\"The Blood of Heroes\",\"US Gross\":882290,\"Worldwide Gross\":882290,\"US DVD Sales\":null,\"Production Budget\":7700000,\"Release Date\":\"Feb 23 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":2523},{\"Title\":\"The Blood of My Brother: A Story of Death in Iraq\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":120000,\"Release Date\":\"Jun 30 2006\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Lifesize Entertainment\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":7.6,\"IMDB Votes\":90},{\"Title\":\"Boomerang\",\"US Gross\":70052444,\"Worldwide Gross\":131052444,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Jul 01 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":5.9,\"IMDB Votes\":202},{\"Title\":\"The Bridge on the River Kwai\",\"US Gross\":33300000,\"Worldwide Gross\":33300000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Dec 18 1957\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"David Lean\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":8.4,\"IMDB Votes\":58641},{\"Title\":\"Born on the Fourth of July\",\"US Gross\":70001698,\"Worldwide Gross\":70001698,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Dec 20 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Oliver Stone\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.2,\"IMDB Votes\":32108},{\"Title\":\"Basquiat\",\"US Gross\":2962051,\"Worldwide Gross\":2962051,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Aug 09 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Julian Schnabel\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":6.7,\"IMDB Votes\":7935},{\"Title\":\"Black Rain\",\"US Gross\":45892212,\"Worldwide Gross\":45892212,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Sep 22 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":4.1,\"IMDB Votes\":137},{\"Title\":\"Bottle Rocket\",\"US Gross\":407488,\"Worldwide Gross\":407488,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Feb 21 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Short Film\",\"Major Genre\":\"Adventure\",\"Creative Type\":null,\"Director\":\"Wes Anderson\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":7.2,\"IMDB Votes\":21980},{\"Title\":\"Braindead\",\"US Gross\":242623,\"Worldwide Gross\":242623,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Feb 12 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Trimark\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":\"Peter Jackson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":32827},{\"Title\":\"The Bridges of Madison County\",\"US Gross\":71516617,\"Worldwide Gross\":175516617,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Jun 02 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Clint Eastwood\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.2,\"IMDB Votes\":21923},{\"Title\":\"The Brothers McMullen\",\"US Gross\":10426506,\"Worldwide Gross\":10426506,\"US DVD Sales\":null,\"Production Budget\":25000,\"Release Date\":\"Aug 09 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Edward Burns\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":6.4,\"IMDB Votes\":4365},{\"Title\":\"Dracula\",\"US Gross\":82522790,\"Worldwide Gross\":215862692,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Nov 13 1992\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":136},{\"Title\":\"Broken Arrow\",\"US Gross\":70645997,\"Worldwide Gross\":148345997,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Feb 09 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Woo\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":5.8,\"IMDB Votes\":33584},{\"Title\":\"Brainstorm\",\"US Gross\":8921050,\"Worldwide Gross\":8921050,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Sep 30 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.3,\"IMDB Votes\":4410},{\"Title\":\"Braveheart\",\"US Gross\":75545647,\"Worldwide Gross\":209000000,\"US DVD Sales\":null,\"Production Budget\":72000000,\"Release Date\":\"May 24 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Mel Gibson\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":8.4,\"IMDB Votes\":240642},{\"Title\":\"Les BronzÈs 3: amis pour la vie\",\"US Gross\":0,\"Worldwide Gross\":83833602,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Feb 01 2006\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.4,\"IMDB Votes\":1254},{\"Title\":\"Brazil\",\"US Gross\":9929135,\"Worldwide Gross\":9929135,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 18 1985\",\"MPAA Rating\":\"R\",\"Running Time min\":136,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Terry Gilliam\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8,\"IMDB Votes\":76635},{\"Title\":\"Blazing Saddles\",\"US Gross\":119500000,\"Worldwide Gross\":119500000,\"US DVD Sales\":null,\"Production Budget\":2600000,\"Release Date\":\"Jan 01 1974\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Mel Brooks\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.8,\"IMDB Votes\":45771},{\"Title\":\"The Basket\",\"US Gross\":609042,\"Worldwide Gross\":609042,\"US DVD Sales\":null,\"Production Budget\":1300000,\"Release Date\":\"May 05 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":343},{\"Title\":\"Bathing Beauty\",\"US Gross\":3500000,\"Worldwide Gross\":3500000,\"US DVD Sales\":null,\"Production Budget\":2361000,\"Release Date\":\"Dec 31 1943\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":487},{\"Title\":\"Bill & Ted's Excellent Adventure\",\"US Gross\":39916091,\"Worldwide Gross\":39916091,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 17 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Stephen Herek\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.7,\"IMDB Votes\":30341},{\"Title\":\"A Bridge Too Far\",\"US Gross\":50800000,\"Worldwide Gross\":50800000,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Jun 15 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":\"Sir Richard Attenborough\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":7.3,\"IMDB Votes\":16882},{\"Title\":\"Beetle Juice\",\"US Gross\":73326666,\"Worldwide Gross\":73326666,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Mar 30 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Tim Burton\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":61197},{\"Title\":\"Batman Returns\",\"US Gross\":162831698,\"Worldwide Gross\":266822354,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jun 18 1992\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Tim Burton\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":6.9,\"IMDB Votes\":78673},{\"Title\":\"Batman Forever\",\"US Gross\":184031112,\"Worldwide Gross\":336529144,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Jun 16 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Joel Schumacher\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":5.4,\"IMDB Votes\":76218},{\"Title\":\"Batman - The Movie\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":1377800,\"Release Date\":\"Aug 21 2001\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Batman\",\"US Gross\":251188924,\"Worldwide Gross\":411348924,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Jun 23 1989\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Tim Burton\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":7.6,\"IMDB Votes\":111464},{\"Title\":\"Buffy the Vampire Slayer\",\"US Gross\":14231669,\"Worldwide Gross\":14231669,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Jul 31 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":5.3,\"IMDB Votes\":16056},{\"Title\":\"Bienvenue chez les Ch'tis\",\"US Gross\":1470856,\"Worldwide Gross\":243470856,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Jul 25 2008\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":109,\"Distributor\":\"Link Productions Ltd.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":7129},{\"Title\":\"Beyond the Valley of the Dolls\",\"US Gross\":9000000,\"Worldwide Gross\":9000000,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Jan 01 1970\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":5.7,\"IMDB Votes\":4626},{\"Title\":\"Broken Vessels\",\"US Gross\":15030,\"Worldwide Gross\":85343,\"US DVD Sales\":null,\"Production Budget\":600000,\"Release Date\":\"Jul 02 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":399},{\"Title\":\"The Boys from Brazil\",\"US Gross\":19000000,\"Worldwide Gross\":19000000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Dec 31 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":null,\"Director\":\"Franklin J. Schaffner\",\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":7,\"IMDB Votes\":8741},{\"Title\":\"The Business of Fancy Dancing\",\"US Gross\":174682,\"Worldwide Gross\":174682,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"May 10 2002\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Outrider Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":355},{\"Title\":\"Caddyshack\",\"US Gross\":39846344,\"Worldwide Gross\":39846344,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Jul 25 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Harold Ramis\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":7.3,\"IMDB Votes\":35436},{\"Title\":\"Cape Fear\",\"US Gross\":79091969,\"Worldwide Gross\":182291969,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Nov 15 1991\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.3,\"IMDB Votes\":47196},{\"Title\":\"Clear and Present Danger\",\"US Gross\":122012656,\"Worldwide Gross\":207500000,\"US DVD Sales\":null,\"Production Budget\":62000000,\"Release Date\":\"Aug 03 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Phillip Noyce\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":6.8,\"IMDB Votes\":29612},{\"Title\":\"Carrie\",\"US Gross\":25878153,\"Worldwide Gross\":25878153,\"US DVD Sales\":null,\"Production Budget\":1800000,\"Release Date\":\"Nov 16 1976\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.4,\"IMDB Votes\":38767},{\"Title\":\"Casino Royale\",\"US Gross\":22744718,\"Worldwide Gross\":41744718,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Apr 28 1967\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Huston\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":8,\"IMDB Votes\":172936},{\"Title\":\"Camping Sauvage\",\"US Gross\":3479302,\"Worldwide Gross\":3479302,\"US DVD Sales\":null,\"Production Budget\":4600000,\"Release Date\":\"Jul 16 2004\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Alliance\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":378},{\"Title\":\"The Cotton Club\",\"US Gross\":25928721,\"Worldwide Gross\":25928721,\"US DVD Sales\":null,\"Production Budget\":48000000,\"Release Date\":\"Dec 14 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":6.3,\"IMDB Votes\":6940},{\"Title\":\"Crop Circles: Quest for Truth\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":600000,\"Release Date\":\"Aug 23 2002\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":7.1,\"IMDB Votes\":153},{\"Title\":\"Close Encounters of the Third Kind\",\"US Gross\":166000000,\"Worldwide Gross\":337700000,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Nov 16 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":7.8,\"IMDB Votes\":59049},{\"Title\":\"The Cable Guy\",\"US Gross\":60240295,\"Worldwide Gross\":102825796,\"US DVD Sales\":null,\"Production Budget\":47000000,\"Release Date\":\"Jun 14 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ben Stiller\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":5.8,\"IMDB Votes\":51109},{\"Title\":\"Chocolate: Deep Dark Secrets\",\"US Gross\":49000,\"Worldwide Gross\":1549000,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Sep 16 2005\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Eros Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.6,\"IMDB Votes\":527},{\"Title\":\"Child's Play\",\"US Gross\":33244684,\"Worldwide Gross\":44196684,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Nov 09 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":6.3,\"IMDB Votes\":16165},{\"Title\":\"Child's Play 2\",\"US Gross\":26904572,\"Worldwide Gross\":34166572,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Nov 09 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.1,\"IMDB Votes\":8666},{\"Title\":\"Chain Reaction\",\"US Gross\":21226204,\"Worldwide Gross\":60209334,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Aug 02 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andrew Davis\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.2,\"IMDB Votes\":15817},{\"Title\":\"Charly\",\"US Gross\":814666,\"Worldwide Gross\":814666,\"US DVD Sales\":null,\"Production Budget\":950000,\"Release Date\":\"Sep 27 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Excel Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":60},{\"Title\":\"Chariots of Fire\",\"US Gross\":57159946,\"Worldwide Gross\":57159946,\"US DVD Sales\":null,\"Production Budget\":5500000,\"Release Date\":\"Sep 25 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Hugh Hudson\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.3,\"IMDB Votes\":16138},{\"Title\":\"A Christmas Story\",\"US Gross\":19294144,\"Worldwide Gross\":19294144,\"US DVD Sales\":null,\"Production Budget\":3250000,\"Release Date\":\"Nov 18 1983\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":8,\"IMDB Votes\":51757},{\"Title\":\"Cat on a Hot Tin Roof\",\"US Gross\":17570324,\"Worldwide Gross\":17570324,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Sep 20 1958\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Brooks\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":8,\"IMDB Votes\":14540},{\"Title\":\"C.H.U.D.\",\"US Gross\":4700000,\"Worldwide Gross\":4700000,\"US DVD Sales\":null,\"Production Budget\":1250000,\"Release Date\":\"Aug 31 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New World\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5,\"IMDB Votes\":2806},{\"Title\":\"Charge of the Light Brigade, The\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Oct 20 2036\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":\"Michael Curtiz\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Crooklyn\",\"US Gross\":13024170,\"Worldwide Gross\":13024170,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"May 13 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":6.5,\"IMDB Votes\":3137},{\"Title\":\"Festen\",\"US Gross\":1647780,\"Worldwide Gross\":1647780,\"US DVD Sales\":null,\"Production Budget\":1300000,\"Release Date\":\"Oct 09 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"October Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Thomas Vinterberg\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.1,\"IMDB Votes\":26607},{\"Title\":\"Cleopatra\",\"US Gross\":48000000,\"Worldwide Gross\":62000000,\"US DVD Sales\":null,\"Production Budget\":36000000,\"Release Date\":\"Jun 12 1963\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.8,\"IMDB Votes\":7870},{\"Title\":\"Cliffhanger\",\"US Gross\":84049211,\"Worldwide Gross\":255000000,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"May 28 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Renny Harlin\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":6.2,\"IMDB Votes\":34447},{\"Title\":\"The Californians\",\"US Gross\":4134,\"Worldwide Gross\":4134,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Oct 21 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Fabrication Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.1,\"IMDB Votes\":226},{\"Title\":\"The Client\",\"US Gross\":92115211,\"Worldwide Gross\":117615211,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Jul 20 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Schumacher\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":6.5,\"IMDB Votes\":19299},{\"Title\":\"The Calling\",\"US Gross\":32092,\"Worldwide Gross\":32092,\"US DVD Sales\":null,\"Production Budget\":160000,\"Release Date\":\"Mar 01 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Testimony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael C. Brown\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.4,\"IMDB Votes\":1113},{\"Title\":\"Clueless\",\"US Gross\":56598476,\"Worldwide Gross\":56598476,\"US DVD Sales\":null,\"Production Budget\":13700000,\"Release Date\":\"Jul 01 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Amy Heckerling\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":6.7,\"IMDB Votes\":39055},{\"Title\":\"The Color Purple\",\"US Gross\":93589701,\"Worldwide Gross\":93589701,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 18 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.7,\"IMDB Votes\":26962},{\"Title\":\"Clerks\",\"US Gross\":3073428,\"Worldwide Gross\":3073428,\"US DVD Sales\":null,\"Production Budget\":27000,\"Release Date\":\"Oct 19 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin Smith\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.9,\"IMDB Votes\":89991},{\"Title\":\"Central do Brasil\",\"US Gross\":5969553,\"Worldwide Gross\":17006158,\"US DVD Sales\":null,\"Production Budget\":2900000,\"Release Date\":\"Nov 20 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Walter Salles\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8,\"IMDB Votes\":17343},{\"Title\":\"Clash of the Titans\",\"US Gross\":30000000,\"Worldwide Gross\":30000000,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jun 12 1981\",\"MPAA Rating\":null,\"Running Time min\":108,\"Distributor\":\"MGM\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":5.9,\"IMDB Votes\":45773},{\"Title\":\"Clockwatchers\",\"US Gross\":444354,\"Worldwide Gross\":444354,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"May 15 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Artistic License\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":3171},{\"Title\":\"Commando\",\"US Gross\":35073978,\"Worldwide Gross\":35073978,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 04 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":4.5,\"IMDB Votes\":49},{\"Title\":\"The Color of Money\",\"US Gross\":52293000,\"Worldwide Gross\":52293000,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 17 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":6.9,\"IMDB Votes\":25824},{\"Title\":\"Cinderella\",\"US Gross\":85000000,\"Worldwide Gross\":85000000,\"US DVD Sales\":null,\"Production Budget\":2900000,\"Release Date\":\"Feb 15 1950\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":5.1,\"IMDB Votes\":373},{\"Title\":\"Congo\",\"US Gross\":81022333,\"Worldwide Gross\":152022333,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Jun 09 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Frank Marshall\",\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":4.6,\"IMDB Votes\":17954},{\"Title\":\"Conan the Barbarian\",\"US Gross\":38264085,\"Worldwide Gross\":38264085,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"May 14 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"John Milius\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":6.8,\"IMDB Votes\":38886},{\"Title\":\"Conan the Destroyer\",\"US Gross\":26400000,\"Worldwide Gross\":26400000,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Jun 29 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Richard Fleischer\",\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":5.4,\"IMDB Votes\":20368},{\"Title\":\"Class of 1984\",\"US Gross\":6965361,\"Worldwide Gross\":6965361,\"US DVD Sales\":null,\"Production Budget\":3250000,\"Release Date\":\"Aug 20 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Film Distribution Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":2945},{\"Title\":\"The Clan of the Cave Bear\",\"US Gross\":1953732,\"Worldwide Gross\":1953732,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jan 17 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.9,\"IMDB Votes\":2763},{\"Title\":\"The Case of the Grinning Cat\",\"US Gross\":7033,\"Worldwide Gross\":7033,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Jul 21 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"First Run/Icarus\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Bacheha-Ye aseman\",\"US Gross\":925402,\"Worldwide Gross\":925402,\"US DVD Sales\":null,\"Production Budget\":180000,\"Release Date\":\"Jan 22 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8,\"IMDB Votes\":6657},{\"Title\":\"Coming Home\",\"US Gross\":32653000,\"Worldwide Gross\":32653000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Dec 31 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Hal Ashby\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.3,\"IMDB Votes\":4410},{\"Title\":\"Nanjing! Nanjing!\",\"US Gross\":0,\"Worldwide Gross\":20000000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Nov 17 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"National Geographic Entertainment\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":1725},{\"Title\":\"Cool Runnings\",\"US Gross\":68856263,\"Worldwide Gross\":155056263,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Oct 01 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jon Turteltaub\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":6.5,\"IMDB Votes\":24533},{\"Title\":\"Conquest of the Planet of the Apes\",\"US Gross\":9700000,\"Worldwide Gross\":9700000,\"US DVD Sales\":null,\"Production Budget\":1700000,\"Release Date\":\"Dec 31 1971\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Jack Lee Thompson\",\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":5.8,\"IMDB Votes\":6188},{\"Title\":\"Cure\",\"US Gross\":94596,\"Worldwide Gross\":94596,\"US DVD Sales\":null,\"Production Budget\":10000,\"Release Date\":\"Jul 06 2001\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":2724},{\"Title\":\"Crocodile Dundee\",\"US Gross\":174803506,\"Worldwide Gross\":328000000,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Sep 26 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":6.5,\"IMDB Votes\":27277},{\"Title\":\"Dayereh\",\"US Gross\":673780,\"Worldwide Gross\":673780,\"US DVD Sales\":null,\"Production Budget\":10000,\"Release Date\":\"Mar 09 2001\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"WinStar Cinema\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":1851},{\"Title\":\"Karakter\",\"US Gross\":713413,\"Worldwide Gross\":713413,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Mar 27 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":5531},{\"Title\":\"Creepshow\",\"US Gross\":20036244,\"Worldwide Gross\":20036244,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Nov 10 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"George A. Romero\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.5,\"IMDB Votes\":12530},{\"Title\":\"Creepshow 2\",\"US Gross\":14000000,\"Worldwide Gross\":14000000,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"May 01 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New World\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.4,\"IMDB Votes\":5910},{\"Title\":\"The Crying Game\",\"US Gross\":62546695,\"Worldwide Gross\":62546695,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Nov 25 1992\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Neil Jordan\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.3,\"IMDB Votes\":21195},{\"Title\":\"Crimson Tide\",\"US Gross\":91387195,\"Worldwide Gross\":159387195,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"May 12 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tony Scott\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.2,\"IMDB Votes\":33354},{\"Title\":\"Caravans\",\"US Gross\":1000000,\"Worldwide Gross\":1000000,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Dec 31 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":173},{\"Title\":\"Crying With Laughter\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":820000,\"Release Date\":\"Dec 31 2009\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Fengkuang de Shitou\",\"US Gross\":0,\"Worldwide Gross\":3000000,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Jun 30 2006\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":1209},{\"Title\":\"Casablanca\",\"US Gross\":10462500,\"Worldwide Gross\":10462500,\"US DVD Sales\":null,\"Production Budget\":950000,\"Release Date\":\"Dec 31 1941\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Michael Curtiz\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.8,\"IMDB Votes\":167939},{\"Title\":\"Casino\",\"US Gross\":42438300,\"Worldwide Gross\":110400000,\"US DVD Sales\":null,\"Production Budget\":52000000,\"Release Date\":\"Nov 22 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":8.1,\"IMDB Votes\":108634},{\"Title\":\"Casper\",\"US Gross\":100328194,\"Worldwide Gross\":282300000,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"May 26 1995\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Brad Silberling\",\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":5.7,\"IMDB Votes\":26121},{\"Title\":\"Can't Stop the Music\",\"US Gross\":2000000,\"Worldwide Gross\":2000000,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 31 1979\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.5,\"IMDB Votes\":2146},{\"Title\":\"Catch-22\",\"US Gross\":24911670,\"Worldwide Gross\":24911670,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Jun 24 1970\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Mike Nichols\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.1,\"IMDB Votes\":9671},{\"Title\":\"City Hall\",\"US Gross\":20278055,\"Worldwide Gross\":20278055,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Feb 16 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":111,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Harold Becker\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.1,\"IMDB Votes\":9908},{\"Title\":\"Cutthroat Island\",\"US Gross\":10017322,\"Worldwide Gross\":10017322,\"US DVD Sales\":null,\"Production Budget\":92000000,\"Release Date\":\"Dec 22 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Renny Harlin\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":5.3,\"IMDB Votes\":10346},{\"Title\":\"La femme de chambre du Titanic\",\"US Gross\":244465,\"Worldwide Gross\":244465,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Aug 14 1998\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":822},{\"Title\":\"Cat People\",\"US Gross\":4000000,\"Worldwide Gross\":8000000,\"US DVD Sales\":null,\"Production Budget\":134000,\"Release Date\":\"Nov 16 2042\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"RKO Radio Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":5.9,\"IMDB Votes\":6791},{\"Title\":\"Courage Under Fire\",\"US Gross\":59003384,\"Worldwide Gross\":100833145,\"US DVD Sales\":null,\"Production Budget\":46000000,\"Release Date\":\"Jul 12 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":115,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Edward Zwick\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":6.6,\"IMDB Votes\":19682},{\"Title\":\"C'era una volta il West\",\"US Gross\":5321508,\"Worldwide Gross\":5321508,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"May 28 1969\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Sergio Leone\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.8,\"IMDB Votes\":74184},{\"Title\":\"The Conversation\",\"US Gross\":4420000,\"Worldwide Gross\":4420000,\"US DVD Sales\":null,\"Production Budget\":1600000,\"Release Date\":\"Apr 07 1974\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.1,\"IMDB Votes\":33005},{\"Title\":\"Cavite\",\"US Gross\":70071,\"Worldwide Gross\":71644,\"US DVD Sales\":null,\"Production Budget\":7000,\"Release Date\":\"May 26 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Truly Indie\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":487},{\"Title\":\"Copycat\",\"US Gross\":32051917,\"Worldwide Gross\":32051917,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 27 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jon Amiel\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":6.5,\"IMDB Votes\":17182},{\"Title\":\"Dark Angel\",\"US Gross\":4372561,\"Worldwide Gross\":4372561,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Sep 28 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Triumph Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.3,\"IMDB Votes\":3396},{\"Title\":\"Boot, Das\",\"US Gross\":11487676,\"Worldwide Gross\":84970337,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Feb 10 1982\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Wolfgang Petersen\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.3,\"IMDB Votes\":2184},{\"Title\":\"Desperado\",\"US Gross\":25532388,\"Worldwide Gross\":25532388,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Aug 25 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Rodriguez\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":7,\"IMDB Votes\":51515},{\"Title\":\"Dumb & Dumber\",\"US Gross\":127175374,\"Worldwide Gross\":246400000,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Dec 16 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bobby Farrelly\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":88093},{\"Title\":\"Diamonds Are Forever\",\"US Gross\":43800000,\"Worldwide Gross\":116000000,\"US DVD Sales\":null,\"Production Budget\":7200000,\"Release Date\":\"Dec 17 1971\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":\"Guy Hamilton\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.7,\"IMDB Votes\":25354},{\"Title\":\"The Dark Half\",\"US Gross\":9579068,\"Worldwide Gross\":9579068,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Apr 23 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"George A. Romero\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":5488},{\"Title\":\"The Dark Hours\",\"US Gross\":423,\"Worldwide Gross\":423,\"US DVD Sales\":null,\"Production Budget\":400000,\"Release Date\":\"Oct 13 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Freestyle Releasing\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":2804},{\"Title\":\"Dante's Peak\",\"US Gross\":67163857,\"Worldwide Gross\":178200000,\"US DVD Sales\":null,\"Production Budget\":115000000,\"Release Date\":\"Feb 07 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":108,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Roger Donaldson\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":5.6,\"IMDB Votes\":23472},{\"Title\":\"Daylight\",\"US Gross\":32908290,\"Worldwide Gross\":158908290,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Dec 06 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":115,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rob Cohen\",\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5.4,\"IMDB Votes\":20052},{\"Title\":\"Dick Tracy\",\"US Gross\":103738726,\"Worldwide Gross\":162738726,\"US DVD Sales\":null,\"Production Budget\":47000000,\"Release Date\":\"Jun 15 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Warren Beatty\",\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":5.9,\"IMDB Votes\":25364},{\"Title\":\"Decoys\",\"US Gross\":84733,\"Worldwide Gross\":84733,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Feb 27 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.4,\"IMDB Votes\":2486},{\"Title\":\"Dawn of the Dead\",\"US Gross\":5100000,\"Worldwide Gross\":55000000,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Apr 20 1979\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Film Distribution Co.\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":73875},{\"Title\":\"The Addams Family\",\"US Gross\":113502246,\"Worldwide Gross\":191502246,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Nov 22 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Barry Sonnenfeld\",\"Rotten Tomatoes Rating\":59,\"IMDB Rating\":6.6,\"IMDB Votes\":28907},{\"Title\":\"Death Becomes Her\",\"US Gross\":58422650,\"Worldwide Gross\":149022650,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Jul 31 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Robert Zemeckis\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":6,\"IMDB Votes\":27681},{\"Title\":\"Def-Con 4\",\"US Gross\":210904,\"Worldwide Gross\":210904,\"US DVD Sales\":null,\"Production Budget\":1300000,\"Release Date\":\"Mar 15 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New World\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.8,\"IMDB Votes\":639},{\"Title\":\"Dead Poets' Society\",\"US Gross\":95860116,\"Worldwide Gross\":239500000,\"US DVD Sales\":null,\"Production Budget\":16400000,\"Release Date\":\"Jun 02 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Weir\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.8,\"IMDB Votes\":89662},{\"Title\":\"The Day the Earth Stood Still\",\"US Gross\":3700000,\"Worldwide Gross\":3700000,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Mar 04 2003\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":5.5,\"IMDB Votes\":51517},{\"Title\":\"Deep Throat\",\"US Gross\":45000000,\"Worldwide Gross\":45000000,\"US DVD Sales\":null,\"Production Budget\":25000,\"Release Date\":\"Jun 30 1972\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":3075},{\"Title\":\"The Dead Zone\",\"US Gross\":20766000,\"Worldwide Gross\":20766000,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 21 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"David Cronenberg\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":19485},{\"Title\":\"Die Hard 2\",\"US Gross\":117323878,\"Worldwide Gross\":239814025,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Jul 03 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Renny Harlin\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":79636},{\"Title\":\"Die Hard: With a Vengeance\",\"US Gross\":100012499,\"Worldwide Gross\":364480746,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"May 19 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John McTiernan\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":87437},{\"Title\":\"Dragonheart\",\"US Gross\":51364680,\"Worldwide Gross\":104364680,\"US DVD Sales\":null,\"Production Budget\":57000000,\"Release Date\":\"May 31 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":108,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Rob Cohen\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.2,\"IMDB Votes\":26309},{\"Title\":\"Die Hard\",\"US Gross\":81350242,\"Worldwide Gross\":139109346,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Jul 15 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John McTiernan\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.3,\"IMDB Votes\":237},{\"Title\":\"Diner\",\"US Gross\":12592907,\"Worldwide Gross\":12592907,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Apr 02 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Barry Levinson\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.1,\"IMDB Votes\":7803},{\"Title\":\"Dil Jo Bhi Kahey...\",\"US Gross\":129319,\"Worldwide Gross\":129319,\"US DVD Sales\":null,\"Production Budget\":1600000,\"Release Date\":\"Sep 23 2005\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Eros Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5,\"IMDB Votes\":159},{\"Title\":\"Don Juan DeMarco\",\"US Gross\":22032635,\"Worldwide Gross\":22032635,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Apr 07 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":6.6,\"IMDB Votes\":20386},{\"Title\":\"Tales from the Crypt: Demon Knight\",\"US Gross\":21089146,\"Worldwide Gross\":21089146,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jan 13 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":6430},{\"Title\":\"Damnation Alley\",\"US Gross\":null,\"Worldwide Gross\":null,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Oct 21 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.7,\"IMDB Votes\":1655},{\"Title\":\"Dead Man Walking\",\"US Gross\":39387284,\"Worldwide Gross\":83088295,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Dec 29 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Gramercy\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Tim Robbins\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.6,\"IMDB Votes\":32159},{\"Title\":\"Dances with Wolves\",\"US Gross\":184208842,\"Worldwide Gross\":424200000,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Nov 09 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Kevin Costner\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":8,\"IMDB Votes\":71399},{\"Title\":\"Dangerous Liaisons\",\"US Gross\":34700000,\"Worldwide Gross\":34700000,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Dec 21 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Stephen Frears\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":7.7,\"IMDB Votes\":25761},{\"Title\":\"Donovan's Reef\",\"US Gross\":6600000,\"Worldwide Gross\":6600000,\"US DVD Sales\":null,\"Production Budget\":2686000,\"Release Date\":\"Dec 31 1962\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Ford\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.6,\"IMDB Votes\":2907},{\"Title\":\"Due occhi diabolici\",\"US Gross\":349618,\"Worldwide Gross\":349618,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Oct 25 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":2059},{\"Title\":\"Double Impact\",\"US Gross\":29090445,\"Worldwide Gross\":29090445,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Aug 09 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sheldon Lettich\",\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":4.7,\"IMDB Votes\":10426},{\"Title\":\"The Doors\",\"US Gross\":34167219,\"Worldwide Gross\":34167219,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Mar 01 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Oliver Stone\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":7,\"IMDB Votes\":29750},{\"Title\":\"Day of the Dead\",\"US Gross\":5804262,\"Worldwide Gross\":34004262,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Jul 03 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Film Distribution Co.\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":\"George A. Romero\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":4.5,\"IMDB Votes\":8395},{\"Title\":\"Days of Thunder\",\"US Gross\":82670733,\"Worldwide Gross\":157670733,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jun 27 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tony Scott\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":5.4,\"IMDB Votes\":25395},{\"Title\":\"Dracula: Pages from a Virgin's Diary\",\"US Gross\":39659,\"Worldwide Gross\":84788,\"US DVD Sales\":null,\"Production Budget\":1100000,\"Release Date\":\"May 14 2003\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":1013},{\"Title\":\"Dolphin\",\"US Gross\":14000,\"Worldwide Gross\":14000,\"US DVD Sales\":null,\"Production Budget\":170000,\"Release Date\":\"Jun 01 1979\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":134},{\"Title\":\"Death Race 2000\",\"US Gross\":null,\"Worldwide Gross\":null,\"US DVD Sales\":null,\"Production Budget\":300000,\"Release Date\":\"Apr 01 1975\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Book/Short Story\",\"Major Genre\":null,\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.1,\"IMDB Votes\":10015},{\"Title\":\"Drei\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":7200000,\"Release Date\":\"Dec 31 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Tom Tykwer\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Dress\",\"US Gross\":16556,\"Worldwide Gross\":16556,\"US DVD Sales\":null,\"Production Budget\":2650000,\"Release Date\":\"Jan 16 1998\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Attitude Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":1844},{\"Title\":\"The Deer Hunter\",\"US Gross\":50000000,\"Worldwide Gross\":50000000,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 31 1978\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Michael Cimino\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.2,\"IMDB Votes\":88095},{\"Title\":\"Dragonslayer\",\"US Gross\":6000000,\"Worldwide Gross\":6000000,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Jun 26 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":6.8,\"IMDB Votes\":4945},{\"Title\":\"Driving Miss Daisy\",\"US Gross\":106593296,\"Worldwide Gross\":106593296,\"US DVD Sales\":null,\"Production Budget\":7500000,\"Release Date\":\"Dec 13 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Bruce Beresford\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7.5,\"IMDB Votes\":22566},{\"Title\":\"Dressed to Kill\",\"US Gross\":31899000,\"Worldwide Gross\":31899000,\"US DVD Sales\":null,\"Production Budget\":6500000,\"Release Date\":\"Jan 01 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7.1,\"IMDB Votes\":9556},{\"Title\":\"Do the Right Thing\",\"US Gross\":26004026,\"Worldwide Gross\":26004026,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Jun 30 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":7.9,\"IMDB Votes\":26877},{\"Title\":\"Dune\",\"US Gross\":27447471,\"Worldwide Gross\":27447471,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Dec 14 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"David Lynch\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":6.5,\"IMDB Votes\":38489},{\"Title\":\"Dolphins and Whales Tribes of the Ocean 3D\",\"US Gross\":7714996,\"Worldwide Gross\":17252287,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Feb 15 2008\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"3D Entertainment\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Down & Out with the Dolls\",\"US Gross\":58936,\"Worldwide Gross\":58936,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Mar 21 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Indican Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":75},{\"Title\":\"Dream With The Fishes\",\"US Gross\":542909,\"Worldwide Gross\":542909,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Jun 20 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":6.6,\"IMDB Votes\":1188},{\"Title\":\"Doctor Zhivago\",\"US Gross\":111721000,\"Worldwide Gross\":111721000,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Dec 22 1965\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"David Lean\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":8,\"IMDB Votes\":27671},{\"Title\":\"The Evil Dead\",\"US Gross\":2400000,\"Worldwide Gross\":29400000,\"US DVD Sales\":null,\"Production Budget\":375000,\"Release Date\":\"Apr 15 1983\",\"MPAA Rating\":\"NC-17\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":\"Sam Raimi\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":45030},{\"Title\":\"Evil Dead II\",\"US Gross\":5923044,\"Worldwide Gross\":5923044,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Mar 13 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Rosebud Releasing\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Sam Raimi\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.9,\"IMDB Votes\":44214},{\"Title\":\"Army of Darkness\",\"US Gross\":11502976,\"Worldwide Gross\":21502976,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Feb 19 1993\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Sam Raimi\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":55671},{\"Title\":\"Ed and his Dead Mother\",\"US Gross\":673,\"Worldwide Gross\":673,\"US DVD Sales\":null,\"Production Budget\":1800000,\"Release Date\":\"Dec 31 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":5.6,\"IMDB Votes\":829},{\"Title\":\"Edward Scissorhands\",\"US Gross\":53976987,\"Worldwide Gross\":53976987,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 07 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Tim Burton\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8,\"IMDB Votes\":102485},{\"Title\":\"Ed Wood\",\"US Gross\":5828466,\"Worldwide Gross\":5828466,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Sep 30 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Dramatization\",\"Director\":\"Tim Burton\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8.1,\"IMDB Votes\":74171},{\"Title\":\"The Egyptian\",\"US Gross\":15000000,\"Worldwide Gross\":15000000,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Dec 31 1953\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Michael Curtiz\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":1097},{\"Title\":\"Everyone Says I Love You\",\"US Gross\":9725847,\"Worldwide Gross\":34600000,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 06 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":6.8,\"IMDB Votes\":16481},{\"Title\":\"The Elephant Man\",\"US Gross\":26010864,\"Worldwide Gross\":26010864,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Oct 03 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"David Lynch\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8.4,\"IMDB Votes\":58194},{\"Title\":\"Emma\",\"US Gross\":22231658,\"Worldwide Gross\":37831658,\"US DVD Sales\":null,\"Production Budget\":5900000,\"Release Date\":\"Aug 02 1996\",\"MPAA Rating\":\"PG\",\"Running Time min\":111,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":13798},{\"Title\":\"Star Wars Ep. V: The Empire Strikes Back\",\"US Gross\":290271960,\"Worldwide Gross\":534171960,\"US DVD Sales\":10027926,\"Production Budget\":23000000,\"Release Date\":\"May 21 1980\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Escape from New York\",\"US Gross\":25244700,\"Worldwide Gross\":25244700,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Jul 10 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Avco Embassy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"John Carpenter\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.1,\"IMDB Votes\":34497},{\"Title\":\"Escape from L.A.\",\"US Gross\":25426861,\"Worldwide Gross\":25426861,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Aug 09 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":101,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"John Carpenter\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":5.3,\"IMDB Votes\":23262},{\"Title\":\"Escape from the Planet of the Apes\",\"US Gross\":12300000,\"Worldwide Gross\":12300000,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Dec 31 1970\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":6.1,\"IMDB Votes\":7686},{\"Title\":\"Eraser\",\"US Gross\":101295562,\"Worldwide Gross\":234400000,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Jun 21 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":115,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Chuck Russell\",\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":5.9,\"IMDB Votes\":37287},{\"Title\":\"Eraserhead\",\"US Gross\":7000000,\"Worldwide Gross\":7000000,\"US DVD Sales\":null,\"Production Budget\":100000,\"Release Date\":\"Dec 31 1976\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"David Lynch\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.4,\"IMDB Votes\":26595},{\"Title\":\"Everything You Always Wanted to Know\",\"US Gross\":18016290,\"Worldwide Gross\":18016290,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Aug 11 1972\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"ET: The Extra-Terrestrial\",\"US Gross\":435110554,\"Worldwide Gross\":792910554,\"US DVD Sales\":null,\"Production Budget\":10500000,\"Release Date\":\"Jun 11 1982\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.9,\"IMDB Votes\":105028},{\"Title\":\"Excessive Force\",\"US Gross\":1152117,\"Worldwide Gross\":1152117,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"May 14 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.7,\"IMDB Votes\":537},{\"Title\":\"Exorcist II: The Heretic\",\"US Gross\":25011000,\"Worldwide Gross\":25011000,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Jun 17 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":\"John Boorman\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.5,\"IMDB Votes\":7849},{\"Title\":\"Exotica\",\"US Gross\":5046118,\"Worldwide Gross\":5046118,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Sep 23 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Atom Egoyan\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.1,\"IMDB Votes\":8402},{\"Title\":\"Force 10 from Navarone\",\"US Gross\":7100000,\"Worldwide Gross\":7100000,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Dec 22 1978\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":null,\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":\"Guy Hamilton\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6,\"IMDB Votes\":5917},{\"Title\":\"A Farewell To Arms\",\"US Gross\":11000000,\"Worldwide Gross\":11000000,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Dec 31 1956\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Huston\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":1655},{\"Title\":\"Fatal Attraction\",\"US Gross\":156645693,\"Worldwide Gross\":320100000,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Sep 18 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Adrian Lyne\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.8,\"IMDB Votes\":22328},{\"Title\":\"Family Plot\",\"US Gross\":13200000,\"Worldwide Gross\":13200000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Apr 09 1976\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Alfred Hitchcock\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":6.8,\"IMDB Votes\":7290},{\"Title\":\"Fabled\",\"US Gross\":31425,\"Worldwide Gross\":31425,\"US DVD Sales\":null,\"Production Budget\":400000,\"Release Date\":\"Dec 10 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Indican Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":\"Ari S. Kirschenbaum\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.4,\"IMDB Votes\":146},{\"Title\":\"Fetching Cody\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Mar 17 2006\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":535},{\"Title\":\"The French Connection\",\"US Gross\":41158757,\"Worldwide Gross\":41158757,\"US DVD Sales\":null,\"Production Budget\":2200000,\"Release Date\":\"Oct 09 1971\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"William Friedkin\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":7.9,\"IMDB Votes\":33674},{\"Title\":\"From Dusk Till Dawn\",\"US Gross\":25728961,\"Worldwide Gross\":25728961,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Jan 19 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":107,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Robert Rodriguez\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":7.1,\"IMDB Votes\":80234},{\"Title\":\"Friday the 13th\",\"US Gross\":39754601,\"Worldwide Gross\":59754601,\"US DVD Sales\":null,\"Production Budget\":550000,\"Release Date\":\"May 09 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":5.6,\"IMDB Votes\":26798},{\"Title\":\"Friday the 13th Part 3\",\"US Gross\":36690067,\"Worldwide Gross\":36690067,\"US DVD Sales\":null,\"Production Budget\":2250000,\"Release Date\":\"Aug 13 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steve Miner\",\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":5.5,\"IMDB Votes\":13395},{\"Title\":\"Friday the 13th Part IV: The Final Chapter\",\"US Gross\":32980880,\"Worldwide Gross\":32980880,\"US DVD Sales\":null,\"Production Budget\":2600000,\"Release Date\":\"Apr 13 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Friday the 13th Part V: A New Beginning\",\"US Gross\":21930418,\"Worldwide Gross\":21930418,\"US DVD Sales\":null,\"Production Budget\":2200000,\"Release Date\":\"Mar 22 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Friday the 13th Part VI: Jason Lives\",\"US Gross\":19472057,\"Worldwide Gross\":19472057,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Aug 01 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Friday the 13th Part VII: The New Blood\",\"US Gross\":19170001,\"Worldwide Gross\":19170001,\"US DVD Sales\":null,\"Production Budget\":2800000,\"Release Date\":\"May 13 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.6,\"IMDB Votes\":8916},{\"Title\":\"Friday the 13th Part VIII: Jason Takes Manhattan\",\"US Gross\":14343976,\"Worldwide Gross\":14343976,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Jul 28 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.9,\"IMDB Votes\":10113},{\"Title\":\"Jason Goes to Hell: The Final Friday\",\"US Gross\":15935068,\"Worldwide Gross\":15935068,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Aug 13 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.1,\"IMDB Votes\":8733},{\"Title\":\"Per qualche dollaro in pi˘\",\"US Gross\":4300000,\"Worldwide Gross\":4300000,\"US DVD Sales\":null,\"Production Budget\":600000,\"Release Date\":\"May 10 1967\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Sergio Leone\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.2,\"IMDB Votes\":44204},{\"Title\":\"Per un pugno di dollari\",\"US Gross\":3500000,\"Worldwide Gross\":3500000,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Jan 18 1967\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Remake\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Sergio Leone\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8,\"IMDB Votes\":39929},{\"Title\":\"The Fall of the Roman Empire\",\"US Gross\":4750000,\"Worldwide Gross\":4750000,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Jan 01 1964\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":6.6,\"IMDB Votes\":3184},{\"Title\":\"Friday the 13th Part 2\",\"US Gross\":21722776,\"Worldwide Gross\":21722776,\"US DVD Sales\":null,\"Production Budget\":1250000,\"Release Date\":\"Apr 30 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":\"Steve Miner\",\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.5,\"IMDB Votes\":13395},{\"Title\":\"Faithful\",\"US Gross\":2104439,\"Worldwide Gross\":2104439,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Apr 05 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Play\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul Mazursky\",\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":5.7,\"IMDB Votes\":989},{\"Title\":\"Fair Game\",\"US Gross\":11497497,\"Worldwide Gross\":11497497,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Nov 03 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":6.6,\"IMDB Votes\":194},{\"Title\":\"A Few Good Men\",\"US Gross\":141340178,\"Worldwide Gross\":236500000,\"US DVD Sales\":null,\"Production Budget\":33000000,\"Release Date\":\"Dec 11 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rob Reiner\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.6,\"IMDB Votes\":63541},{\"Title\":\"The Fugitive\",\"US Gross\":183875760,\"Worldwide Gross\":368900000,\"US DVD Sales\":null,\"Production Budget\":44000000,\"Release Date\":\"Aug 06 1993\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andrew Davis\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.8,\"IMDB Votes\":96914},{\"Title\":\"From Here to Eternity\",\"US Gross\":30500000,\"Worldwide Gross\":30500000,\"US DVD Sales\":null,\"Production Budget\":1650000,\"Release Date\":\"Aug 05 1953\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Fred Zinnemann\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.9,\"IMDB Votes\":15115},{\"Title\":\"First Morning\",\"US Gross\":87264,\"Worldwide Gross\":87264,\"US DVD Sales\":null,\"Production Budget\":300000,\"Release Date\":\"Jul 15 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":90,\"Distributor\":\"Illuminare\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Shooting Fish\",\"US Gross\":302204,\"Worldwide Gross\":302204,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"May 01 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":4849},{\"Title\":\"F.I.S.T\",\"US Gross\":20388920,\"Worldwide Gross\":20388920,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Apr 13 1978\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Norman Jewison\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":2737},{\"Title\":\"Flashdance\",\"US Gross\":90463574,\"Worldwide Gross\":201463574,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Apr 15 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Adrian Lyne\",\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":5.6,\"IMDB Votes\":12485},{\"Title\":\"Fled\",\"US Gross\":17192205,\"Worldwide Gross\":19892205,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jul 19 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":98,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":4.9,\"IMDB Votes\":4215},{\"Title\":\"Flash Gordon\",\"US Gross\":27107960,\"Worldwide Gross\":27107960,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Dec 05 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.2,\"IMDB Votes\":14894},{\"Title\":\"The Flintstones\",\"US Gross\":130531208,\"Worldwide Gross\":358500000,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"May 27 1994\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Brian Levant\",\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":4.6,\"IMDB Votes\":26521},{\"Title\":\"Flight of the Intruder\",\"US Gross\":14471440,\"Worldwide Gross\":14471440,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Jan 18 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"John Milius\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.3,\"IMDB Votes\":2592},{\"Title\":\"Flatliners\",\"US Gross\":61308153,\"Worldwide Gross\":61308153,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Aug 10 1990\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Joel Schumacher\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":6.4,\"IMDB Votes\":23295},{\"Title\":\"The Flower of Evil\",\"US Gross\":181798,\"Worldwide Gross\":181798,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Oct 10 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Funny Ha Ha\",\"US Gross\":77070,\"Worldwide Gross\":77070,\"US DVD Sales\":null,\"Production Budget\":30000,\"Release Date\":\"Apr 29 2005\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Goodbye Cruel Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":1138},{\"Title\":\"The Funeral\",\"US Gross\":1212799,\"Worldwide Gross\":1412799,\"US DVD Sales\":null,\"Production Budget\":12500000,\"Release Date\":\"Nov 01 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"October Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Abel Ferrara\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":6.4,\"IMDB Votes\":4084},{\"Title\":\"Fantasia\",\"US Gross\":83320000,\"Worldwide Gross\":83320000,\"US DVD Sales\":null,\"Production Budget\":2280000,\"Release Date\":\"Nov 13 2040\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Compilation\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Multiple Creative Types\",\"Director\":null,\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":7.8,\"IMDB Votes\":29914},{\"Title\":\"Fantasia 2000 (IMAX)\",\"US Gross\":60507228,\"Worldwide Gross\":60507228,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jan 01 2000\",\"MPAA Rating\":\"G\",\"Running Time min\":75,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Compilation\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Fog\",\"US Gross\":21378361,\"Worldwide Gross\":21378361,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Feb 01 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Avco Embassy\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":\"John Carpenter\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":3.3,\"IMDB Votes\":15760},{\"Title\":\"Forrest Gump\",\"US Gross\":329694499,\"Worldwide Gross\":679400525,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Jul 06 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Robert Zemeckis\",\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":8.6,\"IMDB Votes\":300455},{\"Title\":\"Fortress\",\"US Gross\":6730578,\"Worldwide Gross\":46730578,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Sep 03 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":5.5,\"IMDB Votes\":7026},{\"Title\":\"Fiddler on the Roof\",\"US Gross\":80500000,\"Worldwide Gross\":80500000,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Jan 01 1971\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Based on Musical/Opera\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Norman Jewison\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.7,\"IMDB Votes\":14260},{\"Title\":\"The Front Page\",\"US Gross\":15000000,\"Worldwide Gross\":15000000,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Dec 17 1974\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Billy Wilder\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":7.2,\"IMDB Votes\":3875},{\"Title\":\"First Blood\",\"US Gross\":47212904,\"Worldwide Gross\":125212904,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Oct 22 1982\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ted Kotcheff\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":56369},{\"Title\":\"Friday\",\"US Gross\":27467564,\"Worldwide Gross\":27936778,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Apr 26 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"F. Gary Gray\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7,\"IMDB Votes\":21623},{\"Title\":\"Freeze Frame\",\"US Gross\":0,\"Worldwide Gross\":91062,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Dec 10 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"First Look\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":6.3,\"IMDB Votes\":1723},{\"Title\":\"Firefox\",\"US Gross\":45785720,\"Worldwide Gross\":45785720,\"US DVD Sales\":null,\"Production Budget\":21000000,\"Release Date\":\"Jun 18 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Clint Eastwood\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":5.6,\"IMDB Votes\":9348},{\"Title\":\"Fargo\",\"US Gross\":24567751,\"Worldwide Gross\":51204567,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Mar 08 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":87,\"Distributor\":\"Gramercy\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Coen\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":8.3,\"IMDB Votes\":165159},{\"Title\":\"First Knight\",\"US Gross\":37361412,\"Worldwide Gross\":127361412,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Jul 07 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Jerry Zucker\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":5.6,\"IMDB Votes\":20928},{\"Title\":\"From Russia With Love\",\"US Gross\":24800000,\"Worldwide Gross\":78900000,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Apr 08 1964\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":32541},{\"Title\":\"The Firm\",\"US Gross\":158340892,\"Worldwide Gross\":270340892,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Jun 30 1993\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sydney Pollack\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":5.5,\"IMDB Votes\":957},{\"Title\":\"Frenzy\",\"US Gross\":12600000,\"Worldwide Gross\":12600000,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Jun 21 1972\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Alfred Hitchcock\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.5,\"IMDB Votes\":13093},{\"Title\":\"Footloose\",\"US Gross\":80000000,\"Worldwide Gross\":80000000,\"US DVD Sales\":null,\"Production Budget\":8200000,\"Release Date\":\"Feb 17 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Herbert Ross\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":6,\"IMDB Votes\":15626},{\"Title\":\"Fast Times at Ridgemont High\",\"US Gross\":27092880,\"Worldwide Gross\":27092880,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Aug 13 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Amy Heckerling\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":7.2,\"IMDB Votes\":31362},{\"Title\":\"Fighting Tommy Riley\",\"US Gross\":10514,\"Worldwide Gross\":10514,\"US DVD Sales\":null,\"Production Budget\":300000,\"Release Date\":\"May 06 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Freestyle Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":499},{\"Title\":\"The First Wives Club\",\"US Gross\":105489203,\"Worldwide Gross\":181489203,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Sep 20 1996\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Hugh Wilson\",\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":5.6,\"IMDB Votes\":14682},{\"Title\":\"Flirting with Disaster\",\"US Gross\":14853474,\"Worldwide Gross\":14853474,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Mar 22 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David O. Russell\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":6.7,\"IMDB Votes\":8474},{\"Title\":\"For Your Eyes Only\",\"US Gross\":54800000,\"Worldwide Gross\":195300000,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Jun 26 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Glen\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.8,\"IMDB Votes\":23527},{\"Title\":\"Fiza\",\"US Gross\":623791,\"Worldwide Gross\":1179462,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Sep 08 2000\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Video Sound\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":749},{\"Title\":\"Grip: A Criminal's Story\",\"US Gross\":1336,\"Worldwide Gross\":1336,\"US DVD Sales\":null,\"Production Budget\":12000,\"Release Date\":\"Apr 28 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"JeTi Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Ghost and the Darkness\",\"US Gross\":38564422,\"Worldwide Gross\":38564422,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Oct 11 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":\"Stephen Hopkins\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":6.6,\"IMDB Votes\":19735},{\"Title\":\"Gallipoli\",\"US Gross\":5732587,\"Worldwide Gross\":5732587,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Aug 28 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Peter Weir\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.7,\"IMDB Votes\":14139},{\"Title\":\"Gabriela\",\"US Gross\":2335352,\"Worldwide Gross\":2335352,\"US DVD Sales\":null,\"Production Budget\":50000,\"Release Date\":\"Mar 16 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Power Point Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":1399},{\"Title\":\"Il buono, il brutto, il cattivo\",\"US Gross\":6100000,\"Worldwide Gross\":6100000,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Dec 29 1967\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Sergio Leone\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":104},{\"Title\":\"Graduation Day\",\"US Gross\":23894000,\"Worldwide Gross\":23894000,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"May 01 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3,\"IMDB Votes\":836},{\"Title\":\"The Godfather: Part II\",\"US Gross\":57300000,\"Worldwide Gross\":57300000,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Dec 11 1974\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":\"Historical Fiction\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":9,\"IMDB Votes\":245271},{\"Title\":\"The Godfather: Part III\",\"US Gross\":66520529,\"Worldwide Gross\":66520529,\"US DVD Sales\":null,\"Production Budget\":54000000,\"Release Date\":\"Dec 25 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":82977},{\"Title\":\"Goodfellas\",\"US Gross\":46743809,\"Worldwide Gross\":46743809,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Sep 19 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.8,\"IMDB Votes\":229156},{\"Title\":\"The Godfather\",\"US Gross\":134966411,\"Worldwide Gross\":268500000,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Mar 15 1972\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":\"Historical Fiction\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":9.2,\"IMDB Votes\":411088},{\"Title\":\"God's Army\",\"US Gross\":2637726,\"Worldwide Gross\":2652515,\"US DVD Sales\":null,\"Production Budget\":300000,\"Release Date\":\"Mar 10 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Excel Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.8,\"IMDB Votes\":638},{\"Title\":\"The Great Escape\",\"US Gross\":11744471,\"Worldwide Gross\":11744471,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Aug 08 1963\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Sturges\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8.4,\"IMDB Votes\":62074},{\"Title\":\"Gory Gory Hallelujah\",\"US Gross\":12604,\"Worldwide Gross\":12604,\"US DVD Sales\":null,\"Production Budget\":425000,\"Release Date\":\"Jan 21 2005\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":100,\"Distributor\":\"Indican Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":null,\"Director\":\"Sue Corcoran\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":134},{\"Title\":\"Ghost\",\"US Gross\":217631306,\"Worldwide Gross\":517600000,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Jul 13 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"Jerry Zucker\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.9,\"IMDB Votes\":51125},{\"Title\":\"Ghostbusters\",\"US Gross\":238632124,\"Worldwide Gross\":291632124,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jun 08 1984\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Ivan Reitman\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":358},{\"Title\":\"Girl 6\",\"US Gross\":4880941,\"Worldwide Gross\":4880941,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Mar 22 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":4.9,\"IMDB Votes\":3348},{\"Title\":\"Goldeneye\",\"US Gross\":106429941,\"Worldwide Gross\":356429941,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Nov 17 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martin Campbell\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":7.2,\"IMDB Votes\":69199},{\"Title\":\"The Glimmer Man\",\"US Gross\":20404841,\"Worldwide Gross\":36404841,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Oct 04 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":92,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.9,\"IMDB Votes\":7230},{\"Title\":\"Glory\",\"US Gross\":26593580,\"Worldwide Gross\":26593580,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Dec 14 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":\"Edward Zwick\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":8,\"IMDB Votes\":56427},{\"Title\":\"The Gambler\",\"US Gross\":51773,\"Worldwide Gross\":101773,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Aug 04 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":199},{\"Title\":\"Good Morning Vietnam\",\"US Gross\":123922370,\"Worldwide Gross\":123922370,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Dec 23 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Barry Levinson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":32609},{\"Title\":\"Gandhi\",\"US Gross\":52767889,\"Worldwide Gross\":52767889,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Dec 08 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Sir Richard Attenborough\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":8.2,\"IMDB Votes\":50881},{\"Title\":\"A Guy Named Joe\",\"US Gross\":5363000,\"Worldwide Gross\":5363000,\"US DVD Sales\":null,\"Production Budget\":2627000,\"Release Date\":\"Dec 24 2043\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":869},{\"Title\":\"Gentleman's Agreement\",\"US Gross\":7800000,\"Worldwide Gross\":7800000,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Dec 31 1946\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Elia Kazan\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.4,\"IMDB Votes\":4637},{\"Title\":\"Goodbye Bafana\",\"US Gross\":0,\"Worldwide Gross\":2717302,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Dec 14 2007\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Bille August\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":3631},{\"Title\":\"Get on the Bus\",\"US Gross\":5691854,\"Worldwide Gross\":5691854,\"US DVD Sales\":null,\"Production Budget\":2400000,\"Release Date\":\"Oct 16 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":6.7,\"IMDB Votes\":2701},{\"Title\":\"The Golden Child\",\"US Gross\":79817937,\"Worldwide Gross\":79817937,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Dec 12 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Michael Ritchie\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.4,\"IMDB Votes\":14471},{\"Title\":\"Good Dick\",\"US Gross\":28835,\"Worldwide Gross\":28835,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Oct 10 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Present Pictures/Morning Knight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":3004},{\"Title\":\"Goldfinger\",\"US Gross\":51100000,\"Worldwide Gross\":124900000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Dec 22 1964\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":\"Guy Hamilton\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.9,\"IMDB Votes\":47095},{\"Title\":\"Groundhog Day\",\"US Gross\":70906973,\"Worldwide Gross\":70906973,\"US DVD Sales\":null,\"Production Budget\":14600000,\"Release Date\":\"Feb 12 1993\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Harold Ramis\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8.2,\"IMDB Votes\":134964},{\"Title\":\"Gremlins\",\"US Gross\":148168459,\"Worldwide Gross\":148168459,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Jun 08 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Joe Dante\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7,\"IMDB Votes\":42163},{\"Title\":\"Get Real\",\"US Gross\":1152411,\"Worldwide Gross\":1152411,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Apr 30 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":6026},{\"Title\":\"Gremlins 2: The New Batch\",\"US Gross\":41476097,\"Worldwide Gross\":41476097,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Jun 15 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Joe Dante\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":22712},{\"Title\":\"The Greatest Story Ever Told\",\"US Gross\":15473333,\"Worldwide Gross\":15473333,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Feb 15 1965\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"David Lean\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.3,\"IMDB Votes\":3300},{\"Title\":\"The Gospel of John\",\"US Gross\":4068087,\"Worldwide Gross\":4068087,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Sep 26 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Greatest Show on Earth\",\"US Gross\":36000000,\"Worldwide Gross\":36000000,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Jan 10 1952\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":6.8,\"IMDB Votes\":4264},{\"Title\":\"The First Great Train Robbery\",\"US Gross\":391942,\"Worldwide Gross\":391942,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Feb 02 1979\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":\"Michael Crichton\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":5141},{\"Title\":\"Get Shorty\",\"US Gross\":72021008,\"Worldwide Gross\":115021008,\"US DVD Sales\":null,\"Production Budget\":30250000,\"Release Date\":\"Oct 20 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Barry Sonnenfeld\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":6.9,\"IMDB Votes\":33364},{\"Title\":\"Gettysburg\",\"US Gross\":10731997,\"Worldwide Gross\":10731997,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Oct 08 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.6,\"IMDB Votes\":11215},{\"Title\":\"Guiana 1838\",\"US Gross\":227241,\"Worldwide Gross\":227241,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Sep 24 2004\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"RBC Radio\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Gone with the Wind\",\"US Gross\":198680470,\"Worldwide Gross\":390525192,\"US DVD Sales\":null,\"Production Budget\":3900000,\"Release Date\":\"Dec 15 2039\",\"MPAA Rating\":\"G\",\"Running Time min\":222,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"George Cukor\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.2,\"IMDB Votes\":78947},{\"Title\":\"Happiness\",\"US Gross\":2746453,\"Worldwide Gross\":5746453,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Oct 16 1998\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Good Machine Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Todd Solondz\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.5,\"IMDB Votes\":64},{\"Title\":\"Harley Davidson and the Marlboro Man\",\"US Gross\":7018525,\"Worldwide Gross\":7018525,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Aug 23 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Simon Wincer\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":5.3,\"IMDB Votes\":6995},{\"Title\":\"Heavy Metal\",\"US Gross\":19571091,\"Worldwide Gross\":19571091,\"US DVD Sales\":null,\"Production Budget\":9300000,\"Release Date\":\"Aug 07 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6,\"IMDB Votes\":45},{\"Title\":\"Hell's Angels\",\"US Gross\":null,\"Worldwide Gross\":null,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Dec 31 1929\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.9,\"IMDB Votes\":2050},{\"Title\":\"Heartbeeps\",\"US Gross\":6000000,\"Worldwide Gross\":6000000,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Dec 18 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.1,\"IMDB Votes\":620},{\"Title\":\"The Helix...  Loaded\",\"US Gross\":3700,\"Worldwide Gross\":3700,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Mar 18 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Romar\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":1.5,\"IMDB Votes\":486},{\"Title\":\"Hang 'em High\",\"US Gross\":6800000,\"Worldwide Gross\":6800000,\"US DVD Sales\":null,\"Production Budget\":1800000,\"Release Date\":\"Aug 03 1968\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":6.9,\"IMDB Votes\":10292},{\"Title\":\"Hellraiser\",\"US Gross\":14564000,\"Worldwide Gross\":14564000,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Sep 18 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New World\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":7,\"IMDB Votes\":22442},{\"Title\":\"Hero\",\"US Gross\":19487173,\"Worldwide Gross\":66787173,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Oct 02 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stephen Frears\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":323},{\"Title\":\"Highlander III: The Sorcerer\",\"US Gross\":13738574,\"Worldwide Gross\":13738574,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Jan 27 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.8,\"IMDB Votes\":7763},{\"Title\":\"Highlander\",\"US Gross\":5900000,\"Worldwide Gross\":12900000,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Mar 07 1986\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Russell Mulcahy\",\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":7.2,\"IMDB Votes\":40802},{\"Title\":\"How Green Was My Valley\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":1250000,\"Release Date\":\"Oct 28 2041\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Ford\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.9,\"IMDB Votes\":7420},{\"Title\":\"High Noon\",\"US Gross\":8000000,\"Worldwide Gross\":8000000,\"US DVD Sales\":null,\"Production Budget\":730000,\"Release Date\":\"Dec 31 1951\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Fred Zinnemann\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":8.3,\"IMDB Votes\":34163},{\"Title\":\"History of the World: Part I\",\"US Gross\":31672000,\"Worldwide Gross\":31672000,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Jun 12 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Mel Brooks\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":16691},{\"Title\":\"Hello, Dolly\",\"US Gross\":33208099,\"Worldwide Gross\":33208099,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Dec 16 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.4,\"IMDB Votes\":254},{\"Title\":\"Halloween II\",\"US Gross\":25533818,\"Worldwide Gross\":25533818,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Oct 30 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rick Rosenthal\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":4.9,\"IMDB Votes\":12197},{\"Title\":\"Halloween 3: Season of the Witch\",\"US Gross\":14400000,\"Worldwide Gross\":14400000,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Oct 22 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.8,\"IMDB Votes\":12644},{\"Title\":\"Halloween 4: The Return of Michael Myers\",\"US Gross\":17768757,\"Worldwide Gross\":17768757,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Oct 01 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Dwight H. Little\",\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":5.6,\"IMDB Votes\":11079},{\"Title\":\"Halloween 5: The Revenge of Michael Myers\",\"US Gross\":11642254,\"Worldwide Gross\":11642254,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Oct 13 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Galaxy International Releasing\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Halloween:  The Curse of Michael Myers\",\"US Gross\":15126948,\"Worldwide Gross\":15126948,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Sep 29 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.4,\"IMDB Votes\":8576},{\"Title\":\"Halloween\",\"US Gross\":47000000,\"Worldwide Gross\":70000000,\"US DVD Sales\":null,\"Production Budget\":325000,\"Release Date\":\"Oct 17 1978\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":\"John Carpenter\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":6,\"IMDB Votes\":39866},{\"Title\":\"Home Alone 2: Lost in New York\",\"US Gross\":173585516,\"Worldwide Gross\":358994850,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Nov 20 1992\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Chris Columbus\",\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":5.8,\"IMDB Votes\":51408},{\"Title\":\"Home Alone\",\"US Gross\":285761243,\"Worldwide Gross\":476684675,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Nov 16 1990\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Chris Columbus\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":7,\"IMDB Votes\":79080},{\"Title\":\"Home Movies\",\"US Gross\":89134,\"Worldwide Gross\":89134,\"US DVD Sales\":null,\"Production Budget\":400000,\"Release Date\":\"May 16 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.3,\"IMDB Votes\":291},{\"Title\":\"Hum to Mohabbt Karega\",\"US Gross\":121807,\"Worldwide Gross\":121807,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"May 26 2000\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.6,\"IMDB Votes\":74},{\"Title\":\"The Hotel New Hampshire\",\"US Gross\":5142858,\"Worldwide Gross\":5142858,\"US DVD Sales\":null,\"Production Budget\":7500000,\"Release Date\":\"Mar 09 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":5.8,\"IMDB Votes\":4387},{\"Title\":\"Henry V\",\"US Gross\":10161099,\"Worldwide Gross\":10161099,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Nov 08 1989\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Goldwyn Entertainment\",\"Source\":\"Based on Play\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Kenneth Branagh\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.9,\"IMDB Votes\":14499},{\"Title\":\"Housefull\",\"US Gross\":1183658,\"Worldwide Gross\":14883658,\"US DVD Sales\":null,\"Production Budget\":10100000,\"Release Date\":\"Apr 30 2010\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Eros Entertainment\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.6,\"IMDB Votes\":687},{\"Title\":\"Hook\",\"US Gross\":119654823,\"Worldwide Gross\":300854823,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Dec 11 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":6.2,\"IMDB Votes\":60159},{\"Title\":\"House Party 2\",\"US Gross\":19438638,\"Worldwide Gross\":19438638,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Oct 23 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":4.3,\"IMDB Votes\":1596},{\"Title\":\"Hocus Pocus\",\"US Gross\":39360491,\"Worldwide Gross\":39360491,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Jul 16 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":6,\"IMDB Votes\":15893},{\"Title\":\"The Howling\",\"US Gross\":17985000,\"Worldwide Gross\":17985000,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Apr 10 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Joe Dante\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.5,\"IMDB Votes\":8731},{\"Title\":\"High Plains Drifter\",\"US Gross\":15700000,\"Worldwide Gross\":15700000,\"US DVD Sales\":null,\"Production Budget\":15700000,\"Release Date\":\"Jan 01 1972\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Clint Eastwood\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":15718},{\"Title\":\"Hoop Dreams\",\"US Gross\":7768371,\"Worldwide Gross\":11768371,\"US DVD Sales\":null,\"Production Budget\":700000,\"Release Date\":\"Oct 14 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8,\"IMDB Votes\":9492},{\"Title\":\"Happy Gilmore\",\"US Gross\":38623460,\"Worldwide Gross\":38623460,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 16 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":92,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Dennis Dugan\",\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":6.9,\"IMDB Votes\":54111},{\"Title\":\"The Hudsucker Proxy\",\"US Gross\":2816518,\"Worldwide Gross\":14938149,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Mar 11 1994\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Joel Coen\",\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":7.4,\"IMDB Votes\":32344},{\"Title\":\"A Hard Day's Night\",\"US Gross\":12299668,\"Worldwide Gross\":12299668,\"US DVD Sales\":null,\"Production Budget\":560000,\"Release Date\":\"Aug 11 1964\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.6,\"IMDB Votes\":15291},{\"Title\":\"Heroes\",\"US Gross\":655538,\"Worldwide Gross\":655538,\"US DVD Sales\":null,\"Production Budget\":400000,\"Release Date\":\"Oct 24 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Eros Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":505},{\"Title\":\"The Hunt for Red October\",\"US Gross\":120709866,\"Worldwide Gross\":200500000,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Mar 02 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"John McTiernan\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":7.6,\"IMDB Votes\":55202},{\"Title\":\"Harper\",\"US Gross\":12000000,\"Worldwide Gross\":12000000,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Feb 23 1966\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":2395},{\"Title\":\"Harriet the Spy\",\"US Gross\":26570048,\"Worldwide Gross\":26570048,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Jul 10 1996\",\"MPAA Rating\":\"PG\",\"Running Time min\":101,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":5.8,\"IMDB Votes\":2963},{\"Title\":\"Le hussard sur le toit\",\"US Gross\":1320043,\"Worldwide Gross\":1320043,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Apr 19 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":3083},{\"Title\":\"The Hustler\",\"US Gross\":7600000,\"Worldwide Gross\":7600000,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Sep 25 1961\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.1,\"IMDB Votes\":25385},{\"Title\":\"Hud\",\"US Gross\":10000000,\"Worldwide Gross\":10000000,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"May 29 1963\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Martin Ritt\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":3.4,\"IMDB Votes\":93},{\"Title\":\"Hudson Hawk\",\"US Gross\":17218916,\"Worldwide Gross\":17218916,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"May 24 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Lehmann\",\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":5.3,\"IMDB Votes\":21920},{\"Title\":\"Heaven's Gate\",\"US Gross\":3484331,\"Worldwide Gross\":3484331,\"US DVD Sales\":null,\"Production Budget\":44000000,\"Release Date\":\"Nov 19 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Michael Cimino\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":4649},{\"Title\":\"Hav Plenty\",\"US Gross\":2301777,\"Worldwide Gross\":2301777,\"US DVD Sales\":null,\"Production Budget\":650000,\"Release Date\":\"Jun 19 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":580},{\"Title\":\"House of Wax\",\"US Gross\":23800000,\"Worldwide Gross\":23800000,\"US DVD Sales\":null,\"Production Budget\":658000,\"Release Date\":\"Apr 10 1953\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":5.4,\"IMDB Votes\":32159},{\"Title\":\"Hawaii\",\"US Gross\":34562222,\"Worldwide Gross\":34562222,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Oct 10 1966\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"George Roy Hill\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":1153},{\"Title\":\"Howard the Duck\",\"US Gross\":16295774,\"Worldwide Gross\":16295774,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Aug 01 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":4.1,\"IMDB Votes\":16051},{\"Title\":\"High Anxiety\",\"US Gross\":31063038,\"Worldwide Gross\":31063038,\"US DVD Sales\":null,\"Production Budget\":3400000,\"Release Date\":\"Dec 23 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Mel Brooks\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":6.5,\"IMDB Votes\":7025},{\"Title\":\"Hybrid\",\"US Gross\":162605,\"Worldwide Gross\":162605,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"May 10 2002\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Indican Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":2.2,\"IMDB Votes\":380},{\"Title\":\"It's a Wonderful Life\",\"US Gross\":6600000,\"Worldwide Gross\":6600000,\"US DVD Sales\":19339789,\"Production Budget\":3180000,\"Release Date\":\"Dec 31 1945\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Frank Capra\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":8.7,\"IMDB Votes\":101499},{\"Title\":\"The Ice Pirates\",\"US Gross\":13075390,\"Worldwide Gross\":13075390,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Mar 16 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM/UA Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":5.1,\"IMDB Votes\":3600},{\"Title\":\"Independence Day\",\"US Gross\":306169255,\"Worldwide Gross\":817400878,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Jul 02 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":145,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Roland Emmerich\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6.5,\"IMDB Votes\":149493},{\"Title\":\"The Island of Dr. Moreau\",\"US Gross\":27682712,\"Worldwide Gross\":27682712,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Aug 23 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"John Frankenheimer\",\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":4.1,\"IMDB Votes\":13770},{\"Title\":\"Iraq for Sale: The War Profiteers\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":775000,\"Release Date\":\"Sep 08 2006\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.8,\"IMDB Votes\":854},{\"Title\":\"In Her Line of Fire\",\"US Gross\":884,\"Worldwide Gross\":884,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Apr 21 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Regent Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.5,\"IMDB Votes\":337},{\"Title\":\"The Indian in the Cupboard\",\"US Gross\":35627222,\"Worldwide Gross\":35627222,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Jul 14 1995\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Frank Oz\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":5.7,\"IMDB Votes\":4836},{\"Title\":\"I Love You Ö Don't Touch Me!\",\"US Gross\":33598,\"Worldwide Gross\":33598,\"US DVD Sales\":null,\"Production Budget\":68000,\"Release Date\":\"Feb 20 1998\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":298},{\"Title\":\"Illuminata\",\"US Gross\":836641,\"Worldwide Gross\":836641,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Aug 06 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":1100},{\"Title\":\"In Cold Blood\",\"US Gross\":13000000,\"Worldwide Gross\":13000000,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Dec 31 1966\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Richard Brooks\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":8.1,\"IMDB Votes\":10562},{\"Title\":\"In the Company of Men\",\"US Gross\":2883661,\"Worldwide Gross\":2883661,\"US DVD Sales\":null,\"Production Budget\":25000,\"Release Date\":\"Aug 01 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Neil LaBute\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.2,\"IMDB Votes\":7601},{\"Title\":\"The Inkwell\",\"US Gross\":8864699,\"Worldwide Gross\":8864699,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Apr 22 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":5.7,\"IMDB Votes\":542},{\"Title\":\"Invaders from Mars\",\"US Gross\":4884663,\"Worldwide Gross\":4984663,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jun 06 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Cannon\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Tobe Hooper\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":5,\"IMDB Votes\":1933},{\"Title\":\"L'incomparable mademoiselle C.\",\"US Gross\":493905,\"Worldwide Gross\":493905,\"US DVD Sales\":null,\"Production Budget\":3400000,\"Release Date\":\"Apr 23 2004\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":66},{\"Title\":\"Intolerance\",\"US Gross\":null,\"Worldwide Gross\":null,\"US DVD Sales\":null,\"Production Budget\":385907,\"Release Date\":\"Sep 05 2016\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Island\",\"US Gross\":15716828,\"Worldwide Gross\":15716828,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Jun 13 1980\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":138,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Ritchie\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":82601},{\"Title\":\"Eye See You\",\"US Gross\":79161,\"Worldwide Gross\":1807990,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Sep 20 2002\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.1,\"IMDB Votes\":397},{\"Title\":\"In the Heat of the Night\",\"US Gross\":24379978,\"Worldwide Gross\":24379978,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Aug 02 1967\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Norman Jewison\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8.1,\"IMDB Votes\":22429},{\"Title\":\"Jack\",\"US Gross\":58617334,\"Worldwide Gross\":58617334,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Aug 09 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":113,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.3,\"IMDB Votes\":17267},{\"Title\":\"Jade\",\"US Gross\":9812870,\"Worldwide Gross\":9812870,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Oct 13 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"William Friedkin\",\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":4.8,\"IMDB Votes\":5279},{\"Title\":\"Jingle All the Way\",\"US Gross\":60592389,\"Worldwide Gross\":129832389,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Nov 22 1996\",\"MPAA Rating\":\"PG\",\"Running Time min\":89,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Brian Levant\",\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":4.9,\"IMDB Votes\":22928},{\"Title\":\"Dr. No\",\"US Gross\":16067035,\"Worldwide Gross\":59567035,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"May 08 1963\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":36019},{\"Title\":\"The Jungle Book\",\"US Gross\":44342956,\"Worldwide Gross\":44342956,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Dec 25 1994\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Stephen Sommers\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":5564},{\"Title\":\"Judge Dredd\",\"US Gross\":34687912,\"Worldwide Gross\":113487912,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Jun 30 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":4.9,\"IMDB Votes\":30736},{\"Title\":\"The Jerky Boys\",\"US Gross\":7555256,\"Worldwide Gross\":7555256,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Feb 03 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":3.9,\"IMDB Votes\":1481},{\"Title\":\"Jefferson in Paris\",\"US Gross\":2461628,\"Worldwide Gross\":2461628,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Mar 31 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"James Ivory\",\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":5.6,\"IMDB Votes\":1464},{\"Title\":\"JFK\",\"US Gross\":70405498,\"Worldwide Gross\":205400000,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Dec 20 1991\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Oliver Stone\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":8,\"IMDB Votes\":59684},{\"Title\":\"Journey from the Fall\",\"US Gross\":635305,\"Worldwide Gross\":635305,\"US DVD Sales\":null,\"Production Budget\":1300000,\"Release Date\":\"Mar 23 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Imaginasian\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.2,\"IMDB Votes\":586},{\"Title\":\"Jekyll and Hyde... Together Again\",\"US Gross\":3707583,\"Worldwide Gross\":3707583,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Aug 27 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":486},{\"Title\":\"Jumanji\",\"US Gross\":100458310,\"Worldwide Gross\":262758310,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Dec 15 1995\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Joe Johnston\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.4,\"IMDB Votes\":54973},{\"Title\":\"The Juror\",\"US Gross\":22730924,\"Worldwide Gross\":22730924,\"US DVD Sales\":null,\"Production Budget\":44000000,\"Release Date\":\"Feb 02 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":5.3,\"IMDB Votes\":6482},{\"Title\":\"Jerusalema\",\"US Gross\":7294,\"Worldwide Gross\":7294,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jun 11 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Anchor Bay Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":null,\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.9,\"IMDB Votes\":6777},{\"Title\":\"Jurassic Park\",\"US Gross\":357067947,\"Worldwide Gross\":923067947,\"US DVD Sales\":null,\"Production Budget\":63000000,\"Release Date\":\"Jun 10 1993\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.9,\"IMDB Votes\":151365},{\"Title\":\"Johnny Suede\",\"US Gross\":55000,\"Worldwide Gross\":55000,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Dec 31 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":1587},{\"Title\":\"Jaws\",\"US Gross\":260000000,\"Worldwide Gross\":470700000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jun 20 1975\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":8.3,\"IMDB Votes\":138017},{\"Title\":\"Jaws 2\",\"US Gross\":102922376,\"Worldwide Gross\":208900376,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Jun 16 1978\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":5.6,\"IMDB Votes\":18793},{\"Title\":\"Jaws 4: The Revenge\",\"US Gross\":15728335,\"Worldwide Gross\":15728335,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Jul 17 1987\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":2.6,\"IMDB Votes\":15632},{\"Title\":\"Kabhi Alvida Naa Kehna\",\"US Gross\":3275443,\"Worldwide Gross\":32575443,\"US DVD Sales\":null,\"Production Budget\":10750000,\"Release Date\":\"Aug 11 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Yash Raj Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":5.6,\"IMDB Votes\":4128},{\"Title\":\"Kickboxer\",\"US Gross\":14533681,\"Worldwide Gross\":14533681,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Sep 08 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Cannon\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mark DiSalle\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":11692},{\"Title\":\"Kids\",\"US Gross\":7412216,\"Worldwide Gross\":20412216,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Jul 21 1995\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":90,\"Distributor\":\"Shining Excalibur\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.7,\"IMDB Votes\":26122},{\"Title\":\"Kingpin\",\"US Gross\":25023424,\"Worldwide Gross\":32223424,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jul 26 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":113,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bobby Farrelly\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":6.7,\"IMDB Votes\":28404},{\"Title\":\"Kindergarten Cop\",\"US Gross\":91457688,\"Worldwide Gross\":202000000,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Dec 21 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ivan Reitman\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":5.8,\"IMDB Votes\":40433},{\"Title\":\"King Kong (1933)\",\"US Gross\":10000000,\"Worldwide Gross\":10000000,\"US DVD Sales\":null,\"Production Budget\":670000,\"Release Date\":\"Apr 07 2033\",\"MPAA Rating\":null,\"Running Time min\":100,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"King Kong\",\"US Gross\":52614445,\"Worldwide Gross\":90614445,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Dec 17 1976\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Guillermin\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":7.6,\"IMDB Votes\":132720},{\"Title\":\"Kiss of Death\",\"US Gross\":14942422,\"Worldwide Gross\":14942422,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Apr 21 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Barbet Schroeder\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":7.6,\"IMDB Votes\":2374},{\"Title\":\"The Kings of Appletown\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Dec 12 2008\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Koltchak\",\"US Gross\":0,\"Worldwide Gross\":38585047,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 10 2008\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Kingdom of the Spiders\",\"US Gross\":17000000,\"Worldwide Gross\":17000000,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Dec 31 1976\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":5.7,\"IMDB Votes\":1463},{\"Title\":\"Keeping it Real: The Adventures of Greg Walloch\",\"US Gross\":1358,\"Worldwide Gross\":1358,\"US DVD Sales\":null,\"Production Budget\":100000,\"Release Date\":\"Nov 09 2001\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Avatar\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Akira\",\"US Gross\":19585,\"Worldwide Gross\":19585,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Apr 27 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.9,\"IMDB Votes\":39948},{\"Title\":\"Krush Groove\",\"US Gross\":11052713,\"Worldwide Gross\":11052713,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Oct 25 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":588},{\"Title\":\"Krrish\",\"US Gross\":1430721,\"Worldwide Gross\":32430721,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jun 23 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"AdLab Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":6.1,\"IMDB Votes\":2735},{\"Title\":\"Kansas City\",\"US Gross\":1353824,\"Worldwide Gross\":1353824,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Aug 16 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Robert Altman\",\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":6,\"IMDB Votes\":2397},{\"Title\":\"The Last Emperor\",\"US Gross\":43984000,\"Worldwide Gross\":43984000,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Nov 20 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Bernardo Bertolucci\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7.9,\"IMDB Votes\":24262},{\"Title\":\"Last Action Hero\",\"US Gross\":50016394,\"Worldwide Gross\":137298489,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Jun 18 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"John McTiernan\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.9,\"IMDB Votes\":43171},{\"Title\":\"Live and Let Die\",\"US Gross\":35400000,\"Worldwide Gross\":161800000,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Jun 27 1973\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":\"Guy Hamilton\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.8,\"IMDB Votes\":24044},{\"Title\":\"Lage Raho Munnabhai\",\"US Gross\":2217561,\"Worldwide Gross\":31517561,\"US DVD Sales\":null,\"Production Budget\":2700000,\"Release Date\":\"Sep 01 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Eros Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":5236},{\"Title\":\"The Last Waltz\",\"US Gross\":321952,\"Worldwide Gross\":321952,\"US DVD Sales\":null,\"Production Budget\":35000,\"Release Date\":\"Apr 05 2002\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8,\"IMDB Votes\":6893},{\"Title\":\"The Last Big Thing\",\"US Gross\":22434,\"Worldwide Gross\":22434,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Sep 25 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Stratosphere Entertainment\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":139},{\"Title\":\"The Land Before Time\",\"US Gross\":48092846,\"Worldwide Gross\":81972846,\"US DVD Sales\":null,\"Production Budget\":12300000,\"Release Date\":\"Nov 18 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Don Bluth\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.9,\"IMDB Votes\":14017},{\"Title\":\"The Longest Day\",\"US Gross\":39100000,\"Worldwide Gross\":50100000,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 04 1962\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.8,\"IMDB Votes\":17712},{\"Title\":\"The Living Daylights\",\"US Gross\":51185000,\"Worldwide Gross\":191200000,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jul 31 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Glen\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":6.7,\"IMDB Votes\":23735},{\"Title\":\"Aladdin\",\"US Gross\":217350219,\"Worldwide Gross\":504050219,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Nov 11 1992\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":69090},{\"Title\":\"A Low Down Dirty Shame\",\"US Gross\":29317886,\"Worldwide Gross\":29317886,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Nov 23 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Keenen Ivory Wayans\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.4,\"IMDB Votes\":1847},{\"Title\":\"Love and Death on Long Island\",\"US Gross\":2542264,\"Worldwide Gross\":2542264,\"US DVD Sales\":null,\"Production Budget\":4030000,\"Release Date\":\"Mar 06 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":2506},{\"Title\":\"Ladyhawke\",\"US Gross\":18400000,\"Worldwide Gross\":18400000,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Apr 12 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Richard Donner\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.7,\"IMDB Votes\":15260},{\"Title\":\"Nikita\",\"US Gross\":5017971,\"Worldwide Gross\":5017971,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Mar 08 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Goldwyn Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Luc Besson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":24872},{\"Title\":\"Lion of the Desert\",\"US Gross\":1500000,\"Worldwide Gross\":1500000,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Dec 31 1979\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Film Distribution Co.\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":2659},{\"Title\":\"Legal Eagles\",\"US Gross\":49851591,\"Worldwide Gross\":49851591,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jun 18 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ivan Reitman\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":5.6,\"IMDB Votes\":4471},{\"Title\":\"Legend\",\"US Gross\":15502112,\"Worldwide Gross\":15502112,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Apr 18 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":20734},{\"Title\":\"The Last House on the Left\",\"US Gross\":3100000,\"Worldwide Gross\":3100000,\"US DVD Sales\":null,\"Production Budget\":87000,\"Release Date\":\"Aug 30 1972\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.7,\"IMDB Votes\":22141},{\"Title\":\"Lifeforce\",\"US Gross\":11603545,\"Worldwide Gross\":11603545,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jun 21 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/TriStar\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Tobe Hooper\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":5.8,\"IMDB Votes\":5727},{\"Title\":\"Lady in White\",\"US Gross\":1705139,\"Worldwide Gross\":1705139,\"US DVD Sales\":null,\"Production Budget\":4700000,\"Release Date\":\"Apr 22 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Century Vista Film Company\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":6.6,\"IMDB Votes\":2221},{\"Title\":\"The Long Kiss Goodnight\",\"US Gross\":33447612,\"Worldwide Gross\":33447612,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Oct 11 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Renny Harlin\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":6.6,\"IMDB Votes\":28257},{\"Title\":\"Lake of Fire\",\"US Gross\":25317,\"Worldwide Gross\":25317,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Oct 03 2007\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.4,\"IMDB Votes\":1027},{\"Title\":\"Elling\",\"US Gross\":313436,\"Worldwide Gross\":313436,\"US DVD Sales\":null,\"Production Budget\":2100000,\"Release Date\":\"May 29 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":7114},{\"Title\":\"Lolita (1962)\",\"US Gross\":9250000,\"Worldwide Gross\":9250000,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jan 01 1962\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Stanley Kubrick\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Elmer Gantry\",\"US Gross\":10400000,\"Worldwide Gross\":10400000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Dec 31 1959\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Richard Brooks\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.8,\"IMDB Votes\":4185},{\"Title\":\"El Mariachi\",\"US Gross\":2040920,\"Worldwide Gross\":2040920,\"US DVD Sales\":null,\"Production Budget\":7000,\"Release Date\":\"Feb 26 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":\"Robert Rodriguez\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":19668},{\"Title\":\"Last Man Standing\",\"US Gross\":18115927,\"Worldwide Gross\":18115927,\"US DVD Sales\":null,\"Production Budget\":67000000,\"Release Date\":\"Sep 20 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Walter Hill\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Aliens\",\"US Gross\":85160248,\"Worldwide Gross\":183316455,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Jul 18 1986\",\"MPAA Rating\":\"R\",\"Running Time min\":137,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"James Cameron\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.5,\"IMDB Votes\":84},{\"Title\":\"Alien³\",\"US Gross\":54927174,\"Worldwide Gross\":158500000,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"May 22 1992\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"David Fincher\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":6.3,\"IMDB Votes\":78860},{\"Title\":\"The Lion King\",\"US Gross\":328539505,\"Worldwide Gross\":783839505,\"US DVD Sales\":null,\"Production Budget\":79300000,\"Release Date\":\"Jun 15 1994\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Rob Minkoff\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":8.2,\"IMDB Votes\":136503},{\"Title\":\"Love and Death\",\"US Gross\":20123742,\"Worldwide Gross\":20123742,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Jun 10 1975\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.6,\"IMDB Votes\":12111},{\"Title\":\"Love and Other Catastrophes\",\"US Gross\":212285,\"Worldwide Gross\":743216,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Mar 28 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":1406},{\"Title\":\"Love Letters\",\"US Gross\":5269990,\"Worldwide Gross\":5269990,\"US DVD Sales\":null,\"Production Budget\":550000,\"Release Date\":\"Apr 27 1984\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New World\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":477},{\"Title\":\"The Legend of the Lone Ranger\",\"US Gross\":13400000,\"Worldwide Gross\":13400000,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"May 22 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.6,\"IMDB Votes\":755},{\"Title\":\"The Last of the Mohicans\",\"US Gross\":72455275,\"Worldwide Gross\":72455275,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Sep 25 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Michael Mann\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":7.8,\"IMDB Votes\":45410},{\"Title\":\"Love Me Tender\",\"US Gross\":9000000,\"Worldwide Gross\":9000000,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Dec 31 1955\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.9,\"IMDB Votes\":1301},{\"Title\":\"The Long Riders\",\"US Gross\":15198912,\"Worldwide Gross\":15198912,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"May 16 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Walter Hill\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":7.1,\"IMDB Votes\":3791},{\"Title\":\"Losin' It\",\"US Gross\":1246141,\"Worldwide Gross\":1246141,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Apr 08 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.6,\"IMDB Votes\":1668},{\"Title\":\"The Loss of Sexual Innocence\",\"US Gross\":399793,\"Worldwide Gross\":399793,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"May 28 1999\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Mike Figgis\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":4.9,\"IMDB Votes\":2263},{\"Title\":\"Legends of the Fall\",\"US Gross\":66502573,\"Worldwide Gross\":66502573,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Dec 23 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Edward Zwick\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":7.1,\"IMDB Votes\":39815},{\"Title\":\"A League of Their Own\",\"US Gross\":107533925,\"Worldwide Gross\":132440066,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jul 01 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Penny Marshall\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.9,\"IMDB Votes\":33426},{\"Title\":\"Loaded Weapon 1\",\"US Gross\":27979399,\"Worldwide Gross\":27979399,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Feb 05 1993\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":17637},{\"Title\":\"The Lost Weekend\",\"US Gross\":11000000,\"Worldwide Gross\":11000000,\"US DVD Sales\":null,\"Production Budget\":1250000,\"Release Date\":\"Dec 31 1944\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Billy Wilder\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":8.2,\"IMDB Votes\":11864},{\"Title\":\"Le petit Nicolas\",\"US Gross\":201857,\"Worldwide Gross\":52339566,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Feb 19 2010\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":1505},{\"Title\":\"Logan's Run\",\"US Gross\":25000000,\"Worldwide Gross\":25000000,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Dec 31 1975\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":6.7,\"IMDB Votes\":14947},{\"Title\":\"Betty Fisher et autres histoires\",\"US Gross\":206400,\"Worldwide Gross\":206400,\"US DVD Sales\":null,\"Production Budget\":7500000,\"Release Date\":\"Sep 13 2002\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"WellSpring\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":1054},{\"Title\":\"Light Sleeper\",\"US Gross\":1050861,\"Worldwide Gross\":1050861,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Sep 21 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":6.7,\"IMDB Votes\":1986},{\"Title\":\"Little Shop of Horrors\",\"US Gross\":38747385,\"Worldwide Gross\":38747385,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Dec 19 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Fantasy\",\"Director\":\"Frank Oz\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":6.6,\"IMDB Votes\":21521},{\"Title\":\"Lone Star\",\"US Gross\":12961389,\"Worldwide Gross\":12961389,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Jun 21 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Sayles\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.6,\"IMDB Votes\":14599},{\"Title\":\"Latter Days\",\"US Gross\":833118,\"Worldwide Gross\":833118,\"US DVD Sales\":null,\"Production Budget\":850000,\"Release Date\":\"Jan 30 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"TLA Releasing\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":7157},{\"Title\":\"Lethal Weapon\",\"US Gross\":65192350,\"Worldwide Gross\":120192350,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Mar 06 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Donner\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.6,\"IMDB Votes\":54994},{\"Title\":\"Lethal Weapon 3\",\"US Gross\":144731527,\"Worldwide Gross\":319700000,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"May 15 1992\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Donner\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":6.5,\"IMDB Votes\":39735},{\"Title\":\"The Last Time I Committed Suicide\",\"US Gross\":12836,\"Worldwide Gross\":12836,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Jun 20 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Roxie Releasing\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":1181},{\"Title\":\"Little Voice\",\"US Gross\":4595000,\"Worldwide Gross\":4595000,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Dec 04 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Play\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":6.9,\"IMDB Votes\":8453},{\"Title\":\"The Last Temptation of Christ\",\"US Gross\":8373585,\"Worldwide Gross\":8373585,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Aug 12 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.5,\"IMDB Votes\":20934},{\"Title\":\"License to Kill\",\"US Gross\":34667015,\"Worldwide Gross\":156167015,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Jul 14 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Glen\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":24558},{\"Title\":\"Cama adentro\",\"US Gross\":200433,\"Worldwide Gross\":200433,\"US DVD Sales\":null,\"Production Budget\":800000,\"Release Date\":\"Jul 18 2007\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Film Sales Company\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":466},{\"Title\":\"Leaving Las Vegas\",\"US Gross\":31983777,\"Worldwide Gross\":49800000,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Oct 27 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mike Figgis\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.6,\"IMDB Votes\":42131},{\"Title\":\"The Lawnmower Man\",\"US Gross\":32100816,\"Worldwide Gross\":32100816,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Mar 06 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":5.1,\"IMDB Votes\":12607},{\"Title\":\"Lone Wolf McQuade\",\"US Gross\":12232628,\"Worldwide Gross\":12232628,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Apr 15 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":2917},{\"Title\":\"Little Women\",\"US Gross\":50003303,\"Worldwide Gross\":50003303,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 21 1994\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.1,\"IMDB Votes\":16514},{\"Title\":\"Lawrence of Arabia\",\"US Gross\":37495385,\"Worldwide Gross\":69995385,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 16 1962\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Dramatization\",\"Director\":\"David Lean\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.6,\"IMDB Votes\":79421},{\"Title\":\"Menace II Society\",\"US Gross\":27731527,\"Worldwide Gross\":27731527,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"May 26 1993\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Albert Hughes\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":7.4,\"IMDB Votes\":14807},{\"Title\":\"Much Ado About Nothing\",\"US Gross\":22549338,\"Worldwide Gross\":22549338,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"May 07 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Goldwyn Entertainment\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Kenneth Branagh\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.4,\"IMDB Votes\":22470},{\"Title\":\"Major Dundee\",\"US Gross\":14873,\"Worldwide Gross\":14873,\"US DVD Sales\":null,\"Production Budget\":3800000,\"Release Date\":\"Apr 07 1965\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":6.7,\"IMDB Votes\":2588},{\"Title\":\"The Magic Flute\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Dec 31 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Here Films\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Kenneth Branagh\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":499},{\"Title\":\"Mata Hari\",\"US Gross\":900000,\"Worldwide Gross\":900000,\"US DVD Sales\":null,\"Production Budget\":558000,\"Release Date\":\"Dec 31 1930\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":2.2,\"IMDB Votes\":376},{\"Title\":\"Malcolm X\",\"US Gross\":48169910,\"Worldwide Gross\":48169910,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Nov 18 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.7,\"IMDB Votes\":23062},{\"Title\":\"Maniac\",\"US Gross\":10000000,\"Worldwide Gross\":10000000,\"US DVD Sales\":null,\"Production Budget\":350000,\"Release Date\":\"Dec 31 1979\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":3281},{\"Title\":\"Mary Poppins\",\"US Gross\":102300000,\"Worldwide Gross\":102300000,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Aug 26 1964\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Musical\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.7,\"IMDB Votes\":34302},{\"Title\":\"Mary Reilly\",\"US Gross\":5707094,\"Worldwide Gross\":6370115,\"US DVD Sales\":null,\"Production Budget\":47000000,\"Release Date\":\"Feb 23 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Stephen Frears\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":5.5,\"IMDB Votes\":6864},{\"Title\":\"Maximum Risk\",\"US Gross\":14102929,\"Worldwide Gross\":51702929,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Sep 13 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":4.9,\"IMDB Votes\":7064},{\"Title\":\"M*A*S*H\",\"US Gross\":81600000,\"Worldwide Gross\":81600000,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Jan 01 1970\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Robert Altman\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.6,\"IMDB Votes\":8043},{\"Title\":\"The Mask\",\"US Gross\":119920129,\"Worldwide Gross\":343900000,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Jul 29 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Chuck Russell\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":6.6,\"IMDB Votes\":72981},{\"Title\":\"Mars Attacks!\",\"US Gross\":37771017,\"Worldwide Gross\":101371017,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Dec 13 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Tim Burton\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.3,\"IMDB Votes\":76396},{\"Title\":\"Mo' Better Blues\",\"US Gross\":16153000,\"Worldwide Gross\":16153000,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Aug 03 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":6.3,\"IMDB Votes\":4210},{\"Title\":\"Moby Dick\",\"US Gross\":10400000,\"Worldwide Gross\":10400000,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Dec 31 1955\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"John Huston\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":7.4,\"IMDB Votes\":5969},{\"Title\":\"My Beautiful Laundrette\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":400000,\"Release Date\":\"Apr 01 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Classics\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Stephen Frears\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":5381},{\"Title\":\"Michael Jordan to the MAX\",\"US Gross\":18642318,\"Worldwide Gross\":18642318,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"May 05 2000\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":46,\"Distributor\":\"Giant Screen Films\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":7.2,\"IMDB Votes\":746},{\"Title\":\"Michael Collins\",\"US Gross\":11092559,\"Worldwide Gross\":27572844,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Oct 11 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Neil Jordan\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":6.9,\"IMDB Votes\":11805},{\"Title\":\"My Cousin Vinny\",\"US Gross\":52929168,\"Worldwide Gross\":52929168,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Mar 13 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.3,\"IMDB Votes\":30524},{\"Title\":\"Medicine Man\",\"US Gross\":44948240,\"Worldwide Gross\":44948240,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Feb 07 1992\",\"MPAA Rating\":null,\"Running Time min\":87,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John McTiernan\",\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5.7,\"IMDB Votes\":9307},{\"Title\":\"Madadayo\",\"US Gross\":48856,\"Worldwide Gross\":48856,\"US DVD Sales\":null,\"Production Budget\":11900000,\"Release Date\":\"Mar 20 1998\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"WinStar Cinema\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Akira Kurosawa\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":1748},{\"Title\":\"Modern Problems\",\"US Gross\":24474312,\"Worldwide Gross\":24474312,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Dec 25 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.5,\"IMDB Votes\":2144},{\"Title\":\"Amadeus\",\"US Gross\":51973029,\"Worldwide Gross\":51973029,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Sep 19 1984\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Milos Forman\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8.4,\"IMDB Votes\":96997},{\"Title\":\"Modern Times\",\"US Gross\":163245,\"Worldwide Gross\":163245,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Feb 05 2036\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Kino International\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":8.5,\"IMDB Votes\":35773},{\"Title\":\"The Mighty Ducks\",\"US Gross\":50752337,\"Worldwide Gross\":50752337,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 02 1992\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stephen Herek\",\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":5.9,\"IMDB Votes\":15479},{\"Title\":\"A Man for All Seasons\",\"US Gross\":28350000,\"Worldwide Gross\":28350000,\"US DVD Sales\":null,\"Production Budget\":3900000,\"Release Date\":\"Dec 12 1966\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Fred Zinnemann\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":8.1,\"IMDB Votes\":12460},{\"Title\":\"Megaforce\",\"US Gross\":5675599,\"Worldwide Gross\":5675599,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Jun 25 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Hal Needham\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":2.5,\"IMDB Votes\":1446},{\"Title\":\"The Mirror Has Two Faces\",\"US Gross\":41267469,\"Worldwide Gross\":41267469,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Nov 15 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":127,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Barbra Streisand\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6,\"IMDB Votes\":6055},{\"Title\":\"Midnight Cowboy\",\"US Gross\":44785053,\"Worldwide Gross\":44785053,\"US DVD Sales\":null,\"Production Budget\":3600000,\"Release Date\":\"May 25 1969\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Schlesinger\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":8,\"IMDB Votes\":34053},{\"Title\":\"Midnight Run\",\"US Gross\":38413606,\"Worldwide Gross\":81613606,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jul 20 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martin Brest\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.5,\"IMDB Votes\":24104},{\"Title\":\"Major League\",\"US Gross\":49793054,\"Worldwide Gross\":49793054,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Apr 07 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.9,\"IMDB Votes\":20798},{\"Title\":\"The Molly Maguires\",\"US Gross\":2200000,\"Worldwide Gross\":2200000,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Dec 31 1969\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Martin Ritt\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":6.8,\"IMDB Votes\":1304},{\"Title\":\"Malevolence\",\"US Gross\":126021,\"Worldwide Gross\":257516,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Sep 10 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Painted Zebra Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":5,\"IMDB Votes\":248},{\"Title\":\"Mad Max 2: The Road Warrior\",\"US Gross\":24600832,\"Worldwide Gross\":24600832,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"May 21 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":null,\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"George Miller\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"It's a Mad Mad Mad Mad World\",\"US Gross\":46300000,\"Worldwide Gross\":60000000,\"US DVD Sales\":null,\"Production Budget\":9400000,\"Release Date\":\"Nov 07 1963\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":14460},{\"Title\":\"Mad Max\",\"US Gross\":8750000,\"Worldwide Gross\":99750000,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Mar 21 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"George Miller\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":36548},{\"Title\":\"Mad Max Beyond Thunderdome\",\"US Gross\":36230219,\"Worldwide Gross\":36230219,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jul 10 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":null,\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"George Miller\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":24273},{\"Title\":\"The Man From Snowy River\",\"US Gross\":20659423,\"Worldwide Gross\":20659423,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Nov 03 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"George Miller\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":7,\"IMDB Votes\":3101},{\"Title\":\"Men of War\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Dec 19 1995\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":1435},{\"Title\":\"Monty Python and the Holy Grail\",\"US Gross\":3427696,\"Worldwide Gross\":5028948,\"US DVD Sales\":null,\"Production Budget\":400000,\"Release Date\":\"May 10 1975\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.4,\"IMDB Votes\":155049},{\"Title\":\"Men with Brooms\",\"US Gross\":4239767,\"Worldwide Gross\":4239767,\"US DVD Sales\":null,\"Production Budget\":7500000,\"Release Date\":\"Mar 08 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":5.8,\"IMDB Votes\":2559},{\"Title\":\"Mutiny on The Bounty\",\"US Gross\":13680000,\"Worldwide Gross\":13680000,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Nov 08 1962\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":7.9,\"IMDB Votes\":7608},{\"Title\":\"Mommie Dearest\",\"US Gross\":19032000,\"Worldwide Gross\":25032000,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Sep 18 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Frank Perry\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6.3,\"IMDB Votes\":4905},{\"Title\":\"March or Die\",\"US Gross\":1000000,\"Worldwide Gross\":1000000,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Aug 05 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":1233},{\"Title\":\"Memoirs of an Invisible Man\",\"US Gross\":14358033,\"Worldwide Gross\":14358033,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Feb 28 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":\"John Carpenter\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":5.8,\"IMDB Votes\":8522},{\"Title\":\"The Mongol King\",\"US Gross\":900,\"Worldwide Gross\":900,\"US DVD Sales\":null,\"Production Budget\":7000,\"Release Date\":\"Dec 31 2003\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"My Own Private Idaho\",\"US Gross\":6401336,\"Worldwide Gross\":6401336,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Sep 29 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gus Van Sant\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7,\"IMDB Votes\":17604},{\"Title\":\"Moonraker\",\"US Gross\":70300000,\"Worldwide Gross\":210300000,\"US DVD Sales\":null,\"Production Budget\":31000000,\"Release Date\":\"Jun 29 1979\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.1,\"IMDB Votes\":26760},{\"Title\":\"Money Train\",\"US Gross\":35324232,\"Worldwide Gross\":77224232,\"US DVD Sales\":null,\"Production Budget\":68000000,\"Release Date\":\"Nov 22 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joseph Ruben\",\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.2,\"IMDB Votes\":13972},{\"Title\":\"Metropolitan\",\"US Gross\":2938000,\"Worldwide Gross\":2938000,\"US DVD Sales\":null,\"Production Budget\":430000,\"Release Date\":\"Aug 03 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Whit Stillman\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.2,\"IMDB Votes\":3355},{\"Title\":\"The Life of Brian\",\"US Gross\":20008693,\"Worldwide Gross\":20008693,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Aug 17 1979\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Rainbow Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Mallrats\",\"US Gross\":2108367,\"Worldwide Gross\":2108367,\"US DVD Sales\":null,\"Production Budget\":6100000,\"Release Date\":\"Oct 20 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Gramercy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin Smith\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":7.1,\"IMDB Votes\":52807},{\"Title\":\"American Desi\",\"US Gross\":902835,\"Worldwide Gross\":1366235,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Mar 16 2001\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Eros Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":6.7,\"IMDB Votes\":1047},{\"Title\":\"Mrs. Winterbourne\",\"US Gross\":10039566,\"Worldwide Gross\":10039566,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Apr 19 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Benjamin\",\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":5.8,\"IMDB Votes\":2987},{\"Title\":\"Mrs. Doubtfire\",\"US Gross\":219195051,\"Worldwide Gross\":441286003,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Nov 24 1993\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Chris Columbus\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.6,\"IMDB Votes\":56917},{\"Title\":\"Mr. Smith Goes To Washington\",\"US Gross\":9000000,\"Worldwide Gross\":9000000,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Dec 31 1938\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Frank Capra\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.2,\"IMDB Votes\":33315},{\"Title\":\"Mortal Kombat\",\"US Gross\":70433227,\"Worldwide Gross\":122133227,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Aug 18 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Game\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Paul Anderson\",\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":5.4,\"IMDB Votes\":29605},{\"Title\":\"Frankenstein\",\"US Gross\":22006296,\"Worldwide Gross\":112006296,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Nov 04 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":\"Kenneth Branagh\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":19913},{\"Title\":\"The Misfits\",\"US Gross\":8200000,\"Worldwide Gross\":8200000,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Dec 31 1960\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Huston\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.4,\"IMDB Votes\":6351},{\"Title\":\"My Stepmother Is an Alien\",\"US Gross\":13854000,\"Worldwide Gross\":13854000,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Dec 09 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Richard Benjamin\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.8,\"IMDB Votes\":9073},{\"Title\":\"The Man Who Shot Liberty Valance\",\"US Gross\":8000000,\"Worldwide Gross\":8000000,\"US DVD Sales\":null,\"Production Budget\":3200000,\"Release Date\":\"Jan 01 1962\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Ford\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.1,\"IMDB Votes\":22681},{\"Title\":\"Mission: Impossible\",\"US Gross\":180981886,\"Worldwide Gross\":456481886,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"May 21 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":86222},{\"Title\":\"Meteor\",\"US Gross\":8400000,\"Worldwide Gross\":8400000,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Dec 31 1978\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Ronald Neame\",\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":4.7,\"IMDB Votes\":2969},{\"Title\":\"Multiplicity\",\"US Gross\":20133326,\"Worldwide Gross\":20133326,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Jul 17 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":117,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Harold Ramis\",\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":5.7,\"IMDB Votes\":11935},{\"Title\":\"Mutual Appreciation\",\"US Gross\":103509,\"Worldwide Gross\":103509,\"US DVD Sales\":null,\"Production Budget\":30000,\"Release Date\":\"Sep 01 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Goodbye Cruel Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":1102},{\"Title\":\"The Muppet Christmas Carol\",\"US Gross\":27281507,\"Worldwide Gross\":27281507,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Dec 11 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":7.5,\"IMDB Votes\":10853},{\"Title\":\"The Man with the Golden Gun\",\"US Gross\":21000000,\"Worldwide Gross\":97600000,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Dec 20 1974\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":\"Guy Hamilton\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":6.7,\"IMDB Votes\":22431},{\"Title\":\"My Fair Lady\",\"US Gross\":72000000,\"Worldwide Gross\":72000000,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Oct 22 1964\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Musical/Opera\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"George Cukor\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.9,\"IMDB Votes\":28039},{\"Title\":\"Mystic Pizza\",\"US Gross\":12793213,\"Worldwide Gross\":12793213,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Oct 21 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Samuel Goldwyn Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Donald Petrie\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":5.9,\"IMDB Votes\":8413},{\"Title\":\"Namastey London\",\"US Gross\":1207007,\"Worldwide Gross\":6831069,\"US DVD Sales\":null,\"Production Budget\":8400000,\"Release Date\":\"Mar 23 2007\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Eros Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":1511},{\"Title\":\"Naturally Native\",\"US Gross\":10508,\"Worldwide Gross\":10508,\"US DVD Sales\":null,\"Production Budget\":700000,\"Release Date\":\"Oct 08 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":91},{\"Title\":\"Inchon\",\"US Gross\":4408636,\"Worldwide Gross\":4408636,\"US DVD Sales\":null,\"Production Budget\":46000000,\"Release Date\":\"Sep 17 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3,\"IMDB Votes\":326},{\"Title\":\"Indiana Jones and the Temple of Doom\",\"US Gross\":179880271,\"Worldwide Gross\":333080271,\"US DVD Sales\":18998388,\"Production Budget\":28000000,\"Release Date\":\"May 23 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":7.5,\"IMDB Votes\":110761},{\"Title\":\"Indiana Jones and the Last Crusade\",\"US Gross\":197171806,\"Worldwide Gross\":474171806,\"US DVD Sales\":18740425,\"Production Budget\":48000000,\"Release Date\":\"May 24 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":8.3,\"IMDB Votes\":171572},{\"Title\":\"Neal n' Nikki\",\"US Gross\":100358,\"Worldwide Gross\":329621,\"US DVD Sales\":null,\"Production Budget\":1300000,\"Release Date\":\"Dec 09 2005\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Yash Raj Films\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.5,\"IMDB Votes\":494},{\"Title\":\"A Nightmare on Elm Street 4: The Dream Master\",\"US Gross\":49369899,\"Worldwide Gross\":49369899,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Aug 19 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Renny Harlin\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":13310},{\"Title\":\"Next Stop, Wonderland\",\"US Gross\":3386698,\"Worldwide Gross\":3456820,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Aug 21 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brad Anderson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Nighthawks\",\"US Gross\":14600000,\"Worldwide Gross\":19600000,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Apr 10 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.3,\"IMDB Votes\":5649},{\"Title\":\"The English Patient\",\"US Gross\":78716374,\"Worldwide Gross\":231716374,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Nov 15 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":160,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Anthony Minghella\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.3,\"IMDB Votes\":54484},{\"Title\":\"Niagara\",\"US Gross\":2500000,\"Worldwide Gross\":2500000,\"US DVD Sales\":null,\"Production Budget\":1250000,\"Release Date\":\"Jan 21 1953\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":4698},{\"Title\":\"The Naked Gun 2Ω: The Smell of Fear\",\"US Gross\":86930411,\"Worldwide Gross\":86930411,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Jun 28 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Zucker\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":26384},{\"Title\":\"Naked Gun 33 1/3: The Final Insult\",\"US Gross\":51041856,\"Worldwide Gross\":51041856,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Mar 18 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Segal\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":24904},{\"Title\":\"National Lampoon's Animal House\",\"US Gross\":141600000,\"Worldwide Gross\":141600000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Jul 28 1978\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Landis\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Night of the Living Dead\",\"US Gross\":12000000,\"Worldwide Gross\":30000000,\"US DVD Sales\":null,\"Production Budget\":114000,\"Release Date\":\"Oct 01 1968\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Walter Reade Organization\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":6.6,\"IMDB Votes\":10083},{\"Title\":\"No Looking Back\",\"US Gross\":143273,\"Worldwide Gross\":143273,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Mar 27 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Gramercy\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Edward Burns\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.7,\"IMDB Votes\":1145},{\"Title\":\"The Nun's Story\",\"US Gross\":12800000,\"Worldwide Gross\":12800000,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Dec 31 1958\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Fred Zinnemann\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":7.5,\"IMDB Votes\":3313},{\"Title\":\"A Nightmare on Elm Street\",\"US Gross\":25504513,\"Worldwide Gross\":25504513,\"US DVD Sales\":null,\"Production Budget\":1800000,\"Release Date\":\"Nov 09 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Wes Craven\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":5.3,\"IMDB Votes\":12554},{\"Title\":\"A Nightmare On Elm Street Part 2: Freddy's Revenge\",\"US Gross\":21163999,\"Worldwide Gross\":21163999,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Nov 01 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":16222},{\"Title\":\"A Nightmare On Elm Street 3: Dream Warriors\",\"US Gross\":44793222,\"Worldwide Gross\":44793222,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Feb 27 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Chuck Russell\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":17354},{\"Title\":\"A Nightmare On Elm Street: The Dream Child\",\"US Gross\":22168359,\"Worldwide Gross\":22168359,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Aug 11 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Stephen Hopkins\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.7,\"IMDB Votes\":10849},{\"Title\":\"Freddy's Dead: The Final Nightmare\",\"US Gross\":34872033,\"Worldwide Gross\":34872033,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Sep 13 1991\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.5,\"IMDB Votes\":12779},{\"Title\":\"Wes Craven's New Nightmare\",\"US Gross\":18090181,\"Worldwide Gross\":18090181,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Oct 14 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Wes Craven\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Night of the Living Dead\",\"US Gross\":5835247,\"Worldwide Gross\":5835247,\"US DVD Sales\":null,\"Production Budget\":4200000,\"Release Date\":\"Oct 19 1990\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.6,\"IMDB Votes\":10083},{\"Title\":\"Notorious\",\"US Gross\":24464742,\"Worldwide Gross\":24464742,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Dec 31 1945\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Alfred Hitchcock\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":6.3,\"IMDB Votes\":9811},{\"Title\":\"Never Say Never Again\",\"US Gross\":55500000,\"Worldwide Gross\":160000000,\"US DVD Sales\":null,\"Production Budget\":36000000,\"Release Date\":\"Oct 07 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":6,\"IMDB Votes\":21247},{\"Title\":\"The Nutcracker\",\"US Gross\":2119994,\"Worldwide Gross\":2119994,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Dec 31 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Emile Ardolino\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":5.2,\"IMDB Votes\":561},{\"Title\":\"Nowhere to Run\",\"US Gross\":22189039,\"Worldwide Gross\":52189039,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jan 15 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5,\"IMDB Votes\":6746},{\"Title\":\"Interview with the Vampire: The Vampire Chronicles\",\"US Gross\":105264608,\"Worldwide Gross\":223564608,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Nov 11 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Neil Jordan\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":78953},{\"Title\":\"The Nutty Professor\",\"US Gross\":128814019,\"Worldwide Gross\":273814019,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Jun 28 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Tom Shadyac\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":5.6,\"IMDB Votes\":32234},{\"Title\":\"Die Unendliche Geschichte\",\"US Gross\":21300000,\"Worldwide Gross\":21300000,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Jul 20 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Wolfgang Petersen\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":25704},{\"Title\":\"Interview with the Assassin\",\"US Gross\":47329,\"Worldwide Gross\":47329,\"US DVD Sales\":null,\"Production Budget\":750000,\"Release Date\":\"Nov 15 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.6,\"IMDB Votes\":1107},{\"Title\":\"Nixon\",\"US Gross\":13668249,\"Worldwide Gross\":34668249,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Dec 20 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Oliver Stone\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":7.1,\"IMDB Votes\":13761},{\"Title\":\"New York, New York\",\"US Gross\":13800000,\"Worldwide Gross\":13800000,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Jun 22 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":null,\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.7,\"IMDB Votes\":1692},{\"Title\":\"New York Stories\",\"US Gross\":10763469,\"Worldwide Gross\":10763469,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Mar 01 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":6.1,\"IMDB Votes\":6906},{\"Title\":\"Obitaemyy ostrov\",\"US Gross\":0,\"Worldwide Gross\":15000000,\"US DVD Sales\":null,\"Production Budget\":36500000,\"Release Date\":\"Jan 01 2009\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":2229},{\"Title\":\"Octopussy\",\"US Gross\":67900000,\"Worldwide Gross\":187500000,\"US DVD Sales\":null,\"Production Budget\":27500000,\"Release Date\":\"Jun 10 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Glen\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6.6,\"IMDB Votes\":23167},{\"Title\":\"On Deadly Ground\",\"US Gross\":38590458,\"Worldwide Gross\":38590458,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Feb 18 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steven Seagal\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.8,\"IMDB Votes\":9579},{\"Title\":\"One Flew Over the Cuckoo's Nest\",\"US Gross\":108981275,\"Worldwide Gross\":108981275,\"US DVD Sales\":null,\"Production Budget\":4400000,\"Release Date\":\"Nov 19 1975\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Milos Forman\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8.9,\"IMDB Votes\":214457},{\"Title\":\"The Offspring\",\"US Gross\":1355728,\"Worldwide Gross\":1355728,\"US DVD Sales\":null,\"Production Budget\":1100000,\"Release Date\":\"Sep 04 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Moviestore Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jeff Burr\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":424},{\"Title\":\"On Her Majesty's Secret Service\",\"US Gross\":22800000,\"Worldwide Gross\":82000000,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Dec 18 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.9,\"IMDB Votes\":23159},{\"Title\":\"The Omen\",\"US Gross\":48570885,\"Worldwide Gross\":48570885,\"US DVD Sales\":null,\"Production Budget\":2800000,\"Release Date\":\"Jun 25 1976\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":\"Richard Donner\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":5.4,\"IMDB Votes\":24523},{\"Title\":\"The Omega Code\",\"US Gross\":12610552,\"Worldwide Gross\":12678312,\"US DVD Sales\":null,\"Production Budget\":7200000,\"Release Date\":\"Oct 15 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Providence Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":3.3,\"IMDB Votes\":3814},{\"Title\":\"Out of Africa\",\"US Gross\":79096868,\"Worldwide Gross\":258210860,\"US DVD Sales\":null,\"Production Budget\":31000000,\"Release Date\":\"Dec 18 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Sydney Pollack\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":7,\"IMDB Votes\":19638},{\"Title\":\"Out of the Dark\",\"US Gross\":419428,\"Worldwide Gross\":419428,\"US DVD Sales\":null,\"Production Budget\":1600000,\"Release Date\":\"Mar 11 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.1,\"IMDB Votes\":230},{\"Title\":\"Ordinary People\",\"US Gross\":52302978,\"Worldwide Gross\":52302978,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Sep 19 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Redford\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7,\"IMDB Votes\":138},{\"Title\":\"The Other Side of Heaven\",\"US Gross\":4720371,\"Worldwide Gross\":4720371,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Dec 14 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Excel Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":1670},{\"Title\":\"On the Down Low\",\"US Gross\":1987,\"Worldwide Gross\":1987,\"US DVD Sales\":null,\"Production Budget\":10000,\"Release Date\":\"May 28 2004\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Cinema Con Sabor\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":113},{\"Title\":\"Othello\",\"US Gross\":2844379,\"Worldwide Gross\":2844379,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Dec 14 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":6.9,\"IMDB Votes\":4289},{\"Title\":\"On the Outs\",\"US Gross\":49772,\"Worldwide Gross\":49772,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Jul 15 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fader Films\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":445},{\"Title\":\"On the Waterfront\",\"US Gross\":9600000,\"Worldwide Gross\":9600000,\"US DVD Sales\":null,\"Production Budget\":910000,\"Release Date\":\"Jul 28 1954\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Elia Kazan\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":8.4,\"IMDB Votes\":41162},{\"Title\":\"Outbreak\",\"US Gross\":67823573,\"Worldwide Gross\":67823573,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Mar 10 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wolfgang Petersen\",\"Rotten Tomatoes Rating\":59,\"IMDB Rating\":6.4,\"IMDB Votes\":33192},{\"Title\":\"The Outsiders\",\"US Gross\":25697647,\"Worldwide Gross\":25697647,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Mar 25 1983\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":7,\"IMDB Votes\":23607},{\"Title\":\"The Oxford Murders\",\"US Gross\":3607,\"Worldwide Gross\":8667348,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Aug 06 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":6.1,\"IMDB Votes\":8066},{\"Title\":\"Police Academy\",\"US Gross\":81198894,\"Worldwide Gross\":81198894,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Mar 23 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Hugh Wilson\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6.3,\"IMDB Votes\":23192},{\"Title\":\"Police Academy 7: Mission to Moscow\",\"US Gross\":126247,\"Worldwide Gross\":126247,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Aug 26 1994\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":2.5,\"IMDB Votes\":13121},{\"Title\":\"Paa\",\"US Gross\":199228,\"Worldwide Gross\":9791282,\"US DVD Sales\":null,\"Production Budget\":4300000,\"Release Date\":\"Dec 04 2009\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Reliance Big Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":7.3,\"IMDB Votes\":1059},{\"Title\":\"Pale Rider\",\"US Gross\":41410568,\"Worldwide Gross\":41410568,\"US DVD Sales\":null,\"Production Budget\":6900000,\"Release Date\":\"Jun 28 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Clint Eastwood\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.1,\"IMDB Votes\":15352},{\"Title\":\"Patriot Games\",\"US Gross\":83287363,\"Worldwide Gross\":178100000,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Jun 05 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Phillip Noyce\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":6.9,\"IMDB Votes\":29544},{\"Title\":\"The Pallbearer\",\"US Gross\":5656388,\"Worldwide Gross\":5656388,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"May 03 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Matt Reeves\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":4.7,\"IMDB Votes\":4166},{\"Title\":\"Pocahontas\",\"US Gross\":141579773,\"Worldwide Gross\":347100000,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Jun 10 1995\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6,\"IMDB Votes\":26690},{\"Title\":\"Pocketful of Miracles\",\"US Gross\":5000000,\"Worldwide Gross\":5000000,\"US DVD Sales\":null,\"Production Budget\":2900000,\"Release Date\":\"Dec 31 1960\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Frank Capra\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":7.2,\"IMDB Votes\":2365},{\"Title\":\"PCU\",\"US Gross\":4333569,\"Worldwide Gross\":4333569,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Apr 29 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6,\"IMDB Votes\":6967},{\"Title\":\"Pete's Dragon\",\"US Gross\":36000000,\"Worldwide Gross\":36000000,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Nov 03 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6,\"IMDB Votes\":4620},{\"Title\":\"Pat Garrett and Billy the Kid\",\"US Gross\":8000000,\"Worldwide Gross\":11000000,\"US DVD Sales\":null,\"Production Budget\":4638783,\"Release Date\":\"May 23 1973\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Sam Peckinpah\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":6374},{\"Title\":\"Poltergeist\",\"US Gross\":74706019,\"Worldwide Gross\":121706019,\"US DVD Sales\":null,\"Production Budget\":10700000,\"Release Date\":\"Jun 04 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Tobe Hooper\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.4,\"IMDB Votes\":32817},{\"Title\":\"Poltergeist III\",\"US Gross\":14114000,\"Worldwide Gross\":14114000,\"US DVD Sales\":null,\"Production Budget\":9500000,\"Release Date\":\"Jun 10 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":3.8,\"IMDB Votes\":5387},{\"Title\":\"Phantasm II\",\"US Gross\":7000000,\"Worldwide Gross\":7000000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Jul 08 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":6.3,\"IMDB Votes\":3781},{\"Title\":\"Phenomenon\",\"US Gross\":104636382,\"Worldwide Gross\":142836382,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Jul 05 1996\",\"MPAA Rating\":\"PG\",\"Running Time min\":124,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jon Turteltaub\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.3,\"IMDB Votes\":26823},{\"Title\":\"Philadelphia\",\"US Gross\":77324422,\"Worldwide Gross\":201324422,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Dec 22 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/TriStar\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jonathan Demme\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":7.6,\"IMDB Votes\":53283},{\"Title\":\"The Phantom\",\"US Gross\":17220599,\"Worldwide Gross\":17220599,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Jun 07 1996\",\"MPAA Rating\":\"PG\",\"Running Time min\":100,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Simon Wincer\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":4.8,\"IMDB Votes\":9477},{\"Title\":\"Pi\",\"US Gross\":3221152,\"Worldwide Gross\":4678513,\"US DVD Sales\":null,\"Production Budget\":68000,\"Release Date\":\"Jul 10 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Live Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Darren Aronofsky\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.5,\"IMDB Votes\":53699},{\"Title\":\"Pink Flamingos\",\"US Gross\":413802,\"Worldwide Gross\":413802,\"US DVD Sales\":null,\"Production Budget\":12000,\"Release Date\":\"Apr 11 1997\",\"MPAA Rating\":\"NC-17\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Waters\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":7947},{\"Title\":\"The Pirate\",\"US Gross\":2956000,\"Worldwide Gross\":2956000,\"US DVD Sales\":null,\"Production Budget\":3700000,\"Release Date\":\"Dec 31 1947\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Vincente Minnelli\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":7.1,\"IMDB Votes\":1635},{\"Title\":\"The Planet of the Apes\",\"US Gross\":33395426,\"Worldwide Gross\":33395426,\"US DVD Sales\":null,\"Production Budget\":5800000,\"Release Date\":\"Feb 08 1968\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Franklin J. Schaffner\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Player\",\"US Gross\":21706101,\"Worldwide Gross\":28876702,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Apr 10 1992\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Altman\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.7,\"IMDB Votes\":24451},{\"Title\":\"Apollo 13\",\"US Gross\":172070496,\"Worldwide Gross\":334100000,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Jun 30 1995\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Ron Howard\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":87605},{\"Title\":\"Platoon\",\"US Gross\":137963328,\"Worldwide Gross\":137963328,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Dec 19 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Oliver Stone\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":8.2,\"IMDB Votes\":108641},{\"Title\":\"Panic\",\"US Gross\":779137,\"Worldwide Gross\":889279,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Dec 01 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Roxie Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":2.7,\"IMDB Votes\":473},{\"Title\":\"The Adventures of Pinocchio\",\"US Gross\":15382170,\"Worldwide Gross\":36682170,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jul 26 1996\",\"MPAA Rating\":\"G\",\"Running Time min\":94,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Steve Barron\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":5.3,\"IMDB Votes\":1734},{\"Title\":\"Pandora's Box\",\"US Gross\":881950,\"Worldwide Gross\":881950,\"US DVD Sales\":null,\"Production Budget\":800000,\"Release Date\":\"Aug 09 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Kino International\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.6,\"IMDB Votes\":386},{\"Title\":\"Pink Narcissus\",\"US Gross\":8231,\"Worldwide Gross\":8231,\"US DVD Sales\":null,\"Production Budget\":27000,\"Release Date\":\"Dec 24 1999\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":384},{\"Title\":\"Penitentiary\",\"US Gross\":287000,\"Worldwide Gross\":287000,\"US DVD Sales\":null,\"Production Budget\":100000,\"Release Date\":\"May 10 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":233},{\"Title\":\"The Pursuit of D.B. Cooper\",\"US Gross\":2104164,\"Worldwide Gross\":2104164,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Nov 13 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Roger Spottiswoode\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":442},{\"Title\":\"Poetic Justice\",\"US Gross\":27450453,\"Worldwide Gross\":27450453,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Jul 23 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Singleton\",\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":5.1,\"IMDB Votes\":3689},{\"Title\":\"Porky's\",\"US Gross\":109492484,\"Worldwide Gross\":109492484,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Mar 19 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":15861},{\"Title\":\"Peace, Propaganda and the Promised Land\",\"US Gross\":4930,\"Worldwide Gross\":4930,\"US DVD Sales\":null,\"Production Budget\":70000,\"Release Date\":\"Jan 28 2005\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Arab Film Distribution\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3,\"IMDB Votes\":75},{\"Title\":\"Popeye\",\"US Gross\":49823037,\"Worldwide Gross\":49823037,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 12 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Robert Altman\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":4.9,\"IMDB Votes\":11433},{\"Title\":\"Predator 2\",\"US Gross\":28317513,\"Worldwide Gross\":54768418,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Nov 21 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Stephen Hopkins\",\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":6,\"IMDB Votes\":35411},{\"Title\":\"Predator\",\"US Gross\":59735548,\"Worldwide Gross\":98267558,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Jun 12 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"John McTiernan\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.8,\"IMDB Votes\":88522},{\"Title\":\"The Princess Bride\",\"US Gross\":30857000,\"Worldwide Gross\":30857000,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Sep 25 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Rob Reiner\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":8.1,\"IMDB Votes\":123571},{\"Title\":\"Prison\",\"US Gross\":354704,\"Worldwide Gross\":354704,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Mar 04 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Empire Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":\"Renny Harlin\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":1154},{\"Title\":\"LÈon\",\"US Gross\":19284974,\"Worldwide Gross\":45284974,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Nov 18 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Luc Besson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.6,\"IMDB Votes\":199762},{\"Title\":\"Prophecy\",\"US Gross\":21000000,\"Worldwide Gross\":21000000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jun 15 1979\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Frankenheimer\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":4.7,\"IMDB Votes\":1381},{\"Title\":\"The Prince of Tides\",\"US Gross\":74787599,\"Worldwide Gross\":74787599,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Dec 25 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Barbra Streisand\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":6.4,\"IMDB Votes\":6829},{\"Title\":\"Proud\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Sep 23 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Castle Hill Productions\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":161},{\"Title\":\"Pretty Woman\",\"US Gross\":178406268,\"Worldwide Gross\":463400000,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Mar 23 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Garry Marshall\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":6.7,\"IMDB Votes\":60742},{\"Title\":\"Partition\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 02 2007\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.6,\"IMDB Votes\":1275},{\"Title\":\"The Postman Always Rings Twice\",\"US Gross\":12200000,\"Worldwide Gross\":44200000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Mar 20 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Bob Rafelson\",\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":6.4,\"IMDB Votes\":6886},{\"Title\":\"Peggy Sue Got Married\",\"US Gross\":41382841,\"Worldwide Gross\":41382841,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Oct 10 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/TriStar\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":6.3,\"IMDB Votes\":12457},{\"Title\":\"Peter Pan\",\"US Gross\":87400000,\"Worldwide Gross\":87400000,\"US DVD Sales\":90536550,\"Production Budget\":4000000,\"Release Date\":\"Feb 05 1953\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"RKO Radio Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.1,\"IMDB Votes\":16894},{\"Title\":\"Pet Sematary\",\"US Gross\":57469179,\"Worldwide Gross\":57469179,\"US DVD Sales\":null,\"Production Budget\":11500000,\"Release Date\":\"Apr 21 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.3,\"IMDB Votes\":19257},{\"Title\":\"Patton\",\"US Gross\":62500000,\"Worldwide Gross\":62500000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jan 01 1970\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Franklin J. Schaffner\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.1,\"IMDB Votes\":39570},{\"Title\":\"The Puffy Chair\",\"US Gross\":194523,\"Worldwide Gross\":194523,\"US DVD Sales\":null,\"Production Budget\":15000,\"Release Date\":\"Jun 02 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"IDP/Goldwyn/Roadside\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":1701},{\"Title\":\"Pulp Fiction\",\"US Gross\":107928762,\"Worldwide Gross\":212928762,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Oct 14 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Quentin Tarantino\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":8.9,\"IMDB Votes\":417703},{\"Title\":\"Paint Your Wagon\",\"US Gross\":31678778,\"Worldwide Gross\":31678778,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 15 1969\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Play\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":6.5,\"IMDB Votes\":5037},{\"Title\":\"The Prisoner of Zenda\",\"US Gross\":7000000,\"Worldwide Gross\":7000000,\"US DVD Sales\":null,\"Production Budget\":12500000,\"Release Date\":\"May 25 1979\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.6,\"IMDB Votes\":406},{\"Title\":\"The Perez Family\",\"US Gross\":2794056,\"Worldwide Gross\":2794056,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"May 12 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Goldwyn Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Mira Nair\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6,\"IMDB Votes\":1177},{\"Title\":\"Q\",\"US Gross\":255000,\"Worldwide Gross\":255000,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Nov 19 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Film Distribution Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":1899},{\"Title\":\"The Quick and the Dead\",\"US Gross\":18552460,\"Worldwide Gross\":18552460,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Feb 10 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Sam Raimi\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":6.3,\"IMDB Votes\":27352},{\"Title\":\"Quigley Down Under\",\"US Gross\":21413105,\"Worldwide Gross\":21413105,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 19 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Simon Wincer\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.5,\"IMDB Votes\":6001},{\"Title\":\"La Guerre du feu\",\"US Gross\":20959585,\"Worldwide Gross\":20959585,\"US DVD Sales\":null,\"Production Budget\":12500000,\"Release Date\":\"Feb 12 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Jean-Jacques Annaud\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":6198},{\"Title\":\"Quo Vadis?\",\"US Gross\":30000000,\"Worldwide Gross\":30000000,\"US DVD Sales\":null,\"Production Budget\":8250000,\"Release Date\":\"Feb 23 1951\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":5.8,\"IMDB Votes\":898},{\"Title\":\"Rang De Basanti\",\"US Gross\":2197694,\"Worldwide Gross\":29197694,\"US DVD Sales\":null,\"Production Budget\":5300000,\"Release Date\":\"Jan 27 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"UTV Communications\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.1,\"IMDB Votes\":12116},{\"Title\":\"Robin and Marian\",\"US Gross\":8000000,\"Worldwide Gross\":8000000,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Mar 11 1976\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":6.5,\"IMDB Votes\":4800},{\"Title\":\"Ransom\",\"US Gross\":136492681,\"Worldwide Gross\":308700000,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Nov 08 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ron Howard\",\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":6.6,\"IMDB Votes\":38524},{\"Title\":\"Rosemary's Baby\",\"US Gross\":33395426,\"Worldwide Gross\":33395426,\"US DVD Sales\":null,\"Production Budget\":3200000,\"Release Date\":\"Jun 12 1968\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Roman Polanski\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.1,\"IMDB Votes\":50860},{\"Title\":\"Rebecca\",\"US Gross\":6000000,\"Worldwide Gross\":6000000,\"US DVD Sales\":null,\"Production Budget\":1288000,\"Release Date\":\"Dec 31 1939\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Alfred Hitchcock\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":8.4,\"IMDB Votes\":35429},{\"Title\":\"Robin Hood: Prince of Thieves\",\"US Gross\":165493908,\"Worldwide Gross\":390500000,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Jun 14 1991\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Kevin Reynolds\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":6.7,\"IMDB Votes\":54480},{\"Title\":\"Rumble in the Bronx\",\"US Gross\":32281907,\"Worldwide Gross\":36238752,\"US DVD Sales\":null,\"Production Budget\":7500000,\"Release Date\":\"Feb 23 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Rob Roy\",\"US Gross\":31390587,\"Worldwide Gross\":31390587,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Apr 07 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Michael Caton-Jones\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.8,\"IMDB Votes\":15630},{\"Title\":\"Raging Bull\",\"US Gross\":23380203,\"Worldwide Gross\":23380203,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Nov 14 1980\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.4,\"IMDB Votes\":90015},{\"Title\":\"Richard III\",\"US Gross\":2684904,\"Worldwide Gross\":4204857,\"US DVD Sales\":null,\"Production Budget\":9200000,\"Release Date\":\"Dec 29 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":7.5,\"IMDB Votes\":6625},{\"Title\":\"Raising Cain\",\"US Gross\":21171695,\"Worldwide Gross\":21171695,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Aug 07 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":5.7,\"IMDB Votes\":5135},{\"Title\":\"RoboCop\",\"US Gross\":53424681,\"Worldwide Gross\":53424681,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Jul 17 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Paul Verhoeven\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.6,\"IMDB Votes\":52898},{\"Title\":\"RoboCop 3\",\"US Gross\":10696210,\"Worldwide Gross\":10696210,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Nov 05 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.4,\"IMDB Votes\":13310},{\"Title\":\"Ri¢hie Ri¢h\",\"US Gross\":38087756,\"Worldwide Gross\":38087756,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Dec 21 1994\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Donald Petrie\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":4.7,\"IMDB Votes\":12687},{\"Title\":\"Radio Days\",\"US Gross\":14792779,\"Worldwide Gross\":14792779,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Jan 30 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":7.5,\"IMDB Votes\":10839},{\"Title\":\"Radio Flyer\",\"US Gross\":4651977,\"Worldwide Gross\":4651977,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Feb 21 1992\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Richard Donner\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":6.5,\"IMDB Votes\":6210},{\"Title\":\"Reservoir Dogs\",\"US Gross\":2832029,\"Worldwide Gross\":2832029,\"US DVD Sales\":18806836,\"Production Budget\":1200000,\"Release Date\":\"Oct 23 1992\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Quentin Tarantino\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8.4,\"IMDB Votes\":212985},{\"Title\":\"Raiders of the Lost Ark\",\"US Gross\":245034358,\"Worldwide Gross\":386800358,\"US DVD Sales\":19608618,\"Production Budget\":20000000,\"Release Date\":\"Jun 12 1981\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.7,\"IMDB Votes\":242661},{\"Title\":\"Red River\",\"US Gross\":9012000,\"Worldwide Gross\":9012000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Dec 31 1947\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Howard Hawks\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.8,\"IMDB Votes\":10629},{\"Title\":\"Reds\",\"US Gross\":50000000,\"Worldwide Gross\":50000000,\"US DVD Sales\":null,\"Production Budget\":33500000,\"Release Date\":\"Dec 04 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Warren Beatty\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.4,\"IMDB Votes\":8455},{\"Title\":\"Le Violon rouge\",\"US Gross\":10019109,\"Worldwide Gross\":10019109,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jun 11 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.7,\"IMDB Votes\":14545},{\"Title\":\"Red Sonja\",\"US Gross\":6905861,\"Worldwide Gross\":6905861,\"US DVD Sales\":null,\"Production Budget\":17900000,\"Release Date\":\"Jun 28 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Richard Fleischer\",\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":4.4,\"IMDB Votes\":11896},{\"Title\":\"Star Wars Ep. VI: Return of the Jedi\",\"US Gross\":309205079,\"Worldwide Gross\":572700000,\"US DVD Sales\":12356425,\"Production Budget\":32500000,\"Release Date\":\"May 25 1983\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Richard Marquand\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Return\",\"US Gross\":501752,\"Worldwide Gross\":2658490,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Feb 06 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Kino International\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":2.3,\"IMDB Votes\":236},{\"Title\":\"The Rise and Fall of Miss Thang\",\"US Gross\":401,\"Worldwide Gross\":401,\"US DVD Sales\":null,\"Production Budget\":10000,\"Release Date\":\"Aug 14 2008\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":87,\"Distributor\":\"Lavender House Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Roger & Me\",\"US Gross\":6706368,\"Worldwide Gross\":6706368,\"US DVD Sales\":null,\"Production Budget\":140000,\"Release Date\":\"Dec 20 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":\"Michael Moore\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.5,\"IMDB Votes\":14883},{\"Title\":\"The Right Stuff\",\"US Gross\":21500000,\"Worldwide Gross\":21500000,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Oct 21 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":\"Philip Kaufman\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":7.9,\"IMDB Votes\":24275},{\"Title\":\"The Rocky Horror Picture Show\",\"US Gross\":139876417,\"Worldwide Gross\":139876417,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Sep 26 1975\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":null,\"Major Genre\":\"Musical\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7.1,\"IMDB Votes\":41265},{\"Title\":\"Road House\",\"US Gross\":30050028,\"Worldwide Gross\":30050028,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"May 19 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":5.8,\"IMDB Votes\":14085},{\"Title\":\"Romeo Is Bleeding\",\"US Gross\":3275585,\"Worldwide Gross\":3275585,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 04 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Gramercy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":6.3,\"IMDB Votes\":6537},{\"Title\":\"Rockaway\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jul 07 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Off-Hollywood Distribution\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.2,\"IMDB Votes\":232},{\"Title\":\"Rocky\",\"US Gross\":117235147,\"Worldwide Gross\":225000000,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Nov 21 1976\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John G. Avildsen\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4,\"IMDB Votes\":84},{\"Title\":\"Return of the Living Dead Part II\",\"US Gross\":9205924,\"Worldwide Gross\":9205924,\"US DVD Sales\":null,\"Production Budget\":6200000,\"Release Date\":\"Jan 15 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Lorimar Motion Pictures\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.1,\"IMDB Votes\":4661},{\"Title\":\"The R.M.\",\"US Gross\":1111615,\"Worldwide Gross\":1111615,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Jan 31 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Halestone\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":5.5,\"IMDB Votes\":449},{\"Title\":\"Renaissance Man\",\"US Gross\":24172899,\"Worldwide Gross\":24172899,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jun 03 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Penny Marshall\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":7650},{\"Title\":\"Rambo: First Blood Part II\",\"US Gross\":150415432,\"Worldwide Gross\":300400000,\"US DVD Sales\":null,\"Production Budget\":44000000,\"Release Date\":\"May 22 1985\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony/TriStar\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"George P. Cosmatos\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.8,\"IMDB Votes\":38548},{\"Title\":\"Rambo III\",\"US Gross\":53715611,\"Worldwide Gross\":188715611,\"US DVD Sales\":null,\"Production Budget\":58000000,\"Release Date\":\"May 25 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/TriStar\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":4.9,\"IMDB Votes\":31551},{\"Title\":\"Romeo+Juliet\",\"US Gross\":46338728,\"Worldwide Gross\":147542381,\"US DVD Sales\":null,\"Production Budget\":14500000,\"Release Date\":\"Nov 01 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":120,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Baz Luhrmann\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":78},{\"Title\":\"Ramanujan\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 31 2007\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Stephen Fry\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Rain Man\",\"US Gross\":172825435,\"Worldwide Gross\":412800000,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Dec 16 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Barry Levinson\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":8,\"IMDB Votes\":106163},{\"Title\":\"Rapa Nui\",\"US Gross\":305070,\"Worldwide Gross\":305070,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Sep 11 1994\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Kevin Reynolds\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":2081},{\"Title\":\"Roar\",\"US Gross\":2000000,\"Worldwide Gross\":2000000,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Dec 31 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":228},{\"Title\":\"The Robe\",\"US Gross\":36000000,\"Worldwide Gross\":36000000,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Sep 16 1953\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":6.7,\"IMDB Votes\":2913},{\"Title\":\"The Rock\",\"US Gross\":134069511,\"Worldwide Gross\":336069511,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Jun 07 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":136,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Bay\",\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":7.2,\"IMDB Votes\":108324},{\"Title\":\"The Remains of the Day\",\"US Gross\":22954968,\"Worldwide Gross\":63954968,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Nov 05 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"James Ivory\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":7.9,\"IMDB Votes\":21736},{\"Title\":\"Airplane!\",\"US Gross\":83453539,\"Worldwide Gross\":83453539,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Jul 04 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Jerry Zucker\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":7.8,\"IMDB Votes\":57000},{\"Title\":\"Repo Man\",\"US Gross\":2300000,\"Worldwide Gross\":2300000,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Mar 02 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":6.7,\"IMDB Votes\":12438},{\"Title\":\"Rocket Singh: Salesman of the Year\",\"US Gross\":164649,\"Worldwide Gross\":5348767,\"US DVD Sales\":null,\"Production Budget\":1070000,\"Release Date\":\"Dec 11 2009\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Yash Raj Films\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":1436},{\"Title\":\"Raise the Titanic\",\"US Gross\":7000000,\"Worldwide Gross\":7000000,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Aug 01 1980\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":3.9,\"IMDB Votes\":1757},{\"Title\":\"Restoration\",\"US Gross\":4100000,\"Worldwide Gross\":4100000,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Dec 29 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":4024},{\"Title\":\"The Return of the Living Dead\",\"US Gross\":14237880,\"Worldwide Gross\":14237880,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Aug 16 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.1,\"IMDB Votes\":13621},{\"Title\":\"Rejsen til Saturn\",\"US Gross\":0,\"Worldwide Gross\":2783634,\"US DVD Sales\":null,\"Production Budget\":2700000,\"Release Date\":\"Sep 26 2008\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":849},{\"Title\":\"Return to the Land of Wonders\",\"US Gross\":1338,\"Worldwide Gross\":1338,\"US DVD Sales\":null,\"Production Budget\":5000,\"Release Date\":\"Jul 13 2005\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Arab Film Distribution\",\"Source\":null,\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.5,\"IMDB Votes\":35},{\"Title\":\"Return to Oz\",\"US Gross\":10618813,\"Worldwide Gross\":10618813,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Jun 21 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.7,\"IMDB Votes\":7491},{\"Title\":\"The Running Man\",\"US Gross\":38122000,\"Worldwide Gross\":38122000,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Nov 13 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/TriStar\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Paul Michael Glaser\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.4,\"IMDB Votes\":36308},{\"Title\":\"Run Lola Run\",\"US Gross\":7267324,\"Worldwide Gross\":14533173,\"US DVD Sales\":null,\"Production Budget\":1750000,\"Release Date\":\"Jun 18 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tom Tykwer\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":91},{\"Title\":\"Revolution#9\",\"US Gross\":9118,\"Worldwide Gross\":9118,\"US DVD Sales\":null,\"Production Budget\":350000,\"Release Date\":\"Nov 15 2002\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":252},{\"Title\":\"The River Wild\",\"US Gross\":46815000,\"Worldwide Gross\":94215000,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Sep 30 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Curtis Hanson\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":6.2,\"IMDB Votes\":14285},{\"Title\":\"Se7en\",\"US Gross\":100125643,\"Worldwide Gross\":328125643,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Sep 22 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Fincher\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.7,\"IMDB Votes\":278918},{\"Title\":\"Safe Men\",\"US Gross\":21210,\"Worldwide Gross\":21210,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Aug 07 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"October Films\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":5.9,\"IMDB Votes\":1743},{\"Title\":\"Secrets & Lies\",\"US Gross\":13417292,\"Worldwide Gross\":13417292,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Sep 28 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"October Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mike Leigh\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.9,\"IMDB Votes\":14364},{\"Title\":\"Sgt. Bilko\",\"US Gross\":30356589,\"Worldwide Gross\":37956589,\"US DVD Sales\":null,\"Production Budget\":39000000,\"Release Date\":\"Mar 29 1996\",\"MPAA Rating\":\"PG\",\"Running Time min\":93,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.2,\"IMDB Votes\":9693},{\"Title\":\"Sabrina\",\"US Gross\":53458319,\"Worldwide Gross\":87100000,\"US DVD Sales\":null,\"Production Budget\":58000000,\"Release Date\":\"Dec 15 1995\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sydney Pollack\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6,\"IMDB Votes\":15749},{\"Title\":\"Subway\",\"US Gross\":390659,\"Worldwide Gross\":1663296,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Nov 06 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Island/Alive\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Luc Besson\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":6.2,\"IMDB Votes\":5904},{\"Title\":\"School Daze\",\"US Gross\":14545844,\"Worldwide Gross\":14545844,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Feb 12 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":5.3,\"IMDB Votes\":2667},{\"Title\":\"Scarface\",\"US Gross\":44942821,\"Worldwide Gross\":44942821,\"US DVD Sales\":15386092,\"Production Budget\":25000000,\"Release Date\":\"Dec 09 1983\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":8.2,\"IMDB Votes\":152262},{\"Title\":\"Schindler's List\",\"US Gross\":96067179,\"Worldwide Gross\":321200000,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Dec 15 1993\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.9,\"IMDB Votes\":276283},{\"Title\":\"A Streetcar Named Desire\",\"US Gross\":8000000,\"Worldwide Gross\":8000000,\"US DVD Sales\":null,\"Production Budget\":1800000,\"Release Date\":\"Sep 18 1951\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Play\",\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Elia Kazan\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.1,\"IMDB Votes\":33781},{\"Title\":\"Shadow Conspiracy\",\"US Gross\":2154540,\"Worldwide Gross\":2154540,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Jan 31 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"George P. Cosmatos\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.7,\"IMDB Votes\":2427},{\"Title\":\"Short Cut to Nirvana: Kumbh Mela\",\"US Gross\":381225,\"Worldwide Gross\":439651,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Oct 22 2004\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Mela Films\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":6.9,\"IMDB Votes\":105},{\"Title\":\"Spartacus\",\"US Gross\":30000000,\"Worldwide Gross\":60000000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Oct 07 1960\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":\"Stanley Kubrick\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8,\"IMDB Votes\":50856},{\"Title\":\"Sunday\",\"US Gross\":410919,\"Worldwide Gross\":450349,\"US DVD Sales\":null,\"Production Budget\":450000,\"Release Date\":\"Aug 22 1997\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":6.9,\"IMDB Votes\":436},{\"Title\":\"She Done Him Wrong\",\"US Gross\":2000000,\"Worldwide Gross\":2000000,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Feb 09 2033\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":6.7,\"IMDB Votes\":1795},{\"Title\":\"Secret, The\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":65505095,\"Production Budget\":3500000,\"Release Date\":\"Nov 07 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Documentary\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Sea Rex 3D: Journey to a Prehistoric World\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Dec 31 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"3D Entertainment\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"State Fair\",\"US Gross\":3500000,\"Worldwide Gross\":3500000,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Mar 09 1962\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":5.7,\"IMDB Votes\":436},{\"Title\":\"Sticky Fingers of Time\",\"US Gross\":18195,\"Worldwide Gross\":20628,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Jan 08 1999\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Strand\",\"Source\":null,\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Stargate - The Ark of Truth\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":8962832,\"Production Budget\":7000000,\"Release Date\":\"Mar 11 2008\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"She's Gotta Have It\",\"US Gross\":7137502,\"Worldwide Gross\":7137502,\"US DVD Sales\":null,\"Production Budget\":175000,\"Release Date\":\"Aug 08 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Island\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":6.2,\"IMDB Votes\":2594},{\"Title\":\"Stargate\",\"US Gross\":71565669,\"Worldwide Gross\":196565669,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Oct 28 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Roland Emmerich\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.7,\"IMDB Votes\":47174},{\"Title\":\"The Shadow\",\"US Gross\":31835600,\"Worldwide Gross\":31835600,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jul 01 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Russell Mulcahy\",\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":5.6,\"IMDB Votes\":9530},{\"Title\":\"Show Boat\",\"US Gross\":11000000,\"Worldwide Gross\":11000000,\"US DVD Sales\":null,\"Production Budget\":2300000,\"Release Date\":\"Sep 24 1951\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":6.9,\"IMDB Votes\":1788},{\"Title\":\"Shadowlands\",\"US Gross\":25842377,\"Worldwide Gross\":25842377,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Dec 29 1993\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Savoy\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Sir Richard Attenborough\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.4,\"IMDB Votes\":7689},{\"Title\":\"Shanghai Surprise\",\"US Gross\":2315000,\"Worldwide Gross\":2315000,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Aug 29 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":2.6,\"IMDB Votes\":2591},{\"Title\":\"Shalako\",\"US Gross\":2620000,\"Worldwide Gross\":2620000,\"US DVD Sales\":null,\"Production Budget\":1455000,\"Release Date\":\"Dec 31 1967\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.3,\"IMDB Votes\":1090},{\"Title\":\"Sheena\",\"US Gross\":5778353,\"Worldwide Gross\":5778353,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Aug 17 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Guillermin\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":4.3,\"IMDB Votes\":1598},{\"Title\":\"Shine\",\"US Gross\":35811509,\"Worldwide Gross\":35811509,\"US DVD Sales\":null,\"Production Budget\":5500000,\"Release Date\":\"Nov 22 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":105,\"Distributor\":\"Fine Line\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Scott Hicks\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.6,\"IMDB Votes\":22439},{\"Title\":\"The Shining\",\"US Gross\":44017374,\"Worldwide Gross\":44017374,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"May 23 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Stanley Kubrick\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":8.5,\"IMDB Votes\":177762},{\"Title\":\"Haakon Haakonsen\",\"US Gross\":15024232,\"Worldwide Gross\":15024232,\"US DVD Sales\":null,\"Production Budget\":8500000,\"Release Date\":\"Mar 01 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":1125},{\"Title\":\"Ishtar\",\"US Gross\":14375181,\"Worldwide Gross\":14375181,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"May 15 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":3.7,\"IMDB Votes\":6094},{\"Title\":\"Showgirls\",\"US Gross\":20254932,\"Worldwide Gross\":20254932,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Sep 22 1995\",\"MPAA Rating\":\"NC-17\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul Verhoeven\",\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":4.1,\"IMDB Votes\":27004},{\"Title\":\"The Shawshank Redemption\",\"US Gross\":28241469,\"Worldwide Gross\":28241469,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Sep 23 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Frank Darabont\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":9.2,\"IMDB Votes\":519541},{\"Title\":\"Silver Bullet\",\"US Gross\":10803211,\"Worldwide Gross\":10803211,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Oct 11 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":5.9,\"IMDB Votes\":6387},{\"Title\":\"Side Effects\",\"US Gross\":44701,\"Worldwide Gross\":44701,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Sep 09 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sky Island\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Set It Off\",\"US Gross\":36049108,\"Worldwide Gross\":36049108,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Nov 06 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"F. Gary Gray\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6.3,\"IMDB Votes\":4570},{\"Title\":\"The Silence of the Lambs\",\"US Gross\":130726716,\"Worldwide Gross\":275726716,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Feb 14 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jonathan Demme\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8.7,\"IMDB Votes\":244856},{\"Title\":\"Silver Medalist\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":2600000,\"Release Date\":\"Feb 29 2008\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Silent Trigger\",\"US Gross\":76382,\"Worldwide Gross\":76382,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jun 26 1996\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Russell Mulcahy\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":1364},{\"Title\":\"Thinner\",\"US Gross\":15171475,\"Worldwide Gross\":15171475,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Oct 25 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":93,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":18,\"IMDB Rating\":5.3,\"IMDB Votes\":7888},{\"Title\":\"Sling Blade\",\"US Gross\":24475416,\"Worldwide Gross\":34175000,\"US DVD Sales\":null,\"Production Budget\":4833610,\"Release Date\":\"Nov 20 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":133,\"Distributor\":\"Miramax\",\"Source\":\"Based on Short Film\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8,\"IMDB Votes\":41785},{\"Title\":\"Slacker\",\"US Gross\":1227508,\"Worldwide Gross\":1227508,\"US DVD Sales\":null,\"Production Budget\":23000,\"Release Date\":\"Aug 01 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Richard Linklater\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":6.9,\"IMDB Votes\":5907},{\"Title\":\"Some Like it Hot\",\"US Gross\":25000000,\"Worldwide Gross\":25000000,\"US DVD Sales\":null,\"Production Budget\":2883848,\"Release Date\":\"Mar 29 1959\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Billy Wilder\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.3,\"IMDB Votes\":67157},{\"Title\":\"The Scarlet Letter\",\"US Gross\":10359006,\"Worldwide Gross\":10359006,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Oct 13 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Roland Joffe\",\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":4.6,\"IMDB Votes\":6155},{\"Title\":\"Silmido\",\"US Gross\":298347,\"Worldwide Gross\":30298347,\"US DVD Sales\":null,\"Production Budget\":8500000,\"Release Date\":\"Apr 23 2004\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Cinema Service\",\"Source\":null,\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":1724},{\"Title\":\"Sleeper\",\"US Gross\":18344729,\"Worldwide Gross\":18344729,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Dec 17 1973\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.3,\"IMDB Votes\":15466},{\"Title\":\"Sleepers\",\"US Gross\":53300852,\"Worldwide Gross\":165600852,\"US DVD Sales\":null,\"Production Budget\":44000000,\"Release Date\":\"Oct 18 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":105,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Barry Levinson\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":7.3,\"IMDB Votes\":51874},{\"Title\":\"The Slaughter Rule\",\"US Gross\":13134,\"Worldwide Gross\":13134,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Jan 10 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":1136},{\"Title\":\"Solomon and Sheba\",\"US Gross\":11000000,\"Worldwide Gross\":11000000,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Jan 01 1959\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"King Vidor\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":915},{\"Title\":\"Sur Le Seuil\",\"US Gross\":2013052,\"Worldwide Gross\":2013052,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Oct 03 2003\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Alliance\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":585},{\"Title\":\"The Usual Suspects\",\"US Gross\":23341568,\"Worldwide Gross\":23341568,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Aug 16 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Gramercy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bryan Singer\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":8.7,\"IMDB Votes\":266890},{\"Title\":\"Silverado\",\"US Gross\":33200000,\"Worldwide Gross\":33200000,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Jul 10 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Lawrence Kasdan\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7,\"IMDB Votes\":14243},{\"Title\":\"Salvador\",\"US Gross\":1500000,\"Worldwide Gross\":1500000,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Apr 23 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Hemdale\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7.5,\"IMDB Votes\":7797},{\"Title\":\"Sex, Lies, and Videotape\",\"US Gross\":24741667,\"Worldwide Gross\":36741667,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Aug 04 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Steven Soderbergh\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Show Me\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":400000,\"Release Date\":\"Nov 04 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Wolfe Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":288},{\"Title\":\"Simon\",\"US Gross\":4055,\"Worldwide Gross\":4055,\"US DVD Sales\":null,\"Production Budget\":1300000,\"Release Date\":\"Apr 07 2006\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Strand\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8,\"IMDB Votes\":4873},{\"Title\":\"Super Mario Bros.\",\"US Gross\":20844907,\"Worldwide Gross\":20844907,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"May 28 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Game\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.8,\"IMDB Votes\":17281},{\"Title\":\"Somewhere in Time\",\"US Gross\":9709597,\"Worldwide Gross\":9709597,\"US DVD Sales\":null,\"Production Budget\":5100000,\"Release Date\":\"Oct 03 1980\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":7,\"IMDB Votes\":8787},{\"Title\":\"Smoke Signals\",\"US Gross\":6719300,\"Worldwide Gross\":7756617,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jun 26 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":6.9,\"IMDB Votes\":5058},{\"Title\":\"Serial Mom\",\"US Gross\":7881335,\"Worldwide Gross\":7881335,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Apr 13 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Savoy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Waters\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6.4,\"IMDB Votes\":10999},{\"Title\":\"Sommersturm\",\"US Gross\":95204,\"Worldwide Gross\":95204,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Mar 17 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Regent Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":5251},{\"Title\":\"Silent Movie\",\"US Gross\":36145695,\"Worldwide Gross\":36145695,\"US DVD Sales\":null,\"Production Budget\":4400000,\"Release Date\":\"Jun 25 1976\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Mel Brooks\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":6.4,\"IMDB Votes\":6248},{\"Title\":\"The Santa Clause\",\"US Gross\":144833357,\"Worldwide Gross\":189800000,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Nov 11 1994\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"John Pasquin\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":6.1,\"IMDB Votes\":17773},{\"Title\":\"The Singles Ward\",\"US Gross\":1250798,\"Worldwide Gross\":1250798,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Feb 01 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Halestorm Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":5.7,\"IMDB Votes\":736},{\"Title\":\"Sense and Sensibility\",\"US Gross\":42993774,\"Worldwide Gross\":134993774,\"US DVD Sales\":null,\"Production Budget\":16500000,\"Release Date\":\"Dec 11 1995\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Ang Lee\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":7.7,\"IMDB Votes\":31279},{\"Title\":\"Singin' in the Rain\",\"US Gross\":3600000,\"Worldwide Gross\":3600000,\"US DVD Sales\":null,\"Production Budget\":2540000,\"Release Date\":\"Apr 10 1952\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Stanley Donen\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":8.4,\"IMDB Votes\":55352},{\"Title\":\"Solitude\",\"US Gross\":6260,\"Worldwide Gross\":6260,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Jan 07 2005\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Indican Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.8,\"IMDB Votes\":82},{\"Title\":\"The Sound of Music\",\"US Gross\":163214286,\"Worldwide Gross\":286214286,\"US DVD Sales\":null,\"Production Budget\":8200000,\"Release Date\":\"Apr 01 1965\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Robert Wise\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.3,\"IMDB Votes\":45},{\"Title\":\"She's the One\",\"US Gross\":9482579,\"Worldwide Gross\":13795053,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Aug 23 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Edward Burns\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6,\"IMDB Votes\":8159},{\"Title\":\"Straight out of Brooklyn\",\"US Gross\":2712293,\"Worldwide Gross\":2712293,\"US DVD Sales\":null,\"Production Budget\":450000,\"Release Date\":\"Dec 31 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":5.6,\"IMDB Votes\":263},{\"Title\":\"Spaceballs\",\"US Gross\":38119483,\"Worldwide Gross\":38119483,\"US DVD Sales\":null,\"Production Budget\":22700000,\"Release Date\":\"Jun 24 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Mel Brooks\",\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":6.9,\"IMDB Votes\":52434},{\"Title\":\"Speed\",\"US Gross\":121248145,\"Worldwide Gross\":283200000,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jun 10 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jan De Bont\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":2.6,\"IMDB Votes\":4175},{\"Title\":\"Species\",\"US Gross\":60054449,\"Worldwide Gross\":113354449,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Jul 07 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Roger Donaldson\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":5.6,\"IMDB Votes\":21917},{\"Title\":\"Sphinx\",\"US Gross\":2000000,\"Worldwide Gross\":11400000,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 11 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Franklin J. Schaffner\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":478},{\"Title\":\"Spaced Invaders\",\"US Gross\":15000000,\"Worldwide Gross\":15000000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Apr 27 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Patrick Read Johnson\",\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":4.8,\"IMDB Votes\":1464},{\"Title\":\"Spellbound\",\"US Gross\":7000000,\"Worldwide Gross\":7000000,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Dec 31 1944\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Alfred Hitchcock\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.7,\"IMDB Votes\":14665},{\"Title\":\"Splash\",\"US Gross\":62599495,\"Worldwide Gross\":62599495,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Mar 09 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Ron Howard\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":6.2,\"IMDB Votes\":21732},{\"Title\":\"Superman IV: The Quest for Peace\",\"US Gross\":11227824,\"Worldwide Gross\":11227824,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Jul 24 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Sidney J. Furie\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.4,\"IMDB Votes\":15164},{\"Title\":\"Superman II\",\"US Gross\":108185706,\"Worldwide Gross\":108185706,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Jun 19 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":\"Richard Donner\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":29512},{\"Title\":\"Superman III\",\"US Gross\":59950623,\"Worldwide Gross\":59950623,\"US DVD Sales\":null,\"Production Budget\":39000000,\"Release Date\":\"Jun 17 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":null,\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":4.7,\"IMDB Votes\":18070},{\"Title\":\"Sparkler\",\"US Gross\":5494,\"Worldwide Gross\":5494,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Mar 19 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Strand\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.5,\"IMDB Votes\":320},{\"Title\":\"Superman\",\"US Gross\":134218018,\"Worldwide Gross\":300200000,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Dec 15 1978\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":\"Richard Donner\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":4.9,\"IMDB Votes\":129},{\"Title\":\"The Specialist\",\"US Gross\":57362581,\"Worldwide Gross\":57362581,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Oct 07 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":4,\"IMDB Rating\":4.9,\"IMDB Votes\":18749},{\"Title\":\"The Sorcerer\",\"US Gross\":12000000,\"Worldwide Gross\":12000000,\"US DVD Sales\":null,\"Production Budget\":21600000,\"Release Date\":\"Jun 24 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"William Friedkin\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":563},{\"Title\":\"Sisters in Law\",\"US Gross\":33312,\"Worldwide Gross\":33312,\"US DVD Sales\":null,\"Production Budget\":300000,\"Release Date\":\"Apr 12 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Women Make Movies\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":203},{\"Title\":\"Smilla's Sense of Snow\",\"US Gross\":2221994,\"Worldwide Gross\":2221994,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Feb 28 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bille August\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":6.1,\"IMDB Votes\":7280},{\"Title\":\"Assassins\",\"US Gross\":30306268,\"Worldwide Gross\":83306268,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Oct 06 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Donner\",\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":5.9,\"IMDB Votes\":23370},{\"Title\":\"Star Trek: The Motion Picture\",\"US Gross\":82258456,\"Worldwide Gross\":139000000,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Dec 07 1979\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Robert Wise\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.2,\"IMDB Votes\":25454},{\"Title\":\"Star Trek III: The Search for Spock\",\"US Gross\":76471046,\"Worldwide Gross\":87000000,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Jun 01 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Leonard Nimoy\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":22261},{\"Title\":\"Star Trek IV: The Voyage Home\",\"US Gross\":109713132,\"Worldwide Gross\":133000000,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Nov 26 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Leonard Nimoy\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":26207},{\"Title\":\"Stand by Me\",\"US Gross\":52287414,\"Worldwide Gross\":52287414,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Aug 08 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Rob Reiner\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":8.2,\"IMDB Votes\":90143},{\"Title\":\"Stone Cold\",\"US Gross\":9286314,\"Worldwide Gross\":9286314,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"May 17 1991\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":4.6,\"IMDB Votes\":52},{\"Title\":\"The Stewardesses\",\"US Gross\":13500000,\"Worldwide Gross\":25000000,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Jul 25 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.3,\"IMDB Votes\":86},{\"Title\":\"Street Fighter\",\"US Gross\":33423000,\"Worldwide Gross\":99423000,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Dec 23 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Game\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":3.3,\"IMDB Votes\":25407},{\"Title\":\"Star Trek II: The Wrath of Khan\",\"US Gross\":79912963,\"Worldwide Gross\":96800000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jun 04 1982\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":36131},{\"Title\":\"Steal (Canadian Release)\",\"US Gross\":220944,\"Worldwide Gross\":220944,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Apr 25 2003\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Sting\",\"US Gross\":159616327,\"Worldwide Gross\":159616327,\"US DVD Sales\":null,\"Production Budget\":5500000,\"Release Date\":\"Dec 25 1973\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":null,\"Creative Type\":\"Historical Fiction\",\"Director\":\"George Roy Hill\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8.4,\"IMDB Votes\":65866},{\"Title\":\"Stonewall\",\"US Gross\":304602,\"Worldwide Gross\":304602,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jul 26 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":99,\"Distributor\":\"Strand\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":741},{\"Title\":\"Star Trek V: The Final Frontier\",\"US Gross\":52210049,\"Worldwide Gross\":70200000,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jun 09 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5,\"IMDB Votes\":20600},{\"Title\":\"Star Trek VI: The Undiscovered Country\",\"US Gross\":74888996,\"Worldwide Gross\":96900000,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Dec 06 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":23546},{\"Title\":\"Star Trek: Generations\",\"US Gross\":75671262,\"Worldwide Gross\":120000000,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Nov 18 1994\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":26465},{\"Title\":\"Stripes\",\"US Gross\":85300000,\"Worldwide Gross\":85300000,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jun 26 1981\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ivan Reitman\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":6.8,\"IMDB Votes\":19618},{\"Title\":\"Striptease\",\"US Gross\":32773011,\"Worldwide Gross\":32773011,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Jun 28 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":115,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andrew Bergman\",\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":3.9,\"IMDB Votes\":18012},{\"Title\":\"Star Wars Ep. IV: A New Hope\",\"US Gross\":460998007,\"Worldwide Gross\":797900000,\"US DVD Sales\":11182540,\"Production Budget\":11000000,\"Release Date\":\"May 25 1977\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"George Lucas\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Saints and Soldiers\",\"US Gross\":1310470,\"Worldwide Gross\":1310470,\"US DVD Sales\":null,\"Production Budget\":780000,\"Release Date\":\"Aug 06 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":90,\"Distributor\":\"Excel Entertainment\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Ryan Little\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":7581},{\"Title\":\"Steppin: The Movie\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Dec 31 2007\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.3,\"IMDB Votes\":108},{\"Title\":\"Strangers on a Train\",\"US Gross\":7000000,\"Worldwide Gross\":7000000,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Jul 03 1951\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Alfred Hitchcock\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.3,\"IMDB Votes\":34284},{\"Title\":\"Sugar Hill\",\"US Gross\":18272447,\"Worldwide Gross\":18272447,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 25 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5.3,\"IMDB Votes\":1627},{\"Title\":\"Stiff Upper Lips\",\"US Gross\":69582,\"Worldwide Gross\":69582,\"US DVD Sales\":null,\"Production Budget\":5700000,\"Release Date\":\"Aug 27 1999\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Cowboy Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":6.1,\"IMDB Votes\":543},{\"Title\":\"Shichinin no samurai\",\"US Gross\":271736,\"Worldwide Gross\":271736,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Nov 19 1956\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Cowboy Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Akira Kurosawa\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.8,\"IMDB Votes\":96698},{\"Title\":\"Sweet Charity\",\"US Gross\":8000000,\"Worldwide Gross\":8000000,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 31 1968\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Bob Fosse\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":1691},{\"Title\":\"Sands of Iwo Jima\",\"US Gross\":7800000,\"Worldwide Gross\":7800000,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Dec 31 1948\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.1,\"IMDB Votes\":4160},{\"Title\":\"The Spy Who Loved Me\",\"US Gross\":46800000,\"Worldwide Gross\":185400000,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Jul 13 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7.1,\"IMDB Votes\":24938},{\"Title\":\"The Swindle\",\"US Gross\":245359,\"Worldwide Gross\":5045359,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Dec 25 1998\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Yorker\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":1417},{\"Title\":\"Swingers\",\"US Gross\":4505922,\"Worldwide Gross\":6542637,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Oct 18 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Doug Liman\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":6.2,\"IMDB Votes\":431},{\"Title\":\"Snow White and the Seven Dwarfs\",\"US Gross\":184925485,\"Worldwide Gross\":184925485,\"US DVD Sales\":null,\"Production Budget\":1488000,\"Release Date\":\"Dec 21 2037\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":7.8,\"IMDB Votes\":38141},{\"Title\":\"The Sweet Hereafter\",\"US Gross\":4306697,\"Worldwide Gross\":4306697,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Oct 10 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Atom Egoyan\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.8,\"IMDB Votes\":16280},{\"Title\":\"She Wore a Yellow Ribbon\",\"US Gross\":5400000,\"Worldwide Gross\":5400000,\"US DVD Sales\":null,\"Production Budget\":1600000,\"Release Date\":\"Dec 31 1948\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Ford\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":7.3,\"IMDB Votes\":5825},{\"Title\":\"Sex with Strangers\",\"US Gross\":247740,\"Worldwide Gross\":247740,\"US DVD Sales\":null,\"Production Budget\":1100000,\"Release Date\":\"Feb 22 2002\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":5,\"IMDB Votes\":151},{\"Title\":\"Spy Hard\",\"US Gross\":26936265,\"Worldwide Gross\":26936265,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"May 24 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":81,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":4.7,\"IMDB Votes\":12682},{\"Title\":\"Shi Yue Wei Cheng\",\"US Gross\":0,\"Worldwide Gross\":44195779,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Dec 18 2009\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":1795},{\"Title\":\"Tango\",\"US Gross\":1687311,\"Worldwide Gross\":1687311,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Feb 12 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":1490},{\"Title\":\"The Age of Innocence\",\"US Gross\":32014993,\"Worldwide Gross\":32014993,\"US DVD Sales\":null,\"Production Budget\":34000000,\"Release Date\":\"Sep 17 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.1,\"IMDB Votes\":16000},{\"Title\":\"Talk Radio\",\"US Gross\":3468572,\"Worldwide Gross\":3468572,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Dec 01 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Oliver Stone\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":7,\"IMDB Votes\":5659},{\"Title\":\"The Texas Chainsaw Massacre\",\"US Gross\":26572439,\"Worldwide Gross\":26572439,\"US DVD Sales\":null,\"Production Budget\":140000,\"Release Date\":\"Oct 18 1974\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":\"Tobe Hooper\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":6.1,\"IMDB Votes\":39172},{\"Title\":\"The Texas Chainsaw Massacre 2\",\"US Gross\":8025872,\"Worldwide Gross\":8025872,\"US DVD Sales\":null,\"Production Budget\":4700000,\"Release Date\":\"Aug 22 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Cannon\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tobe Hooper\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":5.1,\"IMDB Votes\":7702},{\"Title\":\"Timecop\",\"US Gross\":44853581,\"Worldwide Gross\":102053581,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Sep 16 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Peter Hyams\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":5.5,\"IMDB Votes\":16570},{\"Title\":\"Tin Cup\",\"US Gross\":53854588,\"Worldwide Gross\":75854588,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Aug 16 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":105,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ron Shelton\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":6.1,\"IMDB Votes\":17274},{\"Title\":\"Torn Curtain\",\"US Gross\":13000000,\"Worldwide Gross\":13000000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Jul 16 1966\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Alfred Hitchcock\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.6,\"IMDB Votes\":8670},{\"Title\":\"To Die For\",\"US Gross\":21284514,\"Worldwide Gross\":27688744,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Sep 27 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gus Van Sant\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":6.8,\"IMDB Votes\":18459},{\"Title\":\"Terror Train\",\"US Gross\":8000000,\"Worldwide Gross\":8000000,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Dec 31 1979\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Roger Spottiswoode\",\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.5,\"IMDB Votes\":2479},{\"Title\":\"Teen Wolf Too\",\"US Gross\":7888000,\"Worldwide Gross\":7888000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Nov 20 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Atlantic\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":2.8,\"IMDB Votes\":5207},{\"Title\":\"The Fan\",\"US Gross\":18582965,\"Worldwide Gross\":18582965,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Aug 16 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":117,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tony Scott\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":5.6,\"IMDB Votes\":20640},{\"Title\":\"Timber Falls\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":2600000,\"Release Date\":\"Dec 07 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Slowhand Cinema\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.3,\"IMDB Votes\":2213},{\"Title\":\"Tae Guik Gi: The Brotherhood of War\",\"US Gross\":1110186,\"Worldwide Gross\":69826708,\"US DVD Sales\":null,\"Production Budget\":12500000,\"Release Date\":\"Sep 03 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"IDP Distribution\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Incredibly True Adventure of Two Girls in Love\",\"US Gross\":2210408,\"Worldwide Gross\":2477155,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Jun 16 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":1795},{\"Title\":\"There Goes My Baby\",\"US Gross\":125169,\"Worldwide Gross\":125169,\"US DVD Sales\":null,\"Production Budget\":10500000,\"Release Date\":\"Sep 02 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":507},{\"Title\":\"Tank Girl\",\"US Gross\":4064333,\"Worldwide Gross\":4064333,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Mar 01 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":4.7,\"IMDB Votes\":10772},{\"Title\":\"Top Gun\",\"US Gross\":176786701,\"Worldwide Gross\":353786701,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"May 16 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tony Scott\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":6.5,\"IMDB Votes\":80013},{\"Title\":\"Thunderball\",\"US Gross\":63600000,\"Worldwide Gross\":141200000,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Dec 29 1965\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7,\"IMDB Votes\":27245},{\"Title\":\"The Calling\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Dec 31 2009\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.4,\"IMDB Votes\":1113},{\"Title\":\"The Craft\",\"US Gross\":24769466,\"Worldwide Gross\":55669466,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"May 03 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Fantasy\",\"Director\":\"Andrew Fleming\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":5.9,\"IMDB Votes\":21130},{\"Title\":\"It Happened One Night\",\"US Gross\":2500000,\"Worldwide Gross\":2500000,\"US DVD Sales\":null,\"Production Budget\":325000,\"Release Date\":\"Dec 31 1933\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":null,\"Director\":\"Frank Capra\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.3,\"IMDB Votes\":25074},{\"Title\":\"The Net\",\"US Gross\":50621733,\"Worldwide Gross\":110521733,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Jul 28 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.6,\"IMDB Votes\":24363},{\"Title\":\"La otra conquista\",\"US Gross\":886410,\"Worldwide Gross\":886410,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Apr 19 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Hombre de Oro\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":584},{\"Title\":\"The Journey\",\"US Gross\":19800,\"Worldwide Gross\":19800,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Jul 11 2003\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.4,\"IMDB Votes\":74},{\"Title\":\"They Live\",\"US Gross\":13000000,\"Worldwide Gross\":13000000,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Nov 04 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"John Carpenter\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7,\"IMDB Votes\":20995},{\"Title\":\"Tales from the Hood\",\"US Gross\":11784569,\"Worldwide Gross\":11784569,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"May 24 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Savoy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.8,\"IMDB Votes\":1860},{\"Title\":\"Time Bandits\",\"US Gross\":37400000,\"Worldwide Gross\":37400000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Nov 06 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Avco Embassy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Terry Gilliam\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":6.9,\"IMDB Votes\":22719},{\"Title\":\"Tombstone\",\"US Gross\":56505000,\"Worldwide Gross\":56505000,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Dec 25 1993\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Western\",\"Creative Type\":\"Dramatization\",\"Director\":\"George P. Cosmatos\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7.7,\"IMDB Votes\":43688},{\"Title\":\"Time Changer\",\"US Gross\":1500711,\"Worldwide Gross\":1500711,\"US DVD Sales\":null,\"Production Budget\":825000,\"Release Date\":\"Oct 25 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Five & Two Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5,\"IMDB Votes\":1029},{\"Title\":\"Teenage Mutant Ninja Turtles II: The Secret of the Ooze\",\"US Gross\":78656813,\"Worldwide Gross\":78656813,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Mar 22 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.3,\"IMDB Votes\":12742},{\"Title\":\"Teenage Mutant Ninja Turtles III\",\"US Gross\":42273609,\"Worldwide Gross\":42273609,\"US DVD Sales\":null,\"Production Budget\":21000000,\"Release Date\":\"Mar 19 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":4.3,\"IMDB Votes\":9064},{\"Title\":\"Tango & Cash\",\"US Gross\":63408614,\"Worldwide Gross\":63408614,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Dec 22 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andrei Konchalovsky\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":5.8,\"IMDB Votes\":25248},{\"Title\":\"Teenage Mutant Ninja Turtles\",\"US Gross\":135265915,\"Worldwide Gross\":202000000,\"US DVD Sales\":null,\"Production Budget\":13500000,\"Release Date\":\"Mar 30 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Steve Barron\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":25867},{\"Title\":\"Topaz\",\"US Gross\":6000000,\"Worldwide Gross\":6000000,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Dec 19 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Alfred Hitchcock\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.2,\"IMDB Votes\":6389},{\"Title\":\"Taps\",\"US Gross\":35856053,\"Worldwide Gross\":35856053,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Dec 09 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Harold Becker\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":6.5,\"IMDB Votes\":6515},{\"Title\":\"Trainspotting\",\"US Gross\":16501785,\"Worldwide Gross\":24000785,\"US DVD Sales\":null,\"Production Budget\":3100000,\"Release Date\":\"Jul 19 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":94,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Danny Boyle\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":8.2,\"IMDB Votes\":150483},{\"Title\":\"The Train\",\"US Gross\":6800000,\"Worldwide Gross\":6800000,\"US DVD Sales\":null,\"Production Budget\":5800000,\"Release Date\":\"Mar 07 1965\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Frankenheimer\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.8,\"IMDB Votes\":4692},{\"Title\":\"Troop Beverly Hills\",\"US Gross\":7190505,\"Worldwide Gross\":7190505,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Mar 22 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":4.7,\"IMDB Votes\":3427},{\"Title\":\"Trekkies\",\"US Gross\":617172,\"Worldwide Gross\":617172,\"US DVD Sales\":null,\"Production Budget\":375000,\"Release Date\":\"May 21 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":3004},{\"Title\":\"True Lies\",\"US Gross\":146282411,\"Worldwide Gross\":365300000,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Jul 15 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James Cameron\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":7.2,\"IMDB Votes\":80581},{\"Title\":\"Terminator 2: Judgment Day\",\"US Gross\":204859496,\"Worldwide Gross\":516816151,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Jul 02 1991\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"James Cameron\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.5,\"IMDB Votes\":237477},{\"Title\":\"Travellers and Magicians\",\"US Gross\":506793,\"Worldwide Gross\":1058893,\"US DVD Sales\":null,\"Production Budget\":1800000,\"Release Date\":\"Jan 07 2005\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Zeitgeist\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":1069},{\"Title\":\"The Terminator\",\"US Gross\":38019031,\"Worldwide Gross\":78019031,\"US DVD Sales\":null,\"Production Budget\":6400000,\"Release Date\":\"Oct 26 1984\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"James Cameron\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":8.1,\"IMDB Votes\":179606},{\"Title\":\"Tremors\",\"US Gross\":16667084,\"Worldwide Gross\":16667084,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jan 19 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.2,\"IMDB Votes\":29840},{\"Title\":\"True Romance\",\"US Gross\":12281000,\"Worldwide Gross\":12281000,\"US DVD Sales\":null,\"Production Budget\":12500000,\"Release Date\":\"Sep 10 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tony Scott\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7.9,\"IMDB Votes\":73829},{\"Title\":\"Tron\",\"US Gross\":26918576,\"Worldwide Gross\":26918576,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Jul 09 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":2.9,\"IMDB Votes\":923},{\"Title\":\"Trapeze\",\"US Gross\":14400000,\"Worldwide Gross\":14400000,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Dec 31 1955\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.7,\"IMDB Votes\":1570},{\"Title\":\"The Terrorist\",\"US Gross\":195043,\"Worldwide Gross\":195043,\"US DVD Sales\":null,\"Production Budget\":25000,\"Release Date\":\"Jan 14 2000\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Phaedra Cinema\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":50},{\"Title\":\"Trois\",\"US Gross\":1161843,\"Worldwide Gross\":1161843,\"US DVD Sales\":null,\"Production Budget\":200000,\"Release Date\":\"Feb 11 2000\",\"MPAA Rating\":\"NC-17\",\"Running Time min\":null,\"Distributor\":\"Rainforest Productions\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.3,\"IMDB Votes\":360},{\"Title\":\"Things to Do in Denver when You're Dead\",\"US Gross\":529766,\"Worldwide Gross\":529766,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 01 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":6.6,\"IMDB Votes\":12789},{\"Title\":\"A Time to Kill\",\"US Gross\":108766007,\"Worldwide Gross\":152266007,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jul 24 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":150,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Schumacher\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":7.1,\"IMDB Votes\":38577},{\"Title\":\"Total Recall\",\"US Gross\":119394839,\"Worldwide Gross\":261400000,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Jun 01 1990\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Paul Verhoeven\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.4,\"IMDB Votes\":70355},{\"Title\":\"This Thing of Ours\",\"US Gross\":37227,\"Worldwide Gross\":37227,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jul 18 2003\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":316},{\"Title\":\"Tootsie\",\"US Gross\":177200000,\"Worldwide Gross\":177200000,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 17 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sydney Pollack\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.4,\"IMDB Votes\":31669},{\"Title\":\"That Thing You Do!\",\"US Gross\":25857416,\"Worldwide Gross\":31748615,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Oct 04 1996\",\"MPAA Rating\":\"PG\",\"Running Time min\":110,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Tom Hanks\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":6.7,\"IMDB Votes\":25916},{\"Title\":\"The Trouble With Harry\",\"US Gross\":7000000,\"Worldwide Gross\":7000000,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Oct 03 1955\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Alfred Hitchcock\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.2,\"IMDB Votes\":11580},{\"Title\":\"Twins\",\"US Gross\":111936388,\"Worldwide Gross\":216600000,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 09 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ivan Reitman\",\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Twister\",\"US Gross\":241888385,\"Worldwide Gross\":495900000,\"US DVD Sales\":null,\"Production Budget\":88000000,\"Release Date\":\"May 10 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":117,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jan De Bont\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6,\"IMDB Votes\":61665},{\"Title\":\"Towering Inferno\",\"US Gross\":116000000,\"Worldwide Gross\":139700000,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Dec 17 1974\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"John Guillermin\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Taxi Driver\",\"US Gross\":21100000,\"Worldwide Gross\":21100000,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Feb 08 1976\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.6,\"IMDB Votes\":155774},{\"Title\":\"Tycoon\",\"US Gross\":121016,\"Worldwide Gross\":121016,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Jun 13 2003\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":456},{\"Title\":\"Toy Story\",\"US Gross\":191796233,\"Worldwide Gross\":361948825,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Nov 22 1995\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"John Lasseter\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":8.2,\"IMDB Votes\":151143},{\"Title\":\"Twilight Zone: The Movie\",\"US Gross\":29500000,\"Worldwide Gross\":29500000,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jun 24 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.3,\"IMDB Votes\":12054},{\"Title\":\"Unforgettable\",\"US Gross\":2483790,\"Worldwide Gross\":2483790,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Feb 23 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"John Dahl\",\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":5.7,\"IMDB Votes\":2284},{\"Title\":\"UHF\",\"US Gross\":6157157,\"Worldwide Gross\":6157157,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Jul 21 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.6,\"IMDB Votes\":12676},{\"Title\":\"Ulee's Gold\",\"US Gross\":9054736,\"Worldwide Gross\":15600000,\"US DVD Sales\":null,\"Production Budget\":2700000,\"Release Date\":\"Jun 13 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7,\"IMDB Votes\":4041},{\"Title\":\"Under Siege 2: Dark Territory\",\"US Gross\":50024083,\"Worldwide Gross\":104324083,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jul 14 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":5.1,\"IMDB Votes\":15218},{\"Title\":\"The Untouchables\",\"US Gross\":76270454,\"Worldwide Gross\":76270454,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jun 03 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":8,\"IMDB Votes\":86097},{\"Title\":\"Under the Rainbow\",\"US Gross\":18826490,\"Worldwide Gross\":18826490,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Jul 31 1981\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":1263},{\"Title\":\"Veer-Zaara\",\"US Gross\":2938532,\"Worldwide Gross\":7017859,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Nov 12 2004\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Yash Raj Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":4155},{\"Title\":\"Videodrome\",\"US Gross\":2120439,\"Worldwide Gross\":2120439,\"US DVD Sales\":null,\"Production Budget\":5952000,\"Release Date\":\"Feb 04 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"David Cronenberg\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":20080},{\"Title\":\"Les Visiteurs\",\"US Gross\":659000,\"Worldwide Gross\":98754000,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Jul 12 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":7393},{\"Title\":\"Couloirs du temps: Les visiteurs 2, Les\",\"US Gross\":146072,\"Worldwide Gross\":26146072,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Mar 27 1998\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Valley of Decision\",\"US Gross\":9132000,\"Worldwide Gross\":9132000,\"US DVD Sales\":null,\"Production Budget\":2160000,\"Release Date\":\"Dec 31 1944\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":682},{\"Title\":\"Vampire in Brooklyn\",\"US Gross\":19637147,\"Worldwide Gross\":19637147,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Oct 27 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Wes Craven\",\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":4.3,\"IMDB Votes\":8200},{\"Title\":\"The Verdict\",\"US Gross\":53977250,\"Worldwide Gross\":53977250,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Dec 08 1982\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sidney Lumet\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.7,\"IMDB Votes\":10864},{\"Title\":\"Virtuosity\",\"US Gross\":23998226,\"Worldwide Gross\":23998226,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Aug 04 1995\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":5.3,\"IMDB Votes\":11079},{\"Title\":\"Everything Put Together\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Nov 02 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":418},{\"Title\":\"A View to a Kill\",\"US Gross\":50327960,\"Worldwide Gross\":152627960,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"May 24 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Glen\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.1,\"IMDB Votes\":23770},{\"Title\":\"The Work and the Glory: American Zion\",\"US Gross\":2025032,\"Worldwide Gross\":2025032,\"US DVD Sales\":null,\"Production Budget\":6500000,\"Release Date\":\"Oct 21 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":100,\"Distributor\":\"Vineyard Distribution\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":365},{\"Title\":\"A Walk on the Moon\",\"US Gross\":4741987,\"Worldwide Gross\":4741987,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Mar 26 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Tony Goldwyn\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":6.4,\"IMDB Votes\":4125},{\"Title\":\"The Work and the Glory\",\"US Gross\":3347647,\"Worldwide Gross\":3347647,\"US DVD Sales\":null,\"Production Budget\":7500000,\"Release Date\":\"Nov 24 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Excel Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":6,\"IMDB Votes\":531},{\"Title\":\"The Work and the Story\",\"US Gross\":16137,\"Worldwide Gross\":16137,\"US DVD Sales\":null,\"Production Budget\":103000,\"Release Date\":\"Oct 03 2003\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Off-Hollywood Distribution\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.1,\"IMDB Votes\":82},{\"Title\":\"What the #$'! Do We Know\",\"US Gross\":10941801,\"Worldwide Gross\":10941801,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Feb 06 2004\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Captured Light\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Waiting for Guffman\",\"US Gross\":2922988,\"Worldwide Gross\":2922988,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Jan 31 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Christopher Guest\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":14880},{\"Title\":\"Who Framed Roger Rabbit?\",\"US Gross\":154112492,\"Worldwide Gross\":351500000,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Jun 22 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Robert Zemeckis\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":7.6,\"IMDB Votes\":53541},{\"Title\":\"White Fang\",\"US Gross\":34729091,\"Worldwide Gross\":34729091,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Jan 18 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Randal Kleiser\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"White Squall\",\"US Gross\":10229300,\"Worldwide Gross\":10229300,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Feb 02 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Dramatization\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.4,\"IMDB Votes\":8385},{\"Title\":\"What's Eating Gilbert Grape\",\"US Gross\":9170214,\"Worldwide Gross\":9170214,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Dec 25 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Lasse Hallstrom\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.8,\"IMDB Votes\":51219},{\"Title\":\"Witchboard\",\"US Gross\":7369373,\"Worldwide Gross\":7369373,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Dec 31 1986\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Cinema Guild\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":1666},{\"Title\":\"The Wiz\",\"US Gross\":13000000,\"Worldwide Gross\":13000000,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Oct 24 1978\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Musical\",\"Creative Type\":null,\"Director\":\"Sidney Lumet\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":4.5,\"IMDB Votes\":4896},{\"Title\":\"Walking and Talking\",\"US Gross\":1287480,\"Worldwide Gross\":1615787,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Jul 17 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":6.5,\"IMDB Votes\":1756},{\"Title\":\"The Wild Bunch\",\"US Gross\":509424,\"Worldwide Gross\":509424,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Jun 18 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Sam Peckinpah\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.2,\"IMDB Votes\":31196},{\"Title\":\"Wall Street\",\"US Gross\":43848100,\"Worldwide Gross\":43848100,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 11 1987\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Oliver Stone\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7.3,\"IMDB Votes\":35454},{\"Title\":\"Waterloo\",\"US Gross\":null,\"Worldwide Gross\":null,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jan 01 1970\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Wrong Man\",\"US Gross\":2000000,\"Worldwide Gross\":2000000,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Dec 23 1956\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Alfred Hitchcock\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.5,\"IMDB Votes\":7531},{\"Title\":\"Woman Chaser\",\"US Gross\":110719,\"Worldwide Gross\":110719,\"US DVD Sales\":null,\"Production Budget\":150000,\"Release Date\":\"Jun 23 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Wings\",\"US Gross\":null,\"Worldwide Gross\":null,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Aug 12 2027\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.9,\"IMDB Votes\":3035},{\"Title\":\"We're No Angels\",\"US Gross\":10555348,\"Worldwide Gross\":10555348,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 15 1989\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Neil Jordan\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":5.6,\"IMDB Votes\":7839},{\"Title\":\"Wolf\",\"US Gross\":65011757,\"Worldwide Gross\":131011757,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Jun 17 1994\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Fantasy\",\"Director\":\"Mike Nichols\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6,\"IMDB Votes\":20035},{\"Title\":\"Warriors of Virtue\",\"US Gross\":6448817,\"Worldwide Gross\":6448817,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"May 02 1997\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ronny Yu\",\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":4,\"IMDB Votes\":1202},{\"Title\":\"War Games\",\"US Gross\":74433837,\"Worldwide Gross\":74433837,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jun 03 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"John Badham\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":88},{\"Title\":\"Warlock\",\"US Gross\":8824553,\"Worldwide Gross\":8824553,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Jan 10 1991\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Trimark\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Steve Miner\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":4921},{\"Title\":\"War and Peace\",\"US Gross\":12500000,\"Worldwide Gross\":12500000,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Dec 31 1955\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"King Vidor\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.8,\"IMDB Votes\":2923},{\"Title\":\"Warlock: The Armageddon\",\"US Gross\":3902679,\"Worldwide Gross\":3902679,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Sep 24 1993\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Trimark\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":1888},{\"Title\":\"Wasabi\",\"US Gross\":81525,\"Worldwide Gross\":7000000,\"US DVD Sales\":null,\"Production Budget\":15300000,\"Release Date\":\"Sep 27 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":11647},{\"Title\":\"West Side Story\",\"US Gross\":43700000,\"Worldwide Gross\":43700000,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Oct 18 1961\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Robert Wise\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.7,\"IMDB Votes\":29488},{\"Title\":\"When The Cat's Away\",\"US Gross\":1652472,\"Worldwide Gross\":2525984,\"US DVD Sales\":null,\"Production Budget\":300000,\"Release Date\":\"Sep 20 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Welcome to the Dollhouse\",\"US Gross\":4198137,\"Worldwide Gross\":4726732,\"US DVD Sales\":null,\"Production Budget\":800000,\"Release Date\":\"May 10 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Todd Solondz\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":13469},{\"Title\":\"Witness\",\"US Gross\":65532576,\"Worldwide Gross\":65532576,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Feb 08 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Weir\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.6,\"IMDB Votes\":30460},{\"Title\":\"Waterworld\",\"US Gross\":88246220,\"Worldwide Gross\":264246220,\"US DVD Sales\":null,\"Production Budget\":175000000,\"Release Date\":\"Jul 28 1995\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Kevin Reynolds\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":5.7,\"IMDB Votes\":54126},{\"Title\":\"Willy Wonka & the Chocolate Factory\",\"US Gross\":4000000,\"Worldwide Gross\":4000000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Jun 30 1971\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.8,\"IMDB Votes\":46824},{\"Title\":\"Wayne's World\",\"US Gross\":121697323,\"Worldwide Gross\":183097323,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Feb 14 1992\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Penelope Spheeris\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.9,\"IMDB Votes\":42570},{\"Title\":\"Wyatt Earp\",\"US Gross\":25052000,\"Worldwide Gross\":25052000,\"US DVD Sales\":null,\"Production Budget\":63000000,\"Release Date\":\"Jun 24 1994\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Western\",\"Creative Type\":\"Dramatization\",\"Director\":\"Lawrence Kasdan\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":6.4,\"IMDB Votes\":15614},{\"Title\":\"The Wizard of Oz\",\"US Gross\":28202232,\"Worldwide Gross\":28202232,\"US DVD Sales\":null,\"Production Budget\":2777000,\"Release Date\":\"Aug 25 2039\",\"MPAA Rating\":\"G\",\"Running Time min\":103,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Fantasy\",\"Director\":\"King Vidor\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.3,\"IMDB Votes\":102795},{\"Title\":\"Executive Decision\",\"US Gross\":56679192,\"Worldwide Gross\":122079192,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Mar 15 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":132,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":6.3,\"IMDB Votes\":18569},{\"Title\":\"Exodus\",\"US Gross\":21750000,\"Worldwide Gross\":21750000,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Jan 01 1960\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.8,\"IMDB Votes\":3546},{\"Title\":\"The Exorcist\",\"US Gross\":204632868,\"Worldwide Gross\":402500000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Dec 26 1973\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"William Friedkin\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":8.1,\"IMDB Votes\":103131},{\"Title\":\"Extreme Measures\",\"US Gross\":17378193,\"Worldwide Gross\":17378193,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Sep 27 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":117,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Apted\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":5.9,\"IMDB Votes\":8038},{\"Title\":\"You Can't Take It With You\",\"US Gross\":4000000,\"Worldwide Gross\":4000000,\"US DVD Sales\":null,\"Production Budget\":1644000,\"Release Date\":\"Dec 31 1937\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Frank Capra\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8,\"IMDB Votes\":8597},{\"Title\":\"Eye for an Eye\",\"US Gross\":26792700,\"Worldwide Gross\":26792700,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Jan 12 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":101,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Schlesinger\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":4837},{\"Title\":\"Young Guns\",\"US Gross\":44726644,\"Worldwide Gross\":44726644,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Aug 12 1988\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.6,\"IMDB Votes\":21404},{\"Title\":\"Young Frankenstein\",\"US Gross\":86300000,\"Worldwide Gross\":86300000,\"US DVD Sales\":15500333,\"Production Budget\":2800000,\"Release Date\":\"Dec 15 1974\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Mel Brooks\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":8,\"IMDB Votes\":57106},{\"Title\":\"Yentl\",\"US Gross\":39012241,\"Worldwide Gross\":39012241,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Nov 18 1983\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM/UA Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Musical\",\"Creative Type\":null,\"Director\":\"Barbra Streisand\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.2,\"IMDB Votes\":4952},{\"Title\":\"You Only Live Twice\",\"US Gross\":43100000,\"Worldwide Gross\":111600000,\"US DVD Sales\":null,\"Production Budget\":9500000,\"Release Date\":\"Jun 13 1967\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":7,\"IMDB Votes\":24701},{\"Title\":\"Ayurveda: Art of Being\",\"US Gross\":16892,\"Worldwide Gross\":2066892,\"US DVD Sales\":null,\"Production Budget\":300000,\"Release Date\":\"Jul 19 2002\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Kino International\",\"Source\":null,\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":181},{\"Title\":\"Young Sherlock Holmes\",\"US Gross\":19739000,\"Worldwide Gross\":19739000,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Dec 04 1985\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Barry Levinson\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.5,\"IMDB Votes\":7293},{\"Title\":\"102 Dalmatians\",\"US Gross\":66941559,\"Worldwide Gross\":66941559,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Nov 22 2000\",\"MPAA Rating\":\"G\",\"Running Time min\":100,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Kevin Lima\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":4.4,\"IMDB Votes\":7147},{\"Title\":\"Ten Things I Hate About You\",\"US Gross\":38177966,\"Worldwide Gross\":38177966,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Mar 31 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Play\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":61910},{\"Title\":\"10,000 B.C.\",\"US Gross\":94784201,\"Worldwide Gross\":269065678,\"US DVD Sales\":27044045,\"Production Budget\":105000000,\"Release Date\":\"Mar 07 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Roland Emmerich\",\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":5.8,\"IMDB Votes\":134},{\"Title\":\"10th & Wolf\",\"US Gross\":54702,\"Worldwide Gross\":54702,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Aug 18 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Robert Moresco\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":6.3,\"IMDB Votes\":3655},{\"Title\":\"11:14\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Aug 12 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":18261},{\"Title\":\"Cloverfield\",\"US Gross\":80048433,\"Worldwide Gross\":170764033,\"US DVD Sales\":29180398,\"Production Budget\":25000000,\"Release Date\":\"Jan 18 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Matt Reeves\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.4,\"IMDB Votes\":136068},{\"Title\":\"12 Rounds\",\"US Gross\":12234694,\"Worldwide Gross\":18184083,\"US DVD Sales\":8283859,\"Production Budget\":20000000,\"Release Date\":\"Mar 27 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":108,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Renny Harlin\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":5.4,\"IMDB Votes\":8914},{\"Title\":\"Thirteen Conversations About One Thing\",\"US Gross\":3287435,\"Worldwide Gross\":3705923,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"May 24 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":6188},{\"Title\":\"13 Going On 30\",\"US Gross\":57139723,\"Worldwide Gross\":96439723,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Apr 23 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gary Winick\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":32634},{\"Title\":\"Thirteen Ghosts\",\"US Gross\":41867960,\"Worldwide Gross\":68467960,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Oct 26 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":91,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.1,\"IMDB Votes\":23243},{\"Title\":1408,\"US Gross\":71985628,\"Worldwide Gross\":128529299,\"US DVD Sales\":49668544,\"Production Budget\":22500000,\"Release Date\":\"Jun 22 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":102,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":6.9,\"IMDB Votes\":72913},{\"Title\":\"15 Minutes\",\"US Gross\":24375436,\"Worldwide Gross\":56331864,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Mar 09 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":6.1,\"IMDB Votes\":25566},{\"Title\":\"16 to Life\",\"US Gross\":10744,\"Worldwide Gross\":10744,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Sep 03 2010\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Waterdog Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"16 Blocks\",\"US Gross\":36895141,\"Worldwide Gross\":65595141,\"US DVD Sales\":17523555,\"Production Budget\":45000000,\"Release Date\":\"Mar 03 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Donner\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.7,\"IMDB Votes\":41207},{\"Title\":\"One Man's Hero\",\"US Gross\":229311,\"Worldwide Gross\":229311,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Sep 24 1999\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":627},{\"Title\":\"First Daughter\",\"US Gross\":9055010,\"Worldwide Gross\":10419084,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Sep 24 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Forest Whitaker\",\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":4.7,\"IMDB Votes\":6839},{\"Title\":2012,\"US Gross\":166112167,\"Worldwide Gross\":766812167,\"US DVD Sales\":50736023,\"Production Budget\":200000000,\"Release Date\":\"Nov 13 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":158,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Roland Emmerich\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.2,\"IMDB Votes\":396},{\"Title\":2046,\"US Gross\":1442338,\"Worldwide Gross\":19202856,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Aug 05 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Wong Kar-wai\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":19431},{\"Title\":\"20 Dates\",\"US Gross\":541636,\"Worldwide Gross\":541636,\"US DVD Sales\":null,\"Production Budget\":66000,\"Release Date\":\"Feb 26 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":1423},{\"Title\":21,\"US Gross\":81159365,\"Worldwide Gross\":157852532,\"US DVD Sales\":25789928,\"Production Budget\":35000000,\"Release Date\":\"Mar 21 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Luketic\",\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":6.7,\"IMDB Votes\":60918},{\"Title\":\"21 Grams\",\"US Gross\":16248701,\"Worldwide Gross\":60448701,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Nov 21 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alejandro Gonzalez Inarritu\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.9,\"IMDB Votes\":77910},{\"Title\":\"25th Hour\",\"US Gross\":13084595,\"Worldwide Gross\":23928503,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Dec 19 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7.9,\"IMDB Votes\":58781},{\"Title\":\"28 Days\",\"US Gross\":37035515,\"Worldwide Gross\":62063972,\"US DVD Sales\":null,\"Production Budget\":43000000,\"Release Date\":\"Apr 14 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":103,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Betty Thomas\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.8,\"IMDB Votes\":17937},{\"Title\":\"28 Days Later...\",\"US Gross\":45064915,\"Worldwide Gross\":82719885,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jun 27 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":113,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Danny Boyle\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.6,\"IMDB Votes\":103525},{\"Title\":\"28 Weeks Later\",\"US Gross\":28638916,\"Worldwide Gross\":64238440,\"US DVD Sales\":24422887,\"Production Budget\":15000000,\"Release Date\":\"May 11 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":91,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":69558},{\"Title\":\"Two Brothers\",\"US Gross\":18947630,\"Worldwide Gross\":39925603,\"US DVD Sales\":null,\"Production Budget\":72000000,\"Release Date\":\"Jun 25 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Jean-Jacques Annaud\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":6,\"IMDB Votes\":127},{\"Title\":\"Cop Out\",\"US Gross\":44875481,\"Worldwide Gross\":44875481,\"US DVD Sales\":11433110,\"Production Budget\":37000000,\"Release Date\":\"Feb 26 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin Smith\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5.7,\"IMDB Votes\":16520},{\"Title\":\"Two Lovers\",\"US Gross\":3149034,\"Worldwide Gross\":11549034,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Feb 13 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James Gray\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":10325},{\"Title\":\"2 For the Money\",\"US Gross\":22991379,\"Worldwide Gross\":27848418,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 07 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":123,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"D.J. Caruso\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Secondhand Lions\",\"US Gross\":42023715,\"Worldwide Gross\":47855342,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Sep 19 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":111,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":7.5,\"IMDB Votes\":19040},{\"Title\":\"Two Can Play That Game\",\"US Gross\":22235901,\"Worldwide Gross\":22391450,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Sep 07 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":91,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":5.6,\"IMDB Votes\":2370},{\"Title\":\"Two Weeks Notice\",\"US Gross\":93354918,\"Worldwide Gross\":199043309,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Dec 20 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":5.8,\"IMDB Votes\":35515},{\"Title\":300,\"US Gross\":210614939,\"Worldwide Gross\":456068181,\"US DVD Sales\":261252400,\"Production Budget\":60000000,\"Release Date\":\"Mar 09 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":117,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Zack Snyder\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":7.8,\"IMDB Votes\":235508},{\"Title\":\"30 Days of Night\",\"US Gross\":39568996,\"Worldwide Gross\":75066323,\"US DVD Sales\":26908243,\"Production Budget\":30000000,\"Release Date\":\"Oct 19 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":6.6,\"IMDB Votes\":52518},{\"Title\":\"Three Kings\",\"US Gross\":60652036,\"Worldwide Gross\":107752036,\"US DVD Sales\":null,\"Production Budget\":48000000,\"Release Date\":\"Oct 01 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":115,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"David O. Russell\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.3,\"IMDB Votes\":68726},{\"Title\":\"3000 Miles to Graceland\",\"US Gross\":15738632,\"Worldwide Gross\":18708848,\"US DVD Sales\":null,\"Production Budget\":62000000,\"Release Date\":\"Feb 23 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":5.6,\"IMDB Votes\":20094},{\"Title\":\"3 Strikes\",\"US Gross\":9821335,\"Worldwide Gross\":9821335,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Mar 01 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":2.9,\"IMDB Votes\":905},{\"Title\":\"3:10 to Yuma\",\"US Gross\":53606916,\"Worldwide Gross\":69791889,\"US DVD Sales\":51359371,\"Production Budget\":48000000,\"Release Date\":\"Sep 02 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":117,\"Distributor\":\"Lionsgate\",\"Source\":\"Remake\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"James Mangold\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.9,\"IMDB Votes\":98355},{\"Title\":\"40 Days and 40 Nights\",\"US Gross\":37939782,\"Worldwide Gross\":95092667,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Mar 01 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":96,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Lehmann\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.4,\"IMDB Votes\":27912},{\"Title\":\"The 40 Year-old Virgin\",\"US Gross\":109449237,\"Worldwide Gross\":177339049,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Aug 19 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":111,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Judd Apatow\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":94557},{\"Title\":\"Four Brothers\",\"US Gross\":74494381,\"Worldwide Gross\":92494381,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Aug 12 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Singleton\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":6.8,\"IMDB Votes\":38311},{\"Title\":\"Four Christmases\",\"US Gross\":120146040,\"Worldwide Gross\":163546040,\"US DVD Sales\":26029004,\"Production Budget\":80000000,\"Release Date\":\"Nov 26 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Seth Gordon\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":5.7,\"IMDB Votes\":14690},{\"Title\":\"The Four Feathers\",\"US Gross\":18306166,\"Worldwide Gross\":29882645,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Sep 20 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Shekhar Kapur\",\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":6.3,\"IMDB Votes\":13204},{\"Title\":\"The Fourth Kind\",\"US Gross\":26218170,\"Worldwide Gross\":41826604,\"US DVD Sales\":6244985,\"Production Budget\":10000000,\"Release Date\":\"Nov 06 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":6,\"IMDB Votes\":16107},{\"Title\":\"4 luni, 3 saptamani si 2 zile\",\"US Gross\":1196321,\"Worldwide Gross\":4723542,\"US DVD Sales\":null,\"Production Budget\":900000,\"Release Date\":\"Jan 25 2008\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"IFC Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"50 First Dates\",\"US Gross\":120776832,\"Worldwide Gross\":196376832,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Feb 13 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":99,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Segal\",\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6.8,\"IMDB Votes\":64701},{\"Title\":\"Six-String Samurai\",\"US Gross\":134624,\"Worldwide Gross\":134624,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Sep 18 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Palm Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.4,\"IMDB Votes\":3462},{\"Title\":\"The 6th Day\",\"US Gross\":34543701,\"Worldwide Gross\":96024898,\"US DVD Sales\":null,\"Production Budget\":82000000,\"Release Date\":\"Nov 17 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":123,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Roger Spottiswoode\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":5.8,\"IMDB Votes\":32606},{\"Title\":\"Seven Pounds\",\"US Gross\":69951824,\"Worldwide Gross\":166617328,\"US DVD Sales\":27601737,\"Production Budget\":54000000,\"Release Date\":\"Dec 19 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gabriele Muccino\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":7.6,\"IMDB Votes\":62718},{\"Title\":\"88 Minutes\",\"US Gross\":16930884,\"Worldwide Gross\":32955399,\"US DVD Sales\":11385055,\"Production Budget\":30000000,\"Release Date\":\"Apr 18 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":106,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jon Avnet\",\"Rotten Tomatoes Rating\":5,\"IMDB Rating\":5.9,\"IMDB Votes\":31205},{\"Title\":\"Eight Below\",\"US Gross\":81612565,\"Worldwide Gross\":120612565,\"US DVD Sales\":104578578,\"Production Budget\":40000000,\"Release Date\":\"Feb 17 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Frank Marshall\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":7.3,\"IMDB Votes\":17717},{\"Title\":\"Eight Legged Freaks\",\"US Gross\":17266505,\"Worldwide Gross\":17266505,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jul 17 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":5.4,\"IMDB Votes\":18173},{\"Title\":\"8 Mile\",\"US Gross\":116724075,\"Worldwide Gross\":242924075,\"US DVD Sales\":null,\"Production Budget\":41000000,\"Release Date\":\"Nov 08 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Curtis Hanson\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":6.7,\"IMDB Votes\":55877},{\"Title\":\"8 femmes\",\"US Gross\":3076425,\"Worldwide Gross\":42376425,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Sep 20 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Play\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":13631},{\"Title\":9,\"US Gross\":31749894,\"Worldwide Gross\":46603791,\"US DVD Sales\":8655698,\"Production Budget\":30000000,\"Release Date\":\"Sep 09 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Shane Acker\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":1488},{\"Title\":\"Nine Queens\",\"US Gross\":1222889,\"Worldwide Gross\":12412889,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Apr 19 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Whole Ten Yards\",\"US Gross\":16323969,\"Worldwide Gross\":26323969,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Apr 09 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Howard Deutch\",\"Rotten Tomatoes Rating\":4,\"IMDB Rating\":5.1,\"IMDB Votes\":20807},{\"Title\":\"The Whole Nine Yards\",\"US Gross\":57262492,\"Worldwide Gross\":85262492,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Feb 18 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":99,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":6.6,\"IMDB Votes\":42928},{\"Title\":\"About a Boy\",\"US Gross\":40803000,\"Worldwide Gross\":129949664,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"May 17 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul Weitz\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":7.4,\"IMDB Votes\":48875},{\"Title\":\"A Bug's Life\",\"US Gross\":162798565,\"Worldwide Gross\":363109485,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Nov 20 1998\",\"MPAA Rating\":\"G\",\"Running Time min\":96,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"John Lasseter\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7.3,\"IMDB Votes\":56866},{\"Title\":\"Abandon\",\"US Gross\":10719367,\"Worldwide Gross\":12219367,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Oct 18 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":4.8,\"IMDB Votes\":5361},{\"Title\":\"Absolute Power\",\"US Gross\":50068310,\"Worldwide Gross\":50068310,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Feb 14 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Clint Eastwood\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.5,\"IMDB Votes\":20154},{\"Title\":\"Tristram Shandy: A Cock and Bull Story\",\"US Gross\":1253413,\"Worldwide Gross\":3061763,\"US DVD Sales\":null,\"Production Budget\":4750000,\"Release Date\":\"Jan 27 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Picturehouse\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Winterbottom\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Adoration\",\"US Gross\":294244,\"Worldwide Gross\":294244,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"May 08 2009\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Atom Egoyan\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":1437},{\"Title\":\"Adaptation\",\"US Gross\":22498520,\"Worldwide Gross\":22498520,\"US DVD Sales\":null,\"Production Budget\":18500000,\"Release Date\":\"Dec 06 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Spike Jonze\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7.9,\"IMDB Votes\":67135},{\"Title\":\"Anything Else\",\"US Gross\":3203044,\"Worldwide Gross\":13203044,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Sep 19 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.4,\"IMDB Votes\":13010},{\"Title\":\"Antwone Fisher\",\"US Gross\":21078145,\"Worldwide Gross\":23367586,\"US DVD Sales\":null,\"Production Budget\":12500000,\"Release Date\":\"Dec 19 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Denzel Washington\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":7.3,\"IMDB Votes\":13258},{\"Title\":\"Aeon Flux\",\"US Gross\":25857987,\"Worldwide Gross\":47953341,\"US DVD Sales\":21927972,\"Production Budget\":55000000,\"Release Date\":\"Dec 02 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":88,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":8.1,\"IMDB Votes\":1193},{\"Title\":\"After the Sunset\",\"US Gross\":28328132,\"Worldwide Gross\":38329114,\"US DVD Sales\":null,\"Production Budget\":57000000,\"Release Date\":\"Nov 12 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brett Ratner\",\"Rotten Tomatoes Rating\":18,\"IMDB Rating\":6.2,\"IMDB Votes\":19793},{\"Title\":\"A Good Year\",\"US Gross\":7459300,\"Worldwide Gross\":42064105,\"US DVD Sales\":7342760,\"Production Budget\":35000000,\"Release Date\":\"Nov 10 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":118,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":6.8,\"IMDB Votes\":23149},{\"Title\":\"Agora\",\"US Gross\":599903,\"Worldwide Gross\":32912303,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"May 28 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":141,\"Distributor\":\"Newmarket Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":10054},{\"Title\":\"Air Bud\",\"US Gross\":24646936,\"Worldwide Gross\":27555061,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Aug 01 1997\",\"MPAA Rating\":\"PG\",\"Running Time min\":97,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Charles Martin Smith\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":4.6,\"IMDB Votes\":4698},{\"Title\":\"Air Force One\",\"US Gross\":172956409,\"Worldwide Gross\":315268353,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Jul 25 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":124,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wolfgang Petersen\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":6.3,\"IMDB Votes\":61394},{\"Title\":\"Akeelah and the Bee\",\"US Gross\":18848430,\"Worldwide Gross\":18948425,\"US DVD Sales\":25684049,\"Production Budget\":8000000,\"Release Date\":\"Apr 28 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.6,\"IMDB Votes\":8245},{\"Title\":\"All the King's Men\",\"US Gross\":7221458,\"Worldwide Gross\":9521458,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Sep 22 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":128,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Steven Zaillian\",\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":6,\"IMDB Votes\":11994},{\"Title\":\"The Alamo\",\"US Gross\":22406362,\"Worldwide Gross\":23911362,\"US DVD Sales\":null,\"Production Budget\":92000000,\"Release Date\":\"Apr 09 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":137,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Western\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.9,\"IMDB Votes\":10063},{\"Title\":\"All About the Benjamins\",\"US Gross\":25482931,\"Worldwide Gross\":25873145,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Mar 08 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":95,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin Bray\",\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":5.3,\"IMDB Votes\":4366},{\"Title\":\"Albino Alligator\",\"US Gross\":353480,\"Worldwide Gross\":353480,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Jan 17 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Kevin Spacey\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":4377},{\"Title\":\"Sweet Home Alabama\",\"US Gross\":127214072,\"Worldwide Gross\":163379330,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Sep 27 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":109,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andy Tennant\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":5.8,\"IMDB Votes\":29891},{\"Title\":\"Fat Albert\",\"US Gross\":48114556,\"Worldwide Gross\":48563556,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Dec 25 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":93,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Zwick\",\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":4,\"IMDB Votes\":4801},{\"Title\":\"Alice in Wonderland\",\"US Gross\":334191110,\"Worldwide Gross\":1023291110,\"US DVD Sales\":70909558,\"Production Budget\":200000000,\"Release Date\":\"Mar 05 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Tim Burton\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":6.7,\"IMDB Votes\":63458},{\"Title\":\"Alfie\",\"US Gross\":13395939,\"Worldwide Gross\":35195939,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Nov 05 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Charles Shyer\",\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":6.1,\"IMDB Votes\":20769},{\"Title\":\"It's All Gone Pete Tong\",\"US Gross\":120620,\"Worldwide Gross\":1470620,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Apr 15 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Matson\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":7631},{\"Title\":\"Ali\",\"US Gross\":58183966,\"Worldwide Gross\":84383966,\"US DVD Sales\":null,\"Production Budget\":109000000,\"Release Date\":\"Dec 25 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":159,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Michael Mann\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.6,\"IMDB Votes\":31785},{\"Title\":\"Alien: Resurrection\",\"US Gross\":47795018,\"Worldwide Gross\":160700000,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Nov 26 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Jean-Pierre Jeunet\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":66141},{\"Title\":\"Alien\",\"US Gross\":80930630,\"Worldwide Gross\":203630630,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"May 25 1979\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.5,\"IMDB Votes\":180387},{\"Title\":\"A Lot Like Love\",\"US Gross\":21835784,\"Worldwide Gross\":47835784,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Apr 22 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":6.4,\"IMDB Votes\":17929},{\"Title\":\"All the Pretty Horses\",\"US Gross\":15527125,\"Worldwide Gross\":18120267,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Dec 25 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Billy Bob Thornton\",\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":5.7,\"IMDB Votes\":6511},{\"Title\":\"Almost Famous\",\"US Gross\":32522352,\"Worldwide Gross\":47371191,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Sep 15 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":123,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Dramatization\",\"Director\":\"Cameron Crowe\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":8,\"IMDB Votes\":94424},{\"Title\":\"Evan Almighty\",\"US Gross\":100289690,\"Worldwide Gross\":173219280,\"US DVD Sales\":38038256,\"Production Budget\":175000000,\"Release Date\":\"Jun 22 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":78,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Tom Shadyac\",\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":5.5,\"IMDB Votes\":43164},{\"Title\":\"Bruce Almighty\",\"US Gross\":242704995,\"Worldwide Gross\":485004995,\"US DVD Sales\":null,\"Production Budget\":81000000,\"Release Date\":\"May 23 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Tom Shadyac\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.6,\"IMDB Votes\":92494},{\"Title\":\"All or Nothing\",\"US Gross\":184255,\"Worldwide Gross\":184255,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Oct 25 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Mike Leigh\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Alone in the Dark\",\"US Gross\":5178569,\"Worldwide Gross\":8178569,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Jan 28 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":96,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Game\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Uwe Boll\",\"Rotten Tomatoes Rating\":1,\"IMDB Rating\":2.3,\"IMDB Votes\":26028},{\"Title\":\"Alpha and Omega 3D\",\"US Gross\":10115431,\"Worldwide Gross\":10115431,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Sep 17 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":83},{\"Title\":\"Along Came a Spider\",\"US Gross\":74058698,\"Worldwide Gross\":105159085,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Apr 06 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":103,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Lee Tamahori\",\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":6.1,\"IMDB Votes\":22994},{\"Title\":\"The Dangerous Lives of Altar Boys\",\"US Gross\":1779284,\"Worldwide Gross\":1779284,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jun 14 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":6.9,\"IMDB Votes\":7943},{\"Title\":\"Alatriste\",\"US Gross\":0,\"Worldwide Gross\":22860477,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Dec 31 2007\",\"MPAA Rating\":null,\"Running Time min\":135,\"Distributor\":null,\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":4944},{\"Title\":\"Alvin and the Chipmunks\",\"US Gross\":217326974,\"Worldwide Gross\":360578644,\"US DVD Sales\":137516182,\"Production Budget\":55000000,\"Release Date\":\"Dec 14 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":92,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Tim Hill\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":5.5,\"IMDB Votes\":19200},{\"Title\":\"Alex & Emma\",\"US Gross\":14208384,\"Worldwide Gross\":15358583,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jun 20 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rob Reiner\",\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":5.4,\"IMDB Votes\":6539},{\"Title\":\"Alexander\",\"US Gross\":34297191,\"Worldwide Gross\":167297191,\"US DVD Sales\":null,\"Production Budget\":155000000,\"Release Date\":\"Nov 24 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":175,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Dramatization\",\"Director\":\"Oliver Stone\",\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":5.4,\"IMDB Votes\":59498},{\"Title\":\"El Crimen de Padre\",\"US Gross\":5719000,\"Worldwide Gross\":5719000,\"US DVD Sales\":null,\"Production Budget\":1800000,\"Release Date\":\"Nov 15 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Goldwyn Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"American Beauty\",\"US Gross\":130058047,\"Worldwide Gross\":356258047,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Sep 15 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":118,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sam Mendes\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":8.6,\"IMDB Votes\":292562},{\"Title\":\"An American Carol\",\"US Gross\":7013191,\"Worldwide Gross\":7013191,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 03 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":84,\"Distributor\":\"Vivendi Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"David Zucker\",\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":4.5,\"IMDB Votes\":6000},{\"Title\":\"American Dreamz\",\"US Gross\":7314027,\"Worldwide Gross\":16510971,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Apr 21 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul Weitz\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":5.7,\"IMDB Votes\":15097},{\"Title\":\"Amelia\",\"US Gross\":14246488,\"Worldwide Gross\":19722782,\"US DVD Sales\":5763807,\"Production Budget\":40000000,\"Release Date\":\"Oct 23 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Mira Nair\",\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":5.7,\"IMDB Votes\":3238},{\"Title\":\"Le Fabuleux destin d'AmÈlie Poulain\",\"US Gross\":33201661,\"Worldwide Gross\":174201661,\"US DVD Sales\":null,\"Production Budget\":10350000,\"Release Date\":\"Nov 02 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":122,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jean-Pierre Jeunet\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.5,\"IMDB Votes\":181085},{\"Title\":\"American History X\",\"US Gross\":6719864,\"Worldwide Gross\":6719864,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 30 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":8.6,\"IMDB Votes\":224857},{\"Title\":\"American Gangster\",\"US Gross\":130164645,\"Worldwide Gross\":265697825,\"US DVD Sales\":72653959,\"Production Budget\":100000000,\"Release Date\":\"Nov 02 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":157,\"Distributor\":\"Universal\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":7.9,\"IMDB Votes\":114060},{\"Title\":\"An American Haunting\",\"US Gross\":16298046,\"Worldwide Gross\":27844063,\"US DVD Sales\":9905802,\"Production Budget\":14000000,\"Release Date\":\"May 05 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Freestyle Releasing\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":4.9,\"IMDB Votes\":13510},{\"Title\":\"Amistad\",\"US Gross\":44212592,\"Worldwide Gross\":44212592,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Dec 12 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":152,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7.1,\"IMDB Votes\":28477},{\"Title\":\"AimÈe & Jaguar\",\"US Gross\":927107,\"Worldwide Gross\":927107,\"US DVD Sales\":null,\"Production Budget\":6800000,\"Release Date\":\"Aug 11 2000\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Zeitgeist\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":2974},{\"Title\":\"Amores Perros\",\"US Gross\":5383834,\"Worldwide Gross\":20883834,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Mar 30 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alejandro Gonzalez Inarritu\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.1,\"IMDB Votes\":61083},{\"Title\":\"American Pie 2\",\"US Gross\":145096820,\"Worldwide Gross\":286500000,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Aug 10 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":105,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":6.2,\"IMDB Votes\":66751},{\"Title\":\"American Wedding\",\"US Gross\":104354205,\"Worldwide Gross\":126425115,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Aug 01 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":96,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":6.1,\"IMDB Votes\":52210},{\"Title\":\"American Pie\",\"US Gross\":101800948,\"Worldwide Gross\":234800000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jul 09 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":95,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul Weitz\",\"Rotten Tomatoes Rating\":59,\"IMDB Rating\":6.9,\"IMDB Votes\":106624},{\"Title\":\"American Psycho\",\"US Gross\":15070285,\"Worldwide Gross\":28674417,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Apr 14 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Mary Harron\",\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":7.4,\"IMDB Votes\":99424},{\"Title\":\"American Splendor\",\"US Gross\":6003587,\"Worldwide Gross\":7978681,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Aug 15 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.6,\"IMDB Votes\":23686},{\"Title\":\"America's Sweethearts\",\"US Gross\":93607673,\"Worldwide Gross\":157627733,\"US DVD Sales\":null,\"Production Budget\":46000000,\"Release Date\":\"Jul 20 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":103,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":5.7,\"IMDB Votes\":26899},{\"Title\":\"The Amityville Horror\",\"US Gross\":65233369,\"Worldwide Gross\":108047131,\"US DVD Sales\":null,\"Production Budget\":18500000,\"Release Date\":\"Apr 15 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":89,\"Distributor\":\"MGM\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":5.8,\"IMDB Votes\":26303},{\"Title\":\"Anacondas: The Hunt for the Blood Orchid\",\"US Gross\":31526393,\"Worldwide Gross\":70326393,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Aug 27 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Dwight H. Little\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.3,\"IMDB Votes\":9565},{\"Title\":\"Anaconda\",\"US Gross\":65598907,\"Worldwide Gross\":136998907,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Apr 11 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":89,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":4.2,\"IMDB Votes\":29430},{\"Title\":\"Anastasia\",\"US Gross\":58403409,\"Worldwide Gross\":139801410,\"US DVD Sales\":null,\"Production Budget\":53000000,\"Release Date\":\"Nov 14 1997\",\"MPAA Rating\":\"G\",\"Running Time min\":94,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Factual\",\"Director\":\"Don Bluth\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":6.6,\"IMDB Votes\":16513},{\"Title\":\"Anchorman: The Legend of Ron Burgundy\",\"US Gross\":84136909,\"Worldwide Gross\":89366354,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jul 09 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":104,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Adam McKay\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":78249},{\"Title\":\"Angels & Demons\",\"US Gross\":133375846,\"Worldwide Gross\":485975846,\"US DVD Sales\":32746864,\"Production Budget\":150000000,\"Release Date\":\"May 15 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ron Howard\",\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":6.7,\"IMDB Votes\":60114},{\"Title\":\"Angela's Ashes\",\"US Gross\":13038660,\"Worldwide Gross\":13038660,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Dec 24 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Alan Parker\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":7,\"IMDB Votes\":10185},{\"Title\":\"Angel Eyes\",\"US Gross\":24044532,\"Worldwide Gross\":24044532,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"May 18 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":103,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":5.5,\"IMDB Votes\":11089},{\"Title\":\"Anger Management\",\"US Gross\":135560942,\"Worldwide Gross\":195660942,\"US DVD Sales\":null,\"Production Budget\":56000000,\"Release Date\":\"Apr 11 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Segal\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":6.1,\"IMDB Votes\":57088},{\"Title\":\"A Night at the Roxbury\",\"US Gross\":30331165,\"Worldwide Gross\":30331165,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Oct 02 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":81,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":5.7,\"IMDB Votes\":23259},{\"Title\":\"The Animal\",\"US Gross\":55762229,\"Worldwide Gross\":55762229,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Jun 01 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":83,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Luke Greenfield\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":4.6,\"IMDB Votes\":18601},{\"Title\":\"Anna and the King\",\"US Gross\":39251128,\"Worldwide Gross\":39251128,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Dec 17 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":147,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Andy Tennant\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":6.5,\"IMDB Votes\":14881},{\"Title\":\"Analyze That\",\"US Gross\":32122249,\"Worldwide Gross\":54994757,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Dec 06 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":96,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Harold Ramis\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":5.6,\"IMDB Votes\":24090},{\"Title\":\"Analyze This\",\"US Gross\":106885658,\"Worldwide Gross\":176885658,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Mar 05 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":103,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Harold Ramis\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":6.6,\"IMDB Votes\":52894},{\"Title\":\"The Ant Bully\",\"US Gross\":28142535,\"Worldwide Gross\":55181129,\"US DVD Sales\":28562108,\"Production Budget\":45000000,\"Release Date\":\"Jul 28 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.2,\"IMDB Votes\":7766},{\"Title\":\"Antitrust\",\"US Gross\":10965209,\"Worldwide Gross\":10965209,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jan 12 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":6,\"IMDB Votes\":16263},{\"Title\":\"Marie Antoinette\",\"US Gross\":15962471,\"Worldwide Gross\":60862471,\"US DVD Sales\":16636006,\"Production Budget\":40000000,\"Release Date\":\"Oct 20 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Sofia Coppola\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.4,\"IMDB Votes\":31877},{\"Title\":\"Antz\",\"US Gross\":90757863,\"Worldwide Gross\":152457863,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Oct 02 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":83,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Tim Johnson\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":6.8,\"IMDB Votes\":37343},{\"Title\":\"Anywhere But Here\",\"US Gross\":18653615,\"Worldwide Gross\":18653615,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Nov 12 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":114,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wayne Wang\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":5.9,\"IMDB Votes\":8514},{\"Title\":\"Appaloosa\",\"US Gross\":20211394,\"Worldwide Gross\":26111394,\"US DVD Sales\":10698987,\"Production Budget\":20000000,\"Release Date\":\"Sep 19 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Ed Harris\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":6.8,\"IMDB Votes\":22836},{\"Title\":\"Apocalypto\",\"US Gross\":50866635,\"Worldwide Gross\":117785051,\"US DVD Sales\":43318599,\"Production Budget\":40000000,\"Release Date\":\"Dec 08 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":136,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Mel Gibson\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":7.9,\"IMDB Votes\":82162},{\"Title\":\"Pieces of April\",\"US Gross\":2528664,\"Worldwide Gross\":3284124,\"US DVD Sales\":null,\"Production Budget\":300000,\"Release Date\":\"Oct 17 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":7.2,\"IMDB Votes\":12153},{\"Title\":\"The Apostle\",\"US Gross\":20733485,\"Worldwide Gross\":21277770,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Dec 17 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":148,\"Distributor\":\"October Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Duvall\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7.1,\"IMDB Votes\":7757},{\"Title\":\"Aquamarine\",\"US Gross\":18597342,\"Worldwide Gross\":22978953,\"US DVD Sales\":29637202,\"Production Budget\":17000000,\"Release Date\":\"Mar 03 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":4.6,\"IMDB Votes\":9116},{\"Title\":\"Ararat\",\"US Gross\":1693000,\"Worldwide Gross\":1693000,\"US DVD Sales\":null,\"Production Budget\":15500000,\"Release Date\":\"Nov 15 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Atom Egoyan\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":6.6,\"IMDB Votes\":6763},{\"Title\":\"Are We There Yet?\",\"US Gross\":82674398,\"Worldwide Gross\":97918663,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Jan 21 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":94,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Brian Levant\",\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":4.2,\"IMDB Votes\":8740},{\"Title\":\"Arlington Road\",\"US Gross\":24419219,\"Worldwide Gross\":24419219,\"US DVD Sales\":null,\"Production Budget\":21500000,\"Release Date\":\"Jul 09 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":117,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":7.2,\"IMDB Votes\":36051},{\"Title\":\"Armageddon\",\"US Gross\":201578182,\"Worldwide Gross\":554600000,\"US DVD Sales\":null,\"Production Budget\":140000000,\"Release Date\":\"Jul 01 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":150,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Bay\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":6.1,\"IMDB Votes\":194},{\"Title\":\"Hey Arnold! The Movie\",\"US Gross\":13684949,\"Worldwide Gross\":13684949,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jun 28 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.3,\"IMDB Votes\":1629},{\"Title\":\"Against the Ropes\",\"US Gross\":5881504,\"Worldwide Gross\":6429865,\"US DVD Sales\":null,\"Production Budget\":39000000,\"Release Date\":\"Feb 20 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Charles S. Dutton\",\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":5.2,\"IMDB Votes\":3547},{\"Title\":\"King Arthur\",\"US Gross\":51877963,\"Worldwide Gross\":203877963,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Jul 07 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":126,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Antoine Fuqua\",\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":6.2,\"IMDB Votes\":53106},{\"Title\":\"Arthur et les Minimoys\",\"US Gross\":15132763,\"Worldwide Gross\":110102340,\"US DVD Sales\":13012362,\"Production Budget\":80000000,\"Release Date\":\"Dec 15 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":122,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Luc Besson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":7626},{\"Title\":\"Artificial Intelligence: AI\",\"US Gross\":78616689,\"Worldwide Gross\":235900000,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Jun 29 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":146,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":91901},{\"Title\":\"The Art of War\",\"US Gross\":30199105,\"Worldwide Gross\":30199105,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Aug 25 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":117,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Christian Duguay\",\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":5.5,\"IMDB Votes\":12484},{\"Title\":\"Astro Boy\",\"US Gross\":19551067,\"Worldwide Gross\":44093014,\"US DVD Sales\":7166365,\"Production Budget\":65000000,\"Release Date\":\"Oct 23 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":94,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":\"David Bowers\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":5265},{\"Title\":\"A Serious Man\",\"US Gross\":9228788,\"Worldwide Gross\":30710147,\"US DVD Sales\":3614635,\"Production Budget\":7000000,\"Release Date\":\"Oct 02 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Joel Coen\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.2,\"IMDB Votes\":32396},{\"Title\":\"The Astronaut Farmer\",\"US Gross\":11003643,\"Worldwide Gross\":11003643,\"US DVD Sales\":13774930,\"Production Budget\":13000000,\"Release Date\":\"Feb 23 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":109,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Polish\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":10506},{\"Title\":\"As Good as it Gets\",\"US Gross\":148478011,\"Worldwide Gross\":314111923,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Dec 24 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":138,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James L. Brooks\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":7.8,\"IMDB Votes\":92240},{\"Title\":\"A Single Man\",\"US Gross\":9176000,\"Worldwide Gross\":19112672,\"US DVD Sales\":2010869,\"Production Budget\":7000000,\"Release Date\":\"Dec 11 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":7.6,\"IMDB Votes\":14548},{\"Title\":\"A Simple Plan\",\"US Gross\":16316273,\"Worldwide Gross\":16316273,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Dec 11 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sam Raimi\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.6,\"IMDB Votes\":29095},{\"Title\":\"Assault On Precinct 13\",\"US Gross\":20040895,\"Worldwide Gross\":36040895,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jan 19 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus/Rogue Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":7.4,\"IMDB Votes\":13456},{\"Title\":\"The Astronaut's Wife\",\"US Gross\":10672566,\"Worldwide Gross\":10672566,\"US DVD Sales\":null,\"Production Budget\":34000000,\"Release Date\":\"Aug 27 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":4.9,\"IMDB Votes\":20259},{\"Title\":\"The A-Team\",\"US Gross\":77222099,\"Worldwide Gross\":176047914,\"US DVD Sales\":null,\"Production Budget\":110000000,\"Release Date\":\"Jun 11 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":119,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":\"Joe Carnahan\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":7.2,\"IMDB Votes\":29886},{\"Title\":\"At First Sight\",\"US Gross\":22365133,\"Worldwide Gross\":22365133,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jan 15 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":128,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.6,\"IMDB Votes\":6872},{\"Title\":\"Aqua Teen Hunger Force: The Movie\",\"US Gross\":5520368,\"Worldwide Gross\":5520368,\"US DVD Sales\":12134593,\"Production Budget\":750000,\"Release Date\":\"Apr 13 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"First Look\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"ATL\",\"US Gross\":21170563,\"Worldwide Gross\":21170563,\"US DVD Sales\":29368071,\"Production Budget\":17000000,\"Release Date\":\"Mar 31 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":4.7,\"IMDB Votes\":5480},{\"Title\":\"Atlantis: The Lost Empire\",\"US Gross\":84052762,\"Worldwide Gross\":186049020,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Jun 08 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":96,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Gary Trousdale\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":15552},{\"Title\":\"Hearts in Atlantis\",\"US Gross\":24185781,\"Worldwide Gross\":30885781,\"US DVD Sales\":null,\"Production Budget\":31000000,\"Release Date\":\"Sep 28 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":6.8,\"IMDB Votes\":16336},{\"Title\":\"Autumn in New York\",\"US Gross\":37752931,\"Worldwide Gross\":90717684,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Aug 11 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joan Chen\",\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":4.8,\"IMDB Votes\":9309},{\"Title\":\"Atonement\",\"US Gross\":50980159,\"Worldwide Gross\":129425746,\"US DVD Sales\":15678677,\"Production Budget\":30000000,\"Release Date\":\"Dec 07 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":130,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joe Wright\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.9,\"IMDB Votes\":75491},{\"Title\":\"The Rules of Attraction\",\"US Gross\":6525762,\"Worldwide Gross\":11799060,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Oct 11 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6.7,\"IMDB Votes\":26634},{\"Title\":\"August Rush\",\"US Gross\":31664162,\"Worldwide Gross\":65627510,\"US DVD Sales\":22082092,\"Production Budget\":25000000,\"Release Date\":\"Nov 17 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":113,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":7.5,\"IMDB Votes\":28650},{\"Title\":\"Across the Universe\",\"US Gross\":24343673,\"Worldwide Gross\":29367143,\"US DVD Sales\":25759408,\"Production Budget\":45000000,\"Release Date\":\"Sep 14 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":133,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":7.5,\"IMDB Votes\":45611},{\"Title\":\"Austin Powers: The Spy Who Shagged Me\",\"US Gross\":206040085,\"Worldwide Gross\":309600000,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Jun 10 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Jay Roach\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":81005},{\"Title\":\"Austin Powers in Goldmember\",\"US Gross\":213117789,\"Worldwide Gross\":292738626,\"US DVD Sales\":null,\"Production Budget\":63000000,\"Release Date\":\"Jul 25 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":94,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Jay Roach\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6.2,\"IMDB Votes\":69140},{\"Title\":\"Austin Powers: International Man of Mystery\",\"US Gross\":53883989,\"Worldwide Gross\":67683989,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"May 02 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":89,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jay Roach\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":74487},{\"Title\":\"Australia\",\"US Gross\":49551662,\"Worldwide Gross\":207482792,\"US DVD Sales\":28789275,\"Production Budget\":78000000,\"Release Date\":\"Nov 26 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Baz Luhrmann\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6.8,\"IMDB Votes\":38089},{\"Title\":\"Auto Focus\",\"US Gross\":2062066,\"Worldwide Gross\":2703821,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Oct 18 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Paul Schrader\",\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":6.6,\"IMDB Votes\":7236},{\"Title\":\"Avatar\",\"US Gross\":760167650,\"Worldwide Gross\":2767891499,\"US DVD Sales\":146153933,\"Production Budget\":237000000,\"Release Date\":\"Dec 18 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"James Cameron\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":8.3,\"IMDB Votes\":261439},{\"Title\":\"The Avengers\",\"US Gross\":23385416,\"Worldwide Gross\":48585416,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Aug 14 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":91,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":3.4,\"IMDB Votes\":21432},{\"Title\":\"The Aviator\",\"US Gross\":102608827,\"Worldwide Gross\":214608827,\"US DVD Sales\":null,\"Production Budget\":110000000,\"Release Date\":\"Dec 17 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":170,\"Distributor\":\"Miramax\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.6,\"IMDB Votes\":85740},{\"Title\":\"AVP: Alien Vs. Predator\",\"US Gross\":80281096,\"Worldwide Gross\":172543519,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Aug 13 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"20th Century Fox\",\"Source\":\"Spin-Off\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Paul Anderson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.4,\"IMDB Votes\":63019},{\"Title\":\"Around the World in 80 Days\",\"US Gross\":24004159,\"Worldwide Gross\":72004159,\"US DVD Sales\":null,\"Production Budget\":110000000,\"Release Date\":\"Jun 16 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":120,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Frank Coraci\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.6,\"IMDB Votes\":21516},{\"Title\":\"Awake\",\"US Gross\":14373825,\"Worldwide Gross\":30757745,\"US DVD Sales\":13038208,\"Production Budget\":8600000,\"Release Date\":\"Nov 30 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":6.5,\"IMDB Votes\":26076},{\"Title\":\"And When Did You Last See Your Father?\",\"US Gross\":1071240,\"Worldwide Gross\":2476491,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Jun 06 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":1798},{\"Title\":\"Away We Go\",\"US Gross\":9451946,\"Worldwide Gross\":10108016,\"US DVD Sales\":3788940,\"Production Budget\":21000000,\"Release Date\":\"Jun 05 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":98,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sam Mendes\",\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":7.3,\"IMDB Votes\":14929},{\"Title\":\"Don't Say a Word\",\"US Gross\":54997476,\"Worldwide Gross\":104488383,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Sep 28 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":113,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":6.1,\"IMDB Votes\":22157},{\"Title\":\"Babe: Pig in the City\",\"US Gross\":18319860,\"Worldwide Gross\":69131860,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Nov 25 1998\",\"MPAA Rating\":\"G\",\"Running Time min\":75,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"George Miller\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6.1,\"IMDB Votes\":9918},{\"Title\":\"Babel\",\"US Gross\":34302837,\"Worldwide Gross\":135302837,\"US DVD Sales\":31459208,\"Production Budget\":20000000,\"Release Date\":\"Oct 27 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alejandro Gonzalez Inarritu\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":7.6,\"IMDB Votes\":95122},{\"Title\":\"Babylon A.D.\",\"US Gross\":22532572,\"Worldwide Gross\":70216497,\"US DVD Sales\":16787309,\"Production Budget\":45000000,\"Release Date\":\"Aug 29 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":100,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Mathieu Kassovitz\",\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":5.3,\"IMDB Votes\":27189},{\"Title\":\"My Baby's Daddy\",\"US Gross\":17321573,\"Worldwide Gross\":17322212,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jan 09 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4,\"IMDB Votes\":2010},{\"Title\":\"Super Babies: Baby Geniuses 2\",\"US Gross\":9109322,\"Worldwide Gross\":9109322,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Aug 27 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":1.4,\"IMDB Votes\":10886},{\"Title\":\"Baby Geniuses\",\"US Gross\":27151490,\"Worldwide Gross\":27151490,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Mar 12 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":94,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":2,\"IMDB Rating\":2.2,\"IMDB Votes\":9038},{\"Title\":\"Bad Boys II\",\"US Gross\":138540870,\"Worldwide Gross\":272940870,\"US DVD Sales\":null,\"Production Budget\":130000000,\"Release Date\":\"Jul 18 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":147,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Bay\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":6.2,\"IMDB Votes\":58002},{\"Title\":\"Bad Company\",\"US Gross\":30157016,\"Worldwide Gross\":69157016,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Jun 07 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":117,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Schumacher\",\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":5.3,\"IMDB Votes\":17901},{\"Title\":\"La mala educaciÛn\",\"US Gross\":5211842,\"Worldwide Gross\":40311842,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Nov 19 2004\",\"MPAA Rating\":\"NC-17\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Pedro Almodovar\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":21756},{\"Title\":\"Bad Lieutenant: Port of Call New Orleans\",\"US Gross\":1702112,\"Worldwide Gross\":8162545,\"US DVD Sales\":3902817,\"Production Budget\":25000000,\"Release Date\":\"Nov 20 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"First Look\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Werner Herzog\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Bad News Bears\",\"US Gross\":32868349,\"Worldwide Gross\":33500620,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Jul 22 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Linklater\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":7749},{\"Title\":\"Burn After Reading\",\"US Gross\":60355347,\"Worldwide Gross\":163415735,\"US DVD Sales\":19163475,\"Production Budget\":37000000,\"Release Date\":\"Sep 12 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Coen\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7.2,\"IMDB Votes\":92553},{\"Title\":\"Bait\",\"US Gross\":15325127,\"Worldwide Gross\":15471969,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Sep 15 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Antoine Fuqua\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.6,\"IMDB Votes\":5143},{\"Title\":\"Boys and Girls\",\"US Gross\":21799652,\"Worldwide Gross\":21799652,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Jun 16 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":94,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":4.9,\"IMDB Votes\":7779},{\"Title\":\"Black and White\",\"US Gross\":5241315,\"Worldwide Gross\":5241315,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Apr 05 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James Toback\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":452},{\"Title\":\"Bangkok Dangerous\",\"US Gross\":15298133,\"Worldwide Gross\":46598133,\"US DVD Sales\":15494886,\"Production Budget\":45000000,\"Release Date\":\"Sep 05 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":98,\"Distributor\":\"Lionsgate\",\"Source\":\"Remake\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Oxide Pang Chun\",\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":5.4,\"IMDB Votes\":20931},{\"Title\":\"The Banger Sisters\",\"US Gross\":30306281,\"Worldwide Gross\":38067218,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Sep 20 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":98,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":5.5,\"IMDB Votes\":7435},{\"Title\":\"Les invasions barbares\",\"US Gross\":8460000,\"Worldwide Gross\":8460000,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"May 09 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":14322},{\"Title\":\"Barney's Great Adventure\",\"US Gross\":11156471,\"Worldwide Gross\":11156471,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Apr 03 1998\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Polygram\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":2.1,\"IMDB Votes\":1456},{\"Title\":\"Basic Instinct 2\",\"US Gross\":5946136,\"Worldwide Gross\":35417162,\"US DVD Sales\":6188980,\"Production Budget\":70000000,\"Release Date\":\"Mar 31 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Caton-Jones\",\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":3.9,\"IMDB Votes\":16784},{\"Title\":\"Basic\",\"US Gross\":26599248,\"Worldwide Gross\":42598498,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Mar 28 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":98,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John McTiernan\",\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":6.3,\"IMDB Votes\":25960},{\"Title\":\"Batman Begins\",\"US Gross\":205343774,\"Worldwide Gross\":372353017,\"US DVD Sales\":null,\"Production Budget\":150000000,\"Release Date\":\"Jun 15 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":140,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Christopher Nolan\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":8.3,\"IMDB Votes\":270641},{\"Title\":\"Battlefield Earth: A Saga of the Year 3000\",\"US Gross\":21471685,\"Worldwide Gross\":29725663,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"May 12 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":121,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":2.3,\"IMDB Votes\":39316},{\"Title\":\"The Dark Knight\",\"US Gross\":533345358,\"Worldwide Gross\":1022345358,\"US DVD Sales\":234119058,\"Production Budget\":185000000,\"Release Date\":\"Jul 18 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":152,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Christopher Nolan\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":8.9,\"IMDB Votes\":465000},{\"Title\":\"Bats\",\"US Gross\":10155691,\"Worldwide Gross\":10155691,\"US DVD Sales\":null,\"Production Budget\":6500000,\"Release Date\":\"Oct 22 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":3.3,\"IMDB Votes\":5565},{\"Title\":\"The Battle of Shaker Heights\",\"US Gross\":280351,\"Worldwide Gross\":280351,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Aug 22 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":6.1,\"IMDB Votes\":2524},{\"Title\":\"Baby Boy\",\"US Gross\":28734552,\"Worldwide Gross\":28734552,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Jun 27 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":130,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Singleton\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":6.1,\"IMDB Votes\":4485},{\"Title\":\"The Curious Case of Benjamin Button\",\"US Gross\":127509326,\"Worldwide Gross\":329809326,\"US DVD Sales\":42850598,\"Production Budget\":160000000,\"Release Date\":\"Dec 25 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":167,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"David Fincher\",\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":8,\"IMDB Votes\":137120},{\"Title\":\"Baby Mama\",\"US Gross\":60494212,\"Worldwide Gross\":64391484,\"US DVD Sales\":24304275,\"Production Budget\":null,\"Release Date\":\"Apr 25 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":99,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.1,\"IMDB Votes\":16128},{\"Title\":\"Bless the Child\",\"US Gross\":29374178,\"Worldwide Gross\":40435694,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Aug 11 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Fantasy\",\"Director\":\"Chuck Russell\",\"Rotten Tomatoes Rating\":3,\"IMDB Rating\":4.8,\"IMDB Votes\":7765},{\"Title\":\"The Bachelor\",\"US Gross\":21731001,\"Worldwide Gross\":36882378,\"US DVD Sales\":null,\"Production Budget\":21000000,\"Release Date\":\"Nov 05 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"New Line\",\"Source\":\"Remake\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":4.8,\"IMDB Votes\":9030},{\"Title\":\"The Broken Hearts Club: A Romantic Comedy\",\"US Gross\":1744858,\"Worldwide Gross\":2022442,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Sep 29 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":3731},{\"Title\":\"Be Cool\",\"US Gross\":55849401,\"Worldwide Gross\":94849401,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Mar 04 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":115,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"F. Gary Gray\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.6,\"IMDB Votes\":32082},{\"Title\":\"Big Daddy\",\"US Gross\":163479795,\"Worldwide Gross\":234779795,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jun 25 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Dennis Dugan\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":4.7,\"IMDB Votes\":48},{\"Title\":\"Bedazzled\",\"US Gross\":37879996,\"Worldwide Gross\":90376224,\"US DVD Sales\":null,\"Production Budget\":48000000,\"Release Date\":\"Oct 20 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":93,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Harold Ramis\",\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":5.9,\"IMDB Votes\":30946},{\"Title\":\"Body of Lies\",\"US Gross\":39394666,\"Worldwide Gross\":108394666,\"US DVD Sales\":22024703,\"Production Budget\":67500000,\"Release Date\":\"Oct 10 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":129,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":7.2,\"IMDB Votes\":53921},{\"Title\":\"Blood Diamond\",\"US Gross\":57377916,\"Worldwide Gross\":171377916,\"US DVD Sales\":62588936,\"Production Budget\":100000000,\"Release Date\":\"Dec 08 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":143,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Edward Zwick\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":8,\"IMDB Votes\":118925},{\"Title\":\"Mr. Bean's Holiday\",\"US Gross\":33302167,\"Worldwide Gross\":229736344,\"US DVD Sales\":28248145,\"Production Budget\":25000000,\"Release Date\":\"Aug 24 2007\",\"MPAA Rating\":\"G\",\"Running Time min\":88,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6,\"IMDB Votes\":28950},{\"Title\":\"Beautiful\",\"US Gross\":3134509,\"Worldwide Gross\":3134509,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Sep 29 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Destination Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sally Field\",\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":4.4,\"IMDB Votes\":2238},{\"Title\":\"Beavis and Butt-head Do America\",\"US Gross\":63118386,\"Worldwide Gross\":63118386,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Dec 20 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":80,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mike Judge\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.6,\"IMDB Votes\":22918},{\"Title\":\"Bend it Like Beckham\",\"US Gross\":32543449,\"Worldwide Gross\":76583333,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Mar 12 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":112,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gurinder Chadha\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":41052},{\"Title\":\"In the Bedroom\",\"US Gross\":35930604,\"Worldwide Gross\":43430604,\"US DVD Sales\":null,\"Production Budget\":1700000,\"Release Date\":\"Nov 23 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":130,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Todd Field\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":7.5,\"IMDB Votes\":20888},{\"Title\":\"Bee Movie\",\"US Gross\":126631277,\"Worldwide Gross\":287594577,\"US DVD Sales\":79628881,\"Production Budget\":150000000,\"Release Date\":\"Nov 02 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Steve Hickner\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":6.3,\"IMDB Votes\":30575},{\"Title\":\"Artie Lange's Beer League\",\"US Gross\":475000,\"Worldwide Gross\":475000,\"US DVD Sales\":null,\"Production Budget\":2800000,\"Release Date\":\"Sep 15 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Freestyle Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Being John Malkovich\",\"US Gross\":22858926,\"Worldwide Gross\":32382381,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Oct 29 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":112,\"Distributor\":\"USA Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Spike Jonze\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.9,\"IMDB Votes\":113568},{\"Title\":\"Behind Enemy Lines\",\"US Gross\":58855732,\"Worldwide Gross\":58855732,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Nov 30 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":6.1,\"IMDB Votes\":32575},{\"Title\":\"Bella\",\"US Gross\":8093373,\"Worldwide Gross\":9220041,\"US DVD Sales\":5935632,\"Production Budget\":3300000,\"Release Date\":\"Oct 26 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Roadside Attractions\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":6562},{\"Title\":\"Beloved\",\"US Gross\":22852487,\"Worldwide Gross\":22852487,\"US DVD Sales\":null,\"Production Budget\":53000000,\"Release Date\":\"Oct 16 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":172,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Jonathan Demme\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":5.3,\"IMDB Votes\":102},{\"Title\":\"Les Triplettes de Belleville\",\"US Gross\":7301288,\"Worldwide Gross\":14440113,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Nov 26 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.7,\"IMDB Votes\":19761},{\"Title\":\"Beyond the Mat\",\"US Gross\":2047570,\"Worldwide Gross\":2047570,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Oct 22 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.2,\"IMDB Votes\":4067},{\"Title\":\"The Benchwarmers\",\"US Gross\":59843754,\"Worldwide Gross\":64843754,\"US DVD Sales\":32764806,\"Production Budget\":35000000,\"Release Date\":\"Apr 07 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Dennis Dugan\",\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":5.4,\"IMDB Votes\":17824},{\"Title\":\"The Last Airbender\",\"US Gross\":131591957,\"Worldwide Gross\":290191957,\"US DVD Sales\":null,\"Production Budget\":150000000,\"Release Date\":\"Jul 01 2010\",\"MPAA Rating\":null,\"Running Time min\":103,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"M. Night Shyamalan\",\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":4.4,\"IMDB Votes\":16600},{\"Title\":\"Beowulf\",\"US Gross\":82195215,\"Worldwide Gross\":194995215,\"US DVD Sales\":35961910,\"Production Budget\":150000000,\"Release Date\":\"Nov 16 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":115,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Robert Zemeckis\",\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":6.6,\"IMDB Votes\":62513},{\"Title\":\"The Importance of Being Earnest\",\"US Gross\":8378141,\"Worldwide Gross\":8378141,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"May 22 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":6.7,\"IMDB Votes\":9345},{\"Title\":\"Beauty Shop\",\"US Gross\":36351350,\"Worldwide Gross\":38351350,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Mar 30 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Spin-Off\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bille Woodruff\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.3,\"IMDB Votes\":5468},{\"Title\":\"Better Luck Tomorrow\",\"US Gross\":3802390,\"Worldwide Gross\":3809226,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Apr 11 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Justin Lin\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":5959},{\"Title\":\"Big Fat Liar\",\"US Gross\":47811275,\"Worldwide Gross\":52375275,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Feb 08 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":88,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Shawn Levy\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":5.2,\"IMDB Votes\":9877},{\"Title\":\"Big Fish\",\"US Gross\":66432867,\"Worldwide Gross\":123432867,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Dec 10 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":125,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"Tim Burton\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":8.1,\"IMDB Votes\":141099},{\"Title\":\"Before Sunset\",\"US Gross\":5792822,\"Worldwide Gross\":11293790,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jul 02 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Independent\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Linklater\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":8,\"IMDB Votes\":45535},{\"Title\":\"The Big Hit\",\"US Gross\":27066941,\"Worldwide Gross\":27066941,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Apr 24 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":91,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":5.8,\"IMDB Votes\":14157},{\"Title\":\"Birthday Girl\",\"US Gross\":4919896,\"Worldwide Gross\":8130727,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Feb 01 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":13366},{\"Title\":\"The Big Lebowski\",\"US Gross\":17498804,\"Worldwide Gross\":46189568,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Mar 06 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":127,\"Distributor\":\"Gramercy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Coen\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":8.2,\"IMDB Votes\":177960},{\"Title\":\"Big Momma's House\",\"US Gross\":117559438,\"Worldwide Gross\":173559438,\"US DVD Sales\":null,\"Production Budget\":33000000,\"Release Date\":\"Jun 02 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Raja Gosnell\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":4.7,\"IMDB Votes\":21318},{\"Title\":\"Black Hawk Down\",\"US Gross\":108638745,\"Worldwide Gross\":173638745,\"US DVD Sales\":970318,\"Production Budget\":95000000,\"Release Date\":\"Dec 28 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":144,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.7,\"IMDB Votes\":98653},{\"Title\":\"Eye of the Beholder\",\"US Gross\":16500786,\"Worldwide Gross\":18260865,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jan 28 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Destination Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.6,\"IMDB Votes\":9992},{\"Title\":\"The Big Bounce\",\"US Gross\":6471394,\"Worldwide Gross\":6626115,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Jan 30 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.8,\"IMDB Votes\":9195},{\"Title\":\"Big Trouble\",\"US Gross\":7262288,\"Worldwide Gross\":8488871,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Apr 05 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Barry Sonnenfeld\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.3,\"IMDB Votes\":11610},{\"Title\":\"Billy Elliot\",\"US Gross\":21995263,\"Worldwide Gross\":109280263,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Oct 13 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stephen Daldry\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":7.7,\"IMDB Votes\":38403},{\"Title\":\"Bicentennial Man\",\"US Gross\":58220776,\"Worldwide Gross\":87420776,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Dec 17 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":132,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Chris Columbus\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":6.4,\"IMDB Votes\":28827},{\"Title\":\"Birth\",\"US Gross\":5005899,\"Worldwide Gross\":14603001,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 29 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.3,\"IMDB Votes\":25},{\"Title\":\"Becoming Jane\",\"US Gross\":18663911,\"Worldwide Gross\":37304637,\"US DVD Sales\":8061456,\"Production Budget\":16500000,\"Release Date\":\"Aug 03 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":120,\"Distributor\":\"Miramax\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":7,\"IMDB Votes\":15167},{\"Title\":\"Bridget Jones: The Edge Of Reason\",\"US Gross\":40203020,\"Worldwide Gross\":263894551,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Nov 12 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":26325},{\"Title\":\"Bridget Jones's Diary\",\"US Gross\":71500556,\"Worldwide Gross\":281527158,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Apr 13 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":97,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":6.8,\"IMDB Votes\":58213},{\"Title\":\"The Bank Job\",\"US Gross\":30060660,\"Worldwide Gross\":63060660,\"US DVD Sales\":17254299,\"Production Budget\":20000000,\"Release Date\":\"Mar 07 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Dramatization\",\"Director\":\"Roger Donaldson\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":7.5,\"IMDB Votes\":50848},{\"Title\":\"Blade\",\"US Gross\":70141876,\"Worldwide Gross\":131237688,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Aug 21 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"New Line\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Stephen Norrington\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":7,\"IMDB Votes\":64896},{\"Title\":\"The Blair Witch Project\",\"US Gross\":140539099,\"Worldwide Gross\":248300000,\"US DVD Sales\":null,\"Production Budget\":600000,\"Release Date\":\"Jul 14 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":87,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":6.2,\"IMDB Votes\":87629},{\"Title\":\"Blast from the Past\",\"US Gross\":26613620,\"Worldwide Gross\":26613620,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Feb 12 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":111,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Hugh Wilson\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.4,\"IMDB Votes\":23243},{\"Title\":\"Blade 2\",\"US Gross\":81676888,\"Worldwide Gross\":154338601,\"US DVD Sales\":null,\"Production Budget\":54000000,\"Release Date\":\"Mar 22 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":117,\"Distributor\":\"New Line\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Guillermo Del Toro\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":90},{\"Title\":\"Blade: Trinity\",\"US Gross\":52397389,\"Worldwide Gross\":132397389,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Dec 08 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":113,\"Distributor\":\"New Line\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"David Goyer\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":42477},{\"Title\":\"Blades of Glory\",\"US Gross\":118594548,\"Worldwide Gross\":145594548,\"US DVD Sales\":49219041,\"Production Budget\":61000000,\"Release Date\":\"Mar 30 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":94,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":6.5,\"IMDB Votes\":51929},{\"Title\":\"The Blind Side\",\"US Gross\":255959475,\"Worldwide Gross\":301759475,\"US DVD Sales\":86139819,\"Production Budget\":35000000,\"Release Date\":\"Nov 20 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Factual Book/Article\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":7.7,\"IMDB Votes\":42320},{\"Title\":\"Blood Work\",\"US Gross\":26199517,\"Worldwide Gross\":26199517,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Aug 09 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Clint Eastwood\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6.3,\"IMDB Votes\":16751},{\"Title\":\"Zwartboek\",\"US Gross\":4398392,\"Worldwide Gross\":4398392,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Apr 06 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Paul Verhoeven\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8,\"IMDB Votes\":27288},{\"Title\":\"Black Christmas\",\"US Gross\":16235738,\"Worldwide Gross\":16235738,\"US DVD Sales\":28729107,\"Production Budget\":9000000,\"Release Date\":\"Dec 25 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":90,\"Distributor\":\"MGM\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":4.3,\"IMDB Votes\":10424},{\"Title\":\"Black Snake Moan\",\"US Gross\":9396870,\"Worldwide Gross\":9396870,\"US DVD Sales\":12540785,\"Production Budget\":15000000,\"Release Date\":\"Mar 02 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":115,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":7.1,\"IMDB Votes\":28145},{\"Title\":\"Black Water Transit\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Dec 31 2008\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Blindness\",\"US Gross\":3073392,\"Worldwide Gross\":14542658,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Oct 03 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Fernando Meirelles\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":6.6,\"IMDB Votes\":25508},{\"Title\":\"Legally Blonde 2: Red, White & Blonde\",\"US Gross\":90639088,\"Worldwide Gross\":125339088,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jul 02 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":95,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Legally Blonde\",\"US Gross\":96493426,\"Worldwide Gross\":141743426,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Jul 13 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Luketic\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.2,\"IMDB Votes\":44128},{\"Title\":\"Blood and Wine\",\"US Gross\":1083350,\"Worldwide Gross\":1083350,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Feb 21 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bob Rafelson\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6.1,\"IMDB Votes\":4761},{\"Title\":\"Blow\",\"US Gross\":52990775,\"Worldwide Gross\":83282296,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Apr 06 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":123,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Ted Demme\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":7.4,\"IMDB Votes\":70218},{\"Title\":\"Ballistic: Ecks vs. Sever\",\"US Gross\":14294842,\"Worldwide Gross\":14294842,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Sep 20 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.4,\"IMDB Votes\":11112},{\"Title\":\"Blue Crush\",\"US Gross\":40118420,\"Worldwide Gross\":51327420,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Aug 16 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":105,\"Distributor\":\"Universal\",\"Source\":\"Based on Magazine Article\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":5.5,\"IMDB Votes\":11699},{\"Title\":\"Bamboozled\",\"US Gross\":2185266,\"Worldwide Gross\":2373937,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 06 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6.3,\"IMDB Votes\":5958},{\"Title\":\"A Beautiful Mind\",\"US Gross\":170708996,\"Worldwide Gross\":316708996,\"US DVD Sales\":null,\"Production Budget\":78000000,\"Release Date\":\"Dec 21 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":135,\"Distributor\":\"Universal\",\"Source\":\"Based on Magazine Article\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Ron Howard\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":8,\"IMDB Votes\":126067},{\"Title\":\"Big Momma's House 2\",\"US Gross\":70165972,\"Worldwide Gross\":137047376,\"US DVD Sales\":21234176,\"Production Budget\":40000000,\"Release Date\":\"Jan 27 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":6,\"IMDB Rating\":4,\"IMDB Votes\":11368},{\"Title\":\"Story of Bonnie and Clyde, The\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 31 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Boondock Saints\",\"US Gross\":30471,\"Worldwide Gross\":250000,\"US DVD Sales\":7468574,\"Production Budget\":7000000,\"Release Date\":\"Jan 21 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Indican Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":7.8,\"IMDB Votes\":86172},{\"Title\":\"Bandidas\",\"US Gross\":0,\"Worldwide Gross\":10496317,\"US DVD Sales\":7921142,\"Production Budget\":35000000,\"Release Date\":\"Sep 22 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":5.6,\"IMDB Votes\":12103},{\"Title\":\"Bandits\",\"US Gross\":41523271,\"Worldwide Gross\":71523271,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Oct 12 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":123,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Barry Levinson\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.5,\"IMDB Votes\":30732},{\"Title\":\"Bobby\",\"US Gross\":11242801,\"Worldwide Gross\":20597806,\"US DVD Sales\":12345494,\"Production Budget\":14000000,\"Release Date\":\"Nov 17 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"MGM\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Emilio Estevez\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":7.1,\"IMDB Votes\":23262},{\"Title\":\"The Book of Eli\",\"US Gross\":94835059,\"Worldwide Gross\":146452390,\"US DVD Sales\":36862324,\"Production Budget\":80000000,\"Release Date\":\"Jan 15 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6.9,\"IMDB Votes\":47733},{\"Title\":\"Boogeyman\",\"US Gross\":46752382,\"Worldwide Gross\":67192859,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Feb 04 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":3.9,\"IMDB Votes\":13901},{\"Title\":\"Bolt\",\"US Gross\":114053579,\"Worldwide Gross\":313953579,\"US DVD Sales\":82600642,\"Production Budget\":150000000,\"Release Date\":\"Nov 21 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.4,\"IMDB Votes\":32473},{\"Title\":\"The Other Boleyn Girl\",\"US Gross\":26814957,\"Worldwide Gross\":72944278,\"US DVD Sales\":8245298,\"Production Budget\":40000000,\"Release Date\":\"Feb 29 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":6.7,\"IMDB Votes\":26198},{\"Title\":\"The Bone Collector\",\"US Gross\":66488090,\"Worldwide Gross\":151463090,\"US DVD Sales\":null,\"Production Budget\":48000000,\"Release Date\":\"Nov 05 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":118,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Phillip Noyce\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":6.3,\"IMDB Votes\":46961},{\"Title\":\"Bones\",\"US Gross\":7316658,\"Worldwide Gross\":8378853,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 24 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":3.9,\"IMDB Votes\":3524},{\"Title\":\"Bon Voyage\",\"US Gross\":2353728,\"Worldwide Gross\":8361736,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Mar 19 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":6.5,\"IMDB Votes\":622},{\"Title\":\"Boogie Nights\",\"US Gross\":26410771,\"Worldwide Gross\":43111725,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Oct 10 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":152,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Paul Thomas Anderson\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.9,\"IMDB Votes\":70962},{\"Title\":\"Borat\",\"US Gross\":128505958,\"Worldwide Gross\":261572744,\"US DVD Sales\":62661576,\"Production Budget\":18000000,\"Release Date\":\"Nov 03 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":83,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Larry Charles\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.7,\"IMDB Votes\":3612},{\"Title\":\"The Bourne Identity\",\"US Gross\":121468960,\"Worldwide Gross\":213300000,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jun 14 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Doug Liman\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.7,\"IMDB Votes\":122597},{\"Title\":\"The Bourne Supremacy\",\"US Gross\":176087450,\"Worldwide Gross\":288587450,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Jul 23 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":108,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul Greengrass\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.6,\"IMDB Votes\":104614},{\"Title\":\"The Bourne Ultimatum\",\"US Gross\":227471070,\"Worldwide Gross\":442161562,\"US DVD Sales\":123314592,\"Production Budget\":130000000,\"Release Date\":\"Aug 03 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":114,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul Greengrass\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":8.2,\"IMDB Votes\":146025},{\"Title\":\"The Borrowers\",\"US Gross\":22619589,\"Worldwide Gross\":54045832,\"US DVD Sales\":null,\"Production Budget\":29000000,\"Release Date\":\"Feb 13 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":83,\"Distributor\":\"Polygram\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Peter Hewitt\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":4340},{\"Title\":\"My Boss's Daughter\",\"US Gross\":15549702,\"Worldwide Gross\":15549702,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Aug 22 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Zucker\",\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":4.3,\"IMDB Votes\":10919},{\"Title\":\"Bounce\",\"US Gross\":36779296,\"Worldwide Gross\":53399300,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Nov 17 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":5.5,\"IMDB Votes\":10702},{\"Title\":\"Bowling for Columbine\",\"US Gross\":21576018,\"Worldwide Gross\":58576018,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Oct 11 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":\"Michael Moore\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8.2,\"IMDB Votes\":76928},{\"Title\":\"Boys Don't Cry\",\"US Gross\":11540607,\"Worldwide Gross\":20741000,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Oct 08 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Kimberly Peirce\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.6,\"IMDB Votes\":34435},{\"Title\":\"The Boy in the Striped Pyjamas\",\"US Gross\":9030581,\"Worldwide Gross\":39830581,\"US DVD Sales\":9647546,\"Production Budget\":12500000,\"Release Date\":\"Nov 07 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":94,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":21683},{\"Title\":\"Bulletproof Monk\",\"US Gross\":23010607,\"Worldwide Gross\":23010607,\"US DVD Sales\":null,\"Production Budget\":52000000,\"Release Date\":\"Apr 16 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5.2,\"IMDB Votes\":17130},{\"Title\":\"Heartbreakers\",\"US Gross\":40334024,\"Worldwide Gross\":57753825,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Mar 23 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":124,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":6.2,\"IMDB Votes\":20962},{\"Title\":\"Bride & Prejudice\",\"US Gross\":6601079,\"Worldwide Gross\":22064531,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Feb 11 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gurinder Chadha\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":9442},{\"Title\":\"Beyond Borders\",\"US Gross\":4426297,\"Worldwide Gross\":11427090,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Oct 24 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Martin Campbell\",\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":6.2,\"IMDB Votes\":9575},{\"Title\":\"Bride Wars\",\"US Gross\":58715510,\"Worldwide Gross\":115150424,\"US DVD Sales\":29943338,\"Production Budget\":30000000,\"Release Date\":\"Jan 09 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":5,\"IMDB Votes\":15762},{\"Title\":\"Breakfast of Champions\",\"US Gross\":178287,\"Worldwide Gross\":178287,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Sep 17 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Alan Rudolph\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":4.3,\"IMDB Votes\":5033},{\"Title\":\"Brigham City\",\"US Gross\":852206,\"Worldwide Gross\":852206,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Apr 06 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Excel Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":7.1,\"IMDB Votes\":758},{\"Title\":\"Brick\",\"US Gross\":2075743,\"Worldwide Gross\":3918941,\"US DVD Sales\":5013655,\"Production Budget\":450000,\"Release Date\":\"Mar 31 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus/Rogue Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":37204},{\"Title\":\"Bringing Out The Dead\",\"US Gross\":16640210,\"Worldwide Gross\":16640210,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Oct 22 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.8,\"IMDB Votes\":31079},{\"Title\":\"Breakdown\",\"US Gross\":50159144,\"Worldwide Gross\":50159144,\"US DVD Sales\":null,\"Production Budget\":36000000,\"Release Date\":\"May 02 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":93,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jonathan Mostow\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Brooklyn's Finest\",\"US Gross\":27163593,\"Worldwide Gross\":28319627,\"US DVD Sales\":9300674,\"Production Budget\":25000000,\"Release Date\":\"Mar 05 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Overture Films\",\"Source\":\"Remake\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Antoine Fuqua\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":14034},{\"Title\":\"Brokeback Mountain\",\"US Gross\":83043761,\"Worldwide Gross\":180343761,\"US DVD Sales\":31338042,\"Production Budget\":13900000,\"Release Date\":\"Dec 09 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":134,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Ang Lee\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.8,\"IMDB Votes\":115951},{\"Title\":\"Breakin' All the Rules\",\"US Gross\":12232382,\"Worldwide Gross\":12512317,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"May 14 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.3,\"IMDB Votes\":2643},{\"Title\":\"The Break Up\",\"US Gross\":118806699,\"Worldwide Gross\":202944203,\"US DVD Sales\":52707367,\"Production Budget\":52000000,\"Release Date\":\"Jun 02 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peyton Reed\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":38285},{\"Title\":\"An Alan Smithee Film: Burn Hollywood Burn\",\"US Gross\":45779,\"Worldwide Gross\":45779,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 27 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Arthur Hiller\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.5,\"IMDB Votes\":2152},{\"Title\":\"Barney's Version\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Dec 31 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Brooklyn Rules\",\"US Gross\":458232,\"Worldwide Gross\":458232,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"May 18 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":99,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":2797},{\"Title\":\"Boiler Room\",\"US Gross\":16963963,\"Worldwide Gross\":28773637,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Feb 18 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.9,\"IMDB Votes\":22979},{\"Title\":\"The Brothers Solomon\",\"US Gross\":900926,\"Worldwide Gross\":900926,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Sep 07 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":5.2,\"IMDB Votes\":6044},{\"Title\":\"The Brothers\",\"US Gross\":27457409,\"Worldwide Gross\":27958191,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Mar 23 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":102,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":2.8,\"IMDB Votes\":153},{\"Title\":\"Brown Sugar\",\"US Gross\":27362712,\"Worldwide Gross\":28315272,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Oct 11 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":109,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6,\"IMDB Votes\":2745},{\"Title\":\"Bright Star\",\"US Gross\":4444637,\"Worldwide Gross\":9469105,\"US DVD Sales\":null,\"Production Budget\":8500000,\"Release Date\":\"Jan 26 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Apparition\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Jane Campion\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":5957},{\"Title\":\"Brother\",\"US Gross\":450594,\"Worldwide Gross\":450594,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jul 20 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":10831},{\"Title\":\"In Bruges\",\"US Gross\":7800825,\"Worldwide Gross\":30782621,\"US DVD Sales\":3467377,\"Production Budget\":15000000,\"Release Date\":\"Feb 08 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":8.1,\"IMDB Votes\":97876},{\"Title\":\"The Brown Bunny\",\"US Gross\":366301,\"Worldwide Gross\":630427,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Aug 27 2004\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"WellSpring\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Vincent Gallo\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":7465},{\"Title\":\"Barbershop 2: Back in Business\",\"US Gross\":65070412,\"Worldwide Gross\":65842412,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Feb 06 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":4848},{\"Title\":\"Barbershop\",\"US Gross\":75781642,\"Worldwide Gross\":77081642,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Sep 13 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":103,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tim Story\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":6.2,\"IMDB Votes\":11164},{\"Title\":\"Best in Show\",\"US Gross\":18621249,\"Worldwide Gross\":20695413,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Sep 27 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":90,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Christopher Guest\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.4,\"IMDB Votes\":24484},{\"Title\":\"Bad Santa\",\"US Gross\":60060328,\"Worldwide Gross\":60063017,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Nov 26 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":91,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Terry Zwigoff\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7.3,\"IMDB Votes\":45022},{\"Title\":\"Inglourious Basterds\",\"US Gross\":120831050,\"Worldwide Gross\":320389438,\"US DVD Sales\":58414604,\"Production Budget\":70000000,\"Release Date\":\"Aug 21 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":152,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Quentin Tarantino\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":8.4,\"IMDB Votes\":178742},{\"Title\":\"Blue Streak\",\"US Gross\":68208190,\"Worldwide Gross\":117448157,\"US DVD Sales\":null,\"Production Budget\":36000000,\"Release Date\":\"Sep 17 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Les Mayfield\",\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":5.9,\"IMDB Votes\":23545},{\"Title\":\"The Butterfly Effect\",\"US Gross\":57924679,\"Worldwide Gross\":96046844,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Jan 23 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":113,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":7.8,\"IMDB Votes\":102982},{\"Title\":\"O Brother, Where Art Thou\",\"US Gross\":45506619,\"Worldwide Gross\":65976782,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Dec 22 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":102,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Joel Coen\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Batman & Robin\",\"US Gross\":107325195,\"Worldwide Gross\":238317814,\"US DVD Sales\":null,\"Production Budget\":125000000,\"Release Date\":\"Jun 20 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":130,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Joel Schumacher\",\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":3.5,\"IMDB Votes\":81283},{\"Title\":\"Boat Trip\",\"US Gross\":8586376,\"Worldwide Gross\":14933713,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Mar 21 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":4.7,\"IMDB Votes\":13258},{\"Title\":\"Bubba Ho-Tep\",\"US Gross\":1239183,\"Worldwide Gross\":1239183,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Sep 19 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Vitagraph Films\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":23110},{\"Title\":\"Bubble\",\"US Gross\":145382,\"Worldwide Gross\":145382,\"US DVD Sales\":null,\"Production Budget\":1600000,\"Release Date\":\"Jan 27 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steven Soderbergh\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.6,\"IMDB Votes\":101},{\"Title\":\"Bubble Boy\",\"US Gross\":5002310,\"Worldwide Gross\":5002310,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Aug 24 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.4,\"IMDB Votes\":11073},{\"Title\":\"Buffalo '66\",\"US Gross\":2380606,\"Worldwide Gross\":2380606,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Jun 26 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Vincent Gallo\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7.3,\"IMDB Votes\":17762},{\"Title\":\"Buffalo Soldiers\",\"US Gross\":353743,\"Worldwide Gross\":353743,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jul 25 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":13510},{\"Title\":\"Bulworth\",\"US Gross\":26528684,\"Worldwide Gross\":29203383,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"May 15 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":107,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Warren Beatty\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":6.8,\"IMDB Votes\":15486},{\"Title\":\"W.\",\"US Gross\":25534493,\"Worldwide Gross\":28575778,\"US DVD Sales\":7871296,\"Production Budget\":25100000,\"Release Date\":\"Oct 17 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":131,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Oliver Stone\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Bowfinger\",\"US Gross\":66458769,\"Worldwide Gross\":98699769,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Aug 13 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":96,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Frank Oz\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":6.4,\"IMDB Votes\":33389},{\"Title\":\"Bewitched\",\"US Gross\":63313159,\"Worldwide Gross\":131413159,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jun 24 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":100,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Nora Ephron\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":4.8,\"IMDB Votes\":26834},{\"Title\":\"Barnyard: The Original Party Animals\",\"US Gross\":72779000,\"Worldwide Gross\":116618084,\"US DVD Sales\":65043181,\"Production Budget\":51000000,\"Release Date\":\"Aug 04 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Steve Oedekerk\",\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Beyond the Sea\",\"US Gross\":6144806,\"Worldwide Gross\":7061637,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Dec 17 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Kevin Spacey\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":6.6,\"IMDB Votes\":8002},{\"Title\":\"Cabin Fever\",\"US Gross\":21158188,\"Worldwide Gross\":30553394,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Sep 12 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Eli Roth\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.4,\"IMDB Votes\":28417},{\"Title\":\"CachÈ\",\"US Gross\":3647381,\"Worldwide Gross\":17147381,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Dec 23 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":26},{\"Title\":\"Cadillac Records\",\"US Gross\":8138000,\"Worldwide Gross\":8138000,\"US DVD Sales\":10049741,\"Production Budget\":12000000,\"Release Date\":\"Dec 05 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.7,\"IMDB Votes\":5026},{\"Title\":\"Can't Hardly Wait\",\"US Gross\":25358996,\"Worldwide Gross\":25358996,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jun 12 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6.2,\"IMDB Votes\":19470},{\"Title\":\"Capote\",\"US Gross\":28750530,\"Worldwide Gross\":46309352,\"US DVD Sales\":17031573,\"Production Budget\":7000000,\"Release Date\":\"Sep 30 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Bennett Miller\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.6,\"IMDB Votes\":41472},{\"Title\":\"Sukkar banat\",\"US Gross\":1060591,\"Worldwide Gross\":14253760,\"US DVD Sales\":null,\"Production Budget\":1600000,\"Release Date\":\"Feb 01 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Roadside Attractions\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":3799},{\"Title\":\"Disney's A Christmas Carol\",\"US Gross\":137855863,\"Worldwide Gross\":323743744,\"US DVD Sales\":null,\"Production Budget\":190000000,\"Release Date\":\"Nov 06 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"Robert Zemeckis\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Rage: Carrie 2\",\"US Gross\":17760244,\"Worldwide Gross\":17760244,\"US DVD Sales\":null,\"Production Budget\":21000000,\"Release Date\":\"Mar 12 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":101,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":4.3,\"IMDB Votes\":7235},{\"Title\":\"Cars\",\"US Gross\":244082982,\"Worldwide Gross\":461923762,\"US DVD Sales\":246114559,\"Production Budget\":70000000,\"Release Date\":\"Jun 09 2006\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"John Lasseter\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":7.5,\"IMDB Votes\":66809},{\"Title\":\"Cast Away\",\"US Gross\":233632142,\"Worldwide Gross\":427230516,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Dec 22 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":144,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Zemeckis\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.5,\"IMDB Votes\":102936},{\"Title\":\"Catch Me if You Can\",\"US Gross\":164606800,\"Worldwide Gross\":351106800,\"US DVD Sales\":null,\"Production Budget\":52000000,\"Release Date\":\"Dec 25 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":141,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":5.7,\"IMDB Votes\":224},{\"Title\":\"The Cat in the Hat\",\"US Gross\":101018283,\"Worldwide Gross\":133818283,\"US DVD Sales\":null,\"Production Budget\":109000000,\"Release Date\":\"Nov 21 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":82,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.4,\"IMDB Votes\":15318},{\"Title\":\"Cats Don't Dance\",\"US Gross\":3588602,\"Worldwide Gross\":3588602,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Mar 26 1997\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Fantasy\",\"Director\":\"Mark Dindal\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.9,\"IMDB Votes\":1663},{\"Title\":\"Catwoman\",\"US Gross\":40202379,\"Worldwide Gross\":82102379,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Jul 23 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":104,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":3.2,\"IMDB Votes\":34651},{\"Title\":\"Cecil B. Demented\",\"US Gross\":1276984,\"Worldwide Gross\":1953882,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Aug 11 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Waters\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":5.9,\"IMDB Votes\":7565},{\"Title\":\"The Country Bears\",\"US Gross\":16988996,\"Worldwide Gross\":16988996,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Jul 26 2002\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Disney Ride\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":3.8,\"IMDB Votes\":2021},{\"Title\":\"Center Stage\",\"US Gross\":17200925,\"Worldwide Gross\":17200925,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"May 12 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":6.2,\"IMDB Votes\":7968},{\"Title\":\"The Corpse Bride\",\"US Gross\":53359111,\"Worldwide Gross\":117359111,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Sep 16 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":77,\"Distributor\":\"Warner Bros.\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Tim Burton\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Critical Care\",\"US Gross\":220175,\"Worldwide Gross\":220175,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Oct 31 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Sidney Lumet\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":6,\"IMDB Votes\":895},{\"Title\":\"Connie & Carla\",\"US Gross\":8047525,\"Worldwide Gross\":8047525,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Apr 16 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Lembeck\",\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6,\"IMDB Votes\":4359},{\"Title\":\"Collateral Damage\",\"US Gross\":40048332,\"Worldwide Gross\":78353508,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Feb 08 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andrew Davis\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":24358},{\"Title\":\"Crocodile Dundee in Los Angeles\",\"US Gross\":25590119,\"Worldwide Gross\":39393111,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Apr 20 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":95,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Simon Wincer\",\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":4.6,\"IMDB Votes\":7082},{\"Title\":\"Celebrity\",\"US Gross\":5078660,\"Worldwide Gross\":6200000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Nov 20 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":6.1,\"IMDB Votes\":10978},{\"Title\":\"The Cell\",\"US Gross\":61280963,\"Worldwide Gross\":61280963,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Aug 18 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.2,\"IMDB Votes\":36961},{\"Title\":\"Cellular\",\"US Gross\":32003620,\"Worldwide Gross\":45261739,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Sep 10 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":94,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David R. Ellis\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6.5,\"IMDB Votes\":32534},{\"Title\":\"City of Ember\",\"US Gross\":7871693,\"Worldwide Gross\":11817059,\"US DVD Sales\":6086988,\"Production Budget\":38000000,\"Release Date\":\"Oct 10 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":94,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Gil Kenan\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":6.4,\"IMDB Votes\":14905},{\"Title\":\"Charlie and the Chocolate Factory\",\"US Gross\":206459076,\"Worldwide Gross\":474459076,\"US DVD Sales\":null,\"Production Budget\":150000000,\"Release Date\":\"Jul 15 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":115,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Tim Burton\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.1,\"IMDB Votes\":102437},{\"Title\":\"Catch a Fire\",\"US Gross\":4299773,\"Worldwide Gross\":5699773,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Oct 27 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Dramatization\",\"Director\":\"Phillip Noyce\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":6.8,\"IMDB Votes\":5959},{\"Title\":\"Charlie's Angels: Full Throttle\",\"US Gross\":100814328,\"Worldwide Gross\":227200000,\"US DVD Sales\":null,\"Production Budget\":120000000,\"Release Date\":\"Jun 27 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joseph McGinty Nichol\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.7,\"IMDB Votes\":43942},{\"Title\":\"Charlie's Angels\",\"US Gross\":125305545,\"Worldwide Gross\":263200000,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Nov 03 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joseph McGinty Nichol\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":5.5,\"IMDB Votes\":60791},{\"Title\":\"Chasing Amy\",\"US Gross\":12006514,\"Worldwide Gross\":15155095,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Apr 04 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin Smith\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7.5,\"IMDB Votes\":63591},{\"Title\":\"Chicago\",\"US Gross\":170687518,\"Worldwide Gross\":307687518,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Dec 27 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":113,\"Distributor\":\"Miramax\",\"Source\":\"Based on Musical/Opera\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Rob Marshall\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.2,\"IMDB Votes\":82650},{\"Title\":\"Chicken Little\",\"US Gross\":135386665,\"Worldwide Gross\":314432738,\"US DVD Sales\":142108745,\"Production Budget\":60000000,\"Release Date\":\"Nov 04 2005\",\"MPAA Rating\":\"G\",\"Running Time min\":80,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Mark Dindal\",\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":5.8,\"IMDB Votes\":17415},{\"Title\":\"Chicken Run\",\"US Gross\":106793915,\"Worldwide Gross\":227793915,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Jun 21 2000\",\"MPAA Rating\":\"G\",\"Running Time min\":84,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Nick Park\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.3,\"IMDB Votes\":48307},{\"Title\":\"Cheaper by the Dozen\",\"US Gross\":138614544,\"Worldwide Gross\":189714544,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Dec 25 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":98,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Shawn Levy\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":5.6,\"IMDB Votes\":24283},{\"Title\":\"Cheaper by the Dozen 2\",\"US Gross\":82571173,\"Worldwide Gross\":135015330,\"US DVD Sales\":26537982,\"Production Budget\":60000000,\"Release Date\":\"Dec 21 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":94,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Adam Shankman\",\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":5.2,\"IMDB Votes\":11858},{\"Title\":\"Cheri\",\"US Gross\":2715657,\"Worldwide Gross\":2715657,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Jun 26 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Stephen Frears\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6.1,\"IMDB Votes\":3307},{\"Title\":\"Chill Factor\",\"US Gross\":11263966,\"Worldwide Gross\":11263966,\"US DVD Sales\":null,\"Production Budget\":34000000,\"Release Date\":\"Sep 01 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":4.9,\"IMDB Votes\":5374},{\"Title\":\"Bride of Chucky\",\"US Gross\":32404188,\"Worldwide Gross\":50692188,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Oct 16 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":89,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Ronny Yu\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":5.3,\"IMDB Votes\":13735},{\"Title\":\"Seed of Chucky\",\"US Gross\":17016190,\"Worldwide Gross\":24716190,\"US DVD Sales\":null,\"Production Budget\":29000000,\"Release Date\":\"Nov 12 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus/Rogue Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":5.1,\"IMDB Votes\":9897},{\"Title\":\"Children of Men\",\"US Gross\":35552383,\"Worldwide Gross\":69450202,\"US DVD Sales\":25345271,\"Production Budget\":76000000,\"Release Date\":\"Dec 25 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":114,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Alfonso Cuaron\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":8.1,\"IMDB Votes\":158125},{\"Title\":\"Chloe\",\"US Gross\":3075255,\"Worldwide Gross\":9675172,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Mar 26 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":null,\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Atom Egoyan\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":8772},{\"Title\":\"Love in the Time of Cholera\",\"US Gross\":4617608,\"Worldwide Gross\":31077418,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Nov 16 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":139,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Mike Newell\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":6.2,\"IMDB Votes\":8580},{\"Title\":\"Chocolat\",\"US Gross\":71309760,\"Worldwide Gross\":152500343,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Dec 15 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":122,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Lasse Hallstrom\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":7.3,\"IMDB Votes\":56176},{\"Title\":\"The Children of Huang Shi\",\"US Gross\":1031872,\"Worldwide Gross\":5527507,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"May 23 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":6.9,\"IMDB Votes\":4100},{\"Title\":\"Les Choristes\",\"US Gross\":3629758,\"Worldwide Gross\":83529758,\"US DVD Sales\":null,\"Production Budget\":5500000,\"Release Date\":\"Nov 26 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":16391},{\"Title\":\"Chairman of the Board\",\"US Gross\":306715,\"Worldwide Gross\":306715,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Mar 13 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Trimark\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":2.1,\"IMDB Votes\":3164},{\"Title\":\"Chuck&Buck\",\"US Gross\":1055671,\"Worldwide Gross\":1157672,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Jul 14 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Chris Weitz\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":3455},{\"Title\":\"The Chumscrubber\",\"US Gross\":49526,\"Worldwide Gross\":49526,\"US DVD Sales\":null,\"Production Budget\":6800000,\"Release Date\":\"Aug 05 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Picturehouse\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":7,\"IMDB Votes\":10449},{\"Title\":\"Charlotte's Web\",\"US Gross\":82985708,\"Worldwide Gross\":143985708,\"US DVD Sales\":83571732,\"Production Budget\":82500000,\"Release Date\":\"Dec 15 2006\",\"MPAA Rating\":\"G\",\"Running Time min\":98,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"Gary Winick\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":6.7,\"IMDB Votes\":8028},{\"Title\":\"Cinderella Man\",\"US Gross\":61649911,\"Worldwide Gross\":108539911,\"US DVD Sales\":null,\"Production Budget\":88000000,\"Release Date\":\"Jun 03 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":144,\"Distributor\":\"Universal\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Ron Howard\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":8,\"IMDB Votes\":63111},{\"Title\":\"A Cinderella Story\",\"US Gross\":51438175,\"Worldwide Gross\":70067909,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Jul 16 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":95,\"Distributor\":\"Warner Bros.\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":5.4,\"IMDB Votes\":14904},{\"Title\":\"City of Angels\",\"US Gross\":78750909,\"Worldwide Gross\":198750909,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Apr 10 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":117,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"Brad Silberling\",\"Rotten Tomatoes Rating\":59,\"IMDB Rating\":6.4,\"IMDB Votes\":40053},{\"Title\":\"A Civil Action\",\"US Gross\":56709981,\"Worldwide Gross\":56709981,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Dec 25 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":112,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steven Zaillian\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6.4,\"IMDB Votes\":14244},{\"Title\":\"CJ7\",\"US Gross\":206678,\"Worldwide Gross\":47300771,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Mar 07 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Stephen Chow\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Cookout\",\"US Gross\":11540112,\"Worldwide Gross\":11540112,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Sep 03 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":5,\"IMDB Rating\":3.2,\"IMDB Votes\":1659},{\"Title\":\"The Claim\",\"US Gross\":622023,\"Worldwide Gross\":622023,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Dec 29 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.5,\"IMDB Votes\":3681},{\"Title\":\"The Santa Clause 2\",\"US Gross\":139225854,\"Worldwide Gross\":172825854,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Nov 01 2002\",\"MPAA Rating\":\"G\",\"Running Time min\":104,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Michael Lembeck\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":9061},{\"Title\":\"Cold Mountain\",\"US Gross\":95632614,\"Worldwide Gross\":161632614,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Dec 25 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":152,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Anthony Minghella\",\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":7.3,\"IMDB Votes\":51083},{\"Title\":\"Clean\",\"US Gross\":138711,\"Worldwide Gross\":138711,\"US DVD Sales\":null,\"Production Budget\":10000,\"Release Date\":\"Apr 28 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Palm Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Click\",\"US Gross\":137355633,\"Worldwide Gross\":237555633,\"US DVD Sales\":81244755,\"Production Budget\":82500000,\"Release Date\":\"Jun 23 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Frank Coraci\",\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":5,\"IMDB Votes\":133},{\"Title\":\"Code Name: The Cleaner\",\"US Gross\":8135024,\"Worldwide Gross\":8135024,\"US DVD Sales\":4492233,\"Production Budget\":20000000,\"Release Date\":\"Jan 05 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":91,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Les Mayfield\",\"Rotten Tomatoes Rating\":4,\"IMDB Rating\":4,\"IMDB Votes\":5277},{\"Title\":\"Welcome to Collinwood\",\"US Gross\":378650,\"Worldwide Gross\":378650,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Oct 04 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":6.2,\"IMDB Votes\":7887},{\"Title\":\"Closer\",\"US Gross\":33987757,\"Worldwide Gross\":115987757,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Dec 03 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":104,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mike Nichols\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":2.9,\"IMDB Votes\":212},{\"Title\":\"Clerks II\",\"US Gross\":24148068,\"Worldwide Gross\":25894473,\"US DVD Sales\":26411041,\"Production Budget\":5000000,\"Release Date\":\"Jul 21 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin Smith\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":7.7,\"IMDB Votes\":56668},{\"Title\":\"Maid in Manhattan\",\"US Gross\":93932896,\"Worldwide Gross\":154832896,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Dec 13 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":105,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wayne Wang\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":4.6,\"IMDB Votes\":30370},{\"Title\":\"It's Complicated\",\"US Gross\":112735375,\"Worldwide Gross\":224614744,\"US DVD Sales\":29195673,\"Production Budget\":75000000,\"Release Date\":\"Dec 25 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Nancy Meyers\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6.7,\"IMDB Votes\":17748},{\"Title\":\"The Company\",\"US Gross\":2281585,\"Worldwide Gross\":3396508,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 25 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Altman\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":6.2,\"IMDB Votes\":3649},{\"Title\":\"Constantine\",\"US Gross\":75976178,\"Worldwide Gross\":230884728,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Feb 18 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":122,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Francis Lawrence\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.7,\"IMDB Votes\":78705},{\"Title\":\"The Contender\",\"US Gross\":17804273,\"Worldwide Gross\":17804273,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Oct 13 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rod Lurie\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":6.9,\"IMDB Votes\":13709},{\"Title\":\"Die F‰lscher\",\"US Gross\":5488570,\"Worldwide Gross\":19416495,\"US DVD Sales\":null,\"Production Budget\":6250000,\"Release Date\":\"Feb 22 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":16525},{\"Title\":\"Control\",\"US Gross\":871577,\"Worldwide Gross\":5645350,\"US DVD Sales\":null,\"Production Budget\":6400000,\"Release Date\":\"Oct 10 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.8,\"IMDB Votes\":19466},{\"Title\":\"Centurion\",\"US Gross\":119621,\"Worldwide Gross\":119621,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Aug 27 2010\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.5,\"IMDB Votes\":8997},{\"Title\":\"Coach Carter\",\"US Gross\":67264877,\"Worldwide Gross\":76669806,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Jan 14 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":136,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":7.1,\"IMDB Votes\":23526},{\"Title\":\"Confessions of a Dangerous Mind\",\"US Gross\":16007718,\"Worldwide Gross\":33013805,\"US DVD Sales\":null,\"Production Budget\":29000000,\"Release Date\":\"Dec 31 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"George Clooney\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":7.1,\"IMDB Votes\":36258},{\"Title\":\"Coco avant Chanel\",\"US Gross\":6113834,\"Worldwide Gross\":48846765,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Sep 25 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":6720},{\"Title\":\"Code 46\",\"US Gross\":197148,\"Worldwide Gross\":197148,\"US DVD Sales\":null,\"Production Budget\":7500000,\"Release Date\":\"Aug 06 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":\"Science Fiction\",\"Director\":\"Michael Winterbottom\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":9608},{\"Title\":\"Agent Cody Banks 2: Destination London\",\"US Gross\":23514247,\"Worldwide Gross\":28703083,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Mar 12 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":100,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.1,\"IMDB Votes\":4063},{\"Title\":\"Agent Cody Banks\",\"US Gross\":47545060,\"Worldwide Gross\":58240458,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Mar 14 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":102,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.1,\"IMDB Votes\":9527},{\"Title\":\"Collateral\",\"US Gross\":100170152,\"Worldwide Gross\":217670152,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Aug 06 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Mann\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.8,\"IMDB Votes\":105362},{\"Title\":\"College\",\"US Gross\":4694491,\"Worldwide Gross\":5629618,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Aug 29 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":94,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":5,\"IMDB Rating\":4.3,\"IMDB Votes\":6496},{\"Title\":\"Company Man\",\"US Gross\":146028,\"Worldwide Gross\":146028,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Mar 09 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5,\"IMDB Votes\":1305},{\"Title\":\"Come Early Morning\",\"US Gross\":119452,\"Worldwide Gross\":119452,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Nov 10 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"IDP/Goldwyn/Roadside\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joey Lauren Adams\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":6.2,\"IMDB Votes\":1511},{\"Title\":\"Con Air\",\"US Gross\":101117573,\"Worldwide Gross\":224117573,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jun 06 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":115,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Simon West\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6.6,\"IMDB Votes\":76052},{\"Title\":\"Confidence\",\"US Gross\":12212417,\"Worldwide Gross\":12212417,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Apr 25 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James Foley\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.8,\"IMDB Votes\":17111},{\"Title\":\"Conspiracy Theory\",\"US Gross\":76118990,\"Worldwide Gross\":137118990,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Aug 08 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":135,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Donner\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":6.5,\"IMDB Votes\":35719},{\"Title\":\"Contact\",\"US Gross\":100920329,\"Worldwide Gross\":165900000,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Jul 11 1997\",\"MPAA Rating\":\"PG\",\"Running Time min\":150,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Robert Zemeckis\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":7.3,\"IMDB Votes\":73684},{\"Title\":\"The Cooler\",\"US Gross\":8291572,\"Worldwide Gross\":10464788,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Nov 26 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7,\"IMDB Votes\":19072},{\"Title\":\"Copying Beethoven\",\"US Gross\":355968,\"Worldwide Gross\":355968,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Nov 10 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":104,\"Distributor\":\"MGM\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":5017},{\"Title\":\"Corky Romano\",\"US Gross\":23978402,\"Worldwide Gross\":23978402,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Oct 12 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":86,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":5,\"IMDB Rating\":4.2,\"IMDB Votes\":6739},{\"Title\":\"Coraline\",\"US Gross\":75286229,\"Worldwide Gross\":124062750,\"US DVD Sales\":46101073,\"Production Budget\":60000000,\"Release Date\":\"Feb 06 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":100,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.8,\"IMDB Votes\":38464},{\"Title\":\"Confessions of a Teenage Drama Queen\",\"US Gross\":29331068,\"Worldwide Gross\":33051296,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Feb 20 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":89,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.3,\"IMDB Votes\":9976},{\"Title\":\"The Covenant\",\"US Gross\":23364784,\"Worldwide Gross\":38164784,\"US DVD Sales\":26360430,\"Production Budget\":20000000,\"Release Date\":\"Sep 08 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Renny Harlin\",\"Rotten Tomatoes Rating\":3,\"IMDB Rating\":4.8,\"IMDB Votes\":17736},{\"Title\":\"Cop Land\",\"US Gross\":44906632,\"Worldwide Gross\":63706632,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Aug 15 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":105,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James Mangold\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.9,\"IMDB Votes\":35192},{\"Title\":\"Couples Retreat\",\"US Gross\":109205660,\"Worldwide Gross\":172450423,\"US DVD Sales\":34715888,\"Production Budget\":60000000,\"Release Date\":\"Oct 09 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":113,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Billingsley\",\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":5.5,\"IMDB Votes\":18332},{\"Title\":\"Cradle Will Rock\",\"US Gross\":2899970,\"Worldwide Gross\":2899970,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Dec 08 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Tim Robbins\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.7,\"IMDB Votes\":6127},{\"Title\":\"Crank\",\"US Gross\":27838408,\"Worldwide Gross\":33824696,\"US DVD Sales\":28776986,\"Production Budget\":12000000,\"Release Date\":\"Sep 01 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":88,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":7.1,\"IMDB Votes\":71094},{\"Title\":\"Crash\",\"US Gross\":3357324,\"Worldwide Gross\":3357324,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 04 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Cronenberg\",\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":6.1,\"IMDB Votes\":20886},{\"Title\":\"The Crazies\",\"US Gross\":39123589,\"Worldwide Gross\":43027734,\"US DVD Sales\":8835872,\"Production Budget\":20000000,\"Release Date\":\"Feb 26 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Overture Films\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.7,\"IMDB Votes\":21135},{\"Title\":\"Crazy in Alabama\",\"US Gross\":1954202,\"Worldwide Gross\":1954202,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Oct 22 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Antonio Banderas\",\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":5.7,\"IMDB Votes\":3991},{\"Title\":\"The Crew\",\"US Gross\":13019253,\"Worldwide Gross\":13019253,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Aug 25 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":6,\"IMDB Votes\":1307},{\"Title\":\"Cradle 2 the Grave\",\"US Gross\":34657731,\"Worldwide Gross\":56434942,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Feb 28 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":101,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andrzej Bartkowiak\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.4,\"IMDB Votes\":14834},{\"Title\":\"Crocodile Hunter: Collision Course\",\"US Gross\":28436931,\"Worldwide Gross\":33436931,\"US DVD Sales\":null,\"Production Budget\":12500000,\"Release Date\":\"Jul 12 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"MGM\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The In Crowd\",\"US Gross\":5217498,\"Worldwide Gross\":5217498,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jul 19 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":2,\"IMDB Rating\":4.2,\"IMDB Votes\":2720},{\"Title\":\"The Corruptor\",\"US Gross\":15164492,\"Worldwide Gross\":15164492,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Mar 12 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James Foley\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":5.8,\"IMDB Votes\":9008},{\"Title\":\"Man cheng jin dai huang jin jia\",\"US Gross\":6566773,\"Worldwide Gross\":75566773,\"US DVD Sales\":10581873,\"Production Budget\":45000000,\"Release Date\":\"Dec 21 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":113,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Play\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Yimou Zhang\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":17975},{\"Title\":\"Crash\",\"US Gross\":54557348,\"Worldwide Gross\":98387109,\"US DVD Sales\":null,\"Production Budget\":6500000,\"Release Date\":\"May 06 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":107,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul Haggis\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":6.1,\"IMDB Votes\":20886},{\"Title\":\"Crossover\",\"US Gross\":7009668,\"Worldwide Gross\":7009668,\"US DVD Sales\":2177636,\"Production Budget\":5600000,\"Release Date\":\"Sep 01 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":3,\"IMDB Rating\":1.7,\"IMDB Votes\":7466},{\"Title\":\"Crossroads\",\"US Gross\":37188667,\"Worldwide Gross\":57000000,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Feb 15 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":93,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":6.6,\"IMDB Votes\":4894},{\"Title\":\"The Count of Monte Cristo\",\"US Gross\":54228104,\"Worldwide Gross\":54228104,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jan 25 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":131,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Kevin Reynolds\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":7.6,\"IMDB Votes\":40605},{\"Title\":\"Cruel Intentions\",\"US Gross\":38230075,\"Worldwide Gross\":75803716,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Mar 05 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":95,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Roger Kumble\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6.7,\"IMDB Votes\":66861},{\"Title\":\"The Cry of the Owl\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":11500000,\"Release Date\":\"Nov 27 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":6.2,\"IMDB Votes\":1244},{\"Title\":\"Cry Wolf\",\"US Gross\":10047674,\"Worldwide Gross\":15585495,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Sep 16 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Focus/Rogue Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":6.4,\"IMDB Votes\":372},{\"Title\":\"Crazy Heart\",\"US Gross\":39462438,\"Worldwide Gross\":47163756,\"US DVD Sales\":13929671,\"Production Budget\":8500000,\"Release Date\":\"Dec 16 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.4,\"IMDB Votes\":17255},{\"Title\":\"crazy/beautiful\",\"US Gross\":16929123,\"Worldwide Gross\":19929123,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Jun 29 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":12102},{\"Title\":\"The Last Castle\",\"US Gross\":18208078,\"Worldwide Gross\":20541668,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Oct 19 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rod Lurie\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":6.5,\"IMDB Votes\":21621},{\"Title\":\"Clockstoppers\",\"US Gross\":36985501,\"Worldwide Gross\":38788828,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Mar 29 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":94,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Jonathan Frakes\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":5,\"IMDB Votes\":6392},{\"Title\":\"Catch That Kid\",\"US Gross\":16703799,\"Worldwide Gross\":16930762,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Feb 06 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.7,\"IMDB Votes\":3038},{\"Title\":\"Cats & Dogs\",\"US Gross\":93375151,\"Worldwide Gross\":200700000,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jul 04 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":91,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":5.2,\"IMDB Votes\":16912},{\"Title\":\"The City of Your Final Destination\",\"US Gross\":493296,\"Worldwide Gross\":493296,\"US DVD Sales\":null,\"Production Budget\":8300000,\"Release Date\":\"Apr 16 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":114,\"Distributor\":\"Hyde Park Films\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James Ivory\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.6,\"IMDB Votes\":430},{\"Title\":\"Cidade de Deus\",\"US Gross\":7563397,\"Worldwide Gross\":28763397,\"US DVD Sales\":null,\"Production Budget\":3300000,\"Release Date\":\"Jan 17 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Katia Lund\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.8,\"IMDB Votes\":166897},{\"Title\":\"City of Ghosts\",\"US Gross\":325491,\"Worldwide Gross\":325491,\"US DVD Sales\":null,\"Production Budget\":17500000,\"Release Date\":\"Apr 25 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Matt Dillon\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":2880},{\"Title\":\"City by the Sea\",\"US Gross\":22433915,\"Worldwide Gross\":22433915,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Sep 06 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Magazine Article\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Caton-Jones\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.1,\"IMDB Votes\":13487},{\"Title\":\"The Cube\",\"US Gross\":489220,\"Worldwide Gross\":489220,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Sep 11 1998\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":202},{\"Title\":\"Coyote Ugly\",\"US Gross\":60786269,\"Worldwide Gross\":115786269,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Aug 04 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":5.3,\"IMDB Votes\":33808},{\"Title\":\"Curious George\",\"US Gross\":58640119,\"Worldwide Gross\":70114174,\"US DVD Sales\":47809786,\"Production Budget\":50000000,\"Release Date\":\"Feb 10 2006\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":6.7,\"IMDB Votes\":5393},{\"Title\":\"Cursed\",\"US Gross\":19294901,\"Worldwide Gross\":25114901,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Feb 25 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Wes Craven\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.8,\"IMDB Votes\":14425},{\"Title\":\"Civil Brand\",\"US Gross\":254293,\"Worldwide Gross\":254293,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Aug 29 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":340},{\"Title\":\"Cloudy with a Chance of Meatballs\",\"US Gross\":124870275,\"Worldwide Gross\":139525862,\"US DVD Sales\":42574228,\"Production Budget\":100000000,\"Release Date\":\"Sep 18 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Phil Lord\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.2,\"IMDB Votes\":19913},{\"Title\":\"Charlie Wilson's War\",\"US Gross\":66661095,\"Worldwide Gross\":118661095,\"US DVD Sales\":17517037,\"Production Budget\":75000000,\"Release Date\":\"Dec 21 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Mike Nichols\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.3,\"IMDB Votes\":43168},{\"Title\":\"Cyrus\",\"US Gross\":7426671,\"Worldwide Gross\":8514729,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Jun 18 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Mark Duplass\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Daddy Day Camp\",\"US Gross\":13235267,\"Worldwide Gross\":18197398,\"US DVD Sales\":5405521,\"Production Budget\":76000000,\"Release Date\":\"Aug 08 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":85,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":1,\"IMDB Rating\":2.4,\"IMDB Votes\":6809},{\"Title\":\"Daddy Day Care\",\"US Gross\":104148781,\"Worldwide Gross\":164285587,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"May 09 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":92,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steve Carr\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":5.5,\"IMDB Votes\":14944},{\"Title\":\"The Black Dahlia\",\"US Gross\":22672813,\"Worldwide Gross\":46672813,\"US DVD Sales\":12350794,\"Production Budget\":60000000,\"Release Date\":\"Sep 15 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.6,\"IMDB Votes\":35210},{\"Title\":\"Diary of a Mad Black Woman\",\"US Gross\":50406346,\"Worldwide Gross\":50425450,\"US DVD Sales\":null,\"Production Budget\":5500000,\"Release Date\":\"Feb 25 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":116,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":4.9,\"IMDB Votes\":5565},{\"Title\":\"Dance Flick\",\"US Gross\":25662155,\"Worldwide Gross\":32092761,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"May 22 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":83,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Damien Wayans\",\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":3.4,\"IMDB Votes\":5002},{\"Title\":\"Dancer, Texas Pop. 81\",\"US Gross\":574838,\"Worldwide Gross\":574838,\"US DVD Sales\":null,\"Production Budget\":2300000,\"Release Date\":\"May 01 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Daredevil\",\"US Gross\":102543518,\"Worldwide Gross\":179179718,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Feb 14 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":105,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Mark Steven Johnson\",\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":5.5,\"IMDB Votes\":63574},{\"Title\":\"Dark City\",\"US Gross\":14435076,\"Worldwide Gross\":27257061,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Feb 27 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Fantasy\",\"Director\":\"Alex Proyas\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7.8,\"IMDB Votes\":62991},{\"Title\":\"His Dark Materials: The Golden Compass\",\"US Gross\":70107728,\"Worldwide Gross\":372234864,\"US DVD Sales\":41772382,\"Production Budget\":205000000,\"Release Date\":\"Dec 01 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Chris Weitz\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Donnie Darko\",\"US Gross\":1270522,\"Worldwide Gross\":4116307,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Oct 26 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Newmarket Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"Richard Kelly\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":8.3,\"IMDB Votes\":210713},{\"Title\":\"Dark Water\",\"US Gross\":25473093,\"Worldwide Gross\":49473093,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jul 08 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Fantasy\",\"Director\":\"Walter Salles\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":5.6,\"IMDB Votes\":19652},{\"Title\":\"Win a Date with Tad Hamilton!\",\"US Gross\":16980098,\"Worldwide Gross\":16980098,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Jan 23 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Luketic\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":5.7,\"IMDB Votes\":10366},{\"Title\":\"Date Movie\",\"US Gross\":48548426,\"Worldwide Gross\":84548426,\"US DVD Sales\":18840886,\"Production Budget\":20000000,\"Release Date\":\"Feb 17 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jason Friedberg\",\"Rotten Tomatoes Rating\":6,\"IMDB Rating\":2.6,\"IMDB Votes\":31821},{\"Title\":\"Date Night\",\"US Gross\":98711404,\"Worldwide Gross\":152253432,\"US DVD Sales\":19432795,\"Production Budget\":55000000,\"Release Date\":\"Apr 09 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Shawn Levy\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.5,\"IMDB Votes\":22925},{\"Title\":\"Dawn of the Dead\",\"US Gross\":58990765,\"Worldwide Gross\":102290765,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Mar 19 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Zack Snyder\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.4,\"IMDB Votes\":73875},{\"Title\":\"Daybreakers\",\"US Gross\":30101577,\"Worldwide Gross\":48969954,\"US DVD Sales\":11463099,\"Production Budget\":20000000,\"Release Date\":\"Jan 08 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Michael Spierig\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":28241},{\"Title\":\"Day of the Dead\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Apr 08 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Steve Miner\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.5,\"IMDB Votes\":8395},{\"Title\":\"The Great Debaters\",\"US Gross\":30226144,\"Worldwide Gross\":30226144,\"US DVD Sales\":24133037,\"Production Budget\":15000000,\"Release Date\":\"Dec 25 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":130,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Denzel Washington\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":7.6,\"IMDB Votes\":14530},{\"Title\":\"Double Jeopardy\",\"US Gross\":116735231,\"Worldwide Gross\":177835231,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Sep 24 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":105,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bruce Beresford\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":6,\"IMDB Votes\":28887},{\"Title\":\"Der Baader Meinhof Komplex\",\"US Gross\":476270,\"Worldwide Gross\":16498827,\"US DVD Sales\":null,\"Production Budget\":19700000,\"Release Date\":\"Aug 21 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":149,\"Distributor\":\"Vitagraph Films\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":10383},{\"Title\":\"Deep Blue Sea\",\"US Gross\":73648228,\"Worldwide Gross\":165048228,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jul 28 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":105,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Renny Harlin\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":5.6,\"IMDB Votes\":44191},{\"Title\":\"Drive Me Crazy\",\"US Gross\":17843379,\"Worldwide Gross\":22591451,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Oct 01 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":91,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Schultz\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.1,\"IMDB Votes\":6968},{\"Title\":\"Dave Chappelle's Block Party\",\"US Gross\":11718595,\"Worldwide Gross\":12051924,\"US DVD Sales\":18713941,\"Production Budget\":3000000,\"Release Date\":\"Mar 03 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":\"Michel Gondry\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Dancer in the Dark\",\"US Gross\":4157491,\"Worldwide Gross\":45557491,\"US DVD Sales\":null,\"Production Budget\":12500000,\"Release Date\":\"Sep 22 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":7.8,\"IMDB Votes\":36542},{\"Title\":\"Diary of the Dead\",\"US Gross\":952620,\"Worldwide Gross\":4726656,\"US DVD Sales\":4653193,\"Production Budget\":2750000,\"Release Date\":\"Feb 15 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"George A. Romero\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":20792},{\"Title\":\"Dear John\",\"US Gross\":80014842,\"Worldwide Gross\":112014842,\"US DVD Sales\":19179552,\"Production Budget\":25000000,\"Release Date\":\"Feb 05 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Lasse Hallstrom\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":7,\"IMDB Votes\":246},{\"Title\":\"Dear Wendy\",\"US Gross\":23106,\"Worldwide Gross\":446438,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Sep 23 2005\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"WellSpring\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Thomas Vinterberg\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":6.6,\"IMDB Votes\":5574},{\"Title\":\"D.E.B.S.\",\"US Gross\":96793,\"Worldwide Gross\":96793,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Mar 25 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Samuel Goldwyn Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":\"Angela Robinson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.1,\"IMDB Votes\":6675},{\"Title\":\"Deconstructing Harry\",\"US Gross\":10686841,\"Worldwide Gross\":10686841,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 12 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":7.2,\"IMDB Votes\":16820},{\"Title\":\"Mr. Deeds\",\"US Gross\":126293452,\"Worldwide Gross\":171269535,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Jun 28 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":96,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5.5,\"IMDB Votes\":39756},{\"Title\":\"The Deep End of the Ocean\",\"US Gross\":13508635,\"Worldwide Gross\":13508635,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Mar 12 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":6,\"IMDB Votes\":5790},{\"Title\":\"Deep Rising\",\"US Gross\":11203026,\"Worldwide Gross\":11203026,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Jan 30 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stephen Sommers\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.7,\"IMDB Votes\":12484},{\"Title\":\"Definitely, Maybe\",\"US Gross\":32241649,\"Worldwide Gross\":55534224,\"US DVD Sales\":12928344,\"Production Budget\":7000000,\"Release Date\":\"Feb 14 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Death at a Funeral\",\"US Gross\":42739347,\"Worldwide Gross\":42739347,\"US DVD Sales\":9750680,\"Production Budget\":21000000,\"Release Date\":\"Apr 16 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Neil LaBute\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.1,\"IMDB Votes\":6628},{\"Title\":\"DÈj‡ Vu\",\"US Gross\":64038616,\"Worldwide Gross\":181038616,\"US DVD Sales\":40502497,\"Production Budget\":80000000,\"Release Date\":\"Nov 22 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":126,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Tony Scott\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":66106},{\"Title\":\"Delgo\",\"US Gross\":915840,\"Worldwide Gross\":915840,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Dec 12 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":88,\"Distributor\":\"Freestyle Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":4.4,\"IMDB Votes\":1177},{\"Title\":\"Despicable Me\",\"US Gross\":244885070,\"Worldwide Gross\":333572855,\"US DVD Sales\":null,\"Production Budget\":69000000,\"Release Date\":\"Jul 09 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":95,\"Distributor\":\"Universal\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":7.7,\"IMDB Votes\":10529},{\"Title\":\"Deuce Bigalow: European Gigolo\",\"US Gross\":22400154,\"Worldwide Gross\":44400154,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Aug 12 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":4.3,\"IMDB Votes\":18228},{\"Title\":\"Deuce Bigalow: Male Gigolo\",\"US Gross\":65535067,\"Worldwide Gross\":92935067,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Dec 10 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":88,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":5.6,\"IMDB Votes\":25397},{\"Title\":\"The Devil's Own\",\"US Gross\":42885593,\"Worldwide Gross\":140900000,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Mar 26 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alan J. Pakula\",\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":5.8,\"IMDB Votes\":21331},{\"Title\":\"Darkness Falls\",\"US Gross\":32539681,\"Worldwide Gross\":32539681,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Jan 24 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":86,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":4.6,\"IMDB Votes\":12771},{\"Title\":\"Defiance\",\"US Gross\":28644813,\"Worldwide Gross\":42268745,\"US DVD Sales\":13421577,\"Production Budget\":50000000,\"Release Date\":\"Dec 31 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Edward Zwick\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":5.9,\"IMDB Votes\":362},{\"Title\":\"A Dog of Flanders\",\"US Gross\":2165637,\"Worldwide Gross\":2165637,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Aug 27 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.9,\"IMDB Votes\":482},{\"Title\":\"Dragonfly\",\"US Gross\":30063805,\"Worldwide Gross\":30063805,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Feb 22 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":104,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"Tom Shadyac\",\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":5.8,\"IMDB Votes\":14098},{\"Title\":\"The Dead Girl\",\"US Gross\":19875,\"Worldwide Gross\":19875,\"US DVD Sales\":null,\"Production Budget\":3300000,\"Release Date\":\"Dec 29 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"First Look\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":6.8,\"IMDB Votes\":7122},{\"Title\":\"The Lords of Dogtown\",\"US Gross\":11273517,\"Worldwide Gross\":11354893,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jun 03 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony/TriStar\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":\"Catherine Hardwicke\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Dick\",\"US Gross\":6276869,\"Worldwide Gross\":6276869,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Aug 04 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Andrew Fleming\",\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":6.1,\"IMDB Votes\":10451},{\"Title\":\"Live Free or Die Hard\",\"US Gross\":134529403,\"Worldwide Gross\":383531464,\"US DVD Sales\":100774964,\"Production Budget\":110000000,\"Release Date\":\"Jun 27 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":128,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Len Wiseman\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.5,\"IMDB Votes\":130559},{\"Title\":\"Digimon: The Movie\",\"US Gross\":9628751,\"Worldwide Gross\":16628751,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Oct 06 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.6,\"IMDB Votes\":1727},{\"Title\":\"Dirty Work\",\"US Gross\":10020081,\"Worldwide Gross\":10020081,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Jun 12 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":4.8,\"IMDB Votes\":207},{\"Title\":\"Banlieue 13\",\"US Gross\":1200216,\"Worldwide Gross\":11208291,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jun 02 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":85,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Pierre Morel\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":21427},{\"Title\":\"Disaster Movie\",\"US Gross\":14190901,\"Worldwide Gross\":34690901,\"US DVD Sales\":9859088,\"Production Budget\":20000000,\"Release Date\":\"Aug 29 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":88,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jason Friedberg\",\"Rotten Tomatoes Rating\":2,\"IMDB Rating\":1.7,\"IMDB Votes\":34928},{\"Title\":\"District 9\",\"US Gross\":115646235,\"Worldwide Gross\":206552113,\"US DVD Sales\":30058184,\"Production Budget\":30000000,\"Release Date\":\"Aug 14 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":111,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Neill Blomkamp\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8.3,\"IMDB Votes\":151742},{\"Title\":\"Disturbing Behavior\",\"US Gross\":17507368,\"Worldwide Gross\":17507368,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jul 24 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":83,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.2,\"IMDB Votes\":9394},{\"Title\":\"Le Scaphandre et le Papillon\",\"US Gross\":5990075,\"Worldwide Gross\":19689095,\"US DVD Sales\":2354497,\"Production Budget\":14000000,\"Release Date\":\"Nov 30 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Julian Schnabel\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8,\"IMDB Votes\":31172},{\"Title\":\"Dark Blue\",\"US Gross\":9237470,\"Worldwide Gross\":11933396,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Feb 21 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ron Shelton\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6.6,\"IMDB Votes\":10881},{\"Title\":\"Dreaming of Joseph Lees\",\"US Gross\":7680,\"Worldwide Gross\":7680,\"US DVD Sales\":null,\"Production Budget\":3250000,\"Release Date\":\"Oct 29 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":520},{\"Title\":\"De-Lovely\",\"US Gross\":13337299,\"Worldwide Gross\":18396382,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Jun 25 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":6.5,\"IMDB Votes\":6086},{\"Title\":\"Madea's Family Reunion\",\"US Gross\":63257940,\"Worldwide Gross\":63308879,\"US DVD Sales\":26508859,\"Production Budget\":10000000,\"Release Date\":\"Feb 24 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tyler Perry\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":3.9,\"IMDB Votes\":5369},{\"Title\":\"Dead Man on Campus\",\"US Gross\":15064948,\"Worldwide Gross\":15064948,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Aug 21 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":93,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":5.6,\"IMDB Votes\":7109},{\"Title\":\"Drowning Mona\",\"US Gross\":15427192,\"Worldwide Gross\":15427192,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Mar 03 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Destination Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":5.3,\"IMDB Votes\":7606},{\"Title\":\"Diamonds\",\"US Gross\":81897,\"Worldwide Gross\":81897,\"US DVD Sales\":null,\"Production Budget\":11900000,\"Release Date\":\"Dec 10 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.3,\"IMDB Votes\":976},{\"Title\":\"Doomsday\",\"US Gross\":11008770,\"Worldwide Gross\":21621188,\"US DVD Sales\":8666480,\"Production Budget\":33000000,\"Release Date\":\"Mar 14 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6,\"IMDB Votes\":34035},{\"Title\":\"Donkey Punch\",\"US Gross\":19367,\"Worldwide Gross\":19367,\"US DVD Sales\":null,\"Production Budget\":750000,\"Release Date\":\"Jan 23 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.4,\"IMDB Votes\":4551},{\"Title\":\"Dinosaur\",\"US Gross\":137748063,\"Worldwide Gross\":356148063,\"US DVD Sales\":null,\"Production Budget\":127500000,\"Release Date\":\"May 19 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":82,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":6.2,\"IMDB Votes\":13962},{\"Title\":\"DOA: Dead or Alive\",\"US Gross\":480314,\"Worldwide Gross\":2670860,\"US DVD Sales\":1370874,\"Production Budget\":30000000,\"Release Date\":\"Jun 15 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Weinstein/Dimension\",\"Source\":\"Based on Game\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Corey Yuen\",\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":4.9,\"IMDB Votes\":16646},{\"Title\":\"Doogal\",\"US Gross\":7578946,\"Worldwide Gross\":26942802,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 31 2005\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":2.5,\"IMDB Votes\":2709},{\"Title\":\"Dogma\",\"US Gross\":30651422,\"Worldwide Gross\":43948865,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Nov 12 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":135,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin Smith\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":7.3,\"IMDB Votes\":100476},{\"Title\":\"Domestic Disturbance\",\"US Gross\":45207112,\"Worldwide Gross\":45207112,\"US DVD Sales\":null,\"Production Budget\":53000000,\"Release Date\":\"Nov 02 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":89,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Harold Becker\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":5.3,\"IMDB Votes\":10778},{\"Title\":\"Domino\",\"US Gross\":10169202,\"Worldwide Gross\":17759202,\"US DVD Sales\":15573570,\"Production Budget\":50000000,\"Release Date\":\"Oct 14 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":133,\"Distributor\":\"New Line\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":\"Tony Scott\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5.9,\"IMDB Votes\":32560},{\"Title\":\"Donnie Brasco\",\"US Gross\":41954997,\"Worldwide Gross\":55954997,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Feb 28 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Mike Newell\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.7,\"IMDB Votes\":65462},{\"Title\":\"Doom\",\"US Gross\":28212337,\"Worldwide Gross\":54612337,\"US DVD Sales\":28563264,\"Production Budget\":70000000,\"Release Date\":\"Oct 21 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Game\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Andrzej Bartkowiak\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5.2,\"IMDB Votes\":39473},{\"Title\":\"Doubt\",\"US Gross\":33422556,\"Worldwide Gross\":50923043,\"US DVD Sales\":12876746,\"Production Budget\":20000000,\"Release Date\":\"Dec 12 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Doug's 1st Movie\",\"US Gross\":19421271,\"Worldwide Gross\":19421271,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Mar 26 1999\",\"MPAA Rating\":\"G\",\"Running Time min\":77,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.8,\"IMDB Votes\":920},{\"Title\":\"Downfall\",\"US Gross\":5501940,\"Worldwide Gross\":92101940,\"US DVD Sales\":null,\"Production Budget\":13500000,\"Release Date\":\"Feb 18 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Newmarket Films\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":404},{\"Title\":\"The Deep End\",\"US Gross\":8823109,\"Worldwide Gross\":8823109,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Aug 08 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.6,\"IMDB Votes\":6734},{\"Title\":\"Deep Impact\",\"US Gross\":140464664,\"Worldwide Gross\":349464664,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"May 08 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":120,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Mimi Leder\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6,\"IMDB Votes\":54160},{\"Title\":\"The Departed\",\"US Gross\":133311000,\"Worldwide Gross\":290539042,\"US DVD Sales\":140689412,\"Production Budget\":90000000,\"Release Date\":\"Oct 06 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":152,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":8.5,\"IMDB Votes\":264148},{\"Title\":\"Dracula 2000\",\"US Gross\":33000377,\"Worldwide Gross\":33000377,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Dec 22 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":99,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":4.8,\"IMDB Votes\":14077},{\"Title\":\"Death Race\",\"US Gross\":36316032,\"Worldwide Gross\":72516819,\"US DVD Sales\":24667330,\"Production Budget\":65000000,\"Release Date\":\"Aug 22 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":105,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Paul Anderson\",\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":6.6,\"IMDB Votes\":40611},{\"Title\":\"Drag Me To Hell\",\"US Gross\":42100625,\"Worldwide Gross\":85724728,\"US DVD Sales\":13123388,\"Production Budget\":30000000,\"Release Date\":\"May 29 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":99,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Sam Raimi\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.1,\"IMDB Votes\":51343},{\"Title\":\"Crouching Tiger, Hidden Dragon\",\"US Gross\":128067808,\"Worldwide Gross\":213200000,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 08 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":120,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Ang Lee\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Derailed\",\"US Gross\":36020063,\"Worldwide Gross\":54962616,\"US DVD Sales\":27718572,\"Production Budget\":22000000,\"Release Date\":\"Nov 11 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":3.4,\"IMDB Votes\":3317},{\"Title\":\"Doctor Dolittle 2\",\"US Gross\":112950721,\"Worldwide Gross\":176101721,\"US DVD Sales\":null,\"Production Budget\":72000000,\"Release Date\":\"Jun 22 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":87,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Steve Carr\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":2993},{\"Title\":\"Doctor Dolittle\",\"US Gross\":144156605,\"Worldwide Gross\":294156605,\"US DVD Sales\":null,\"Production Budget\":71500000,\"Release Date\":\"Jun 26 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":85,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Betty Thomas\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":25648},{\"Title\":\"Dickie Roberts: Former Child Star\",\"US Gross\":22734486,\"Worldwide Gross\":23734486,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Sep 05 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":6949},{\"Title\":\"Drillbit Taylor\",\"US Gross\":32862104,\"Worldwide Gross\":49686263,\"US DVD Sales\":12040874,\"Production Budget\":40000000,\"Release Date\":\"Mar 21 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.9,\"IMDB Votes\":19388},{\"Title\":\"Driving Lessons\",\"US Gross\":239962,\"Worldwide Gross\":239962,\"US DVD Sales\":null,\"Production Budget\":4700000,\"Release Date\":\"Oct 13 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"Sony Pictures Classics\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.7,\"IMDB Votes\":5380},{\"Title\":\"Driven\",\"US Gross\":32616869,\"Worldwide Gross\":54616869,\"US DVD Sales\":null,\"Production Budget\":72000000,\"Release Date\":\"Apr 27 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":117,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Renny Harlin\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.2,\"IMDB Votes\":18795},{\"Title\":\"Darkness\",\"US Gross\":22163442,\"Worldwide Gross\":34409206,\"US DVD Sales\":null,\"Production Budget\":10600000,\"Release Date\":\"Dec 25 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":4,\"IMDB Rating\":5.3,\"IMDB Votes\":9979},{\"Title\":\"I Dreamed of Africa\",\"US Gross\":6543194,\"Worldwide Gross\":6543194,\"US DVD Sales\":null,\"Production Budget\":34000000,\"Release Date\":\"May 05 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Hugh Hudson\",\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":5.2,\"IMDB Votes\":2298},{\"Title\":\"Dreamcatcher\",\"US Gross\":33685268,\"Worldwide Gross\":75685268,\"US DVD Sales\":null,\"Production Budget\":68000000,\"Release Date\":\"Mar 21 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":136,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Lawrence Kasdan\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.3,\"IMDB Votes\":34141},{\"Title\":\"Dreamgirls\",\"US Gross\":103365956,\"Worldwide Gross\":154965956,\"US DVD Sales\":53674555,\"Production Budget\":75000000,\"Release Date\":\"Dec 15 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":130,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Musical/Opera\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Bill Condon\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":6.6,\"IMDB Votes\":28016},{\"Title\":\"Detroit Rock City\",\"US Gross\":4217115,\"Worldwide Gross\":4217115,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Aug 13 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6.4,\"IMDB Votes\":15092},{\"Title\":\"Drop Dead Gorgeous\",\"US Gross\":10571408,\"Worldwide Gross\":10571408,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jul 23 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":6.2,\"IMDB Votes\":16344},{\"Title\":\"Drumline\",\"US Gross\":56398162,\"Worldwide Gross\":56398162,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 13 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":118,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":5.2,\"IMDB Votes\":18165},{\"Title\":\"The Legend of Drunken Master\",\"US Gross\":11546543,\"Worldwide Gross\":11546543,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Oct 20 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Dinner Rush\",\"US Gross\":638227,\"Worldwide Gross\":1075504,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Sep 28 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Access Motion Picture Group\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":2991},{\"Title\":\"The Descent\",\"US Gross\":26024456,\"Worldwide Gross\":57029609,\"US DVD Sales\":22484444,\"Production Budget\":7000000,\"Release Date\":\"Aug 04 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":99,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":58176},{\"Title\":\"DysFunkTional Family\",\"US Gross\":2255000,\"Worldwide Gross\":2255000,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Apr 04 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Concert/Performance\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":5.9,\"IMDB Votes\":501},{\"Title\":\"The Master of Disguise\",\"US Gross\":40363530,\"Worldwide Gross\":40363530,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Aug 02 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":80,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":2,\"IMDB Rating\":3,\"IMDB Votes\":10050},{\"Title\":\"Desert Blue\",\"US Gross\":99147,\"Worldwide Gross\":99147,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Jun 04 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Goldwyn Entertainment\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":1412},{\"Title\":\"Disturbia\",\"US Gross\":80209692,\"Worldwide Gross\":117573043,\"US DVD Sales\":34508128,\"Production Budget\":20000000,\"Release Date\":\"Apr 13 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":104,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"D.J. Caruso\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":7,\"IMDB Votes\":72231},{\"Title\":\"Double Take\",\"US Gross\":29823162,\"Worldwide Gross\":29823162,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Jan 12 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":88,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":6.8,\"IMDB Votes\":162},{\"Title\":\"Death at a Funeral\",\"US Gross\":8580428,\"Worldwide Gross\":34743644,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Aug 17 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":90,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Frank Oz\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":5.1,\"IMDB Votes\":6628},{\"Title\":\"Deterrence\",\"US Gross\":144583,\"Worldwide Gross\":371647,\"US DVD Sales\":null,\"Production Budget\":800000,\"Release Date\":\"Mar 10 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":6.3,\"IMDB Votes\":1776},{\"Title\":\"Dirty Pretty Things\",\"US Gross\":8112414,\"Worldwide Gross\":13904766,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jul 18 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stephen Frears\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":18554},{\"Title\":\"Dudley Do-Right\",\"US Gross\":9818792,\"Worldwide Gross\":9818792,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Aug 27 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Hugh Wilson\",\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":3.6,\"IMDB Votes\":4628},{\"Title\":\"Duets\",\"US Gross\":4734235,\"Worldwide Gross\":4734235,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Sep 15 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":5.7,\"IMDB Votes\":5340},{\"Title\":\"The Dukes of Hazzard\",\"US Gross\":80270227,\"Worldwide Gross\":110570227,\"US DVD Sales\":null,\"Production Budget\":53000000,\"Release Date\":\"Aug 05 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":105,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jay Chandrasekhar\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.7,\"IMDB Votes\":27016},{\"Title\":\"Duma\",\"US Gross\":870067,\"Worldwide Gross\":994790,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Sep 30 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":7.2,\"IMDB Votes\":2966},{\"Title\":\"Dumb and Dumberer: When Harry Met Lloyd\",\"US Gross\":26214846,\"Worldwide Gross\":26214846,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jun 13 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":85,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":3.3,\"IMDB Votes\":14813},{\"Title\":\"Dungeons & Dragons 2: The Elemental Might\",\"US Gross\":0,\"Worldwide Gross\":909822,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Oct 08 2005\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Game\",\"Major Genre\":null,\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Dungeons and Dragons\",\"US Gross\":15185241,\"Worldwide Gross\":33771965,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Dec 08 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Game\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.6,\"IMDB Votes\":16954},{\"Title\":\"Duplex\",\"US Gross\":9652000,\"Worldwide Gross\":10070651,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Sep 26 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Danny De Vito\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":19238},{\"Title\":\"You, Me and Dupree\",\"US Gross\":75802010,\"Worldwide Gross\":130402010,\"US DVD Sales\":41651251,\"Production Budget\":54000000,\"Release Date\":\"Jul 14 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":6.1,\"IMDB Votes\":164},{\"Title\":\"Devil's Advocate\",\"US Gross\":61007424,\"Worldwide Gross\":153007424,\"US DVD Sales\":null,\"Production Budget\":57000000,\"Release Date\":\"Oct 17 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":144,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Taylor Hackford\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Da Vinci Code\",\"US Gross\":217536138,\"Worldwide Gross\":757236138,\"US DVD Sales\":100178981,\"Production Budget\":125000000,\"Release Date\":\"May 19 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ron Howard\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":6.4,\"IMDB Votes\":116903},{\"Title\":\"D-War\",\"US Gross\":10977721,\"Worldwide Gross\":79915361,\"US DVD Sales\":7614486,\"Production Budget\":32000000,\"Release Date\":\"Sep 14 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":90,\"Distributor\":\"Freestyle Releasing\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.8,\"IMDB Votes\":14081},{\"Title\":\"Deuces Wild\",\"US Gross\":6044618,\"Worldwide Gross\":6044618,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"May 03 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":3,\"IMDB Rating\":5.3,\"IMDB Votes\":4010},{\"Title\":\"Down to Earth\",\"US Gross\":64172251,\"Worldwide Gross\":71172251,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Feb 16 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":87,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Paul Weitz\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5,\"IMDB Votes\":9193},{\"Title\":\"Down to You\",\"US Gross\":20035310,\"Worldwide Gross\":20035310,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Jan 21 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":92,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":3,\"IMDB Rating\":4.4,\"IMDB Votes\":7095},{\"Title\":\"I'm Not There\",\"US Gross\":4017609,\"Worldwide Gross\":11498547,\"US DVD Sales\":6017494,\"Production Budget\":20000000,\"Release Date\":\"Nov 21 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Todd Haynes\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.1,\"IMDB Votes\":23078},{\"Title\":\"Easy A\",\"US Gross\":21056221,\"Worldwide Gross\":22156221,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Sep 17 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":7.7,\"IMDB Votes\":483},{\"Title\":\"The Eclipse\",\"US Gross\":133411,\"Worldwide Gross\":133411,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Feb 26 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":790},{\"Title\":\"Edge of Darkness\",\"US Gross\":43313890,\"Worldwide Gross\":78739628,\"US DVD Sales\":12665512,\"Production Budget\":60000000,\"Release Date\":\"Jan 29 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martin Campbell\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.7,\"IMDB Votes\":24174},{\"Title\":\"EDtv\",\"US Gross\":22508689,\"Worldwide Gross\":35319689,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Mar 26 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":122,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ron Howard\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":6,\"IMDB Votes\":21734},{\"Title\":\"An Education\",\"US Gross\":12574914,\"Worldwide Gross\":14134502,\"US DVD Sales\":1765115,\"Production Budget\":7500000,\"Release Date\":\"Oct 09 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Factual Book/Article\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.5,\"IMDB Votes\":22855},{\"Title\":\"East is East\",\"US Gross\":4170647,\"Worldwide Gross\":4170647,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Apr 14 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":8351},{\"Title\":\"8 Heads in a Duffel Bag\",\"US Gross\":3602884,\"Worldwide Gross\":4002884,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Apr 18 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Orion Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":4.8,\"IMDB Votes\":5127},{\"Title\":\"Eagle Eye\",\"US Gross\":101440743,\"Worldwide Gross\":178066569,\"US DVD Sales\":38374936,\"Production Budget\":80000000,\"Release Date\":\"Sep 26 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":117,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"D.J. Caruso\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":6.6,\"IMDB Votes\":52336},{\"Title\":\"8MM\",\"US Gross\":36443442,\"Worldwide Gross\":96398826,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Feb 26 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":119,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Schumacher\",\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":6.3,\"IMDB Votes\":47753},{\"Title\":\"Iris\",\"US Gross\":5580479,\"Worldwide Gross\":15035827,\"US DVD Sales\":null,\"Production Budget\":5500000,\"Release Date\":\"Dec 14 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":5.8,\"IMDB Votes\":44},{\"Title\":\"Election\",\"US Gross\":14943582,\"Worldwide Gross\":14943582,\"US DVD Sales\":null,\"Production Budget\":8500000,\"Release Date\":\"Apr 23 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":103,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alexander Payne\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.4,\"IMDB Votes\":37454},{\"Title\":\"Elektra\",\"US Gross\":24409722,\"Worldwide Gross\":56409722,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Jan 14 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Spin-Off\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":4.9,\"IMDB Votes\":27283},{\"Title\":\"Elf\",\"US Gross\":173398518,\"Worldwide Gross\":220443451,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Nov 07 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":95,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Jon Favreau\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.8,\"IMDB Votes\":42123},{\"Title\":\"Elizabeth\",\"US Gross\":30082699,\"Worldwide Gross\":82150642,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Nov 06 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":124,\"Distributor\":\"Gramercy\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Shekhar Kapur\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.6,\"IMDB Votes\":33773},{\"Title\":\"Ella Enchanted\",\"US Gross\":22913677,\"Worldwide Gross\":22913677,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Apr 09 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":96,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":6.3,\"IMDB Votes\":12020},{\"Title\":\"Once Upon a Time in Mexico\",\"US Gross\":56330657,\"Worldwide Gross\":98156459,\"US DVD Sales\":null,\"Production Budget\":29000000,\"Release Date\":\"Sep 12 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":102,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Rodriguez\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":6.2,\"IMDB Votes\":54413},{\"Title\":\"The Adventures of Elmo in Grouchland\",\"US Gross\":11634458,\"Worldwide Gross\":11634458,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Oct 01 1999\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":5.4,\"IMDB Votes\":1059},{\"Title\":\"The Emperor's Club\",\"US Gross\":14060950,\"Worldwide Gross\":16124074,\"US DVD Sales\":null,\"Production Budget\":12500000,\"Release Date\":\"Nov 22 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.7,\"IMDB Votes\":8165},{\"Title\":\"Empire\",\"US Gross\":17504595,\"Worldwide Gross\":18495444,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Dec 06 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":6.5,\"IMDB Votes\":63},{\"Title\":\"La marche de l'empereur\",\"US Gross\":77437223,\"Worldwide Gross\":129437223,\"US DVD Sales\":null,\"Production Budget\":3400000,\"Release Date\":\"Jun 24 2005\",\"MPAA Rating\":\"G\",\"Running Time min\":80,\"Distributor\":\"Warner Independent\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":23674},{\"Title\":\"Employee of the Month\",\"US Gross\":28444855,\"Worldwide Gross\":38117718,\"US DVD Sales\":21177885,\"Production Budget\":10000000,\"Release Date\":\"Oct 06 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":103,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":5.4,\"IMDB Votes\":17845},{\"Title\":\"The Emperor's New Groove\",\"US Gross\":89296573,\"Worldwide Gross\":169296573,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Dec 15 2000\",\"MPAA Rating\":\"G\",\"Running Time min\":78,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Mark Dindal\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":7.4,\"IMDB Votes\":23355},{\"Title\":\"Enchanted\",\"US Gross\":127706877,\"Worldwide Gross\":340384141,\"US DVD Sales\":87698079,\"Production Budget\":85000000,\"Release Date\":\"Nov 21 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":108,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Kevin Lima\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.5,\"IMDB Votes\":55697},{\"Title\":\"The End of the Affair\",\"US Gross\":10660147,\"Worldwide Gross\":10660147,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Dec 03 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Neil Jordan\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.9,\"IMDB Votes\":9969},{\"Title\":\"End of Days\",\"US Gross\":66889043,\"Worldwide Gross\":212026975,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Nov 24 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Peter Hyams\",\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":5.4,\"IMDB Votes\":43513},{\"Title\":\"End of the Spear\",\"US Gross\":11748661,\"Worldwide Gross\":11748661,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jan 20 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"M Power Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":2884},{\"Title\":\"Enemy at the Gates\",\"US Gross\":51396781,\"Worldwide Gross\":96971293,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Mar 16 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":131,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Jean-Jacques Annaud\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":7.4,\"IMDB Votes\":59916},{\"Title\":\"Enemy of the State\",\"US Gross\":111549836,\"Worldwide Gross\":250649836,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Nov 20 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":127,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tony Scott\",\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":7.2,\"IMDB Votes\":66700},{\"Title\":\"Entrapment\",\"US Gross\":87707396,\"Worldwide Gross\":211700000,\"US DVD Sales\":null,\"Production Budget\":66000000,\"Release Date\":\"Apr 30 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":112,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jon Amiel\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":6.1,\"IMDB Votes\":40764},{\"Title\":\"Enough\",\"US Gross\":39177215,\"Worldwide Gross\":39177215,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"May 24 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":115,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Apted\",\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":6.5,\"IMDB Votes\":92},{\"Title\":\"Envy\",\"US Gross\":13548322,\"Worldwide Gross\":14566246,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Apr 30 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Barry Levinson\",\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":4.6,\"IMDB Votes\":15655},{\"Title\":\"Epic Movie\",\"US Gross\":39739367,\"Worldwide Gross\":86858578,\"US DVD Sales\":16839362,\"Production Budget\":20000000,\"Release Date\":\"Jan 26 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":86,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jason Friedberg\",\"Rotten Tomatoes Rating\":2,\"IMDB Rating\":2.2,\"IMDB Votes\":48975},{\"Title\":\"Eragon\",\"US Gross\":75030163,\"Worldwide Gross\":249488115,\"US DVD Sales\":87700229,\"Production Budget\":100000000,\"Release Date\":\"Dec 15 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":102,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":5,\"IMDB Votes\":43555},{\"Title\":\"Erin Brockovich\",\"US Gross\":125548685,\"Worldwide Gross\":258400000,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Mar 17 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":133,\"Distributor\":\"Universal\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Steven Soderbergh\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.2,\"IMDB Votes\":54977},{\"Title\":\"Elizabethtown\",\"US Gross\":26850426,\"Worldwide Gross\":50719373,\"US DVD Sales\":15854391,\"Production Budget\":54000000,\"Release Date\":\"Oct 14 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":133,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Cameron Crowe\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":6.4,\"IMDB Votes\":31775},{\"Title\":\"Eat Pray Love\",\"US Gross\":78146373,\"Worldwide Gross\":81846373,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Aug 13 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":143,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Magazine Article\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":4.7,\"IMDB Votes\":3019},{\"Title\":\"Eternal Sunshine of the Spotless Mind\",\"US Gross\":34366518,\"Worldwide Gross\":47066518,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Mar 19 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Michel Gondry\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":8.5,\"IMDB Votes\":219986},{\"Title\":\"Eulogy\",\"US Gross\":70527,\"Worldwide Gross\":70527,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 15 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":6.6,\"IMDB Votes\":5205},{\"Title\":\"Eureka\",\"US Gross\":49388,\"Worldwide Gross\":76654,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"May 04 2001\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.9,\"IMDB Votes\":1391},{\"Title\":\"Eurotrip\",\"US Gross\":17718223,\"Worldwide Gross\":20718223,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Feb 20 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.5,\"IMDB Votes\":52548},{\"Title\":\"Eve's Bayou\",\"US Gross\":14843425,\"Worldwide Gross\":14843425,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Nov 07 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"Trimark\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Kasi Lemmons\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":7,\"IMDB Votes\":4509},{\"Title\":\"Event Horizon\",\"US Gross\":26673242,\"Worldwide Gross\":26673242,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Aug 15 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":95,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Paul Anderson\",\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":6.3,\"IMDB Votes\":44671},{\"Title\":\"Ever After: A Cinderella Story\",\"US Gross\":65705772,\"Worldwide Gross\":65705772,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Jul 31 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":122,\"Distributor\":\"20th Century Fox\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Andy Tennant\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Evita\",\"US Gross\":50047179,\"Worldwide Gross\":151947179,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Dec 25 1996\",\"MPAA Rating\":\"PG\",\"Running Time min\":134,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Musical/Opera\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Dramatization\",\"Director\":\"Alan Parker\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6.1,\"IMDB Votes\":16769},{\"Title\":\"Evolution\",\"US Gross\":38311134,\"Worldwide Gross\":98341932,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jun 08 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":102,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ivan Reitman\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":5.9,\"IMDB Votes\":39590},{\"Title\":\"An Everlasting Piece\",\"US Gross\":75078,\"Worldwide Gross\":75078,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Dec 25 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Barry Levinson\",\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":6,\"IMDB Votes\":1097},{\"Title\":\"Fong juk\",\"US Gross\":51957,\"Worldwide Gross\":51957,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Aug 31 2007\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":100,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":3699},{\"Title\":\"Exit Wounds\",\"US Gross\":51758599,\"Worldwide Gross\":79958599,\"US DVD Sales\":null,\"Production Budget\":33000000,\"Release Date\":\"Mar 16 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andrzej Bartkowiak\",\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.2,\"IMDB Votes\":14528},{\"Title\":\"The Exorcism of Emily Rose\",\"US Gross\":75072454,\"Worldwide Gross\":144216468,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Sep 09 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":114,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Dramatization\",\"Director\":\"Scott Derrickson\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":6.8,\"IMDB Votes\":32425},{\"Title\":\"Exorcist: The Beginning\",\"US Gross\":41814863,\"Worldwide Gross\":43957541,\"US DVD Sales\":null,\"Production Budget\":78000000,\"Release Date\":\"Aug 20 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":114,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Renny Harlin\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5,\"IMDB Votes\":15901},{\"Title\":\"The Express\",\"US Gross\":9793406,\"Worldwide Gross\":9808102,\"US DVD Sales\":6580715,\"Production Budget\":37500000,\"Release Date\":\"Oct 04 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":129,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":7.1,\"IMDB Votes\":4749},{\"Title\":\"eXistenZ\",\"US Gross\":2840417,\"Worldwide Gross\":2840417,\"US DVD Sales\":null,\"Production Budget\":20700000,\"Release Date\":\"Apr 23 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"David Cronenberg\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.8,\"IMDB Votes\":35788},{\"Title\":\"Extract\",\"US Gross\":10823158,\"Worldwide Gross\":10849158,\"US DVD Sales\":null,\"Production Budget\":7500000,\"Release Date\":\"Sep 04 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mike Judge\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":6.4,\"IMDB Votes\":12371},{\"Title\":\"Extreme Ops\",\"US Gross\":4835968,\"Worldwide Gross\":12624471,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Nov 27 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Christian Duguay\",\"Rotten Tomatoes Rating\":6,\"IMDB Rating\":4.1,\"IMDB Votes\":3195},{\"Title\":\"Eyes Wide Shut\",\"US Gross\":55691208,\"Worldwide Gross\":86257553,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Jul 16 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":159,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stanley Kubrick\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7.2,\"IMDB Votes\":93880},{\"Title\":\"The Faculty\",\"US Gross\":40283321,\"Worldwide Gross\":40283321,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 25 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":102,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Rodriguez\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":6.3,\"IMDB Votes\":36139},{\"Title\":\"Failure to Launch\",\"US Gross\":88715192,\"Worldwide Gross\":128402901,\"US DVD Sales\":41348843,\"Production Budget\":50000000,\"Release Date\":\"Mar 10 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tom Dey\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":5.6,\"IMDB Votes\":20324},{\"Title\":\"Keeping the Faith\",\"US Gross\":37036404,\"Worldwide Gross\":45336404,\"US DVD Sales\":null,\"Production Budget\":29000000,\"Release Date\":\"Apr 14 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":129,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":6.5,\"IMDB Votes\":25485},{\"Title\":\"Fame\",\"US Gross\":22455510,\"Worldwide Gross\":77956957,\"US DVD Sales\":4950732,\"Production Budget\":18000000,\"Release Date\":\"Sep 25 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Remake\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":4.5,\"IMDB Votes\":4973},{\"Title\":\"The Family Stone\",\"US Gross\":60062868,\"Worldwide Gross\":91762868,\"US DVD Sales\":23961409,\"Production Budget\":18000000,\"Release Date\":\"Dec 16 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":103,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":6.3,\"IMDB Votes\":24434},{\"Title\":\"Lisa Picard is Famous\",\"US Gross\":113433,\"Worldwide Gross\":113433,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Aug 22 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Griffin Dunne\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Fantasia 2000 (Theatrical Release)\",\"US Gross\":9103630,\"Worldwide Gross\":9103630,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jun 16 2000\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Compilation\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Far From Heaven\",\"US Gross\":15901849,\"Worldwide Gross\":29027914,\"US DVD Sales\":null,\"Production Budget\":13500000,\"Release Date\":\"Nov 08 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Todd Haynes\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.5,\"IMDB Votes\":20239},{\"Title\":\"Fascination\",\"US Gross\":16670,\"Worldwide Gross\":83356,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Jan 28 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":2.5,\"IMDB Votes\":1016},{\"Title\":\"Father's Day\",\"US Gross\":28681080,\"Worldwide Gross\":35681080,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"May 09 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ivan Reitman\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.8,\"IMDB Votes\":6654},{\"Title\":\"Facing the Giants\",\"US Gross\":10178331,\"Worldwide Gross\":10178331,\"US DVD Sales\":20091582,\"Production Budget\":100000,\"Release Date\":\"Sep 29 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"IDP/Goldwyn/Roadside\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alex Kendrick\",\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":6,\"IMDB Votes\":4901},{\"Title\":\"Face/Off\",\"US Gross\":112276146,\"Worldwide Gross\":241200000,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jun 27 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":138,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Woo\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":7.3,\"IMDB Votes\":102001},{\"Title\":\"Final Destination 2\",\"US Gross\":46896664,\"Worldwide Gross\":89626226,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Jan 31 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":90,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"David R. Ellis\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6.4,\"IMDB Votes\":35737},{\"Title\":\"Final Destination 3\",\"US Gross\":54098051,\"Worldwide Gross\":112798051,\"US DVD Sales\":18646884,\"Production Budget\":25000000,\"Release Date\":\"Feb 10 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"James Wong\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":5.9,\"IMDB Votes\":32263},{\"Title\":\"The Final Destination\",\"US Gross\":66477700,\"Worldwide Gross\":185777700,\"US DVD Sales\":10148305,\"Production Budget\":40000000,\"Release Date\":\"Aug 28 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"David R. Ellis\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":4.9,\"IMDB Votes\":20319},{\"Title\":\"FearDotCom\",\"US Gross\":13208023,\"Worldwide Gross\":13208023,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Aug 30 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"William Malone\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.1,\"IMDB Votes\":11438},{\"Title\":\"Fear and Loathing in Las Vegas\",\"US Gross\":10680275,\"Worldwide Gross\":13711903,\"US DVD Sales\":null,\"Production Budget\":18500000,\"Release Date\":\"May 22 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Dramatization\",\"Director\":\"Terry Gilliam\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":7.6,\"IMDB Votes\":81560},{\"Title\":\"Feast\",\"US Gross\":56131,\"Worldwide Gross\":341808,\"US DVD Sales\":3570398,\"Production Budget\":3200000,\"Release Date\":\"Sep 22 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.4,\"IMDB Votes\":12023},{\"Title\":\"The Fifth Element\",\"US Gross\":63570862,\"Worldwide Gross\":263900000,\"US DVD Sales\":null,\"Production Budget\":95000000,\"Release Date\":\"May 09 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":105,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Luc Besson\",\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":7.4,\"IMDB Votes\":131252},{\"Title\":\"Femme Fatale\",\"US Gross\":6592103,\"Worldwide Gross\":6592103,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Nov 06 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.3,\"IMDB Votes\":16693},{\"Title\":\"Bring it On\",\"US Gross\":68353550,\"Worldwide Gross\":90453550,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Aug 25 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":99,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peyton Reed\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":5.9,\"IMDB Votes\":30309},{\"Title\":\"Fantastic Four\",\"US Gross\":154696080,\"Worldwide Gross\":330579719,\"US DVD Sales\":4702358,\"Production Budget\":87500000,\"Release Date\":\"Jul 08 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":123,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Tim Story\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":5.7,\"IMDB Votes\":71675},{\"Title\":54,\"US Gross\":16757163,\"Worldwide Gross\":16757163,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Aug 28 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":92,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.6,\"IMDB Votes\":15023},{\"Title\":\"2 Fast 2 Furious\",\"US Gross\":127120058,\"Worldwide Gross\":236220058,\"US DVD Sales\":null,\"Production Budget\":76000000,\"Release Date\":\"Jun 06 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":107,\"Distributor\":\"Universal\",\"Source\":\"Based on Magazine Article\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Singleton\",\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":5.1,\"IMDB Votes\":44151},{\"Title\":\"The Fast and the Furious\",\"US Gross\":144512310,\"Worldwide Gross\":206512310,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Jun 22 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":107,\"Distributor\":\"Universal\",\"Source\":\"Based on Magazine Article\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rob Cohen\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":6,\"IMDB Votes\":67939},{\"Title\":\"Fool's Gold\",\"US Gross\":70231041,\"Worldwide Gross\":109362966,\"US DVD Sales\":20620930,\"Production Budget\":72500000,\"Release Date\":\"Feb 08 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andy Tennant\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":93},{\"Title\":\"Fahrenheit 9/11\",\"US Gross\":119114517,\"Worldwide Gross\":222414517,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Jun 23 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":122,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":\"Michael Moore\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.6,\"IMDB Votes\":74424},{\"Title\":\"Capitalism: A Love Story\",\"US Gross\":14363397,\"Worldwide Gross\":14678228,\"US DVD Sales\":2987505,\"Production Budget\":20000000,\"Release Date\":\"Sep 23 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Overture Films\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":\"Michael Moore\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":7.3,\"IMDB Votes\":11829},{\"Title\":\"From Hell\",\"US Gross\":31598308,\"Worldwide Gross\":31598308,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Oct 19 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":123,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Albert Hughes\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6.8,\"IMDB Votes\":53477},{\"Title\":\"Fido\",\"US Gross\":298110,\"Worldwide Gross\":419801,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Jun 15 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":93,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":11683},{\"Title\":\"Fight Club\",\"US Gross\":37030102,\"Worldwide Gross\":100853753,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Oct 15 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":139,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Fincher\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":8.8,\"IMDB Votes\":382470},{\"Title\":\"Final Fantasy: The Spirits Within\",\"US Gross\":32131830,\"Worldwide Gross\":85131830,\"US DVD Sales\":null,\"Production Budget\":137000000,\"Release Date\":\"Jul 11 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":120,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Game\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":36227},{\"Title\":\"Finding Forrester\",\"US Gross\":51768623,\"Worldwide Gross\":80013623,\"US DVD Sales\":null,\"Production Budget\":43000000,\"Release Date\":\"Dec 19 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":137,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gus Van Sant\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":7.2,\"IMDB Votes\":35966},{\"Title\":\"Freddy Got Fingered\",\"US Gross\":14249005,\"Worldwide Gross\":14249005,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Apr 20 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":4,\"IMDB Votes\":25033},{\"Title\":\"Firestorm\",\"US Gross\":8123860,\"Worldwide Gross\":8123860,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Jan 09 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.4,\"IMDB Votes\":2118},{\"Title\":\"Fish Tank\",\"US Gross\":374675,\"Worldwide Gross\":374675,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Jan 15 2010\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":5940},{\"Title\":\"Felicia's Journey\",\"US Gross\":824295,\"Worldwide Gross\":1970268,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Nov 12 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Atom Egoyan\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":6.9,\"IMDB Votes\":4790},{\"Title\":\"From Justin to Kelly\",\"US Gross\":4922166,\"Worldwide Gross\":4922166,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jun 20 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on TV\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":1.6,\"IMDB Votes\":17596},{\"Title\":\"Final Destination\",\"US Gross\":53302314,\"Worldwide Gross\":112802314,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Mar 17 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":98,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"James Wong\",\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":6.8,\"IMDB Votes\":52618},{\"Title\":\"Flags of Our Fathers\",\"US Gross\":33602376,\"Worldwide Gross\":61902376,\"US DVD Sales\":45105366,\"Production Budget\":53000000,\"Release Date\":\"Oct 20 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Clint Eastwood\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":7.2,\"IMDB Votes\":42788},{\"Title\":\"Flawless\",\"US Gross\":4485485,\"Worldwide Gross\":4485485,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Nov 24 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Schumacher\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":6.7,\"IMDB Votes\":8125},{\"Title\":\"Flammen og Citronen\",\"US Gross\":148089,\"Worldwide Gross\":1635241,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Jul 31 2009\",\"MPAA Rating\":null,\"Running Time min\":132,\"Distributor\":\"IFC Films\",\"Source\":null,\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":4182},{\"Title\":\"Flicka\",\"US Gross\":21000147,\"Worldwide Gross\":21893591,\"US DVD Sales\":49974754,\"Production Budget\":15000000,\"Release Date\":\"Oct 20 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":94,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":5.7,\"IMDB Votes\":2832},{\"Title\":\"Flight of the Phoenix\",\"US Gross\":21009180,\"Worldwide Gross\":34009180,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Dec 17 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":6,\"IMDB Votes\":18568},{\"Title\":\"United 93\",\"US Gross\":31567134,\"Worldwide Gross\":76366864,\"US DVD Sales\":17832230,\"Production Budget\":18000000,\"Release Date\":\"Apr 28 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Paul Greengrass\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7.8,\"IMDB Votes\":46691},{\"Title\":\"Flubber\",\"US Gross\":92993801,\"Worldwide Gross\":177993801,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Nov 26 1997\",\"MPAA Rating\":\"PG\",\"Running Time min\":93,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Les Mayfield\",\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":4.6,\"IMDB Votes\":18890},{\"Title\":\"Flushed Away\",\"US Gross\":64665672,\"Worldwide Gross\":177665672,\"US DVD Sales\":71025931,\"Production Budget\":149000000,\"Release Date\":\"Nov 03 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":85,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Sam Fell\",\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":7,\"IMDB Votes\":21334},{\"Title\":\"Flyboys\",\"US Gross\":13090630,\"Worldwide Gross\":14816379,\"US DVD Sales\":23631077,\"Production Budget\":60000000,\"Release Date\":\"Sep 22 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":139,\"Distributor\":\"MGM\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Tony Bill\",\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":6.5,\"IMDB Votes\":13934},{\"Title\":\"Fly Me To the Moon\",\"US Gross\":14543943,\"Worldwide Gross\":40098231,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Aug 15 2008\",\"MPAA Rating\":\"G\",\"Running Time min\":89,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":4.7,\"IMDB Votes\":1653},{\"Title\":\"Find Me Guilty\",\"US Gross\":1173673,\"Worldwide Gross\":1788077,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Mar 17 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Freestyle Releasing\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Sidney Lumet\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":7.1,\"IMDB Votes\":12800},{\"Title\":\"The Family Man\",\"US Gross\":75764085,\"Worldwide Gross\":124715863,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Dec 22 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":126,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brett Ratner\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":6.6,\"IMDB Votes\":34090},{\"Title\":\"Friends with Money\",\"US Gross\":13368437,\"Worldwide Gross\":15328368,\"US DVD Sales\":7822762,\"Production Budget\":6500000,\"Release Date\":\"Apr 07 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.1,\"IMDB Votes\":11087},{\"Title\":\"Finding Nemo\",\"US Gross\":339714978,\"Worldwide Gross\":867894287,\"US DVD Sales\":null,\"Production Budget\":94000000,\"Release Date\":\"May 30 2003\",\"MPAA Rating\":\"G\",\"Running Time min\":100,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Andrew Stanton\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.2,\"IMDB Votes\":165006},{\"Title\":\"Finishing the Game\",\"US Gross\":52850,\"Worldwide Gross\":52850,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Oct 05 2007\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"IFC First Take\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Justin Lin\",\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Foodfight!\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Dec 31 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Formula 51\",\"US Gross\":5204007,\"Worldwide Gross\":5204007,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Oct 18 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Screen Media Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Fountain\",\"US Gross\":10144010,\"Worldwide Gross\":15461638,\"US DVD Sales\":8752844,\"Production Budget\":35000000,\"Release Date\":\"Nov 22 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":96,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Darren Aronofsky\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":7.4,\"IMDB Votes\":72562},{\"Title\":\"Fantastic Four: Rise of the Silver Surfer\",\"US Gross\":131921738,\"Worldwide Gross\":288215319,\"US DVD Sales\":62277740,\"Production Budget\":120000000,\"Release Date\":\"Jun 15 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":92,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Tim Story\",\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Farce of the Penguins\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":1619183,\"Production Budget\":5000000,\"Release Date\":\"Jan 30 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.1,\"IMDB Votes\":3186},{\"Title\":\"Flightplan\",\"US Gross\":89706988,\"Worldwide Gross\":225706988,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Sep 23 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":93,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":6.2,\"IMDB Votes\":45305},{\"Title\":\"Frailty\",\"US Gross\":13110448,\"Worldwide Gross\":17423030,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Apr 12 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":7.3,\"IMDB Votes\":27629},{\"Title\":\"The Forbidden Kingdom\",\"US Gross\":52075270,\"Worldwide Gross\":129075270,\"US DVD Sales\":23318686,\"Production Budget\":55000000,\"Release Date\":\"Apr 18 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":105,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Rob Minkoff\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.7,\"IMDB Votes\":36548},{\"Title\":\"Freedom Writers\",\"US Gross\":36605602,\"Worldwide Gross\":43090741,\"US DVD Sales\":20532539,\"Production Budget\":21000000,\"Release Date\":\"Jan 05 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":122,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Richard LaGravenese\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":7.5,\"IMDB Votes\":18065},{\"Title\":\"Next Friday\",\"US Gross\":57176582,\"Worldwide Gross\":59675307,\"US DVD Sales\":null,\"Production Budget\":9500000,\"Release Date\":\"Jan 12 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":98,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steve Carr\",\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":5.3,\"IMDB Votes\":10176},{\"Title\":\"Freaky Friday\",\"US Gross\":110222438,\"Worldwide Gross\":160822438,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Aug 06 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":97,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mark Waters\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":6.5,\"IMDB Votes\":29137},{\"Title\":\"Frequency\",\"US Gross\":44983704,\"Worldwide Gross\":68079671,\"US DVD Sales\":null,\"Production Budget\":31000000,\"Release Date\":\"Apr 28 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":118,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":7.3,\"IMDB Votes\":35968},{\"Title\":\"Serenity\",\"US Gross\":25514517,\"Worldwide Gross\":38514517,\"US DVD Sales\":null,\"Production Budget\":39000000,\"Release Date\":\"Sep 30 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":119,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Joss Whedon\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":8,\"IMDB Votes\":106648},{\"Title\":\"The Forgotton\",\"US Gross\":66711892,\"Worldwide Gross\":111311892,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Sep 24 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":91,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joseph Ruben\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":1169},{\"Title\":\"Jason X\",\"US Gross\":13121555,\"Worldwide Gross\":16951798,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Apr 26 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":4.4,\"IMDB Votes\":17964},{\"Title\":\"Friday the 13th\",\"US Gross\":65002019,\"Worldwide Gross\":91700771,\"US DVD Sales\":9566980,\"Production Budget\":17000000,\"Release Date\":\"Feb 13 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.6,\"IMDB Votes\":26798},{\"Title\":\"Friday After Next\",\"US Gross\":33253609,\"Worldwide Gross\":33526835,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Nov 22 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":85,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":5.3,\"IMDB Votes\":6742},{\"Title\":\"Frida\",\"US Gross\":25885000,\"Worldwide Gross\":56298474,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Oct 25 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":123,\"Distributor\":\"Miramax\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.3,\"IMDB Votes\":26243},{\"Title\":\"Friday Night Lights\",\"US Gross\":61255921,\"Worldwide Gross\":61950770,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Oct 08 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":117,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Berg\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.2,\"IMDB Votes\":20868},{\"Title\":\"Frozen River\",\"US Gross\":2503902,\"Worldwide Gross\":5281776,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Aug 01 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.2,\"IMDB Votes\":10447},{\"Title\":\"The Princess and the Frog\",\"US Gross\":104374107,\"Worldwide Gross\":263467382,\"US DVD Sales\":68101150,\"Production Budget\":105000000,\"Release Date\":\"Nov 25 2009\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"John Musker\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7.4,\"IMDB Votes\":16232},{\"Title\":\"Full Frontal\",\"US Gross\":2512846,\"Worldwide Gross\":3438804,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Aug 02 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steven Soderbergh\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":4.8,\"IMDB Votes\":6660},{\"Title\":\"Fireproof\",\"US Gross\":33451479,\"Worldwide Gross\":33451479,\"US DVD Sales\":31898934,\"Production Budget\":500000,\"Release Date\":\"Sep 26 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":122,\"Distributor\":\"Samuel Goldwyn Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alex Kendrick\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":5.6,\"IMDB Votes\":5498},{\"Title\":\"The Forsaken\",\"US Gross\":6755271,\"Worldwide Gross\":6755271,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Apr 27 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":5.1,\"IMDB Votes\":4679},{\"Title\":\"Frost/Nixon\",\"US Gross\":18622031,\"Worldwide Gross\":28144586,\"US DVD Sales\":6677601,\"Production Budget\":29000000,\"Release Date\":\"Dec 05 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":122,\"Distributor\":\"Universal\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Ron Howard\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.9,\"IMDB Votes\":36366},{\"Title\":\"Factory Girl\",\"US Gross\":1661464,\"Worldwide Gross\":1661464,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Dec 29 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":90,\"Distributor\":\"MGM\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":6.1,\"IMDB Votes\":8680},{\"Title\":\"Fateless\",\"US Gross\":196857,\"Worldwide Gross\":196857,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Jan 06 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":462},{\"Title\":\"The Full Monty\",\"US Gross\":45950122,\"Worldwide Gross\":257938649,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Aug 13 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":90,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Cattaneo\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":7.2,\"IMDB Votes\":40877},{\"Title\":\"Fun With Dick And Jane\",\"US Gross\":110550000,\"Worldwide Gross\":202250000,\"US DVD Sales\":29638269,\"Production Budget\":140000000,\"Release Date\":\"Dec 21 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":90,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":6.3,\"IMDB Votes\":1788},{\"Title\":\"Funny People\",\"US Gross\":51855045,\"Worldwide Gross\":71880305,\"US DVD Sales\":13721109,\"Production Budget\":70000000,\"Release Date\":\"Jul 31 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Judd Apatow\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.8,\"IMDB Votes\":37791},{\"Title\":\"Fur\",\"US Gross\":223202,\"Worldwide Gross\":2281089,\"US DVD Sales\":null,\"Production Budget\":16800000,\"Release Date\":\"Nov 10 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"Picturehouse\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Furry Vengeance\",\"US Gross\":17630465,\"Worldwide Gross\":21630465,\"US DVD Sales\":4335991,\"Production Budget\":35000000,\"Release Date\":\"Apr 30 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Roger Kumble\",\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":2.6,\"IMDB Votes\":3458},{\"Title\":\"Fever Pitch\",\"US Gross\":42071069,\"Worldwide Gross\":50071069,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Apr 08 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bobby Farrelly\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":16736},{\"Title\":\"For Your Consideration\",\"US Gross\":5549923,\"Worldwide Gross\":5549923,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Nov 17 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":86,\"Distributor\":\"Warner Independent\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Christopher Guest\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.2,\"IMDB Votes\":7780},{\"Title\":\"The Game\",\"US Gross\":48265581,\"Worldwide Gross\":48265581,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Sep 12 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":128,\"Distributor\":\"Polygram\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Fincher\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":7.7,\"IMDB Votes\":74136},{\"Title\":\"Gangs of New York\",\"US Gross\":77730500,\"Worldwide Gross\":190400000,\"US DVD Sales\":null,\"Production Budget\":97000000,\"Release Date\":\"Dec 20 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":168,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":7.4,\"IMDB Votes\":113378},{\"Title\":\"Garfield\",\"US Gross\":75367693,\"Worldwide Gross\":200802638,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Jun 11 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":80,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Hewitt\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.8,\"IMDB Votes\":19870},{\"Title\":\"Georgia Rule\",\"US Gross\":18882880,\"Worldwide Gross\":20819601,\"US DVD Sales\":19382312,\"Production Budget\":20000000,\"Release Date\":\"May 11 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":111,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Garry Marshall\",\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.8,\"IMDB Votes\":10902},{\"Title\":\"Gattaca\",\"US Gross\":12532777,\"Worldwide Gross\":12532777,\"US DVD Sales\":null,\"Production Budget\":36000000,\"Release Date\":\"Oct 24 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Andrew Niccol\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.8,\"IMDB Votes\":70906},{\"Title\":\"Gone, Baby, Gone\",\"US Gross\":20300218,\"Worldwide Gross\":34619699,\"US DVD Sales\":11406490,\"Production Budget\":19000000,\"Release Date\":\"Oct 19 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":114,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ben Affleck\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Goodbye, Lenin!\",\"US Gross\":4063859,\"Worldwide Gross\":79316616,\"US DVD Sales\":null,\"Production Budget\":6400000,\"Release Date\":\"Feb 27 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.3,\"IMDB Votes\":198},{\"Title\":\"Good Boy!\",\"US Gross\":37667746,\"Worldwide Gross\":45312217,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Oct 10 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":87,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":5,\"IMDB Votes\":1961},{\"Title\":\"Gods and Generals\",\"US Gross\":12882934,\"Worldwide Gross\":12923936,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Feb 21 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":6,\"IMDB Votes\":7437},{\"Title\":\"The Good German\",\"US Gross\":1308696,\"Worldwide Gross\":1308696,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Dec 15 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":104,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Steven Soderbergh\",\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":6.1,\"IMDB Votes\":13007},{\"Title\":\"Gods and Monsters\",\"US Gross\":6451628,\"Worldwide Gross\":6451628,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Nov 06 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Bill Condon\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.5,\"IMDB Votes\":15946},{\"Title\":\"The Good Night\",\"US Gross\":22441,\"Worldwide Gross\":22441,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Oct 05 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":93,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":6,\"IMDB Votes\":4332},{\"Title\":\"The Good Thief\",\"US Gross\":3517797,\"Worldwide Gross\":3517797,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Apr 02 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Neil Jordan\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"George and the Dragon\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Dec 31 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":1762},{\"Title\":\"Gerry\",\"US Gross\":254683,\"Worldwide Gross\":254683,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Feb 14 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Gus Van Sant\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":8583},{\"Title\":\"G-Force\",\"US Gross\":119436770,\"Worldwide Gross\":287389685,\"US DVD Sales\":44145849,\"Production Budget\":82500000,\"Release Date\":\"Jul 24 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5,\"IMDB Votes\":9633},{\"Title\":\"Gridiron Gang\",\"US Gross\":38432823,\"Worldwide Gross\":41480851,\"US DVD Sales\":34066576,\"Production Budget\":30000000,\"Release Date\":\"Sep 15 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":126,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Phil Joanou\",\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":6.8,\"IMDB Votes\":12400},{\"Title\":\"The Good Girl\",\"US Gross\":14018296,\"Worldwide Gross\":15976468,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Aug 07 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.6,\"IMDB Votes\":21460},{\"Title\":\"Ghost Ship\",\"US Gross\":30113491,\"Worldwide Gross\":68349884,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 25 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":91,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.3,\"IMDB Votes\":25891},{\"Title\":\"Ghosts of Mississippi\",\"US Gross\":13052741,\"Worldwide Gross\":13052741,\"US DVD Sales\":null,\"Production Budget\":36000000,\"Release Date\":\"Dec 20 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Rob Reiner\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.4,\"IMDB Votes\":5276},{\"Title\":\"The Glass House\",\"US Gross\":17951431,\"Worldwide Gross\":22861785,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Sep 14 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":5.6,\"IMDB Votes\":10629},{\"Title\":\"Ghost Rider\",\"US Gross\":115802596,\"Worldwide Gross\":237702596,\"US DVD Sales\":103730683,\"Production Budget\":120000000,\"Release Date\":\"Feb 16 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Mark Steven Johnson\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.2,\"IMDB Votes\":63235},{\"Title\":\"Ghost Town\",\"US Gross\":13252641,\"Worldwide Gross\":26612350,\"US DVD Sales\":7574314,\"Production Budget\":20000000,\"Release Date\":\"Sep 19 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":102,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"David Koepp\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":4.7,\"IMDB Votes\":310},{\"Title\":\"The Gift\",\"US Gross\":12008642,\"Worldwide Gross\":44567606,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Dec 19 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sam Raimi\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":6.7,\"IMDB Votes\":28488},{\"Title\":\"Gigli\",\"US Gross\":6087542,\"Worldwide Gross\":7266209,\"US DVD Sales\":null,\"Production Budget\":54000000,\"Release Date\":\"Aug 01 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martin Brest\",\"Rotten Tomatoes Rating\":6,\"IMDB Rating\":2.4,\"IMDB Votes\":29031},{\"Title\":\"G.I.Jane\",\"US Gross\":48169156,\"Worldwide Gross\":48169156,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Aug 22 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":124,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":23807},{\"Title\":\"G.I. Joe: The Rise of Cobra\",\"US Gross\":150201498,\"Worldwide Gross\":302469019,\"US DVD Sales\":69866155,\"Production Budget\":175000000,\"Release Date\":\"Aug 07 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":118,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Toy\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stephen Sommers\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":47052},{\"Title\":\"Girl, Interrupted\",\"US Gross\":28871190,\"Worldwide Gross\":28871190,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Dec 21 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":127,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"James Mangold\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Gladiator\",\"US Gross\":187683805,\"Worldwide Gross\":457683805,\"US DVD Sales\":null,\"Production Budget\":103000000,\"Release Date\":\"May 05 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":150,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":8.3,\"IMDB Votes\":279512},{\"Title\":\"Glitter\",\"US Gross\":4273372,\"Worldwide Gross\":4273372,\"US DVD Sales\":null,\"Production Budget\":8500000,\"Release Date\":\"Sep 21 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Vondie Curtis-Hall\",\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":2,\"IMDB Votes\":13778},{\"Title\":\"Gloria\",\"US Gross\":4167493,\"Worldwide Gross\":4967493,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jan 22 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sidney Lumet\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":4.7,\"IMDB Votes\":2726},{\"Title\":\"Good Luck Chuck\",\"US Gross\":35017297,\"Worldwide Gross\":59183821,\"US DVD Sales\":26234476,\"Production Budget\":25000000,\"Release Date\":\"Sep 21 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":96,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":5,\"IMDB Rating\":5.6,\"IMDB Votes\":29013},{\"Title\":\"John Carpenter's Ghosts of Mars\",\"US Gross\":8434601,\"Worldwide Gross\":8434601,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Aug 24 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Screen Media Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"John Carpenter\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Green Mile\",\"US Gross\":136801374,\"Worldwide Gross\":286601374,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Dec 10 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":187,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"Frank Darabont\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":8.4,\"IMDB Votes\":198916},{\"Title\":\"The Game of Their Lives\",\"US Gross\":375474,\"Worldwide Gross\":375474,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Apr 22 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"IFC Films\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":6,\"IMDB Votes\":1443},{\"Title\":\"Gandhi, My Father\",\"US Gross\":240425,\"Worldwide Gross\":1375194,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Aug 03 2007\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Eros Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":8.1,\"IMDB Votes\":50881},{\"Title\":\"Good Night and Good Luck\",\"US Gross\":31501218,\"Worldwide Gross\":54601218,\"US DVD Sales\":20967273,\"Production Budget\":7000000,\"Release Date\":\"Oct 07 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Independent\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"George Clooney\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.7,\"IMDB Votes\":42797},{\"Title\":\"The General's Daughter\",\"US Gross\":102705852,\"Worldwide Gross\":149705852,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jun 18 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":116,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Simon West\",\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":6.1,\"IMDB Votes\":23570},{\"Title\":\"Gun Shy\",\"US Gross\":1638202,\"Worldwide Gross\":1638202,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 04 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":5.4,\"IMDB Votes\":3607},{\"Title\":\"Go!\",\"US Gross\":16875273,\"Worldwide Gross\":28383441,\"US DVD Sales\":null,\"Production Budget\":6500000,\"Release Date\":\"Apr 09 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":103,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Doug Liman\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Goal!\",\"US Gross\":4283255,\"Worldwide Gross\":27610873,\"US DVD Sales\":12616824,\"Production Budget\":33000000,\"Release Date\":\"May 12 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":121,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":16809},{\"Title\":\"Godzilla 2000\",\"US Gross\":10037390,\"Worldwide Gross\":10037390,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Aug 18 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Godsend\",\"US Gross\":14334645,\"Worldwide Gross\":16910708,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Apr 30 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":4,\"IMDB Rating\":4.7,\"IMDB Votes\":13866},{\"Title\":\"Godzilla\",\"US Gross\":136314294,\"Worldwide Gross\":376000000,\"US DVD Sales\":null,\"Production Budget\":125000000,\"Release Date\":\"May 19 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":139,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Roland Emmerich\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":4.8,\"IMDB Votes\":59455},{\"Title\":\"Smiling Fish and Goat on Fire\",\"US Gross\":277233,\"Worldwide Gross\":277233,\"US DVD Sales\":null,\"Production Budget\":40000,\"Release Date\":\"Aug 25 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Gone in 60 Seconds\",\"US Gross\":101643008,\"Worldwide Gross\":232643008,\"US DVD Sales\":null,\"Production Budget\":103300000,\"Release Date\":\"Jun 09 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":118,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":2940},{\"Title\":\"Good\",\"US Gross\":27276,\"Worldwide Gross\":27276,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Dec 31 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":6.2,\"IMDB Votes\":1926},{\"Title\":\"Good Will Hunting\",\"US Gross\":138433435,\"Worldwide Gross\":225933435,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 20 1987\",\"MPAA Rating\":\"R\",\"Running Time min\":126,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gus Van Sant\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.1,\"IMDB Votes\":150415},{\"Title\":\"Gosford Park\",\"US Gross\":41300105,\"Worldwide Gross\":41300105,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Dec 26 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":137,\"Distributor\":\"USA Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Robert Altman\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.3,\"IMDB Votes\":36648},{\"Title\":\"Gossip\",\"US Gross\":5108820,\"Worldwide Gross\":12591270,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Apr 21 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Game Plan\",\"US Gross\":90648202,\"Worldwide Gross\":147914546,\"US DVD Sales\":50113315,\"Production Budget\":22000000,\"Release Date\":\"Sep 22 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":110,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andy Fickman\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":6.3,\"IMDB Votes\":14984},{\"Title\":\"Girl with a Pearl Earring\",\"US Gross\":11634362,\"Worldwide Gross\":22106210,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Dec 12 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Peter Webber\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":7.1,\"IMDB Votes\":23493},{\"Title\":\"Galaxy Quest\",\"US Gross\":71423726,\"Worldwide Gross\":90523726,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Dec 25 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":104,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.2,\"IMDB Votes\":52507},{\"Title\":\"Saving Grace\",\"US Gross\":12178602,\"Worldwide Gross\":24325623,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Aug 04 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.8,\"IMDB Votes\":8543},{\"Title\":\"Gracie\",\"US Gross\":2956339,\"Worldwide Gross\":3036736,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Jun 01 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"Picturehouse\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":59,\"IMDB Rating\":6.2,\"IMDB Votes\":2084},{\"Title\":\"The Great Raid\",\"US Gross\":10166502,\"Worldwide Gross\":10597070,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Aug 12 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"John Dahl\",\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":6.8,\"IMDB Votes\":8894},{\"Title\":\"The Grand\",\"US Gross\":115879,\"Worldwide Gross\":115879,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Mar 21 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Anchor Bay Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Zak Penn\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":3346},{\"Title\":\"The Constant Gardener\",\"US Gross\":33579798,\"Worldwide Gross\":81079798,\"US DVD Sales\":null,\"Production Budget\":25500000,\"Release Date\":\"Aug 31 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Fernando Meirelles\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.6,\"IMDB Votes\":50763},{\"Title\":\"Garden State\",\"US Gross\":26782316,\"Worldwide Gross\":32381151,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Jul 28 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Zach Braff\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.9,\"IMDB Votes\":92594},{\"Title\":\"Grease\",\"US Gross\":305260,\"Worldwide Gross\":206005260,\"US DVD Sales\":21249794,\"Production Budget\":6000000,\"Release Date\":\"Jun 16 1978\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Musical/Opera\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Randal Kleiser\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7,\"IMDB Votes\":60146},{\"Title\":\"Green Zone\",\"US Gross\":35053660,\"Worldwide Gross\":84788541,\"US DVD Sales\":14424476,\"Production Budget\":100000000,\"Release Date\":\"Mar 12 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Factual Book/Article\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Paul Greengrass\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":7.1,\"IMDB Votes\":26759},{\"Title\":\"George Of The Jungle\",\"US Gross\":105263257,\"Worldwide Gross\":174463257,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Jul 16 1997\",\"MPAA Rating\":\"PG\",\"Running Time min\":91,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":5.3,\"IMDB Votes\":19685},{\"Title\":\"The Brothers Grimm\",\"US Gross\":37899638,\"Worldwide Gross\":105299638,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Aug 26 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Terry Gilliam\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":5.9,\"IMDB Votes\":43532},{\"Title\":\"The Girl Next Door\",\"US Gross\":14589444,\"Worldwide Gross\":18589444,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Apr 09 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Luke Greenfield\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":7,\"IMDB Votes\":5614},{\"Title\":\"How the Grinch Stole Christmas\",\"US Gross\":260044825,\"Worldwide Gross\":345141403,\"US DVD Sales\":null,\"Production Budget\":123000000,\"Release Date\":\"Nov 17 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":104,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Ron Howard\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":5.7,\"IMDB Votes\":40310},{\"Title\":\"Grindhouse\",\"US Gross\":25031037,\"Worldwide Gross\":50187789,\"US DVD Sales\":31070911,\"Production Budget\":53000000,\"Release Date\":\"Apr 06 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":191,\"Distributor\":\"Weinstein/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Robert Rodriguez\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.9,\"IMDB Votes\":82770},{\"Title\":\"Get Rich or Die Tryin'\",\"US Gross\":30981850,\"Worldwide Gross\":46437122,\"US DVD Sales\":9906347,\"Production Budget\":40000000,\"Release Date\":\"Nov 09 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jim Sheridan\",\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":4,\"IMDB Votes\":18126},{\"Title\":\"Wallace & Gromit: The Curse of the Were-Rabbit\",\"US Gross\":56068547,\"Worldwide Gross\":185724838,\"US DVD Sales\":35069986,\"Production Budget\":30000000,\"Release Date\":\"Oct 05 2005\",\"MPAA Rating\":\"G\",\"Running Time min\":85,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Nick Park\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":7.9,\"IMDB Votes\":38158},{\"Title\":\"Groove\",\"US Gross\":1115313,\"Worldwide Gross\":1167524,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Jun 09 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":5.8,\"IMDB Votes\":2486},{\"Title\":\"Grosse Point Blank\",\"US Gross\":28084357,\"Worldwide Gross\":28084357,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Apr 11 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":106,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":41523},{\"Title\":\"The Grudge 2\",\"US Gross\":39143839,\"Worldwide Gross\":68643839,\"US DVD Sales\":8293678,\"Production Budget\":20000000,\"Release Date\":\"Oct 13 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":102,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":4.6,\"IMDB Votes\":16024},{\"Title\":\"The Grudge\",\"US Gross\":110359362,\"Worldwide Gross\":187281115,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 22 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":96,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":5.7,\"IMDB Votes\":43218},{\"Title\":\"Grown Ups\",\"US Gross\":161094625,\"Worldwide Gross\":250294625,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Jun 25 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":102,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":5.8,\"IMDB Votes\":13488},{\"Title\":\"Ghost Dog: Way of the Samurai\",\"US Gross\":3330230,\"Worldwide Gross\":6030230,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Mar 03 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jim Jarmusch\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Guess Who\",\"US Gross\":68915888,\"Worldwide Gross\":102115888,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Mar 25 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":103,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":5.7,\"IMDB Votes\":15789},{\"Title\":\"Get Carter\",\"US Gross\":14967182,\"Worldwide Gross\":19417182,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Oct 06 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":4.8,\"IMDB Votes\":14196},{\"Title\":\"Get Over It\",\"US Gross\":11560259,\"Worldwide Gross\":11560259,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Mar 09 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":5.5,\"IMDB Votes\":9350},{\"Title\":\"Veronica Guerin\",\"US Gross\":1569918,\"Worldwide Gross\":9438074,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Oct 17 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Joel Schumacher\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6.8,\"IMDB Votes\":8778},{\"Title\":\"The Guru\",\"US Gross\":3051221,\"Worldwide Gross\":23788368,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Jan 31 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":9239},{\"Title\":\"A Guy Thing\",\"US Gross\":15543862,\"Worldwide Gross\":17430594,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Jan 17 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":8147},{\"Title\":\"Ghost World\",\"US Gross\":6217849,\"Worldwide Gross\":8764007,\"US DVD Sales\":null,\"Production Budget\":5500000,\"Release Date\":\"Jul 20 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Terry Zwigoff\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.7,\"IMDB Votes\":42973},{\"Title\":\"Halloween 2\",\"US Gross\":33392973,\"Worldwide Gross\":38512850,\"US DVD Sales\":6646073,\"Production Budget\":15000000,\"Release Date\":\"Aug 28 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":105,\"Distributor\":\"Weinstein/Dimension\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Rob Zombie\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.5,\"IMDB Votes\":9284},{\"Title\":\"Hairspray\",\"US Gross\":118823091,\"Worldwide Gross\":202823091,\"US DVD Sales\":104104829,\"Production Budget\":75000000,\"Release Date\":\"Jul 20 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":117,\"Distributor\":\"New Line\",\"Source\":\"Remake\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Adam Shankman\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7.2,\"IMDB Votes\":41511},{\"Title\":\"Half Baked\",\"US Gross\":17394881,\"Worldwide Gross\":17394881,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Jan 16 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":84,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":6.3,\"IMDB Votes\":18791},{\"Title\":\"Hamlet\",\"US Gross\":4501094,\"Worldwide Gross\":7129670,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Dec 25 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":6,\"IMDB Votes\":5147},{\"Title\":\"Hamlet\",\"US Gross\":1577287,\"Worldwide Gross\":2288841,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"May 12 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6,\"IMDB Votes\":5147},{\"Title\":\"Hannibal the Conqueror\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Dec 31 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":null,\"Creative Type\":\"Dramatization\",\"Director\":\"Vin Diesel\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Hancock\",\"US Gross\":227946274,\"Worldwide Gross\":624346274,\"US DVD Sales\":89352567,\"Production Budget\":150000000,\"Release Date\":\"Jul 02 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Peter Berg\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.5,\"IMDB Votes\":100822},{\"Title\":\"Happily N'Ever After\",\"US Gross\":15849032,\"Worldwide Gross\":38344430,\"US DVD Sales\":16559473,\"Production Budget\":47000000,\"Release Date\":\"Jan 05 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.9,\"IMDB Votes\":4678},{\"Title\":\"The Happening\",\"US Gross\":64506874,\"Worldwide Gross\":163403799,\"US DVD Sales\":21432877,\"Production Budget\":60000000,\"Release Date\":\"Jun 13 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":89,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"M. Night Shyamalan\",\"Rotten Tomatoes Rating\":18,\"IMDB Rating\":5.2,\"IMDB Votes\":72259},{\"Title\":\"Happy, Texas\",\"US Gross\":2039192,\"Worldwide Gross\":2039192,\"US DVD Sales\":null,\"Production Budget\":1700000,\"Release Date\":\"Oct 01 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.5,\"IMDB Votes\":198},{\"Title\":\"Hard Candy\",\"US Gross\":1024640,\"Worldwide Gross\":1881243,\"US DVD Sales\":null,\"Production Budget\":950000,\"Release Date\":\"Apr 14 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":45791},{\"Title\":\"Harsh Times\",\"US Gross\":3337931,\"Worldwide Gross\":5963961,\"US DVD Sales\":2638319,\"Production Budget\":2000000,\"Release Date\":\"Nov 10 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":7,\"IMDB Votes\":26347},{\"Title\":\"Harvard Man\",\"US Gross\":56653,\"Worldwide Gross\":56653,\"US DVD Sales\":null,\"Production Budget\":5500000,\"Release Date\":\"May 17 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":2758},{\"Title\":\"Harry Brown\",\"US Gross\":1818681,\"Worldwide Gross\":6294140,\"US DVD Sales\":null,\"Production Budget\":7300000,\"Release Date\":\"Apr 30 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Samuel Goldwyn Films\",\"Source\":null,\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":14297},{\"Title\":\"The House Bunny\",\"US Gross\":48237389,\"Worldwide Gross\":70237389,\"US DVD Sales\":15442818,\"Production Budget\":25000000,\"Release Date\":\"Aug 22 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Fred Wolf\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":5.5,\"IMDB Votes\":18964},{\"Title\":\"The Devil's Rejects\",\"US Gross\":17044981,\"Worldwide Gross\":20940428,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Jul 22 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rob Zombie\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6.9,\"IMDB Votes\":36082},{\"Title\":\"House of 1,000 Corpses\",\"US Gross\":12634962,\"Worldwide Gross\":16829545,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Apr 11 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rob Zombie\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":3311},{\"Title\":\"The House of the Dead\",\"US Gross\":10199354,\"Worldwide Gross\":13767816,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Oct 10 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Based on Game\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Uwe Boll\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":5541},{\"Title\":\"Hidalgo\",\"US Gross\":67286731,\"Worldwide Gross\":107336658,\"US DVD Sales\":null,\"Production Budget\":78000000,\"Release Date\":\"Mar 05 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":136,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Joe Johnston\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.6,\"IMDB Votes\":23604},{\"Title\":\"Hide and Seek\",\"US Gross\":51100486,\"Worldwide Gross\":123100486,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jan 28 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":105,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":5.6,\"IMDB Votes\":30891},{\"Title\":\"Hoodwinked\",\"US Gross\":51386611,\"Worldwide Gross\":110011106,\"US DVD Sales\":31171440,\"Production Budget\":17500000,\"Release Date\":\"Dec 16 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":80,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":20461},{\"Title\":\"How Do You Know?\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Dec 17 2010\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Head of State\",\"US Gross\":37788228,\"Worldwide Gross\":38283765,\"US DVD Sales\":null,\"Production Budget\":35200000,\"Release Date\":\"Mar 28 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Chris Rock\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.1,\"IMDB Votes\":8447},{\"Title\":\"Hedwig and the Angry Inch\",\"US Gross\":3067312,\"Worldwide Gross\":3643900,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Jul 20 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Based on Musical/Opera\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.6,\"IMDB Votes\":14766},{\"Title\":\"Pooh's Heffalump Movie\",\"US Gross\":18098433,\"Worldwide Gross\":52858433,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Feb 11 2005\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":6.3,\"IMDB Votes\":1605},{\"Title\":\"He Got Game\",\"US Gross\":21567853,\"Worldwide Gross\":21567853,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"May 01 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":134,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":6.8,\"IMDB Votes\":14494},{\"Title\":\"Heist\",\"US Gross\":23483357,\"Worldwide Gross\":28483168,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Nov 09 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Mamet\",\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":3.2,\"IMDB Votes\":77},{\"Title\":\"Hellboy 2: The Golden Army\",\"US Gross\":75986503,\"Worldwide Gross\":160388063,\"US DVD Sales\":43689202,\"Production Budget\":82500000,\"Release Date\":\"Jul 11 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Guillermo Del Toro\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":61902},{\"Title\":\"Hellboy\",\"US Gross\":59623958,\"Worldwide Gross\":99823958,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Apr 02 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":122,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Guillermo Del Toro\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.8,\"IMDB Votes\":67763},{\"Title\":\"Raising Helen\",\"US Gross\":37485528,\"Worldwide Gross\":43340302,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"May 28 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":119,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Garry Marshall\",\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5.7,\"IMDB Votes\":10526},{\"Title\":\"A Home at the End of the World\",\"US Gross\":1029017,\"Worldwide Gross\":1033810,\"US DVD Sales\":null,\"Production Budget\":6500000,\"Release Date\":\"Jul 23 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Independent\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.7,\"IMDB Votes\":7180},{\"Title\":\"Jet Li's Hero\",\"US Gross\":53652140,\"Worldwide Gross\":177352140,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Aug 27 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":96,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Yimou Zhang\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Here on Earth\",\"US Gross\":10494147,\"Worldwide Gross\":10845127,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Mar 24 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":18,\"IMDB Rating\":4.6,\"IMDB Votes\":4929},{\"Title\":\"House of Flying Daggers\",\"US Gross\":11050094,\"Worldwide Gross\":92863945,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Dec 03 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Yimou Zhang\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Head Over Heels\",\"US Gross\":10397365,\"Worldwide Gross\":10397365,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Feb 02 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mark Waters\",\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":4.8,\"IMDB Votes\":6574},{\"Title\":\"The Haunting\",\"US Gross\":91188905,\"Worldwide Gross\":180188905,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jul 23 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":114,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jan De Bont\",\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":4.6,\"IMDB Votes\":31808},{\"Title\":\"High Crimes\",\"US Gross\":41543207,\"Worldwide Gross\":63781100,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Apr 05 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":115,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Carl Franklin\",\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":6.1,\"IMDB Votes\":14428},{\"Title\":\"High Fidelity\",\"US Gross\":27277055,\"Worldwide Gross\":47881663,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Mar 31 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":114,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stephen Frears\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":7.6,\"IMDB Votes\":69740},{\"Title\":\"Highlander: Endgame\",\"US Gross\":12801190,\"Worldwide Gross\":12801190,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Sep 01 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.3,\"IMDB Votes\":8421},{\"Title\":\"High Heels and Low Lifes\",\"US Gross\":226792,\"Worldwide Gross\":226792,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 26 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":6.1,\"IMDB Votes\":2205},{\"Title\":\"High School Musical 3: Senior Year\",\"US Gross\":90556401,\"Worldwide Gross\":251056401,\"US DVD Sales\":59373004,\"Production Budget\":11000000,\"Release Date\":\"Oct 24 2008\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":3.7,\"IMDB Votes\":18587},{\"Title\":\"The History Boys\",\"US Gross\":2730296,\"Worldwide Gross\":13425589,\"US DVD Sales\":null,\"Production Budget\":3700000,\"Release Date\":\"Nov 21 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.7,\"IMDB Votes\":10293},{\"Title\":\"A History of Violence\",\"US Gross\":31493782,\"Worldwide Gross\":59993782,\"US DVD Sales\":38659936,\"Production Budget\":32000000,\"Release Date\":\"Sep 23 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Cronenberg\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.6,\"IMDB Votes\":79738},{\"Title\":\"Hitch\",\"US Gross\":177784257,\"Worldwide Gross\":366784257,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Feb 11 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":113,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andy Tennant\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":5.7,\"IMDB Votes\":89},{\"Title\":\"Hitman\",\"US Gross\":39687694,\"Worldwide Gross\":99965792,\"US DVD Sales\":28077100,\"Production Budget\":17500000,\"Release Date\":\"Nov 21 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":93,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":6.8,\"IMDB Votes\":520},{\"Title\":\"Harold & Kumar Escape from Guantanamo Bay\",\"US Gross\":38108728,\"Worldwide Gross\":43231984,\"US DVD Sales\":24609630,\"Production Budget\":12000000,\"Release Date\":\"Apr 25 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6.7,\"IMDB Votes\":42358},{\"Title\":\"Harold & Kumar Go to White Castle\",\"US Gross\":18225165,\"Worldwide Gross\":18225165,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Jul 30 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":7.2,\"IMDB Votes\":56030},{\"Title\":\"Held Up\",\"US Gross\":4714090,\"Worldwide Gross\":4714090,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"May 12 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Trimark\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":4.7,\"IMDB Votes\":1840},{\"Title\":\"The Hills Have Eyes II\",\"US Gross\":20804166,\"Worldwide Gross\":37466538,\"US DVD Sales\":30512461,\"Production Budget\":15000000,\"Release Date\":\"Mar 23 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":88,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5,\"IMDB Votes\":17948},{\"Title\":\"The Hills Have Eyes\",\"US Gross\":41778863,\"Worldwide Gross\":69623713,\"US DVD Sales\":20576805,\"Production Budget\":17000000,\"Release Date\":\"Mar 10 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alexandre Aja\",\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":6.5,\"IMDB Votes\":43747},{\"Title\":\"How to Lose Friends & Alienate People\",\"US Gross\":2775593,\"Worldwide Gross\":12031443,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Oct 03 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":6.7,\"IMDB Votes\":25756},{\"Title\":\"Half Past Dead\",\"US Gross\":15567860,\"Worldwide Gross\":19233280,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Nov 15 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":2,\"IMDB Rating\":4.1,\"IMDB Votes\":6909},{\"Title\":\"Halloween: H2O\",\"US Gross\":55041738,\"Worldwide Gross\":55041738,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Aug 05 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":85,\"Distributor\":\"Miramax\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steve Miner\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Halloween: Resurrection\",\"US Gross\":30259652,\"Worldwide Gross\":37659652,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jul 12 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":89,\"Distributor\":\"Miramax/Dimension\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rick Rosenthal\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.9,\"IMDB Votes\":13181},{\"Title\":\"Holy Man\",\"US Gross\":12069719,\"Worldwide Gross\":12069719,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Oct 09 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stephen Herek\",\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":4.7,\"IMDB Votes\":9105},{\"Title\":\"Milk\",\"US Gross\":31841299,\"Worldwide Gross\":50164027,\"US DVD Sales\":11075466,\"Production Budget\":20000000,\"Release Date\":\"Nov 26 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Gus Van Sant\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":3.6,\"IMDB Votes\":479},{\"Title\":\"Hamlet 2\",\"US Gross\":4886216,\"Worldwide Gross\":4898285,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Aug 22 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andrew Fleming\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.4,\"IMDB Votes\":9017},{\"Title\":\"Hannah Montana/Miley Cyrus: Best of Both Worlds Concert Tour\",\"US Gross\":65281781,\"Worldwide Gross\":71281781,\"US DVD Sales\":18154740,\"Production Budget\":6500000,\"Release Date\":\"Feb 01 2008\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Concert/Performance\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Home on the Range\",\"US Gross\":50026353,\"Worldwide Gross\":76482461,\"US DVD Sales\":null,\"Production Budget\":110000000,\"Release Date\":\"Apr 02 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":94,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":5.4,\"IMDB Votes\":4772},{\"Title\":\"Hannibal Rising\",\"US Gross\":27669725,\"Worldwide Gross\":80583311,\"US DVD Sales\":23365803,\"Production Budget\":50000000,\"Release Date\":\"Feb 09 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Peter Webber\",\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":6,\"IMDB Votes\":28690},{\"Title\":\"The Hangover\",\"US Gross\":277322503,\"Worldwide Gross\":465132119,\"US DVD Sales\":165916727,\"Production Budget\":35000000,\"Release Date\":\"Jun 05 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":99,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Todd Phillips\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7.9,\"IMDB Votes\":127634},{\"Title\":\"Hanging Up\",\"US Gross\":36037909,\"Worldwide Gross\":51867723,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Feb 18 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":4.3,\"IMDB Votes\":6098},{\"Title\":\"The Hoax\",\"US Gross\":7164995,\"Worldwide Gross\":7164995,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Apr 06 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Lasse Hallstrom\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":6.9,\"IMDB Votes\":9171},{\"Title\":\"Holes\",\"US Gross\":67383924,\"Worldwide Gross\":72383924,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Apr 18 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":117,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andrew Davis\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7.1,\"IMDB Votes\":19388},{\"Title\":\"The Holiday\",\"US Gross\":63280000,\"Worldwide Gross\":205190324,\"US DVD Sales\":71449071,\"Production Budget\":85000000,\"Release Date\":\"Dec 08 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":131,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Nancy Meyers\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6.9,\"IMDB Votes\":48215},{\"Title\":\"Hollow Man\",\"US Gross\":73209340,\"Worldwide Gross\":191200000,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Aug 04 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":112,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Paul Verhoeven\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":5.5,\"IMDB Votes\":41499},{\"Title\":\"Holy Girl\",\"US Gross\":304124,\"Worldwide Gross\":1261792,\"US DVD Sales\":null,\"Production Budget\":1400000,\"Release Date\":\"Apr 29 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Home Fries\",\"US Gross\":10513979,\"Worldwide Gross\":10513979,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Nov 25 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":4.7,\"IMDB Votes\":4806},{\"Title\":\"Honey\",\"US Gross\":30272254,\"Worldwide Gross\":62192232,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Dec 05 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":94,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bille Woodruff\",\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":4.6,\"IMDB Votes\":13026},{\"Title\":\"The Honeymooners\",\"US Gross\":12834849,\"Worldwide Gross\":13174426,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Jun 10 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Schultz\",\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":2.6,\"IMDB Votes\":5012},{\"Title\":\"Hoot\",\"US Gross\":8117637,\"Worldwide Gross\":8224998,\"US DVD Sales\":11095119,\"Production Budget\":15000000,\"Release Date\":\"May 05 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.3,\"IMDB Votes\":2830},{\"Title\":\"Hope Floats\",\"US Gross\":60110313,\"Worldwide Gross\":81529000,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"May 29 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":114,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Forest Whitaker\",\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":5.3,\"IMDB Votes\":9168},{\"Title\":\"Horton Hears a Who\",\"US Gross\":154529439,\"Worldwide Gross\":297133947,\"US DVD Sales\":73524948,\"Production Budget\":85000000,\"Release Date\":\"Mar 14 2008\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":31323},{\"Title\":\"Hostel: Part II\",\"US Gross\":17544812,\"Worldwide Gross\":33606409,\"US DVD Sales\":16230816,\"Production Budget\":7500000,\"Release Date\":\"Jun 08 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Eli Roth\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":5.4,\"IMDB Votes\":31511},{\"Title\":\"Hostage\",\"US Gross\":34636443,\"Worldwide Gross\":77636443,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Mar 11 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":3070},{\"Title\":\"Hostel\",\"US Gross\":47326473,\"Worldwide Gross\":80578934,\"US DVD Sales\":23835218,\"Production Budget\":4800000,\"Release Date\":\"Jan 06 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Eli Roth\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":64642},{\"Title\":\"Hot Rod\",\"US Gross\":13938332,\"Worldwide Gross\":14334401,\"US DVD Sales\":24152720,\"Production Budget\":25000000,\"Release Date\":\"Aug 03 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":83,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.5,\"IMDB Votes\":22250},{\"Title\":\"The Hours\",\"US Gross\":41675994,\"Worldwide Gross\":108775994,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Dec 27 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":115,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Stephen Daldry\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":7.6,\"IMDB Votes\":44618},{\"Title\":\"Life as a House\",\"US Gross\":15652637,\"Worldwide Gross\":23889158,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Oct 26 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":7.5,\"IMDB Votes\":19308},{\"Title\":\"Bringing Down the House\",\"US Gross\":132675402,\"Worldwide Gross\":164675402,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Mar 07 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":105,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Adam Shankman\",\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":5.4,\"IMDB Votes\":16242},{\"Title\":\"House of Wax\",\"US Gross\":32064800,\"Worldwide Gross\":70064800,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"May 06 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":5.4,\"IMDB Votes\":32159},{\"Title\":\"How to Deal\",\"US Gross\":14108518,\"Worldwide Gross\":14108518,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Jul 18 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":5.4,\"IMDB Votes\":5292},{\"Title\":\"How High\",\"US Gross\":31155435,\"Worldwide Gross\":31260435,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Dec 21 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":93,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":5.5,\"IMDB Votes\":14470},{\"Title\":\"Def Jam's How To Be a Player\",\"US Gross\":14010363,\"Worldwide Gross\":14010363,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Aug 06 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":93,\"Distributor\":\"Gramercy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Harry Potter and the Chamber of Secrets\",\"US Gross\":261987880,\"Worldwide Gross\":878987880,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Nov 15 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":161,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Chris Columbus\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.2,\"IMDB Votes\":120063},{\"Title\":\"Harry Potter and the Prisoner of Azkaban\",\"US Gross\":249538952,\"Worldwide Gross\":795538952,\"US DVD Sales\":null,\"Production Budget\":130000000,\"Release Date\":\"Jun 04 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":141,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Alfonso Cuaron\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.7,\"IMDB Votes\":108928},{\"Title\":\"Harry Potter and the Goblet of Fire\",\"US Gross\":290013036,\"Worldwide Gross\":896013036,\"US DVD Sales\":215701005,\"Production Budget\":150000000,\"Release Date\":\"Nov 18 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":157,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Mike Newell\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.6,\"IMDB Votes\":111946},{\"Title\":\"Harry Potter and the Order of the Phoenix\",\"US Gross\":292004738,\"Worldwide Gross\":938468864,\"US DVD Sales\":220867077,\"Production Budget\":150000000,\"Release Date\":\"Jul 11 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":138,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"David Yates\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7.4,\"IMDB Votes\":104074},{\"Title\":\"Harry Potter and the Half-Blood Prince\",\"US Gross\":301959197,\"Worldwide Gross\":937499905,\"US DVD Sales\":103574938,\"Production Budget\":250000000,\"Release Date\":\"Jul 15 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":153,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"David Yates\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.3,\"IMDB Votes\":73720},{\"Title\":\"Harry Potter and the Sorcerer's Stone\",\"US Gross\":317557891,\"Worldwide Gross\":976457891,\"US DVD Sales\":null,\"Production Budget\":125000000,\"Release Date\":\"Nov 16 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":152,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Chris Columbus\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":132238},{\"Title\":\"Happy Feet\",\"US Gross\":198000317,\"Worldwide Gross\":385000317,\"US DVD Sales\":203263968,\"Production Budget\":85000000,\"Release Date\":\"Nov 17 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":108,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"George Miller\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":6.7,\"IMDB Votes\":42369},{\"Title\":\"Hercules\",\"US Gross\":99112101,\"Worldwide Gross\":250700000,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Jun 15 1997\",\"MPAA Rating\":\"G\",\"Running Time min\":92,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.8,\"IMDB Votes\":21902},{\"Title\":\"Hardball\",\"US Gross\":40222729,\"Worldwide Gross\":44102389,\"US DVD Sales\":null,\"Production Budget\":21000000,\"Release Date\":\"Sep 14 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brian Robbins\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":4.1,\"IMDB Votes\":165},{\"Title\":\"Hard Rain\",\"US Gross\":19870567,\"Worldwide Gross\":19870567,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Jan 16 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":96,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.6,\"IMDB Votes\":14375},{\"Title\":\"The Horse Whisperer\",\"US Gross\":75383563,\"Worldwide Gross\":75383563,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"May 15 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":168,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Redford\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.3,\"IMDB Votes\":15831},{\"Title\":\"The Heart of Me\",\"US Gross\":196067,\"Worldwide Gross\":196067,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Jun 13 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":1342},{\"Title\":\"Casa de Areia\",\"US Gross\":539285,\"Worldwide Gross\":1178175,\"US DVD Sales\":null,\"Production Budget\":3750000,\"Release Date\":\"Aug 11 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":1519},{\"Title\":\"Sorority Row\",\"US Gross\":11965282,\"Worldwide Gross\":26735797,\"US DVD Sales\":1350584,\"Production Budget\":12500000,\"Release Date\":\"Sep 11 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5.1,\"IMDB Votes\":7097},{\"Title\":\"Hart's War\",\"US Gross\":19076815,\"Worldwide Gross\":33076815,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Feb 15 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":6.2,\"IMDB Votes\":19541},{\"Title\":\"The Hitchhiker's Guide to the Galaxy\",\"US Gross\":51019112,\"Worldwide Gross\":104019112,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Apr 29 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":103,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.6,\"IMDB Votes\":61513},{\"Title\":\"High Tension\",\"US Gross\":3681066,\"Worldwide Gross\":5208449,\"US DVD Sales\":null,\"Production Budget\":2850000,\"Release Date\":\"Jun 10 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.4,\"IMDB Votes\":165},{\"Title\":\"Hot Fuzz\",\"US Gross\":23618786,\"Worldwide Gross\":79197493,\"US DVD Sales\":33391776,\"Production Budget\":16000000,\"Release Date\":\"Apr 20 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Edgar Wright\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8,\"IMDB Votes\":129779},{\"Title\":\"Human Traffic\",\"US Gross\":104257,\"Worldwide Gross\":5422740,\"US DVD Sales\":null,\"Production Budget\":3300000,\"Release Date\":\"May 05 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":9455},{\"Title\":\"How to Train Your Dragon\",\"US Gross\":217581231,\"Worldwide Gross\":491581231,\"US DVD Sales\":null,\"Production Budget\":165000000,\"Release Date\":\"Mar 26 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.2,\"IMDB Votes\":28556},{\"Title\":\"I Heart Huckabees\",\"US Gross\":12784713,\"Worldwide Gross\":14584713,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Oct 01 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":6.8,\"IMDB Votes\":35878},{\"Title\":\"Hulk\",\"US Gross\":132177234,\"Worldwide Gross\":245360480,\"US DVD Sales\":null,\"Production Budget\":137000000,\"Release Date\":\"Jun 20 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":138,\"Distributor\":\"Universal\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Ang Lee\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":5.7,\"IMDB Votes\":70844},{\"Title\":\"The Incredible Hulk\",\"US Gross\":134806913,\"Worldwide Gross\":263349257,\"US DVD Sales\":58503066,\"Production Budget\":137500000,\"Release Date\":\"Jun 13 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":112,\"Distributor\":\"Universal\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":\"Louis Leterrier\",\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":7.1,\"IMDB Votes\":82419},{\"Title\":\"The Hunchback of Notre Dame\",\"US Gross\":100138851,\"Worldwide Gross\":325500000,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Jun 21 1996\",\"MPAA Rating\":\"G\",\"Running Time min\":86,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Gary Trousdale\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":6.5,\"IMDB Votes\":19479},{\"Title\":\"The Hunted\",\"US Gross\":34234008,\"Worldwide Gross\":45016494,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Mar 14 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":94,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"William Friedkin\",\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":5.8,\"IMDB Votes\":18941},{\"Title\":\"Hurricane Streets\",\"US Gross\":334041,\"Worldwide Gross\":367582,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Feb 13 1998\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Hurt Locker\",\"US Gross\":14700000,\"Worldwide Gross\":44468574,\"US DVD Sales\":31304710,\"Production Budget\":15000000,\"Release Date\":\"Jun 26 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kathryn Bigelow\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":83679},{\"Title\":\"Hustle & Flow\",\"US Gross\":22202809,\"Worldwide Gross\":23563727,\"US DVD Sales\":null,\"Production Budget\":2800000,\"Release Date\":\"Jul 22 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":18688},{\"Title\":\"Starsky & Hutch\",\"US Gross\":88200225,\"Worldwide Gross\":170200225,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Mar 05 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Todd Phillips\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.2,\"IMDB Votes\":48935},{\"Title\":\"Hollywood Ending\",\"US Gross\":4839383,\"Worldwide Gross\":14839383,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"May 03 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.3,\"IMDB Votes\":10486},{\"Title\":\"Hollywood Homicide\",\"US Gross\":30207785,\"Worldwide Gross\":51107785,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Jun 13 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":116,\"Distributor\":\"Sony/Columbia\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ron Shelton\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.2,\"IMDB Votes\":16452},{\"Title\":\"Whatever it Takes\",\"US Gross\":8735529,\"Worldwide Gross\":8735529,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Mar 24 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":5.2,\"IMDB Votes\":4192},{\"Title\":\"Ice Age: The Meltdown\",\"US Gross\":195330621,\"Worldwide Gross\":651899282,\"US DVD Sales\":131919814,\"Production Budget\":75000000,\"Release Date\":\"Mar 31 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Carlos Saldanha\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":50981},{\"Title\":\"Ice Age: Dawn of the Dinosaurs\",\"US Gross\":196573705,\"Worldwide Gross\":886685941,\"US DVD Sales\":87544387,\"Production Budget\":90000000,\"Release Date\":\"Jul 01 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":93,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Carlos Saldanha\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":33289},{\"Title\":\"Ice Age\",\"US Gross\":176387405,\"Worldwide Gross\":383257136,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Mar 15 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":81,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Chris Wedge\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7.4,\"IMDB Votes\":75552},{\"Title\":\"Ice Princess\",\"US Gross\":24381334,\"Worldwide Gross\":25732334,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Mar 18 2005\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":6,\"IMDB Votes\":7106},{\"Title\":\"The Ice Storm\",\"US Gross\":8038061,\"Worldwide Gross\":16011975,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Sep 27 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Ang Lee\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.5,\"IMDB Votes\":27544},{\"Title\":\"I Come with the Rain\",\"US Gross\":0,\"Worldwide Gross\":627422,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Dec 31 1969\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":618},{\"Title\":\"Identity\",\"US Gross\":52131264,\"Worldwide Gross\":90231264,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Apr 25 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":90,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James Mangold\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":7.3,\"IMDB Votes\":57909},{\"Title\":\"An Ideal Husband\",\"US Gross\":18542974,\"Worldwide Gross\":18542974,\"US DVD Sales\":null,\"Production Budget\":10700000,\"Release Date\":\"Jun 18 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"Miramax\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":6.7,\"IMDB Votes\":8078},{\"Title\":\"Idlewild\",\"US Gross\":12669914,\"Worldwide Gross\":12669914,\"US DVD Sales\":3120029,\"Production Budget\":15000000,\"Release Date\":\"Aug 25 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":5.8,\"IMDB Votes\":3056},{\"Title\":\"Igby Goes Down\",\"US Gross\":4777465,\"Worldwide Gross\":4777465,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Sep 13 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7,\"IMDB Votes\":19050},{\"Title\":\"Igor\",\"US Gross\":19528188,\"Worldwide Gross\":26608350,\"US DVD Sales\":12361783,\"Production Budget\":30000000,\"Release Date\":\"Sep 19 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":86,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":6,\"IMDB Votes\":6614},{\"Title\":\"I Got the Hook-Up!\",\"US Gross\":10317779,\"Worldwide Gross\":10317779,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"May 27 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":3.3,\"IMDB Votes\":985},{\"Title\":\"Idle Hands\",\"US Gross\":4023741,\"Worldwide Gross\":4023741,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Apr 30 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":5.8,\"IMDB Votes\":16157},{\"Title\":\"Imaginary Heroes\",\"US Gross\":228524,\"Worldwide Gross\":290875,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Dec 17 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":7.2,\"IMDB Votes\":6057},{\"Title\":\"I Still Know What You Did Last Summer\",\"US Gross\":40020622,\"Worldwide Gross\":40020622,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Nov 13 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":101,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":4.1,\"IMDB Votes\":23268},{\"Title\":\"I Know What You Did Last Summer\",\"US Gross\":72250091,\"Worldwide Gross\":125250091,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Oct 17 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":101,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":5.4,\"IMDB Votes\":36807},{\"Title\":\"I Love You, Beth Cooper\",\"US Gross\":14800725,\"Worldwide Gross\":16382538,\"US DVD Sales\":5475072,\"Production Budget\":18000000,\"Release Date\":\"Jul 10 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Chris Columbus\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":179},{\"Title\":\"The Illusionist\",\"US Gross\":39868642,\"Worldwide Gross\":84276175,\"US DVD Sales\":38200717,\"Production Budget\":16500000,\"Release Date\":\"Aug 18 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"Yari Film Group Releasing\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":7.7,\"IMDB Votes\":92040},{\"Title\":\"But I'm a Cheerleader\",\"US Gross\":2205627,\"Worldwide Gross\":2595216,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Jul 07 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":10073},{\"Title\":\"The Imaginarium of Doctor Parnassus\",\"US Gross\":7689458,\"Worldwide Gross\":58692979,\"US DVD Sales\":5387124,\"Production Budget\":30000000,\"Release Date\":\"Dec 25 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":122,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Terry Gilliam\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":7.1,\"IMDB Votes\":33374},{\"Title\":\"Imagine Me & You\",\"US Gross\":672243,\"Worldwide Gross\":972243,\"US DVD Sales\":null,\"Production Budget\":7900000,\"Release Date\":\"Jan 27 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":9534},{\"Title\":\"Imagine That\",\"US Gross\":16123323,\"Worldwide Gross\":16123323,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Jun 12 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":107,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Karey Kirkpatrick\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.4,\"IMDB Votes\":3092},{\"Title\":\"Impostor\",\"US Gross\":6114237,\"Worldwide Gross\":6114237,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jan 04 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":9020},{\"Title\":\"Inception\",\"US Gross\":285630280,\"Worldwide Gross\":753830280,\"US DVD Sales\":null,\"Production Budget\":160000000,\"Release Date\":\"Jul 16 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":147,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Christopher Nolan\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":9.1,\"IMDB Votes\":188247},{\"Title\":\"In the Cut\",\"US Gross\":4717455,\"Worldwide Gross\":23693646,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Oct 22 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jane Campion\",\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":5.2,\"IMDB Votes\":11590},{\"Title\":\"In Too Deep\",\"US Gross\":14026509,\"Worldwide Gross\":14026509,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Aug 25 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Gramercy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":5.5,\"IMDB Votes\":2529},{\"Title\":\"IndigËnes\",\"US Gross\":320700,\"Worldwide Gross\":6877936,\"US DVD Sales\":null,\"Production Budget\":18900000,\"Release Date\":\"Dec 15 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":5775},{\"Title\":\"Indiana Jones and the Kingdom of the Crystal Skull\",\"US Gross\":317023851,\"Worldwide Gross\":786558145,\"US DVD Sales\":109654917,\"Production Budget\":185000000,\"Release Date\":\"May 22 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":6.6,\"IMDB Votes\":135071},{\"Title\":\"In Dreams\",\"US Gross\":12017369,\"Worldwide Gross\":12017369,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jan 15 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Neil Jordan\",\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5.3,\"IMDB Votes\":7138},{\"Title\":\"Infamous\",\"US Gross\":1151330,\"Worldwide Gross\":2613717,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Oct 13 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":118,\"Distributor\":\"Warner Independent\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":7.1,\"IMDB Votes\":6917},{\"Title\":\"The Informant\",\"US Gross\":33316821,\"Worldwide Gross\":41771168,\"US DVD Sales\":6212437,\"Production Budget\":22000000,\"Release Date\":\"Sep 18 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Factual Book/Article\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steven Soderbergh\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":380},{\"Title\":\"The Informers\",\"US Gross\":315000,\"Worldwide Gross\":315000,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Apr 24 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Senator Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":7595},{\"Title\":\"Inkheart\",\"US Gross\":17303424,\"Worldwide Gross\":58051454,\"US DVD Sales\":8342886,\"Production Budget\":60000000,\"Release Date\":\"Jan 23 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":105,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Iain Softley\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.1,\"IMDB Votes\":14157},{\"Title\":\"In & Out\",\"US Gross\":63826569,\"Worldwide Gross\":83226569,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Sep 19 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":92,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Frank Oz\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.1,\"IMDB Votes\":18773},{\"Title\":\"I Now Pronounce You Chuck and Larry\",\"US Gross\":119725280,\"Worldwide Gross\":185708462,\"US DVD Sales\":69334335,\"Production Budget\":85000000,\"Release Date\":\"Jul 20 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":115,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Dennis Dugan\",\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":6.1,\"IMDB Votes\":46347},{\"Title\":\"Inside Man\",\"US Gross\":88634237,\"Worldwide Gross\":184634237,\"US DVD Sales\":37712869,\"Production Budget\":50000000,\"Release Date\":\"Mar 24 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.7,\"IMDB Votes\":86229},{\"Title\":\"The Insider\",\"US Gross\":28965197,\"Worldwide Gross\":60265197,\"US DVD Sales\":null,\"Production Budget\":68000000,\"Release Date\":\"Nov 05 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":157,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Michael Mann\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8,\"IMDB Votes\":68747},{\"Title\":\"Insomnia\",\"US Gross\":67263182,\"Worldwide Gross\":113622499,\"US DVD Sales\":null,\"Production Budget\":46000000,\"Release Date\":\"May 24 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":118,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Christopher Nolan\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":6.3,\"IMDB Votes\":33},{\"Title\":\"Inspector Gadget\",\"US Gross\":97387965,\"Worldwide Gross\":97387965,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Jul 23 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":77,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":3.9,\"IMDB Votes\":13881},{\"Title\":\"Instinct\",\"US Gross\":34105207,\"Worldwide Gross\":34105207,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Jun 04 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":123,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jon Turteltaub\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":6.2,\"IMDB Votes\":15388},{\"Title\":\"The Invention of Lying\",\"US Gross\":18451251,\"Worldwide Gross\":32679264,\"US DVD Sales\":4548709,\"Production Budget\":18500000,\"Release Date\":\"Oct 02 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Ricky Gervais\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6.5,\"IMDB Votes\":24578},{\"Title\":\"The Invasion\",\"US Gross\":15074191,\"Worldwide Gross\":40147042,\"US DVD Sales\":4845943,\"Production Budget\":80000000,\"Release Date\":\"Aug 17 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":99,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":6,\"IMDB Votes\":28605},{\"Title\":\"Ira and Abby\",\"US Gross\":221096,\"Worldwide Gross\":221096,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Sep 14 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":855},{\"Title\":\"I, Robot\",\"US Gross\":144801023,\"Worldwide Gross\":348601023,\"US DVD Sales\":null,\"Production Budget\":105000000,\"Release Date\":\"Jul 16 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":115,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Alex Proyas\",\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Iron Man 2\",\"US Gross\":312128345,\"Worldwide Gross\":622128345,\"US DVD Sales\":null,\"Production Budget\":170000000,\"Release Date\":\"May 07 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":\"Jon Favreau\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":7.3,\"IMDB Votes\":61256},{\"Title\":\"Iron Man\",\"US Gross\":318604126,\"Worldwide Gross\":582604126,\"US DVD Sales\":169251757,\"Production Budget\":186000000,\"Release Date\":\"May 02 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":126,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Jon Favreau\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.9,\"IMDB Votes\":174040},{\"Title\":\"The Iron Giant\",\"US Gross\":23159305,\"Worldwide Gross\":31333917,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Aug 04 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":86,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Brad Bird\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":7.9,\"IMDB Votes\":38791},{\"Title\":\"Obsluhoval jsem anglickÈho kr·le\",\"US Gross\":617228,\"Worldwide Gross\":7174984,\"US DVD Sales\":null,\"Production Budget\":4900000,\"Release Date\":\"Aug 29 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":3048},{\"Title\":\"The Island\",\"US Gross\":35818913,\"Worldwide Gross\":163018913,\"US DVD Sales\":null,\"Production Budget\":120000000,\"Release Date\":\"Jul 22 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Michael Bay\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.9,\"IMDB Votes\":82601},{\"Title\":\"Isn't She Great\",\"US Gross\":2954405,\"Worldwide Gross\":2954405,\"US DVD Sales\":null,\"Production Budget\":36000000,\"Release Date\":\"Jan 28 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Magazine Article\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andrew Bergman\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":4.9,\"IMDB Votes\":1426},{\"Title\":\"I Spy\",\"US Gross\":33561137,\"Worldwide Gross\":33561137,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Nov 01 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Betty Thomas\",\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":5.3,\"IMDB Votes\":18061},{\"Title\":\"The Italian Job\",\"US Gross\":106126012,\"Worldwide Gross\":175826012,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"May 30 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":111,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"F. Gary Gray\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":6.9,\"IMDB Votes\":76835},{\"Title\":\"I Think I Love My Wife\",\"US Gross\":12559771,\"Worldwide Gross\":13205411,\"US DVD Sales\":13566229,\"Production Budget\":14000000,\"Release Date\":\"Mar 16 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":94,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Remake\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Chris Rock\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5.5,\"IMDB Votes\":8643},{\"Title\":\"Jack Frost\",\"US Gross\":34645374,\"Worldwide Gross\":34645374,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Dec 11 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":95,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":4.6,\"IMDB Votes\":6932},{\"Title\":\"Jackie Brown\",\"US Gross\":39673162,\"Worldwide Gross\":72673162,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Dec 25 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":154,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Quentin Tarantino\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":7.6,\"IMDB Votes\":84068},{\"Title\":\"The Jackal\",\"US Gross\":54956941,\"Worldwide Gross\":159356941,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Nov 14 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":124,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Caton-Jones\",\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":6,\"IMDB Votes\":35540},{\"Title\":\"The Jacket\",\"US Gross\":6301131,\"Worldwide Gross\":15452978,\"US DVD Sales\":null,\"Production Budget\":28500000,\"Release Date\":\"Mar 04 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Independent\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":7.1,\"IMDB Votes\":35932},{\"Title\":\"Jakob the Liar\",\"US Gross\":4956401,\"Worldwide Gross\":4956401,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Sep 24 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":6.1,\"IMDB Votes\":6636},{\"Title\":\"Jarhead\",\"US Gross\":62647540,\"Worldwide Gross\":96947540,\"US DVD Sales\":52209103,\"Production Budget\":72000000,\"Release Date\":\"Nov 04 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":115,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Sam Mendes\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":7.2,\"IMDB Votes\":60650},{\"Title\":\"Jawbreaker\",\"US Gross\":3076820,\"Worldwide Gross\":3076820,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Feb 19 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":4.8,\"IMDB Votes\":9329},{\"Title\":\"The World is Not Enough\",\"US Gross\":126930660,\"Worldwide Gross\":361730660,\"US DVD Sales\":null,\"Production Budget\":135000000,\"Release Date\":\"Nov 19 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":125,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Apted\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":6.3,\"IMDB Votes\":59406},{\"Title\":\"Die Another Day\",\"US Gross\":160942139,\"Worldwide Gross\":431942139,\"US DVD Sales\":null,\"Production Budget\":142000000,\"Release Date\":\"Nov 22 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":133,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Lee Tamahori\",\"Rotten Tomatoes Rating\":59,\"IMDB Rating\":6,\"IMDB Votes\":67476},{\"Title\":\"Casino Royale\",\"US Gross\":167365000,\"Worldwide Gross\":596365000,\"US DVD Sales\":79681613,\"Production Budget\":102000000,\"Release Date\":\"Nov 17 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":144,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martin Campbell\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":8,\"IMDB Votes\":172936},{\"Title\":\"Quantum of Solace\",\"US Gross\":169368427,\"Worldwide Gross\":576368427,\"US DVD Sales\":44912115,\"Production Budget\":230000000,\"Release Date\":\"Nov 14 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Marc Forster\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.8,\"IMDB Votes\":93596},{\"Title\":\"Jennifer's Body\",\"US Gross\":16204793,\"Worldwide Gross\":32832166,\"US DVD Sales\":4998385,\"Production Budget\":16000000,\"Release Date\":\"Sep 18 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":5.3,\"IMDB Votes\":24265},{\"Title\":\"Jackass: Number Two\",\"US Gross\":72778712,\"Worldwide Gross\":83578712,\"US DVD Sales\":49050925,\"Production Budget\":11000000,\"Release Date\":\"Sep 22 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":7.2,\"IMDB Votes\":24434},{\"Title\":\"Jackass: The Movie\",\"US Gross\":64282312,\"Worldwide Gross\":75466905,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Oct 25 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":92,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":27454},{\"Title\":\"Journey to the Center of the Earth\",\"US Gross\":101704370,\"Worldwide Gross\":240904370,\"US DVD Sales\":26253886,\"Production Budget\":45000000,\"Release Date\":\"Jul 11 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":92,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":23756},{\"Title\":\"Joe Dirt\",\"US Gross\":27087695,\"Worldwide Gross\":30987695,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Apr 11 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":91,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Dennie Gordon\",\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":5.4,\"IMDB Votes\":18666},{\"Title\":\"The Curse of the Jade Scorpion\",\"US Gross\":7496522,\"Worldwide Gross\":18496522,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Aug 24 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":6.7,\"IMDB Votes\":15897},{\"Title\":\"Jeepers Creepers\",\"US Gross\":37904175,\"Worldwide Gross\":55026845,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Aug 31 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":91,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":5.7,\"IMDB Votes\":30610},{\"Title\":\"Johnny English\",\"US Gross\":28013509,\"Worldwide Gross\":160323929,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Jul 18 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":87,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.8,\"IMDB Votes\":29246},{\"Title\":\"Jeepers Creepers II\",\"US Gross\":35623801,\"Worldwide Gross\":35623801,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Aug 29 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":104,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.3,\"IMDB Votes\":15975},{\"Title\":\"The Assassination of Jesse James by the Coward Robert Ford\",\"US Gross\":3909149,\"Worldwide Gross\":15001776,\"US DVD Sales\":9871881,\"Production Budget\":30000000,\"Release Date\":\"Sep 21 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":160,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Western\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":7.7,\"IMDB Votes\":57465},{\"Title\":\"Johnson Family Vacation\",\"US Gross\":31203964,\"Worldwide Gross\":31462753,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Apr 07 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":6,\"IMDB Rating\":3.8,\"IMDB Votes\":3278},{\"Title\":\"Jersey Girl\",\"US Gross\":25266129,\"Worldwide Gross\":37066129,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Mar 26 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":102,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin Smith\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.2,\"IMDB Votes\":27370},{\"Title\":\"The Jimmy Show\",\"US Gross\":703,\"Worldwide Gross\":703,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Dec 13 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":5.1,\"IMDB Votes\":358},{\"Title\":\"Jindabyne\",\"US Gross\":399879,\"Worldwide Gross\":2862544,\"US DVD Sales\":null,\"Production Budget\":10800000,\"Release Date\":\"Apr 27 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":3920},{\"Title\":\"Jackpot\",\"US Gross\":44452,\"Worldwide Gross\":44452,\"US DVD Sales\":null,\"Production Budget\":400000,\"Release Date\":\"Jul 27 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Michael Polish\",\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":5.7,\"IMDB Votes\":408},{\"Title\":\"Just Like Heaven\",\"US Gross\":48318130,\"Worldwide Gross\":100687083,\"US DVD Sales\":37588463,\"Production Budget\":58000000,\"Release Date\":\"Sep 16 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mark Waters\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6.8,\"IMDB Votes\":29457},{\"Title\":\"Just My Luck\",\"US Gross\":17326650,\"Worldwide Gross\":38326650,\"US DVD Sales\":11051609,\"Production Budget\":28000000,\"Release Date\":\"May 12 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Donald Petrie\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5,\"IMDB Votes\":13368},{\"Title\":\"The Messenger: The Story of Joan of Arc\",\"US Gross\":14271297,\"Worldwide Gross\":14271297,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Nov 12 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Luc Besson\",\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Jungle Book 2\",\"US Gross\":47901582,\"Worldwide Gross\":135703599,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Feb 14 2003\",\"MPAA Rating\":\"G\",\"Running Time min\":72,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5.2,\"IMDB Votes\":2740},{\"Title\":\"Joe Somebody\",\"US Gross\":22770864,\"Worldwide Gross\":24515990,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Dec 21 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":98,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Pasquin\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5.3,\"IMDB Votes\":5313},{\"Title\":\"Jonah Hex\",\"US Gross\":10547117,\"Worldwide Gross\":10547117,\"US DVD Sales\":null,\"Production Budget\":47000000,\"Release Date\":\"Jun 18 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":81,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.3,\"IMDB Votes\":2316},{\"Title\":\"John Q\",\"US Gross\":71026631,\"Worldwide Gross\":102226631,\"US DVD Sales\":null,\"Production Budget\":36000000,\"Release Date\":\"Feb 15 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":116,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Nick Cassavetes\",\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":6.6,\"IMDB Votes\":32338},{\"Title\":\"Jonah: A VeggieTales Movie\",\"US Gross\":25571351,\"Worldwide Gross\":25606175,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Oct 04 2002\",\"MPAA Rating\":\"G\",\"Running Time min\":82,\"Distributor\":\"Artisan\",\"Source\":\"Based on Short Film\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":1704},{\"Title\":\"The Joneses\",\"US Gross\":1475746,\"Worldwide Gross\":1475746,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Apr 16 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Roadside Attractions\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":4345},{\"Title\":\"Josie and the Pussycats\",\"US Gross\":14252830,\"Worldwide Gross\":14252830,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Apr 11 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":5.1,\"IMDB Votes\":11284},{\"Title\":\"Joy Ride\",\"US Gross\":21973182,\"Worldwide Gross\":21973182,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Oct 05 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":97,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Dahl\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.4,\"IMDB Votes\":118},{\"Title\":\"Jerry Maguire\",\"US Gross\":153952592,\"Worldwide Gross\":274000000,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Dec 13 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":138,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Cameron Crowe\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7.2,\"IMDB Votes\":78603},{\"Title\":\"Jay and Silent Bob Strike Back\",\"US Gross\":30059386,\"Worldwide Gross\":33762400,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Aug 24 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":104,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Spin-Off\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin Smith\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":6.8,\"IMDB Votes\":62692},{\"Title\":\"Jesus' Son\",\"US Gross\":1282084,\"Worldwide Gross\":1687548,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Jun 16 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":4620},{\"Title\":\"Being Julia\",\"US Gross\":7739049,\"Worldwide Gross\":11039049,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Oct 15 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.1,\"IMDB Votes\":7067},{\"Title\":\"Julie & Julia\",\"US Gross\":94125426,\"Worldwide Gross\":126646119,\"US DVD Sales\":40846498,\"Production Budget\":40000000,\"Release Date\":\"Aug 07 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Nora Ephron\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":7.2,\"IMDB Votes\":22269},{\"Title\":\"Jumper\",\"US Gross\":80172128,\"Worldwide Gross\":222117068,\"US DVD Sales\":33679094,\"Production Budget\":82500000,\"Release Date\":\"Feb 14 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Doug Liman\",\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.9,\"IMDB Votes\":69161},{\"Title\":\"Junebug\",\"US Gross\":2678010,\"Worldwide Gross\":2678010,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Aug 03 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.1,\"IMDB Votes\":11457},{\"Title\":\"Juno\",\"US Gross\":143495265,\"Worldwide Gross\":230327671,\"US DVD Sales\":57612374,\"Production Budget\":7000000,\"Release Date\":\"Dec 05 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jason Reitman\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":7.9,\"IMDB Votes\":149855},{\"Title\":\"Jurassic Park 3\",\"US Gross\":181166115,\"Worldwide Gross\":365900000,\"US DVD Sales\":null,\"Production Budget\":93000000,\"Release Date\":\"Jul 18 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":92,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Joe Johnston\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.9,\"IMDB Votes\":151365},{\"Title\":\"Just Looking\",\"US Gross\":39852,\"Worldwide Gross\":39852,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Oct 13 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Jason Alexander\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":949},{\"Title\":\"Just Married\",\"US Gross\":56127162,\"Worldwide Gross\":56127162,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Jan 10 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Shawn Levy\",\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":5.1,\"IMDB Votes\":19508},{\"Title\":\"Juwanna Man\",\"US Gross\":13571817,\"Worldwide Gross\":13771817,\"US DVD Sales\":null,\"Production Budget\":15600000,\"Release Date\":\"Jun 21 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.1,\"IMDB Votes\":3062},{\"Title\":\"Freddy vs. Jason\",\"US Gross\":82622655,\"Worldwide Gross\":114326122,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Aug 15 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":97,\"Distributor\":\"New Line\",\"Source\":\"Spin-Off\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ronny Yu\",\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":5.8,\"IMDB Votes\":39182},{\"Title\":\"K-19: The Widowmaker\",\"US Gross\":35168966,\"Worldwide Gross\":65716126,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Jul 19 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":138,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":\"Kathryn Bigelow\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6.5,\"IMDB Votes\":22288},{\"Title\":\"Kate and Leopold\",\"US Gross\":47095453,\"Worldwide Gross\":70937778,\"US DVD Sales\":null,\"Production Budget\":48000000,\"Release Date\":\"Dec 25 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":118,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"James Mangold\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":23600},{\"Title\":\"Kama Sutra\",\"US Gross\":4109095,\"Worldwide Gross\":4109095,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Feb 28 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Trimark\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Mira Nair\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Kangaroo Jack\",\"US Gross\":66723216,\"Worldwide Gross\":90723216,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jan 17 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":89,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.1,\"IMDB Votes\":9994},{\"Title\":\"Kick-Ass\",\"US Gross\":48071303,\"Worldwide Gross\":76252166,\"US DVD Sales\":18666874,\"Production Budget\":28000000,\"Release Date\":\"Apr 16 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Matthew Vaughn\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":8.1,\"IMDB Votes\":86990},{\"Title\":\"The Original Kings of Comedy\",\"US Gross\":38168022,\"Worldwide Gross\":38236338,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Aug 18 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":116,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Concert/Performance\",\"Creative Type\":\"Factual\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":6.2,\"IMDB Votes\":3258},{\"Title\":\"Kiss of the Dragon\",\"US Gross\":36833473,\"Worldwide Gross\":36833473,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jul 06 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":98,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Chris Nahon\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":6.3,\"IMDB Votes\":22087},{\"Title\":\"Kung Fu Hustle\",\"US Gross\":17104669,\"Worldwide Gross\":101004669,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Apr 08 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Stephen Chow\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Karate Kid\",\"US Gross\":176591618,\"Worldwide Gross\":350591618,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jun 11 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":140,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.1,\"IMDB Votes\":20039},{\"Title\":\"The Kentucky Fried Movie\",\"US Gross\":15000000,\"Worldwide Gross\":20000000,\"US DVD Sales\":null,\"Production Budget\":600000,\"Release Date\":\"Aug 10 1977\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"United Film Distribution Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"John Landis\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":6.4,\"IMDB Votes\":8342},{\"Title\":\"Kicking and Screaming\",\"US Gross\":52842724,\"Worldwide Gross\":55842724,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"May 13 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":3841},{\"Title\":\"Kill Bill: Volume 2\",\"US Gross\":66207920,\"Worldwide Gross\":150907920,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Apr 16 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":136,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Quentin Tarantino\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8,\"IMDB Votes\":182834},{\"Title\":\"Kill Bill: Volume 1\",\"US Gross\":70098138,\"Worldwide Gross\":180098138,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Oct 10 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":111,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Quentin Tarantino\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":8.2,\"IMDB Votes\":231761},{\"Title\":\"Kingdom Come\",\"US Gross\":23247539,\"Worldwide Gross\":23393939,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Apr 11 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":94,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Kingdom of Heaven\",\"US Gross\":47398413,\"Worldwide Gross\":211398413,\"US DVD Sales\":null,\"Production Budget\":110000000,\"Release Date\":\"May 06 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":7.1,\"IMDB Votes\":83189},{\"Title\":\"Kinsey\",\"US Gross\":10214647,\"Worldwide Gross\":13000959,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Nov 12 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Bill Condon\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.2,\"IMDB Votes\":20135},{\"Title\":\"Kissing Jessica Stein\",\"US Gross\":7025722,\"Worldwide Gross\":8915268,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Mar 13 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Play\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":8291},{\"Title\":\"Kiss the Girls\",\"US Gross\":60527873,\"Worldwide Gross\":60527873,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Oct 03 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":6.4,\"IMDB Votes\":20932},{\"Title\":\"King Kong\",\"US Gross\":218080025,\"Worldwide Gross\":550517357,\"US DVD Sales\":140752353,\"Production Budget\":207000000,\"Release Date\":\"Dec 14 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":187,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Peter Jackson\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.6,\"IMDB Votes\":132720},{\"Title\":\"Knocked Up\",\"US Gross\":148761765,\"Worldwide Gross\":218994109,\"US DVD Sales\":117601397,\"Production Budget\":27500000,\"Release Date\":\"Jun 01 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":132,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Judd Apatow\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.5,\"IMDB Votes\":111192},{\"Title\":\"Knight and Day\",\"US Gross\":76373029,\"Worldwide Gross\":228937227,\"US DVD Sales\":null,\"Production Budget\":117000000,\"Release Date\":\"Jun 23 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":109,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James Mangold\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":13887},{\"Title\":\"The Kingdom\",\"US Gross\":47467250,\"Worldwide Gross\":86509602,\"US DVD Sales\":34065220,\"Production Budget\":72500000,\"Release Date\":\"Sep 28 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Berg\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":7.1,\"IMDB Votes\":47200},{\"Title\":\"Black Knight\",\"US Gross\":33422806,\"Worldwide Gross\":33422806,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Nov 21 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":96,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.3,\"IMDB Votes\":12747},{\"Title\":\"Knockaround Guys\",\"US Gross\":11660180,\"Worldwide Gross\":12419700,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Oct 11 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":11019},{\"Title\":\"Knowing\",\"US Gross\":79957634,\"Worldwide Gross\":187858642,\"US DVD Sales\":23450931,\"Production Budget\":50000000,\"Release Date\":\"Mar 20 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":121,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alex Proyas\",\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":6.4,\"IMDB Votes\":58138},{\"Title\":\"Knock Off\",\"US Gross\":10319915,\"Worldwide Gross\":10319915,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Sep 04 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":4.1,\"IMDB Votes\":5852},{\"Title\":\"K-PAX\",\"US Gross\":50315140,\"Worldwide Gross\":50315140,\"US DVD Sales\":null,\"Production Budget\":48000000,\"Release Date\":\"Oct 26 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":121,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Iain Softley\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":7.3,\"IMDB Votes\":50475},{\"Title\":\"Christmas with the Kranks\",\"US Gross\":73701902,\"Worldwide Gross\":96501902,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Nov 24 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":98,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":5,\"IMDB Rating\":4.7,\"IMDB Votes\":9126},{\"Title\":\"King's Ransom\",\"US Gross\":4008527,\"Worldwide Gross\":4049527,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Apr 22 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jeffrey W. Byrd\",\"Rotten Tomatoes Rating\":2,\"IMDB Rating\":3.5,\"IMDB Votes\":2251},{\"Title\":\"Kiss Kiss, Bang Bang\",\"US Gross\":4235837,\"Worldwide Gross\":13105837,\"US DVD Sales\":6863163,\"Production Budget\":15000000,\"Release Date\":\"Oct 21 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"A Knight's Tale\",\"US Gross\":56083966,\"Worldwide Gross\":56083966,\"US DVD Sales\":null,\"Production Budget\":41000000,\"Release Date\":\"May 11 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":132,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":6.6,\"IMDB Votes\":47609},{\"Title\":\"The Kite Runner\",\"US Gross\":15800078,\"Worldwide Gross\":73222245,\"US DVD Sales\":6563936,\"Production Budget\":20000000,\"Release Date\":\"Dec 14 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":122,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Marc Forster\",\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":7.8,\"IMDB Votes\":26816},{\"Title\":\"Kundun\",\"US Gross\":5686694,\"Worldwide Gross\":5686694,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Dec 25 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7,\"IMDB Votes\":10248},{\"Title\":\"Kung Pow: Enter the Fist\",\"US Gross\":16033556,\"Worldwide Gross\":16033556,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jan 25 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steve Oedekerk\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":19348},{\"Title\":\"L.A. Confidential\",\"US Gross\":64604977,\"Worldwide Gross\":110604977,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Sep 19 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":137,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Curtis Hanson\",\"Rotten Tomatoes Rating\":99,\"IMDB Rating\":8.4,\"IMDB Votes\":165161},{\"Title\":\"Law Abiding Citizen\",\"US Gross\":73357727,\"Worldwide Gross\":113190972,\"US DVD Sales\":20038881,\"Production Budget\":53000000,\"Release Date\":\"Oct 16 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"Overture Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"F. Gary Gray\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":7.2,\"IMDB Votes\":45577},{\"Title\":\"Ladder 49\",\"US Gross\":74541707,\"Worldwide Gross\":102332848,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Oct 01 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":105,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jay Russell\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.5,\"IMDB Votes\":23369},{\"Title\":\"The Ladykillers\",\"US Gross\":39692139,\"Worldwide Gross\":77692139,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Mar 26 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":104,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Coen\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6.2,\"IMDB Votes\":39242},{\"Title\":\"Lady in the Water\",\"US Gross\":42285169,\"Worldwide Gross\":72785169,\"US DVD Sales\":12440849,\"Production Budget\":75000000,\"Release Date\":\"Jul 21 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"M. Night Shyamalan\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":5.8,\"IMDB Votes\":47535},{\"Title\":\"The Lake House\",\"US Gross\":52330111,\"Worldwide Gross\":114830111,\"US DVD Sales\":39758509,\"Production Budget\":40000000,\"Release Date\":\"Jun 16 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":6.8,\"IMDB Votes\":36613},{\"Title\":\"Lakeview Terrace\",\"US Gross\":39263506,\"Worldwide Gross\":44263506,\"US DVD Sales\":21455006,\"Production Budget\":20000000,\"Release Date\":\"Sep 19 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Neil LaBute\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.3,\"IMDB Votes\":18547},{\"Title\":\"The Ladies Man\",\"US Gross\":13592872,\"Worldwide Gross\":13719474,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Oct 13 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":4.7,\"IMDB Votes\":6556},{\"Title\":\"Land of the Lost\",\"US Gross\":49438370,\"Worldwide Gross\":69548641,\"US DVD Sales\":18953806,\"Production Budget\":100000000,\"Release Date\":\"Jun 05 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Brad Silberling\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.3,\"IMDB Votes\":16830},{\"Title\":\"Changing Lanes\",\"US Gross\":66790248,\"Worldwide Gross\":66790248,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Apr 12 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":99,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":6.5,\"IMDB Votes\":29222},{\"Title\":\"Lars and the Real Girl\",\"US Gross\":5956480,\"Worldwide Gross\":10553442,\"US DVD Sales\":2560922,\"Production Budget\":12500000,\"Release Date\":\"Oct 12 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.5,\"IMDB Votes\":32423},{\"Title\":\"L'auberge espagnole\",\"US Gross\":3895664,\"Worldwide Gross\":3895664,\"US DVD Sales\":null,\"Production Budget\":5900000,\"Release Date\":\"May 16 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":15696},{\"Title\":\"Laws of Attraction\",\"US Gross\":17848322,\"Worldwide Gross\":29948322,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Apr 30 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":18,\"IMDB Rating\":5.7,\"IMDB Votes\":9266},{\"Title\":\"Little Black Book\",\"US Gross\":20422207,\"Worldwide Gross\":21758371,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Aug 06 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":5.2,\"IMDB Votes\":7625},{\"Title\":\"Layer Cake\",\"US Gross\":2339957,\"Worldwide Gross\":11850214,\"US DVD Sales\":null,\"Production Budget\":6500000,\"Release Date\":\"May 13 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Matthew Vaughn\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":39857},{\"Title\":\"Larry the Cable Guy: Health Inspector\",\"US Gross\":15680099,\"Worldwide Gross\":15680099,\"US DVD Sales\":13180936,\"Production Budget\":17000000,\"Release Date\":\"Mar 24 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":6,\"IMDB Rating\":2.8,\"IMDB Votes\":7547},{\"Title\":\"Little Children\",\"US Gross\":5463019,\"Worldwide Gross\":14763019,\"US DVD Sales\":3657245,\"Production Budget\":14000000,\"Release Date\":\"Oct 06 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":136,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Todd Field\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":7.8,\"IMDB Votes\":37162},{\"Title\":\"Save the Last Dance\",\"US Gross\":91038276,\"Worldwide Gross\":131638276,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Jan 12 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":113,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":5.9,\"IMDB Votes\":20355},{\"Title\":\"George A. Romero's Land of the Dead\",\"US Gross\":20700082,\"Worldwide Gross\":45900082,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jun 24 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"George A. Romero\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Left Behind\",\"US Gross\":4221341,\"Worldwide Gross\":4221341,\"US DVD Sales\":null,\"Production Budget\":18500000,\"Release Date\":\"Feb 02 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Cloud Ten Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5,\"IMDB Votes\":43},{\"Title\":\"Legion\",\"US Gross\":40122938,\"Worldwide Gross\":64622938,\"US DVD Sales\":16715657,\"Production Budget\":26000000,\"Release Date\":\"Jan 22 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5,\"IMDB Votes\":19962},{\"Title\":\"I am Legend\",\"US Gross\":256393010,\"Worldwide Gross\":585055701,\"US DVD Sales\":129742540,\"Production Budget\":150000000,\"Release Date\":\"Dec 14 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":100,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Francis Lawrence\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":7.1,\"IMDB Votes\":153631},{\"Title\":\"Leatherheads\",\"US Gross\":31373938,\"Worldwide Gross\":40830862,\"US DVD Sales\":8871266,\"Production Budget\":58000000,\"Release Date\":\"Apr 04 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"George Clooney\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":6.1,\"IMDB Votes\":14504},{\"Title\":\"Life Before Her Eyes\",\"US Gross\":303439,\"Worldwide Gross\":303439,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Apr 18 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":90,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Letters from Iwo Jima\",\"US Gross\":13756082,\"Worldwide Gross\":68756082,\"US DVD Sales\":13625847,\"Production Budget\":13000000,\"Release Date\":\"Dec 20 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":141,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Clint Eastwood\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8.1,\"IMDB Votes\":56872},{\"Title\":\"Life, or Something Like It\",\"US Gross\":14448589,\"Worldwide Gross\":14448589,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Apr 26 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stephen Herek\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Last Holiday\",\"US Gross\":38399961,\"Worldwide Gross\":43343247,\"US DVD Sales\":29881643,\"Production Budget\":45000000,\"Release Date\":\"Jan 13 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wayne Wang\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6.3,\"IMDB Votes\":8060},{\"Title\":\"The Hurricane\",\"US Gross\":50699241,\"Worldwide Gross\":73956241,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Dec 29 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":125,\"Distributor\":\"Universal\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Norman Jewison\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.4,\"IMDB Votes\":32172},{\"Title\":\"Liar Liar\",\"US Gross\":181410615,\"Worldwide Gross\":302710615,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Mar 21 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":87,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tom Shadyac\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":6.7,\"IMDB Votes\":67798},{\"Title\":\"Equilibrium\",\"US Gross\":1190018,\"Worldwide Gross\":5345869,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 06 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":7.7,\"IMDB Votes\":86428},{\"Title\":\"Chasing Liberty\",\"US Gross\":12189514,\"Worldwide Gross\":12291975,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Jan 09 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5.8,\"IMDB Votes\":7855},{\"Title\":\"The Libertine\",\"US Gross\":4835065,\"Worldwide Gross\":9448623,\"US DVD Sales\":2836487,\"Production Budget\":22000000,\"Release Date\":\"Nov 23 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":16266},{\"Title\":\"L.I.E.\",\"US Gross\":1138836,\"Worldwide Gross\":1138836,\"US DVD Sales\":null,\"Production Budget\":700000,\"Release Date\":\"Sep 07 2001\",\"MPAA Rating\":\"Open\",\"Running Time min\":null,\"Distributor\":\"Lot 47 Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.2,\"IMDB Votes\":5122},{\"Title\":\"The Life Aquatic with Steve Zissou\",\"US Gross\":24006726,\"Worldwide Gross\":34806726,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Dec 10 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":118,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wes Anderson\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":7.2,\"IMDB Votes\":57889},{\"Title\":\"The Life of David Gale\",\"US Gross\":19694635,\"Worldwide Gross\":28920188,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Feb 21 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alan Parker\",\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":7.3,\"IMDB Votes\":37628},{\"Title\":\"Life\",\"US Gross\":64062587,\"Worldwide Gross\":73521587,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Apr 16 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ted Demme\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":5.3,\"IMDB Votes\":99},{\"Title\":\"Like Mike\",\"US Gross\":51432423,\"Worldwide Gross\":62432423,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jul 03 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":99,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"John Schultz\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":4.4,\"IMDB Votes\":4870},{\"Title\":\"Lilo & Stitch\",\"US Gross\":145771527,\"Worldwide Gross\":245800000,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jun 21 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":85,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":25611},{\"Title\":\"Limbo\",\"US Gross\":2016687,\"Worldwide Gross\":2016687,\"US DVD Sales\":null,\"Production Budget\":8300000,\"Release Date\":\"Jun 04 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Sayles\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":3855},{\"Title\":\"Light It Up\",\"US Gross\":5871603,\"Worldwide Gross\":5871603,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Nov 10 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.4,\"IMDB Votes\":2257},{\"Title\":\"Living Out Loud\",\"US Gross\":12905901,\"Worldwide Gross\":12905901,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Oct 30 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard LaGravenese\",\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":6.5,\"IMDB Votes\":3040},{\"Title\":\"The Lizzie McGuire Movie\",\"US Gross\":42734455,\"Worldwide Gross\":55534455,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"May 02 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":94,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":4.7,\"IMDB Votes\":10199},{\"Title\":\"Letters to Juliet\",\"US Gross\":53032453,\"Worldwide Gross\":68332453,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"May 14 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Based on Factual Book/Article\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":6.3,\"IMDB Votes\":4576},{\"Title\":\"Lucky Break\",\"US Gross\":54606,\"Worldwide Gross\":54606,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Apr 05 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Peter Cattaneo\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":1482},{\"Title\":\"The Last King of Scotland\",\"US Gross\":17606684,\"Worldwide Gross\":48363516,\"US DVD Sales\":16836991,\"Production Budget\":6000000,\"Release Date\":\"Sep 27 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Kevin MacDonald\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.8,\"IMDB Votes\":54022},{\"Title\":\"Lolita\",\"US Gross\":1147784,\"Worldwide Gross\":1147784,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Jul 22 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Adrian Lyne\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":15197},{\"Title\":\"Love Lisa\",\"US Gross\":211724,\"Worldwide Gross\":211724,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Dec 30 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":4126},{\"Title\":\"Little Miss Sunshine\",\"US Gross\":59891098,\"Worldwide Gross\":100523181,\"US DVD Sales\":55501748,\"Production Budget\":8000000,\"Release Date\":\"Jul 26 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":101,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8,\"IMDB Votes\":151013},{\"Title\":\"In the Land of Women\",\"US Gross\":11052958,\"Worldwide Gross\":14140402,\"US DVD Sales\":9876018,\"Production Budget\":10500000,\"Release Date\":\"Apr 20 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6.7,\"IMDB Votes\":13550},{\"Title\":\"Lions for Lambs\",\"US Gross\":14998070,\"Worldwide Gross\":63211088,\"US DVD Sales\":9203604,\"Production Budget\":35000000,\"Release Date\":\"Nov 09 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":90,\"Distributor\":\"United Artists\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Redford\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":6.2,\"IMDB Votes\":22264},{\"Title\":\"London\",\"US Gross\":12667,\"Worldwide Gross\":12667,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Feb 10 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"IDP/Goldwyn/Roadside\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.7,\"IMDB Votes\":181},{\"Title\":\"How to Lose a Guy in 10 Days\",\"US Gross\":105807520,\"Worldwide Gross\":177079973,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Feb 07 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":116,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Donald Petrie\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":6.1,\"IMDB Votes\":33866},{\"Title\":\"Loser\",\"US Gross\":15464026,\"Worldwide Gross\":18250106,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Jul 21 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Amy Heckerling\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":5,\"IMDB Votes\":12877},{\"Title\":\"The Losers\",\"US Gross\":23591432,\"Worldwide Gross\":23591432,\"US DVD Sales\":7360965,\"Production Budget\":25000000,\"Release Date\":\"Apr 23 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sylvain White\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Lost City\",\"US Gross\":2484186,\"Worldwide Gross\":3650302,\"US DVD Sales\":null,\"Production Budget\":9600000,\"Release Date\":\"Apr 28 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Andy Garcia\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":5790},{\"Title\":\"Lost In Space\",\"US Gross\":69117629,\"Worldwide Gross\":136117629,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Apr 03 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":131,\"Distributor\":\"New Line\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Stephen Hopkins\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":4.8,\"IMDB Votes\":31611},{\"Title\":\"Lost and Found\",\"US Gross\":6552255,\"Worldwide Gross\":6552255,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Apr 23 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.8,\"IMDB Votes\":118},{\"Title\":\"Lottery Ticket\",\"US Gross\":23602581,\"Worldwide Gross\":23602581,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Aug 20 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Love and Basketball\",\"US Gross\":27441122,\"Worldwide Gross\":27709625,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Apr 21 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":125,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Gina Prince-Bythewood\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.7,\"IMDB Votes\":5835},{\"Title\":\"Love Jones\",\"US Gross\":12554569,\"Worldwide Gross\":12554569,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Mar 14 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.7,\"IMDB Votes\":1165},{\"Title\":\"The Love Letter\",\"US Gross\":8322608,\"Worldwide Gross\":8322608,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"May 21 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.1,\"IMDB Votes\":2446},{\"Title\":\"Lovely and Amazing\",\"US Gross\":4210379,\"Worldwide Gross\":4695781,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Jun 28 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":3936},{\"Title\":\"The Lord of the Rings: The Two Towers\",\"US Gross\":341784377,\"Worldwide Gross\":926284377,\"US DVD Sales\":null,\"Production Budget\":94000000,\"Release Date\":\"Dec 18 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":179,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Peter Jackson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.7,\"IMDB Votes\":326950},{\"Title\":\"The Lord of the Rings: The Return of the King\",\"US Gross\":377027325,\"Worldwide Gross\":1133027325,\"US DVD Sales\":null,\"Production Budget\":94000000,\"Release Date\":\"Dec 17 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":201,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Peter Jackson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.8,\"IMDB Votes\":364077},{\"Title\":\"The Lord of the Rings: The Fellowship of the Ring\",\"US Gross\":314776170,\"Worldwide Gross\":868621686,\"US DVD Sales\":null,\"Production Budget\":109000000,\"Release Date\":\"Dec 19 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":178,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Peter Jackson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.8,\"IMDB Votes\":387438},{\"Title\":\"Lord of War\",\"US Gross\":24149632,\"Worldwide Gross\":62142629,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Sep 16 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andrew Niccol\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":7.7,\"IMDB Votes\":80124},{\"Title\":\"Lock, Stock and Two Smoking Barrels\",\"US Gross\":3897569,\"Worldwide Gross\":25297569,\"US DVD Sales\":null,\"Production Budget\":1350000,\"Release Date\":\"Mar 05 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Gramercy\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Guy Ritchie\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Last Shot\",\"US Gross\":463730,\"Worldwide Gross\":463730,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Sep 24 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":5.7,\"IMDB Votes\":2711},{\"Title\":\"Lonesome Jim\",\"US Gross\":154187,\"Worldwide Gross\":154187,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Mar 24 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":91,\"Distributor\":\"IFC Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steve Buscemi\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":4585},{\"Title\":\"The Last Legion\",\"US Gross\":5932060,\"Worldwide Gross\":21439015,\"US DVD Sales\":null,\"Production Budget\":67000000,\"Release Date\":\"Aug 17 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"Weinstein/Dimension\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.4,\"IMDB Votes\":12250},{\"Title\":\"The Last Samurai\",\"US Gross\":111110575,\"Worldwide Gross\":456810575,\"US DVD Sales\":null,\"Production Budget\":120000000,\"Release Date\":\"Dec 05 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":154,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Edward Zwick\",\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":7.8,\"IMDB Votes\":106002},{\"Title\":\"The Last Sin Eater\",\"US Gross\":388390,\"Worldwide Gross\":388390,\"US DVD Sales\":null,\"Production Budget\":2200000,\"Release Date\":\"Feb 09 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5.7,\"IMDB Votes\":1012},{\"Title\":\"The Last Song\",\"US Gross\":62950384,\"Worldwide Gross\":75850384,\"US DVD Sales\":20035017,\"Production Budget\":20000000,\"Release Date\":\"Mar 31 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":108,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":3.9,\"IMDB Votes\":7210},{\"Title\":\"Love Stinks\",\"US Gross\":2793776,\"Worldwide Gross\":2793776,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Sep 10 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Independent Artists\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5.3,\"IMDB Votes\":3228},{\"Title\":\"Lost in Translation\",\"US Gross\":44585453,\"Worldwide Gross\":106454000,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Sep 12 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":102,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sofia Coppola\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.9,\"IMDB Votes\":130998},{\"Title\":\"Last Orders\",\"US Gross\":2326407,\"Worldwide Gross\":2326407,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Feb 15 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Fred Schepisi\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":3463},{\"Title\":\"Lost Souls\",\"US Gross\":16779636,\"Worldwide Gross\":31320293,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Oct 13 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":4.5,\"IMDB Votes\":6639},{\"Title\":\"The Last Station\",\"US Gross\":6616974,\"Worldwide Gross\":6616974,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Jan 15 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":3465},{\"Title\":\"The Lost World: Jurassic Park\",\"US Gross\":229086679,\"Worldwide Gross\":786686679,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"May 22 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":134,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":77124},{\"Title\":\"License to Wed\",\"US Gross\":43799818,\"Worldwide Gross\":70799818,\"US DVD Sales\":22782913,\"Production Budget\":35000000,\"Release Date\":\"Jul 03 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ken Kwapis\",\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":5.1,\"IMDB Votes\":15422},{\"Title\":\"Looney Tunes: Back in Action\",\"US Gross\":20950820,\"Worldwide Gross\":54540662,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Nov 14 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Short Film\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Joe Dante\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6,\"IMDB Votes\":8604},{\"Title\":\"Letters to God\",\"US Gross\":2848587,\"Worldwide Gross\":2848587,\"US DVD Sales\":3346596,\"Production Budget\":3000000,\"Release Date\":\"Apr 09 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Vivendi Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.4,\"IMDB Votes\":839},{\"Title\":\"Lethal Weapon 4\",\"US Gross\":130444603,\"Worldwide Gross\":285400000,\"US DVD Sales\":null,\"Production Budget\":140000000,\"Release Date\":\"Jul 10 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":127,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Donner\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6.4,\"IMDB Votes\":47846},{\"Title\":\"Little Man\",\"US Gross\":58636047,\"Worldwide Gross\":101636047,\"US DVD Sales\":32799301,\"Production Budget\":64000000,\"Release Date\":\"Jul 14 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Keenen Ivory Wayans\",\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":5.7,\"IMDB Votes\":97},{\"Title\":\"The Lucky Ones\",\"US Gross\":266967,\"Worldwide Gross\":266967,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Sep 26 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":104,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":7.1,\"IMDB Votes\":4719},{\"Title\":\"Lucky You\",\"US Gross\":5755286,\"Worldwide Gross\":6521829,\"US DVD Sales\":853973,\"Production Budget\":55000000,\"Release Date\":\"May 04 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":122,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Curtis Hanson\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":5.9,\"IMDB Votes\":9870},{\"Title\":\"Luminarias\",\"US Gross\":428535,\"Worldwide Gross\":428535,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"May 05 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.3,\"IMDB Votes\":467},{\"Title\":\"Se jie\",\"US Gross\":4604982,\"Worldwide Gross\":65696051,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Sep 28 2007\",\"MPAA Rating\":\"NC-17\",\"Running Time min\":156,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Ang Lee\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":15440},{\"Title\":\"Luther\",\"US Gross\":5781086,\"Worldwide Gross\":29465190,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Sep 26 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"RS Entertainment\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6.8,\"IMDB Votes\":5909},{\"Title\":\"Love Actually\",\"US Gross\":59472278,\"Worldwide Gross\":247967903,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Nov 07 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":135,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":7.9,\"IMDB Votes\":97921},{\"Title\":\"The Little Vampire\",\"US Gross\":13555988,\"Worldwide Gross\":13555988,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Oct 27 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":5.3,\"IMDB Votes\":2202},{\"Title\":\"The Lovely Bones\",\"US Gross\":44028238,\"Worldwide Gross\":94702568,\"US DVD Sales\":8474087,\"Production Budget\":65000000,\"Release Date\":\"Dec 11 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"Peter Jackson\",\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":6.6,\"IMDB Votes\":32049},{\"Title\":\"Herbie: Fully Loaded\",\"US Gross\":66010682,\"Worldwide Gross\":144110682,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Jun 22 2005\",\"MPAA Rating\":\"G\",\"Running Time min\":95,\"Distributor\":\"Walt Disney Pictures\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Angela Robinson\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":4.7,\"IMDB Votes\":14178},{\"Title\":\"For Love of the Game\",\"US Gross\":35188640,\"Worldwide Gross\":46112640,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Sep 17 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":137,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sam Raimi\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.2,\"IMDB Votes\":13612},{\"Title\":\"Leaves of Grass\",\"US Gross\":20987,\"Worldwide Gross\":20987,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Apr 02 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tim Blake Nelson\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.9,\"IMDB Votes\":4541},{\"Title\":\"Love Happens\",\"US Gross\":22965110,\"Worldwide Gross\":30206355,\"US DVD Sales\":7174988,\"Production Budget\":18000000,\"Release Date\":\"Sep 18 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.5,\"IMDB Votes\":6111},{\"Title\":\"Just Visiting\",\"US Gross\":4777007,\"Worldwide Gross\":16172200,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Apr 06 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.6,\"IMDB Votes\":6923},{\"Title\":\"Das Leben der Anderen\",\"US Gross\":11284657,\"Worldwide Gross\":75284657,\"US DVD Sales\":4225830,\"Production Budget\":2000000,\"Release Date\":\"Feb 09 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.5,\"IMDB Votes\":75070},{\"Title\":\"Love Ranch\",\"US Gross\":134904,\"Worldwide Gross\":134904,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jun 30 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":117,\"Distributor\":null,\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Taylor Hackford\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.6,\"IMDB Votes\":163},{\"Title\":\"La MÙme\",\"US Gross\":10299782,\"Worldwide Gross\":83499782,\"US DVD Sales\":null,\"Production Budget\":15500000,\"Release Date\":\"Jun 08 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Picturehouse\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":21412},{\"Title\":\"The Chronicles of Narnia: The Lion, the Witch and the Wardrobe\",\"US Gross\":291710957,\"Worldwide Gross\":748806957,\"US DVD Sales\":352582053,\"Production Budget\":180000000,\"Release Date\":\"Dec 09 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":140,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Andrew Adamson\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Longest Yard\",\"US Gross\":158119460,\"Worldwide Gross\":190320568,\"US DVD Sales\":null,\"Production Budget\":82000000,\"Release Date\":\"May 27 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":113,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Segal\",\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":6.2,\"IMDB Votes\":39752},{\"Title\":\"Mad City\",\"US Gross\":10561038,\"Worldwide Gross\":10561038,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Nov 07 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Costa-Gavras\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":6.1,\"IMDB Votes\":9611},{\"Title\":\"Made\",\"US Gross\":5308707,\"Worldwide Gross\":5476060,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Jul 13 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":6.3,\"IMDB Votes\":9720},{\"Title\":\"Madagascar: Escape 2 Africa\",\"US Gross\":180010950,\"Worldwide Gross\":599516844,\"US DVD Sales\":108725804,\"Production Budget\":150000000,\"Release Date\":\"Nov 07 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Eric Darnell\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.8,\"IMDB Votes\":30285},{\"Title\":\"Madagascar\",\"US Gross\":193595521,\"Worldwide Gross\":532680671,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"May 27 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":83,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Eric Darnell\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.6,\"IMDB Votes\":56480},{\"Title\":\"Mad Hot Ballroom\",\"US Gross\":8117961,\"Worldwide Gross\":9079042,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"May 13 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.4,\"IMDB Votes\":2562},{\"Title\":\"Madison\",\"US Gross\":517262,\"Worldwide Gross\":517262,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Apr 22 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":536},{\"Title\":\"Jane Austen's Mafia\",\"US Gross\":19843795,\"Worldwide Gross\":30143795,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jul 24 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":83,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jim Abrahams\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5,\"IMDB Votes\":7706},{\"Title\":\"Paul Blart: Mall Cop\",\"US Gross\":146336178,\"Worldwide Gross\":180449670,\"US DVD Sales\":53105030,\"Production Budget\":26000000,\"Release Date\":\"Jan 16 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":91,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steve Carr\",\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":5.3,\"IMDB Votes\":23753},{\"Title\":\"A Man Apart\",\"US Gross\":26500000,\"Worldwide Gross\":44114828,\"US DVD Sales\":null,\"Production Budget\":36000000,\"Release Date\":\"Apr 04 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"F. Gary Gray\",\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":5.7,\"IMDB Votes\":14953},{\"Title\":\"Man on Fire\",\"US Gross\":77906816,\"Worldwide Gross\":118706816,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Apr 23 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":146,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tony Scott\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":7.7,\"IMDB Votes\":75256},{\"Title\":\"Man of the House\",\"US Gross\":19699706,\"Worldwide Gross\":22099706,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Feb 25 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stephen Herek\",\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":4.2,\"IMDB Votes\":3432},{\"Title\":\"Man on the Moon\",\"US Gross\":34580635,\"Worldwide Gross\":47407635,\"US DVD Sales\":null,\"Production Budget\":52000000,\"Release Date\":\"Dec 22 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":118,\"Distributor\":\"Universal\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Milos Forman\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":7.4,\"IMDB Votes\":49481},{\"Title\":\"The Man Who Knew Too Little\",\"US Gross\":13801755,\"Worldwide Gross\":13801755,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Nov 14 1997\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jon Amiel\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.3,\"IMDB Votes\":11307},{\"Title\":\"Marci X\",\"US Gross\":1646664,\"Worldwide Gross\":1646664,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Aug 22 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Benjamin\",\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":2.4,\"IMDB Votes\":3449},{\"Title\":\"Married Life\",\"US Gross\":1506998,\"Worldwide Gross\":1506998,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Mar 07 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":4358},{\"Title\":\"The Marine\",\"US Gross\":18844784,\"Worldwide Gross\":22165608,\"US DVD Sales\":26786370,\"Production Budget\":15000000,\"Release Date\":\"Oct 13 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":91,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":4.5,\"IMDB Votes\":13157},{\"Title\":\"Son of the Mask\",\"US Gross\":17018422,\"Worldwide Gross\":59918422,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Feb 18 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":6,\"IMDB Rating\":2,\"IMDB Votes\":15800},{\"Title\":\"The Matador\",\"US Gross\":12578537,\"Worldwide Gross\":17290120,\"US DVD Sales\":5309636,\"Production Budget\":10000000,\"Release Date\":\"Dec 30 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":74,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":6.9,\"IMDB Votes\":25035},{\"Title\":\"The Matrix\",\"US Gross\":171479930,\"Worldwide Gross\":460279930,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Mar 31 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":136,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Andy Wachowski\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":8.7,\"IMDB Votes\":380934},{\"Title\":\"Max Keeble's Big Move\",\"US Gross\":17292381,\"Worldwide Gross\":17292381,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Oct 05 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Tim Hill\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.1,\"IMDB Votes\":2490},{\"Title\":\"May\",\"US Gross\":145540,\"Worldwide Gross\":145540,\"US DVD Sales\":null,\"Production Budget\":1750000,\"Release Date\":\"Feb 07 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":41},{\"Title\":\"Murderball\",\"US Gross\":1531154,\"Worldwide Gross\":1722277,\"US DVD Sales\":null,\"Production Budget\":350000,\"Release Date\":\"Jul 08 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":7.8,\"IMDB Votes\":5699},{\"Title\":\"Vicky Cristina Barcelona\",\"US Gross\":23213577,\"Worldwide Gross\":77213577,\"US DVD Sales\":8276490,\"Production Budget\":16000000,\"Release Date\":\"Aug 15 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.4,\"IMDB Votes\":51760},{\"Title\":\"My Big Fat Greek Wedding\",\"US Gross\":241438208,\"Worldwide Gross\":368744044,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Apr 19 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":95,\"Distributor\":\"IFC Films\",\"Source\":\"Based on Play\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Zwick\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":6.6,\"IMDB Votes\":46548},{\"Title\":\"My Best Friend's Girl\",\"US Gross\":19219250,\"Worldwide Gross\":34787111,\"US DVD Sales\":18449619,\"Production Budget\":20000000,\"Release Date\":\"Sep 19 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":103,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Howard Deutch\",\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":5.8,\"IMDB Votes\":14617},{\"Title\":\"Monkeybone\",\"US Gross\":5409517,\"Worldwide Gross\":5409517,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Feb 23 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":4.5,\"IMDB Votes\":8211},{\"Title\":\"Meet the Browns\",\"US Gross\":41975388,\"Worldwide Gross\":41975388,\"US DVD Sales\":18271961,\"Production Budget\":20000000,\"Release Date\":\"Mar 21 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tyler Perry\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":3.1,\"IMDB Votes\":3362},{\"Title\":\"My Bloody Valentine\",\"US Gross\":51545952,\"Worldwide Gross\":98817028,\"US DVD Sales\":20831900,\"Production Budget\":14000000,\"Release Date\":\"Jan 16 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":101,\"Distributor\":\"Lionsgate\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":18037},{\"Title\":\"Wu ji\",\"US Gross\":669625,\"Worldwide Gross\":35869934,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"May 05 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"Warner Independent\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":5733},{\"Title\":\"McHale's Navy\",\"US Gross\":4408420,\"Worldwide Gross\":4408420,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Apr 18 1997\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":3,\"IMDB Rating\":3.9,\"IMDB Votes\":3466},{\"Title\":\"The Martian Child\",\"US Gross\":7500310,\"Worldwide Gross\":9076823,\"US DVD Sales\":7705880,\"Production Budget\":27000000,\"Release Date\":\"Nov 02 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":107,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Manchurian Candidate\",\"US Gross\":65948711,\"Worldwide Gross\":96148711,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jul 30 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":129,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Jonathan Demme\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.7,\"IMDB Votes\":36553},{\"Title\":\"Mickey Blue Eyes\",\"US Gross\":33864342,\"Worldwide Gross\":53864342,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Aug 20 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":103,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":5.7,\"IMDB Votes\":16646},{\"Title\":\"Michael Clayton\",\"US Gross\":49033882,\"Worldwide Gross\":92987651,\"US DVD Sales\":18802372,\"Production Budget\":21500000,\"Release Date\":\"Oct 05 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tony Gilroy\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.5,\"IMDB Votes\":59493},{\"Title\":\"Master and Commander: The Far Side of the World\",\"US Gross\":93926386,\"Worldwide Gross\":209486484,\"US DVD Sales\":null,\"Production Budget\":135000000,\"Release Date\":\"Nov 14 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":138,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Peter Weir\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":7.5,\"IMDB Votes\":63632},{\"Title\":\"Nanny McPhee and the Big Bang\",\"US Gross\":27776620,\"Worldwide Gross\":90676620,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Aug 20 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":2326},{\"Title\":\"Nanny McPhee\",\"US Gross\":47279279,\"Worldwide Gross\":122540909,\"US DVD Sales\":42041450,\"Production Budget\":25000000,\"Release Date\":\"Jan 27 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":91,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":6.7,\"IMDB Votes\":13391},{\"Title\":\"Mean Creek\",\"US Gross\":603951,\"Worldwide Gross\":967749,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Aug 20 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":14472},{\"Title\":\"The Medallion\",\"US Gross\":22108977,\"Worldwide Gross\":22108977,\"US DVD Sales\":null,\"Production Budget\":41000000,\"Release Date\":\"Aug 22 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":18,\"IMDB Rating\":4.7,\"IMDB Votes\":10121},{\"Title\":\"Meet Dave\",\"US Gross\":11803254,\"Worldwide Gross\":50648806,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jul 11 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Brian Robbins\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":4.8,\"IMDB Votes\":13381},{\"Title\":\"Million Dollar Baby\",\"US Gross\":100492203,\"Worldwide Gross\":216763646,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Dec 15 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":132,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Clint Eastwood\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8.2,\"IMDB Votes\":141212},{\"Title\":\"Madea Goes To Jail\",\"US Gross\":90508336,\"Worldwide Gross\":90508336,\"US DVD Sales\":27100919,\"Production Budget\":17500000,\"Release Date\":\"Feb 20 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tyler Perry\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":3.1,\"IMDB Votes\":5468},{\"Title\":\"Made of Honor\",\"US Gross\":46012734,\"Worldwide Gross\":105508112,\"US DVD Sales\":14330761,\"Production Budget\":40000000,\"Release Date\":\"May 02 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul Weiland\",\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":5.5,\"IMDB Votes\":15260},{\"Title\":\"Mean Girls\",\"US Gross\":86047227,\"Worldwide Gross\":128947227,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Apr 30 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mark Waters\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7,\"IMDB Votes\":63607},{\"Title\":\"Mean Machine\",\"US Gross\":92723,\"Worldwide Gross\":92723,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Feb 22 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":12754},{\"Title\":\"Meet the Deedles\",\"US Gross\":4356126,\"Worldwide Gross\":4356126,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Mar 27 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":4,\"IMDB Rating\":3.4,\"IMDB Votes\":1379},{\"Title\":\"Me, Myself & Irene\",\"US Gross\":90570999,\"Worldwide Gross\":149270999,\"US DVD Sales\":null,\"Production Budget\":51000000,\"Release Date\":\"Jun 23 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":116,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bobby Farrelly\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.9,\"IMDB Votes\":215},{\"Title\":\"Memoirs of a Geisha\",\"US Gross\":57010853,\"Worldwide Gross\":161510853,\"US DVD Sales\":32837435,\"Production Budget\":85000000,\"Release Date\":\"Dec 09 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":145,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Rob Marshall\",\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":7.1,\"IMDB Votes\":38695},{\"Title\":\"Men in Black\",\"US Gross\":250690539,\"Worldwide Gross\":587790539,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Jul 01 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Barry Sonnenfeld\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7,\"IMDB Votes\":119704},{\"Title\":\"Men of Honor\",\"US Gross\":48814909,\"Worldwide Gross\":82339483,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Nov 10 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":128,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":6.8,\"IMDB Votes\":30630},{\"Title\":\"Memento\",\"US Gross\":25544867,\"Worldwide Gross\":39665950,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Mar 16 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":113,\"Distributor\":\"Newmarket Films\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Christopher Nolan\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.7,\"IMDB Votes\":274524},{\"Title\":\"Mercury Rising\",\"US Gross\":32983332,\"Worldwide Gross\":32983332,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Apr 03 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":112,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Harold Becker\",\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.8,\"IMDB Votes\":21449},{\"Title\":\"Mercy Streets\",\"US Gross\":173599,\"Worldwide Gross\":173599,\"US DVD Sales\":null,\"Production Budget\":600000,\"Release Date\":\"Oct 31 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":4.9,\"IMDB Votes\":307},{\"Title\":\"Joyeux NoÎl\",\"US Gross\":1054361,\"Worldwide Gross\":1054361,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Mar 03 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":9363},{\"Title\":\"Message in a Bottle\",\"US Gross\":52880016,\"Worldwide Gross\":52880016,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Feb 12 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":132,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":5.6,\"IMDB Votes\":13108},{\"Title\":\"Meet Joe Black\",\"US Gross\":44650003,\"Worldwide Gross\":44650003,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Nov 13 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":154,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"Martin Brest\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.9,\"IMDB Votes\":56067},{\"Title\":\"Maria Full of Grace\",\"US Gross\":6529624,\"Worldwide Gross\":9892434,\"US DVD Sales\":null,\"Production Budget\":3200000,\"Release Date\":\"Jul 16 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":16134},{\"Title\":\"Megiddo: Omega Code 2\",\"US Gross\":6047691,\"Worldwide Gross\":6047691,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Sep 21 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"8X Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Magnolia\",\"US Gross\":22450975,\"Worldwide Gross\":48446802,\"US DVD Sales\":null,\"Production Budget\":37000000,\"Release Date\":\"Dec 17 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":188,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul Thomas Anderson\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":8,\"IMDB Votes\":121540},{\"Title\":\"The Men Who Stare at Goats\",\"US Gross\":32428195,\"Worldwide Gross\":67348218,\"US DVD Sales\":8155901,\"Production Budget\":24000000,\"Release Date\":\"Nov 06 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":93,\"Distributor\":\"Overture Films\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Grant Heslov\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":6.4,\"IMDB Votes\":33763},{\"Title\":\"Marilyn Hotchkiss' Ballroom Dancing and Charm School\",\"US Gross\":349132,\"Worldwide Gross\":399114,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Mar 31 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"IDP/Goldwyn/Roadside\",\"Source\":\"Remake\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":1351},{\"Title\":\"Men in Black 2\",\"US Gross\":190418803,\"Worldwide Gross\":441818803,\"US DVD Sales\":null,\"Production Budget\":140000000,\"Release Date\":\"Jul 03 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":88,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Barry Sonnenfeld\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":467},{\"Title\":\"Micmacs\",\"US Gross\":1237269,\"Worldwide Gross\":11734498,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"May 28 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Jean-Pierre Jeunet\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The House of Mirth\",\"US Gross\":3041803,\"Worldwide Gross\":3041803,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Dec 22 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.8,\"IMDB Votes\":4489},{\"Title\":\"Miss Congeniality 2: Armed and Fabulous\",\"US Gross\":48478006,\"Worldwide Gross\":101382396,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Mar 24 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":115,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Pasquin\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.7,\"IMDB Votes\":14297},{\"Title\":\"Mission: Impossible 2\",\"US Gross\":215409889,\"Worldwide Gross\":546209889,\"US DVD Sales\":null,\"Production Budget\":120000000,\"Release Date\":\"May 24 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":124,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Woo\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":86222},{\"Title\":\"Mission: Impossible III\",\"US Gross\":133501348,\"Worldwide Gross\":397501348,\"US DVD Sales\":49824367,\"Production Budget\":150000000,\"Release Date\":\"May 05 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"J.J. Abrams\",\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":6.9,\"IMDB Votes\":74174},{\"Title\":\"Miss Congeniality\",\"US Gross\":106807667,\"Worldwide Gross\":212100000,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Dec 22 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Donald Petrie\",\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":6.1,\"IMDB Votes\":42323},{\"Title\":\"The Missing\",\"US Gross\":26900336,\"Worldwide Gross\":38253433,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Nov 26 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":137,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Ron Howard\",\"Rotten Tomatoes Rating\":59,\"IMDB Rating\":7.4,\"IMDB Votes\":19068},{\"Title\":\"Mighty Joe Young\",\"US Gross\":50632037,\"Worldwide Gross\":50632037,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Dec 25 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":114,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":5.4,\"IMDB Votes\":9187},{\"Title\":\"The Majestic\",\"US Gross\":27796042,\"Worldwide Gross\":37306334,\"US DVD Sales\":null,\"Production Budget\":72000000,\"Release Date\":\"Dec 21 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":153,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Frank Darabont\",\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":6.8,\"IMDB Votes\":24809},{\"Title\":\"Martin Lawrence Live: RunTelDat\",\"US Gross\":19184820,\"Worldwide Gross\":19184820,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Aug 02 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Concert/Performance\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":1166},{\"Title\":\"Malibu's Most Wanted\",\"US Gross\":34308901,\"Worldwide Gross\":34499204,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Apr 18 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":86,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":4.8,\"IMDB Votes\":8159},{\"Title\":\"Must Love Dogs\",\"US Gross\":43894863,\"Worldwide Gross\":58894863,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Jul 29 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":5.9,\"IMDB Votes\":13491},{\"Title\":\"My Life Without Me\",\"US Gross\":432360,\"Worldwide Gross\":9476113,\"US DVD Sales\":null,\"Production Budget\":2500000,\"Release Date\":\"Sep 26 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":7.6,\"IMDB Votes\":11022},{\"Title\":\"Mission to Mars\",\"US Gross\":60874615,\"Worldwide Gross\":106000000,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Mar 10 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":116,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":5.1,\"IMDB Votes\":32449},{\"Title\":\"MirrorMask\",\"US Gross\":864959,\"Worldwide Gross\":864959,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Sep 30 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Samuel Goldwyn Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":7,\"IMDB Votes\":10398},{\"Title\":\"Mumford\",\"US Gross\":4559569,\"Worldwide Gross\":4559569,\"US DVD Sales\":null,\"Production Budget\":28700000,\"Release Date\":\"Sep 24 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Lawrence Kasdan\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.7,\"IMDB Votes\":6303},{\"Title\":\"Mindhunters\",\"US Gross\":4476235,\"Worldwide Gross\":16566235,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"May 13 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Renny Harlin\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":6.2,\"IMDB Votes\":23357},{\"Title\":\"Captain Corelli's Mandolin\",\"US Gross\":25528495,\"Worldwide Gross\":62097495,\"US DVD Sales\":null,\"Production Budget\":57000000,\"Release Date\":\"Aug 17 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":129,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"John Madden\",\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":5.7,\"IMDB Votes\":14706},{\"Title\":\"Manderlay\",\"US Gross\":74205,\"Worldwide Gross\":543306,\"US DVD Sales\":null,\"Production Budget\":14200000,\"Release Date\":\"Jan 27 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"IFC Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Lars Von Trier\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":8986},{\"Title\":\"Midnight in the Garden of Good and Evil\",\"US Gross\":25078937,\"Worldwide Gross\":25078937,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Nov 21 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":155,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Clint Eastwood\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.5,\"IMDB Votes\":18960},{\"Title\":\"The Man in the Iron Mask\",\"US Gross\":56968169,\"Worldwide Gross\":56968169,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Mar 13 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":132,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":7.2,\"IMDB Votes\":561},{\"Title\":\"Monster-in-Law\",\"US Gross\":82931301,\"Worldwide Gross\":155931301,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"May 13 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Luketic\",\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":5.1,\"IMDB Votes\":16320},{\"Title\":\"Moonlight Mile\",\"US Gross\":6830957,\"Worldwide Gross\":6830957,\"US DVD Sales\":null,\"Production Budget\":21000000,\"Release Date\":\"Sep 27 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brad Silberling\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":6.7,\"IMDB Votes\":8346},{\"Title\":\"Mona Lisa Smile\",\"US Gross\":63803100,\"Worldwide Gross\":121598309,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Dec 19 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":117,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Mike Newell\",\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":6.1,\"IMDB Votes\":23657},{\"Title\":\"Monster's Ball\",\"US Gross\":31273922,\"Worldwide Gross\":44873922,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Dec 26 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":111,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Marc Forster\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":7.2,\"IMDB Votes\":38023},{\"Title\":\"MoliËre\",\"US Gross\":635733,\"Worldwide Gross\":791154,\"US DVD Sales\":null,\"Production Budget\":21600000,\"Release Date\":\"Jul 27 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":120,\"Distributor\":\"Sony Pictures Classics\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":265},{\"Title\":\"Molly\",\"US Gross\":17396,\"Worldwide Gross\":17396,\"US DVD Sales\":null,\"Production Budget\":21000000,\"Release Date\":\"Oct 22 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":5.6,\"IMDB Votes\":1563},{\"Title\":\"Monster House\",\"US Gross\":73661010,\"Worldwide Gross\":140161010,\"US DVD Sales\":71719512,\"Production Budget\":75000000,\"Release Date\":\"Jul 21 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Gil Kenan\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":6.8,\"IMDB Votes\":20689},{\"Title\":\"Mononoke-hime\",\"US Gross\":2374107,\"Worldwide Gross\":150350000,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 29 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Hayao Miyazaki\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.3,\"IMDB Votes\":65773},{\"Title\":\"Monsoon Wedding\",\"US Gross\":13876974,\"Worldwide Gross\":13876974,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Feb 22 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"USA Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mira Nair\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":11314},{\"Title\":\"Monster\",\"US Gross\":34469210,\"Worldwide Gross\":58003694,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Dec 24 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"Newmarket Films\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.4,\"IMDB Votes\":39908},{\"Title\":\"Monsters, Inc.\",\"US Gross\":255870172,\"Worldwide Gross\":526864330,\"US DVD Sales\":null,\"Production Budget\":115000000,\"Release Date\":\"Nov 02 2001\",\"MPAA Rating\":\"G\",\"Running Time min\":95,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"David Silverman\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":7.4,\"IMDB Votes\":39908},{\"Title\":\"Mondays in the Sun\",\"US Gross\":146402,\"Worldwide Gross\":146402,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Jul 25 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Money Talks\",\"US Gross\":41076865,\"Worldwide Gross\":41076865,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Aug 22 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":95,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brett Ratner\",\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.7,\"IMDB Votes\":8640},{\"Title\":\"Moon\",\"US Gross\":5010163,\"Worldwide Gross\":6934829,\"US DVD Sales\":1978111,\"Production Budget\":5000000,\"Release Date\":\"Jun 12 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":97,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8,\"IMDB Votes\":55251},{\"Title\":\"Welcome to Mooseport\",\"US Gross\":14469428,\"Worldwide Gross\":14469428,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Feb 20 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Donald Petrie\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.2,\"IMDB Votes\":6907},{\"Title\":\"Morvern Callar\",\"US Gross\":267194,\"Worldwide Gross\":267194,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Dec 20 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.4,\"IMDB Votes\":3831},{\"Title\":\"The Mothman Prophecies\",\"US Gross\":35228696,\"Worldwide Gross\":54639865,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Jan 25 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":119,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":6.5,\"IMDB Votes\":26948},{\"Title\":\"Moulin Rouge\",\"US Gross\":57386369,\"Worldwide Gross\":179213196,\"US DVD Sales\":null,\"Production Budget\":53000000,\"Release Date\":\"May 18 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":123,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Baz Luhrmann\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":2105},{\"Title\":\"Me and Orson Welles\",\"US Gross\":1190003,\"Worldwide Gross\":1190003,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Nov 25 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":107,\"Distributor\":\"Freestyle Releasing\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Richard Linklater\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7.1,\"IMDB Votes\":2417},{\"Title\":\"Meet the Fockers\",\"US Gross\":279167575,\"Worldwide Gross\":516567575,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Dec 22 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":115,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jay Roach\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":6.4,\"IMDB Votes\":69613},{\"Title\":\"Meet the Parents\",\"US Gross\":166225040,\"Worldwide Gross\":301500000,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Oct 06 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":108,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jay Roach\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7,\"IMDB Votes\":84924},{\"Title\":\"Mr. 3000\",\"US Gross\":21800302,\"Worldwide Gross\":21827296,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Sep 17 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":5.6,\"IMDB Votes\":6202},{\"Title\":\"The Miracle\",\"US Gross\":64378093,\"Worldwide Gross\":64445708,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Feb 06 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":92,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":126},{\"Title\":\"Minority Report\",\"US Gross\":132024714,\"Worldwide Gross\":358824714,\"US DVD Sales\":null,\"Production Budget\":102000000,\"Release Date\":\"Jun 21 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":145,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7.7,\"IMDB Votes\":135142},{\"Title\":\"The Fantastic Mr. Fox\",\"US Gross\":20999103,\"Worldwide Gross\":46467231,\"US DVD Sales\":7571489,\"Production Budget\":40000000,\"Release Date\":\"Nov 13 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Wes Anderson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Mr. Nice Guy\",\"US Gross\":12716953,\"Worldwide Gross\":31716953,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Mar 20 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sammo Hung Kam-Bo\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":174},{\"Title\":\"Mrs. Henderson Presents\",\"US Gross\":11036366,\"Worldwide Gross\":14466366,\"US DVD Sales\":5796061,\"Production Budget\":20000000,\"Release Date\":\"Dec 09 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Stephen Frears\",\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":7.1,\"IMDB Votes\":8831},{\"Title\":\"Mortal Kombat: Annihilation\",\"US Gross\":35927406,\"Worldwide Gross\":51327406,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Nov 21 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":91,\"Distributor\":\"New Line\",\"Source\":\"Based on Game\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":3.2,\"IMDB Votes\":16672},{\"Title\":\"Marvin's Room\",\"US Gross\":12803305,\"Worldwide Gross\":12803305,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Dec 20 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.6,\"IMDB Votes\":9684},{\"Title\":\"Miracle at St. Anna\",\"US Gross\":7916887,\"Worldwide Gross\":9110458,\"US DVD Sales\":9178061,\"Production Budget\":45000000,\"Release Date\":\"Sep 26 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":5.9,\"IMDB Votes\":8559},{\"Title\":\"Mouse Hunt\",\"US Gross\":61894591,\"Worldwide Gross\":61894591,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Dec 19 1997\",\"MPAA Rating\":\"PG\",\"Running Time min\":95,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Gore Verbinski\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":14934},{\"Title\":\"Masked and Anonymous\",\"US Gross\":533344,\"Worldwide Gross\":533344,\"US DVD Sales\":null,\"Production Budget\":7500000,\"Release Date\":\"Jul 24 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Larry Charles\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":5.3,\"IMDB Votes\":2762},{\"Title\":\"Miss Potter\",\"US Gross\":3005605,\"Worldwide Gross\":35025861,\"US DVD Sales\":7821056,\"Production Budget\":30000000,\"Release Date\":\"Dec 29 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":92,\"Distributor\":\"MGM\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Chris Noonan\",\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":7.1,\"IMDB Votes\":10236},{\"Title\":\"The Missing Person\",\"US Gross\":17896,\"Worldwide Gross\":17896,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Nov 20 2009\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Strand\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":416},{\"Title\":\"Meet the Spartans\",\"US Gross\":38233676,\"Worldwide Gross\":84646831,\"US DVD Sales\":12248893,\"Production Budget\":30000000,\"Release Date\":\"Jan 25 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Jason Friedberg\",\"Rotten Tomatoes Rating\":2,\"IMDB Rating\":2.4,\"IMDB Votes\":47281},{\"Title\":\"Mystery, Alaska\",\"US Gross\":8891623,\"Worldwide Gross\":8891623,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Oct 01 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jay Roach\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":5.5,\"IMDB Votes\":1338},{\"Title\":\"Match Point\",\"US Gross\":23089926,\"Worldwide Gross\":87989926,\"US DVD Sales\":7210408,\"Production Budget\":15000000,\"Release Date\":\"Dec 28 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7.8,\"IMDB Votes\":65704},{\"Title\":\"Mother and Child\",\"US Gross\":1105266,\"Worldwide Gross\":1105266,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"May 07 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":900},{\"Title\":\"A Mighty Heart\",\"US Gross\":9176787,\"Worldwide Gross\":18932117,\"US DVD Sales\":5455645,\"Production Budget\":15000000,\"Release Date\":\"Jun 22 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Michael Winterbottom\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":6.7,\"IMDB Votes\":13881},{\"Title\":\"Metropolis (2002)\",\"US Gross\":673414,\"Worldwide Gross\":673414,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jan 25 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Matrix Reloaded\",\"US Gross\":281553689,\"Worldwide Gross\":738576929,\"US DVD Sales\":null,\"Production Budget\":127000000,\"Release Date\":\"May 15 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":138,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Andy Wachowski\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":7.1,\"IMDB Votes\":148874},{\"Title\":\"The Matrix Revolutions\",\"US Gross\":139259759,\"Worldwide Gross\":424259759,\"US DVD Sales\":null,\"Production Budget\":110000000,\"Release Date\":\"Nov 05 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":129,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Andy Wachowski\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":6.5,\"IMDB Votes\":123347},{\"Title\":\"The Mudge Boy\",\"US Gross\":62544,\"Worldwide Gross\":62544,\"US DVD Sales\":null,\"Production Budget\":800000,\"Release Date\":\"May 07 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Strand\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":1576},{\"Title\":\"Mulan\",\"US Gross\":120620254,\"Worldwide Gross\":303500000,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Jun 19 1998\",\"MPAA Rating\":\"G\",\"Running Time min\":88,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":7.2,\"IMDB Votes\":34256},{\"Title\":\"Mulholland Drive\",\"US Gross\":7219578,\"Worldwide Gross\":11919578,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Oct 08 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Lynch\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.9,\"IMDB Votes\":103026},{\"Title\":\"The Mummy\",\"US Gross\":155385488,\"Worldwide Gross\":416385488,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"May 07 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":124,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Stephen Sommers\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6.8,\"IMDB Votes\":95658},{\"Title\":\"The Mummy Returns\",\"US Gross\":202007640,\"Worldwide Gross\":433007640,\"US DVD Sales\":null,\"Production Budget\":98000000,\"Release Date\":\"May 04 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":129,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Stephen Sommers\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6.2,\"IMDB Votes\":68084},{\"Title\":\"The Mummy: Tomb of the Dragon Emperor\",\"US Gross\":102491776,\"Worldwide Gross\":397912118,\"US DVD Sales\":43147886,\"Production Budget\":175000000,\"Release Date\":\"Aug 01 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":111,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Rob Cohen\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.1,\"IMDB Votes\":41570},{\"Title\":\"Munich\",\"US Gross\":47379090,\"Worldwide Gross\":130279090,\"US DVD Sales\":33113440,\"Production Budget\":75000000,\"Release Date\":\"Dec 23 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7.8,\"IMDB Votes\":79529},{\"Title\":\"Muppets From Space\",\"US Gross\":16304786,\"Worldwide Gross\":16304786,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Jul 14 1999\",\"MPAA Rating\":\"G\",\"Running Time min\":88,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Tim Hill\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":6.1,\"IMDB Votes\":5945},{\"Title\":\"Murder by Numbers\",\"US Gross\":31874869,\"Worldwide Gross\":56643267,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Apr 19 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Barbet Schroeder\",\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":5.9,\"IMDB Votes\":22318},{\"Title\":\"The Muse\",\"US Gross\":11614954,\"Worldwide Gross\":11614954,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Aug 27 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"October Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Albert Brooks\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":5.5,\"IMDB Votes\":6507},{\"Title\":\"Night at the Museum\",\"US Gross\":250863268,\"Worldwide Gross\":574480841,\"US DVD Sales\":153389976,\"Production Budget\":110000000,\"Release Date\":\"Dec 22 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":108,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Shawn Levy\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":6.4,\"IMDB Votes\":67133},{\"Title\":\"The Musketeer\",\"US Gross\":27053815,\"Worldwide Gross\":27053815,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Sep 07 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":104,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Peter Hyams\",\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":4.4,\"IMDB Votes\":7812},{\"Title\":\"Music and Lyrics\",\"US Gross\":50572589,\"Worldwide Gross\":145556146,\"US DVD Sales\":21145518,\"Production Budget\":40000000,\"Release Date\":\"Feb 14 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":96,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.6,\"IMDB Votes\":32307},{\"Title\":\"The Merchant of Venice\",\"US Gross\":3765585,\"Worldwide Gross\":18765585,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Dec 29 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Michael Radford\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":14021},{\"Title\":\"Miami Vice\",\"US Gross\":63478838,\"Worldwide Gross\":163818556,\"US DVD Sales\":37652030,\"Production Budget\":135000000,\"Release Date\":\"Jul 28 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":132,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michael Mann\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6,\"IMDB Votes\":51921},{\"Title\":\"Monsters vs. Aliens\",\"US Gross\":198351526,\"Worldwide Gross\":381687380,\"US DVD Sales\":83851943,\"Production Budget\":175000000,\"Release Date\":\"Mar 27 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":95,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Rob Letterman\",\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":6.8,\"IMDB Votes\":26582},{\"Title\":\"A Mighty Wind\",\"US Gross\":17583468,\"Worldwide Gross\":18552708,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Apr 16 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Christopher Guest\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.2,\"IMDB Votes\":13602},{\"Title\":\"The Mexican\",\"US Gross\":66808615,\"Worldwide Gross\":147808615,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Mar 02 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":124,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gore Verbinski\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":5.9,\"IMDB Votes\":37696},{\"Title\":\"My Best Friend's Wedding\",\"US Gross\":126813153,\"Worldwide Gross\":287200000,\"US DVD Sales\":null,\"Production Budget\":46000000,\"Release Date\":\"Jun 20 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":105,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"P.J. Hogan\",\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":6.2,\"IMDB Votes\":37287},{\"Title\":\"Dude, Where's My Car?\",\"US Gross\":46729374,\"Worldwide Gross\":73180297,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Dec 15 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":83,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"My Dog Skip\",\"US Gross\":34099640,\"Worldwide Gross\":35512760,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Jan 12 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":95,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Jay Russell\",\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":6.9,\"IMDB Votes\":9029},{\"Title\":\"My Date With Drew\",\"US Gross\":181041,\"Worldwide Gross\":181041,\"US DVD Sales\":null,\"Production Budget\":1100,\"Release Date\":\"Aug 05 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"DEJ Productions\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":2961},{\"Title\":\"Me and You and Everyone We Know\",\"US Gross\":3885134,\"Worldwide Gross\":5409058,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jun 17 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"IFC Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.4,\"IMDB Votes\":17135},{\"Title\":\"My Favorite Martian\",\"US Gross\":36850101,\"Worldwide Gross\":36850101,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Feb 12 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":93,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Donald Petrie\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.5,\"IMDB Votes\":4918},{\"Title\":\"My Fellow Americans\",\"US Gross\":22331846,\"Worldwide Gross\":22331846,\"US DVD Sales\":null,\"Production Budget\":21500000,\"Release Date\":\"Dec 20 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":102,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Segal\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.3,\"IMDB Votes\":6366},{\"Title\":\"My Sister's Keeper\",\"US Gross\":49200230,\"Worldwide Gross\":89053995,\"US DVD Sales\":21467223,\"Production Budget\":27500000,\"Release Date\":\"Jun 26 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":108,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Nick Cassavetes\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":7.4,\"IMDB Votes\":13839},{\"Title\":\"My Summer of Love\",\"US Gross\":1000915,\"Worldwide Gross\":3800915,\"US DVD Sales\":null,\"Production Budget\":1700000,\"Release Date\":\"Jun 17 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":7242},{\"Title\":\"The Mystery Men\",\"US Gross\":29762011,\"Worldwide Gross\":29762011,\"US DVD Sales\":null,\"Production Budget\":68000000,\"Release Date\":\"Aug 06 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":120,\"Distributor\":\"Universal\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Super Hero\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Mystic River\",\"US Gross\":90135191,\"Worldwide Gross\":156835191,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Oct 08 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":137,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Clint Eastwood\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":8,\"IMDB Votes\":119484},{\"Title\":\"Nacho Libre\",\"US Gross\":80197993,\"Worldwide Gross\":99197993,\"US DVD Sales\":46582125,\"Production Budget\":32000000,\"Release Date\":\"Jun 16 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jared Hess\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":5.7,\"IMDB Votes\":31455},{\"Title\":\"Narc\",\"US Gross\":10465659,\"Worldwide Gross\":10465659,\"US DVD Sales\":null,\"Production Budget\":7500000,\"Release Date\":\"Dec 20 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joe Carnahan\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.3,\"IMDB Votes\":19248},{\"Title\":\"The Chronicles of Narnia: Prince Caspian\",\"US Gross\":141621490,\"Worldwide Gross\":419490286,\"US DVD Sales\":77773230,\"Production Budget\":225000000,\"Release Date\":\"May 16 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Andrew Adamson\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.9,\"IMDB Votes\":46608},{\"Title\":\"National Treasure\",\"US Gross\":173005002,\"Worldwide Gross\":347405002,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Nov 19 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":131,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jon Turteltaub\",\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6.9,\"IMDB Votes\":83989},{\"Title\":\"The Nativity Story\",\"US Gross\":37629831,\"Worldwide Gross\":46432264,\"US DVD Sales\":26142500,\"Production Budget\":35000000,\"Release Date\":\"Dec 01 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":102,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Catherine Hardwicke\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":6.6,\"IMDB Votes\":4701},{\"Title\":\"Never Back Down\",\"US Gross\":24850922,\"Worldwide Gross\":39319801,\"US DVD Sales\":18692319,\"Production Budget\":21000000,\"Release Date\":\"Mar 14 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":6.2,\"IMDB Votes\":21708},{\"Title\":\"Into the Blue\",\"US Gross\":18782227,\"Worldwide Gross\":41982227,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Sep 30 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":109,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":5.7,\"IMDB Votes\":22859},{\"Title\":\"Shinjuku Incident\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Feb 05 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"No Country for Old Men\",\"US Gross\":74273505,\"Worldwide Gross\":162103209,\"US DVD Sales\":45877844,\"Production Budget\":25000000,\"Release Date\":\"Nov 09 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Joel Coen\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":8.3,\"IMDB Votes\":197898},{\"Title\":\"The Incredibles\",\"US Gross\":261441092,\"Worldwide Gross\":632882184,\"US DVD Sales\":null,\"Production Budget\":92000000,\"Release Date\":\"Nov 05 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":121,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":\"Brad Bird\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8.1,\"IMDB Votes\":159123},{\"Title\":\"The Negotiator\",\"US Gross\":44705766,\"Worldwide Gross\":49105766,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Jul 29 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":138,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"F. Gary Gray\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.2,\"IMDB Votes\":46511},{\"Title\":\"A Nightmare on Elm Street\",\"US Gross\":63075011,\"Worldwide Gross\":105175011,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Apr 30 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.3,\"IMDB Votes\":12554},{\"Title\":\"Not Easily Broken\",\"US Gross\":10572742,\"Worldwide Gross\":10572742,\"US DVD Sales\":13828911,\"Production Budget\":5000000,\"Release Date\":\"Jan 09 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bill Duke\",\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":5.2,\"IMDB Votes\":1010},{\"Title\":\"The New Guy\",\"US Gross\":28972187,\"Worldwide Gross\":28972187,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"May 10 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":88,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":5.4,\"IMDB Votes\":14268},{\"Title\":\"The Newton Boys\",\"US Gross\":10341093,\"Worldwide Gross\":10341093,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Mar 27 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Richard Linklater\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":5.7,\"IMDB Votes\":4443},{\"Title\":\"The Next Best Thing\",\"US Gross\":14983572,\"Worldwide Gross\":24355762,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Mar 03 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Schlesinger\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":4.4,\"IMDB Votes\":6104},{\"Title\":\"Northfork\",\"US Gross\":1420578,\"Worldwide Gross\":1445140,\"US DVD Sales\":null,\"Production Budget\":1900000,\"Release Date\":\"Jul 11 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Michael Polish\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6.3,\"IMDB Votes\":3776},{\"Title\":\"In Good Company\",\"US Gross\":45489752,\"Worldwide Gross\":63489752,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Dec 29 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":109,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul Weitz\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.8,\"IMDB Votes\":25695},{\"Title\":\"Notting Hill\",\"US Gross\":116089678,\"Worldwide Gross\":363728226,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"May 28 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":123,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":6.9,\"IMDB Votes\":66362},{\"Title\":\"Little Nicky\",\"US Gross\":39442871,\"Worldwide Gross\":58270391,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Nov 10 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":90,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":5,\"IMDB Votes\":35082},{\"Title\":\"Nicholas Nickleby\",\"US Gross\":1562800,\"Worldwide Gross\":1562800,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Dec 27 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"United Artists\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7.3,\"IMDB Votes\":4968},{\"Title\":\"Nim's Island\",\"US Gross\":48006762,\"Worldwide Gross\":94081683,\"US DVD Sales\":18322434,\"Production Budget\":37000000,\"Release Date\":\"Apr 04 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6,\"IMDB Votes\":10391},{\"Title\":\"Ninja Assassin\",\"US Gross\":38122883,\"Worldwide Gross\":57422883,\"US DVD Sales\":14085314,\"Production Budget\":50000000,\"Release Date\":\"Nov 25 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James McTeigue\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":6.3,\"IMDB Votes\":20078},{\"Title\":\"The Ninth Gate\",\"US Gross\":18653746,\"Worldwide Gross\":58394308,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Mar 10 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":133,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Fantasy\",\"Director\":\"Roman Polanski\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":50510},{\"Title\":\"Never Let Me Go\",\"US Gross\":186830,\"Worldwide Gross\":186830,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Sep 15 2010\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":7.3,\"IMDB Votes\":252},{\"Title\":\"Lucky Numbers\",\"US Gross\":10014234,\"Worldwide Gross\":10014234,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Oct 27 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Nora Ephron\",\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":4.9,\"IMDB Votes\":5461},{\"Title\":\"Night at the Museum: Battle of the Smithsonian\",\"US Gross\":177243721,\"Worldwide Gross\":413054631,\"US DVD Sales\":48547729,\"Production Budget\":150000000,\"Release Date\":\"May 22 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":104,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Shawn Levy\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":25631},{\"Title\":\"Nick and Norah's Infinite Playlist\",\"US Gross\":31487293,\"Worldwide Gross\":31487293,\"US DVD Sales\":10327750,\"Production Budget\":10000000,\"Release Date\":\"Oct 03 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":90,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Sollett\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":6.8,\"IMDB Votes\":24021},{\"Title\":\"Notorious\",\"US Gross\":36842118,\"Worldwide Gross\":44473591,\"US DVD Sales\":21503929,\"Production Budget\":19000000,\"Release Date\":\"Jan 16 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.3,\"IMDB Votes\":9811},{\"Title\":\"No End In Sight\",\"US Gross\":1433319,\"Worldwide Gross\":1433319,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jul 27 2007\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":8.3,\"IMDB Votes\":4086},{\"Title\":\"Nomad\",\"US Gross\":79123,\"Worldwide Gross\":79123,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Mar 16 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":1224},{\"Title\":\"No Man's Land\",\"US Gross\":1067481,\"Worldwide Gross\":2684207,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Dec 07 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":8,\"IMDB Votes\":19600},{\"Title\":\"No Reservations\",\"US Gross\":43107979,\"Worldwide Gross\":92107979,\"US DVD Sales\":27029295,\"Production Budget\":28000000,\"Release Date\":\"Jul 27 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":103,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.3,\"IMDB Votes\":16952},{\"Title\":\"The Notebook\",\"US Gross\":81001787,\"Worldwide Gross\":102276787,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jun 25 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":123,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Nick Cassavetes\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":8,\"IMDB Votes\":95850},{\"Title\":\"November\",\"US Gross\":191862,\"Worldwide Gross\":191862,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Jul 22 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":2189},{\"Title\":\"Novocaine\",\"US Gross\":2025238,\"Worldwide Gross\":2522928,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Nov 16 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":5.8,\"IMDB Votes\":6233},{\"Title\":\"Nowhere in Africa\",\"US Gross\":6173485,\"Worldwide Gross\":6173485,\"US DVD Sales\":null,\"Production Budget\":6500000,\"Release Date\":\"Mar 07 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Zeitgeist\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Napoleon Dynamite\",\"US Gross\":44540956,\"Worldwide Gross\":46140956,\"US DVD Sales\":null,\"Production Budget\":400000,\"Release Date\":\"Jun 11 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":82,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Short Film\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jared Hess\",\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":6.9,\"IMDB Votes\":76557},{\"Title\":\"North Country\",\"US Gross\":18324242,\"Worldwide Gross\":23624242,\"US DVD Sales\":14349786,\"Production Budget\":30000000,\"Release Date\":\"Oct 21 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":7.2,\"IMDB Votes\":16497},{\"Title\":\"The Namesake\",\"US Gross\":13610521,\"Worldwide Gross\":20180109,\"US DVD Sales\":9364773,\"Production Budget\":8500000,\"Release Date\":\"Mar 09 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":122,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mira Nair\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":9700},{\"Title\":\"Inside Deep Throat\",\"US Gross\":691880,\"Worldwide Gross\":691880,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Feb 11 2005\",\"MPAA Rating\":\"NC-17\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":3264},{\"Title\":\"Intolerable Cruelty\",\"US Gross\":35327628,\"Worldwide Gross\":121327628,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Oct 10 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":100,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Coen\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":6.4,\"IMDB Votes\":36323},{\"Title\":\"The Interpreter\",\"US Gross\":72708161,\"Worldwide Gross\":163954076,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Apr 22 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":118,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sydney Pollack\",\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":6.5,\"IMDB Votes\":38227},{\"Title\":\"The Night Listener\",\"US Gross\":7836393,\"Worldwide Gross\":10547755,\"US DVD Sales\":8927227,\"Production Budget\":4000000,\"Release Date\":\"Aug 04 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":5.9,\"IMDB Votes\":8437},{\"Title\":\"The International\",\"US Gross\":25450527,\"Worldwide Gross\":53850527,\"US DVD Sales\":7276738,\"Production Budget\":50000000,\"Release Date\":\"Feb 13 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":118,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tom Tykwer\",\"Rotten Tomatoes Rating\":59,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Number 23\",\"US Gross\":35193167,\"Worldwide Gross\":76593167,\"US DVD Sales\":27576238,\"Production Budget\":32000000,\"Release Date\":\"Feb 23 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":95,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Schumacher\",\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":6.2,\"IMDB Votes\":59174},{\"Title\":\"Nurse Betty\",\"US Gross\":25170054,\"Worldwide Gross\":27732366,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Sep 08 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"USA Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Neil LaBute\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.4,\"IMDB Votes\":20354},{\"Title\":\"Jimmy Neutron: Boy Genius\",\"US Gross\":80936232,\"Worldwide Gross\":102992536,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Dec 21 2001\",\"MPAA Rating\":\"G\",\"Running Time min\":83,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":5379},{\"Title\":\"Nutty Professor II: The Klumps\",\"US Gross\":123307945,\"Worldwide Gross\":161600000,\"US DVD Sales\":null,\"Production Budget\":84000000,\"Release Date\":\"Jul 28 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":107,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Segal\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.3,\"IMDB Votes\":17075},{\"Title\":\"Never Again\",\"US Gross\":307631,\"Worldwide Gross\":307631,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Jul 12 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":511},{\"Title\":\"Finding Neverland\",\"US Gross\":51676606,\"Worldwide Gross\":118676606,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Nov 12 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":106,\"Distributor\":\"Miramax\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Marc Forster\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.9,\"IMDB Votes\":86828},{\"Title\":\"Into the Wild\",\"US Gross\":18354356,\"Worldwide Gross\":53813837,\"US DVD Sales\":15272435,\"Production Budget\":20000000,\"Release Date\":\"Sep 21 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":147,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sean Penn\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":8.2,\"IMDB Votes\":99464},{\"Title\":\"The New World\",\"US Gross\":12712093,\"Worldwide Gross\":26184400,\"US DVD Sales\":8200002,\"Production Budget\":30000000,\"Release Date\":\"Dec 25 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Terrence Malick\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.9,\"IMDB Votes\":33248},{\"Title\":\"Nochnoy dozor\",\"US Gross\":1502188,\"Worldwide Gross\":33923550,\"US DVD Sales\":7476421,\"Production Budget\":4200000,\"Release Date\":\"Feb 17 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Timur Bekmambetov\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":25136},{\"Title\":\"New York Minute\",\"US Gross\":14018364,\"Worldwide Gross\":21215882,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"May 07 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Dennie Gordon\",\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Object of my Affection\",\"US Gross\":29145924,\"Worldwide Gross\":29145924,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Apr 17 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":112,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":5.9,\"IMDB Votes\":8492},{\"Title\":\"Orange County\",\"US Gross\":41059716,\"Worldwide Gross\":43308707,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Jan 11 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":82,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6.1,\"IMDB Votes\":23742},{\"Title\":\"Ocean's Eleven\",\"US Gross\":183417150,\"Worldwide Gross\":450728529,\"US DVD Sales\":null,\"Production Budget\":110000000,\"Release Date\":\"Dec 07 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":116,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steven Soderbergh\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.6,\"IMDB Votes\":139034},{\"Title\":\"Ocean's Twelve\",\"US Gross\":125531634,\"Worldwide Gross\":363531634,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Dec 10 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":125,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steven Soderbergh\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6,\"IMDB Votes\":89861},{\"Title\":\"Ocean's Thirteen\",\"US Gross\":117144465,\"Worldwide Gross\":311744465,\"US DVD Sales\":48258805,\"Production Budget\":85000000,\"Release Date\":\"Jun 08 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":122,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steven Soderbergh\",\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":6.9,\"IMDB Votes\":76884},{\"Title\":\"Oceans\",\"US Gross\":19422319,\"Worldwide Gross\":72965951,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Apr 22 2010\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":1429},{\"Title\":\"Office Space\",\"US Gross\":10827813,\"Worldwide Gross\":12827813,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 19 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Short Film\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mike Judge\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":7.9,\"IMDB Votes\":80972},{\"Title\":\"White Oleander\",\"US Gross\":16357770,\"Worldwide Gross\":21657770,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Oct 11 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":7,\"IMDB Votes\":13755},{\"Title\":\"The Omen\",\"US Gross\":54607383,\"Worldwide Gross\":119607383,\"US DVD Sales\":10468933,\"Production Budget\":25000000,\"Release Date\":\"Jun 06 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.4,\"IMDB Votes\":24523},{\"Title\":\"Any Given Sunday\",\"US Gross\":75530832,\"Worldwide Gross\":100230832,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Dec 22 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":162,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Oliver Stone\",\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":6.6,\"IMDB Votes\":48477},{\"Title\":\"Once\",\"US Gross\":9445857,\"Worldwide Gross\":18997174,\"US DVD Sales\":null,\"Production Budget\":150000,\"Release Date\":\"Jun 16 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":8,\"IMDB Votes\":34348},{\"Title\":\"Once in a Lifetime: the Extraordinary Story of the New York Cosmos\",\"US Gross\":144601,\"Worldwide Gross\":206351,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Jul 07 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":\"Matt Dillon\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.1,\"IMDB Votes\":643},{\"Title\":\"One Hour Photo\",\"US Gross\":31597131,\"Worldwide Gross\":52223306,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Aug 21 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":96,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7,\"IMDB Votes\":42134},{\"Title\":\"One True Thing\",\"US Gross\":23337196,\"Worldwide Gross\":26708196,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Sep 18 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":127,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Carl Franklin\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":6.9,\"IMDB Votes\":5591},{\"Title\":\"Ong-Bak 2\",\"US Gross\":102458,\"Worldwide Gross\":7583050,\"US DVD Sales\":1238181,\"Production Budget\":15000000,\"Release Date\":\"Sep 25 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":97,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.7,\"IMDB Votes\":887},{\"Title\":\"On the Line\",\"US Gross\":4356743,\"Worldwide Gross\":4356743,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 26 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":18,\"IMDB Rating\":3.4,\"IMDB Votes\":2617},{\"Title\":\"One Night with the King\",\"US Gross\":13395961,\"Worldwide Gross\":13395961,\"US DVD Sales\":20554010,\"Production Budget\":20000000,\"Release Date\":\"Oct 13 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":124,\"Distributor\":\"Rocky Mountain Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Michael O. Sajbel\",\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":6,\"IMDB Votes\":2993},{\"Title\":\"Opal Dreams\",\"US Gross\":14443,\"Worldwide Gross\":14443,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Nov 22 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Strand\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":468},{\"Title\":\"Open Season\",\"US Gross\":85105259,\"Worldwide Gross\":189901703,\"US DVD Sales\":96622855,\"Production Budget\":85000000,\"Release Date\":\"Sep 29 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":87,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6,\"IMDB Votes\":52},{\"Title\":\"Open Water\",\"US Gross\":30500882,\"Worldwide Gross\":52100882,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Aug 06 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":79,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":23667},{\"Title\":\"Open Range\",\"US Gross\":58328680,\"Worldwide Gross\":68293719,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Aug 15 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":139,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Kevin Costner\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":7.5,\"IMDB Votes\":26438},{\"Title\":\"The Order\",\"US Gross\":7659747,\"Worldwide Gross\":11559747,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Sep 05 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.9,\"IMDB Votes\":9119},{\"Title\":\"Orgazmo\",\"US Gross\":582024,\"Worldwide Gross\":627287,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Oct 23 1998\",\"MPAA Rating\":\"NC-17\",\"Running Time min\":null,\"Distributor\":\"October Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Trey Parker\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":15592},{\"Title\":\"Original Sin\",\"US Gross\":16521410,\"Worldwide Gross\":16521410,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Aug 03 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":5.6,\"IMDB Votes\":15939},{\"Title\":\"Osama\",\"US Gross\":1127331,\"Worldwide Gross\":1971479,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Jan 30 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":4737},{\"Title\":\"Oscar and Lucinda\",\"US Gross\":1612957,\"Worldwide Gross\":1612957,\"US DVD Sales\":null,\"Production Budget\":12500000,\"Release Date\":\"Dec 31 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":6.7,\"IMDB Votes\":3782},{\"Title\":\"Old School\",\"US Gross\":75155000,\"Worldwide Gross\":86325829,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Feb 21 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":91,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Todd Phillips\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":7,\"IMDB Votes\":60477},{\"Title\":\"Osmosis Jones\",\"US Gross\":13596911,\"Worldwide Gross\":13596911,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Aug 10 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Bobby Farrelly\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":6,\"IMDB Votes\":10959},{\"Title\":\"American Outlaws\",\"US Gross\":13264986,\"Worldwide Gross\":13264986,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Aug 17 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Les Mayfield\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.6,\"IMDB Votes\":7396},{\"Title\":\"Oliver Twist\",\"US Gross\":2070920,\"Worldwide Gross\":26670920,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Sep 23 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony/TriStar\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Roman Polanski\",\"Rotten Tomatoes Rating\":59,\"IMDB Rating\":7,\"IMDB Votes\":10748},{\"Title\":\"Out Cold\",\"US Gross\":13906394,\"Worldwide Gross\":13906394,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Nov 21 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":5.8,\"IMDB Votes\":7153},{\"Title\":\"Outlander\",\"US Gross\":166003,\"Worldwide Gross\":1250617,\"US DVD Sales\":1757108,\"Production Budget\":50000000,\"Release Date\":\"Jan 23 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":115,\"Distributor\":\"Third Rail\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":18299},{\"Title\":\"Out of Sight\",\"US Gross\":37562568,\"Worldwide Gross\":37562568,\"US DVD Sales\":null,\"Production Budget\":48000000,\"Release Date\":\"Jun 26 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":129,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steven Soderbergh\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":7.1,\"IMDB Votes\":38263},{\"Title\":\"Out of Time\",\"US Gross\":41083108,\"Worldwide Gross\":55489826,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Oct 03 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":105,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Carl Franklin\",\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":4.9,\"IMDB Votes\":151},{\"Title\":\"The Out-of-Towners\",\"US Gross\":28544120,\"Worldwide Gross\":28544120,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Apr 02 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":92,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":4.9,\"IMDB Votes\":6338},{\"Title\":\"Owning Mahowny\",\"US Gross\":1011054,\"Worldwide Gross\":1011054,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"May 02 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7,\"IMDB Votes\":5789},{\"Title\":\"The Pacifier\",\"US Gross\":113006880,\"Worldwide Gross\":198006880,\"US DVD Sales\":null,\"Production Budget\":56000000,\"Release Date\":\"Mar 04 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":97,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Adam Shankman\",\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":5.3,\"IMDB Votes\":22590},{\"Title\":\"El Laberinto del Fauno\",\"US Gross\":37634615,\"Worldwide Gross\":83234615,\"US DVD Sales\":40776265,\"Production Budget\":16000000,\"Release Date\":\"Dec 29 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Picturehouse\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Guillermo Del Toro\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.4,\"IMDB Votes\":153762},{\"Title\":\"The Passion of the Christ\",\"US Gross\":370782930,\"Worldwide Gross\":611899420,\"US DVD Sales\":618454,\"Production Budget\":25000000,\"Release Date\":\"Feb 25 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":127,\"Distributor\":\"Newmarket Films\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Mel Gibson\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":7.1,\"IMDB Votes\":87326},{\"Title\":\"Patch Adams\",\"US Gross\":135041968,\"Worldwide Gross\":202200000,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Dec 25 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"Universal\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tom Shadyac\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":6.3,\"IMDB Votes\":31481},{\"Title\":\"Payback\",\"US Gross\":81526121,\"Worldwide Gross\":161626121,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Feb 05 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":5.8,\"IMDB Votes\":304},{\"Title\":\"Paycheck\",\"US Gross\":53789313,\"Worldwide Gross\":89350576,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Dec 25 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":119,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"John Woo\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":6.1,\"IMDB Votes\":35660},{\"Title\":\"Max Payne\",\"US Gross\":40687294,\"Worldwide Gross\":85761789,\"US DVD Sales\":25346362,\"Production Budget\":35000000,\"Release Date\":\"Oct 17 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Game\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.4,\"IMDB Votes\":47541},{\"Title\":\"The Princess Diaries 2: Royal Engagement\",\"US Gross\":95149435,\"Worldwide Gross\":122071435,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Aug 11 2004\",\"MPAA Rating\":\"G\",\"Running Time min\":115,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Garry Marshall\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.3,\"IMDB Votes\":12439},{\"Title\":\"The Princess Diaries\",\"US Gross\":108244774,\"Worldwide Gross\":165334774,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Aug 03 2001\",\"MPAA Rating\":\"G\",\"Running Time min\":115,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Garry Marshall\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":5.9,\"IMDB Votes\":23486},{\"Title\":\"The Peacemaker\",\"US Gross\":41263140,\"Worldwide Gross\":62967368,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Sep 26 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":123,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Magazine Article\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mimi Leder\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":5.8,\"IMDB Votes\":21524},{\"Title\":\"Peter Pan\",\"US Gross\":48417850,\"Worldwide Gross\":95255485,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Dec 25 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":113,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"P.J. Hogan\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.1,\"IMDB Votes\":16894},{\"Title\":\"People I Know\",\"US Gross\":121972,\"Worldwide Gross\":121972,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Apr 25 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":6305},{\"Title\":\"Perrier's Bounty\",\"US Gross\":828,\"Worldwide Gross\":828,\"US DVD Sales\":null,\"Production Budget\":6600000,\"Release Date\":\"May 21 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":808},{\"Title\":\"A Perfect Getaway\",\"US Gross\":15515460,\"Worldwide Gross\":20613298,\"US DVD Sales\":3994342,\"Production Budget\":14000000,\"Release Date\":\"Aug 07 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Twohy\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.5,\"IMDB Votes\":16324},{\"Title\":\"Phat Girlz\",\"US Gross\":7061128,\"Worldwide Gross\":7271305,\"US DVD Sales\":18090044,\"Production Budget\":3000000,\"Release Date\":\"Apr 07 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":2.2,\"IMDB Votes\":6343},{\"Title\":\"Poolhall Junkies\",\"US Gross\":563711,\"Worldwide Gross\":563711,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Feb 28 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Gold Circle Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":5233},{\"Title\":\"The Phantom of the Opera\",\"US Gross\":51225796,\"Worldwide Gross\":158225796,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Dec 22 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":143,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Musical/Opera\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Joel Schumacher\",\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":7.2,\"IMDB Votes\":42832},{\"Title\":\"Phone Booth\",\"US Gross\":46566212,\"Worldwide Gross\":97837138,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Apr 04 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":81,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joel Schumacher\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":7.2,\"IMDB Votes\":68874},{\"Title\":\"The Pianist\",\"US Gross\":32519322,\"Worldwide Gross\":120000000,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Dec 27 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":149,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Roman Polanski\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.5,\"IMDB Votes\":134516},{\"Title\":\"The Pink Panther\",\"US Gross\":82226474,\"Worldwide Gross\":158926474,\"US DVD Sales\":23182695,\"Production Budget\":80000000,\"Release Date\":\"Feb 10 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Shawn Levy\",\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5.1,\"IMDB Votes\":28456},{\"Title\":\"Pirates of the Caribbean: The Curse of the Black Pearl\",\"US Gross\":305411224,\"Worldwide Gross\":655011224,\"US DVD Sales\":null,\"Production Budget\":125000000,\"Release Date\":\"Jul 09 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":143,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Disney Ride\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Gore Verbinski\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8,\"IMDB Votes\":232719},{\"Title\":\"Pirates of the Caribbean: Dead Man's Chest\",\"US Gross\":423315812,\"Worldwide Gross\":1065659812,\"US DVD Sales\":320830925,\"Production Budget\":225000000,\"Release Date\":\"Jul 07 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":151,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Disney Ride\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Gore Verbinski\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":7.3,\"IMDB Votes\":150446},{\"Title\":\"Pirates of the Caribbean: At World's End\",\"US Gross\":309420425,\"Worldwide Gross\":960996492,\"US DVD Sales\":296060575,\"Production Budget\":300000000,\"Release Date\":\"May 25 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":167,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Disney Ride\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Gore Verbinski\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":7,\"IMDB Votes\":133241},{\"Title\":\"The Chronicles of Riddick\",\"US Gross\":57712751,\"Worldwide Gross\":107212751,\"US DVD Sales\":null,\"Production Budget\":120000000,\"Release Date\":\"Jun 11 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":119,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"David Twohy\",\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":6.4,\"IMDB Votes\":49383},{\"Title\":\"Pitch Black\",\"US Gross\":39235088,\"Worldwide Gross\":53182088,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Feb 18 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"USA Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"David Twohy\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":7,\"IMDB Votes\":55217},{\"Title\":\"Play it to the Bone\",\"US Gross\":8427204,\"Worldwide Gross\":8427204,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Dec 24 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ron Shelton\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.1,\"IMDB Votes\":6039},{\"Title\":\"Screwed\",\"US Gross\":6982680,\"Worldwide Gross\":6982680,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"May 12 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.1,\"IMDB Votes\":4411},{\"Title\":\"Percy Jackson & the Olympians: The Lightning Thief\",\"US Gross\":88761720,\"Worldwide Gross\":226435277,\"US DVD Sales\":30795712,\"Production Budget\":95000000,\"Release Date\":\"Feb 12 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Chris Columbus\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":5.8,\"IMDB Votes\":20451},{\"Title\":\"Paris, je t'aime\",\"US Gross\":4857374,\"Worldwide Gross\":4857374,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"May 04 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"First Look\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gurinder Chadha\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":175},{\"Title\":\"Princess Kaiulani\",\"US Gross\":883454,\"Worldwide Gross\":883454,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"May 14 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Roadside Attractions\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.3,\"IMDB Votes\":224},{\"Title\":\"Lake Placid\",\"US Gross\":31770413,\"Worldwide Gross\":31770413,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Jul 16 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":82,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steve Miner\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.3,\"IMDB Votes\":19382},{\"Title\":\"The Back-up Plan\",\"US Gross\":37490007,\"Worldwide Gross\":77090007,\"US DVD Sales\":7571152,\"Production Budget\":35000000,\"Release Date\":\"Apr 23 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"CBS Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":4.4,\"IMDB Votes\":6981},{\"Title\":\"The Pledge\",\"US Gross\":19719930,\"Worldwide Gross\":29406132,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Jan 19 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sean Penn\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":6.9,\"IMDB Votes\":22609},{\"Title\":\"Proof of Life\",\"US Gross\":32598931,\"Worldwide Gross\":62761005,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Dec 08 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":135,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Magazine Article\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Taylor Hackford\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.1,\"IMDB Votes\":23099},{\"Title\":\"Pollock\",\"US Gross\":8596914,\"Worldwide Gross\":10557291,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Dec 15 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Ed Harris\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.1,\"IMDB Votes\":9669},{\"Title\":\"Planet of the Apes\",\"US Gross\":180011740,\"Worldwide Gross\":362211740,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Jul 27 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":120,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Tim Burton\",\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":5.5,\"IMDB Votes\":72763},{\"Title\":\"Please Give\",\"US Gross\":4028339,\"Worldwide Gross\":4028339,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Apr 30 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":7.4,\"IMDB Votes\":1023},{\"Title\":\"Planet 51\",\"US Gross\":42194060,\"Worldwide Gross\":108005745,\"US DVD Sales\":15341764,\"Production Budget\":50000000,\"Release Date\":\"Nov 20 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":6.1,\"IMDB Votes\":9645},{\"Title\":\"The Adventures of Pluto Nash\",\"US Gross\":4411102,\"Worldwide Gross\":7094995,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Aug 16 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":6,\"IMDB Rating\":3.7,\"IMDB Votes\":9207},{\"Title\":\"The Players Club\",\"US Gross\":23047939,\"Worldwide Gross\":23047939,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Apr 08 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":104,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":4.8,\"IMDB Votes\":2072},{\"Title\":\"Paranormal Activity\",\"US Gross\":107918810,\"Worldwide Gross\":193770453,\"US DVD Sales\":14051496,\"Production Budget\":15000,\"Release Date\":\"Sep 25 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":85,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Oren Peli\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":6.7,\"IMDB Votes\":53455},{\"Title\":\"The Pineapple Express\",\"US Gross\":87341380,\"Worldwide Gross\":100941380,\"US DVD Sales\":45217362,\"Production Budget\":26000000,\"Release Date\":\"Aug 06 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Gordon Green\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Pinocchio\",\"US Gross\":3681811,\"Worldwide Gross\":31681811,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Dec 25 2002\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Roberto Benigni\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.5,\"IMDB Votes\":3215},{\"Title\":\"Pandaemonium\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jun 29 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":496},{\"Title\":\"Pandorum\",\"US Gross\":10330853,\"Worldwide Gross\":17033431,\"US DVD Sales\":4018696,\"Production Budget\":40000000,\"Release Date\":\"Sep 25 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Overture Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":6.9,\"IMDB Votes\":29428},{\"Title\":\"The Punisher\",\"US Gross\":33664370,\"Worldwide Gross\":54664370,\"US DVD Sales\":null,\"Production Budget\":33000000,\"Release Date\":\"Apr 16 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":124,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":6.4,\"IMDB Votes\":50482},{\"Title\":\"Pokemon 2000\",\"US Gross\":43746923,\"Worldwide Gross\":133946923,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jul 21 2000\",\"MPAA Rating\":\"G\",\"Running Time min\":99,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Pokemon 3: The Movie\",\"US Gross\":17052128,\"Worldwide Gross\":68452128,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Apr 06 2001\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":3.5,\"IMDB Votes\":2577},{\"Title\":\"The Polar Express\",\"US Gross\":181320597,\"Worldwide Gross\":305420597,\"US DVD Sales\":null,\"Production Budget\":170000000,\"Release Date\":\"Nov 10 2004\",\"MPAA Rating\":\"G\",\"Running Time min\":99,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Robert Zemeckis\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":6.7,\"IMDB Votes\":28550},{\"Title\":\"Along Came Polly\",\"US Gross\":88073507,\"Worldwide Gross\":170360435,\"US DVD Sales\":null,\"Production Budget\":42000000,\"Release Date\":\"Jan 16 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":90,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.8,\"IMDB Votes\":38276},{\"Title\":\"Gake no ue no Ponyo\",\"US Gross\":15090399,\"Worldwide Gross\":199090399,\"US DVD Sales\":12626319,\"Production Budget\":34000000,\"Release Date\":\"Aug 14 2009\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":13821},{\"Title\":\"Pootie Tang\",\"US Gross\":3293258,\"Worldwide Gross\":3293258,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Jun 29 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":4.5,\"IMDB Votes\":6183},{\"Title\":\"Poseidon\",\"US Gross\":60674817,\"Worldwide Gross\":181674817,\"US DVD Sales\":19732418,\"Production Budget\":160000000,\"Release Date\":\"May 12 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wolfgang Petersen\",\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.6,\"IMDB Votes\":35930},{\"Title\":\"Possession\",\"US Gross\":10103647,\"Worldwide Gross\":14805812,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Aug 16 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Neil LaBute\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.4,\"IMDB Votes\":6789},{\"Title\":\"Peter Pan: Return to Neverland\",\"US Gross\":48430258,\"Worldwide Gross\":109862682,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Feb 15 2002\",\"MPAA Rating\":\"G\",\"Running Time min\":72,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Play\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Practical Magic\",\"US Gross\":46850558,\"Worldwide Gross\":68336997,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Oct 16 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":105,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Griffin Dunne\",\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":5.5,\"IMDB Votes\":20196},{\"Title\":\"The Devil Wears Prada\",\"US Gross\":124740460,\"Worldwide Gross\":326551094,\"US DVD Sales\":95856827,\"Production Budget\":35000000,\"Release Date\":\"Jun 30 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Frankel\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":6.8,\"IMDB Votes\":66627},{\"Title\":\"The Boat That Rocked\",\"US Gross\":8017467,\"Worldwide Gross\":37472651,\"US DVD Sales\":1374953,\"Production Budget\":50000000,\"Release Date\":\"Nov 13 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":134,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":25415},{\"Title\":\"Paparazzi\",\"US Gross\":15712072,\"Worldwide Gross\":16612072,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Sep 03 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":18,\"IMDB Rating\":5.7,\"IMDB Votes\":9058},{\"Title\":\"Primary Colors\",\"US Gross\":39017984,\"Worldwide Gross\":39017984,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Mar 20 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":143,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Dramatization\",\"Director\":\"Mike Nichols\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":6.7,\"IMDB Votes\":15340},{\"Title\":\"Precious (Based on the Novel Push by Sapphire)\",\"US Gross\":47566524,\"Worldwide Gross\":63471431,\"US DVD Sales\":20130576,\"Production Budget\":10000000,\"Release Date\":\"Nov 06 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Lee Daniels\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":24504},{\"Title\":\"Pride and Glory\",\"US Gross\":15740721,\"Worldwide Gross\":43440721,\"US DVD Sales\":11495577,\"Production Budget\":30000000,\"Release Date\":\"Oct 24 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":129,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":6.7,\"IMDB Votes\":24596},{\"Title\":\"Pride and Prejudice\",\"US Gross\":38372662,\"Worldwide Gross\":120918508,\"US DVD Sales\":53281347,\"Production Budget\":28000000,\"Release Date\":\"Nov 11 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Joe Wright\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":5.5,\"IMDB Votes\":1230},{\"Title\":\"The Road to Perdition\",\"US Gross\":104054514,\"Worldwide Gross\":181054514,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jul 12 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":117,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Sam Mendes\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Predators\",\"US Gross\":51920690,\"Worldwide Gross\":124549380,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jul 09 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.9,\"IMDB Votes\":22257},{\"Title\":\"Prefontaine\",\"US Gross\":590817,\"Worldwide Gross\":590817,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Jan 24 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":6.2,\"IMDB Votes\":2580},{\"Title\":\"Perfume: The Story of a Murderer\",\"US Gross\":2223293,\"Worldwide Gross\":132180323,\"US DVD Sales\":7529604,\"Production Budget\":63700000,\"Release Date\":\"Dec 27 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":147,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Tom Tykwer\",\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":7.5,\"IMDB Votes\":51704},{\"Title\":\"The Prince & Me\",\"US Gross\":28165882,\"Worldwide Gross\":29356757,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Apr 02 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":111,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martha Coolidge\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":9547},{\"Title\":\"The Perfect Man\",\"US Gross\":16535005,\"Worldwide Gross\":19535005,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jun 17 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":5,\"IMDB Rating\":5.1,\"IMDB Votes\":7278},{\"Title\":\"The Pursuit of Happyness\",\"US Gross\":162586036,\"Worldwide Gross\":306086036,\"US DVD Sales\":90857430,\"Production Budget\":55000000,\"Release Date\":\"Dec 15 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":116,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Gabriele Muccino\",\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":7.8,\"IMDB Votes\":77939},{\"Title\":\"Primer\",\"US Gross\":424760,\"Worldwide Gross\":565846,\"US DVD Sales\":null,\"Production Budget\":7000,\"Release Date\":\"Oct 08 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":80,\"Distributor\":\"ThinkFilm\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":17454},{\"Title\":\"Pearl Harbor\",\"US Gross\":198539855,\"Worldwide Gross\":449239855,\"US DVD Sales\":null,\"Production Budget\":151500000,\"Release Date\":\"May 25 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":183,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":\"Michael Bay\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.4,\"IMDB Votes\":96186},{\"Title\":\"Premonition\",\"US Gross\":47852604,\"Worldwide Gross\":81461343,\"US DVD Sales\":33241945,\"Production Budget\":20000000,\"Release Date\":\"Mar 16 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Prince of Egypt\",\"US Gross\":101413188,\"Worldwide Gross\":218600000,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Dec 18 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":97,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Dramatization\",\"Director\":\"Steve Hickner\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":6.8,\"IMDB Votes\":24569},{\"Title\":\"The Producers: The Movie Musical\",\"US Gross\":19398532,\"Worldwide Gross\":32952995,\"US DVD Sales\":5338452,\"Production Budget\":45000000,\"Release Date\":\"Dec 16 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Prom Night\",\"US Gross\":43869350,\"Worldwide Gross\":57109687,\"US DVD Sales\":8497205,\"Production Budget\":18000000,\"Release Date\":\"Apr 11 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":85,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":5.1,\"IMDB Votes\":4263},{\"Title\":\"Proof\",\"US Gross\":7535331,\"Worldwide Gross\":8284331,\"US DVD Sales\":9239421,\"Production Budget\":20000000,\"Release Date\":\"Sep 16 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Madden\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.9,\"IMDB Votes\":18622},{\"Title\":\"Panic Room\",\"US Gross\":95308367,\"Worldwide Gross\":196308367,\"US DVD Sales\":null,\"Production Budget\":48000000,\"Release Date\":\"Mar 29 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":112,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Fincher\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":6.9,\"IMDB Votes\":68737},{\"Title\":\"The Proposal\",\"US Gross\":163958031,\"Worldwide Gross\":317358031,\"US DVD Sales\":83691948,\"Production Budget\":40000000,\"Release Date\":\"Jun 19 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":107,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Anne Fletcher\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":5.4,\"IMDB Votes\":397},{\"Title\":\"Prince of Persia: Sands of Time\",\"US Gross\":90755643,\"Worldwide Gross\":335055643,\"US DVD Sales\":null,\"Production Budget\":200000000,\"Release Date\":\"May 28 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":103,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Game\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Mike Newell\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Prestige\",\"US Gross\":53089891,\"Worldwide Gross\":107896006,\"US DVD Sales\":45394364,\"Production Budget\":40000000,\"Release Date\":\"Oct 20 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":131,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Christopher Nolan\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":8.4,\"IMDB Votes\":207322},{\"Title\":\"The Party's Over\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Oct 24 2003\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Film Movement\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Postman\",\"US Gross\":17650704,\"Worldwide Gross\":17650704,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Dec 25 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":177,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Kevin Costner\",\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":5.5,\"IMDB Votes\":24045},{\"Title\":\"Psycho Beach Party\",\"US Gross\":267972,\"Worldwide Gross\":267972,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Aug 04 2000\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6,\"IMDB Votes\":3085},{\"Title\":\"Psycho\",\"US Gross\":21541218,\"Worldwide Gross\":37226218,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 04 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gus Van Sant\",\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":4.5,\"IMDB Votes\":19769},{\"Title\":\"The Patriot\",\"US Gross\":113330342,\"Worldwide Gross\":215300000,\"US DVD Sales\":null,\"Production Budget\":110000000,\"Release Date\":\"Jun 28 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":165,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Roland Emmerich\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":6.9,\"IMDB Votes\":78302},{\"Title\":\"Public Enemies\",\"US Gross\":97104620,\"Worldwide Gross\":210379983,\"US DVD Sales\":35026854,\"Production Budget\":102500000,\"Release Date\":\"Jul 01 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Michael Mann\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":7.1,\"IMDB Votes\":71323},{\"Title\":\"The Powerpuff Girls\",\"US Gross\":11411644,\"Worldwide Gross\":16425701,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jul 03 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":3234},{\"Title\":\"Pulse\",\"US Gross\":20264436,\"Worldwide Gross\":29771485,\"US DVD Sales\":null,\"Production Budget\":7500000,\"Release Date\":\"Aug 11 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein/Dimension\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":5,\"IMDB Votes\":846},{\"Title\":\"Punch-Drunk Love\",\"US Gross\":17791031,\"Worldwide Gross\":24591031,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Oct 11 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul Thomas Anderson\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":7.4,\"IMDB Votes\":49786},{\"Title\":\"Punisher: War Zone\",\"US Gross\":8050977,\"Worldwide Gross\":8199130,\"US DVD Sales\":10872355,\"Production Budget\":35000000,\"Release Date\":\"Dec 05 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":101,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":null,\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":6.1,\"IMDB Votes\":20865},{\"Title\":\"Push\",\"US Gross\":31811527,\"Worldwide Gross\":44411527,\"US DVD Sales\":16118548,\"Production Budget\":38000000,\"Release Date\":\"Feb 06 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":111,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":6,\"IMDB Votes\":26623},{\"Title\":\"Pushing Tin\",\"US Gross\":8408835,\"Worldwide Gross\":8408835,\"US DVD Sales\":null,\"Production Budget\":33000000,\"Release Date\":\"Apr 23 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Magazine Article\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mike Newell\",\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":5.9,\"IMDB Votes\":16160},{\"Title\":\"The Painted Veil\",\"US Gross\":8060487,\"Worldwide Gross\":15118795,\"US DVD Sales\":7574035,\"Production Budget\":19400000,\"Release Date\":\"Dec 20 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":125,\"Distributor\":\"Warner Independent\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":7.6,\"IMDB Votes\":26331},{\"Title\":\"Pay it Forward\",\"US Gross\":33508922,\"Worldwide Gross\":33508922,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Oct 20 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":123,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mimi Leder\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.8,\"IMDB Votes\":36762},{\"Title\":\"Queen of the Damned\",\"US Gross\":30307804,\"Worldwide Gross\":30307804,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Feb 22 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":101,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":4.7,\"IMDB Votes\":20268},{\"Title\":\"The Quiet American\",\"US Gross\":12987647,\"Worldwide Gross\":12987647,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Nov 22 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Phillip Noyce\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.2,\"IMDB Votes\":14285},{\"Title\":\"All the Queen's Men\",\"US Gross\":22723,\"Worldwide Gross\":22723,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Oct 25 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Strand\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.5,\"IMDB Votes\":1591},{\"Title\":\"Quarantine\",\"US Gross\":31691811,\"Worldwide Gross\":36091811,\"US DVD Sales\":13657408,\"Production Budget\":12000000,\"Release Date\":\"Oct 10 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Erick Dowdle\",\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":6.1,\"IMDB Votes\":21939},{\"Title\":\"The Queen\",\"US Gross\":56441711,\"Worldwide Gross\":122840603,\"US DVD Sales\":29161789,\"Production Budget\":15000000,\"Release Date\":\"Sep 30 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":103,\"Distributor\":\"Miramax\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Stephen Frears\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":7.6,\"IMDB Votes\":34785},{\"Title\":\"Quest for Camelot\",\"US Gross\":22772500,\"Worldwide Gross\":38172500,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"May 15 1998\",\"MPAA Rating\":\"G\",\"Running Time min\":85,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5,\"IMDB Votes\":3053},{\"Title\":\"The Quiet\",\"US Gross\":381420,\"Worldwide Gross\":381420,\"US DVD Sales\":null,\"Production Budget\":900000,\"Release Date\":\"Aug 25 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":7689},{\"Title\":\"Quinceanera\",\"US Gross\":1692693,\"Worldwide Gross\":2522787,\"US DVD Sales\":null,\"Production Budget\":400000,\"Release Date\":\"Aug 02 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":2577},{\"Title\":\"Rabbit-Proof Fence\",\"US Gross\":6199600,\"Worldwide Gross\":16199600,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"Nov 29 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Phillip Noyce\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.6,\"IMDB Votes\":13241},{\"Title\":\"Radio\",\"US Gross\":52333738,\"Worldwide Gross\":53293628,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Oct 24 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":109,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":6.9,\"IMDB Votes\":12070},{\"Title\":\"The Rainmaker\",\"US Gross\":45916769,\"Worldwide Gross\":45916769,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Nov 21 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":135,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.9,\"IMDB Votes\":20514},{\"Title\":\"Rambo\",\"US Gross\":42754105,\"Worldwide Gross\":116754105,\"US DVD Sales\":38751777,\"Production Budget\":47500000,\"Release Date\":\"Jan 25 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sylvester Stallone\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":82600},{\"Title\":\"Random Hearts\",\"US Gross\":31054924,\"Worldwide Gross\":63200000,\"US DVD Sales\":null,\"Production Budget\":64000000,\"Release Date\":\"Oct 08 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":133,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sydney Pollack\",\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":4.8,\"IMDB Votes\":11100},{\"Title\":\"Rugrats in Paris\",\"US Gross\":76501438,\"Worldwide Gross\":103284813,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Nov 17 2000\",\"MPAA Rating\":\"G\",\"Running Time min\":79,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Rugrats Go Wild\",\"US Gross\":39402572,\"Worldwide Gross\":55443032,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jun 13 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":84,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":5,\"IMDB Votes\":1847},{\"Title\":\"Ratatouille\",\"US Gross\":206445654,\"Worldwide Gross\":620495432,\"US DVD Sales\":189134287,\"Production Budget\":150000000,\"Release Date\":\"Jun 29 2007\",\"MPAA Rating\":\"G\",\"Running Time min\":111,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Brad Bird\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8.1,\"IMDB Votes\":131929},{\"Title\":\"Ray\",\"US Gross\":75305995,\"Worldwide Gross\":125305995,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Oct 29 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":152,\"Distributor\":\"Universal\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Taylor Hackford\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"BloodRayne\",\"US Gross\":2405420,\"Worldwide Gross\":2405420,\"US DVD Sales\":10828222,\"Production Budget\":25000000,\"Release Date\":\"Jan 06 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Romar\",\"Source\":\"Based on Game\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Uwe Boll\",\"Rotten Tomatoes Rating\":4,\"IMDB Rating\":2.7,\"IMDB Votes\":20137},{\"Title\":\"Rollerball\",\"US Gross\":18990542,\"Worldwide Gross\":25852508,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Feb 08 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Remake\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"John McTiernan\",\"Rotten Tomatoes Rating\":3,\"IMDB Rating\":2.8,\"IMDB Votes\":13827},{\"Title\":\"Robin Hood\",\"US Gross\":105269730,\"Worldwide Gross\":310885538,\"US DVD Sales\":null,\"Production Budget\":210000000,\"Release Date\":\"May 14 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":140,\"Distributor\":\"Universal\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":6.9,\"IMDB Votes\":34501},{\"Title\":\"Robots\",\"US Gross\":128200012,\"Worldwide Gross\":260700012,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Mar 11 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":89,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Chris Wedge\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.4,\"IMDB Votes\":27361},{\"Title\":\"A Room for Romeo Brass\",\"US Gross\":20097,\"Worldwide Gross\":20097,\"US DVD Sales\":null,\"Production Budget\":5250000,\"Release Date\":\"Oct 27 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Shane Meadows\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":2393},{\"Title\":\"Runaway Bride\",\"US Gross\":152257509,\"Worldwide Gross\":308007919,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Jul 30 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":116,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Garry Marshall\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":5.2,\"IMDB Votes\":28497},{\"Title\":\"Racing Stripes\",\"US Gross\":49772522,\"Worldwide Gross\":93772522,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jan 14 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":110,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":5.2,\"IMDB Votes\":5086},{\"Title\":\"Rocky Balboa\",\"US Gross\":70269899,\"Worldwide Gross\":155720088,\"US DVD Sales\":34669384,\"Production Budget\":24000000,\"Release Date\":\"Dec 20 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":102,\"Distributor\":\"MGM\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sylvester Stallone\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.4,\"IMDB Votes\":63717},{\"Title\":\"The Road to El Dorado\",\"US Gross\":50802661,\"Worldwide Gross\":65700000,\"US DVD Sales\":null,\"Production Budget\":95000000,\"Release Date\":\"Mar 31 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"David Silverman\",\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":6.4,\"IMDB Votes\":8876},{\"Title\":\"Riding Giants\",\"US Gross\":2276368,\"Worldwide Gross\":3216111,\"US DVD Sales\":null,\"Production Budget\":2600000,\"Release Date\":\"Jul 09 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":7.7,\"IMDB Votes\":2193},{\"Title\":\"Red Dragon\",\"US Gross\":92955420,\"Worldwide Gross\":206455420,\"US DVD Sales\":null,\"Production Budget\":78000000,\"Release Date\":\"Oct 04 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":125,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brett Ratner\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":7.3,\"IMDB Votes\":66386},{\"Title\":\"The Reader\",\"US Gross\":34192652,\"Worldwide Gross\":106107610,\"US DVD Sales\":12359754,\"Production Budget\":33000000,\"Release Date\":\"Dec 10 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":123,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stephen Daldry\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":7.7,\"IMDB Votes\":46984},{\"Title\":\"The Reaping\",\"US Gross\":25126214,\"Worldwide Gross\":62226214,\"US DVD Sales\":19812272,\"Production Budget\":40000000,\"Release Date\":\"Apr 05 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Stephen Hopkins\",\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":5.6,\"IMDB Votes\":19881},{\"Title\":\"Rebound\",\"US Gross\":16809014,\"Worldwide Gross\":17492014,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Jul 01 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steve Carr\",\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":4.7,\"IMDB Votes\":4485},{\"Title\":\"Recess: School's Out\",\"US Gross\":36696761,\"Worldwide Gross\":44451470,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 16 2001\",\"MPAA Rating\":\"G\",\"Running Time min\":83,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":6.2,\"IMDB Votes\":2176},{\"Title\":\"Redacted\",\"US Gross\":65388,\"Worldwide Gross\":65388,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Nov 16 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":90,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6.1,\"IMDB Votes\":5759},{\"Title\":\"Red-Eye\",\"US Gross\":57891803,\"Worldwide Gross\":95891803,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Aug 19 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":85,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wes Craven\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":42489},{\"Title\":\"Reign Over Me\",\"US Gross\":19661987,\"Worldwide Gross\":20081987,\"US DVD Sales\":16021076,\"Production Budget\":20000000,\"Release Date\":\"Mar 23 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":128,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Mike Binder\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":7.7,\"IMDB Votes\":39234},{\"Title\":\"The Relic\",\"US Gross\":33956608,\"Worldwide Gross\":33956608,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jan 10 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Peter Hyams\",\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":5.4,\"IMDB Votes\":10249},{\"Title\":\"Religulous\",\"US Gross\":13011160,\"Worldwide Gross\":13136074,\"US DVD Sales\":7486708,\"Production Budget\":2500000,\"Release Date\":\"Oct 01 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":101,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":\"Larry Charles\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":7.8,\"IMDB Votes\":23094},{\"Title\":\"Remember Me\",\"US Gross\":19068240,\"Worldwide Gross\":55343435,\"US DVD Sales\":9952465,\"Production Budget\":16000000,\"Release Date\":\"Mar 12 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Summit Entertainment\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":7,\"IMDB Votes\":16319},{\"Title\":\"Remember Me, My Love\",\"US Gross\":223878,\"Worldwide Gross\":223878,\"US DVD Sales\":null,\"Production Budget\":6700000,\"Release Date\":\"Sep 03 2004\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"IDP Distribution\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Gabriele Muccino\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":16319},{\"Title\":\"Rent\",\"US Gross\":29077547,\"Worldwide Gross\":31670620,\"US DVD Sales\":31412380,\"Production Budget\":40000000,\"Release Date\":\"Nov 23 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Musical/Opera\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Chris Columbus\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6.9,\"IMDB Votes\":22605},{\"Title\":\"The Replacements\",\"US Gross\":44737059,\"Worldwide Gross\":50054511,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Aug 11 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":118,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Howard Deutch\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.2,\"IMDB Votes\":21542},{\"Title\":\"The Replacement Killers\",\"US Gross\":19035741,\"Worldwide Gross\":19035741,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Feb 06 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":86,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Antoine Fuqua\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":5.9,\"IMDB Votes\":13905},{\"Title\":\"Resident Evil: Apocalypse\",\"US Gross\":50740078,\"Worldwide Gross\":128940078,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Sep 10 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":94,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Game\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":52753},{\"Title\":\"Resident Evil: Extinction\",\"US Gross\":50648679,\"Worldwide Gross\":146162920,\"US DVD Sales\":34217549,\"Production Budget\":45000000,\"Release Date\":\"Sep 21 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":95,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Based on Game\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Russell Mulcahy\",\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":6.2,\"IMDB Votes\":49502},{\"Title\":\"Resident Evil: Afterlife 3D\",\"US Gross\":46368993,\"Worldwide Gross\":149568993,\"US DVD Sales\":null,\"Production Budget\":57500000,\"Release Date\":\"Sep 10 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Based on Game\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Paul Anderson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Resident Evil\",\"US Gross\":40119709,\"Worldwide Gross\":103787401,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Mar 15 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Game\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Paul Anderson\",\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":6.4,\"IMDB Votes\":68342},{\"Title\":\"Return to Me\",\"US Gross\":32662299,\"Worldwide Gross\":32662299,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Apr 07 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":116,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6.6,\"IMDB Votes\":9565},{\"Title\":\"Revolutionary Road\",\"US Gross\":22911480,\"Worldwide Gross\":76989671,\"US DVD Sales\":7642600,\"Production Budget\":35000000,\"Release Date\":\"Dec 26 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Sam Mendes\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":7.6,\"IMDB Votes\":45887},{\"Title\":\"Be Kind Rewind\",\"US Gross\":11175164,\"Worldwide Gross\":28505302,\"US DVD Sales\":5162454,\"Production Budget\":20000000,\"Release Date\":\"Feb 22 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Michel Gondry\",\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":6.6,\"IMDB Votes\":42470},{\"Title\":\"Reign of Fire\",\"US Gross\":43061982,\"Worldwide Gross\":82150183,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Feb 19 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":102,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":5.9,\"IMDB Votes\":38414},{\"Title\":\"Reindeer Games\",\"US Gross\":23360779,\"Worldwide Gross\":23360779,\"US DVD Sales\":null,\"Production Budget\":36000000,\"Release Date\":\"Feb 25 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":104,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Frankenheimer\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":16822},{\"Title\":\"Rachel Getting Married\",\"US Gross\":12796277,\"Worldwide Gross\":13326280,\"US DVD Sales\":6635346,\"Production Budget\":12000000,\"Release Date\":\"Oct 03 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":111,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jonathan Demme\",\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":6.9,\"IMDB Votes\":20451},{\"Title\":\"The Rugrats Movie\",\"US Gross\":100494685,\"Worldwide Gross\":140894685,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Nov 20 1998\",\"MPAA Rating\":\"G\",\"Running Time min\":79,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":5.4,\"IMDB Votes\":4857},{\"Title\":\"Riding in Cars with Boys\",\"US Gross\":29781453,\"Worldwide Gross\":29781453,\"US DVD Sales\":null,\"Production Budget\":47000000,\"Release Date\":\"Oct 19 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":131,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Penny Marshall\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.2,\"IMDB Votes\":11895},{\"Title\":\"Ride With the Devil\",\"US Gross\":630779,\"Worldwide Gross\":630779,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Nov 24 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"USA Films\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Ang Lee\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.4,\"IMDB Votes\":1873},{\"Title\":\"The Ring Two\",\"US Gross\":75941727,\"Worldwide Gross\":161941727,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Mar 18 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":111,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":5.1,\"IMDB Votes\":28408},{\"Title\":\"Rize\",\"US Gross\":3278611,\"Worldwide Gross\":4462763,\"US DVD Sales\":null,\"Production Budget\":700000,\"Release Date\":\"Jun 24 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":2052},{\"Title\":\"The Adventures of Rocky & Bullwinkle\",\"US Gross\":26000610,\"Worldwide Gross\":35129610,\"US DVD Sales\":null,\"Production Budget\":76000000,\"Release Date\":\"Jun 30 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":91,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":4.1,\"IMDB Votes\":10320},{\"Title\":\"All the Real Girls\",\"US Gross\":549666,\"Worldwide Gross\":703020,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Feb 14 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"David Gordon Green\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":7.1,\"IMDB Votes\":5632},{\"Title\":\"Real Women Have Curves\",\"US Gross\":5853194,\"Worldwide Gross\":5853194,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Oct 18 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Newmarket Films\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7,\"IMDB Votes\":4396},{\"Title\":\"Son of Rambow: A Home Movie\",\"US Gross\":1785505,\"Worldwide Gross\":10573083,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"May 02 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Romance and Cigarettes\",\"US Gross\":551002,\"Worldwide Gross\":3231251,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Sep 07 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Borotoro\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Turturro\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":5362},{\"Title\":\"Reno 911!: Miami\",\"US Gross\":20342161,\"Worldwide Gross\":20342161,\"US DVD Sales\":16323972,\"Production Budget\":10000000,\"Release Date\":\"Feb 23 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":81,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":5.8,\"IMDB Votes\":15684},{\"Title\":\"Rounders\",\"US Gross\":22921898,\"Worldwide Gross\":22921898,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Sep 11 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Dahl\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":7.3,\"IMDB Votes\":45439},{\"Title\":\"Rendition\",\"US Gross\":9736045,\"Worldwide Gross\":20437142,\"US DVD Sales\":6007008,\"Production Budget\":27500000,\"Release Date\":\"Oct 19 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gavin Hood\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.9,\"IMDB Votes\":23223},{\"Title\":\"The Rocker\",\"US Gross\":6409528,\"Worldwide Gross\":8767338,\"US DVD Sales\":7970409,\"Production Budget\":15000000,\"Release Date\":\"Aug 20 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":102,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Cattaneo\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.3,\"IMDB Votes\":11859},{\"Title\":\"Rock Star\",\"US Gross\":16991902,\"Worldwide Gross\":19317765,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Sep 07 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Stephen Herek\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":5.8,\"IMDB Votes\":15806},{\"Title\":\"The Rookie\",\"US Gross\":75600072,\"Worldwide Gross\":80693537,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Mar 29 2002\",\"MPAA Rating\":\"G\",\"Running Time min\":128,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":5.5,\"IMDB Votes\":8453},{\"Title\":\"Roll Bounce\",\"US Gross\":17380866,\"Worldwide Gross\":17500866,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Sep 23 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Malcolm D. Lee\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":5,\"IMDB Votes\":3167},{\"Title\":\"Romeo Must Die\",\"US Gross\":55973336,\"Worldwide Gross\":91036760,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Mar 22 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":114,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andrzej Bartkowiak\",\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":5.9,\"IMDB Votes\":25309},{\"Title\":\"Ronin\",\"US Gross\":41610884,\"Worldwide Gross\":41610884,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Sep 25 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Frankenheimer\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":7.2,\"IMDB Votes\":57484},{\"Title\":\"The Ballad of Jack and Rose\",\"US Gross\":712294,\"Worldwide Gross\":712294,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Mar 25 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"IFC Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":5223},{\"Title\":\"Red Planet\",\"US Gross\":17480890,\"Worldwide Gross\":33463969,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Nov 10 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":5.3,\"IMDB Votes\":20989},{\"Title\":\"Requiem for a Dream\",\"US Gross\":3635482,\"Worldwide Gross\":7390108,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Oct 06 2000\",\"MPAA Rating\":\"Open\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Darren Aronofsky\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":8.5,\"IMDB Votes\":185226},{\"Title\":\"Rat Race\",\"US Gross\":56607223,\"Worldwide Gross\":86607223,\"US DVD Sales\":null,\"Production Budget\":48000000,\"Release Date\":\"Aug 17 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":112,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jerry Zucker\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":6.4,\"IMDB Votes\":40087},{\"Title\":\"Rescue Dawn\",\"US Gross\":5490423,\"Worldwide Gross\":7037886,\"US DVD Sales\":24745520,\"Production Budget\":10000000,\"Release Date\":\"Jul 04 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":125,\"Distributor\":\"MGM\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Werner Herzog\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":37764},{\"Title\":\"The Real Cancun\",\"US Gross\":3816594,\"Worldwide Gross\":3816594,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Apr 25 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on TV\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":2.3,\"IMDB Votes\":3211},{\"Title\":\"Restless\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jan 28 2011\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":300},{\"Title\":\"Remember the Titans\",\"US Gross\":115654751,\"Worldwide Gross\":136706683,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Sep 29 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":113,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Boaz Yakin\",\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":7.5,\"IMDB Votes\":49844},{\"Title\":\"Righteous Kill\",\"US Gross\":40081410,\"Worldwide Gross\":76781410,\"US DVD Sales\":16209689,\"Production Budget\":60000000,\"Release Date\":\"Sep 12 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"Overture Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jon Avnet\",\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":6,\"IMDB Votes\":34641},{\"Title\":\"Road Trip\",\"US Gross\":68525609,\"Worldwide Gross\":119739110,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"May 19 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":94,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Todd Phillips\",\"Rotten Tomatoes Rating\":59,\"IMDB Rating\":6.4,\"IMDB Votes\":44702},{\"Title\":\"The Ruins\",\"US Gross\":17432844,\"Worldwide Gross\":22177122,\"US DVD Sales\":10610865,\"Production Budget\":25000000,\"Release Date\":\"Apr 04 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6,\"IMDB Votes\":23752},{\"Title\":\"Rules of Engagement\",\"US Gross\":61322858,\"Worldwide Gross\":71719931,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Apr 07 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":127,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"William Friedkin\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":6.2,\"IMDB Votes\":18462},{\"Title\":\"The Rundown\",\"US Gross\":47641743,\"Worldwide Gross\":80831893,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Sep 26 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":104,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Berg\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":30855},{\"Title\":\"Running Scared\",\"US Gross\":6855137,\"Worldwide Gross\":8345277,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Feb 24 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":7.5,\"IMDB Votes\":39447},{\"Title\":\"Running With Scissors\",\"US Gross\":6775659,\"Worldwide Gross\":7213629,\"US DVD Sales\":1877732,\"Production Budget\":12000000,\"Release Date\":\"Oct 20 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":116,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":6,\"IMDB Votes\":12926},{\"Title\":\"Rush Hour 2\",\"US Gross\":226164286,\"Worldwide Gross\":347425832,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Aug 03 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":90,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brett Ratner\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":6.4,\"IMDB Votes\":52049},{\"Title\":\"Rush Hour 3\",\"US Gross\":140125968,\"Worldwide Gross\":253025968,\"US DVD Sales\":40854922,\"Production Budget\":180000000,\"Release Date\":\"Aug 10 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":91,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brett Ratner\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":6,\"IMDB Votes\":39312},{\"Title\":\"Rush Hour\",\"US Gross\":141186864,\"Worldwide Gross\":245300000,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Sep 18 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brett Ratner\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.8,\"IMDB Votes\":55248},{\"Title\":\"Rushmore\",\"US Gross\":17105219,\"Worldwide Gross\":19080435,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Dec 11 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":89,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wes Anderson\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.8,\"IMDB Votes\":53192},{\"Title\":\"R.V.\",\"US Gross\":71724497,\"Worldwide Gross\":87524497,\"US DVD Sales\":32041099,\"Production Budget\":55000000,\"Release Date\":\"Apr 28 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Barry Sonnenfeld\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Ravenous\",\"US Gross\":2062406,\"Worldwide Gross\":2062406,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Mar 19 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.9,\"IMDB Votes\":15804},{\"Title\":\"Raise Your Voice\",\"US Gross\":10411980,\"Worldwide Gross\":14811980,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Oct 08 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":5.2,\"IMDB Votes\":8634},{\"Title\":\"Hotel Rwanda\",\"US Gross\":23519128,\"Worldwide Gross\":33919128,\"US DVD Sales\":null,\"Production Budget\":17500000,\"Release Date\":\"Dec 22 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":8.3,\"IMDB Votes\":92106},{\"Title\":\"Sahara\",\"US Gross\":68671925,\"Worldwide Gross\":121671925,\"US DVD Sales\":null,\"Production Budget\":145000000,\"Release Date\":\"Apr 08 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":123,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":5.9,\"IMDB Votes\":30739},{\"Title\":\"The Saint\",\"US Gross\":61363304,\"Worldwide Gross\":169400000,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Apr 04 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":116,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Phillip Noyce\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.9,\"IMDB Votes\":27413},{\"Title\":\"The Salon\",\"US Gross\":139084,\"Worldwide Gross\":139084,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"May 11 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Freestyle Releasing\",\"Source\":\"Based on Play\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":3.5,\"IMDB Votes\":308},{\"Title\":\"I Am Sam\",\"US Gross\":40270895,\"Worldwide Gross\":40270895,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Dec 28 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":132,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":7.4,\"IMDB Votes\":36448},{\"Title\":\"The Salton Sea\",\"US Gross\":676698,\"Worldwide Gross\":676698,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Apr 26 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"D.J. Caruso\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":7.1,\"IMDB Votes\":16415},{\"Title\":\"Sex and the City 2\",\"US Gross\":95347692,\"Worldwide Gross\":288347692,\"US DVD Sales\":null,\"Production Budget\":95000000,\"Release Date\":\"May 27 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":3.9,\"IMDB Votes\":13796},{\"Title\":\"Saved!\",\"US Gross\":8886160,\"Worldwide Gross\":10102511,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"May 28 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":22784},{\"Title\":\"Saving Silverman\",\"US Gross\":19351569,\"Worldwide Gross\":19351569,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Feb 09 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Dennis Dugan\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":18748},{\"Title\":\"Saw\",\"US Gross\":55185045,\"Worldwide Gross\":103096345,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Oct 29 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":7.7,\"IMDB Votes\":112785},{\"Title\":\"Saw II\",\"US Gross\":87025093,\"Worldwide Gross\":152925093,\"US DVD Sales\":44699720,\"Production Budget\":5000000,\"Release Date\":\"Oct 28 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":91,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Darren Lynn Bousman\",\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":6.8,\"IMDB Votes\":76530},{\"Title\":\"Saw III\",\"US Gross\":80238724,\"Worldwide Gross\":163876815,\"US DVD Sales\":47153811,\"Production Budget\":10000000,\"Release Date\":\"Oct 27 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":107,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Darren Lynn Bousman\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":6.3,\"IMDB Votes\":60784},{\"Title\":\"Saw IV\",\"US Gross\":63300095,\"Worldwide Gross\":134528909,\"US DVD Sales\":31998452,\"Production Budget\":10000000,\"Release Date\":\"Oct 26 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Darren Lynn Bousman\",\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":6,\"IMDB Votes\":44730},{\"Title\":\"Saw V\",\"US Gross\":56746769,\"Worldwide Gross\":113146769,\"US DVD Sales\":26535833,\"Production Budget\":10800000,\"Release Date\":\"Oct 24 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.7,\"IMDB Votes\":31219},{\"Title\":\"Saw VI\",\"US Gross\":27693292,\"Worldwide Gross\":61259697,\"US DVD Sales\":8308717,\"Production Budget\":11000000,\"Release Date\":\"Oct 23 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":91,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin Greutert\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":6.2,\"IMDB Votes\":18091},{\"Title\":\"Say It Isn't So\",\"US Gross\":5516708,\"Worldwide Gross\":5516708,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Mar 23 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":4.6,\"IMDB Votes\":7736},{\"Title\":\"Say Uncle\",\"US Gross\":5361,\"Worldwide Gross\":5361,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jun 23 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"TLA Releasing\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":431},{\"Title\":\"The Adventures of Sharkboy and Lavagirl in 3-D\",\"US Gross\":39177684,\"Worldwide Gross\":69425966,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Jun 10 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Robert Rodriguez\",\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":3.6,\"IMDB Votes\":5619},{\"Title\":\"Seabiscuit\",\"US Gross\":120277854,\"Worldwide Gross\":148336445,\"US DVD Sales\":null,\"Production Budget\":86000000,\"Release Date\":\"Jul 25 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":141,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Gary Ross\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7.4,\"IMDB Votes\":31033},{\"Title\":\"A Scanner Darkly\",\"US Gross\":5501616,\"Worldwide Gross\":7405084,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Jul 07 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Independent\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Richard Linklater\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":7.2,\"IMDB Votes\":41928},{\"Title\":\"Scary Movie 2\",\"US Gross\":71277420,\"Worldwide Gross\":141189101,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Jul 04 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":82,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Keenen Ivory Wayans\",\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":4.7,\"IMDB Votes\":43941},{\"Title\":\"Scary Movie 3\",\"US Gross\":110000082,\"Worldwide Gross\":155200000,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Oct 24 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":84,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Zucker\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":5.4,\"IMDB Votes\":42829},{\"Title\":\"Scary Movie 4\",\"US Gross\":90710620,\"Worldwide Gross\":178710620,\"US DVD Sales\":22401247,\"Production Budget\":40000000,\"Release Date\":\"Apr 14 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Weinstein/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Zucker\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":5,\"IMDB Votes\":39542},{\"Title\":\"Scooby-Doo 2: Monsters Unleashed\",\"US Gross\":84185387,\"Worldwide Gross\":181185387,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Mar 26 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":93,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Raja Gosnell\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.8,\"IMDB Votes\":10749},{\"Title\":\"Scooby-Doo\",\"US Gross\":153294164,\"Worldwide Gross\":276294164,\"US DVD Sales\":null,\"Production Budget\":84000000,\"Release Date\":\"Jun 14 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":86,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Raja Gosnell\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":4.7,\"IMDB Votes\":26018},{\"Title\":\"About Schmidt\",\"US Gross\":65005217,\"Worldwide Gross\":105823486,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Dec 13 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":125,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alexander Payne\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":7.3,\"IMDB Votes\":53760},{\"Title\":\"The School of Rock\",\"US Gross\":81261177,\"Worldwide Gross\":131161177,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 03 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":108,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Linklater\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":63188},{\"Title\":\"School for Scoundrels\",\"US Gross\":17807569,\"Worldwide Gross\":17807569,\"US DVD Sales\":13739501,\"Production Budget\":20000000,\"Release Date\":\"Sep 29 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"MGM\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Todd Phillips\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":6,\"IMDB Votes\":15536},{\"Title\":\"Scoop\",\"US Gross\":10525717,\"Worldwide Gross\":39125717,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Jul 28 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Focus/Rogue Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.8,\"IMDB Votes\":30336},{\"Title\":\"The Score\",\"US Gross\":71069884,\"Worldwide Gross\":113542091,\"US DVD Sales\":null,\"Production Budget\":68000000,\"Release Date\":\"Jul 13 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":124,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Frank Oz\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":6.8,\"IMDB Votes\":42616},{\"Title\":\"Scream\",\"US Gross\":103046663,\"Worldwide Gross\":173046663,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 20 1996\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wes Craven\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":2.9,\"IMDB Votes\":217},{\"Title\":\"Scream 2\",\"US Gross\":101363301,\"Worldwide Gross\":101363301,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Dec 12 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wes Craven\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":5.9,\"IMDB Votes\":48196},{\"Title\":\"Scream 3\",\"US Gross\":89138076,\"Worldwide Gross\":161838076,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Feb 04 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":118,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wes Craven\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.3,\"IMDB Votes\":38230},{\"Title\":\"The Scorpion King\",\"US Gross\":90580000,\"Worldwide Gross\":164529000,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Apr 19 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":91,\"Distributor\":\"Universal\",\"Source\":\"Spin-Off\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Chuck Russell\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":5.3,\"IMDB Votes\":30359},{\"Title\":\"George A. Romero's Survival of the Dead\",\"US Gross\":101740,\"Worldwide Gross\":101740,\"US DVD Sales\":943385,\"Production Budget\":4200000,\"Release Date\":\"May 28 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":null,\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Stardust\",\"US Gross\":38634938,\"Worldwide Gross\":135556675,\"US DVD Sales\":25129402,\"Production Budget\":70000000,\"Release Date\":\"Aug 10 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":128,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Matthew Vaughn\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.9,\"IMDB Votes\":87883},{\"Title\":\"Mar adentro\",\"US Gross\":2086345,\"Worldwide Gross\":39686345,\"US DVD Sales\":null,\"Production Budget\":13300000,\"Release Date\":\"Dec 17 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":466},{\"Title\":\"Selena\",\"US Gross\":35450113,\"Worldwide Gross\":35450113,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Mar 21 1997\",\"MPAA Rating\":\"PG\",\"Running Time min\":127,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.3,\"IMDB Votes\":7996},{\"Title\":\"The Sentinel\",\"US Gross\":36280697,\"Worldwide Gross\":77280697,\"US DVD Sales\":17497571,\"Production Budget\":60000000,\"Release Date\":\"Apr 21 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":6.1,\"IMDB Votes\":23567},{\"Title\":\"September Dawn\",\"US Gross\":901857,\"Worldwide Gross\":901857,\"US DVD Sales\":null,\"Production Budget\":10100000,\"Release Date\":\"Aug 24 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"Black Diamond Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.5,\"IMDB Votes\":1823},{\"Title\":\"You Got Served\",\"US Gross\":40066497,\"Worldwide Gross\":48066497,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Jan 30 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":2.6,\"IMDB Votes\":17830},{\"Title\":\"Serving Sara\",\"US Gross\":16930185,\"Worldwide Gross\":20146150,\"US DVD Sales\":null,\"Production Budget\":29000000,\"Release Date\":\"Aug 23 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":5,\"IMDB Rating\":5,\"IMDB Votes\":7973},{\"Title\":\"Session 9\",\"US Gross\":378176,\"Worldwide Gross\":1619602,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Aug 10 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Brad Anderson\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.8,\"IMDB Votes\":14685},{\"Title\":\"Seven Years in Tibet\",\"US Gross\":37945884,\"Worldwide Gross\":131445884,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Oct 10 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":139,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Jean-Jacques Annaud\",\"Rotten Tomatoes Rating\":59,\"IMDB Rating\":6.7,\"IMDB Votes\":29020},{\"Title\":\"Sex and the City\",\"US Gross\":152647258,\"Worldwide Gross\":416047258,\"US DVD Sales\":85061666,\"Production Budget\":57500000,\"Release Date\":\"May 30 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":5.4,\"IMDB Votes\":46837},{\"Title\":\"Swordfish\",\"US Gross\":69772969,\"Worldwide Gross\":147080413,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jun 08 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":99,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Dominic Sena\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":6.3,\"IMDB Votes\":57952},{\"Title\":\"Something's Gotta Give\",\"US Gross\":124685242,\"Worldwide Gross\":266685242,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Dec 12 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":128,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Nancy Meyers\",\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":6.8,\"IMDB Votes\":36303},{\"Title\":\"Sugar Town\",\"US Gross\":178095,\"Worldwide Gross\":178095,\"US DVD Sales\":null,\"Production Budget\":250000,\"Release Date\":\"Sep 17 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"October Films\",\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":5.6,\"IMDB Votes\":566},{\"Title\":\"Shade\",\"US Gross\":22183,\"Worldwide Gross\":22183,\"US DVD Sales\":null,\"Production Budget\":6800000,\"Release Date\":\"Apr 09 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":950},{\"Title\":\"Shadow of the Vampire\",\"US Gross\":8279017,\"Worldwide Gross\":8279017,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Dec 29 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"E. Elias Merhige\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":6.8,\"IMDB Votes\":18221},{\"Title\":\"Shaft\",\"US Gross\":70327868,\"Worldwide Gross\":107190108,\"US DVD Sales\":null,\"Production Budget\":53012938,\"Release Date\":\"Jun 16 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":99,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Singleton\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":5.9,\"IMDB Votes\":32881},{\"Title\":\"The Shaggy Dog\",\"US Gross\":61123569,\"Worldwide Gross\":87123569,\"US DVD Sales\":28587103,\"Production Budget\":60000000,\"Release Date\":\"Mar 10 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Brian Robbins\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":4.1,\"IMDB Votes\":6116},{\"Title\":\"Scary Movie\",\"US Gross\":157019771,\"Worldwide Gross\":277200000,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Jul 07 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":88,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Keenen Ivory Wayans\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":6,\"IMDB Votes\":68541},{\"Title\":\"Shaun of the Dead\",\"US Gross\":13542874,\"Worldwide Gross\":29629128,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Sep 24 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus/Rogue Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Edgar Wright\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8,\"IMDB Votes\":134693},{\"Title\":\"Shortbus\",\"US Gross\":1985292,\"Worldwide Gross\":1985292,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Oct 04 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":6.7,\"IMDB Votes\":14276},{\"Title\":\"She's All That\",\"US Gross\":63465522,\"Worldwide Gross\":63465522,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jan 29 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":91,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.4,\"IMDB Votes\":28498},{\"Title\":\"She's the Man\",\"US Gross\":33889159,\"Worldwide Gross\":56889159,\"US DVD Sales\":33340509,\"Production Budget\":25000000,\"Release Date\":\"Mar 17 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Play\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Andy Fickman\",\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6.4,\"IMDB Votes\":26513},{\"Title\":\"Sherrybaby\",\"US Gross\":199176,\"Worldwide Gross\":622806,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Sep 08 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"IFC Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":6.7,\"IMDB Votes\":6372},{\"Title\":\"Shallow Hal\",\"US Gross\":70836296,\"Worldwide Gross\":70836296,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Nov 09 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":113,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bobby Farrelly\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6,\"IMDB Votes\":35878},{\"Title\":\"Silent Hill\",\"US Gross\":46982632,\"Worldwide Gross\":99982632,\"US DVD Sales\":22104517,\"Production Budget\":50000000,\"Release Date\":\"Apr 21 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Game\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Christophe Gans\",\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":6.5,\"IMDB Votes\":65485},{\"Title\":\"Shutter Island\",\"US Gross\":128012934,\"Worldwide Gross\":294512934,\"US DVD Sales\":22083616,\"Production Budget\":80000000,\"Release Date\":\"Feb 19 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Martin Scorsese\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":8,\"IMDB Votes\":105706},{\"Title\":\"Shakespeare in Love\",\"US Gross\":100317794,\"Worldwide Gross\":279500000,\"US DVD Sales\":null,\"Production Budget\":26000000,\"Release Date\":\"Dec 11 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":122,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"John Madden\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":7.4,\"IMDB Votes\":77911},{\"Title\":\"In the Shadow of the Moon\",\"US Gross\":1134358,\"Worldwide Gross\":1134358,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Sep 07 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":100,\"Distributor\":\"ThinkFilm\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":8,\"IMDB Votes\":2974},{\"Title\":\"Sherlock Holmes\",\"US Gross\":209028679,\"Worldwide Gross\":518249844,\"US DVD Sales\":42276167,\"Production Budget\":80000000,\"Release Date\":\"Dec 25 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Guy Ritchie\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":7.5,\"IMDB Votes\":91555},{\"Title\":\"She's Out of My League\",\"US Gross\":31628317,\"Worldwide Gross\":49219151,\"US DVD Sales\":7889235,\"Production Budget\":20000000,\"Release Date\":\"Mar 12 2010\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6.7,\"IMDB Votes\":17449},{\"Title\":\"Shooter\",\"US Gross\":47003582,\"Worldwide Gross\":95203582,\"US DVD Sales\":57333255,\"Production Budget\":60000000,\"Release Date\":\"Mar 23 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":125,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Antoine Fuqua\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":7.2,\"IMDB Votes\":149},{\"Title\":\"Shrek\",\"US Gross\":267655011,\"Worldwide Gross\":484399218,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"May 18 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Andrew Adamson\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":8,\"IMDB Votes\":163855},{\"Title\":\"Shrek 2\",\"US Gross\":441226247,\"Worldwide Gross\":919838758,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"May 19 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":92,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Andrew Adamson\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.5,\"IMDB Votes\":95658},{\"Title\":\"Shrek the Third\",\"US Gross\":322719944,\"Worldwide Gross\":798958162,\"US DVD Sales\":176400340,\"Production Budget\":160000000,\"Release Date\":\"May 18 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":92,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":6.1,\"IMDB Votes\":59778},{\"Title\":\"Shrek Forever After\",\"US Gross\":238395990,\"Worldwide Gross\":729395990,\"US DVD Sales\":null,\"Production Budget\":165000000,\"Release Date\":\"May 21 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":93,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":12193},{\"Title\":\"Shark Tale\",\"US Gross\":160861908,\"Worldwide Gross\":367275019,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Oct 01 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Rob Letterman\",\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":5.9,\"IMDB Votes\":40019},{\"Title\":\"Shattered Glass\",\"US Gross\":2207975,\"Worldwide Gross\":2932719,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Oct 31 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7.4,\"IMDB Votes\":14575},{\"Title\":\"Stealing Harvard\",\"US Gross\":13973532,\"Worldwide Gross\":13973532,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Sep 13 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":4.7,\"IMDB Votes\":6899},{\"Title\":\"Showtime\",\"US Gross\":37948765,\"Worldwide Gross\":78948765,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Mar 15 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tom Dey\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":5.3,\"IMDB Votes\":22128},{\"Title\":\"Sicko\",\"US Gross\":24538513,\"Worldwide Gross\":33538513,\"US DVD Sales\":17438209,\"Production Budget\":9000000,\"Release Date\":\"Jun 22 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":\"Michael Moore\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":8.2,\"IMDB Votes\":40886},{\"Title\":\"The Siege\",\"US Gross\":40934175,\"Worldwide Gross\":116625798,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Nov 06 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":116,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Edward Zwick\",\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Signs\",\"US Gross\":227965690,\"Worldwide Gross\":408265690,\"US DVD Sales\":null,\"Production Budget\":70702619,\"Release Date\":\"Aug 02 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"M. Night Shyamalan\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":6.9,\"IMDB Votes\":111561},{\"Title\":\"Simon Birch\",\"US Gross\":18253415,\"Worldwide Gross\":18253415,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Sep 11 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":110,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mark Steven Johnson\",\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6.7,\"IMDB Votes\":11371},{\"Title\":\"A Simple Wish\",\"US Gross\":8165213,\"Worldwide Gross\":8165213,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Jul 11 1997\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Michael Ritchie\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":4.9,\"IMDB Votes\":1545},{\"Title\":\"The Simpsons Movie\",\"US Gross\":183135014,\"Worldwide Gross\":527071022,\"US DVD Sales\":96359085,\"Production Budget\":72500000,\"Release Date\":\"Jul 27 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":86,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Silverman\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.6,\"IMDB Votes\":117656},{\"Title\":\"Sinbad: Legend of the Seven Seas\",\"US Gross\":26483452,\"Worldwide Gross\":80767884,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jul 02 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":86,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Tim Johnson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":7895},{\"Title\":\"Sin City\",\"US Gross\":74103820,\"Worldwide Gross\":158753820,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Apr 01 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":126,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Robert Rodriguez\",\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":8.3,\"IMDB Votes\":255814},{\"Title\":\"The Singing Detective\",\"US Gross\":336456,\"Worldwide Gross\":524747,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Oct 24 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":5.6,\"IMDB Votes\":4441},{\"Title\":\"The Sixth Sense\",\"US Gross\":293506292,\"Worldwide Gross\":672806292,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Aug 06 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":107,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"M. Night Shyamalan\",\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":8.2,\"IMDB Votes\":238745},{\"Title\":\"Super Size Me\",\"US Gross\":11529368,\"Worldwide Gross\":29529368,\"US DVD Sales\":null,\"Production Budget\":65000,\"Release Date\":\"May 07 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"IDP Distribution\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":\"Morgan Spurlock\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":33805},{\"Title\":\"The Skeleton Key\",\"US Gross\":47907715,\"Worldwide Gross\":92907715,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Aug 12 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Iain Softley\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":6.5,\"IMDB Votes\":29810},{\"Title\":\"The Skulls\",\"US Gross\":35007180,\"Worldwide Gross\":35007180,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Mar 31 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":107,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rob Cohen\",\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":5.3,\"IMDB Votes\":14903},{\"Title\":\"Sky High\",\"US Gross\":63939454,\"Worldwide Gross\":81627454,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jul 29 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":102,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":null,\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":6.6,\"IMDB Votes\":20923},{\"Title\":\"Slackers\",\"US Gross\":4814244,\"Worldwide Gross\":4814244,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Feb 01 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":4.9,\"IMDB Votes\":7934},{\"Title\":\"Ready to Rumble\",\"US Gross\":12372410,\"Worldwide Gross\":12372410,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Apr 07 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brian Robbins\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Soldier\",\"US Gross\":14623082,\"Worldwide Gross\":14623082,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Oct 23 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Paul Anderson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Sleepy Hollow\",\"US Gross\":101068340,\"Worldwide Gross\":207068340,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Nov 19 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":105,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Tim Burton\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":7.5,\"IMDB Votes\":107511},{\"Title\":\"Lucky Number Slevin\",\"US Gross\":22495466,\"Worldwide Gross\":55495466,\"US DVD Sales\":26858545,\"Production Budget\":27000000,\"Release Date\":\"Apr 07 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul McGuigan\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":7.8,\"IMDB Votes\":91145},{\"Title\":\"The Secret Life of Bees\",\"US Gross\":37766350,\"Worldwide Gross\":39612166,\"US DVD Sales\":17077991,\"Production Budget\":11000000,\"Release Date\":\"Oct 17 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":7,\"IMDB Votes\":7077},{\"Title\":\"Hannibal\",\"US Gross\":165092266,\"Worldwide Gross\":350100280,\"US DVD Sales\":null,\"Production Budget\":87000000,\"Release Date\":\"Feb 09 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":131,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ridley Scott\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.4,\"IMDB Votes\":74862},{\"Title\":\"Southland Tales\",\"US Gross\":275380,\"Worldwide Gross\":364607,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Nov 14 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Samuel Goldwyn Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Richard Kelly\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":20172},{\"Title\":\"Slow Burn\",\"US Gross\":1237615,\"Worldwide Gross\":1237615,\"US DVD Sales\":893953,\"Production Budget\":15500000,\"Release Date\":\"Apr 13 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":93,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":5.9,\"IMDB Votes\":2318},{\"Title\":\"Sleepover\",\"US Gross\":9408183,\"Worldwide Gross\":9408183,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jul 09 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":4.6,\"IMDB Votes\":4774},{\"Title\":\"The Bridge of San Luis Rey\",\"US Gross\":49981,\"Worldwide Gross\":1696765,\"US DVD Sales\":null,\"Production Budget\":24000000,\"Release Date\":\"Jun 10 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":4,\"IMDB Rating\":5,\"IMDB Votes\":1913},{\"Title\":\"Slither\",\"US Gross\":7802450,\"Worldwide Gross\":12834936,\"US DVD Sales\":7475776,\"Production Budget\":15250000,\"Release Date\":\"Mar 31 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":6.6,\"IMDB Votes\":26101},{\"Title\":\"Slumdog Millionaire\",\"US Gross\":141319928,\"Worldwide Gross\":365257315,\"US DVD Sales\":31952272,\"Production Budget\":14000000,\"Release Date\":\"Nov 12 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":116,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Danny Boyle\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":8.3,\"IMDB Votes\":176325},{\"Title\":\"Slums of Beverly Hills\",\"US Gross\":5502773,\"Worldwide Gross\":5502773,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Aug 14 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Dramatization\",\"Director\":\"Tamara Jenkins\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":6.4,\"IMDB Votes\":5821},{\"Title\":\"Small Soldiers\",\"US Gross\":55143823,\"Worldwide Gross\":71743823,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jul 10 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Joe Dante\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":5.9,\"IMDB Votes\":20571},{\"Title\":\"Mr. And Mrs. Smith\",\"US Gross\":186336279,\"Worldwide Gross\":478336279,\"US DVD Sales\":null,\"Production Budget\":110000000,\"Release Date\":\"Jun 10 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":112,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Doug Liman\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.7,\"IMDB Votes\":189},{\"Title\":\"Smokin' Aces\",\"US Gross\":35662731,\"Worldwide Gross\":56047261,\"US DVD Sales\":35817034,\"Production Budget\":17000000,\"Release Date\":\"Jan 26 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Joe Carnahan\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":6.6,\"IMDB Votes\":57313},{\"Title\":\"Someone Like You\",\"US Gross\":27338033,\"Worldwide Gross\":38684906,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Mar 30 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tony Goldwyn\",\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":5.8,\"IMDB Votes\":10073},{\"Title\":\"Death to Smoochy\",\"US Gross\":8355815,\"Worldwide Gross\":8374062,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Mar 29 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Danny De Vito\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":6.2,\"IMDB Votes\":22379},{\"Title\":\"Simply Irresistible\",\"US Gross\":4398989,\"Worldwide Gross\":4398989,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Feb 05 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":4.8,\"IMDB Votes\":6927},{\"Title\":\"Summer Catch\",\"US Gross\":19693891,\"Worldwide Gross\":19693891,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Aug 24 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":4.6,\"IMDB Votes\":6848},{\"Title\":\"There's Something About Mary\",\"US Gross\":176484651,\"Worldwide Gross\":360099999,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Jul 15 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":119,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bobby Farrelly\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.2,\"IMDB Votes\":96443},{\"Title\":\"Snake Eyes\",\"US Gross\":55591409,\"Worldwide Gross\":103891409,\"US DVD Sales\":null,\"Production Budget\":73000000,\"Release Date\":\"Aug 07 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":99,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brian De Palma\",\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":5.8,\"IMDB Votes\":29321},{\"Title\":\"Snakes on a Plane\",\"US Gross\":34020814,\"Worldwide Gross\":62020814,\"US DVD Sales\":23704179,\"Production Budget\":33000000,\"Release Date\":\"Aug 18 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":105,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David R. Ellis\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":6,\"IMDB Votes\":65841},{\"Title\":\"Lemony Snicket's A Series of Unfortunate Events\",\"US Gross\":118627117,\"Worldwide Gross\":201627117,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Dec 17 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":108,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Brad Silberling\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.9,\"IMDB Votes\":51614},{\"Title\":\"House of Sand and Fog\",\"US Gross\":13005485,\"Worldwide Gross\":16157923,\"US DVD Sales\":null,\"Production Budget\":16500000,\"Release Date\":\"Dec 19 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":7.8,\"IMDB Votes\":29777},{\"Title\":\"A Sound of Thunder\",\"US Gross\":1900451,\"Worldwide Gross\":6300451,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Sep 02 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Peter Hyams\",\"Rotten Tomatoes Rating\":6,\"IMDB Rating\":4.1,\"IMDB Votes\":9915},{\"Title\":\"See No Evil\",\"US Gross\":15032800,\"Worldwide Gross\":15387513,\"US DVD Sales\":45391536,\"Production Budget\":8000000,\"Release Date\":\"May 19 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":5,\"IMDB Votes\":10035},{\"Title\":\"The Shipping News\",\"US Gross\":11405825,\"Worldwide Gross\":24405825,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Dec 25 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Lasse Hallstrom\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.7,\"IMDB Votes\":17338},{\"Title\":\"Shanghai Knights\",\"US Gross\":60470220,\"Worldwide Gross\":60470220,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Feb 07 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":114,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"David Dobkin\",\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":6.2,\"IMDB Votes\":24893},{\"Title\":\"Shanghai Noon\",\"US Gross\":56932305,\"Worldwide Gross\":71189835,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"May 26 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Tom Dey\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":6.6,\"IMDB Votes\":32446},{\"Title\":\"Snow Dogs\",\"US Gross\":81150692,\"Worldwide Gross\":115010692,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Jan 18 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":99,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Brian Levant\",\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":4.9,\"IMDB Votes\":7561},{\"Title\":\"Snow Falling on Cedars\",\"US Gross\":14378353,\"Worldwide Gross\":14378353,\"US DVD Sales\":null,\"Production Budget\":36000000,\"Release Date\":\"Dec 24 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.7,\"IMDB Votes\":8444},{\"Title\":\"Sunshine\",\"US Gross\":3688560,\"Worldwide Gross\":32030610,\"US DVD Sales\":6342481,\"Production Budget\":40000000,\"Release Date\":\"Jul 20 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Danny Boyle\",\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":7.3,\"IMDB Votes\":74535},{\"Title\":\"Snatch\",\"US Gross\":30093107,\"Worldwide Gross\":83593107,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Dec 08 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":103,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Guy Ritchie\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.2,\"IMDB Votes\":173919},{\"Title\":\"Snow Day\",\"US Gross\":60008303,\"Worldwide Gross\":62452927,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Feb 11 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":89,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":4.4,\"IMDB Votes\":4611},{\"Title\":\"Sorority Boys\",\"US Gross\":10198766,\"Worldwide Gross\":12516222,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Mar 22 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.1,\"IMDB Votes\":7392},{\"Title\":\"Solaris\",\"US Gross\":14970038,\"Worldwide Gross\":14970038,\"US DVD Sales\":null,\"Production Budget\":47000000,\"Release Date\":\"Nov 27 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Steven Soderbergh\",\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":6.2,\"IMDB Votes\":33151},{\"Title\":\"Solitary Man\",\"US Gross\":4354546,\"Worldwide Gross\":4354546,\"US DVD Sales\":null,\"Production Budget\":12500000,\"Release Date\":\"May 21 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Anchor Bay Entertainment\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":1936},{\"Title\":\"The Soloist\",\"US Gross\":31720158,\"Worldwide Gross\":38286958,\"US DVD Sales\":10310814,\"Production Budget\":60000000,\"Release Date\":\"Apr 24 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":117,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Joe Wright\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":14257},{\"Title\":\"Songcatcher\",\"US Gross\":3050934,\"Worldwide Gross\":3050934,\"US DVD Sales\":null,\"Production Budget\":1800000,\"Release Date\":\"Jun 15 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":1997},{\"Title\":\"Sonny\",\"US Gross\":17639,\"Worldwide Gross\":17639,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Dec 27 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":5.7,\"IMDB Votes\":1941},{\"Title\":\"Standard Operating Procedure\",\"US Gross\":228830,\"Worldwide Gross\":228830,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Apr 25 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":7.5,\"IMDB Votes\":1640},{\"Title\":\"The Sorcerer's Apprentice\",\"US Gross\":62492818,\"Worldwide Gross\":200092818,\"US DVD Sales\":null,\"Production Budget\":160000000,\"Release Date\":\"Jul 14 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":110,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Short Film\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":6.4,\"IMDB Votes\":9108},{\"Title\":\"Soul Food\",\"US Gross\":43492389,\"Worldwide Gross\":43492389,\"US DVD Sales\":null,\"Production Budget\":7500000,\"Release Date\":\"Sep 26 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":114,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":6.4,\"IMDB Votes\":2636},{\"Title\":\"Soul Plane\",\"US Gross\":13922211,\"Worldwide Gross\":14553807,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"May 28 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":3.7,\"IMDB Votes\":9143},{\"Title\":\"South Park: Bigger, Longer & Uncut\",\"US Gross\":52037603,\"Worldwide Gross\":52037603,\"US DVD Sales\":null,\"Production Budget\":21000000,\"Release Date\":\"Jun 30 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":80,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Trey Parker\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Space Jam\",\"US Gross\":90463534,\"Worldwide Gross\":250200000,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Nov 15 1996\",\"MPAA Rating\":\"PG\",\"Running Time min\":87,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Joe Pytka\",\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":5.6,\"IMDB Votes\":29293},{\"Title\":\"Spanglish\",\"US Gross\":42044321,\"Worldwide Gross\":54344321,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Dec 17 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":103,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James L. Brooks\",\"Rotten Tomatoes Rating\":52,\"IMDB Rating\":6.7,\"IMDB Votes\":30660},{\"Title\":\"Spawn\",\"US Gross\":54979992,\"Worldwide Gross\":87949859,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jul 31 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"New Line\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":4.8,\"IMDB Votes\":21366},{\"Title\":\"Superbad\",\"US Gross\":121463226,\"Worldwide Gross\":169863226,\"US DVD Sales\":134555373,\"Production Budget\":17500000,\"Release Date\":\"Aug 17 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":112,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Greg Mottola\",\"Rotten Tomatoes Rating\":87,\"IMDB Rating\":7.8,\"IMDB Votes\":134212},{\"Title\":\"SpongeBob SquarePants\",\"US Gross\":85416609,\"Worldwide Gross\":140416609,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Nov 19 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Space Chimps\",\"US Gross\":30105968,\"Worldwide Gross\":59517784,\"US DVD Sales\":13349286,\"Production Budget\":37000000,\"Release Date\":\"Jul 18 2008\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":4.5,\"IMDB Votes\":4324},{\"Title\":\"Space Cowboys\",\"US Gross\":90454043,\"Worldwide Gross\":128874043,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Aug 04 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":130,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Clint Eastwood\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":6.3,\"IMDB Votes\":29983},{\"Title\":\"Spider\",\"US Gross\":1641788,\"Worldwide Gross\":1641788,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 28 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Cronenberg\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":560},{\"Title\":\"Speed Racer\",\"US Gross\":43945766,\"Worldwide Gross\":93394462,\"US DVD Sales\":14217924,\"Production Budget\":120000000,\"Release Date\":\"May 09 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Andy Wachowski\",\"Rotten Tomatoes Rating\":38,\"IMDB Rating\":6.3,\"IMDB Votes\":32672},{\"Title\":\"The Spiderwick Chronicles\",\"US Gross\":71195053,\"Worldwide Gross\":162839667,\"US DVD Sales\":27525903,\"Production Budget\":92500000,\"Release Date\":\"Feb 14 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Mark Waters\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":6.8,\"IMDB Votes\":18715},{\"Title\":\"Speedway Junky\",\"US Gross\":17127,\"Worldwide Gross\":17127,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Aug 31 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.7,\"IMDB Votes\":1205},{\"Title\":\"Speed II: Cruise Control\",\"US Gross\":48097081,\"Worldwide Gross\":150468000,\"US DVD Sales\":null,\"Production Budget\":110000000,\"Release Date\":\"Jun 13 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":125,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jan De Bont\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.4,\"IMDB Votes\":30896},{\"Title\":\"Sphere\",\"US Gross\":37068294,\"Worldwide Gross\":50168294,\"US DVD Sales\":null,\"Production Budget\":73000000,\"Release Date\":\"Feb 13 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":132,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Barry Levinson\",\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":5.6,\"IMDB Votes\":31461},{\"Title\":\"Spiceworld\",\"US Gross\":29342592,\"Worldwide Gross\":56042592,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jan 23 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":92,\"Distributor\":\"Sony Pictures\",\"Source\":\"Musical Group Movie\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":2.9,\"IMDB Votes\":18010},{\"Title\":\"Spider-Man 2\",\"US Gross\":373524485,\"Worldwide Gross\":783705001,\"US DVD Sales\":4196484,\"Production Budget\":200000000,\"Release Date\":\"Jun 30 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":127,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":\"Sam Raimi\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":7.7,\"IMDB Votes\":141940},{\"Title\":\"Spider-Man 3\",\"US Gross\":336530303,\"Worldwide Gross\":890871626,\"US DVD Sales\":124058348,\"Production Budget\":258000000,\"Release Date\":\"May 04 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":139,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":\"Sam Raimi\",\"Rotten Tomatoes Rating\":63,\"IMDB Rating\":6.4,\"IMDB Votes\":141513},{\"Title\":\"Spider-Man\",\"US Gross\":403706375,\"Worldwide Gross\":821708551,\"US DVD Sales\":null,\"Production Budget\":139000000,\"Release Date\":\"May 03 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":121,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":\"Sam Raimi\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.4,\"IMDB Votes\":167524},{\"Title\":\"Scott Pilgrim vs. The World\",\"US Gross\":31167395,\"Worldwide Gross\":43149143,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Aug 13 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":112,\"Distributor\":\"Universal\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Edgar Wright\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":8.1,\"IMDB Votes\":17461},{\"Title\":\"See Spot Run\",\"US Gross\":33357476,\"Worldwide Gross\":43057552,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Mar 02 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":97,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":4.9,\"IMDB Votes\":3673},{\"Title\":\"Superman Returns\",\"US Gross\":200120000,\"Worldwide Gross\":391120000,\"US DVD Sales\":81580739,\"Production Budget\":232000000,\"Release Date\":\"Jun 28 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":157,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":\"Bryan Singer\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":6.6,\"IMDB Votes\":102751},{\"Title\":\"Supernova\",\"US Gross\":14218868,\"Worldwide Gross\":14218868,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jan 14 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Francis Ford Coppola\",\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":6.8,\"IMDB Votes\":127},{\"Title\":\"Spirited Away\",\"US Gross\":10049886,\"Worldwide Gross\":274949886,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Sep 20 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Hayao Miyazaki\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Spun\",\"US Gross\":410241,\"Worldwide Gross\":1022649,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"Mar 14 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":16011},{\"Title\":\"Spy Game\",\"US Gross\":62362560,\"Worldwide Gross\":143049560,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Nov 21 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":126,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tony Scott\",\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":6.9,\"IMDB Votes\":44850},{\"Title\":\"Spy Kids 2: The Island of Lost Dreams\",\"US Gross\":85846296,\"Worldwide Gross\":119721296,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Aug 07 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":100,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Robert Rodriguez\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Spy Kids 3-D: Game Over\",\"US Gross\":111760631,\"Worldwide Gross\":167851995,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jul 25 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":84,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Robert Rodriguez\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.1,\"IMDB Votes\":12352},{\"Title\":\"Spy Kids\",\"US Gross\":112692062,\"Worldwide Gross\":197692062,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Mar 30 2001\",\"MPAA Rating\":\"PG\",\"Running Time min\":88,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Robert Rodriguez\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":5.7,\"IMDB Votes\":23479},{\"Title\":\"The Square\",\"US Gross\":406216,\"Worldwide Gross\":406216,\"US DVD Sales\":null,\"Production Budget\":1900000,\"Release Date\":\"Apr 09 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Apparition\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":1303},{\"Title\":\"The Squid and the Whale\",\"US Gross\":7372734,\"Worldwide Gross\":11098131,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Oct 05 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"IDP/Goldwyn/Roadside\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Noah Baumbach\",\"Rotten Tomatoes Rating\":93,\"IMDB Rating\":7.6,\"IMDB Votes\":23521},{\"Title\":\"Serendipity\",\"US Gross\":50255310,\"Worldwide Gross\":75294136,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Oct 05 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":91,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Chelsom\",\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":6.6,\"IMDB Votes\":32014},{\"Title\":\"Saint Ralph\",\"US Gross\":795126,\"Worldwide Gross\":795126,\"US DVD Sales\":null,\"Production Budget\":5200000,\"Release Date\":\"Aug 05 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Samuel Goldwyn Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.5,\"IMDB Votes\":3492},{\"Title\":\"Shaolin Soccer\",\"US Gross\":488872,\"Worldwide Gross\":42776032,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Apr 02 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":\"Stephen Chow\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Superstar\",\"US Gross\":30628981,\"Worldwide Gross\":30628981,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Oct 08 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":82,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":6,\"IMDB Votes\":103},{\"Title\":\"Soul Survivors\",\"US Gross\":3100650,\"Worldwide Gross\":4288246,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Sep 07 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":4,\"IMDB Rating\":3.6,\"IMDB Votes\":5116},{\"Title\":\"Spirit: Stallion of the Cimarron\",\"US Gross\":73215310,\"Worldwide Gross\":106515310,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"May 24 2002\",\"MPAA Rating\":\"G\",\"Running Time min\":84,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Kelly Asbury\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":8622},{\"Title\":\"Star Wars Ep. II: Attack of the Clones\",\"US Gross\":310676740,\"Worldwide Gross\":656695615,\"US DVD Sales\":null,\"Production Budget\":115000000,\"Release Date\":\"May 16 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":142,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"George Lucas\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Star Wars Ep. III: Revenge of the Sith\",\"US Gross\":380270577,\"Worldwide Gross\":848998877,\"US DVD Sales\":null,\"Production Budget\":115000000,\"Release Date\":\"May 19 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":140,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"George Lucas\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Starship Troopers\",\"US Gross\":54768952,\"Worldwide Gross\":121100000,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Nov 07 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":129,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Paul Verhoeven\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":7.1,\"IMDB Votes\":83516},{\"Title\":\"The Station Agent\",\"US Gross\":5801558,\"Worldwide Gross\":7773824,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Oct 03 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":7.8,\"IMDB Votes\":22274},{\"Title\":\"Stay Alive\",\"US Gross\":23086480,\"Worldwide Gross\":23187506,\"US DVD Sales\":13333591,\"Production Budget\":20000000,\"Release Date\":\"Mar 24 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":91,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":4.5,\"IMDB Votes\":13658},{\"Title\":\"Small Time Crooks\",\"US Gross\":17266359,\"Worldwide Gross\":29934477,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"May 19 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Woody Allen\",\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":6.5,\"IMDB Votes\":15636},{\"Title\":\"Steel\",\"US Gross\":1686429,\"Worldwide Gross\":1686429,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Aug 15 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":2.7,\"IMDB Votes\":4409},{\"Title\":\"How Stella Got Her Groove Back\",\"US Gross\":37672944,\"Worldwide Gross\":37672944,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Aug 14 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":124,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":5.1,\"IMDB Votes\":3080},{\"Title\":\"The Stepford Wives\",\"US Gross\":59475623,\"Worldwide Gross\":96221971,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Jun 11 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":93,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Frank Oz\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.1,\"IMDB Votes\":26712},{\"Title\":\"Stepmom\",\"US Gross\":91137662,\"Worldwide Gross\":119709917,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Dec 25 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":127,\"Distributor\":\"Sony/TriStar\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Chris Columbus\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":6.2,\"IMDB Votes\":18505},{\"Title\":\"Stomp the Yard\",\"US Gross\":61356221,\"Worldwide Gross\":76356221,\"US DVD Sales\":33252252,\"Production Budget\":14000000,\"Release Date\":\"Jan 12 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":113,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":4.3,\"IMDB Votes\":13737},{\"Title\":\"Stranger Than Fiction\",\"US Gross\":40435190,\"Worldwide Gross\":45235190,\"US DVD Sales\":30936711,\"Production Budget\":30000000,\"Release Date\":\"Nov 10 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":112,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Marc Forster\",\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":7.8,\"IMDB Votes\":74218},{\"Title\":\"The Legend of Suriyothai\",\"US Gross\":454255,\"Worldwide Gross\":454255,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Jun 20 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Stick It\",\"US Gross\":26910736,\"Worldwide Gross\":30399714,\"US DVD Sales\":27642935,\"Production Budget\":20000000,\"Release Date\":\"Apr 28 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":103,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":31,\"IMDB Rating\":5.9,\"IMDB Votes\":9556},{\"Title\":\"Stigmata\",\"US Gross\":50041732,\"Worldwide Gross\":89441732,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Sep 10 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":103,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rupert Wainwright\",\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":6,\"IMDB Votes\":29411},{\"Title\":\"A Stir of Echoes\",\"US Gross\":21133087,\"Worldwide Gross\":21133087,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Sep 10 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"Artisan\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Koepp\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":26752},{\"Title\":\"Street Kings\",\"US Gross\":26415649,\"Worldwide Gross\":65589243,\"US DVD Sales\":13420759,\"Production Budget\":20000000,\"Release Date\":\"Apr 11 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":7,\"IMDB Votes\":40291},{\"Title\":\"Stuart Little\",\"US Gross\":140015224,\"Worldwide Gross\":298800000,\"US DVD Sales\":null,\"Production Budget\":105000000,\"Release Date\":\"Dec 17 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":92,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Rob Minkoff\",\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":5.8,\"IMDB Votes\":23226},{\"Title\":\"Stuart Little 2\",\"US Gross\":64956806,\"Worldwide Gross\":166000000,\"US DVD Sales\":null,\"Production Budget\":120000000,\"Release Date\":\"Jul 19 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":78,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Rob Minkoff\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":5.6,\"IMDB Votes\":7534},{\"Title\":\"Stealth\",\"US Gross\":32116746,\"Worldwide Gross\":76416746,\"US DVD Sales\":null,\"Production Budget\":138000000,\"Release Date\":\"Jul 29 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Rob Cohen\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.8,\"IMDB Votes\":21664},{\"Title\":\"Steamboy\",\"US Gross\":468867,\"Worldwide Gross\":10468867,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Mar 18 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Statement\",\"US Gross\":765637,\"Worldwide Gross\":1545064,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Dec 12 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":null,\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":null,\"Director\":\"Norman Jewison\",\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":6,\"IMDB Votes\":2735},{\"Title\":\"Stolen Summer\",\"US Gross\":119841,\"Worldwide Gross\":119841,\"US DVD Sales\":null,\"Production Budget\":1500000,\"Release Date\":\"Mar 22 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":6.4,\"IMDB Votes\":1733},{\"Title\":\"Stop-Loss\",\"US Gross\":10915744,\"Worldwide Gross\":11179472,\"US DVD Sales\":4736139,\"Production Budget\":25000000,\"Release Date\":\"Mar 28 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Kimberly Peirce\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":9268},{\"Title\":\"The Perfect Storm\",\"US Gross\":182618434,\"Worldwide Gross\":328711434,\"US DVD Sales\":null,\"Production Budget\":120000000,\"Release Date\":\"Jun 30 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":130,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Wolfgang Petersen\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":6.2,\"IMDB Votes\":55716},{\"Title\":\"The Story of Us\",\"US Gross\":27100030,\"Worldwide Gross\":27100030,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Oct 15 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":74,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rob Reiner\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":5.6,\"IMDB Votes\":10720},{\"Title\":\"The Stepfather\",\"US Gross\":29062561,\"Worldwide Gross\":29227561,\"US DVD Sales\":6587798,\"Production Budget\":20000000,\"Release Date\":\"Oct 16 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Remake\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":5.3,\"IMDB Votes\":6263},{\"Title\":\"State of Play\",\"US Gross\":37017955,\"Worldwide Gross\":91445389,\"US DVD Sales\":13578224,\"Production Budget\":60000000,\"Release Date\":\"Apr 17 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":127,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin MacDonald\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7.3,\"IMDB Votes\":34067},{\"Title\":\"The Sisterhood of the Traveling Pants 2\",\"US Gross\":44089964,\"Worldwide Gross\":44154645,\"US DVD Sales\":15266725,\"Production Budget\":27000000,\"Release Date\":\"Aug 06 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":111,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.2,\"IMDB Votes\":6557},{\"Title\":\"Sisterhood of the Traveling Pants\",\"US Gross\":39053061,\"Worldwide Gross\":41560117,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Jun 01 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ken Kwapis\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Step Up\",\"US Gross\":65328121,\"Worldwide Gross\":115328121,\"US DVD Sales\":51317604,\"Production Budget\":12000000,\"Release Date\":\"Aug 11 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Anne Fletcher\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":6.1,\"IMDB Votes\":21691},{\"Title\":\"The Straight Story\",\"US Gross\":6197866,\"Worldwide Gross\":6197866,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 15 1999\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"David Lynch\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":8,\"IMDB Votes\":36265},{\"Title\":\"Star Trek: First Contact\",\"US Gross\":92027888,\"Worldwide Gross\":150000000,\"US DVD Sales\":null,\"Production Budget\":46000000,\"Release Date\":\"Nov 22 1996\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":111,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Jonathan Frakes\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":45106},{\"Title\":\"Star Trek: Insurrection\",\"US Gross\":70187658,\"Worldwide Gross\":117800000,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Dec 11 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":100,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Jonathan Frakes\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":26559},{\"Title\":\"Star Trek: Nemesis\",\"US Gross\":43254409,\"Worldwide Gross\":67312826,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Dec 13 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":117,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.4,\"IMDB Votes\":28449},{\"Title\":\"Alex Rider: Operation Stormbreaker\",\"US Gross\":659210,\"Worldwide Gross\":9351567,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Oct 13 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Strangers\",\"US Gross\":52597610,\"Worldwide Gross\":80597610,\"US DVD Sales\":15789825,\"Production Budget\":9000000,\"Release Date\":\"May 30 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":85,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6,\"IMDB Votes\":35078},{\"Title\":\"Super Troopers\",\"US Gross\":18492362,\"Worldwide Gross\":23046142,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Feb 15 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jay Chandrasekhar\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":29514},{\"Title\":\"Strangers with Candy\",\"US Gross\":2072645,\"Worldwide Gross\":2077844,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jun 28 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":4941},{\"Title\":\"Star Wars Ep. I: The Phantom Menace\",\"US Gross\":431088297,\"Worldwide Gross\":924288297,\"US DVD Sales\":null,\"Production Budget\":115000000,\"Release Date\":\"May 19 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":133,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"George Lucas\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Stuck On You\",\"US Gross\":33832741,\"Worldwide Gross\":63537164,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Dec 12 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":118,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Bobby Farrelly\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":5.9,\"IMDB Votes\":23196},{\"Title\":\"Step Up 2 the Streets\",\"US Gross\":58017783,\"Worldwide Gross\":150017783,\"US DVD Sales\":21801408,\"Production Budget\":17500000,\"Release Date\":\"Feb 14 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":5.6,\"IMDB Votes\":20345},{\"Title\":\"The Sum of All Fears\",\"US Gross\":118471320,\"Worldwide Gross\":193500000,\"US DVD Sales\":null,\"Production Budget\":68000000,\"Release Date\":\"May 31 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":124,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Phil Alden Robinson\",\"Rotten Tomatoes Rating\":59,\"IMDB Rating\":6.3,\"IMDB Votes\":38586},{\"Title\":\"Sunshine State\",\"US Gross\":3064356,\"Worldwide Gross\":3064356,\"US DVD Sales\":null,\"Production Budget\":5600000,\"Release Date\":\"Jun 21 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Sayles\",\"Rotten Tomatoes Rating\":80,\"IMDB Rating\":6.8,\"IMDB Votes\":2769},{\"Title\":\"Supercross\",\"US Gross\":3102550,\"Worldwide Gross\":3252550,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Aug 17 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":6,\"IMDB Rating\":2.9,\"IMDB Votes\":2514},{\"Title\":\"Surf's Up\",\"US Gross\":58867694,\"Worldwide Gross\":145395745,\"US DVD Sales\":46260220,\"Production Budget\":100000000,\"Release Date\":\"Jun 08 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":86,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":77,\"IMDB Rating\":7,\"IMDB Votes\":20974},{\"Title\":\"Surrogates\",\"US Gross\":38577772,\"Worldwide Gross\":119668350,\"US DVD Sales\":11099238,\"Production Budget\":80000000,\"Release Date\":\"Sep 25 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":104,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Jonathan Mostow\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.3,\"IMDB Votes\":36940},{\"Title\":\"Summer of Sam\",\"US Gross\":19288130,\"Worldwide Gross\":19288130,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Jul 02 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":142,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Spike Lee\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.5,\"IMDB Votes\":18431},{\"Title\":\"Savage Grace\",\"US Gross\":434417,\"Worldwide Gross\":968805,\"US DVD Sales\":null,\"Production Budget\":4600000,\"Release Date\":\"May 28 2008\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"IFC Films\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":3838},{\"Title\":\"Saving Private Ryan\",\"US Gross\":216335085,\"Worldwide Gross\":481635085,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Jul 24 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":169,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":8.5,\"IMDB Votes\":270540},{\"Title\":\"S.W.A.T.\",\"US Gross\":116877597,\"Worldwide Gross\":198100000,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Aug 08 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":117,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":5.9,\"IMDB Votes\":43260},{\"Title\":\"Sideways\",\"US Gross\":71502303,\"Worldwide Gross\":109705641,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Oct 22 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":125,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alexander Payne\",\"Rotten Tomatoes Rating\":97,\"IMDB Rating\":7.8,\"IMDB Votes\":69778},{\"Title\":\"Shall We Dance?\",\"US Gross\":57887882,\"Worldwide Gross\":118097882,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Oct 15 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":106,\"Distributor\":\"Miramax\",\"Source\":\"Remake\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Chelsom\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":2192},{\"Title\":\"Secret Window\",\"US Gross\":47958031,\"Worldwide Gross\":92958031,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Mar 12 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":96,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Fantasy\",\"Director\":\"David Koepp\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.5,\"IMDB Votes\":53868},{\"Title\":\"Swept Away\",\"US Gross\":598645,\"Worldwide Gross\":598645,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Oct 11 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Guy Ritchie\",\"Rotten Tomatoes Rating\":5,\"IMDB Rating\":3.4,\"IMDB Votes\":7665},{\"Title\":\"Swimming Pool\",\"US Gross\":10130108,\"Worldwide Gross\":22441323,\"US DVD Sales\":null,\"Production Budget\":7800000,\"Release Date\":\"Jul 04 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.8,\"IMDB Votes\":19992},{\"Title\":\"The Sidewalks of New York\",\"US Gross\":2402459,\"Worldwide Gross\":3100834,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Nov 21 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Edward Burns\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Swimfan\",\"US Gross\":28563926,\"Worldwide Gross\":28563926,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Sep 06 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":86,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":4.6,\"IMDB Votes\":9577},{\"Title\":\"Sweet November\",\"US Gross\":25288103,\"Worldwide Gross\":65754228,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Feb 16 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":120,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":6,\"IMDB Votes\":20891},{\"Title\":\"Sydney White\",\"US Gross\":11892415,\"Worldwide Gross\":12778631,\"US DVD Sales\":6828112,\"Production Budget\":16500000,\"Release Date\":\"Sep 21 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":107,\"Distributor\":\"Universal\",\"Source\":\"Traditional/Legend/Fairytale\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":6.2,\"IMDB Votes\":9309},{\"Title\":\"Switchback\",\"US Gross\":6504442,\"Worldwide Gross\":6504442,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Oct 31 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":6.1,\"IMDB Votes\":5141},{\"Title\":\"Star Wars: The Clone Wars\",\"US Gross\":35161554,\"Worldwide Gross\":68161554,\"US DVD Sales\":22831563,\"Production Budget\":8500000,\"Release Date\":\"Aug 15 2008\",\"MPAA Rating\":\"PG\",\"Running Time min\":98,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5.4,\"IMDB Votes\":17513},{\"Title\":\"The Sweetest Thing\",\"US Gross\":24430272,\"Worldwide Gross\":44633441,\"US DVD Sales\":null,\"Production Budget\":43000000,\"Release Date\":\"Apr 12 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Roger Kumble\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":4.7,\"IMDB Votes\":23378},{\"Title\":\"Six Days, Seven Nights\",\"US Gross\":74339294,\"Worldwide Gross\":164800000,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Jun 12 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ivan Reitman\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":4.7,\"IMDB Votes\":48},{\"Title\":\"Sex Drive\",\"US Gross\":8402485,\"Worldwide Gross\":10412485,\"US DVD Sales\":10245880,\"Production Budget\":19000000,\"Release Date\":\"Oct 17 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.8,\"IMDB Votes\":26920},{\"Title\":\"Sexy Beast\",\"US Gross\":6946056,\"Worldwide Gross\":6946056,\"US DVD Sales\":null,\"Production Budget\":4300000,\"Release Date\":\"Jun 13 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":20916},{\"Title\":\"Chinjeolhan geumjassi\",\"US Gross\":211667,\"Worldwide Gross\":23471871,\"US DVD Sales\":null,\"Production Budget\":4500000,\"Release Date\":\"May 05 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Tartan Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":null,\"Director\":\"Chan-wook Park\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.7,\"IMDB Votes\":19341},{\"Title\":\"Synecdoche, New York\",\"US Gross\":3081925,\"Worldwide Gross\":3081925,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 24 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Syriana\",\"US Gross\":50824620,\"Worldwide Gross\":95024620,\"US DVD Sales\":15415665,\"Production Budget\":50000000,\"Release Date\":\"Nov 23 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":126,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":7.1,\"IMDB Votes\":53265},{\"Title\":\"Suspect Zero\",\"US Gross\":8712564,\"Worldwide Gross\":8712564,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Aug 27 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"E. Elias Merhige\",\"Rotten Tomatoes Rating\":18,\"IMDB Rating\":5.8,\"IMDB Votes\":9804},{\"Title\":\"Tadpole\",\"US Gross\":2891288,\"Worldwide Gross\":3200241,\"US DVD Sales\":null,\"Production Budget\":150000,\"Release Date\":\"Jul 19 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gary Winick\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":6.1,\"IMDB Votes\":3800},{\"Title\":\"Tailor of Panama\",\"US Gross\":13491653,\"Worldwide Gross\":27491653,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Mar 30 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"John Boorman\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Taken\",\"US Gross\":145000989,\"Worldwide Gross\":225461461,\"US DVD Sales\":67315399,\"Production Budget\":25000000,\"Release Date\":\"Jan 30 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Pierre Morel\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.8,\"IMDB Votes\":1125},{\"Title\":\"Take the Lead\",\"US Gross\":34742066,\"Worldwide Gross\":65742066,\"US DVD Sales\":21100670,\"Production Budget\":30000000,\"Release Date\":\"Apr 01 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":44,\"IMDB Rating\":6.5,\"IMDB Votes\":10015},{\"Title\":\"Talladega Nights: The Ballad of Ricky Bobby\",\"US Gross\":148213377,\"Worldwide Gross\":163013377,\"US DVD Sales\":84838372,\"Production Budget\":73000000,\"Release Date\":\"Aug 04 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Adam McKay\",\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":6.4,\"IMDB Votes\":50407},{\"Title\":\"The Talented Mr. Ripley\",\"US Gross\":81292135,\"Worldwide Gross\":81292135,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Dec 25 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":139,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Anthony Minghella\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.2,\"IMDB Votes\":63319},{\"Title\":\"Tarnation\",\"US Gross\":592014,\"Worldwide Gross\":1162014,\"US DVD Sales\":null,\"Production Budget\":218,\"Release Date\":\"Oct 06 2004\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"WellSpring\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":3847},{\"Title\":\"Taxman\",\"US Gross\":9871,\"Worldwide Gross\":9871,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Sep 17 1999\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":null,\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":520},{\"Title\":\"Thunderbirds\",\"US Gross\":6768055,\"Worldwide Gross\":28231444,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Jul 30 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Jonathan Frakes\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":4,\"IMDB Votes\":5397},{\"Title\":\"The Best Man\",\"US Gross\":34102780,\"Worldwide Gross\":34572780,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Oct 22 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Malcolm D. Lee\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.1,\"IMDB Votes\":2019},{\"Title\":\"Book of Shadows: Blair Witch 2\",\"US Gross\":26421314,\"Worldwide Gross\":47721314,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Oct 27 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":90,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4,\"IMDB Votes\":16122},{\"Title\":\"The Cave\",\"US Gross\":15007991,\"Worldwide Gross\":27147991,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Aug 26 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":12,\"IMDB Rating\":4.8,\"IMDB Votes\":13025},{\"Title\":\"This Christmas\",\"US Gross\":49121934,\"Worldwide Gross\":49778552,\"US DVD Sales\":17922664,\"Production Budget\":13000000,\"Release Date\":\"Nov 21 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":118,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":5.4,\"IMDB Votes\":3351},{\"Title\":\"The Core\",\"US Gross\":31111260,\"Worldwide Gross\":74132631,\"US DVD Sales\":null,\"Production Budget\":85000000,\"Release Date\":\"Mar 28 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":133,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Jon Amiel\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":5.3,\"IMDB Votes\":27375},{\"Title\":\"The Thomas Crown Affair\",\"US Gross\":69304264,\"Worldwide Gross\":124304264,\"US DVD Sales\":null,\"Production Budget\":48000000,\"Release Date\":\"Aug 06 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":111,\"Distributor\":\"MGM\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John McTiernan\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.7,\"IMDB Votes\":37692},{\"Title\":\"The Damned United\",\"US Gross\":449865,\"Worldwide Gross\":4054204,\"US DVD Sales\":null,\"Production Budget\":6400000,\"Release Date\":\"Oct 09 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":97,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Factual Book/Article\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Tom Hooper\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":7.5,\"IMDB Votes\":7560},{\"Title\":\"The Tale of Despereaux\",\"US Gross\":50877145,\"Worldwide Gross\":88717945,\"US DVD Sales\":26233404,\"Production Budget\":60000000,\"Release Date\":\"Dec 19 2008\",\"MPAA Rating\":\"G\",\"Running Time min\":93,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Sam Fell\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.1,\"IMDB Votes\":7460},{\"Title\":\"Team America: World Police\",\"US Gross\":32774834,\"Worldwide Gross\":50274834,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 15 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":98,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Trey Parker\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.3,\"IMDB Votes\":58763},{\"Title\":\"Tea with Mussolini\",\"US Gross\":14395874,\"Worldwide Gross\":14395874,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"May 14 1999\",\"MPAA Rating\":\"PG\",\"Running Time min\":116,\"Distributor\":\"MGM\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Franco Zeffirelli\",\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":6.7,\"IMDB Votes\":5435},{\"Title\":\"Tears of the Sun\",\"US Gross\":43632458,\"Worldwide Gross\":85632458,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Mar 07 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Antoine Fuqua\",\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":6.4,\"IMDB Votes\":34304},{\"Title\":\"The Big Tease\",\"US Gross\":185577,\"Worldwide Gross\":185577,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Jan 28 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.1,\"IMDB Votes\":1610},{\"Title\":\"Not Another Teen Movie\",\"US Gross\":37882551,\"Worldwide Gross\":62401343,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 14 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":89,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":5.5,\"IMDB Votes\":36678},{\"Title\":\"Teeth\",\"US Gross\":347578,\"Worldwide Gross\":2300349,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jan 18 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Roadside Attractions\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":18},{\"Title\":\"Bridge to Terabithia\",\"US Gross\":82234139,\"Worldwide Gross\":136934139,\"US DVD Sales\":41383048,\"Production Budget\":25000000,\"Release Date\":\"Feb 16 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":95,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":85,\"IMDB Rating\":7.4,\"IMDB Votes\":34482},{\"Title\":\"Terminator 3: Rise of the Machines\",\"US Gross\":150358296,\"Worldwide Gross\":433058296,\"US DVD Sales\":null,\"Production Budget\":170000000,\"Release Date\":\"Jul 01 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Jonathan Mostow\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":107667},{\"Title\":\"Terminator Salvation: The Future Begins\",\"US Gross\":125322469,\"Worldwide Gross\":371628539,\"US DVD Sales\":28434778,\"Production Budget\":200000000,\"Release Date\":\"May 21 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":116,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Joseph McGinty Nichol\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Transformers\",\"US Gross\":319246193,\"Worldwide Gross\":708272592,\"US DVD Sales\":290787166,\"Production Budget\":151000000,\"Release Date\":\"Jul 03 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":140,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Michael Bay\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":7.3,\"IMDB Votes\":197131},{\"Title\":\"Transformers: Revenge of the Fallen\",\"US Gross\":402111870,\"Worldwide Gross\":836303693,\"US DVD Sales\":217509899,\"Production Budget\":210000000,\"Release Date\":\"Jun 24 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":149,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Michael Bay\",\"Rotten Tomatoes Rating\":20,\"IMDB Rating\":6,\"IMDB Votes\":95786},{\"Title\":\"The Goods: Live Hard, Sell Hard\",\"US Gross\":15122676,\"Worldwide Gross\":15122676,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Aug 14 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":89,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Neal Brennan\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Greatest Game Ever Played\",\"US Gross\":15331289,\"Worldwide Gross\":15425073,\"US DVD Sales\":37687804,\"Production Budget\":25000000,\"Release Date\":\"Sep 30 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Bill Paxton\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":7.3,\"IMDB Votes\":7876},{\"Title\":\"The Ghost Writer\",\"US Gross\":15541549,\"Worldwide Gross\":63241549,\"US DVD Sales\":3354366,\"Production Budget\":45000000,\"Release Date\":\"Feb 19 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Roman Polanski\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7.6,\"IMDB Votes\":22875},{\"Title\":\"Joheunnom nabbeunnom isanghannom\",\"US Gross\":128486,\"Worldwide Gross\":42226657,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Apr 23 2010\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":5548},{\"Title\":\"The Beach\",\"US Gross\":39778599,\"Worldwide Gross\":39778599,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Feb 11 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":119,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Danny Boyle\",\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":4.5,\"IMDB Votes\":229},{\"Title\":\"The Box\",\"US Gross\":15051977,\"Worldwide Gross\":26341896,\"US DVD Sales\":3907625,\"Production Budget\":25000000,\"Release Date\":\"Nov 06 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Fantasy\",\"Director\":\"Richard Kelly\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":6.8,\"IMDB Votes\":418},{\"Title\":\"The Wild Thornberrys\",\"US Gross\":40108697,\"Worldwide Gross\":60694737,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Dec 20 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":85,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":1104},{\"Title\":\"Bug\",\"US Gross\":7006708,\"Worldwide Gross\":7006708,\"US DVD Sales\":1251654,\"Production Budget\":4000000,\"Release Date\":\"May 25 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"William Friedkin\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6,\"IMDB Votes\":14164},{\"Title\":\"They\",\"US Gross\":12840842,\"Worldwide Gross\":12840842,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Nov 27 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":4.6,\"IMDB Votes\":6550},{\"Title\":\"The Eye\",\"US Gross\":31418697,\"Worldwide Gross\":56706727,\"US DVD Sales\":12319404,\"Production Budget\":12000000,\"Release Date\":\"Feb 01 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Remake\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5.3,\"IMDB Votes\":17304},{\"Title\":\"The Fog\",\"US Gross\":29511112,\"Worldwide Gross\":37048526,\"US DVD Sales\":null,\"Production Budget\":18000000,\"Release Date\":\"Oct 14 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rupert Wainwright\",\"Rotten Tomatoes Rating\":5,\"IMDB Rating\":3.3,\"IMDB Votes\":15760},{\"Title\":\"The Thin Red Line\",\"US Gross\":36400491,\"Worldwide Gross\":36400491,\"US DVD Sales\":null,\"Production Budget\":52000000,\"Release Date\":\"Dec 23 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":166,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Terrence Malick\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":7.5,\"IMDB Votes\":60966},{\"Title\":\"Thirteen Days\",\"US Gross\":34566746,\"Worldwide Gross\":66554547,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Dec 25 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":145,\"Distributor\":\"New Line\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Roger Donaldson\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.3,\"IMDB Votes\":23578},{\"Title\":\"The Kid\",\"US Gross\":69688384,\"Worldwide Gross\":69688384,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Jul 07 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":104,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jon Turteltaub\",\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":5.9,\"IMDB Votes\":14927},{\"Title\":\"The Man\",\"US Gross\":8330720,\"Worldwide Gross\":10393696,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Sep 09 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Les Mayfield\",\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":5.4,\"IMDB Votes\":9356},{\"Title\":\"House on Haunted Hill\",\"US Gross\":40846082,\"Worldwide Gross\":40846082,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Oct 29 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":96,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"William Malone\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":5.2,\"IMDB Votes\":22795},{\"Title\":\"The One\",\"US Gross\":43905746,\"Worldwide Gross\":43905746,\"US DVD Sales\":null,\"Production Budget\":49000000,\"Release Date\":\"Nov 02 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":87,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"James Wong\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":5.6,\"IMDB Votes\":24416},{\"Title\":\"Gwoemul\",\"US Gross\":2201923,\"Worldwide Gross\":89006691,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Mar 09 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":26783},{\"Title\":\"Thr3e\",\"US Gross\":1008849,\"Worldwide Gross\":1060418,\"US DVD Sales\":null,\"Production Budget\":2400000,\"Release Date\":\"Jan 05 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"The Bigger Picture\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":5,\"IMDB Rating\":5,\"IMDB Votes\":2825},{\"Title\":\"Three to Tango\",\"US Gross\":10570375,\"Worldwide Gross\":10570375,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 22 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":5.8,\"IMDB Votes\":11148},{\"Title\":\"The Thirteenth Floor\",\"US Gross\":11810854,\"Worldwide Gross\":11810854,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"May 28 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":6.7,\"IMDB Votes\":19939},{\"Title\":\"The 13th Warrior\",\"US Gross\":32698899,\"Worldwide Gross\":61698899,\"US DVD Sales\":null,\"Production Budget\":125000000,\"Release Date\":\"Aug 27 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":103,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"John McTiernan\",\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":6.3,\"IMDB Votes\":36151},{\"Title\":\"The Tuxedo\",\"US Gross\":50586000,\"Worldwide Gross\":50586000,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Sep 27 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":99,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5,\"IMDB Votes\":19370},{\"Title\":\"The Tigger Movie\",\"US Gross\":4554533,\"Worldwide Gross\":55159800,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Feb 11 2000\",\"MPAA Rating\":\"G\",\"Running Time min\":77,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Spin-Off\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6,\"IMDB Votes\":2986},{\"Title\":\"Timeline\",\"US Gross\":19480739,\"Worldwide Gross\":26703184,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Nov 26 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Richard Donner\",\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":5.3,\"IMDB Votes\":19318},{\"Title\":\"The Adventures of Tintin: Secret of the Unicorn\",\"US Gross\":0,\"Worldwide Gross\":0,\"US DVD Sales\":null,\"Production Budget\":130000000,\"Release Date\":\"Dec 23 2011\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Thirteen\",\"US Gross\":4601043,\"Worldwide Gross\":6302406,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Aug 20 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Catherine Hardwicke\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":31482},{\"Title\":\"Titan A.E.\",\"US Gross\":22751979,\"Worldwide Gross\":36751979,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Jun 16 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":95,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Don Bluth\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":6.4,\"IMDB Votes\":22286},{\"Title\":\"Titanic\",\"US Gross\":600788188,\"Worldwide Gross\":1842879955,\"US DVD Sales\":null,\"Production Budget\":200000000,\"Release Date\":\"Dec 19 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":194,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"James Cameron\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.4,\"IMDB Votes\":240732},{\"Title\":\"The Kids Are All Right\",\"US Gross\":20553799,\"Worldwide Gross\":20553799,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Jul 09 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":7.8,\"IMDB Votes\":3093},{\"Title\":\"The League of Extraordinary Gentlemen\",\"US Gross\":66465204,\"Worldwide Gross\":179265204,\"US DVD Sales\":null,\"Production Budget\":78000000,\"Release Date\":\"Jul 11 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":110,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":\"Stephen Norrington\",\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.5,\"IMDB Votes\":50710},{\"Title\":\"The Time Machine\",\"US Gross\":56684819,\"Worldwide Gross\":98983590,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Mar 08 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":96,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":5.6,\"IMDB Votes\":32465},{\"Title\":\"Tomcats\",\"US Gross\":13558739,\"Worldwide Gross\":13558739,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Mar 30 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":4.9,\"IMDB Votes\":9505},{\"Title\":\"The Mist\",\"US Gross\":25593755,\"Worldwide Gross\":54777490,\"US DVD Sales\":29059367,\"Production Budget\":13000000,\"Release Date\":\"Nov 21 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":127,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Frank Darabont\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":7.4,\"IMDB Votes\":76830},{\"Title\":\"TMNT\",\"US Gross\":54149098,\"Worldwide Gross\":95009888,\"US DVD Sales\":30836109,\"Production Budget\":35000000,\"Release Date\":\"Mar 23 2007\",\"MPAA Rating\":\"PG\",\"Running Time min\":88,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":26178},{\"Title\":\"Tomorrow Never Dies\",\"US Gross\":125304276,\"Worldwide Gross\":339504276,\"US DVD Sales\":null,\"Production Budget\":110000000,\"Release Date\":\"Dec 19 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":119,\"Distributor\":\"MGM\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Roger Spottiswoode\",\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.4,\"IMDB Votes\":46650},{\"Title\":\"The Royal Tenenbaums\",\"US Gross\":52353636,\"Worldwide Gross\":71430876,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Dec 14 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wes Anderson\",\"Rotten Tomatoes Rating\":79,\"IMDB Rating\":7.6,\"IMDB Votes\":82349},{\"Title\":\"Lara Croft: Tomb Raider: The Cradle of Life\",\"US Gross\":65653758,\"Worldwide Gross\":156453758,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Jul 25 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":117,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Game\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jan De Bont\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.2,\"IMDB Votes\":32832},{\"Title\":\"Lara Croft: Tomb Raider\",\"US Gross\":131144183,\"Worldwide Gross\":274644183,\"US DVD Sales\":null,\"Production Budget\":94000000,\"Release Date\":\"Jun 15 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Game\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Simon West\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.4,\"IMDB Votes\":55582},{\"Title\":\"The Day After Tomorrow\",\"US Gross\":186740799,\"Worldwide Gross\":544272402,\"US DVD Sales\":null,\"Production Budget\":125000000,\"Release Date\":\"May 28 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":124,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Roland Emmerich\",\"Rotten Tomatoes Rating\":46,\"IMDB Rating\":6.3,\"IMDB Votes\":92241},{\"Title\":\"Topsy Turvy\",\"US Gross\":6201757,\"Worldwide Gross\":6201757,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Dec 17 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"USA Films\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Musical\",\"Creative Type\":\"Dramatization\",\"Director\":\"Mike Leigh\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":6215},{\"Title\":\"Torque\",\"US Gross\":21176322,\"Worldwide Gross\":46176322,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jan 16 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":3.5,\"IMDB Votes\":12986},{\"Title\":\"The Others\",\"US Gross\":96522687,\"Worldwide Gross\":209947037,\"US DVD Sales\":null,\"Production Budget\":17000000,\"Release Date\":\"Aug 10 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":104,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7.8,\"IMDB Votes\":86091},{\"Title\":\"The Town\",\"US Gross\":30980607,\"Worldwide Gross\":33180607,\"US DVD Sales\":null,\"Production Budget\":37000000,\"Release Date\":\"Sep 17 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":123,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ben Affleck\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":8.7,\"IMDB Votes\":493},{\"Title\":\"Toy Story 2\",\"US Gross\":245852179,\"Worldwide Gross\":484966906,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Nov 19 1999\",\"MPAA Rating\":\"G\",\"Running Time min\":92,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"John Lasseter\",\"Rotten Tomatoes Rating\":100,\"IMDB Rating\":8,\"IMDB Votes\":119357},{\"Title\":\"Toy Story 3\",\"US Gross\":410640665,\"Worldwide Gross\":1046340665,\"US DVD Sales\":null,\"Production Budget\":200000000,\"Release Date\":\"Jun 18 2010\",\"MPAA Rating\":\"G\",\"Running Time min\":102,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":99,\"IMDB Rating\":8.9,\"IMDB Votes\":67380},{\"Title\":\"The Taking of Pelham 123\",\"US Gross\":65452312,\"Worldwide Gross\":148989667,\"US DVD Sales\":23048229,\"Production Budget\":110000000,\"Release Date\":\"Jun 12 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":106,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Tony Scott\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.5,\"IMDB Votes\":33452},{\"Title\":\"Treasure Planet\",\"US Gross\":38120554,\"Worldwide Gross\":91800000,\"US DVD Sales\":null,\"Production Budget\":100000000,\"Release Date\":\"Nov 27 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":96,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":6.6,\"IMDB Votes\":12099},{\"Title\":\"Traffic\",\"US Gross\":124107476,\"Worldwide Gross\":208300000,\"US DVD Sales\":null,\"Production Budget\":48000000,\"Release Date\":\"Dec 27 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":147,\"Distributor\":\"USA Films\",\"Source\":\"Based on TV\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Steven Soderbergh\",\"Rotten Tomatoes Rating\":91,\"IMDB Rating\":7.8,\"IMDB Votes\":85759},{\"Title\":\"Thomas and the Magic Railroad\",\"US Gross\":15911332,\"Worldwide Gross\":15911332,\"US DVD Sales\":null,\"Production Budget\":19000000,\"Release Date\":\"Jul 26 2000\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Destination Films\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":2.7,\"IMDB Votes\":1613},{\"Title\":\"Training Day\",\"US Gross\":76261036,\"Worldwide Gross\":104505362,\"US DVD Sales\":null,\"Production Budget\":45000000,\"Release Date\":\"Oct 05 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":122,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Antoine Fuqua\",\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":7.6,\"IMDB Votes\":82057},{\"Title\":\"Traitor\",\"US Gross\":23530831,\"Worldwide Gross\":27664173,\"US DVD Sales\":13547082,\"Production Budget\":22000000,\"Release Date\":\"Aug 27 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":113,\"Distributor\":\"Overture Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":7.1,\"IMDB Votes\":22468},{\"Title\":\"Trapped\",\"US Gross\":6916869,\"Worldwide Gross\":6916869,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Sep 20 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":18,\"IMDB Rating\":6,\"IMDB Votes\":10685},{\"Title\":\"The Ring\",\"US Gross\":129094024,\"Worldwide Gross\":249094024,\"US DVD Sales\":null,\"Production Budget\":48000000,\"Release Date\":\"Oct 18 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":115,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gore Verbinski\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":5.5,\"IMDB Votes\":589},{\"Title\":\"Trippin'\",\"US Gross\":9017070,\"Worldwide Gross\":9017070,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"May 12 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"October Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":4.6,\"IMDB Votes\":673},{\"Title\":\"Star Trek\",\"US Gross\":257730019,\"Worldwide Gross\":385680447,\"US DVD Sales\":98317480,\"Production Budget\":140000000,\"Release Date\":\"May 08 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":\"J.J. Abrams\",\"Rotten Tomatoes Rating\":94,\"IMDB Rating\":8.2,\"IMDB Votes\":134187},{\"Title\":\"The Terminal\",\"US Gross\":77073959,\"Worldwide Gross\":218673959,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Jun 18 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":128,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":7.1,\"IMDB Votes\":79803},{\"Title\":\"Transamerica\",\"US Gross\":9015303,\"Worldwide Gross\":15151744,\"US DVD Sales\":3927958,\"Production Budget\":1000000,\"Release Date\":\"Dec 02 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.6,\"IMDB Votes\":19343},{\"Title\":\"The Transporter 2\",\"US Gross\":43095856,\"Worldwide Gross\":85095856,\"US DVD Sales\":null,\"Production Budget\":32000000,\"Release Date\":\"Sep 02 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Louis Leterrier\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":51005},{\"Title\":\"The Transporter\",\"US Gross\":25296447,\"Worldwide Gross\":43928932,\"US DVD Sales\":null,\"Production Budget\":21000000,\"Release Date\":\"Oct 11 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":92,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Corey Yuen\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":6.6,\"IMDB Votes\":51005},{\"Title\":\"The Road\",\"US Gross\":8114270,\"Worldwide Gross\":23914270,\"US DVD Sales\":6599387,\"Production Budget\":25000000,\"Release Date\":\"Nov 25 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":7.5,\"IMDB Votes\":39124},{\"Title\":\"Tropic Thunder\",\"US Gross\":110461307,\"Worldwide Gross\":188163455,\"US DVD Sales\":50387300,\"Production Budget\":90000000,\"Release Date\":\"Aug 13 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":106,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ben Stiller\",\"Rotten Tomatoes Rating\":83,\"IMDB Rating\":7.2,\"IMDB Votes\":104839},{\"Title\":\"Troy\",\"US Gross\":133298577,\"Worldwide Gross\":497398577,\"US DVD Sales\":null,\"Production Budget\":150000000,\"Release Date\":\"May 14 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":163,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Wolfgang Petersen\",\"Rotten Tomatoes Rating\":54,\"IMDB Rating\":7,\"IMDB Votes\":129575},{\"Title\":\"xXx\",\"US Gross\":141930000,\"Worldwide Gross\":267200000,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Aug 09 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":124,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Rob Cohen\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":5.5,\"IMDB Votes\":52636},{\"Title\":\"Ta Ra Rum Pum\",\"US Gross\":872643,\"Worldwide Gross\":9443864,\"US DVD Sales\":null,\"Production Budget\":7400000,\"Release Date\":\"Apr 27 2007\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"Yash Raj Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":67,\"IMDB Rating\":5.1,\"IMDB Votes\":1051},{\"Title\":\"The Truman Show\",\"US Gross\":125618201,\"Worldwide Gross\":248400000,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Jun 05 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":102,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Weir\",\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":8,\"IMDB Votes\":156346},{\"Title\":\"Trust the Man\",\"US Gross\":1530535,\"Worldwide Gross\":2548378,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Aug 18 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":5.8,\"IMDB Votes\":5262},{\"Title\":\"Where the Truth Lies\",\"US Gross\":872142,\"Worldwide Gross\":1415656,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Oct 14 2005\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"Atom Egoyan\",\"Rotten Tomatoes Rating\":41,\"IMDB Rating\":6.6,\"IMDB Votes\":8951},{\"Title\":\"Tarzan\",\"US Gross\":171091819,\"Worldwide Gross\":448191819,\"US DVD Sales\":null,\"Production Budget\":145000000,\"Release Date\":\"Jun 16 1999\",\"MPAA Rating\":\"G\",\"Running Time min\":88,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Kevin Lima\",\"Rotten Tomatoes Rating\":88,\"IMDB Rating\":6.9,\"IMDB Votes\":26871},{\"Title\":\"The Secret in Their Eyes\",\"US Gross\":6374789,\"Worldwide Gross\":6374789,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Apr 16 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Tsotsi\",\"US Gross\":2912606,\"Worldwide Gross\":9879971,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Feb 24 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gavin Hood\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":13167},{\"Title\":\"Teacher's Pet: The Movie\",\"US Gross\":6491969,\"Worldwide Gross\":6491969,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jan 16 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Time Traveler's Wife\",\"US Gross\":63414846,\"Worldwide Gross\":98666635,\"US DVD Sales\":19814283,\"Production Budget\":39000000,\"Release Date\":\"Aug 14 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":7.1,\"IMDB Votes\":23908},{\"Title\":\"The Touch\",\"US Gross\":0,\"Worldwide Gross\":5918742,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Mar 31 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.5,\"IMDB Votes\":1031},{\"Title\":\"Tuck Everlasting\",\"US Gross\":19161999,\"Worldwide Gross\":19344615,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Oct 11 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Jay Russell\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6.5,\"IMDB Votes\":6639},{\"Title\":\"Thumbsucker\",\"US Gross\":1328679,\"Worldwide Gross\":1919197,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Sep 16 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":70,\"IMDB Rating\":6.7,\"IMDB Votes\":12109},{\"Title\":\"Turbulence\",\"US Gross\":11532774,\"Worldwide Gross\":11532774,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Jan 10 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":4.5,\"IMDB Votes\":5147},{\"Title\":\"Turistas\",\"US Gross\":7027762,\"Worldwide Gross\":14321070,\"US DVD Sales\":3507046,\"Production Budget\":10000000,\"Release Date\":\"Dec 01 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":89,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":83},{\"Title\":\"The Wash\",\"US Gross\":10097096,\"Worldwide Gross\":10097096,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Nov 14 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":3.6,\"IMDB Votes\":3095},{\"Title\":\"Two Girls and a Guy\",\"US Gross\":2057193,\"Worldwide Gross\":2315026,\"US DVD Sales\":null,\"Production Budget\":1000000,\"Release Date\":\"Apr 24 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James Toback\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":3722},{\"Title\":\"The Wild\",\"US Gross\":37384046,\"Worldwide Gross\":99384046,\"US DVD Sales\":43063958,\"Production Budget\":80000000,\"Release Date\":\"Apr 14 2006\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":19,\"IMDB Rating\":5.4,\"IMDB Votes\":8498},{\"Title\":\"Twilight\",\"US Gross\":15055091,\"Worldwide Gross\":15055091,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Mar 06 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.1,\"IMDB Votes\":4840},{\"Title\":\"Twisted\",\"US Gross\":25195050,\"Worldwide Gross\":40119848,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Feb 27 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":97,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Philip Kaufman\",\"Rotten Tomatoes Rating\":2,\"IMDB Rating\":4.8,\"IMDB Votes\":83},{\"Title\":\"The Twilight Saga: New Moon\",\"US Gross\":296623634,\"Worldwide Gross\":702623634,\"US DVD Sales\":162665819,\"Production Budget\":50000000,\"Release Date\":\"Nov 20 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":130,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"Chris Weitz\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Twilight Saga: Eclipse\",\"US Gross\":300155447,\"Worldwide Gross\":688155447,\"US DVD Sales\":null,\"Production Budget\":68000000,\"Release Date\":\"Jun 30 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":124,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"David Slade\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Twilight\",\"US Gross\":192769854,\"Worldwide Gross\":396439854,\"US DVD Sales\":193591463,\"Production Budget\":37000000,\"Release Date\":\"Nov 21 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":120,\"Distributor\":\"Summit Entertainment\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":\"Catherine Hardwicke\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.1,\"IMDB Votes\":4840},{\"Title\":\"Town & Country\",\"US Gross\":6712451,\"Worldwide Gross\":10364769,\"US DVD Sales\":null,\"Production Budget\":105000000,\"Release Date\":\"Apr 27 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Chelsom\",\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.4,\"IMDB Votes\":2889},{\"Title\":\"200 Cigarettes\",\"US Gross\":6852450,\"Worldwide Gross\":6852450,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Feb 26 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.4,\"IMDB Votes\":8645},{\"Title\":\"The Texas Chainsaw Massacre: The Beginning\",\"US Gross\":39517763,\"Worldwide Gross\":50517763,\"US DVD Sales\":15943146,\"Production Budget\":16000000,\"Release Date\":\"Oct 06 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":90,\"Distributor\":\"New Line\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.8,\"IMDB Votes\":20196},{\"Title\":\"The Texas Chainsaw Massacre\",\"US Gross\":80571655,\"Worldwide Gross\":107071655,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Oct 17 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":98,\"Distributor\":\"New Line\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":36,\"IMDB Rating\":6.1,\"IMDB Votes\":39172},{\"Title\":\"Texas Rangers\",\"US Gross\":623374,\"Worldwide Gross\":623374,\"US DVD Sales\":null,\"Production Budget\":38000000,\"Release Date\":\"Nov 30 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Western\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Steve Miner\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5,\"IMDB Votes\":2645},{\"Title\":\"Tom yum goong\",\"US Gross\":12044087,\"Worldwide Gross\":43044087,\"US DVD Sales\":13125985,\"Production Budget\":5700000,\"Release Date\":\"Sep 08 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":82,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.9,\"IMDB Votes\":13929},{\"Title\":\"Thank You For Smoking\",\"US Gross\":24793509,\"Worldwide Gross\":39232211,\"US DVD Sales\":16660404,\"Production Budget\":7500000,\"Release Date\":\"Mar 17 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jason Reitman\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":65340},{\"Title\":\"U2 3D\",\"US Gross\":10363341,\"Worldwide Gross\":22664070,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Jan 23 2008\",\"MPAA Rating\":\"G\",\"Running Time min\":85,\"Distributor\":\"National Geographic Entertainment\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Concert/Performance\",\"Creative Type\":\"Factual\",\"Director\":\"Catherine Owens\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":8.3,\"IMDB Votes\":2090},{\"Title\":\"U-571\",\"US Gross\":77086030,\"Worldwide Gross\":127630030,\"US DVD Sales\":null,\"Production Budget\":62000000,\"Release Date\":\"Apr 21 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":116,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Jonathan Mostow\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":6.4,\"IMDB Votes\":32528},{\"Title\":\"Undercover Brother\",\"US Gross\":38230435,\"Worldwide Gross\":38230435,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"May 31 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":86,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Malcolm D. Lee\",\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":5.7,\"IMDB Votes\":14237},{\"Title\":\"Underclassman\",\"US Gross\":5654777,\"Worldwide Gross\":5654777,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Sep 02 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.3,\"IMDB Votes\":3249},{\"Title\":\"Dodgeball: A True Underdog Story\",\"US Gross\":114326736,\"Worldwide Gross\":167726736,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jun 18 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":92,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.6,\"IMDB Votes\":65329},{\"Title\":\"The Ugly Truth\",\"US Gross\":88915214,\"Worldwide Gross\":203115214,\"US DVD Sales\":33619971,\"Production Budget\":38000000,\"Release Date\":\"Jul 24 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Luketic\",\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":6.4,\"IMDB Votes\":27888},{\"Title\":\"Ultraviolet\",\"US Gross\":18522064,\"Worldwide Gross\":20722064,\"US DVD Sales\":14141779,\"Production Budget\":30000000,\"Release Date\":\"Mar 03 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":4,\"IMDB Votes\":28547},{\"Title\":\"Unaccompanied Minors\",\"US Gross\":16655224,\"Worldwide Gross\":21949214,\"US DVD Sales\":7060674,\"Production Budget\":25000000,\"Release Date\":\"Dec 08 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":87,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.7,\"IMDB Votes\":4133},{\"Title\":\"Unbreakable\",\"US Gross\":94999143,\"Worldwide Gross\":248099143,\"US DVD Sales\":null,\"Production Budget\":73243106,\"Release Date\":\"Nov 22 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":107,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Super Hero\",\"Director\":\"M. Night Shyamalan\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":7.3,\"IMDB Votes\":97324},{\"Title\":\"The Unborn\",\"US Gross\":42670410,\"Worldwide Gross\":77208315,\"US DVD Sales\":11045109,\"Production Budget\":16000000,\"Release Date\":\"Jan 09 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"David Goyer\",\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":4.5,\"IMDB Votes\":15331},{\"Title\":\"Undead\",\"US Gross\":41196,\"Worldwide Gross\":187847,\"US DVD Sales\":null,\"Production Budget\":750000,\"Release Date\":\"Jul 01 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.6,\"IMDB Votes\":6957},{\"Title\":\"Underworld\",\"US Gross\":51970690,\"Worldwide Gross\":95708457,\"US DVD Sales\":null,\"Production Budget\":22000000,\"Release Date\":\"Sep 19 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":121,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Len Wiseman\",\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":6.7,\"IMDB Votes\":65690},{\"Title\":\"Undiscovered\",\"US Gross\":1069318,\"Worldwide Gross\":1069318,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Aug 26 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":8,\"IMDB Rating\":3.7,\"IMDB Votes\":1981},{\"Title\":\"Undisputed\",\"US Gross\":12398628,\"Worldwide Gross\":12398628,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Aug 23 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Walter Hill\",\"Rotten Tomatoes Rating\":49,\"IMDB Rating\":5.8,\"IMDB Votes\":6837},{\"Title\":\"Underworld: Evolution\",\"US Gross\":62318875,\"Worldwide Gross\":111318875,\"US DVD Sales\":47003121,\"Production Budget\":45000000,\"Release Date\":\"Jan 20 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Len Wiseman\",\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":6.6,\"IMDB Votes\":48551},{\"Title\":\"An Unfinished Life\",\"US Gross\":8535575,\"Worldwide Gross\":18535575,\"US DVD Sales\":21172686,\"Production Budget\":30000000,\"Release Date\":\"Sep 09 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Lasse Hallstrom\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":7.1,\"IMDB Votes\":11770},{\"Title\":\"Unfaithful\",\"US Gross\":52752475,\"Worldwide Gross\":119114494,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"May 08 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":123,\"Distributor\":\"20th Century Fox\",\"Source\":\"Remake\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Adrian Lyne\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.6,\"IMDB Votes\":23998},{\"Title\":\"Universal Soldier II: The Return\",\"US Gross\":10447421,\"Worldwide Gross\":10717421,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Aug 20 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":3.4,\"IMDB Votes\":10233},{\"Title\":null,\"US Gross\":26403,\"Worldwide Gross\":3080493,\"US DVD Sales\":null,\"Production Budget\":3700000,\"Release Date\":\"Nov 03 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":85,\"Distributor\":\"IFC Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.6,\"IMDB Votes\":11986},{\"Title\":\"Danny the Dog\",\"US Gross\":24537621,\"Worldwide Gross\":49037621,\"US DVD Sales\":null,\"Production Budget\":43000000,\"Release Date\":\"May 13 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus/Rogue Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Louis Leterrier\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":36119},{\"Title\":\"Untraceable\",\"US Gross\":28687835,\"Worldwide Gross\":52649951,\"US DVD Sales\":19710582,\"Production Budget\":35000000,\"Release Date\":\"Jan 25 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":6.1,\"IMDB Votes\":21922},{\"Title\":\"Up\",\"US Gross\":293004164,\"Worldwide Gross\":731304609,\"US DVD Sales\":178459329,\"Production Budget\":175000000,\"Release Date\":\"May 29 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":96,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Pete Docter\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.4,\"IMDB Votes\":110491},{\"Title\":\"Up in the Air\",\"US Gross\":83823381,\"Worldwide Gross\":166077420,\"US DVD Sales\":17124041,\"Production Budget\":30000000,\"Release Date\":\"Dec 04 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Jason Reitman\",\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Upside of Anger\",\"US Gross\":18761993,\"Worldwide Gross\":27361993,\"US DVD Sales\":null,\"Production Budget\":12000000,\"Release Date\":\"Mar 11 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mike Binder\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7,\"IMDB Votes\":12317},{\"Title\":\"Urban Legend\",\"US Gross\":38116707,\"Worldwide Gross\":72571864,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Sep 25 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":5.2,\"IMDB Votes\":19113},{\"Title\":\"Urban Legends: Final Cut\",\"US Gross\":21468807,\"Worldwide Gross\":38574362,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Sep 22 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":98,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":3.7,\"IMDB Votes\":7609},{\"Title\":\"Urbania\",\"US Gross\":1032075,\"Worldwide Gross\":1032075,\"US DVD Sales\":null,\"Production Budget\":225000,\"Release Date\":\"Sep 15 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":6.7,\"IMDB Votes\":2218},{\"Title\":\"Valkyrie\",\"US Gross\":83077470,\"Worldwide Gross\":198686497,\"US DVD Sales\":26715008,\"Production Budget\":75000000,\"Release Date\":\"Dec 25 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":120,\"Distributor\":\"United Artists\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Dramatization\",\"Director\":\"Bryan Singer\",\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":7.3,\"IMDB Votes\":54343},{\"Title\":\"Valiant\",\"US Gross\":19478106,\"Worldwide Gross\":61746888,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Aug 19 2005\",\"MPAA Rating\":\"G\",\"Running Time min\":null,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":5.6,\"IMDB Votes\":7158},{\"Title\":\"Valentine\",\"US Gross\":20384136,\"Worldwide Gross\":20384136,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Feb 02 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":96,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":4.3,\"IMDB Votes\":11435},{\"Title\":\"Cirque du Freak: The Vampire's Assistant\",\"US Gross\":14046595,\"Worldwide Gross\":34372469,\"US DVD Sales\":6377527,\"Production Budget\":40000000,\"Release Date\":\"Oct 23 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Action\",\"Creative Type\":\"Fantasy\",\"Director\":\"Paul Weitz\",\"Rotten Tomatoes Rating\":37,\"IMDB Rating\":6.1,\"IMDB Votes\":9539},{\"Title\":\"The Legend of Bagger Vance\",\"US Gross\":30695227,\"Worldwide Gross\":39235486,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Nov 03 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":126,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Robert Redford\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":6.4,\"IMDB Votes\":21995},{\"Title\":\"Raising Victor Vargas\",\"US Gross\":2073984,\"Worldwide Gross\":2811439,\"US DVD Sales\":null,\"Production Budget\":800000,\"Release Date\":\"Mar 28 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Samuel Goldwyn Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peter Sollett\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.1,\"IMDB Votes\":3719},{\"Title\":\"In the Valley of Elah\",\"US Gross\":6777741,\"Worldwide Gross\":24489150,\"US DVD Sales\":3182650,\"Production Budget\":23000000,\"Release Date\":\"Sep 14 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Paul Haggis\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":7.4,\"IMDB Votes\":27529},{\"Title\":\"Venom\",\"US Gross\":881745,\"Worldwide Gross\":881745,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Sep 16 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax/Dimension\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":4.6,\"IMDB Votes\":4220},{\"Title\":\"Venus\",\"US Gross\":3347411,\"Worldwide Gross\":4022411,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Dec 21 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":95,\"Distributor\":\"Miramax\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Vanity Fair\",\"US Gross\":16123851,\"Worldwide Gross\":19123851,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Sep 01 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Mira Nair\",\"Rotten Tomatoes Rating\":50,\"IMDB Rating\":6.2,\"IMDB Votes\":9343},{\"Title\":\"V for Vendetta\",\"US Gross\":70511035,\"Worldwide Gross\":132511035,\"US DVD Sales\":58723721,\"Production Budget\":50000000,\"Release Date\":\"Mar 17 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"James McTeigue\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":8.2,\"IMDB Votes\":224636},{\"Title\":\"The Velocity of Gary\",\"US Gross\":34145,\"Worldwide Gross\":34145,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Jul 16 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Van Helsing\",\"US Gross\":120150546,\"Worldwide Gross\":300150546,\"US DVD Sales\":null,\"Production Budget\":170000000,\"Release Date\":\"May 07 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":132,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Stephen Sommers\",\"Rotten Tomatoes Rating\":22,\"IMDB Rating\":5.5,\"IMDB Votes\":68846},{\"Title\":\"The Village\",\"US Gross\":114197520,\"Worldwide Gross\":260197520,\"US DVD Sales\":null,\"Production Budget\":71682975,\"Release Date\":\"Jul 30 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":108,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"M. Night Shyamalan\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":6.6,\"IMDB Votes\":88928},{\"Title\":\"The Virgin Suicides\",\"US Gross\":4859475,\"Worldwide Gross\":4859475,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Apr 21 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sofia Coppola\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":49110},{\"Title\":\"Virus\",\"US Gross\":14010690,\"Worldwide Gross\":30626690,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Jan 15 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":4.5,\"IMDB Votes\":10487},{\"Title\":\"The Visitor\",\"US Gross\":9427026,\"Worldwide Gross\":16194905,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Apr 11 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Overture Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":6.8,\"IMDB Votes\":318},{\"Title\":\"A Very Long Engagement\",\"US Gross\":6167817,\"Worldwide Gross\":59606587,\"US DVD Sales\":null,\"Production Budget\":55000000,\"Release Date\":\"Nov 26 2004\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Jean-Pierre Jeunet\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Vertical Limit\",\"US Gross\":68473360,\"Worldwide Gross\":213500000,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Dec 08 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":124,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Martin Campbell\",\"Rotten Tomatoes Rating\":47,\"IMDB Rating\":5.6,\"IMDB Votes\":24294},{\"Title\":\"Vampires\",\"US Gross\":20268825,\"Worldwide Gross\":20268825,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 30 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"John Carpenter\",\"Rotten Tomatoes Rating\":33,\"IMDB Rating\":6.8,\"IMDB Votes\":54},{\"Title\":\"Vanilla Sky\",\"US Gross\":100614858,\"Worldwide Gross\":202726605,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Dec 14 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":136,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Cameron Crowe\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6.9,\"IMDB Votes\":87820},{\"Title\":\"Volcano\",\"US Gross\":47546796,\"Worldwide Gross\":120100000,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Apr 25 1997\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mick Jackson\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":5.2,\"IMDB Votes\":21313},{\"Title\":\"Volver\",\"US Gross\":12899867,\"Worldwide Gross\":85599867,\"US DVD Sales\":null,\"Production Budget\":9400000,\"Release Date\":\"Nov 03 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Pedro Almodovar\",\"Rotten Tomatoes Rating\":92,\"IMDB Rating\":4.4,\"IMDB Votes\":288},{\"Title\":\"Kurtlar vadisi - Irak\",\"US Gross\":0,\"Worldwide Gross\":24906717,\"US DVD Sales\":null,\"Production Budget\":8300000,\"Release Date\":\"Nov 24 2006\",\"MPAA Rating\":null,\"Running Time min\":null,\"Distributor\":null,\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.7,\"IMDB Votes\":7936},{\"Title\":\"The Flintstones in Viva Rock Vegas\",\"US Gross\":35231365,\"Worldwide Gross\":59431365,\"US DVD Sales\":null,\"Production Budget\":58000000,\"Release Date\":\"Apr 28 2000\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"Universal\",\"Source\":\"Based on TV\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Brian Levant\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":3.3,\"IMDB Votes\":5491},{\"Title\":\"Varsity Blues\",\"US Gross\":52894169,\"Worldwide Gross\":54294169,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Jan 15 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":104,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Brian Robbins\",\"Rotten Tomatoes Rating\":39,\"IMDB Rating\":6,\"IMDB Votes\":18066},{\"Title\":\"Valentine's Day\",\"US Gross\":110485654,\"Worldwide Gross\":215771698,\"US DVD Sales\":17250458,\"Production Budget\":52000000,\"Release Date\":\"Feb 12 2010\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Garry Marshall\",\"Rotten Tomatoes Rating\":17,\"IMDB Rating\":5.7,\"IMDB Votes\":17599},{\"Title\":\"National Lampoon's Van Wilder\",\"US Gross\":21005329,\"Worldwide Gross\":37975553,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Apr 05 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Wackness\",\"US Gross\":2077046,\"Worldwide Gross\":2635650,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Jul 03 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":7.1,\"IMDB Votes\":13257},{\"Title\":\"Wag the Dog\",\"US Gross\":43057470,\"Worldwide Gross\":64252038,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Dec 25 1997\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"New Line\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Barry Levinson\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7,\"IMDB Votes\":36092},{\"Title\":\"Wah-Wah\",\"US Gross\":234750,\"Worldwide Gross\":463039,\"US DVD Sales\":null,\"Production Budget\":7000000,\"Release Date\":\"May 12 2006\",\"MPAA Rating\":\"Not Rated\",\"Running Time min\":null,\"Distributor\":\"IDP/Goldwyn/Roadside\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Richard E. Grant\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.8,\"IMDB Votes\":1889},{\"Title\":\"Waiting...\",\"US Gross\":16124543,\"Worldwide Gross\":16285543,\"US DVD Sales\":37517657,\"Production Budget\":1125000,\"Release Date\":\"Oct 07 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":93,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":30,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Waking Ned Devine\",\"US Gross\":24793251,\"Worldwide Gross\":55193251,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Nov 20 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":91,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"WALL-E\",\"US Gross\":223808164,\"Worldwide Gross\":532743103,\"US DVD Sales\":142201722,\"Production Budget\":180000000,\"Release Date\":\"Jun 27 2008\",\"MPAA Rating\":\"G\",\"Running Time min\":97,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Kids Fiction\",\"Director\":\"Andrew Stanton\",\"Rotten Tomatoes Rating\":96,\"IMDB Rating\":8.5,\"IMDB Votes\":182257},{\"Title\":\"War\",\"US Gross\":22466994,\"Worldwide Gross\":40666994,\"US DVD Sales\":27148376,\"Production Budget\":25000000,\"Release Date\":\"Aug 24 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":99,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":28771},{\"Title\":\"War, Inc.\",\"US Gross\":580862,\"Worldwide Gross\":1296184,\"US DVD Sales\":910568,\"Production Budget\":10000000,\"Release Date\":\"May 23 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"First Look\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":29,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Red Cliff\",\"US Gross\":627047,\"Worldwide Gross\":119627047,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Nov 20 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":131,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Action\",\"Creative Type\":\"Dramatization\",\"Director\":\"John Woo\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The War of the Worlds\",\"US Gross\":234280354,\"Worldwide Gross\":591745532,\"US DVD Sales\":null,\"Production Budget\":132000000,\"Release Date\":\"Jun 29 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":116,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Steven Spielberg\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.2,\"IMDB Votes\":12074},{\"Title\":\"Watchmen\",\"US Gross\":107509799,\"Worldwide Gross\":184068357,\"US DVD Sales\":52112827,\"Production Budget\":138000000,\"Release Date\":\"Mar 06 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Zack Snyder\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":7.8,\"IMDB Votes\":132250},{\"Title\":\"Water\",\"US Gross\":5529144,\"Worldwide Gross\":8119205,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Apr 28 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Deepa Mehta\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Waitress\",\"US Gross\":19097550,\"Worldwide Gross\":22202180,\"US DVD Sales\":23127549,\"Production Budget\":1500000,\"Release Date\":\"May 02 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Adrienne Shelly\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.2,\"IMDB Votes\":20384},{\"Title\":\"The Wendell Baker Story\",\"US Gross\":127188,\"Worldwide Gross\":127188,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"May 18 2007\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"ThinkFilm\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Luke Wilson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.5,\"IMDB Votes\":3535},{\"Title\":\"Winter's Bone\",\"US Gross\":5951693,\"Worldwide Gross\":5951693,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Jun 11 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":100,\"Distributor\":\"Roadside Attractions\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":8.2,\"IMDB Votes\":1704},{\"Title\":\"Wonder Boys\",\"US Gross\":19389454,\"Worldwide Gross\":33422485,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Feb 23 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":111,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Curtis Hanson\",\"Rotten Tomatoes Rating\":81,\"IMDB Rating\":7.5,\"IMDB Votes\":31572},{\"Title\":\"Waltz with Bashir\",\"US Gross\":2283849,\"Worldwide Gross\":11125664,\"US DVD Sales\":null,\"Production Budget\":2000000,\"Release Date\":\"Dec 25 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"White Chicks\",\"US Gross\":69148997,\"Worldwide Gross\":111448997,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Jun 23 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":109,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Keenen Ivory Wayans\",\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":5,\"IMDB Votes\":25970},{\"Title\":\"Wolf Creek\",\"US Gross\":16186348,\"Worldwide Gross\":27649774,\"US DVD Sales\":8898756,\"Production Budget\":1100000,\"Release Date\":\"Dec 25 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.3,\"IMDB Votes\":22594},{\"Title\":\"The Wedding Planner\",\"US Gross\":60400856,\"Worldwide Gross\":94728529,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Jan 26 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":103,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Adam Shankman\",\"Rotten Tomatoes Rating\":16,\"IMDB Rating\":4.8,\"IMDB Votes\":18717},{\"Title\":\"Wonderland\",\"US Gross\":1060512,\"Worldwide Gross\":1060512,\"US DVD Sales\":null,\"Production Budget\":5500000,\"Release Date\":\"Oct 03 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":6.6,\"IMDB Votes\":11966},{\"Title\":\"Taking Woodstock\",\"US Gross\":7460204,\"Worldwide Gross\":10061080,\"US DVD Sales\":null,\"Production Budget\":29000000,\"Release Date\":\"Aug 26 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":120,\"Distributor\":\"Focus Features\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Ang Lee\",\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.8,\"IMDB Votes\":8778},{\"Title\":\"The Widow of St. Pierre\",\"US Gross\":3058380,\"Worldwide Gross\":3058380,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"Mar 02 2001\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Lionsgate\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Wedding Crashers\",\"US Gross\":209218368,\"Worldwide Gross\":283218368,\"US DVD Sales\":null,\"Production Budget\":40000000,\"Release Date\":\"Jul 15 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":113,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"David Dobkin\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Wedding Date\",\"US Gross\":31726995,\"Worldwide Gross\":47175038,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Feb 04 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":5.5,\"IMDB Votes\":12205},{\"Title\":\"Tumbleweeds\",\"US Gross\":1350248,\"Worldwide Gross\":1788168,\"US DVD Sales\":null,\"Production Budget\":312000,\"Release Date\":\"Nov 24 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Fine Line\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":6.4,\"IMDB Votes\":2152},{\"Title\":\"We Own the Night\",\"US Gross\":28563179,\"Worldwide Gross\":54700285,\"US DVD Sales\":22557036,\"Production Budget\":28000000,\"Release Date\":\"Oct 12 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":117,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"James Gray\",\"Rotten Tomatoes Rating\":56,\"IMDB Rating\":7,\"IMDB Votes\":38163},{\"Title\":\"We Were Soldiers\",\"US Gross\":78120196,\"Worldwide Gross\":114658262,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Mar 01 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":138,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":6.9,\"IMDB Votes\":42580},{\"Title\":\"The World's Fastest Indian\",\"US Gross\":5128124,\"Worldwide Gross\":16509706,\"US DVD Sales\":7272519,\"Production Budget\":25000000,\"Release Date\":\"Dec 07 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Roger Donaldson\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.9,\"IMDB Votes\":19687},{\"Title\":\"Les herbes folles\",\"US Gross\":377556,\"Worldwide Gross\":1877556,\"US DVD Sales\":null,\"Production Budget\":14000000,\"Release Date\":\"Jun 25 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":915},{\"Title\":\"What a Girl Wants\",\"US Gross\":35990505,\"Worldwide Gross\":35990505,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Apr 04 2003\",\"MPAA Rating\":\"PG\",\"Running Time min\":105,\"Distributor\":\"Warner Bros.\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Dennie Gordon\",\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":5.7,\"IMDB Votes\":12561},{\"Title\":\"Whale Rider\",\"US Gross\":20779666,\"Worldwide Gross\":38833352,\"US DVD Sales\":null,\"Production Budget\":4300000,\"Release Date\":\"Jun 06 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Palm Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":90,\"IMDB Rating\":7.7,\"IMDB Votes\":21814},{\"Title\":\"Walk Hard: The Dewey Cox Story\",\"US Gross\":18317151,\"Worldwide Gross\":20575121,\"US DVD Sales\":15734125,\"Production Budget\":35000000,\"Release Date\":\"Dec 21 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":74,\"IMDB Rating\":6.7,\"IMDB Votes\":28032},{\"Title\":\"Where the Heart Is\",\"US Gross\":33771174,\"Worldwide Gross\":40862054,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Apr 28 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":120,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":34,\"IMDB Rating\":6.4,\"IMDB Votes\":13302},{\"Title\":\"Whipped\",\"US Gross\":4142507,\"Worldwide Gross\":4142507,\"US DVD Sales\":null,\"Production Budget\":3000000,\"Release Date\":\"Sep 01 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Destination Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":4.2,\"IMDB Votes\":2973},{\"Title\":\"Whip It\",\"US Gross\":13043363,\"Worldwide Gross\":13043363,\"US DVD Sales\":6310163,\"Production Budget\":15000000,\"Release Date\":\"Oct 02 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Drew Barrymore\",\"Rotten Tomatoes Rating\":84,\"IMDB Rating\":7.1,\"IMDB Votes\":14068},{\"Title\":\"Welcome Home Roscoe Jenkins\",\"US Gross\":42436517,\"Worldwide Gross\":43607627,\"US DVD Sales\":17066717,\"Production Budget\":27500000,\"Release Date\":\"Feb 08 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":114,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Malcolm D. Lee\",\"Rotten Tomatoes Rating\":23,\"IMDB Rating\":4.5,\"IMDB Votes\":5700},{\"Title\":\"When a Stranger Calls\",\"US Gross\":47860214,\"Worldwide Gross\":66966987,\"US DVD Sales\":13084600,\"Production Budget\":15000000,\"Release Date\":\"Feb 03 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony/Screen Gems\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Simon West\",\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":4.7,\"IMDB Votes\":16505},{\"Title\":\"What Dreams May Come\",\"US Gross\":55485043,\"Worldwide Gross\":71485043,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Oct 02 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":113,\"Distributor\":\"Polygram\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":55,\"IMDB Rating\":6.6,\"IMDB Votes\":30486},{\"Title\":\"The White Countess\",\"US Gross\":1669971,\"Worldwide Gross\":2814566,\"US DVD Sales\":null,\"Production Budget\":16000000,\"Release Date\":\"Dec 21 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":135,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"James Ivory\",\"Rotten Tomatoes Rating\":51,\"IMDB Rating\":6.5,\"IMDB Votes\":2855},{\"Title\":\"Wicker Park\",\"US Gross\":12831121,\"Worldwide Gross\":13400080,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Sep 03 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"MGM\",\"Source\":\"Remake\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Paul McGuigan\",\"Rotten Tomatoes Rating\":24,\"IMDB Rating\":6.9,\"IMDB Votes\":18987},{\"Title\":\"Where the Wild Things Are\",\"US Gross\":77233467,\"Worldwide Gross\":99123656,\"US DVD Sales\":27984751,\"Production Budget\":100000000,\"Release Date\":\"Oct 16 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":100,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Spike Jonze\",\"Rotten Tomatoes Rating\":73,\"IMDB Rating\":7.2,\"IMDB Votes\":30669},{\"Title\":\"Wild Things\",\"US Gross\":29795299,\"Worldwide Gross\":55576699,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Mar 20 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":108,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.6,\"IMDB Votes\":40110},{\"Title\":\"Wimbledon\",\"US Gross\":16862585,\"Worldwide Gross\":41862585,\"US DVD Sales\":null,\"Production Budget\":35000000,\"Release Date\":\"Sep 17 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":60,\"IMDB Rating\":6.3,\"IMDB Votes\":21996},{\"Title\":\"Windtalkers\",\"US Gross\":40914068,\"Worldwide Gross\":77628265,\"US DVD Sales\":null,\"Production Budget\":115000000,\"Release Date\":\"Jun 14 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":134,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"John Woo\",\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":5.8,\"IMDB Votes\":26421},{\"Title\":\"Because of Winn-Dixie\",\"US Gross\":32647042,\"Worldwide Gross\":33589427,\"US DVD Sales\":null,\"Production Budget\":15000000,\"Release Date\":\"Feb 18 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Wayne Wang\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":6.1,\"IMDB Votes\":3720},{\"Title\":\"Wing Commander\",\"US Gross\":11578022,\"Worldwide Gross\":11578022,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Mar 12 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Game\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":11,\"IMDB Rating\":3.7,\"IMDB Votes\":9460},{\"Title\":\"Without Limits\",\"US Gross\":780326,\"Worldwide Gross\":780326,\"US DVD Sales\":null,\"Production Budget\":25000000,\"Release Date\":\"Sep 11 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":6.9,\"IMDB Votes\":3369},{\"Title\":\"What Just Happened\",\"US Gross\":1090947,\"Worldwide Gross\":2412123,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Oct 17 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Magnolia Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Barry Levinson\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":12537},{\"Title\":\"What Lies Beneath\",\"US Gross\":155464351,\"Worldwide Gross\":288693989,\"US DVD Sales\":null,\"Production Budget\":90000000,\"Release Date\":\"Jul 21 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":130,\"Distributor\":\"Dreamworks SKG\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Robert Zemeckis\",\"Rotten Tomatoes Rating\":45,\"IMDB Rating\":6.5,\"IMDB Votes\":45633},{\"Title\":\"Walk the Line\",\"US Gross\":119519402,\"Worldwide Gross\":184319402,\"US DVD Sales\":123216687,\"Production Budget\":29000000,\"Release Date\":\"Nov 18 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":80,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"James Mangold\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.9,\"IMDB Votes\":85235},{\"Title\":\"A Walk to Remember\",\"US Gross\":41227069,\"Worldwide Gross\":46060915,\"US DVD Sales\":null,\"Production Budget\":11000000,\"Release Date\":\"Jan 25 2002\",\"MPAA Rating\":\"PG\",\"Running Time min\":102,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Adam Shankman\",\"Rotten Tomatoes Rating\":28,\"IMDB Rating\":7.1,\"IMDB Votes\":38045},{\"Title\":\"Willard\",\"US Gross\":6882696,\"Worldwide Gross\":6882696,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Mar 14 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":6.2,\"IMDB Votes\":7702},{\"Title\":\"Wild Wild West\",\"US Gross\":113805681,\"Worldwide Gross\":222105681,\"US DVD Sales\":null,\"Production Budget\":175000000,\"Release Date\":\"Jun 30 1999\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":107,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Barry Sonnenfeld\",\"Rotten Tomatoes Rating\":21,\"IMDB Rating\":4.3,\"IMDB Votes\":54183},{\"Title\":\"White Noise 2: The Light\",\"US Gross\":0,\"Worldwide Gross\":8243567,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jan 08 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":null,\"Rotten Tomatoes Rating\":86,\"IMDB Rating\":5.9,\"IMDB Votes\":5647},{\"Title\":\"White Noise\",\"US Gross\":56094360,\"Worldwide Gross\":92094360,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"Jan 07 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":101,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":9,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Wanted\",\"US Gross\":134508551,\"Worldwide Gross\":340934768,\"US DVD Sales\":71092823,\"Production Budget\":75000000,\"Release Date\":\"Jun 27 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":110,\"Distributor\":\"Universal\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":\"Timur Bekmambetov\",\"Rotten Tomatoes Rating\":71,\"IMDB Rating\":6.4,\"IMDB Votes\":1089},{\"Title\":\"Woman on Top\",\"US Gross\":5018450,\"Worldwide Gross\":10192613,\"US DVD Sales\":null,\"Production Budget\":8000000,\"Release Date\":\"Sep 22 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":35,\"IMDB Rating\":4.9,\"IMDB Votes\":4743},{\"Title\":\"The Wolf Man\",\"US Gross\":61979680,\"Worldwide Gross\":142422252,\"US DVD Sales\":18568140,\"Production Budget\":150000000,\"Release Date\":\"Feb 12 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Universal\",\"Source\":\"Remake\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Fantasy\",\"Director\":\"Joe Johnston\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":6099},{\"Title\":\"X-Men Origins: Wolverine\",\"US Gross\":179883157,\"Worldwide Gross\":374825760,\"US DVD Sales\":73930122,\"Production Budget\":150000000,\"Release Date\":\"May 01 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Spin-Off\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Gavin Hood\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":79499},{\"Title\":\"The Women\",\"US Gross\":26902075,\"Worldwide Gross\":50042410,\"US DVD Sales\":10057074,\"Production Budget\":16000000,\"Release Date\":\"Sep 12 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":114,\"Distributor\":\"Picturehouse\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":13,\"IMDB Rating\":7.9,\"IMDB Votes\":5519},{\"Title\":\"Woo\",\"US Gross\":8064972,\"Worldwide Gross\":8064972,\"US DVD Sales\":null,\"Production Budget\":13000000,\"Release Date\":\"May 08 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"New Line\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":5,\"IMDB Rating\":3.4,\"IMDB Votes\":982},{\"Title\":\"The Wood\",\"US Gross\":25059640,\"Worldwide Gross\":25059640,\"US DVD Sales\":null,\"Production Budget\":6000000,\"Release Date\":\"Jul 16 1999\",\"MPAA Rating\":\"R\",\"Running Time min\":106,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":61,\"IMDB Rating\":6.1,\"IMDB Votes\":3224},{\"Title\":\"Without a Paddle\",\"US Gross\":58156435,\"Worldwide Gross\":65121280,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Aug 20 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":95,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":15,\"IMDB Rating\":5.7,\"IMDB Votes\":17207},{\"Title\":\"What's the Worst That Could Happen?\",\"US Gross\":32267774,\"Worldwide Gross\":38462071,\"US DVD Sales\":null,\"Production Budget\":30000000,\"Release Date\":\"Jun 01 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":98,\"Distributor\":\"MGM\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":5,\"IMDB Votes\":6727},{\"Title\":\"Winter Passing\",\"US Gross\":107492,\"Worldwide Gross\":113783,\"US DVD Sales\":null,\"Production Budget\":3500000,\"Release Date\":\"Feb 17 2006\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Focus Features\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":6.4,\"IMDB Votes\":4360},{\"Title\":\"What Planet Are You From?\",\"US Gross\":6291602,\"Worldwide Gross\":6291602,\"US DVD Sales\":null,\"Production Budget\":50000000,\"Release Date\":\"Mar 03 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Mike Nichols\",\"Rotten Tomatoes Rating\":42,\"IMDB Rating\":5.4,\"IMDB Votes\":5304},{\"Title\":\"Wordplay\",\"US Gross\":3121270,\"Worldwide Gross\":3177636,\"US DVD Sales\":null,\"Production Budget\":500000,\"Release Date\":\"Jun 16 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"IFC Films\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Documentary\",\"Creative Type\":\"Factual\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.4,\"IMDB Votes\":2222},{\"Title\":\"The Wrestler\",\"US Gross\":26236603,\"Worldwide Gross\":43236603,\"US DVD Sales\":11912450,\"Production Budget\":6000000,\"Release Date\":\"Dec 17 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":109,\"Distributor\":\"Fox Searchlight\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Darren Aronofsky\",\"Rotten Tomatoes Rating\":98,\"IMDB Rating\":8.2,\"IMDB Votes\":93301},{\"Title\":\"Walking Tall\",\"US Gross\":46213824,\"Worldwide Gross\":47313824,\"US DVD Sales\":null,\"Production Budget\":56000000,\"Release Date\":\"Apr 02 2004\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":87,\"Distributor\":\"MGM\",\"Source\":\"Remake\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin Bray\",\"Rotten Tomatoes Rating\":25,\"IMDB Rating\":6,\"IMDB Votes\":20517},{\"Title\":\"World Trade Center\",\"US Gross\":70278893,\"Worldwide Gross\":163278893,\"US DVD Sales\":36877248,\"Production Budget\":65000000,\"Release Date\":\"Aug 09 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Oliver Stone\",\"Rotten Tomatoes Rating\":69,\"IMDB Rating\":6.2,\"IMDB Votes\":34341},{\"Title\":\"The Watcher\",\"US Gross\":28946615,\"Worldwide Gross\":47267829,\"US DVD Sales\":null,\"Production Budget\":33000000,\"Release Date\":\"Sep 08 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":97,\"Distributor\":\"Universal\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":10,\"IMDB Rating\":3.7,\"IMDB Votes\":959},{\"Title\":\"The Weather Man\",\"US Gross\":12482775,\"Worldwide Gross\":15466961,\"US DVD Sales\":16632857,\"Production Budget\":20000000,\"Release Date\":\"Oct 28 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Gore Verbinski\",\"Rotten Tomatoes Rating\":58,\"IMDB Rating\":6.9,\"IMDB Votes\":35394},{\"Title\":\"Sky Captain and the World of Tomorrow\",\"US Gross\":37760080,\"Worldwide Gross\":49730854,\"US DVD Sales\":null,\"Production Budget\":70000000,\"Release Date\":\"Sep 17 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":106,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":72,\"IMDB Rating\":6.3,\"IMDB Votes\":40281},{\"Title\":\"Whiteout\",\"US Gross\":10275638,\"Worldwide Gross\":12254746,\"US DVD Sales\":3231673,\"Production Budget\":35000000,\"Release Date\":\"Sep 11 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Dominic Sena\",\"Rotten Tomatoes Rating\":7,\"IMDB Rating\":5.3,\"IMDB Votes\":10044},{\"Title\":\"The Waterboy\",\"US Gross\":161491646,\"Worldwide Gross\":190191646,\"US DVD Sales\":null,\"Production Budget\":23000000,\"Release Date\":\"Nov 06 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":86,\"Distributor\":\"Walt Disney Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Frank Coraci\",\"Rotten Tomatoes Rating\":32,\"IMDB Rating\":5.7,\"IMDB Votes\":43251},{\"Title\":\"Wrong Turn\",\"US Gross\":15417771,\"Worldwide Gross\":28649556,\"US DVD Sales\":null,\"Production Budget\":10000000,\"Release Date\":\"May 30 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Horror\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":5.8,\"IMDB Votes\":119},{\"Title\":\"What Women Want\",\"US Gross\":182805123,\"Worldwide Gross\":372100000,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Dec 15 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":127,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Romantic Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Nancy Meyers\",\"Rotten Tomatoes Rating\":53,\"IMDB Rating\":6.3,\"IMDB Votes\":54525},{\"Title\":\"The Way of the Gun\",\"US Gross\":6047856,\"Worldwide Gross\":13061935,\"US DVD Sales\":null,\"Production Budget\":9000000,\"Release Date\":\"Sep 08 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Artisan\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":48,\"IMDB Rating\":6.5,\"IMDB Votes\":17513},{\"Title\":\"The X-Files: I Want to Believe\",\"US Gross\":20982478,\"Worldwide Gross\":68369434,\"US DVD Sales\":16034958,\"Production Budget\":35000000,\"Release Date\":\"Jul 25 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":104,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":5.9,\"IMDB Votes\":35433},{\"Title\":\"The X Files: Fight the Future\",\"US Gross\":83898313,\"Worldwide Gross\":189176423,\"US DVD Sales\":null,\"Production Budget\":66000000,\"Release Date\":\"Jun 19 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":120,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on TV\",\"Major Genre\":\"Action\",\"Creative Type\":\"Science Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Extraordinary Measures\",\"US Gross\":12482741,\"Worldwide Gross\":12697741,\"US DVD Sales\":5267433,\"Production Budget\":31000000,\"Release Date\":\"Jan 22 2010\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"CBS Films\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":\"Tom Vaughan\",\"Rotten Tomatoes Rating\":27,\"IMDB Rating\":6.4,\"IMDB Votes\":3770},{\"Title\":\"X-Men\",\"US Gross\":157299717,\"Worldwide Gross\":334627820,\"US DVD Sales\":null,\"Production Budget\":75000000,\"Release Date\":\"Jul 14 2000\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":104,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Bryan Singer\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":7.4,\"IMDB Votes\":120706},{\"Title\":\"X2\",\"US Gross\":214949694,\"Worldwide Gross\":407711549,\"US DVD Sales\":null,\"Production Budget\":125000000,\"Release Date\":\"May 02 2003\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":133,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Bryan Singer\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.8,\"IMDB Votes\":112320},{\"Title\":\"X-Men: The Last Stand\",\"US Gross\":234362462,\"Worldwide Gross\":459359555,\"US DVD Sales\":103555667,\"Production Budget\":150000000,\"Release Date\":\"May 26 2006\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"20th Century Fox\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Action\",\"Creative Type\":\"Super Hero\",\"Director\":\"Brett Ratner\",\"Rotten Tomatoes Rating\":57,\"IMDB Rating\":6.9,\"IMDB Votes\":109125},{\"Title\":\"The Exploding Girl\",\"US Gross\":25572,\"Worldwide Gross\":25572,\"US DVD Sales\":null,\"Production Budget\":40000,\"Release Date\":\"Mar 12 2010\",\"MPAA Rating\":null,\"Running Time min\":79,\"Distributor\":\"Oscilloscope Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":\"Bradley Rust Grey\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.2,\"IMDB Votes\":260},{\"Title\":\"The Expendables\",\"US Gross\":101384023,\"Worldwide Gross\":240484023,\"US DVD Sales\":null,\"Production Budget\":82000000,\"Release Date\":\"Aug 13 2010\",\"MPAA Rating\":null,\"Running Time min\":103,\"Distributor\":\"Lionsgate\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Sylvester Stallone\",\"Rotten Tomatoes Rating\":40,\"IMDB Rating\":7.1,\"IMDB Votes\":42427},{\"Title\":\"XXX: State of the Union\",\"US Gross\":26873932,\"Worldwide Gross\":71073932,\"US DVD Sales\":null,\"Production Budget\":60000000,\"Release Date\":\"Apr 29 2005\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Action\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Lee Tamahori\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.1,\"IMDB Votes\":19527},{\"Title\":\"The Yards\",\"US Gross\":882710,\"Worldwide Gross\":2282710,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Oct 20 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Miramax\",\"Source\":null,\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":\"James Gray\",\"Rotten Tomatoes Rating\":64,\"IMDB Rating\":6.3,\"IMDB Votes\":8784},{\"Title\":\"The Divine Secrets of the Ya-Ya Sisterhood\",\"US Gross\":69586544,\"Worldwide Gross\":73826768,\"US DVD Sales\":null,\"Production Budget\":27000000,\"Release Date\":\"Jun 07 2002\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":116,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"You Can Count on Me\",\"US Gross\":9180275,\"Worldwide Gross\":11005992,\"US DVD Sales\":null,\"Production Budget\":1200000,\"Release Date\":\"Nov 10 2000\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Paramount Vantage\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":95,\"IMDB Rating\":7.7,\"IMDB Votes\":14261},{\"Title\":\"Year One\",\"US Gross\":43337279,\"Worldwide Gross\":57604723,\"US DVD Sales\":14813995,\"Production Budget\":60000000,\"Release Date\":\"Jun 19 2009\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":97,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Harold Ramis\",\"Rotten Tomatoes Rating\":14,\"IMDB Rating\":5,\"IMDB Votes\":23091},{\"Title\":\"Yes\",\"US Gross\":396035,\"Worldwide Gross\":661221,\"US DVD Sales\":null,\"Production Budget\":1700000,\"Release Date\":\"Jun 24 2005\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures Classics\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Yes Man\",\"US Gross\":97690976,\"Worldwide Gross\":225990976,\"US DVD Sales\":26601131,\"Production Budget\":50000000,\"Release Date\":\"Dec 19 2008\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":104,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Peyton Reed\",\"Rotten Tomatoes Rating\":43,\"IMDB Rating\":7,\"IMDB Votes\":62150},{\"Title\":\"You Kill Me\",\"US Gross\":2426851,\"Worldwide Gross\":2426851,\"US DVD Sales\":null,\"Production Budget\":4000000,\"Release Date\":\"Jun 22 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":92,\"Distributor\":\"IFC Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Black Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"John Dahl\",\"Rotten Tomatoes Rating\":78,\"IMDB Rating\":6.7,\"IMDB Votes\":9498},{\"Title\":\"Yours, Mine and Ours\",\"US Gross\":53359917,\"Worldwide Gross\":72359917,\"US DVD Sales\":26979166,\"Production Budget\":45000000,\"Release Date\":\"Nov 23 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":90,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Raja Gosnell\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":7.6,\"IMDB Votes\":259},{\"Title\":\"You've Got Mail\",\"US Gross\":115821495,\"Worldwide Gross\":250800000,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Dec 18 1998\",\"MPAA Rating\":\"PG\",\"Running Time min\":119,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on Play\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Nora Ephron\",\"Rotten Tomatoes Rating\":68,\"IMDB Rating\":6.2,\"IMDB Votes\":52587},{\"Title\":\"Youth in Revolt\",\"US Gross\":15285588,\"Worldwide Gross\":17585588,\"US DVD Sales\":3654607,\"Production Budget\":18000000,\"Release Date\":\"Jan 08 2010\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Weinstein/Dimension\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":6.7,\"IMDB Votes\":14670},{\"Title\":\"Y Tu Mama Tambien (And Your Mother Too)\",\"US Gross\":13649881,\"Worldwide Gross\":33649881,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Mar 15 2002\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"IFC Films\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Alfonso Cuaron\",\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Yu-Gi-Oh\",\"US Gross\":19762690,\"Worldwide Gross\":28762690,\"US DVD Sales\":null,\"Production Budget\":20000000,\"Release Date\":\"Aug 13 2004\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Warner Bros.\",\"Source\":\"Based on TV\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Kids Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"The Young Unknowns\",\"US Gross\":58163,\"Worldwide Gross\":58163,\"US DVD Sales\":null,\"Production Budget\":800000,\"Release Date\":\"Apr 11 2003\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Indican Pictures\",\"Source\":null,\"Major Genre\":null,\"Creative Type\":null,\"Director\":null,\"Rotten Tomatoes Rating\":null,\"IMDB Rating\":4.5,\"IMDB Votes\":98},{\"Title\":\"The Young Victoria\",\"US Gross\":11001272,\"Worldwide Gross\":11001272,\"US DVD Sales\":3273039,\"Production Budget\":35000000,\"Release Date\":\"Dec 18 2009\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Apparition\",\"Source\":\"Based on Real Life Events\",\"Major Genre\":\"Drama\",\"Creative Type\":\"Dramatization\",\"Director\":null,\"Rotten Tomatoes Rating\":76,\"IMDB Rating\":7.2,\"IMDB Votes\":8408},{\"Title\":\"Zathura\",\"US Gross\":28045540,\"Worldwide Gross\":58545540,\"US DVD Sales\":22025352,\"Production Budget\":65000000,\"Release Date\":\"Nov 11 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":113,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Fantasy\",\"Director\":\"Jon Favreau\",\"Rotten Tomatoes Rating\":75,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Zero Effect\",\"US Gross\":2080693,\"Worldwide Gross\":2080693,\"US DVD Sales\":null,\"Production Budget\":5000000,\"Release Date\":\"Jan 30 1998\",\"MPAA Rating\":\"R\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":null,\"Rotten Tomatoes Rating\":66,\"IMDB Rating\":6.8,\"IMDB Votes\":8489},{\"Title\":\"Zoolander\",\"US Gross\":45172250,\"Worldwide Gross\":60780981,\"US DVD Sales\":null,\"Production Budget\":28000000,\"Release Date\":\"Sep 28 2001\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":89,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Ben Stiller\",\"Rotten Tomatoes Rating\":62,\"IMDB Rating\":6.4,\"IMDB Votes\":69296},{\"Title\":\"Zombieland\",\"US Gross\":75590286,\"Worldwide Gross\":98690286,\"US DVD Sales\":28281155,\"Production Budget\":23600000,\"Release Date\":\"Oct 02 2009\",\"MPAA Rating\":\"R\",\"Running Time min\":87,\"Distributor\":\"Sony Pictures\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Fantasy\",\"Director\":\"Ruben Fleischer\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":7.8,\"IMDB Votes\":81629},{\"Title\":\"Zack and Miri Make a Porno\",\"US Gross\":31452765,\"Worldwide Gross\":36851125,\"US DVD Sales\":21240321,\"Production Budget\":24000000,\"Release Date\":\"Oct 31 2008\",\"MPAA Rating\":\"R\",\"Running Time min\":101,\"Distributor\":\"Weinstein Co.\",\"Source\":\"Original Screenplay\",\"Major Genre\":\"Comedy\",\"Creative Type\":\"Contemporary Fiction\",\"Director\":\"Kevin Smith\",\"Rotten Tomatoes Rating\":65,\"IMDB Rating\":7,\"IMDB Votes\":55687},{\"Title\":\"Zodiac\",\"US Gross\":33080084,\"Worldwide Gross\":83080084,\"US DVD Sales\":20983030,\"Production Budget\":85000000,\"Release Date\":\"Mar 02 2007\",\"MPAA Rating\":\"R\",\"Running Time min\":157,\"Distributor\":\"Paramount Pictures\",\"Source\":\"Based on Book/Short Story\",\"Major Genre\":\"Thriller/Suspense\",\"Creative Type\":\"Dramatization\",\"Director\":\"David Fincher\",\"Rotten Tomatoes Rating\":89,\"IMDB Rating\":null,\"IMDB Votes\":null},{\"Title\":\"Zoom\",\"US Gross\":11989328,\"Worldwide Gross\":12506188,\"US DVD Sales\":6679409,\"Production Budget\":35000000,\"Release Date\":\"Aug 11 2006\",\"MPAA Rating\":\"PG\",\"Running Time min\":null,\"Distributor\":\"Sony Pictures\",\"Source\":\"Based on Comic/Graphic Novel\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Super Hero\",\"Director\":\"Peter Hewitt\",\"Rotten Tomatoes Rating\":3,\"IMDB Rating\":3.4,\"IMDB Votes\":7424},{\"Title\":\"The Legend of Zorro\",\"US Gross\":45575336,\"Worldwide Gross\":141475336,\"US DVD Sales\":null,\"Production Budget\":80000000,\"Release Date\":\"Oct 28 2005\",\"MPAA Rating\":\"PG\",\"Running Time min\":129,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Martin Campbell\",\"Rotten Tomatoes Rating\":26,\"IMDB Rating\":5.7,\"IMDB Votes\":21161},{\"Title\":\"The Mask of Zorro\",\"US Gross\":93828745,\"Worldwide Gross\":233700000,\"US DVD Sales\":null,\"Production Budget\":65000000,\"Release Date\":\"Jul 17 1998\",\"MPAA Rating\":\"PG-13\",\"Running Time min\":136,\"Distributor\":\"Sony Pictures\",\"Source\":\"Remake\",\"Major Genre\":\"Adventure\",\"Creative Type\":\"Historical Fiction\",\"Director\":\"Martin Campbell\",\"Rotten Tomatoes Rating\":82,\"IMDB Rating\":6.7,\"IMDB Votes\":4789}],\"anchored\":true,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-78\",\"displayId\":\"movie-profits\",\"names\":[\"Production Budget\",\"Profit\",\"Title\",\"Worldwide Gross\"],\"rows\":[{\"Production Budget\":237000000,\"Profit\":2530891499,\"Title\":\"Avatar\",\"Worldwide Gross\":2767891499},{\"Production Budget\":200000000,\"Profit\":1642879955,\"Title\":\"Titanic\",\"Worldwide Gross\":1842879955},{\"Production Budget\":94000000,\"Profit\":1039027325,\"Title\":\"The Lord of the Rings: The Return of the King\",\"Worldwide Gross\":1133027325},{\"Production Budget\":63000000,\"Profit\":860067947,\"Title\":\"Jurassic Park\",\"Worldwide Gross\":923067947},{\"Production Budget\":125000000,\"Profit\":851457891,\"Title\":\"Harry Potter and the Sorcerer's Stone\",\"Worldwide Gross\":976457891},{\"Production Budget\":70000000,\"Profit\":849838758,\"Title\":\"Shrek 2\",\"Worldwide Gross\":919838758},{\"Production Budget\":200000000,\"Profit\":846340665,\"Title\":\"Toy Story 3\",\"Worldwide Gross\":1046340665},{\"Production Budget\":225000000,\"Profit\":840659812,\"Title\":\"Pirates of the Caribbean: Dead Man's Chest\",\"Worldwide Gross\":1065659812},{\"Production Budget\":185000000,\"Profit\":837345358,\"Title\":\"The Dark Knight\",\"Worldwide Gross\":1022345358},{\"Production Budget\":94000000,\"Profit\":832284377,\"Title\":\"The Lord of the Rings: The Two Towers\",\"Worldwide Gross\":926284377},{\"Production Budget\":200000000,\"Profit\":823291110,\"Title\":\"Alice in Wonderland\",\"Worldwide Gross\":1023291110},{\"Production Budget\":115000000,\"Profit\":809288297,\"Title\":\"Star Wars Ep. I: The Phantom Menace\",\"Worldwide Gross\":924288297},{\"Production Budget\":90000000,\"Profit\":796685941,\"Title\":\"Ice Age: Dawn of the Dinosaurs\",\"Worldwide Gross\":886685941},{\"Production Budget\":150000000,\"Profit\":788468864,\"Title\":\"Harry Potter and the Order of the Phoenix\",\"Worldwide Gross\":938468864},{\"Production Budget\":11000000,\"Profit\":786900000,\"Title\":\"Star Wars Ep. IV: A New Hope\",\"Worldwide Gross\":797900000},{\"Production Budget\":10500000,\"Profit\":782410554,\"Title\":\"ET: The Extra-Terrestrial\",\"Worldwide Gross\":792910554},{\"Production Budget\":100000000,\"Profit\":778987880,\"Title\":\"Harry Potter and the Chamber of Secrets\",\"Worldwide Gross\":878987880},{\"Production Budget\":94000000,\"Profit\":773894287,\"Title\":\"Finding Nemo\",\"Worldwide Gross\":867894287},{\"Production Budget\":109000000,\"Profit\":759621686,\"Title\":\"The Lord of the Rings: The Fellowship of the Ring\",\"Worldwide Gross\":868621686},{\"Production Budget\":150000000,\"Profit\":746013036,\"Title\":\"Harry Potter and the Goblet of Fire\",\"Worldwide Gross\":896013036},{\"Production Budget\":75000000,\"Profit\":742400878,\"Title\":\"Independence Day\",\"Worldwide Gross\":817400878},{\"Production Budget\":115000000,\"Profit\":733998877,\"Title\":\"Star Wars Ep. III: Revenge of the Sith\",\"Worldwide Gross\":848998877},{\"Production Budget\":75000000,\"Profit\":711686679,\"Title\":\"The Lost World: Jurassic Park\",\"Worldwide Gross\":786686679},{\"Production Budget\":79300000,\"Profit\":704539505,\"Title\":\"The Lion King\",\"Worldwide Gross\":783839505},{\"Production Budget\":250000000,\"Profit\":687499905,\"Title\":\"Harry Potter and the Half-Blood Prince\",\"Worldwide Gross\":937499905},{\"Production Budget\":139000000,\"Profit\":682708551,\"Title\":\"Spider-Man\",\"Worldwide Gross\":821708551},{\"Production Budget\":130000000,\"Profit\":665538952,\"Title\":\"Harry Potter and the Prisoner of Azkaban\",\"Worldwide Gross\":795538952},{\"Production Budget\":300000000,\"Profit\":660996492,\"Title\":\"Pirates of the Caribbean: At World's End\",\"Worldwide Gross\":960996492},{\"Production Budget\":50000000,\"Profit\":652623634,\"Title\":\"The Twilight Saga: New Moon\",\"Worldwide Gross\":702623634},{\"Production Budget\":160000000,\"Profit\":638958162,\"Title\":\"Shrek the Third\",\"Worldwide Gross\":798958162}],\"metadata\":{\"Production Budget\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Profit\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Title\":{\"type\":\"string\",\"semanticType\":\"Name\"},\"Worldwide Gross\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df_movies['Profit'] = df_movies['Worldwide Gross'] - df_movies['Production Budget']\\n    \\n    # Remove rows with missing values in required columns\\n    df_filtered = df_movies.dropna(subset=['Profit', 'Production Budget', 'Worldwide Gross', 'Title'])\\n    \\n    # Sort by profit in descending order and select top 30\\n    df_top30 = df_filtered.nlargest(30, 'Profit')\\n    \\n    # Select only the required output fields\\n    transformed_df = df_top30[['Title', 'Production Budget', 'Worldwide Gross', 'Profit']].reset_index(drop=True)\\n    \\n    return transformed_df\\n\",\"source\":[\"movies\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 380270577.0, 402111870.0, 533345358.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 937499905.0, 1133027325.0, 1842879955.0, 2767891499.0\\n\\t*US DVD Sales -- type: float64, values: 33619971.0, 140689412.0, nan, ..., nan, nan, 46260220.0, nan\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 23000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, nan, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: 1.5, 2.0, 2.5, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 237477.0, 417703.0, 519541.0, nan\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\n{\\n    \\\"instruction\\\": \\\"show top 30 movies based on their profit\\\",\\n    \\\"chart_type\\\": \\\"Scatter Plot\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Production Budget\\\",\\n        \\\"y\\\": \\\"Worldwide Gross\\\",\\n        \\\"color\\\": \\\"Title\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Calculate the profit for each movie (Worldwide Gross minus Production Budget), then select the top 30 movies with the highest profit. Display these movies with their Production Budget, Worldwide Gross, and Title to visualize the relationship between budget and revenue for the most profitable films.\\\",\\n    \\\"display_instruction\\\": \\\"Show top 30 movies by **profit** with their **Production Budget** and **Worldwide Gross**\\\",\\n    \\\"output_fields\\\": [\\\"Title\\\", \\\"Production Budget\\\", \\\"Worldwide Gross\\\", \\\"Profit\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Production Budget\\\",\\n        \\\"y\\\": \\\"Worldwide Gross\\\",\\n        \\\"color\\\": \\\"Title\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to show top 30 movies based on profit, which requires calculating profit as the difference between Worldwide Gross and Production Budget. The chart encodings provided are sufficient to visualize the most profitable movies, showing the relationship between their budget and gross revenue. An intermediate field 'Profit' is added to output_fields to enable the top 30 selection, though it won't be directly visualized in the chart.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df_movies['Profit'] = df_movies['Worldwide Gross'] - df_movies['Production Budget']\\n    \\n    # Remove rows with missing values in required columns\\n    df_filtered = df_movies.dropna(subset=['Profit', 'Production Budget', 'Worldwide Gross', 'Title'])\\n    \\n    # Sort by profit in descending order and select top 30\\n    df_top30 = df_filtered.nlargest(30, 'Profit')\\n    \\n    # Select only the required output fields\\n    transformed_df = df_top30[['Title', 'Production Budget', 'Worldwide Gross', 'Profit']].reset_index(drop=True)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"movies\",\"sourceTableIds\":[\"movies\"],\"instruction\":\"show top 30 movies based on their profit\",\"displayInstruction\":\"Show top 30 movies by **profit** with their **Production Budget** and **Worldwide Gross**\",\"chart\":{\"id\":\"chart-1760743154092\",\"chartType\":\"Scatter Plot\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--movies--Production Budget\"},\"y\":{\"fieldID\":\"original--movies--Worldwide Gross\"},\"color\":{\"fieldID\":\"original--movies--Title\"},\"size\":{\"channel\":\"size\",\"bin\":false},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"movies\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-78\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"The code identifies the most financially successful movies by analyzing their profitability:\\n\\n- Calculate **Profit** for each movie by subtracting **Production Budget** from **Worldwide Gross**\\n- Filter out movies with missing values in **Profit**, **Production Budget**, **Worldwide Gross**, or **Title** fields\\n- Sort all movies by **Profit** in descending order and select the **top 30** most profitable movies\\n- Return a simplified dataset containing only **Title**, **Production Budget**, **Worldwide Gross**, and **Profit** for these top performers\",\"concepts\":[{\"explanation\":\"The net financial gain from a movie, calculated as the difference between worldwide box office revenue and production costs: \\\\( \\\\text{Profit} = \\\\text{Worldwide\\\\_Gross} - \\\\text{Production\\\\_Budget} \\\\). This metric represents the pure theatrical profitability before accounting for marketing costs, distribution fees, or ancillary revenue streams like DVD sales.\",\"field\":\"Profit\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 441226247.0, 533345358.0, 600788188.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 1065659812.0, 1133027325.0, 1842879955.0, 2767891499.0\\n\\t*US DVD Sales -- type: float64, values: 2638319.0, 3907625.0, 4653193.0, ..., 124058348.0, 153389976.0, 234119058.0, 320830925.0\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 23000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: 46.0, 72.0, 74.0, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, 3.0, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: 1.5, 2.5, 3.0, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 261439.0, 292562.0, 417703.0, 519541.0\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df_movies['Profit'] = df_movies['Worldwide Gross'] - df_movies['Production Budget']\\n    \\n    # Remove rows with missing values in required columns\\n    df_filtered = df_movies.dropna(subset=['Profit', 'Production Budget', 'Worldwide Gross', 'Title'])\\n    \\n    # Sort by profit in descending order and select top 30\\n    df_top30 = df_filtered.nlargest(30, 'Profit')\\n    \\n    # Select only the required output fields\\n    transformed_df = df_top30[['Title', 'Production Budget', 'Worldwide Gross', 'Profit']].reset_index(drop=True)\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThe code identifies the most financially successful movies by analyzing their profitability:\\n\\n- Calculate **Profit** for each movie by subtracting **Production Budget** from **Worldwide Gross**\\n- Filter out movies with missing values in **Profit**, **Production Budget**, **Worldwide Gross**, or **Title** fields\\n- Sort all movies by **Profit** in descending order and select the **top 30** most profitable movies\\n- Return a simplified dataset containing only **Title**, **Production Budget**, **Worldwide Gross**, and **Profit** for these top performers\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"Profit\\\",\\n        \\\"explanation\\\": \\\"The net financial gain from a movie, calculated as the difference between worldwide box office revenue and production costs: \\\\\\\\( \\\\\\\\text{Profit} = \\\\\\\\text{Worldwide\\\\\\\\_Gross} - \\\\\\\\text{Production\\\\\\\\_Budget} \\\\\\\\). This metric represents the pure theatrical profitability before accounting for marketing costs, distribution fees, or ancillary revenue streams like DVD sales.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-77\",\"displayId\":\"movie-profits1\",\"names\":[\"Major Genre\",\"Production Budget\",\"Profit\",\"Title\",\"Worldwide Gross\"],\"rows\":[{\"Major Genre\":\"Action\",\"Production Budget\":237000000,\"Profit\":2530891499,\"Title\":\"Avatar\",\"Worldwide Gross\":2767891499},{\"Major Genre\":\"Action\",\"Production Budget\":63000000,\"Profit\":860067947,\"Title\":\"Jurassic Park\",\"Worldwide Gross\":923067947},{\"Major Genre\":\"Action\",\"Production Budget\":185000000,\"Profit\":837345358,\"Title\":\"The Dark Knight\",\"Worldwide Gross\":1022345358},{\"Major Genre\":\"Adventure\",\"Production Budget\":94000000,\"Profit\":1039027325,\"Title\":\"The Lord of the Rings: The Return of the King\",\"Worldwide Gross\":1133027325},{\"Major Genre\":\"Adventure\",\"Production Budget\":125000000,\"Profit\":851457891,\"Title\":\"Harry Potter and the Sorcerer's Stone\",\"Worldwide Gross\":976457891},{\"Major Genre\":\"Adventure\",\"Production Budget\":70000000,\"Profit\":849838758,\"Title\":\"Shrek 2\",\"Worldwide Gross\":919838758},{\"Major Genre\":\"Black Comedy\",\"Production Budget\":37000000,\"Profit\":126415735,\"Title\":\"Burn After Reading\",\"Worldwide Gross\":163415735},{\"Major Genre\":\"Black Comedy\",\"Production Budget\":10000000,\"Profit\":73593107,\"Title\":\"Snatch\",\"Worldwide Gross\":83593107},{\"Major Genre\":\"Black Comedy\",\"Production Budget\":28000000,\"Profit\":43430876,\"Title\":\"The Royal Tenenbaums\",\"Worldwide Gross\":71430876},{\"Major Genre\":\"Comedy\",\"Production Budget\":28000000,\"Profit\":476050219,\"Title\":\"Aladdin\",\"Worldwide Gross\":504050219},{\"Major Genre\":\"Comedy\",\"Production Budget\":150000000,\"Profit\":470495432,\"Title\":\"Ratatouille\",\"Worldwide Gross\":620495432},{\"Major Genre\":\"Comedy\",\"Production Budget\":110000000,\"Profit\":464480841,\"Title\":\"Night at the Museum\",\"Worldwide Gross\":574480841},{\"Major Genre\":\"Concert/Performance\",\"Production Budget\":6500000,\"Profit\":64781781,\"Title\":\"Hannah Montana/Miley Cyrus: Best of Both Worlds Concert Tour\",\"Worldwide Gross\":71281781},{\"Major Genre\":\"Concert/Performance\",\"Production Budget\":3000000,\"Profit\":35236338,\"Title\":\"The Original Kings of Comedy\",\"Worldwide Gross\":38236338},{\"Major Genre\":\"Concert/Performance\",\"Production Budget\":3000000,\"Profit\":16184820,\"Title\":\"Martin Lawrence Live: RunTelDat\",\"Worldwide Gross\":19184820},{\"Major Genre\":\"Documentary\",\"Production Budget\":6000000,\"Profit\":216414517,\"Title\":\"Fahrenheit 9/11\",\"Worldwide Gross\":222414517},{\"Major Genre\":\"Documentary\",\"Production Budget\":3400000,\"Profit\":126037223,\"Title\":\"La marche de l'empereur\",\"Worldwide Gross\":129437223},{\"Major Genre\":\"Documentary\",\"Production Budget\":3000000,\"Profit\":55576018,\"Title\":\"Bowling for Columbine\",\"Worldwide Gross\":58576018},{\"Major Genre\":\"Drama\",\"Production Budget\":10500000,\"Profit\":782410554,\"Title\":\"ET: The Extra-Terrestrial\",\"Worldwide Gross\":792910554},{\"Major Genre\":\"Drama\",\"Production Budget\":50000000,\"Profit\":652623634,\"Title\":\"The Twilight Saga: New Moon\",\"Worldwide Gross\":702623634},{\"Major Genre\":\"Drama\",\"Production Budget\":55000000,\"Profit\":624400525,\"Title\":\"Forrest Gump\",\"Worldwide Gross\":679400525},{\"Major Genre\":\"Horror\",\"Production Budget\":12000000,\"Profit\":458700000,\"Title\":\"Jaws\",\"Worldwide Gross\":470700000},{\"Major Genre\":\"Horror\",\"Production Budget\":150000000,\"Profit\":435055701,\"Title\":\"I am Legend\",\"Worldwide Gross\":585055701},{\"Major Genre\":\"Horror\",\"Production Budget\":12000000,\"Profit\":390500000,\"Title\":\"The Exorcist\",\"Worldwide Gross\":402500000},{\"Major Genre\":\"Musical\",\"Production Budget\":20000000,\"Profit\":383476931,\"Title\":\"Beauty and the Beast\",\"Worldwide Gross\":403476931},{\"Major Genre\":\"Musical\",\"Production Budget\":8200000,\"Profit\":278014286,\"Title\":\"The Sound of Music\",\"Worldwide Gross\":286214286},{\"Major Genre\":\"Musical\",\"Production Budget\":30000000,\"Profit\":277687518,\"Title\":\"Chicago\",\"Worldwide Gross\":307687518},{\"Major Genre\":\"Romantic Comedy\",\"Production Budget\":14000000,\"Profit\":449400000,\"Title\":\"Pretty Woman\",\"Worldwide Gross\":463400000},{\"Major Genre\":\"Romantic Comedy\",\"Production Budget\":5000000,\"Profit\":363744044,\"Title\":\"My Big Fat Greek Wedding\",\"Worldwide Gross\":368744044},{\"Major Genre\":\"Romantic Comedy\",\"Production Budget\":22000000,\"Profit\":338099999,\"Title\":\"There's Something About Mary\",\"Worldwide Gross\":360099999},{\"Major Genre\":\"Thriller/Suspense\",\"Production Budget\":200000000,\"Profit\":1642879955,\"Title\":\"Titanic\",\"Worldwide Gross\":1842879955},{\"Major Genre\":\"Thriller/Suspense\",\"Production Budget\":40000000,\"Profit\":632806292,\"Title\":\"The Sixth Sense\",\"Worldwide Gross\":672806292},{\"Major Genre\":\"Thriller/Suspense\",\"Production Budget\":125000000,\"Profit\":632236138,\"Title\":\"The Da Vinci Code\",\"Worldwide Gross\":757236138},{\"Major Genre\":\"Western\",\"Production Budget\":19000000,\"Profit\":405200000,\"Title\":\"Dances with Wolves\",\"Worldwide Gross\":424200000},{\"Major Genre\":\"Western\",\"Production Budget\":6000000,\"Profit\":96308900,\"Title\":\"Butch Cassidy and the Sundance Kid\",\"Worldwide Gross\":102308900},{\"Major Genre\":\"Western\",\"Production Budget\":26000000,\"Profit\":42293719,\"Title\":\"Open Range\",\"Worldwide Gross\":68293719}],\"metadata\":{\"Major Genre\":{\"type\":\"string\",\"semanticType\":\"String\"},\"Production Budget\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Profit\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Title\":{\"type\":\"string\",\"semanticType\":\"Name\"},\"Worldwide Gross\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df_movies['Profit'] = df_movies['Worldwide Gross'] - df_movies['Production Budget']\\n    \\n    # Remove rows with missing values in required columns\\n    df_filtered = df_movies.dropna(subset=['Profit', 'Production Budget', 'Worldwide Gross', 'Title', 'Major Genre'])\\n    \\n    # Group by Major Genre and select top 3 most profitable movies from each genre\\n    transformed_df = df_filtered.groupby('Major Genre', group_keys=False).apply(\\n        lambda x: x.nlargest(3, 'Profit')\\n    ).reset_index(drop=True)\\n    \\n    # Select only the required output fields\\n    transformed_df = transformed_df[['Title', 'Major Genre', 'Profit', 'Production Budget', 'Worldwide Gross']]\\n    \\n    return transformed_df\\n\",\"source\":[\"movies\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 380270577.0, 402111870.0, 533345358.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 937499905.0, 1133027325.0, 1842879955.0, 2767891499.0\\n\\t*US DVD Sales -- type: float64, values: 33619971.0, 140689412.0, nan, ..., nan, nan, 46260220.0, nan\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 23000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, nan, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: 1.5, 2.0, 2.5, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 237477.0, 417703.0, 519541.0, nan\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\n{\\n    \\\"instruction\\\": \\\"show top 30 movies based on their profit\\\",\\n    \\\"chart_type\\\": \\\"Scatter Plot\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Production Budget\\\",\\n        \\\"y\\\": \\\"Worldwide Gross\\\",\\n        \\\"color\\\": \\\"Title\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Calculate the profit for each movie (Worldwide Gross minus Production Budget), then select the top 30 movies with the highest profit. Display these movies with their Production Budget, Worldwide Gross, and Title to visualize the relationship between budget and revenue for the most profitable films.\\\",\\n    \\\"display_instruction\\\": \\\"Show top 30 movies by **profit** with their **Production Budget** and **Worldwide Gross**\\\",\\n    \\\"output_fields\\\": [\\\"Title\\\", \\\"Production Budget\\\", \\\"Worldwide Gross\\\", \\\"Profit\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Production Budget\\\",\\n        \\\"y\\\": \\\"Worldwide Gross\\\",\\n        \\\"color\\\": \\\"Title\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to show top 30 movies based on profit, which requires calculating profit as the difference between Worldwide Gross and Production Budget. The chart encodings provided are sufficient to visualize the most profitable movies, showing the relationship between their budget and gross revenue. An intermediate field 'Profit' is added to output_fields to enable the top 30 selection, though it won't be directly visualized in the chart.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df_movies['Profit'] = df_movies['Worldwide Gross'] - df_movies['Production Budget']\\n    \\n    # Remove rows with missing values in required columns\\n    df_filtered = df_movies.dropna(subset=['Profit', 'Production Budget', 'Worldwide Gross', 'Title'])\\n    \\n    # Sort by profit in descending order and select top 30\\n    df_top30 = df_filtered.nlargest(30, 'Profit')\\n    \\n    # Select only the required output fields\\n    transformed_df = df_top30[['Title', 'Production Budget', 'Worldwide Gross', 'Profit']].reset_index(drop=True)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n   Production Budget      Profit                                          Title  Worldwide Gross\\n0          237000000  2530891499                                         Avatar       2767891499\\n1          200000000  1642879955                                        Titanic       1842879955\\n2           94000000  1039027325  The Lord of the Rings: The Return of the King       1133027325\\n3           63000000   860067947                                  Jurassic Park        923067947\\n4          125000000   851457891          Harry Potter and the Sorcerer's Stone        976457891\\n5           70000000   849838758                                        Shrek 2        919838758\\n6          200000000   846340665                                    Toy Story 3       1046340665\\n7          225000000   840659812     Pirates of the Caribbean: Dead Man's Chest       1065659812\\n8          185000000   837345358                                The Dark Knight       1022345358\\n9           94000000   832284377          The Lord of the Rings: The Two Towers        926284377\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"show the top 3 most profitable movies from each genre\\\",\\n    \\\"chart_type\\\": \\\"Bar Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Title\\\",\\n        \\\"y\\\": \\\"Profit\\\",\\n        \\\"color\\\": \\\"Production Budget\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Calculate the profit for each movie (Worldwide Gross minus Production Budget), then group movies by their Major Genre and select the top 3 most profitable movies from each genre. Display these movies with their Title, Profit, Production Budget, Major Genre, and Worldwide Gross.\\\",\\n    \\\"display_instruction\\\": \\\"Show top 3 most profitable movies from each **Major Genre**\\\",\\n    \\\"output_fields\\\": [\\\"Title\\\", \\\"Major Genre\\\", \\\"Profit\\\", \\\"Production Budget\\\", \\\"Worldwide Gross\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Title\\\",\\n        \\\"y\\\": \\\"Profit\\\",\\n        \\\"color\\\": \\\"Major Genre\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to see the top 3 most profitable movies from each genre, which builds upon the previous profit calculation. The chart encodings are updated to use 'Major Genre' for color instead of 'Production Budget' because when showing top movies by genre, it's more meaningful to distinguish them by genre in the visualization. The Major Genre field is added to output_fields to enable grouping and visualization by genre.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df_movies['Profit'] = df_movies['Worldwide Gross'] - df_movies['Production Budget']\\n    \\n    # Remove rows with missing values in required columns\\n    df_filtered = df_movies.dropna(subset=['Profit', 'Production Budget', 'Worldwide Gross', 'Title', 'Major Genre'])\\n    \\n    # Group by Major Genre and select top 3 most profitable movies from each genre\\n    transformed_df = df_filtered.groupby('Major Genre', group_keys=False).apply(\\n        lambda x: x.nlargest(3, 'Profit')\\n    ).reset_index(drop=True)\\n    \\n    # Select only the required output fields\\n    transformed_df = transformed_df[['Title', 'Major Genre', 'Profit', 'Production Budget', 'Worldwide Gross']]\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"table-78\",\"sourceTableIds\":[\"movies\"],\"instruction\":\"show the top 3 most profitable movies from each genre\",\"displayInstruction\":\"Show top 3 most profitable movies from each **Major Genre**\",\"chart\":{\"id\":\"chart-1760743349594\",\"chartType\":\"Bar Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--movies--Title\"},\"y\":{\"fieldID\":\"concept-Profit-1760742653681\"},\"color\":{\"fieldID\":\"original--movies--Production Budget\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-78\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-77\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"This code performs a profitability analysis to identify the most successful movies in each genre:\\n\\n- **Calculate Profit**: Computes the **Profit** for each movie by subtracting **Production Budget** from **Worldwide Gross**\\n- **Filter Data**: Removes movies with missing values in **Profit**, **Production Budget**, **Worldwide Gross**, **Title**, or **Major Genre** to ensure complete data for analysis\\n- **Group by Genre**: Groups all movies by their **Major Genre** (e.g., Action, Comedy, Drama)\\n- **Select Top Performers**: Within each genre, identifies the **top 3** movies with the highest **Profit**\\n- **Format Output**: Returns a focused dataset containing only **Title**, **Major Genre**, **Profit**, **Production Budget**, and **Worldwide Gross** for these top-performing movies\",\"concepts\":[{\"explanation\":\"The net financial gain from a movie's theatrical release, calculated as the difference between worldwide box office revenue and production costs: \\\\( \\\\text{Profit} = \\\\text{Worldwide\\\\_Gross} - \\\\text{Production\\\\_Budget} \\\\). This metric indicates the commercial success of a film before accounting for marketing costs and revenue sharing.\",\"field\":\"Profit\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 403706375.0, 441226247.0, 533345358.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 937499905.0, 976457891.0, 1133027325.0, 1842879955.0\\n\\t*US DVD Sales -- type: float64, values: nan, 140689412.0, nan, ..., 44145849.0, nan, nan, 46260220.0\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 5000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, nan, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: 1.5, 2.5, 3.0, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 237477.0, 417703.0, nan, nan\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df_movies['Profit'] = df_movies['Worldwide Gross'] - df_movies['Production Budget']\\n    \\n    # Remove rows with missing values in required columns\\n    df_filtered = df_movies.dropna(subset=['Profit', 'Production Budget', 'Worldwide Gross', 'Title', 'Major Genre'])\\n    \\n    # Group by Major Genre and select top 3 most profitable movies from each genre\\n    transformed_df = df_filtered.groupby('Major Genre', group_keys=False).apply(\\n        lambda x: x.nlargest(3, 'Profit')\\n    ).reset_index(drop=True)\\n    \\n    # Select only the required output fields\\n    transformed_df = transformed_df[['Title', 'Major Genre', 'Profit', 'Production Budget', 'Worldwide Gross']]\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThis code performs a profitability analysis to identify the most successful movies in each genre:\\n\\n- **Calculate Profit**: Computes the **Profit** for each movie by subtracting **Production Budget** from **Worldwide Gross**\\n- **Filter Data**: Removes movies with missing values in **Profit**, **Production Budget**, **Worldwide Gross**, **Title**, or **Major Genre** to ensure complete data for analysis\\n- **Group by Genre**: Groups all movies by their **Major Genre** (e.g., Action, Comedy, Drama)\\n- **Select Top Performers**: Within each genre, identifies the **top 3** movies with the highest **Profit**\\n- **Format Output**: Returns a focused dataset containing only **Title**, **Major Genre**, **Profit**, **Production Budget**, and **Worldwide Gross** for these top-performing movies\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"Profit\\\",\\n        \\\"explanation\\\": \\\"The net financial gain from a movie's theatrical release, calculated as the difference between worldwide box office revenue and production costs: \\\\\\\\( \\\\\\\\text{Profit} = \\\\\\\\text{Worldwide\\\\\\\\_Gross} - \\\\\\\\text{Production\\\\\\\\_Budget} \\\\\\\\). This metric indicates the commercial success of a film before accounting for marketing costs and revenue sharing.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-770727\",\"displayId\":\"director-profit\",\"names\":[\"Director\",\"Profit\",\"Title\",\"Total_Director_Profit\"],\"rows\":[{\"Director\":\"Steven Spielberg\",\"Profit\":860067947,\"Title\":\"Jurassic Park\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":782410554,\"Title\":\"ET: The Extra-Terrestrial\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":711686679,\"Title\":\"The Lost World: Jurassic Park\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":601558145,\"Title\":\"Indiana Jones and the Kingdom of the Crystal Skull\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":459745532,\"Title\":\"The War of the Worlds\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":458700000,\"Title\":\"Jaws\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":426171806,\"Title\":\"Indiana Jones and the Last Crusade\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":416635085,\"Title\":\"Saving Private Ryan\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":366800358,\"Title\":\"Raiders of the Lost Ark\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":317700000,\"Title\":\"Close Encounters of the Third Kind\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":305080271,\"Title\":\"Indiana Jones and the Temple of Doom\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":299106800,\"Title\":\"Catch Me if You Can\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":296200000,\"Title\":\"Schindler's List\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":256824714,\"Title\":\"Minority Report\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":230854823,\"Title\":\"Hook\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":145900000,\"Title\":\"Artificial Intelligence: AI\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":143673959,\"Title\":\"The Terminal\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":78589701,\"Title\":\"The Color Purple\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":62875000,\"Title\":1941,\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":55279090,\"Title\":\"Munich\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":19500000,\"Title\":\"Twilight Zone: The Movie\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":4212592,\"Title\":\"Amistad\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Profit\":-130000000,\"Title\":\"The Adventures of Tintin: Secret of the Unicorn\",\"Total_Director_Profit\":7169573056},{\"Director\":\"James Cameron\",\"Profit\":2530891499,\"Title\":\"Avatar\",\"Total_Director_Profit\":5078066216},{\"Director\":\"James Cameron\",\"Profit\":1642879955,\"Title\":\"Titanic\",\"Total_Director_Profit\":5078066216},{\"Director\":\"James Cameron\",\"Profit\":416816151,\"Title\":\"Terminator 2: Judgment Day\",\"Total_Director_Profit\":5078066216},{\"Director\":\"James Cameron\",\"Profit\":265300000,\"Title\":\"True Lies\",\"Total_Director_Profit\":5078066216},{\"Director\":\"James Cameron\",\"Profit\":166316455,\"Title\":\"Aliens\",\"Total_Director_Profit\":5078066216},{\"Director\":\"James Cameron\",\"Profit\":71619031,\"Title\":\"The Terminator\",\"Total_Director_Profit\":5078066216},{\"Director\":\"James Cameron\",\"Profit\":-15756875,\"Title\":\"The Abyss\",\"Total_Director_Profit\":5078066216},{\"Director\":\"Chris Columbus\",\"Profit\":851457891,\"Title\":\"Harry Potter and the Sorcerer's Stone\",\"Total_Director_Profit\":3036030427},{\"Director\":\"Chris Columbus\",\"Profit\":778987880,\"Title\":\"Harry Potter and the Chamber of Secrets\",\"Total_Director_Profit\":3036030427},{\"Director\":\"Chris Columbus\",\"Profit\":461684675,\"Title\":\"Home Alone\",\"Total_Director_Profit\":3036030427},{\"Director\":\"Chris Columbus\",\"Profit\":416286003,\"Title\":\"Mrs. Doubtfire\",\"Total_Director_Profit\":3036030427},{\"Director\":\"Chris Columbus\",\"Profit\":338994850,\"Title\":\"Home Alone 2: Lost in New York\",\"Total_Director_Profit\":3036030427},{\"Director\":\"Chris Columbus\",\"Profit\":131435277,\"Title\":\"Percy Jackson & the Olympians: The Lightning Thief\",\"Total_Director_Profit\":3036030427},{\"Director\":\"Chris Columbus\",\"Profit\":69709917,\"Title\":\"Stepmom\",\"Total_Director_Profit\":3036030427},{\"Director\":\"Chris Columbus\",\"Profit\":-1617462,\"Title\":\"I Love You, Beth Cooper\",\"Total_Director_Profit\":3036030427},{\"Director\":\"Chris Columbus\",\"Profit\":-2579224,\"Title\":\"Bicentennial Man\",\"Total_Director_Profit\":3036030427},{\"Director\":\"Chris Columbus\",\"Profit\":-8329380,\"Title\":\"Rent\",\"Total_Director_Profit\":3036030427},{\"Director\":\"George Lucas\",\"Profit\":809288297,\"Title\":\"Star Wars Ep. I: The Phantom Menace\",\"Total_Director_Profit\":3011105789},{\"Director\":\"George Lucas\",\"Profit\":786900000,\"Title\":\"Star Wars Ep. IV: A New Hope\",\"Total_Director_Profit\":3011105789},{\"Director\":\"George Lucas\",\"Profit\":733998877,\"Title\":\"Star Wars Ep. III: Revenge of the Sith\",\"Total_Director_Profit\":3011105789},{\"Director\":\"George Lucas\",\"Profit\":541695615,\"Title\":\"Star Wars Ep. II: Attack of the Clones\",\"Total_Director_Profit\":3011105789},{\"Director\":\"George Lucas\",\"Profit\":139223000,\"Title\":\"American Graffiti\",\"Total_Director_Profit\":3011105789},{\"Director\":\"Peter Jackson\",\"Profit\":1039027325,\"Title\":\"The Lord of the Rings: The Return of the King\",\"Total_Director_Profit\":3001395936},{\"Director\":\"Peter Jackson\",\"Profit\":832284377,\"Title\":\"The Lord of the Rings: The Two Towers\",\"Total_Director_Profit\":3001395936},{\"Director\":\"Peter Jackson\",\"Profit\":759621686,\"Title\":\"The Lord of the Rings: The Fellowship of the Ring\",\"Total_Director_Profit\":3001395936},{\"Director\":\"Peter Jackson\",\"Profit\":343517357,\"Title\":\"King Kong\",\"Total_Director_Profit\":3001395936},{\"Director\":\"Peter Jackson\",\"Profit\":29702568,\"Title\":\"The Lovely Bones\",\"Total_Director_Profit\":3001395936},{\"Director\":\"Peter Jackson\",\"Profit\":-2757377,\"Title\":\"Braindead\",\"Total_Director_Profit\":3001395936},{\"Director\":\"Robert Zemeckis\",\"Profit\":624400525,\"Title\":\"Forrest Gump\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Profit\":362109762,\"Title\":\"Back to the Future\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Profit\":342230516,\"Title\":\"Cast Away\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Profit\":292000000,\"Title\":\"Back to the Future Part II\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Profit\":281500000,\"Title\":\"Who Framed Roger Rabbit?\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Profit\":203700000,\"Title\":\"Back to the Future Part III\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Profit\":198693989,\"Title\":\"What Lies Beneath\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Profit\":135420597,\"Title\":\"The Polar Express\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Profit\":133743744,\"Title\":\"Disney's A Christmas Carol\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Profit\":94022650,\"Title\":\"Death Becomes Her\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Profit\":75900000,\"Title\":\"Contact\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Profit\":44995215,\"Title\":\"Beowulf\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Michael Bay\",\"Profit\":626303693,\"Title\":\"Transformers: Revenge of the Fallen\",\"Total_Director_Profit\":2461192847},{\"Director\":\"Michael Bay\",\"Profit\":557272592,\"Title\":\"Transformers\",\"Total_Director_Profit\":2461192847},{\"Director\":\"Michael Bay\",\"Profit\":414600000,\"Title\":\"Armageddon\",\"Total_Director_Profit\":2461192847},{\"Director\":\"Michael Bay\",\"Profit\":297739855,\"Title\":\"Pearl Harbor\",\"Total_Director_Profit\":2461192847},{\"Director\":\"Michael Bay\",\"Profit\":261069511,\"Title\":\"The Rock\",\"Total_Director_Profit\":2461192847},{\"Director\":\"Michael Bay\",\"Profit\":142940870,\"Title\":\"Bad Boys II\",\"Total_Director_Profit\":2461192847},{\"Director\":\"Michael Bay\",\"Profit\":118247413,\"Title\":\"Bad Boys\",\"Total_Director_Profit\":2461192847},{\"Director\":\"Michael Bay\",\"Profit\":43018913,\"Title\":\"The Island\",\"Total_Director_Profit\":2461192847},{\"Director\":\"Roland Emmerich\",\"Profit\":742400878,\"Title\":\"Independence Day\",\"Total_Director_Profit\":2390416794},{\"Director\":\"Roland Emmerich\",\"Profit\":566812167,\"Title\":2012,\"Total_Director_Profit\":2390416794},{\"Director\":\"Roland Emmerich\",\"Profit\":419272402,\"Title\":\"The Day After Tomorrow\",\"Total_Director_Profit\":2390416794},{\"Director\":\"Roland Emmerich\",\"Profit\":251000000,\"Title\":\"Godzilla\",\"Total_Director_Profit\":2390416794},{\"Director\":\"Roland Emmerich\",\"Profit\":164065678,\"Title\":\"10,000 B.C.\",\"Total_Director_Profit\":2390416794},{\"Director\":\"Roland Emmerich\",\"Profit\":141565669,\"Title\":\"Stargate\",\"Total_Director_Profit\":2390416794},{\"Director\":\"Roland Emmerich\",\"Profit\":105300000,\"Title\":\"The Patriot\",\"Total_Director_Profit\":2390416794},{\"Director\":\"Gore Verbinski\",\"Profit\":840659812,\"Title\":\"Pirates of the Caribbean: Dead Man's Chest\",\"Total_Director_Profit\":2359931719},{\"Director\":\"Gore Verbinski\",\"Profit\":660996492,\"Title\":\"Pirates of the Caribbean: At World's End\",\"Total_Director_Profit\":2359931719},{\"Director\":\"Gore Verbinski\",\"Profit\":530011224,\"Title\":\"Pirates of the Caribbean: The Curse of the Black Pearl\",\"Total_Director_Profit\":2359931719},{\"Director\":\"Gore Verbinski\",\"Profit\":201094024,\"Title\":\"The Ring\",\"Total_Director_Profit\":2359931719},{\"Director\":\"Gore Verbinski\",\"Profit\":107808615,\"Title\":\"The Mexican\",\"Total_Director_Profit\":2359931719},{\"Director\":\"Gore Verbinski\",\"Profit\":23894591,\"Title\":\"Mouse Hunt\",\"Total_Director_Profit\":2359931719},{\"Director\":\"Gore Verbinski\",\"Profit\":-4533039,\"Title\":\"The Weather Man\",\"Total_Director_Profit\":2359931719},{\"Director\":\"Tim Burton\",\"Profit\":823291110,\"Title\":\"Alice in Wonderland\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Profit\":376348924,\"Title\":\"Batman\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Profit\":324459076,\"Title\":\"Charlie and the Chocolate Factory\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Profit\":262211740,\"Title\":\"Planet of the Apes\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Profit\":186822354,\"Title\":\"Batman Returns\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Profit\":137068340,\"Title\":\"Sleepy Hollow\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Profit\":87359111,\"Title\":\"The Corpse Bride\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Profit\":58326666,\"Title\":\"Beetle Juice\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Profit\":53432867,\"Title\":\"Big Fish\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Profit\":33976987,\"Title\":\"Edward Scissorhands\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Profit\":21371017,\"Title\":\"Mars Attacks!\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Profit\":-12171534,\"Title\":\"Ed Wood\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Andrew Adamson\",\"Profit\":849838758,\"Title\":\"Shrek 2\",\"Total_Director_Profit\":2047535219},{\"Director\":\"Andrew Adamson\",\"Profit\":568806957,\"Title\":\"The Chronicles of Narnia: The Lion, the Witch and the Wardrobe\",\"Total_Director_Profit\":2047535219},{\"Director\":\"Andrew Adamson\",\"Profit\":434399218,\"Title\":\"Shrek\",\"Total_Director_Profit\":2047535219},{\"Director\":\"Andrew Adamson\",\"Profit\":194490286,\"Title\":\"The Chronicles of Narnia: Prince Caspian\",\"Total_Director_Profit\":2047535219},{\"Director\":\"Sam Raimi\",\"Profit\":682708551,\"Title\":\"Spider-Man\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Profit\":632871626,\"Title\":\"Spider-Man 3\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Profit\":583705001,\"Title\":\"Spider-Man 2\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Profit\":55724728,\"Title\":\"Drag Me To Hell\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Profit\":34567606,\"Title\":\"The Gift\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Profit\":29025000,\"Title\":\"The Evil Dead\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Profit\":10502976,\"Title\":\"Army of Darkness\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Profit\":2423044,\"Title\":\"Evil Dead II\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Profit\":-683727,\"Title\":\"A Simple Plan\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Profit\":-3887360,\"Title\":\"For Love of the Game\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Profit\":-13447540,\"Title\":\"The Quick and the Dead\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Ron Howard\",\"Profit\":632236138,\"Title\":\"The Da Vinci Code\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Profit\":335975846,\"Title\":\"Angels & Demons\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Profit\":269100000,\"Title\":\"Apollo 13\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Profit\":238708996,\"Title\":\"A Beautiful Mind\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Profit\":238700000,\"Title\":\"Ransom\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Profit\":222141403,\"Title\":\"How the Grinch Stole Christmas\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Profit\":54599495,\"Title\":\"Splash\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Profit\":20539911,\"Title\":\"Cinderella Man\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Profit\":-855414,\"Title\":\"Frost/Nixon\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Profit\":-24680311,\"Title\":\"EDtv\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Profit\":-26746567,\"Title\":\"The Missing\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Christopher Nolan\",\"Profit\":837345358,\"Title\":\"The Dark Knight\",\"Total_Director_Profit\":1823751815},{\"Director\":\"Christopher Nolan\",\"Profit\":593830280,\"Title\":\"Inception\",\"Total_Director_Profit\":1823751815},{\"Director\":\"Christopher Nolan\",\"Profit\":222353017,\"Title\":\"Batman Begins\",\"Total_Director_Profit\":1823751815},{\"Director\":\"Christopher Nolan\",\"Profit\":67896006,\"Title\":\"The Prestige\",\"Total_Director_Profit\":1823751815},{\"Director\":\"Christopher Nolan\",\"Profit\":67622499,\"Title\":\"Insomnia\",\"Total_Director_Profit\":1823751815},{\"Director\":\"Christopher Nolan\",\"Profit\":34665950,\"Title\":\"Memento\",\"Total_Director_Profit\":1823751815},{\"Director\":\"Christopher Nolan\",\"Profit\":38705,\"Title\":\"Following\",\"Total_Director_Profit\":1823751815},{\"Director\":\"M. Night Shyamalan\",\"Profit\":632806292,\"Title\":\"The Sixth Sense\",\"Total_Director_Profit\":1575120870},{\"Director\":\"M. Night Shyamalan\",\"Profit\":337563071,\"Title\":\"Signs\",\"Total_Director_Profit\":1575120870},{\"Director\":\"M. Night Shyamalan\",\"Profit\":188514545,\"Title\":\"The Village\",\"Total_Director_Profit\":1575120870},{\"Director\":\"M. Night Shyamalan\",\"Profit\":174856037,\"Title\":\"Unbreakable\",\"Total_Director_Profit\":1575120870},{\"Director\":\"M. Night Shyamalan\",\"Profit\":140191957,\"Title\":\"The Last Airbender\",\"Total_Director_Profit\":1575120870},{\"Director\":\"M. Night Shyamalan\",\"Profit\":103403799,\"Title\":\"The Happening\",\"Total_Director_Profit\":1575120870},{\"Director\":\"M. Night Shyamalan\",\"Profit\":-2214831,\"Title\":\"Lady in the Water\",\"Total_Director_Profit\":1575120870},{\"Director\":\"David Yates\",\"Profit\":788468864,\"Title\":\"Harry Potter and the Order of the Phoenix\",\"Total_Director_Profit\":1475968769},{\"Director\":\"David Yates\",\"Profit\":687499905,\"Title\":\"Harry Potter and the Half-Blood Prince\",\"Total_Director_Profit\":1475968769},{\"Director\":\"John Lasseter\",\"Profit\":394966906,\"Title\":\"Toy Story 2\",\"Total_Director_Profit\":1436948978},{\"Director\":\"John Lasseter\",\"Profit\":391923762,\"Title\":\"Cars\",\"Total_Director_Profit\":1436948978},{\"Director\":\"John Lasseter\",\"Profit\":331948825,\"Title\":\"Toy Story\",\"Total_Director_Profit\":1436948978},{\"Director\":\"John Lasseter\",\"Profit\":318109485,\"Title\":\"A Bug's Life\",\"Total_Director_Profit\":1436948978},{\"Director\":\"Carlos Saldanha\",\"Profit\":796685941,\"Title\":\"Ice Age: Dawn of the Dinosaurs\",\"Total_Director_Profit\":1373585223},{\"Director\":\"Carlos Saldanha\",\"Profit\":576899282,\"Title\":\"Ice Age: The Meltdown\",\"Total_Director_Profit\":1373585223},{\"Director\":\"Andy Wachowski\",\"Profit\":611576929,\"Title\":\"The Matrix Reloaded\",\"Total_Director_Profit\":1296311080},{\"Director\":\"Andy Wachowski\",\"Profit\":395279930,\"Title\":\"The Matrix\",\"Total_Director_Profit\":1296311080},{\"Director\":\"Andy Wachowski\",\"Profit\":314259759,\"Title\":\"The Matrix Revolutions\",\"Total_Director_Profit\":1296311080},{\"Director\":\"Andy Wachowski\",\"Profit\":1800000,\"Title\":\"Bound\",\"Total_Director_Profit\":1296311080},{\"Director\":\"Andy Wachowski\",\"Profit\":-26605538,\"Title\":\"Speed Racer\",\"Total_Director_Profit\":1296311080},{\"Director\":\"Ridley Scott\",\"Profit\":354683805,\"Title\":\"Gladiator\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":263100280,\"Title\":\"Hannibal\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":194630630,\"Title\":\"Alien\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":165697825,\"Title\":\"American Gangster\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":101398413,\"Title\":\"Kingdom of Heaven\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":100885538,\"Title\":\"Robin Hood\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":78638745,\"Title\":\"Black Hawk Down\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":40894666,\"Title\":\"Body of Lies\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":15892212,\"Title\":\"Black Rain\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":7064105,\"Title\":\"A Good Year\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":5139618,\"Title\":\"Blade Runner\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":-1830844,\"Title\":\"G.I.Jane\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":-9497888,\"Title\":\"Legend\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Profit\":-27770700,\"Title\":\"White Squall\",\"Total_Director_Profit\":1288926405}],\"metadata\":{\"Director\":{\"type\":\"string\",\"semanticType\":\"Name\"},\"Profit\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Title\":{\"type\":\"string\",\"semanticType\":\"Name\"},\"Total_Director_Profit\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df = df_movies.copy()\\n    df['Profit'] = df['Worldwide Gross'] - df['Production Budget']\\n    \\n    # Remove rows with missing Director or Profit values\\n    df = df.dropna(subset=['Director', 'Profit'])\\n    \\n    # Calculate total profit per director\\n    director_profit = df.groupby('Director')['Profit'].sum().reset_index()\\n    director_profit.columns = ['Director', 'Total_Director_Profit']\\n    \\n    # Get top 20 directors by total profit\\n    top_20_directors = director_profit.nlargest(20, 'Total_Director_Profit')['Director'].tolist()\\n    \\n    # Filter movies by top 20 directors\\n    df_filtered = df[df['Director'].isin(top_20_directors)].copy()\\n    \\n    # Add total director profit to each movie row\\n    df_filtered = df_filtered.merge(director_profit, on='Director', how='left')\\n    \\n    # Select and order columns\\n    transformed_df = df_filtered[['Director', 'Title', 'Profit', 'Total_Director_Profit']].copy()\\n    \\n    # Sort by total director profit (descending) and then by movie profit (descending)\\n    transformed_df = transformed_df.sort_values(['Total_Director_Profit', 'Profit'], ascending=[False, False])\\n    \\n    return transformed_df\\n\",\"source\":[\"movies\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\". \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- you can use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 441226247.0, 533345358.0, 600788188.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 937499905.0, 976457891.0, 1133027325.0, 1842879955.0\\n\\t*US DVD Sales -- type: float64, values: nan, 1978111.0, 140689412.0, ..., 100178981.0, 104578578.0, 234119058.0, 320830925.0\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 15000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, nan, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: 1.5, 2.5, 3.0, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 245271.0, 261439.0, 326950.0, 417703.0\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nshow top 20 directories based on profit breakdown by their movies\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"Show top 20 directors based on total profit, with a breakdown of profit by their individual movies\\\",\\n    \\\"display_instruction\\\": \\\"Show top 20 **directors** by total **profit** with movie breakdown\\\",\\n    \\\"recommendation\\\": \\\"Calculate profit (Worldwide Gross - Production Budget) for each movie, then aggregate by director to find top 20 directors by total profit. Display individual movie profits for each director to show the breakdown.\\\",\\n    \\\"output_fields\\\": [\\\"Director\\\", \\\"Title\\\", \\\"Profit\\\", \\\"Total_Director_Profit\\\"],\\n    \\\"chart_type\\\": \\\"group_bar\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Director\\\",\\n        \\\"y\\\": \\\"Profit\\\",\\n        \\\"color\\\": \\\"Title\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df = df_movies.copy()\\n    df['Profit'] = df['Worldwide Gross'] - df['Production Budget']\\n    \\n    # Remove rows with missing Director or Profit values\\n    df = df.dropna(subset=['Director', 'Profit'])\\n    \\n    # Calculate total profit per director\\n    director_profit = df.groupby('Director')['Profit'].sum().reset_index()\\n    director_profit.columns = ['Director', 'Total_Director_Profit']\\n    \\n    # Get top 20 directors by total profit\\n    top_20_directors = director_profit.nlargest(20, 'Total_Director_Profit')['Director'].tolist()\\n    \\n    # Filter movies by top 20 directors\\n    df_filtered = df[df['Director'].isin(top_20_directors)].copy()\\n    \\n    # Add total director profit to each movie row\\n    df_filtered = df_filtered.merge(director_profit, on='Director', how='left')\\n    \\n    # Select and order columns\\n    transformed_df = df_filtered[['Director', 'Title', 'Profit', 'Total_Director_Profit']].copy()\\n    \\n    # Sort by total director profit (descending) and then by movie profit (descending)\\n    transformed_df = transformed_df.sort_values(['Total_Director_Profit', 'Profit'], ascending=[False, False])\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"movies\",\"sourceTableIds\":[\"movies\"],\"instruction\":\"show top 20 directories based on profit breakdown by their movies\",\"displayInstruction\":\"Show top 20 **directors** by total **profit** with movie breakdown\",\"chart\":{\"id\":\"chart-1760743765735\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"movies\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-770727\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"This code performs a director profitability analysis:\\n\\n1. Calculate **Profit** for each movie by subtracting **Production Budget** from **Worldwide Gross**\\n\\n2. Remove movies with missing **Director** or **Profit** information to ensure clean analysis\\n\\n3. Aggregate movies by **Director** to compute **Total_Director_Profit** (sum of all profits from their movies)\\n\\n4. Identify the **top 20 directors** ranked by their total profit across all films\\n\\n5. Filter the dataset to include only movies directed by these **top 20 directors**\\n\\n6. Enrich each movie record with its director's **Total_Director_Profit** for comparison context\\n\\n7. Sort results first by **Total_Director_Profit** (descending) to group directors by overall success, then by individual movie **Profit** (descending) to rank films within each director's portfolio\",\"concepts\":[{\"explanation\":\"Net financial return for each movie, calculated as: \\\\( \\\\text{Profit} = \\\\text{Worldwide\\\\_Gross} - \\\\text{Production\\\\_Budget} \\\\). Positive values indicate profitable films, while negative values represent financial losses.\",\"field\":\"Profit\"},{\"explanation\":\"Cumulative profit generated by a director across all their films in the dataset, computed as: \\\\( \\\\text{Total\\\\_Director\\\\_Profit} = \\\\sum \\\\text{Profit}_{\\\\text{all movies by director}} \\\\). This metric measures a director's overall commercial track record and financial value to studios.\",\"field\":\"Total_Director_Profit\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 402111870.0, 403706375.0, 600788188.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 937499905.0, 976457891.0, 1133027325.0, 1842879955.0\\n\\t*US DVD Sales -- type: float64, values: 893953.0, 2638319.0, 3507046.0, ..., 104578578.0, 124058348.0, 234119058.0, 320830925.0\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 23000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: 46.0, 72.0, 74.0, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, 3.0, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: nan, 1.5, 2.5, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 212985.0, 237477.0, 417703.0, nan\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df = df_movies.copy()\\n    df['Profit'] = df['Worldwide Gross'] - df['Production Budget']\\n    \\n    # Remove rows with missing Director or Profit values\\n    df = df.dropna(subset=['Director', 'Profit'])\\n    \\n    # Calculate total profit per director\\n    director_profit = df.groupby('Director')['Profit'].sum().reset_index()\\n    director_profit.columns = ['Director', 'Total_Director_Profit']\\n    \\n    # Get top 20 directors by total profit\\n    top_20_directors = director_profit.nlargest(20, 'Total_Director_Profit')['Director'].tolist()\\n    \\n    # Filter movies by top 20 directors\\n    df_filtered = df[df['Director'].isin(top_20_directors)].copy()\\n    \\n    # Add total director profit to each movie row\\n    df_filtered = df_filtered.merge(director_profit, on='Director', how='left')\\n    \\n    # Select and order columns\\n    transformed_df = df_filtered[['Director', 'Title', 'Profit', 'Total_Director_Profit']].copy()\\n    \\n    # Sort by total director profit (descending) and then by movie profit (descending)\\n    transformed_df = transformed_df.sort_values(['Total_Director_Profit', 'Profit'], ascending=[False, False])\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThis code performs a director profitability analysis:\\n\\n1. Calculate **Profit** for each movie by subtracting **Production Budget** from **Worldwide Gross**\\n\\n2. Remove movies with missing **Director** or **Profit** information to ensure clean analysis\\n\\n3. Aggregate movies by **Director** to compute **Total_Director_Profit** (sum of all profits from their movies)\\n\\n4. Identify the **top 20 directors** ranked by their total profit across all films\\n\\n5. Filter the dataset to include only movies directed by these **top 20 directors**\\n\\n6. Enrich each movie record with its director's **Total_Director_Profit** for comparison context\\n\\n7. Sort results first by **Total_Director_Profit** (descending) to group directors by overall success, then by individual movie **Profit** (descending) to rank films within each director's portfolio\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"Profit\\\",\\n        \\\"explanation\\\": \\\"Net financial return for each movie, calculated as: \\\\\\\\( \\\\\\\\text{Profit} = \\\\\\\\text{Worldwide\\\\\\\\_Gross} - \\\\\\\\text{Production\\\\\\\\_Budget} \\\\\\\\). Positive values indicate profitable films, while negative values represent financial losses.\\\"\\n    },\\n    {\\n        \\\"field\\\": \\\"Total_Director_Profit\\\",\\n        \\\"explanation\\\": \\\"Cumulative profit generated by a director across all their films in the dataset, computed as: \\\\\\\\( \\\\\\\\text{Total\\\\\\\\_Director\\\\\\\\_Profit} = \\\\\\\\sum \\\\\\\\text{Profit}_{\\\\\\\\text{all movies by director}} \\\\\\\\). This metric measures a director's overall commercial track record and financial value to studios.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-89\",\"displayId\":\"director-genre-profit\",\"names\":[\"Director\",\"Genre_Profit\",\"Major Genre\",\"Total_Director_Profit\"],\"rows\":[{\"Director\":\"Steven Spielberg\",\"Genre_Profit\":2288324872,\"Major Genre\":\"Action\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Genre_Profit\":2222007781,\"Major Genre\":\"Drama\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Genre_Profit\":2118165403,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Genre_Profit\":478200000,\"Major Genre\":\"Horror\",\"Total_Director_Profit\":7169573056},{\"Director\":\"Steven Spielberg\",\"Genre_Profit\":62875000,\"Major Genre\":\"Comedy\",\"Total_Director_Profit\":7169573056},{\"Director\":\"James Cameron\",\"Genre_Profit\":3435186261,\"Major Genre\":\"Action\",\"Total_Director_Profit\":5078066216},{\"Director\":\"James Cameron\",\"Genre_Profit\":1642879955,\"Major Genre\":\"Thriller/Suspense\",\"Total_Director_Profit\":5078066216},{\"Director\":\"Chris Columbus\",\"Genre_Profit\":1761881048,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":3036030427},{\"Director\":\"Chris Columbus\",\"Genre_Profit\":1215348066,\"Major Genre\":\"Comedy\",\"Total_Director_Profit\":3036030427},{\"Director\":\"Chris Columbus\",\"Genre_Profit\":67130693,\"Major Genre\":\"Drama\",\"Total_Director_Profit\":3036030427},{\"Director\":\"Chris Columbus\",\"Genre_Profit\":-8329380,\"Major Genre\":\"Musical\",\"Total_Director_Profit\":3036030427},{\"Director\":\"George Lucas\",\"Genre_Profit\":2871882789,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":3011105789},{\"Director\":\"George Lucas\",\"Genre_Profit\":139223000,\"Major Genre\":\"Comedy\",\"Total_Director_Profit\":3011105789},{\"Director\":\"Peter Jackson\",\"Genre_Profit\":2974450745,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":3001395936},{\"Director\":\"Peter Jackson\",\"Genre_Profit\":29702568,\"Major Genre\":\"Drama\",\"Total_Director_Profit\":3001395936},{\"Director\":\"Peter Jackson\",\"Genre_Profit\":-2757377,\"Major Genre\":\"Horror\",\"Total_Director_Profit\":3001395936},{\"Director\":\"Robert Zemeckis\",\"Genre_Profit\":1176274785,\"Major Genre\":\"Drama\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Genre_Profit\":1038225574,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Genre_Profit\":375522650,\"Major Genre\":\"Comedy\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Robert Zemeckis\",\"Genre_Profit\":198693989,\"Major Genre\":\"Thriller/Suspense\",\"Total_Director_Profit\":2788716998},{\"Director\":\"Michael Bay\",\"Genre_Profit\":2046592847,\"Major Genre\":\"Action\",\"Total_Director_Profit\":2461192847},{\"Director\":\"Michael Bay\",\"Genre_Profit\":414600000,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":2461192847},{\"Director\":\"Roland Emmerich\",\"Genre_Profit\":1325738958,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":2390416794},{\"Director\":\"Roland Emmerich\",\"Genre_Profit\":959377836,\"Major Genre\":\"Action\",\"Total_Director_Profit\":2390416794},{\"Director\":\"Roland Emmerich\",\"Genre_Profit\":105300000,\"Major Genre\":\"Drama\",\"Total_Director_Profit\":2390416794},{\"Director\":\"Gore Verbinski\",\"Genre_Profit\":2031667528,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":2359931719},{\"Director\":\"Gore Verbinski\",\"Genre_Profit\":201094024,\"Major Genre\":\"Horror\",\"Total_Director_Profit\":2359931719},{\"Director\":\"Gore Verbinski\",\"Genre_Profit\":107808615,\"Major Genre\":\"Action\",\"Total_Director_Profit\":2359931719},{\"Director\":\"Gore Verbinski\",\"Genre_Profit\":23894591,\"Major Genre\":\"Comedy\",\"Total_Director_Profit\":2359931719},{\"Director\":\"Gore Verbinski\",\"Genre_Profit\":-4533039,\"Major Genre\":\"Drama\",\"Total_Director_Profit\":2359931719},{\"Director\":\"Tim Burton\",\"Genre_Profit\":1172861961,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Genre_Profit\":563171278,\"Major Genre\":\"Action\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Genre_Profit\":425962212,\"Major Genre\":\"Comedy\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Genre_Profit\":137068340,\"Major Genre\":\"Horror\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Tim Burton\",\"Genre_Profit\":53432867,\"Major Genre\":\"Drama\",\"Total_Director_Profit\":2352496658},{\"Director\":\"Andrew Adamson\",\"Genre_Profit\":2047535219,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":2047535219},{\"Director\":\"Sam Raimi\",\"Genre_Profit\":1899285178,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Genre_Profit\":97675748,\"Major Genre\":\"Horror\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Genre_Profit\":34567606,\"Major Genre\":\"Thriller/Suspense\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Genre_Profit\":-4571087,\"Major Genre\":\"Drama\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Sam Raimi\",\"Genre_Profit\":-13447540,\"Major Genre\":\"Western\",\"Total_Director_Profit\":2013509905},{\"Director\":\"Ron Howard\",\"Genre_Profit\":968211984,\"Major Genre\":\"Thriller/Suspense\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Genre_Profit\":527493493,\"Major Genre\":\"Drama\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Genre_Profit\":252060587,\"Major Genre\":\"Comedy\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Genre_Profit\":238700000,\"Major Genre\":\"Action\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Ron Howard\",\"Genre_Profit\":-26746567,\"Major Genre\":\"Western\",\"Total_Director_Profit\":1959719497},{\"Director\":\"Christopher Nolan\",\"Genre_Profit\":1059698375,\"Major Genre\":\"Action\",\"Total_Director_Profit\":1823713110},{\"Director\":\"Christopher Nolan\",\"Genre_Profit\":729348785,\"Major Genre\":\"Thriller/Suspense\",\"Total_Director_Profit\":1823713110},{\"Director\":\"Christopher Nolan\",\"Genre_Profit\":34665950,\"Major Genre\":\"Drama\",\"Total_Director_Profit\":1823713110},{\"Director\":\"M. Night Shyamalan\",\"Genre_Profit\":1437143744,\"Major Genre\":\"Thriller/Suspense\",\"Total_Director_Profit\":1575120870},{\"Director\":\"M. Night Shyamalan\",\"Genre_Profit\":140191957,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":1575120870},{\"Director\":\"M. Night Shyamalan\",\"Genre_Profit\":-2214831,\"Major Genre\":\"Drama\",\"Total_Director_Profit\":1575120870},{\"Director\":\"David Yates\",\"Genre_Profit\":1475968769,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":1475968769},{\"Director\":\"John Lasseter\",\"Genre_Profit\":1045025216,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":1436948978},{\"Director\":\"John Lasseter\",\"Genre_Profit\":391923762,\"Major Genre\":\"Comedy\",\"Total_Director_Profit\":1436948978},{\"Director\":\"Carlos Saldanha\",\"Genre_Profit\":1373585223,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":1373585223},{\"Director\":\"Andy Wachowski\",\"Genre_Profit\":1294511080,\"Major Genre\":\"Action\",\"Total_Director_Profit\":1296311080},{\"Director\":\"Andy Wachowski\",\"Genre_Profit\":1800000,\"Major Genre\":\"Thriller/Suspense\",\"Total_Director_Profit\":1296311080},{\"Director\":\"Ridley Scott\",\"Genre_Profit\":534208088,\"Major Genre\":\"Action\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Genre_Profit\":457730910,\"Major Genre\":\"Horror\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Genre_Profit\":170931086,\"Major Genre\":\"Drama\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Genre_Profit\":64129825,\"Major Genre\":\"Adventure\",\"Total_Director_Profit\":1288926405},{\"Director\":\"Ridley Scott\",\"Genre_Profit\":61926496,\"Major Genre\":\"Thriller/Suspense\",\"Total_Director_Profit\":1288926405}],\"metadata\":{\"Director\":{\"type\":\"string\",\"semanticType\":\"Name\"},\"Genre_Profit\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Major Genre\":{\"type\":\"string\",\"semanticType\":\"String\"},\"Total_Director_Profit\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df = df_movies.copy()\\n    df['Profit'] = df['Worldwide Gross'] - df['Production Budget']\\n    \\n    # Remove rows with missing Director, Profit, or Major Genre values\\n    df = df.dropna(subset=['Director', 'Profit', 'Major Genre'])\\n    \\n    # Calculate total profit per director\\n    director_profit = df.groupby('Director')['Profit'].sum().reset_index()\\n    director_profit.columns = ['Director', 'Total_Director_Profit']\\n    \\n    # Get top 20 directors by total profit\\n    top_20_directors = director_profit.nlargest(20, 'Total_Director_Profit')['Director'].tolist()\\n    \\n    # Filter movies by top 20 directors\\n    df_filtered = df[df['Director'].isin(top_20_directors)].copy()\\n    \\n    # Aggregate profit by Director and Major Genre\\n    genre_breakdown = df_filtered.groupby(['Director', 'Major Genre'])['Profit'].sum().reset_index()\\n    genre_breakdown.columns = ['Director', 'Major Genre', 'Genre_Profit']\\n    \\n    # Add total director profit to each row\\n    genre_breakdown = genre_breakdown.merge(director_profit, on='Director', how='left')\\n    \\n    # Sort by total director profit (descending) and then by genre profit (descending)\\n    transformed_df = genre_breakdown.sort_values(['Total_Director_Profit', 'Genre_Profit'], ascending=[False, False])\\n    \\n    return transformed_df\\n\",\"source\":[\"movies\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 441226247.0, 533345358.0, 600788188.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 937499905.0, 976457891.0, 1133027325.0, 1842879955.0\\n\\t*US DVD Sales -- type: float64, values: nan, 1978111.0, 140689412.0, ..., 100178981.0, 104578578.0, 234119058.0, 320830925.0\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 15000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, nan, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: 1.5, 2.5, 3.0, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 245271.0, 261439.0, 326950.0, 417703.0\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nshow top 20 directories based on profit breakdown by their movies\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"Show top 20 directors based on total profit, with a breakdown of profit by their individual movies\\\",\\n    \\\"display_instruction\\\": \\\"Show top 20 **directors** by total **profit** with movie breakdown\\\",\\n    \\\"recommendation\\\": \\\"Calculate profit (Worldwide Gross - Production Budget) for each movie, then aggregate by director to find top 20 directors by total profit. Display individual movie profits for each director to show the breakdown.\\\",\\n    \\\"output_fields\\\": [\\\"Director\\\", \\\"Title\\\", \\\"Profit\\\", \\\"Total_Director_Profit\\\"],\\n    \\\"chart_type\\\": \\\"group_bar\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Director\\\",\\n        \\\"y\\\": \\\"Profit\\\",\\n        \\\"color\\\": \\\"Title\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df = df_movies.copy()\\n    df['Profit'] = df['Worldwide Gross'] - df['Production Budget']\\n    \\n    # Remove rows with missing Director or Profit values\\n    df = df.dropna(subset=['Director', 'Profit'])\\n    \\n    # Calculate total profit per director\\n    director_profit = df.groupby('Director')['Profit'].sum().reset_index()\\n    director_profit.columns = ['Director', 'Total_Director_Profit']\\n    \\n    # Get top 20 directors by total profit\\n    top_20_directors = director_profit.nlargest(20, 'Total_Director_Profit')['Director'].tolist()\\n    \\n    # Filter movies by top 20 directors\\n    df_filtered = df[df['Director'].isin(top_20_directors)].copy()\\n    \\n    # Add total director profit to each movie row\\n    df_filtered = df_filtered.merge(director_profit, on='Director', how='left')\\n    \\n    # Select and order columns\\n    transformed_df = df_filtered[['Director', 'Title', 'Profit', 'Total_Director_Profit']].copy()\\n    \\n    # Sort by total director profit (descending) and then by movie profit (descending)\\n    transformed_df = transformed_df.sort_values(['Total_Director_Profit', 'Profit'], ascending=[False, False])\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n           Director     Profit                                               Title  Total_Director_Profit\\n0  Steven Spielberg  860067947                                       Jurassic Park             7169573056\\n1  Steven Spielberg  782410554                           ET: The Extra-Terrestrial             7169573056\\n2  Steven Spielberg  711686679                       The Lost World: Jurassic Park             7169573056\\n3  Steven Spielberg  601558145  Indiana Jones and the Kingdom of the Crystal Skull             7169573056\\n4  Steven Spielberg  459745532                               The War of the Worlds             7169573056\\n5  Steven Spielberg  458700000                                                Jaws             7169573056\\n6  Steven Spielberg  426171806                  Indiana Jones and the Last Crusade             7169573056\\n7  Steven Spielberg  416635085                                 Saving Private Ryan             7169573056\\n8  Steven Spielberg  366800358                             Raiders of the Lost Ark             7169573056\\n9  Steven Spielberg  317700000                  Close Encounters of the Third Kind             7169573056\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"break down by movie genre instead\\\",\\n    \\\"chart_type\\\": \\\"Bar Chart\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Director\\\",\\n        \\\"y\\\": \\\"Profit\\\",\\n        \\\"color\\\": \\\"Title\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Show top 20 directors based on total profit, with a breakdown by the major genre of their movies instead of individual movie titles. This will show how each director's profit is distributed across different genres.\\\",\\n    \\\"display_instruction\\\": \\\"Show top 20 **directors** by total **profit** with **genre** breakdown\\\",\\n    \\\"output_fields\\\": [\\\"Director\\\", \\\"Major Genre\\\", \\\"Genre_Profit\\\", \\\"Total_Director_Profit\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Director\\\",\\n        \\\"y\\\": \\\"Genre_Profit\\\",\\n        \\\"color\\\": \\\"Major Genre\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to change the breakdown from individual movies to movie genres. Instead of showing profit by Title, we now aggregate profit by Major Genre for each director. The chart_encodings are updated to use 'Major Genre' for color instead of 'Title', and y-axis now shows 'Genre_Profit' (aggregated by genre) instead of individual movie profit.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df = df_movies.copy()\\n    df['Profit'] = df['Worldwide Gross'] - df['Production Budget']\\n    \\n    # Remove rows with missing Director, Profit, or Major Genre values\\n    df = df.dropna(subset=['Director', 'Profit', 'Major Genre'])\\n    \\n    # Calculate total profit per director\\n    director_profit = df.groupby('Director')['Profit'].sum().reset_index()\\n    director_profit.columns = ['Director', 'Total_Director_Profit']\\n    \\n    # Get top 20 directors by total profit\\n    top_20_directors = director_profit.nlargest(20, 'Total_Director_Profit')['Director'].tolist()\\n    \\n    # Filter movies by top 20 directors\\n    df_filtered = df[df['Director'].isin(top_20_directors)].copy()\\n    \\n    # Aggregate profit by Director and Major Genre\\n    genre_breakdown = df_filtered.groupby(['Director', 'Major Genre'])['Profit'].sum().reset_index()\\n    genre_breakdown.columns = ['Director', 'Major Genre', 'Genre_Profit']\\n    \\n    # Add total director profit to each row\\n    genre_breakdown = genre_breakdown.merge(director_profit, on='Director', how='left')\\n    \\n    # Sort by total director profit (descending) and then by genre profit (descending)\\n    transformed_df = genre_breakdown.sort_values(['Total_Director_Profit', 'Genre_Profit'], ascending=[False, False])\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"table-770727\",\"sourceTableIds\":[\"movies\"],\"instruction\":\"break down by movie genre instead\",\"displayInstruction\":\"Show top 20 **directors** by total **profit** with **genre** breakdown\",\"chart\":{\"id\":\"chart-1760743802354\",\"chartType\":\"Bar Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--movies--Director\"},\"y\":{\"fieldID\":\"concept-Profit-1760742653681\"},\"color\":{\"fieldID\":\"original--movies--Title\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-770727\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-89\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"- Calculate **Profit** for each movie by subtracting **Production Budget** from **Worldwide Gross**\\n- Remove movies with missing **Director**, **Profit**, or **Major Genre** information\\n- Aggregate the **Profit** for each **Director** to calculate their **Total_Director_Profit**\\n- Identify the **top 20 directors** based on their **Total_Director_Profit**\\n- Filter the dataset to include only movies made by these **top 20 directors**\\n- Group the filtered movies by **Director** and **Major Genre**, summing the **Profit** for each combination to create **Genre_Profit**\\n- Merge the **Total_Director_Profit** back into the genre breakdown data\\n- Sort the results first by **Total_Director_Profit** (highest to lowest), then by **Genre_Profit** (highest to lowest) within each director\",\"concepts\":[{\"explanation\":\"The financial return of a movie, calculated as \\\\( \\\\text{Profit} = \\\\text{Worldwide\\\\_Gross} - \\\\text{Production\\\\_Budget} \\\\). This represents the net revenue after accounting for production costs.\",\"field\":\"Profit\"},{\"explanation\":\"The cumulative profit generated by all movies directed by a specific director. This metric aggregates the Profit across all films in their portfolio to measure overall financial success.\",\"field\":\"Total_Director_Profit\"},{\"explanation\":\"The total profit generated by a director within a specific Major Genre. This breaks down a director's Total_Director_Profit by genre category, showing which genres contribute most to their financial success.\",\"field\":\"Genre_Profit\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 403706375.0, 441226247.0, 533345358.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., nan, 1133027325.0, 1842879955.0, 2767891499.0\\n\\t*US DVD Sales -- type: float64, values: 7166365.0, 33619971.0, 140689412.0, ..., nan, nan, 46260220.0, nan\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 15000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, 3.0, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: 1.5, 2.5, 3.0, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., nan, nan, 212985.0, 411088.0\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Calculate profit for each movie\\n    df = df_movies.copy()\\n    df['Profit'] = df['Worldwide Gross'] - df['Production Budget']\\n    \\n    # Remove rows with missing Director, Profit, or Major Genre values\\n    df = df.dropna(subset=['Director', 'Profit', 'Major Genre'])\\n    \\n    # Calculate total profit per director\\n    director_profit = df.groupby('Director')['Profit'].sum().reset_index()\\n    director_profit.columns = ['Director', 'Total_Director_Profit']\\n    \\n    # Get top 20 directors by total profit\\n    top_20_directors = director_profit.nlargest(20, 'Total_Director_Profit')['Director'].tolist()\\n    \\n    # Filter movies by top 20 directors\\n    df_filtered = df[df['Director'].isin(top_20_directors)].copy()\\n    \\n    # Aggregate profit by Director and Major Genre\\n    genre_breakdown = df_filtered.groupby(['Director', 'Major Genre'])['Profit'].sum().reset_index()\\n    genre_breakdown.columns = ['Director', 'Major Genre', 'Genre_Profit']\\n    \\n    # Add total director profit to each row\\n    genre_breakdown = genre_breakdown.merge(director_profit, on='Director', how='left')\\n    \\n    # Sort by total director profit (descending) and then by genre profit (descending)\\n    transformed_df = genre_breakdown.sort_values(['Total_Director_Profit', 'Genre_Profit'], ascending=[False, False])\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\n- Calculate **Profit** for each movie by subtracting **Production Budget** from **Worldwide Gross**\\n- Remove movies with missing **Director**, **Profit**, or **Major Genre** information\\n- Aggregate the **Profit** for each **Director** to calculate their **Total_Director_Profit**\\n- Identify the **top 20 directors** based on their **Total_Director_Profit**\\n- Filter the dataset to include only movies made by these **top 20 directors**\\n- Group the filtered movies by **Director** and **Major Genre**, summing the **Profit** for each combination to create **Genre_Profit**\\n- Merge the **Total_Director_Profit** back into the genre breakdown data\\n- Sort the results first by **Total_Director_Profit** (highest to lowest), then by **Genre_Profit** (highest to lowest) within each director\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"Profit\\\",\\n        \\\"explanation\\\": \\\"The financial return of a movie, calculated as \\\\\\\\( \\\\\\\\text{Profit} = \\\\\\\\text{Worldwide\\\\\\\\_Gross} - \\\\\\\\text{Production\\\\\\\\_Budget} \\\\\\\\). This represents the net revenue after accounting for production costs.\\\"\\n    },\\n    {\\n        \\\"field\\\": \\\"Total_Director_Profit\\\",\\n        \\\"explanation\\\": \\\"The cumulative profit generated by all movies directed by a specific director. This metric aggregates the Profit across all films in their portfolio to measure overall financial success.\\\"\\n    },\\n    {\\n        \\\"field\\\": \\\"Genre_Profit\\\",\\n        \\\"explanation\\\": \\\"The total profit generated by a director within a specific Major Genre. This breaks down a director's Total_Director_Profit by genre category, showing which genres contribute most to their financial success.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-456490\",\"displayId\":\"movie-ratings\",\"names\":[\"IMDB Rating\",\"Production Budget\",\"Rotten Tomatoes Rating\",\"Title\"],\"rows\":[{\"IMDB Rating\":6.1,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Land Girls\"},{\"IMDB Rating\":6.9,\"Production Budget\":300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"First Love, Last Rites\"},{\"IMDB Rating\":6.8,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"I Married a Strange Person\"},{\"IMDB Rating\":null,\"Production Budget\":300000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Let's Talk About Sex\"},{\"IMDB Rating\":3.4,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Slam\"},{\"IMDB Rating\":7.7,\"Production Budget\":6000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Following\"},{\"IMDB Rating\":3.8,\"Production Budget\":1600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Foolish\"},{\"IMDB Rating\":5.8,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Pirates\"},{\"IMDB Rating\":7,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Duel in the Sun\"},{\"IMDB Rating\":7,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Tom Jones\"},{\"IMDB Rating\":7.5,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Oliver!\"},{\"IMDB Rating\":8.4,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"To Kill A Mockingbird\"},{\"IMDB Rating\":6.8,\"Production Budget\":100000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Hollywood Shuffle\"},{\"IMDB Rating\":7,\"Production Budget\":5200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Wilson\"},{\"IMDB Rating\":6.1,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Darling Lili\"},{\"IMDB Rating\":2.5,\"Production Budget\":13500000,\"Rotten Tomatoes Rating\":90,\"Title\":\"The Ten Commandments\"},{\"IMDB Rating\":8.9,\"Production Budget\":340000,\"Rotten Tomatoes Rating\":null,\"Title\":\"12 Angry Men\"},{\"IMDB Rating\":8.1,\"Production Budget\":29000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Twelve Monkeys\"},{\"IMDB Rating\":7,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":57,\"Title\":1776},{\"IMDB Rating\":5.6,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":33,\"Title\":1941},{\"IMDB Rating\":6.3,\"Production Budget\":1900000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Chacun sa nuit\"},{\"IMDB Rating\":8.4,\"Production Budget\":10500000,\"Rotten Tomatoes Rating\":96,\"Title\":\"2001: A Space Odyssey\"},{\"IMDB Rating\":null,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"20,000 Leagues Under the Sea\"},{\"IMDB Rating\":6.9,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"24 7: Twenty Four Seven\"},{\"IMDB Rating\":7.1,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Twin Falls Idaho\"},{\"IMDB Rating\":5.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"3 Men and a Baby\"},{\"IMDB Rating\":3.2,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"3 Ninjas Kick Back\"},{\"IMDB Rating\":6,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Forty Shades of Blue\"},{\"IMDB Rating\":7.7,\"Production Budget\":439000,\"Rotten Tomatoes Rating\":95,\"Title\":\"42nd Street\"},{\"IMDB Rating\":6.4,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Four Rooms\"},{\"IMDB Rating\":7,\"Production Budget\":6500000,\"Rotten Tomatoes Rating\":71,\"Title\":\"The Four Seasons\"},{\"IMDB Rating\":7.1,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Four Weddings and a Funeral\"},{\"IMDB Rating\":7.4,\"Production Budget\":350000,\"Rotten Tomatoes Rating\":97,\"Title\":\"51 Birch Street\"},{\"IMDB Rating\":6.8,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"55 Days at Peking\"},{\"IMDB Rating\":5.4,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Nine 1/2 Weeks\"},{\"IMDB Rating\":4.9,\"Production Budget\":113500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"AstÈrix aux Jeux Olympiques\"},{\"IMDB Rating\":7.6,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"The Abyss\"},{\"IMDB Rating\":4.6,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"Action Jackson\"},{\"IMDB Rating\":6.6,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"Ace Ventura: Pet Detective\"},{\"IMDB Rating\":5.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Ace Ventura: When Nature Calls\"},{\"IMDB Rating\":null,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"April Fool's Day\"},{\"IMDB Rating\":5.7,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Among Giants\"},{\"IMDB Rating\":7.1,\"Production Budget\":3768785,\"Rotten Tomatoes Rating\":100,\"Title\":\"Annie Get Your Gun\"},{\"IMDB Rating\":6.7,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"Alice in Wonderland\"},{\"IMDB Rating\":7.3,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Princess and the Cobbler\"},{\"IMDB Rating\":5.9,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"The Alamo\"},{\"IMDB Rating\":3.2,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Alive\"},{\"IMDB Rating\":7.4,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Amen\"},{\"IMDB Rating\":7.6,\"Production Budget\":777000,\"Rotten Tomatoes Rating\":97,\"Title\":\"American Graffiti\"},{\"IMDB Rating\":3.7,\"Production Budget\":350000,\"Rotten Tomatoes Rating\":null,\"Title\":\"American Ninja 2: The Confrontation\"},{\"IMDB Rating\":6.8,\"Production Budget\":62000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"The American President\"},{\"IMDB Rating\":8.2,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Annie Hall\"},{\"IMDB Rating\":6.1,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Anatomie\"},{\"IMDB Rating\":5.8,\"Production Budget\":6500000,\"Rotten Tomatoes Rating\":62,\"Title\":\"The Adventures of Huck Finn\"},{\"IMDB Rating\":8.4,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"The Apartment\"},{\"IMDB Rating\":8.6,\"Production Budget\":31500000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Apocalypse Now\"},{\"IMDB Rating\":6.2,\"Production Budget\":31000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Arachnophobia\"},{\"IMDB Rating\":6.4,\"Production Budget\":16500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Arn - Tempelriddaren\"},{\"IMDB Rating\":5.1,\"Production Budget\":600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Arnolds Park\"},{\"IMDB Rating\":5.6,\"Production Budget\":150000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Sweet Sweetback's Baad Asssss Song\"},{\"IMDB Rating\":4.4,\"Production Budget\":989000,\"Rotten Tomatoes Rating\":17,\"Title\":\"And Then Came Love\"},{\"IMDB Rating\":5.6,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"Around the World in 80 Days\"},{\"IMDB Rating\":5.7,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"Barbarella\"},{\"IMDB Rating\":8.1,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Barry Lyndon\"},{\"IMDB Rating\":5.4,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Barbarians, The\"},{\"IMDB Rating\":7.3,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Babe\"},{\"IMDB Rating\":5,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Baby's Day Out\"},{\"IMDB Rating\":7.7,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bound by Honor\"},{\"IMDB Rating\":6.9,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Bon Cop, Bad Cop\"},{\"IMDB Rating\":8.4,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Back to the Future\"},{\"IMDB Rating\":7.5,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Back to the Future Part II\"},{\"IMDB Rating\":7.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Back to the Future Part III\"},{\"IMDB Rating\":8.2,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Butch Cassidy and the Sundance Kid\"},{\"IMDB Rating\":6.6,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Bad Boys\"},{\"IMDB Rating\":6.4,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Body Double\"},{\"IMDB Rating\":null,\"Production Budget\":210000,\"Rotten Tomatoes Rating\":90,\"Title\":\"The Beast from 20,000 Fathoms\"},{\"IMDB Rating\":3.3,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Beastmaster 2: Through the Portal of Time\"},{\"IMDB Rating\":5.7,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"The Beastmaster\"},{\"IMDB Rating\":8.2,\"Production Budget\":3900000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Ben-Hur\"},{\"IMDB Rating\":8.2,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Ben-Hur\"},{\"IMDB Rating\":5.8,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Benji\"},{\"IMDB Rating\":8,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Before Sunrise\"},{\"IMDB Rating\":3.4,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Beauty and the Beast\"},{\"IMDB Rating\":8.2,\"Production Budget\":2100000,\"Rotten Tomatoes Rating\":97,\"Title\":\"The Best Years of Our Lives\"},{\"IMDB Rating\":3.2,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"My Big Fat Independent Movie\"},{\"IMDB Rating\":5,\"Production Budget\":1800000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Battle for the Planet of the Apes\"},{\"IMDB Rating\":4.8,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Bogus\"},{\"IMDB Rating\":7.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Beverly Hills Cop\"},{\"IMDB Rating\":6.1,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Beverly Hills Cop II\"},{\"IMDB Rating\":5,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"Beverly Hills Cop III\"},{\"IMDB Rating\":5.6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"The Black Hole\"},{\"IMDB Rating\":6.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bathory\"},{\"IMDB Rating\":7.2,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Big\"},{\"IMDB Rating\":8.4,\"Production Budget\":245000,\"Rotten Tomatoes Rating\":100,\"Title\":\"The Big Parade\"},{\"IMDB Rating\":7.8,\"Production Budget\":6500000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Boyz n the Hood\"},{\"IMDB Rating\":4.3,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Return to the Blue Lagoon\"},{\"IMDB Rating\":6.8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Bright Lights, Big City\"},{\"IMDB Rating\":4.9,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Blue Bird\"},{\"IMDB Rating\":6.2,\"Production Budget\":10400000,\"Rotten Tomatoes Rating\":44,\"Title\":\"The Blue Butterfly\"},{\"IMDB Rating\":8.3,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Blade Runner\"},{\"IMDB Rating\":6.2,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bloodsport\"},{\"IMDB Rating\":7.9,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"The Blues Brothers\"},{\"IMDB Rating\":7.1,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Blow Out\"},{\"IMDB Rating\":7.3,\"Production Budget\":5500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"De battre mon coeur s'est arrÍtÈ\"},{\"IMDB Rating\":6.7,\"Production Budget\":379000,\"Rotten Tomatoes Rating\":38,\"Title\":\"The Broadway Melody\"},{\"IMDB Rating\":7.1,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Boom Town\"},{\"IMDB Rating\":7.4,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Bound\"},{\"IMDB Rating\":6.3,\"Production Budget\":10000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bang\"},{\"IMDB Rating\":7.1,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Bananas\"},{\"IMDB Rating\":5.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"Bill & Ted's Bogus Journey\"},{\"IMDB Rating\":7.1,\"Production Budget\":110000,\"Rotten Tomatoes Rating\":100,\"Title\":\"The Birth of a Nation\"},{\"IMDB Rating\":7.3,\"Production Budget\":3716946,\"Rotten Tomatoes Rating\":92,\"Title\":\"The Ballad of Cable Hogue\"},{\"IMDB Rating\":6.2,\"Production Budget\":7700000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Blood of Heroes\"},{\"IMDB Rating\":7.6,\"Production Budget\":120000,\"Rotten Tomatoes Rating\":71,\"Title\":\"The Blood of My Brother: A Story of Death in Iraq\"},{\"IMDB Rating\":5.9,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Boomerang\"},{\"IMDB Rating\":8.4,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"The Bridge on the River Kwai\"},{\"IMDB Rating\":7.2,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Born on the Fourth of July\"},{\"IMDB Rating\":6.7,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Basquiat\"},{\"IMDB Rating\":4.1,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"Black Rain\"},{\"IMDB Rating\":7.2,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Bottle Rocket\"},{\"IMDB Rating\":7.6,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Braindead\"},{\"IMDB Rating\":7.2,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"The Bridges of Madison County\"},{\"IMDB Rating\":6.4,\"Production Budget\":25000,\"Rotten Tomatoes Rating\":91,\"Title\":\"The Brothers McMullen\"},{\"IMDB Rating\":6.4,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dracula\"},{\"IMDB Rating\":5.8,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Broken Arrow\"},{\"IMDB Rating\":6.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Brainstorm\"},{\"IMDB Rating\":8.4,\"Production Budget\":72000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Braveheart\"},{\"IMDB Rating\":4.4,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Les BronzÈs 3: amis pour la vie\"},{\"IMDB Rating\":8,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Brazil\"},{\"IMDB Rating\":7.8,\"Production Budget\":2600000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Blazing Saddles\"},{\"IMDB Rating\":6.3,\"Production Budget\":1300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Basket\"},{\"IMDB Rating\":6.2,\"Production Budget\":2361000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bathing Beauty\"},{\"IMDB Rating\":6.7,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Bill & Ted's Excellent Adventure\"},{\"IMDB Rating\":7.3,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"A Bridge Too Far\"},{\"IMDB Rating\":7.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Beetle Juice\"},{\"IMDB Rating\":6.9,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Batman Returns\"},{\"IMDB Rating\":5.4,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Batman Forever\"},{\"IMDB Rating\":7.6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Batman\"},{\"IMDB Rating\":5.3,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"Buffy the Vampire Slayer\"},{\"IMDB Rating\":7,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bienvenue chez les Ch'tis\"},{\"IMDB Rating\":5.7,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Beyond the Valley of the Dolls\"},{\"IMDB Rating\":6.4,\"Production Budget\":600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Broken Vessels\"},{\"IMDB Rating\":7,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"The Boys from Brazil\"},{\"IMDB Rating\":7,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Business of Fancy Dancing\"},{\"IMDB Rating\":7.3,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Caddyshack\"},{\"IMDB Rating\":7.3,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Cape Fear\"},{\"IMDB Rating\":6.8,\"Production Budget\":62000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Clear and Present Danger\"},{\"IMDB Rating\":7.4,\"Production Budget\":1800000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Carrie\"},{\"IMDB Rating\":8,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Casino Royale\"},{\"IMDB Rating\":6,\"Production Budget\":4600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Camping Sauvage\"},{\"IMDB Rating\":6.3,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"The Cotton Club\"},{\"IMDB Rating\":7.1,\"Production Budget\":600000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Crop Circles: Quest for Truth\"},{\"IMDB Rating\":7.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"Close Encounters of the Third Kind\"},{\"IMDB Rating\":5.8,\"Production Budget\":47000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"The Cable Guy\"},{\"IMDB Rating\":4.6,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Chocolate: Deep Dark Secrets\"},{\"IMDB Rating\":6.3,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Child's Play\"},{\"IMDB Rating\":5.1,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Child's Play 2\"},{\"IMDB Rating\":5.2,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Chain Reaction\"},{\"IMDB Rating\":5.8,\"Production Budget\":950000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Charly\"},{\"IMDB Rating\":7.3,\"Production Budget\":5500000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Chariots of Fire\"},{\"IMDB Rating\":8,\"Production Budget\":3250000,\"Rotten Tomatoes Rating\":88,\"Title\":\"A Christmas Story\"},{\"IMDB Rating\":8,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Cat on a Hot Tin Roof\"},{\"IMDB Rating\":5,\"Production Budget\":1250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"C.H.U.D.\"},{\"IMDB Rating\":6.5,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Crooklyn\"},{\"IMDB Rating\":8.1,\"Production Budget\":1300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Festen\"},{\"IMDB Rating\":6.8,\"Production Budget\":36000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Cleopatra\"},{\"IMDB Rating\":6.2,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Cliffhanger\"},{\"IMDB Rating\":5.1,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Californians\"},{\"IMDB Rating\":6.5,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"The Client\"},{\"IMDB Rating\":3.4,\"Production Budget\":160000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Calling\"},{\"IMDB Rating\":6.7,\"Production Budget\":13700000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Clueless\"},{\"IMDB Rating\":7.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"The Color Purple\"},{\"IMDB Rating\":7.9,\"Production Budget\":27000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Clerks\"},{\"IMDB Rating\":8,\"Production Budget\":2900000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Central do Brasil\"},{\"IMDB Rating\":5.9,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Clash of the Titans\"},{\"IMDB Rating\":5.9,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Clockwatchers\"},{\"IMDB Rating\":4.5,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Commando\"},{\"IMDB Rating\":6.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"The Color of Money\"},{\"IMDB Rating\":5.1,\"Production Budget\":2900000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Cinderella\"},{\"IMDB Rating\":4.6,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Congo\"},{\"IMDB Rating\":6.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Conan the Barbarian\"},{\"IMDB Rating\":5.4,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Conan the Destroyer\"},{\"IMDB Rating\":6.3,\"Production Budget\":3250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Class of 1984\"},{\"IMDB Rating\":4.9,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"The Clan of the Cave Bear\"},{\"IMDB Rating\":8,\"Production Budget\":180000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bacheha-Ye aseman\"},{\"IMDB Rating\":7.3,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Coming Home\"},{\"IMDB Rating\":7.6,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Nanjing! Nanjing!\"},{\"IMDB Rating\":6.5,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"Cool Runnings\"},{\"IMDB Rating\":5.8,\"Production Budget\":1700000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Conquest of the Planet of the Apes\"},{\"IMDB Rating\":7.4,\"Production Budget\":10000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Cure\"},{\"IMDB Rating\":6.5,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Crocodile Dundee\"},{\"IMDB Rating\":7.3,\"Production Budget\":10000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dayereh\"},{\"IMDB Rating\":7.8,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Karakter\"},{\"IMDB Rating\":6.5,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Creepshow\"},{\"IMDB Rating\":5.4,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Creepshow 2\"},{\"IMDB Rating\":7.3,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"The Crying Game\"},{\"IMDB Rating\":7.2,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Crimson Tide\"},{\"IMDB Rating\":5.8,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Caravans\"},{\"IMDB Rating\":7.6,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Fengkuang de Shitou\"},{\"IMDB Rating\":8.8,\"Production Budget\":950000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Casablanca\"},{\"IMDB Rating\":8.1,\"Production Budget\":52000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Casino\"},{\"IMDB Rating\":5.7,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"Casper\"},{\"IMDB Rating\":3.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Can't Stop the Music\"},{\"IMDB Rating\":7.1,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Catch-22\"},{\"IMDB Rating\":6.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"City Hall\"},{\"IMDB Rating\":5.3,\"Production Budget\":92000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Cutthroat Island\"},{\"IMDB Rating\":6.8,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"La femme de chambre du Titanic\"},{\"IMDB Rating\":5.9,\"Production Budget\":134000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Cat People\"},{\"IMDB Rating\":6.6,\"Production Budget\":46000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Courage Under Fire\"},{\"IMDB Rating\":8.8,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"C'era una volta il West\"},{\"IMDB Rating\":8.1,\"Production Budget\":1600000,\"Rotten Tomatoes Rating\":98,\"Title\":\"The Conversation\"},{\"IMDB Rating\":6,\"Production Budget\":7000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Cavite\"},{\"IMDB Rating\":6.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Copycat\"},{\"IMDB Rating\":5.3,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dark Angel\"},{\"IMDB Rating\":4.3,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Boot, Das\"},{\"IMDB Rating\":7,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Desperado\"},{\"IMDB Rating\":7.2,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dumb & Dumber\"},{\"IMDB Rating\":6.7,\"Production Budget\":7200000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Diamonds Are Forever\"},{\"IMDB Rating\":5.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Dark Half\"},{\"IMDB Rating\":6.3,\"Production Budget\":400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Dark Hours\"},{\"IMDB Rating\":5.6,\"Production Budget\":115000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Dante's Peak\"},{\"IMDB Rating\":5.4,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Daylight\"},{\"IMDB Rating\":5.9,\"Production Budget\":47000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Dick Tracy\"},{\"IMDB Rating\":4.4,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Decoys\"},{\"IMDB Rating\":7.4,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dawn of the Dead\"},{\"IMDB Rating\":6.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":59,\"Title\":\"The Addams Family\"},{\"IMDB Rating\":6,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Death Becomes Her\"},{\"IMDB Rating\":3.8,\"Production Budget\":1300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Def-Con 4\"},{\"IMDB Rating\":7.8,\"Production Budget\":16400000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Dead Poets' Society\"},{\"IMDB Rating\":5.5,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":94,\"Title\":\"The Day the Earth Stood Still\"},{\"IMDB Rating\":5.2,\"Production Budget\":25000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Deep Throat\"},{\"IMDB Rating\":7.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Dead Zone\"},{\"IMDB Rating\":7,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Die Hard 2\"},{\"IMDB Rating\":7.4,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Die Hard: With a Vengeance\"},{\"IMDB Rating\":6.2,\"Production Budget\":57000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Dragonheart\"},{\"IMDB Rating\":7.3,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Die Hard\"},{\"IMDB Rating\":7.1,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Diner\"},{\"IMDB Rating\":5,\"Production Budget\":1600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dil Jo Bhi Kahey...\"},{\"IMDB Rating\":6.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"Don Juan DeMarco\"},{\"IMDB Rating\":6.4,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Tales from the Crypt: Demon Knight\"},{\"IMDB Rating\":4.7,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Damnation Alley\"},{\"IMDB Rating\":7.6,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Dead Man Walking\"},{\"IMDB Rating\":8,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Dances with Wolves\"},{\"IMDB Rating\":7.7,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Dangerous Liaisons\"},{\"IMDB Rating\":6.6,\"Production Budget\":2686000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Donovan's Reef\"},{\"IMDB Rating\":5.9,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Due occhi diabolici\"},{\"IMDB Rating\":4.7,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Double Impact\"},{\"IMDB Rating\":7,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"The Doors\"},{\"IMDB Rating\":4.5,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Day of the Dead\"},{\"IMDB Rating\":5.4,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Days of Thunder\"},{\"IMDB Rating\":7,\"Production Budget\":1100000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dracula: Pages from a Virgin's Diary\"},{\"IMDB Rating\":5.8,\"Production Budget\":170000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dolphin\"},{\"IMDB Rating\":6.1,\"Production Budget\":300000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Death Race 2000\"},{\"IMDB Rating\":7.6,\"Production Budget\":2650000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Dress\"},{\"IMDB Rating\":8.2,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Deer Hunter\"},{\"IMDB Rating\":6.8,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Dragonslayer\"},{\"IMDB Rating\":7.5,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Driving Miss Daisy\"},{\"IMDB Rating\":7.1,\"Production Budget\":6500000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Dressed to Kill\"},{\"IMDB Rating\":7.9,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Do the Right Thing\"},{\"IMDB Rating\":6.5,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Dune\"},{\"IMDB Rating\":5.8,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Down & Out with the Dolls\"},{\"IMDB Rating\":6.6,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"Dream With The Fishes\"},{\"IMDB Rating\":8,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Doctor Zhivago\"},{\"IMDB Rating\":7.6,\"Production Budget\":375000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Evil Dead\"},{\"IMDB Rating\":7.9,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Evil Dead II\"},{\"IMDB Rating\":7.6,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Army of Darkness\"},{\"IMDB Rating\":5.6,\"Production Budget\":1800000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Ed and his Dead Mother\"},{\"IMDB Rating\":8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Edward Scissorhands\"},{\"IMDB Rating\":8.1,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Ed Wood\"},{\"IMDB Rating\":6.2,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Egyptian\"},{\"IMDB Rating\":6.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Everyone Says I Love You\"},{\"IMDB Rating\":8.4,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"The Elephant Man\"},{\"IMDB Rating\":6.8,\"Production Budget\":5900000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Emma\"},{\"IMDB Rating\":7.1,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Escape from New York\"},{\"IMDB Rating\":5.3,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"Escape from L.A.\"},{\"IMDB Rating\":6.1,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Escape from the Planet of the Apes\"},{\"IMDB Rating\":5.9,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"Eraser\"},{\"IMDB Rating\":7.4,\"Production Budget\":100000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Eraserhead\"},{\"IMDB Rating\":7.9,\"Production Budget\":10500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"ET: The Extra-Terrestrial\"},{\"IMDB Rating\":4.7,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Excessive Force\"},{\"IMDB Rating\":3.5,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Exorcist II: The Heretic\"},{\"IMDB Rating\":7.1,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Exotica\"},{\"IMDB Rating\":6,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Force 10 from Navarone\"},{\"IMDB Rating\":6.6,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"A Farewell To Arms\"},{\"IMDB Rating\":6.8,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Fatal Attraction\"},{\"IMDB Rating\":6.8,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"Family Plot\"},{\"IMDB Rating\":5.4,\"Production Budget\":400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Fabled\"},{\"IMDB Rating\":6.7,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Fetching Cody\"},{\"IMDB Rating\":7.9,\"Production Budget\":2200000,\"Rotten Tomatoes Rating\":98,\"Title\":\"The French Connection\"},{\"IMDB Rating\":7.1,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"From Dusk Till Dawn\"},{\"IMDB Rating\":5.6,\"Production Budget\":550000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Friday the 13th\"},{\"IMDB Rating\":5.5,\"Production Budget\":2250000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Friday the 13th Part 3\"},{\"IMDB Rating\":4.6,\"Production Budget\":2800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Friday the 13th Part VII: The New Blood\"},{\"IMDB Rating\":3.9,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Friday the 13th Part VIII: Jason Takes Manhattan\"},{\"IMDB Rating\":4.1,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Jason Goes to Hell: The Final Friday\"},{\"IMDB Rating\":8.2,\"Production Budget\":600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Per qualche dollaro in pi˘\"},{\"IMDB Rating\":8,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Per un pugno di dollari\"},{\"IMDB Rating\":6.6,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"The Fall of the Roman Empire\"},{\"IMDB Rating\":5.5,\"Production Budget\":1250000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Friday the 13th Part 2\"},{\"IMDB Rating\":5.7,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Faithful\"},{\"IMDB Rating\":6.6,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Fair Game\"},{\"IMDB Rating\":7.6,\"Production Budget\":33000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"A Few Good Men\"},{\"IMDB Rating\":7.8,\"Production Budget\":44000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"The Fugitive\"},{\"IMDB Rating\":7.9,\"Production Budget\":1650000,\"Rotten Tomatoes Rating\":86,\"Title\":\"From Here to Eternity\"},{\"IMDB Rating\":6.4,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Shooting Fish\"},{\"IMDB Rating\":6.2,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"F.I.S.T\"},{\"IMDB Rating\":5.6,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Flashdance\"},{\"IMDB Rating\":4.9,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Fled\"},{\"IMDB Rating\":6.2,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Flash Gordon\"},{\"IMDB Rating\":4.6,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"The Flintstones\"},{\"IMDB Rating\":5.3,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Flight of the Intruder\"},{\"IMDB Rating\":6.4,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"Flatliners\"},{\"IMDB Rating\":null,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"The Flower of Evil\"},{\"IMDB Rating\":6.1,\"Production Budget\":30000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Funny Ha Ha\"},{\"IMDB Rating\":6.4,\"Production Budget\":12500000,\"Rotten Tomatoes Rating\":83,\"Title\":\"The Funeral\"},{\"IMDB Rating\":7.8,\"Production Budget\":2280000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Fantasia\"},{\"IMDB Rating\":3.3,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"The Fog\"},{\"IMDB Rating\":8.6,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Forrest Gump\"},{\"IMDB Rating\":5.5,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"Fortress\"},{\"IMDB Rating\":7.7,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Fiddler on the Roof\"},{\"IMDB Rating\":7.2,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"The Front Page\"},{\"IMDB Rating\":7.4,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"First Blood\"},{\"IMDB Rating\":7,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Friday\"},{\"IMDB Rating\":6.3,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Freeze Frame\"},{\"IMDB Rating\":5.6,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Firefox\"},{\"IMDB Rating\":8.3,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Fargo\"},{\"IMDB Rating\":5.6,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"First Knight\"},{\"IMDB Rating\":7.5,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"From Russia With Love\"},{\"IMDB Rating\":5.5,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"The Firm\"},{\"IMDB Rating\":7.5,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Frenzy\"},{\"IMDB Rating\":6,\"Production Budget\":8200000,\"Rotten Tomatoes Rating\":56,\"Title\":\"Footloose\"},{\"IMDB Rating\":7.2,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Fast Times at Ridgemont High\"},{\"IMDB Rating\":6.6,\"Production Budget\":300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Fighting Tommy Riley\"},{\"IMDB Rating\":5.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"The First Wives Club\"},{\"IMDB Rating\":6.7,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Flirting with Disaster\"},{\"IMDB Rating\":6.8,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"For Your Eyes Only\"},{\"IMDB Rating\":6.5,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Fiza\"},{\"IMDB Rating\":6.6,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"The Ghost and the Darkness\"},{\"IMDB Rating\":7.7,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Gallipoli\"},{\"IMDB Rating\":5.5,\"Production Budget\":50000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Gabriela\"},{\"IMDB Rating\":6.8,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Il buono, il brutto, il cattivo\"},{\"IMDB Rating\":3,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Graduation Day\"},{\"IMDB Rating\":9,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Godfather: Part II\"},{\"IMDB Rating\":7.6,\"Production Budget\":54000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Godfather: Part III\"},{\"IMDB Rating\":8.8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Goodfellas\"},{\"IMDB Rating\":9.2,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"The Godfather\"},{\"IMDB Rating\":6.8,\"Production Budget\":300000,\"Rotten Tomatoes Rating\":50,\"Title\":\"God's Army\"},{\"IMDB Rating\":8.4,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"The Great Escape\"},{\"IMDB Rating\":5.2,\"Production Budget\":425000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Gory Gory Hallelujah\"},{\"IMDB Rating\":6.9,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Ghost\"},{\"IMDB Rating\":6.8,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Ghostbusters\"},{\"IMDB Rating\":4.9,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"Girl 6\"},{\"IMDB Rating\":7.2,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Goldeneye\"},{\"IMDB Rating\":4.9,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"The Glimmer Man\"},{\"IMDB Rating\":8,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Glory\"},{\"IMDB Rating\":6.1,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Gambler\"},{\"IMDB Rating\":7.2,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Good Morning Vietnam\"},{\"IMDB Rating\":8.2,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Gandhi\"},{\"IMDB Rating\":6.9,\"Production Budget\":2627000,\"Rotten Tomatoes Rating\":null,\"Title\":\"A Guy Named Joe\"},{\"IMDB Rating\":7.4,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Gentleman's Agreement\"},{\"IMDB Rating\":7,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Goodbye Bafana\"},{\"IMDB Rating\":6.7,\"Production Budget\":2400000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Get on the Bus\"},{\"IMDB Rating\":5.4,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"The Golden Child\"},{\"IMDB Rating\":6.4,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Good Dick\"},{\"IMDB Rating\":7.9,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Goldfinger\"},{\"IMDB Rating\":8.2,\"Production Budget\":14600000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Groundhog Day\"},{\"IMDB Rating\":7,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Gremlins\"},{\"IMDB Rating\":7.5,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Get Real\"},{\"IMDB Rating\":6.1,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Gremlins 2: The New Batch\"},{\"IMDB Rating\":6.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"The Greatest Story Ever Told\"},{\"IMDB Rating\":6.8,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"The Greatest Show on Earth\"},{\"IMDB Rating\":6.9,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The First Great Train Robbery\"},{\"IMDB Rating\":6.9,\"Production Budget\":30250000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Get Shorty\"},{\"IMDB Rating\":7.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Gettysburg\"},{\"IMDB Rating\":8.2,\"Production Budget\":3900000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Gone with the Wind\"},{\"IMDB Rating\":6.5,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Happiness\"},{\"IMDB Rating\":5.3,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Harley Davidson and the Marlboro Man\"},{\"IMDB Rating\":6,\"Production Budget\":9300000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Heavy Metal\"},{\"IMDB Rating\":7.9,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Hell's Angels\"},{\"IMDB Rating\":4.1,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Heartbeeps\"},{\"IMDB Rating\":1.5,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Helix...  Loaded\"},{\"IMDB Rating\":6.9,\"Production Budget\":1800000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Hang 'em High\"},{\"IMDB Rating\":7,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Hellraiser\"},{\"IMDB Rating\":6.4,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Hero\"},{\"IMDB Rating\":3.8,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Highlander III: The Sorcerer\"},{\"IMDB Rating\":7.2,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"Highlander\"},{\"IMDB Rating\":7.9,\"Production Budget\":1250000,\"Rotten Tomatoes Rating\":88,\"Title\":\"How Green Was My Valley\"},{\"IMDB Rating\":8.3,\"Production Budget\":730000,\"Rotten Tomatoes Rating\":95,\"Title\":\"High Noon\"},{\"IMDB Rating\":6.5,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"History of the World: Part I\"},{\"IMDB Rating\":4.4,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Hello, Dolly\"},{\"IMDB Rating\":4.9,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Halloween II\"},{\"IMDB Rating\":3.8,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Halloween 3: Season of the Witch\"},{\"IMDB Rating\":5.6,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Halloween 4: The Return of Michael Myers\"},{\"IMDB Rating\":null,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Halloween 5: The Revenge of Michael Myers\"},{\"IMDB Rating\":4.4,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Halloween:  The Curse of Michael Myers\"},{\"IMDB Rating\":6,\"Production Budget\":325000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Halloween\"},{\"IMDB Rating\":5.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Home Alone 2: Lost in New York\"},{\"IMDB Rating\":7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Home Alone\"},{\"IMDB Rating\":5.3,\"Production Budget\":400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Home Movies\"},{\"IMDB Rating\":3.6,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Hum to Mohabbt Karega\"},{\"IMDB Rating\":5.8,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":69,\"Title\":\"The Hotel New Hampshire\"},{\"IMDB Rating\":7.9,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Henry V\"},{\"IMDB Rating\":4.6,\"Production Budget\":10100000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Housefull\"},{\"IMDB Rating\":6.2,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Hook\"},{\"IMDB Rating\":4.3,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"House Party 2\"},{\"IMDB Rating\":6,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Hocus Pocus\"},{\"IMDB Rating\":6.5,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"The Howling\"},{\"IMDB Rating\":7.6,\"Production Budget\":15700000,\"Rotten Tomatoes Rating\":null,\"Title\":\"High Plains Drifter\"},{\"IMDB Rating\":8,\"Production Budget\":700000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Hoop Dreams\"},{\"IMDB Rating\":6.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"Happy Gilmore\"},{\"IMDB Rating\":7.4,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"The Hudsucker Proxy\"},{\"IMDB Rating\":7.6,\"Production Budget\":560000,\"Rotten Tomatoes Rating\":100,\"Title\":\"A Hard Day's Night\"},{\"IMDB Rating\":6.1,\"Production Budget\":400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Heroes\"},{\"IMDB Rating\":7.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"The Hunt for Red October\"},{\"IMDB Rating\":7,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Harper\"},{\"IMDB Rating\":5.8,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Harriet the Spy\"},{\"IMDB Rating\":6.9,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Le hussard sur le toit\"},{\"IMDB Rating\":8.1,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"The Hustler\"},{\"IMDB Rating\":3.4,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Hud\"},{\"IMDB Rating\":5.3,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"Hudson Hawk\"},{\"IMDB Rating\":6.5,\"Production Budget\":44000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Heaven's Gate\"},{\"IMDB Rating\":5.6,\"Production Budget\":650000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Hav Plenty\"},{\"IMDB Rating\":5.4,\"Production Budget\":658000,\"Rotten Tomatoes Rating\":94,\"Title\":\"House of Wax\"},{\"IMDB Rating\":6.4,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Hawaii\"},{\"IMDB Rating\":4.1,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"Howard the Duck\"},{\"IMDB Rating\":6.5,\"Production Budget\":3400000,\"Rotten Tomatoes Rating\":73,\"Title\":\"High Anxiety\"},{\"IMDB Rating\":2.2,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Hybrid\"},{\"IMDB Rating\":8.7,\"Production Budget\":3180000,\"Rotten Tomatoes Rating\":94,\"Title\":\"It's a Wonderful Life\"},{\"IMDB Rating\":5.1,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"The Ice Pirates\"},{\"IMDB Rating\":6.5,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Independence Day\"},{\"IMDB Rating\":4.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"The Island of Dr. Moreau\"},{\"IMDB Rating\":7.8,\"Production Budget\":775000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Iraq for Sale: The War Profiteers\"},{\"IMDB Rating\":3.5,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"In Her Line of Fire\"},{\"IMDB Rating\":5.7,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"The Indian in the Cupboard\"},{\"IMDB Rating\":5.6,\"Production Budget\":68000,\"Rotten Tomatoes Rating\":null,\"Title\":\"I Love You Ö Don't Touch Me!\"},{\"IMDB Rating\":6.1,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Illuminata\"},{\"IMDB Rating\":8.1,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":88,\"Title\":\"In Cold Blood\"},{\"IMDB Rating\":7.2,\"Production Budget\":25000,\"Rotten Tomatoes Rating\":89,\"Title\":\"In the Company of Men\"},{\"IMDB Rating\":5.7,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"The Inkwell\"},{\"IMDB Rating\":5,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Invaders from Mars\"},{\"IMDB Rating\":6.1,\"Production Budget\":3400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"L'incomparable mademoiselle C.\"},{\"IMDB Rating\":null,\"Production Budget\":385907,\"Rotten Tomatoes Rating\":96,\"Title\":\"Intolerance\"},{\"IMDB Rating\":6.9,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Island\"},{\"IMDB Rating\":5.1,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Eye See You\"},{\"IMDB Rating\":8.1,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"In the Heat of the Night\"},{\"IMDB Rating\":5.3,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Jack\"},{\"IMDB Rating\":4.8,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"Jade\"},{\"IMDB Rating\":4.9,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"Jingle All the Way\"},{\"IMDB Rating\":7.3,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dr. No\"},{\"IMDB Rating\":5.8,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Jungle Book\"},{\"IMDB Rating\":4.9,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Judge Dredd\"},{\"IMDB Rating\":3.9,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"The Jerky Boys\"},{\"IMDB Rating\":5.6,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"Jefferson in Paris\"},{\"IMDB Rating\":8,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"JFK\"},{\"IMDB Rating\":7.2,\"Production Budget\":1300000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Journey from the Fall\"},{\"IMDB Rating\":5.5,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Jekyll and Hyde... Together Again\"},{\"IMDB Rating\":6.4,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Jumanji\"},{\"IMDB Rating\":5.3,\"Production Budget\":44000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"The Juror\"},{\"IMDB Rating\":7.9,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Jerusalema\"},{\"IMDB Rating\":7.9,\"Production Budget\":63000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Jurassic Park\"},{\"IMDB Rating\":5.8,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Johnny Suede\"},{\"IMDB Rating\":8.3,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Jaws\"},{\"IMDB Rating\":5.6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"Jaws 2\"},{\"IMDB Rating\":2.6,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Jaws 4: The Revenge\"},{\"IMDB Rating\":5.6,\"Production Budget\":10750000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Kabhi Alvida Naa Kehna\"},{\"IMDB Rating\":5.5,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Kickboxer\"},{\"IMDB Rating\":6.7,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Kids\"},{\"IMDB Rating\":6.7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"Kingpin\"},{\"IMDB Rating\":5.8,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Kindergarten Cop\"},{\"IMDB Rating\":7.6,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"King Kong\"},{\"IMDB Rating\":7.6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Kiss of Death\"},{\"IMDB Rating\":5.7,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Kingdom of the Spiders\"},{\"IMDB Rating\":7.9,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Akira\"},{\"IMDB Rating\":5.8,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Krush Groove\"},{\"IMDB Rating\":6.1,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Krrish\"},{\"IMDB Rating\":6,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"Kansas City\"},{\"IMDB Rating\":7.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"The Last Emperor\"},{\"IMDB Rating\":5.9,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Last Action Hero\"},{\"IMDB Rating\":6.8,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Live and Let Die\"},{\"IMDB Rating\":7.8,\"Production Budget\":2700000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Lage Raho Munnabhai\"},{\"IMDB Rating\":8,\"Production Budget\":35000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Last Waltz\"},{\"IMDB Rating\":6,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Last Big Thing\"},{\"IMDB Rating\":6.9,\"Production Budget\":12300000,\"Rotten Tomatoes Rating\":71,\"Title\":\"The Land Before Time\"},{\"IMDB Rating\":7.8,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"The Longest Day\"},{\"IMDB Rating\":6.7,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"The Living Daylights\"},{\"IMDB Rating\":7.8,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Aladdin\"},{\"IMDB Rating\":5.4,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"A Low Down Dirty Shame\"},{\"IMDB Rating\":6.9,\"Production Budget\":4030000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Love and Death on Long Island\"},{\"IMDB Rating\":6.7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Ladyhawke\"},{\"IMDB Rating\":7.5,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Nikita\"},{\"IMDB Rating\":7.8,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Lion of the Desert\"},{\"IMDB Rating\":5.6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Legal Eagles\"},{\"IMDB Rating\":6.1,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Legend\"},{\"IMDB Rating\":6.7,\"Production Budget\":87000,\"Rotten Tomatoes Rating\":63,\"Title\":\"The Last House on the Left\"},{\"IMDB Rating\":5.8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"Lifeforce\"},{\"IMDB Rating\":6.6,\"Production Budget\":4700000,\"Rotten Tomatoes Rating\":73,\"Title\":\"Lady in White\"},{\"IMDB Rating\":6.6,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"The Long Kiss Goodnight\"},{\"IMDB Rating\":8.4,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Lake of Fire\"},{\"IMDB Rating\":7.5,\"Production Budget\":2100000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Elling\"},{\"IMDB Rating\":7.8,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Elmer Gantry\"},{\"IMDB Rating\":7,\"Production Budget\":7000,\"Rotten Tomatoes Rating\":null,\"Title\":\"El Mariachi\"},{\"IMDB Rating\":7.5,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Aliens\"},{\"IMDB Rating\":6.3,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Alien³\"},{\"IMDB Rating\":8.2,\"Production Budget\":79300000,\"Rotten Tomatoes Rating\":92,\"Title\":\"The Lion King\"},{\"IMDB Rating\":7.6,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Love and Death\"},{\"IMDB Rating\":5.7,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Love and Other Catastrophes\"},{\"IMDB Rating\":7.3,\"Production Budget\":550000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Love Letters\"},{\"IMDB Rating\":4.6,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Legend of the Lone Ranger\"},{\"IMDB Rating\":7.8,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"The Last of the Mohicans\"},{\"IMDB Rating\":5.9,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Love Me Tender\"},{\"IMDB Rating\":7.1,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"The Long Riders\"},{\"IMDB Rating\":4.6,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Losin' It\"},{\"IMDB Rating\":4.9,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"The Loss of Sexual Innocence\"},{\"IMDB Rating\":7.1,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Legends of the Fall\"},{\"IMDB Rating\":6.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"A League of Their Own\"},{\"IMDB Rating\":5.7,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Loaded Weapon 1\"},{\"IMDB Rating\":8.2,\"Production Budget\":1250000,\"Rotten Tomatoes Rating\":100,\"Title\":\"The Lost Weekend\"},{\"IMDB Rating\":6.9,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Le petit Nicolas\"},{\"IMDB Rating\":6.7,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Logan's Run\"},{\"IMDB Rating\":6.9,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Betty Fisher et autres histoires\"},{\"IMDB Rating\":6.7,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Light Sleeper\"},{\"IMDB Rating\":6.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Little Shop of Horrors\"},{\"IMDB Rating\":7.6,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Lone Star\"},{\"IMDB Rating\":7.4,\"Production Budget\":850000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Latter Days\"},{\"IMDB Rating\":7.6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Lethal Weapon\"},{\"IMDB Rating\":6.5,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"Lethal Weapon 3\"},{\"IMDB Rating\":5.7,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Last Time I Committed Suicide\"},{\"IMDB Rating\":6.9,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Little Voice\"},{\"IMDB Rating\":7.5,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"The Last Temptation of Christ\"},{\"IMDB Rating\":6.5,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"License to Kill\"},{\"IMDB Rating\":7.2,\"Production Budget\":800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Cama adentro\"},{\"IMDB Rating\":7.6,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Leaving Las Vegas\"},{\"IMDB Rating\":5.1,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"The Lawnmower Man\"},{\"IMDB Rating\":5.8,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Lone Wolf McQuade\"},{\"IMDB Rating\":7.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Little Women\"},{\"IMDB Rating\":8.6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Lawrence of Arabia\"},{\"IMDB Rating\":7.4,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Menace II Society\"},{\"IMDB Rating\":7.4,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Much Ado About Nothing\"},{\"IMDB Rating\":6.7,\"Production Budget\":3800000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Major Dundee\"},{\"IMDB Rating\":6.4,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Magic Flute\"},{\"IMDB Rating\":2.2,\"Production Budget\":558000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mata Hari\"},{\"IMDB Rating\":7.7,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Malcolm X\"},{\"IMDB Rating\":6.2,\"Production Budget\":350000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Maniac\"},{\"IMDB Rating\":7.7,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Mary Poppins\"},{\"IMDB Rating\":5.5,\"Production Budget\":47000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Mary Reilly\"},{\"IMDB Rating\":4.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Maximum Risk\"},{\"IMDB Rating\":8.6,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"M*A*S*H\"},{\"IMDB Rating\":6.6,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"The Mask\"},{\"IMDB Rating\":6.3,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Mars Attacks!\"},{\"IMDB Rating\":6.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"Mo' Better Blues\"},{\"IMDB Rating\":7.4,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Moby Dick\"},{\"IMDB Rating\":6.9,\"Production Budget\":400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"My Beautiful Laundrette\"},{\"IMDB Rating\":7.2,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Michael Jordan to the MAX\"},{\"IMDB Rating\":6.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Michael Collins\"},{\"IMDB Rating\":7.3,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"My Cousin Vinny\"},{\"IMDB Rating\":5.7,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Medicine Man\"},{\"IMDB Rating\":7.4,\"Production Budget\":11900000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Madadayo\"},{\"IMDB Rating\":4.5,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Modern Problems\"},{\"IMDB Rating\":8.4,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Amadeus\"},{\"IMDB Rating\":8.5,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Modern Times\"},{\"IMDB Rating\":5.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"The Mighty Ducks\"},{\"IMDB Rating\":8.1,\"Production Budget\":3900000,\"Rotten Tomatoes Rating\":85,\"Title\":\"A Man for All Seasons\"},{\"IMDB Rating\":2.5,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Megaforce\"},{\"IMDB Rating\":6,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"The Mirror Has Two Faces\"},{\"IMDB Rating\":8,\"Production Budget\":3600000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Midnight Cowboy\"},{\"IMDB Rating\":7.5,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Midnight Run\"},{\"IMDB Rating\":6.9,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Major League\"},{\"IMDB Rating\":6.8,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"The Molly Maguires\"},{\"IMDB Rating\":5,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":31,\"Title\":\"Malevolence\"},{\"IMDB Rating\":7.5,\"Production Budget\":9400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"It's a Mad Mad Mad Mad World\"},{\"IMDB Rating\":6.9,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mad Max\"},{\"IMDB Rating\":5.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mad Max Beyond Thunderdome\"},{\"IMDB Rating\":7,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"The Man From Snowy River\"},{\"IMDB Rating\":5.2,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Men of War\"},{\"IMDB Rating\":8.4,\"Production Budget\":400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Monty Python and the Holy Grail\"},{\"IMDB Rating\":5.8,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Men with Brooms\"},{\"IMDB Rating\":7.9,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Mutiny on The Bounty\"},{\"IMDB Rating\":6.3,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"Mommie Dearest\"},{\"IMDB Rating\":6.1,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"March or Die\"},{\"IMDB Rating\":5.8,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Memoirs of an Invisible Man\"},{\"IMDB Rating\":7,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":84,\"Title\":\"My Own Private Idaho\"},{\"IMDB Rating\":6.1,\"Production Budget\":31000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Moonraker\"},{\"IMDB Rating\":5.2,\"Production Budget\":68000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Money Train\"},{\"IMDB Rating\":7.2,\"Production Budget\":430000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Metropolitan\"},{\"IMDB Rating\":7.1,\"Production Budget\":6100000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Mallrats\"},{\"IMDB Rating\":6.7,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":42,\"Title\":\"American Desi\"},{\"IMDB Rating\":5.8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Mrs. Winterbourne\"},{\"IMDB Rating\":6.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Mrs. Doubtfire\"},{\"IMDB Rating\":8.2,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Mr. Smith Goes To Washington\"},{\"IMDB Rating\":5.4,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Mortal Kombat\"},{\"IMDB Rating\":6.2,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Frankenstein\"},{\"IMDB Rating\":7.4,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"The Misfits\"},{\"IMDB Rating\":4.8,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"My Stepmother Is an Alien\"},{\"IMDB Rating\":8.1,\"Production Budget\":3200000,\"Rotten Tomatoes Rating\":97,\"Title\":\"The Man Who Shot Liberty Valance\"},{\"IMDB Rating\":6.9,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mission: Impossible\"},{\"IMDB Rating\":4.7,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Meteor\"},{\"IMDB Rating\":5.7,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Multiplicity\"},{\"IMDB Rating\":7,\"Production Budget\":30000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mutual Appreciation\"},{\"IMDB Rating\":7.5,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"The Muppet Christmas Carol\"},{\"IMDB Rating\":6.7,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"The Man with the Golden Gun\"},{\"IMDB Rating\":7.9,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"My Fair Lady\"},{\"IMDB Rating\":5.9,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Mystic Pizza\"},{\"IMDB Rating\":6.7,\"Production Budget\":8400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Namastey London\"},{\"IMDB Rating\":6.8,\"Production Budget\":700000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Naturally Native\"},{\"IMDB Rating\":3,\"Production Budget\":46000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Inchon\"},{\"IMDB Rating\":7.5,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Indiana Jones and the Temple of Doom\"},{\"IMDB Rating\":8.3,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Indiana Jones and the Last Crusade\"},{\"IMDB Rating\":3.5,\"Production Budget\":1300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Neal n' Nikki\"},{\"IMDB Rating\":5.2,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"A Nightmare on Elm Street 4: The Dream Master\"},{\"IMDB Rating\":6.3,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Nighthawks\"},{\"IMDB Rating\":7.3,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"The English Patient\"},{\"IMDB Rating\":7,\"Production Budget\":1250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Niagara\"},{\"IMDB Rating\":6.6,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Naked Gun 2Ω: The Smell of Fear\"},{\"IMDB Rating\":6.1,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Naked Gun 33 1/3: The Final Insult\"},{\"IMDB Rating\":null,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"National Lampoon's Animal House\"},{\"IMDB Rating\":6.6,\"Production Budget\":114000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Night of the Living Dead\"},{\"IMDB Rating\":5.7,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"No Looking Back\"},{\"IMDB Rating\":7.5,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":93,\"Title\":\"The Nun's Story\"},{\"IMDB Rating\":5.3,\"Production Budget\":1800000,\"Rotten Tomatoes Rating\":95,\"Title\":\"A Nightmare on Elm Street\"},{\"IMDB Rating\":4.9,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"A Nightmare On Elm Street Part 2: Freddy's Revenge\"},{\"IMDB Rating\":6.2,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"A Nightmare On Elm Street 3: Dream Warriors\"},{\"IMDB Rating\":4.7,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"A Nightmare On Elm Street: The Dream Child\"},{\"IMDB Rating\":4.5,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Freddy's Dead: The Final Nightmare\"},{\"IMDB Rating\":null,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Wes Craven's New Nightmare\"},{\"IMDB Rating\":6.6,\"Production Budget\":4200000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Night of the Living Dead\"},{\"IMDB Rating\":6.3,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Notorious\"},{\"IMDB Rating\":6,\"Production Budget\":36000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Never Say Never Again\"},{\"IMDB Rating\":5.2,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"The Nutcracker\"},{\"IMDB Rating\":5,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Nowhere to Run\"},{\"IMDB Rating\":7.4,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Interview with the Vampire: The Vampire Chronicles\"},{\"IMDB Rating\":5.6,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"The Nutty Professor\"},{\"IMDB Rating\":7.4,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Die Unendliche Geschichte\"},{\"IMDB Rating\":6.6,\"Production Budget\":750000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Interview with the Assassin\"},{\"IMDB Rating\":7.1,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Nixon\"},{\"IMDB Rating\":6.7,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"New York, New York\"},{\"IMDB Rating\":6.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"New York Stories\"},{\"IMDB Rating\":5.5,\"Production Budget\":36500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Obitaemyy ostrov\"},{\"IMDB Rating\":6.6,\"Production Budget\":27500000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Octopussy\"},{\"IMDB Rating\":3.8,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"On Deadly Ground\"},{\"IMDB Rating\":8.9,\"Production Budget\":4400000,\"Rotten Tomatoes Rating\":96,\"Title\":\"One Flew Over the Cuckoo's Nest\"},{\"IMDB Rating\":5.6,\"Production Budget\":1100000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Offspring\"},{\"IMDB Rating\":6.9,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"On Her Majesty's Secret Service\"},{\"IMDB Rating\":5.4,\"Production Budget\":2800000,\"Rotten Tomatoes Rating\":84,\"Title\":\"The Omen\"},{\"IMDB Rating\":3.3,\"Production Budget\":7200000,\"Rotten Tomatoes Rating\":8,\"Title\":\"The Omega Code\"},{\"IMDB Rating\":7,\"Production Budget\":31000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Out of Africa\"},{\"IMDB Rating\":5.1,\"Production Budget\":1600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Out of the Dark\"},{\"IMDB Rating\":7,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Ordinary People\"},{\"IMDB Rating\":6.3,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Other Side of Heaven\"},{\"IMDB Rating\":6.3,\"Production Budget\":10000,\"Rotten Tomatoes Rating\":null,\"Title\":\"On the Down Low\"},{\"IMDB Rating\":6.9,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Othello\"},{\"IMDB Rating\":6.5,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"On the Outs\"},{\"IMDB Rating\":8.4,\"Production Budget\":910000,\"Rotten Tomatoes Rating\":100,\"Title\":\"On the Waterfront\"},{\"IMDB Rating\":6.4,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":59,\"Title\":\"Outbreak\"},{\"IMDB Rating\":7,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"The Outsiders\"},{\"IMDB Rating\":6.1,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"The Oxford Murders\"},{\"IMDB Rating\":6.3,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Police Academy\"},{\"IMDB Rating\":2.5,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Police Academy 7: Mission to Moscow\"},{\"IMDB Rating\":7.3,\"Production Budget\":4300000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Paa\"},{\"IMDB Rating\":7.1,\"Production Budget\":6900000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Pale Rider\"},{\"IMDB Rating\":6.9,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Patriot Games\"},{\"IMDB Rating\":4.7,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"The Pallbearer\"},{\"IMDB Rating\":6,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Pocahontas\"},{\"IMDB Rating\":7.2,\"Production Budget\":2900000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Pocketful of Miracles\"},{\"IMDB Rating\":6,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"PCU\"},{\"IMDB Rating\":6,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Pete's Dragon\"},{\"IMDB Rating\":7.3,\"Production Budget\":4638783,\"Rotten Tomatoes Rating\":null,\"Title\":\"Pat Garrett and Billy the Kid\"},{\"IMDB Rating\":7.4,\"Production Budget\":10700000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Poltergeist\"},{\"IMDB Rating\":3.8,\"Production Budget\":9500000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Poltergeist III\"},{\"IMDB Rating\":6.3,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Phantasm II\"},{\"IMDB Rating\":6.3,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Phenomenon\"},{\"IMDB Rating\":7.6,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"Philadelphia\"},{\"IMDB Rating\":4.8,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"The Phantom\"},{\"IMDB Rating\":7.5,\"Production Budget\":68000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Pi\"},{\"IMDB Rating\":5.8,\"Production Budget\":12000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Pink Flamingos\"},{\"IMDB Rating\":7.1,\"Production Budget\":3700000,\"Rotten Tomatoes Rating\":71,\"Title\":\"The Pirate\"},{\"IMDB Rating\":7.7,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Player\"},{\"IMDB Rating\":7.5,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Apollo 13\"},{\"IMDB Rating\":8.2,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Platoon\"},{\"IMDB Rating\":2.7,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Panic\"},{\"IMDB Rating\":5.3,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"The Adventures of Pinocchio\"},{\"IMDB Rating\":4.6,\"Production Budget\":800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Pandora's Box\"},{\"IMDB Rating\":6,\"Production Budget\":27000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Pink Narcissus\"},{\"IMDB Rating\":5.5,\"Production Budget\":100000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Penitentiary\"},{\"IMDB Rating\":5.8,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Pursuit of D.B. Cooper\"},{\"IMDB Rating\":5.1,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"Poetic Justice\"},{\"IMDB Rating\":5.8,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Porky's\"},{\"IMDB Rating\":3,\"Production Budget\":70000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Peace, Propaganda and the Promised Land\"},{\"IMDB Rating\":4.9,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"Popeye\"},{\"IMDB Rating\":6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Predator 2\"},{\"IMDB Rating\":7.8,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Predator\"},{\"IMDB Rating\":8.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"The Princess Bride\"},{\"IMDB Rating\":5.8,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Prison\"},{\"IMDB Rating\":8.6,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"LÈon\"},{\"IMDB Rating\":4.7,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Prophecy\"},{\"IMDB Rating\":6.4,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"The Prince of Tides\"},{\"IMDB Rating\":5.7,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Proud\"},{\"IMDB Rating\":6.7,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Pretty Woman\"},{\"IMDB Rating\":6.6,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Partition\"},{\"IMDB Rating\":6.4,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"The Postman Always Rings Twice\"},{\"IMDB Rating\":6.3,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Peggy Sue Got Married\"},{\"IMDB Rating\":7.1,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Peter Pan\"},{\"IMDB Rating\":6.3,\"Production Budget\":11500000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Pet Sematary\"},{\"IMDB Rating\":8.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Patton\"},{\"IMDB Rating\":6.4,\"Production Budget\":15000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Puffy Chair\"},{\"IMDB Rating\":8.9,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Pulp Fiction\"},{\"IMDB Rating\":6.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Paint Your Wagon\"},{\"IMDB Rating\":4.6,\"Production Budget\":12500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Prisoner of Zenda\"},{\"IMDB Rating\":6,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"The Perez Family\"},{\"IMDB Rating\":6.1,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Q\"},{\"IMDB Rating\":6.3,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"The Quick and the Dead\"},{\"IMDB Rating\":6.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Quigley Down Under\"},{\"IMDB Rating\":7.4,\"Production Budget\":12500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"La Guerre du feu\"},{\"IMDB Rating\":5.8,\"Production Budget\":8250000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Quo Vadis?\"},{\"IMDB Rating\":8.1,\"Production Budget\":5300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Rang De Basanti\"},{\"IMDB Rating\":6.5,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Robin and Marian\"},{\"IMDB Rating\":6.6,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Ransom\"},{\"IMDB Rating\":8.1,\"Production Budget\":3200000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Rosemary's Baby\"},{\"IMDB Rating\":8.4,\"Production Budget\":1288000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Rebecca\"},{\"IMDB Rating\":6.7,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"Robin Hood: Prince of Thieves\"},{\"IMDB Rating\":6.8,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Rob Roy\"},{\"IMDB Rating\":8.4,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Raging Bull\"},{\"IMDB Rating\":7.5,\"Production Budget\":9200000,\"Rotten Tomatoes Rating\":95,\"Title\":\"Richard III\"},{\"IMDB Rating\":5.7,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Raising Cain\"},{\"IMDB Rating\":7.6,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"RoboCop\"},{\"IMDB Rating\":3.4,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"RoboCop 3\"},{\"IMDB Rating\":4.7,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Ri¢hie Ri¢h\"},{\"IMDB Rating\":7.5,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"Radio Days\"},{\"IMDB Rating\":6.5,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Radio Flyer\"},{\"IMDB Rating\":8.4,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Reservoir Dogs\"},{\"IMDB Rating\":8.7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Raiders of the Lost Ark\"},{\"IMDB Rating\":7.8,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Red River\"},{\"IMDB Rating\":7.4,\"Production Budget\":33500000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Reds\"},{\"IMDB Rating\":7.7,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Le Violon rouge\"},{\"IMDB Rating\":4.4,\"Production Budget\":17900000,\"Rotten Tomatoes Rating\":20,\"Title\":\"Red Sonja\"},{\"IMDB Rating\":2.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Return\"},{\"IMDB Rating\":7.5,\"Production Budget\":140000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Roger & Me\"},{\"IMDB Rating\":7.9,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"The Right Stuff\"},{\"IMDB Rating\":7.1,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":77,\"Title\":\"The Rocky Horror Picture Show\"},{\"IMDB Rating\":5.8,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Road House\"},{\"IMDB Rating\":6.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Romeo Is Bleeding\"},{\"IMDB Rating\":4.2,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Rockaway\"},{\"IMDB Rating\":4,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Rocky\"},{\"IMDB Rating\":5.1,\"Production Budget\":6200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Return of the Living Dead Part II\"},{\"IMDB Rating\":5.5,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":64,\"Title\":\"The R.M.\"},{\"IMDB Rating\":5.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Renaissance Man\"},{\"IMDB Rating\":5.8,\"Production Budget\":44000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Rambo: First Blood Part II\"},{\"IMDB Rating\":4.9,\"Production Budget\":58000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"Rambo III\"},{\"IMDB Rating\":6.5,\"Production Budget\":14500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Romeo+Juliet\"},{\"IMDB Rating\":8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Rain Man\"},{\"IMDB Rating\":6.1,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Rapa Nui\"},{\"IMDB Rating\":5.9,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Roar\"},{\"IMDB Rating\":6.7,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"The Robe\"},{\"IMDB Rating\":7.2,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"The Rock\"},{\"IMDB Rating\":7.9,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"The Remains of the Day\"},{\"IMDB Rating\":7.8,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Airplane!\"},{\"IMDB Rating\":6.7,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Repo Man\"},{\"IMDB Rating\":7.5,\"Production Budget\":1070000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Rocket Singh: Salesman of the Year\"},{\"IMDB Rating\":3.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Raise the Titanic\"},{\"IMDB Rating\":6.5,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Restoration\"},{\"IMDB Rating\":7.1,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"The Return of the Living Dead\"},{\"IMDB Rating\":5.9,\"Production Budget\":2700000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Rejsen til Saturn\"},{\"IMDB Rating\":8.5,\"Production Budget\":5000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Return to the Land of Wonders\"},{\"IMDB Rating\":6.7,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Return to Oz\"},{\"IMDB Rating\":6.4,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"The Running Man\"},{\"IMDB Rating\":6,\"Production Budget\":1750000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Run Lola Run\"},{\"IMDB Rating\":7.3,\"Production Budget\":350000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Revolution#9\"},{\"IMDB Rating\":6.2,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"The River Wild\"},{\"IMDB Rating\":8.7,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Se7en\"},{\"IMDB Rating\":5.9,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"Safe Men\"},{\"IMDB Rating\":7.9,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Secrets & Lies\"},{\"IMDB Rating\":5.2,\"Production Budget\":39000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Sgt. Bilko\"},{\"IMDB Rating\":6,\"Production Budget\":58000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Sabrina\"},{\"IMDB Rating\":6.2,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Subway\"},{\"IMDB Rating\":5.3,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"School Daze\"},{\"IMDB Rating\":8.2,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Scarface\"},{\"IMDB Rating\":8.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Schindler's List\"},{\"IMDB Rating\":8.1,\"Production Budget\":1800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"A Streetcar Named Desire\"},{\"IMDB Rating\":4.7,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Shadow Conspiracy\"},{\"IMDB Rating\":6.9,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Short Cut to Nirvana: Kumbh Mela\"},{\"IMDB Rating\":8,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Spartacus\"},{\"IMDB Rating\":6.9,\"Production Budget\":450000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Sunday\"},{\"IMDB Rating\":6.7,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":100,\"Title\":\"She Done Him Wrong\"},{\"IMDB Rating\":5.7,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":14,\"Title\":\"State Fair\"},{\"IMDB Rating\":6.2,\"Production Budget\":175000,\"Rotten Tomatoes Rating\":93,\"Title\":\"She's Gotta Have It\"},{\"IMDB Rating\":6.7,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Stargate\"},{\"IMDB Rating\":5.6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"The Shadow\"},{\"IMDB Rating\":6.9,\"Production Budget\":2300000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Show Boat\"},{\"IMDB Rating\":7.4,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Shadowlands\"},{\"IMDB Rating\":2.6,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Shanghai Surprise\"},{\"IMDB Rating\":5.3,\"Production Budget\":1455000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Shalako\"},{\"IMDB Rating\":4.3,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Sheena\"},{\"IMDB Rating\":7.6,\"Production Budget\":5500000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Shine\"},{\"IMDB Rating\":8.5,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"The Shining\"},{\"IMDB Rating\":6.4,\"Production Budget\":8500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Haakon Haakonsen\"},{\"IMDB Rating\":3.7,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Ishtar\"},{\"IMDB Rating\":4.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Showgirls\"},{\"IMDB Rating\":9.2,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"The Shawshank Redemption\"},{\"IMDB Rating\":5.9,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Silver Bullet\"},{\"IMDB Rating\":null,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":11,\"Title\":\"Side Effects\"},{\"IMDB Rating\":6.3,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Set It Off\"},{\"IMDB Rating\":8.7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"The Silence of the Lambs\"},{\"IMDB Rating\":5.2,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Silent Trigger\"},{\"IMDB Rating\":5.3,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":18,\"Title\":\"Thinner\"},{\"IMDB Rating\":8,\"Production Budget\":4833610,\"Rotten Tomatoes Rating\":96,\"Title\":\"Sling Blade\"},{\"IMDB Rating\":6.9,\"Production Budget\":23000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Slacker\"},{\"IMDB Rating\":8.3,\"Production Budget\":2883848,\"Rotten Tomatoes Rating\":97,\"Title\":\"Some Like it Hot\"},{\"IMDB Rating\":4.6,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"The Scarlet Letter\"},{\"IMDB Rating\":7.1,\"Production Budget\":8500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Silmido\"},{\"IMDB Rating\":7.3,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Sleeper\"},{\"IMDB Rating\":7.3,\"Production Budget\":44000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"Sleepers\"},{\"IMDB Rating\":6,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Slaughter Rule\"},{\"IMDB Rating\":6,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Solomon and Sheba\"},{\"IMDB Rating\":6.7,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Sur Le Seuil\"},{\"IMDB Rating\":8.7,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"The Usual Suspects\"},{\"IMDB Rating\":7,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Silverado\"},{\"IMDB Rating\":7.5,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Salvador\"},{\"IMDB Rating\":null,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Sex, Lies, and Videotape\"},{\"IMDB Rating\":5.9,\"Production Budget\":400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Show Me\"},{\"IMDB Rating\":8,\"Production Budget\":1300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Simon\"},{\"IMDB Rating\":3.8,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Super Mario Bros.\"},{\"IMDB Rating\":7,\"Production Budget\":5100000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Somewhere in Time\"},{\"IMDB Rating\":6.9,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Smoke Signals\"},{\"IMDB Rating\":6.4,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Serial Mom\"},{\"IMDB Rating\":7.6,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Sommersturm\"},{\"IMDB Rating\":6.4,\"Production Budget\":4400000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Silent Movie\"},{\"IMDB Rating\":6.1,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"The Santa Clause\"},{\"IMDB Rating\":5.7,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":50,\"Title\":\"The Singles Ward\"},{\"IMDB Rating\":7.7,\"Production Budget\":16500000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Sense and Sensibility\"},{\"IMDB Rating\":8.4,\"Production Budget\":2540000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Singin' in the Rain\"},{\"IMDB Rating\":4.8,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Solitude\"},{\"IMDB Rating\":6.3,\"Production Budget\":8200000,\"Rotten Tomatoes Rating\":81,\"Title\":\"The Sound of Music\"},{\"IMDB Rating\":6,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":60,\"Title\":\"She's the One\"},{\"IMDB Rating\":5.6,\"Production Budget\":450000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Straight out of Brooklyn\"},{\"IMDB Rating\":6.9,\"Production Budget\":22700000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Spaceballs\"},{\"IMDB Rating\":2.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Speed\"},{\"IMDB Rating\":5.6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Species\"},{\"IMDB Rating\":4.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Sphinx\"},{\"IMDB Rating\":4.8,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Spaced Invaders\"},{\"IMDB Rating\":7.7,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Spellbound\"},{\"IMDB Rating\":6.2,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Splash\"},{\"IMDB Rating\":3.4,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Superman IV: The Quest for Peace\"},{\"IMDB Rating\":6.7,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Superman II\"},{\"IMDB Rating\":4.7,\"Production Budget\":39000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Superman III\"},{\"IMDB Rating\":5.5,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Sparkler\"},{\"IMDB Rating\":4.9,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Superman\"},{\"IMDB Rating\":4.9,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":4,\"Title\":\"The Specialist\"},{\"IMDB Rating\":6.8,\"Production Budget\":21600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Sorcerer\"},{\"IMDB Rating\":6.7,\"Production Budget\":300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Sisters in Law\"},{\"IMDB Rating\":6.1,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Smilla's Sense of Snow\"},{\"IMDB Rating\":5.9,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Assassins\"},{\"IMDB Rating\":6.2,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Star Trek: The Motion Picture\"},{\"IMDB Rating\":6.5,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Star Trek III: The Search for Spock\"},{\"IMDB Rating\":7.3,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Star Trek IV: The Voyage Home\"},{\"IMDB Rating\":8.2,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Stand by Me\"},{\"IMDB Rating\":4.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Stone Cold\"},{\"IMDB Rating\":4.3,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Stewardesses\"},{\"IMDB Rating\":3.3,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Street Fighter\"},{\"IMDB Rating\":7.8,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Star Trek II: The Wrath of Khan\"},{\"IMDB Rating\":8.4,\"Production Budget\":5500000,\"Rotten Tomatoes Rating\":91,\"Title\":\"The Sting\"},{\"IMDB Rating\":7,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Stonewall\"},{\"IMDB Rating\":5,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Star Trek V: The Final Frontier\"},{\"IMDB Rating\":7.2,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Star Trek VI: The Undiscovered Country\"},{\"IMDB Rating\":6.5,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Star Trek: Generations\"},{\"IMDB Rating\":6.8,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Stripes\"},{\"IMDB Rating\":3.9,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Striptease\"},{\"IMDB Rating\":7,\"Production Budget\":780000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Saints and Soldiers\"},{\"IMDB Rating\":3.3,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Steppin: The Movie\"},{\"IMDB Rating\":8.3,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Strangers on a Train\"},{\"IMDB Rating\":5.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Sugar Hill\"},{\"IMDB Rating\":6.1,\"Production Budget\":5700000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Stiff Upper Lips\"},{\"IMDB Rating\":8.8,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Shichinin no samurai\"},{\"IMDB Rating\":7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Sweet Charity\"},{\"IMDB Rating\":7.1,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Sands of Iwo Jima\"},{\"IMDB Rating\":7.1,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"The Spy Who Loved Me\"},{\"IMDB Rating\":5.2,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Swindle\"},{\"IMDB Rating\":6.2,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Swingers\"},{\"IMDB Rating\":7.8,\"Production Budget\":1488000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Snow White and the Seven Dwarfs\"},{\"IMDB Rating\":7.8,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"The Sweet Hereafter\"},{\"IMDB Rating\":7.3,\"Production Budget\":1600000,\"Rotten Tomatoes Rating\":100,\"Title\":\"She Wore a Yellow Ribbon\"},{\"IMDB Rating\":5,\"Production Budget\":1100000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Sex with Strangers\"},{\"IMDB Rating\":4.7,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Spy Hard\"},{\"IMDB Rating\":6.9,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Shi Yue Wei Cheng\"},{\"IMDB Rating\":6.9,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Tango\"},{\"IMDB Rating\":7.1,\"Production Budget\":34000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"The Age of Innocence\"},{\"IMDB Rating\":7,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Talk Radio\"},{\"IMDB Rating\":6.1,\"Production Budget\":140000,\"Rotten Tomatoes Rating\":90,\"Title\":\"The Texas Chainsaw Massacre\"},{\"IMDB Rating\":5.1,\"Production Budget\":4700000,\"Rotten Tomatoes Rating\":43,\"Title\":\"The Texas Chainsaw Massacre 2\"},{\"IMDB Rating\":5.5,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Timecop\"},{\"IMDB Rating\":6.1,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Tin Cup\"},{\"IMDB Rating\":6.6,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Torn Curtain\"},{\"IMDB Rating\":6.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"To Die For\"},{\"IMDB Rating\":5.5,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Terror Train\"},{\"IMDB Rating\":2.8,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Teen Wolf Too\"},{\"IMDB Rating\":5.6,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"The Fan\"},{\"IMDB Rating\":5.3,\"Production Budget\":2600000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Timber Falls\"},{\"IMDB Rating\":5.8,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Incredibly True Adventure of Two Girls in Love\"},{\"IMDB Rating\":6.3,\"Production Budget\":10500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"There Goes My Baby\"},{\"IMDB Rating\":4.7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Tank Girl\"},{\"IMDB Rating\":6.5,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Top Gun\"},{\"IMDB Rating\":7,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Thunderball\"},{\"IMDB Rating\":3.4,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Calling\"},{\"IMDB Rating\":5.9,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"The Craft\"},{\"IMDB Rating\":8.3,\"Production Budget\":325000,\"Rotten Tomatoes Rating\":97,\"Title\":\"It Happened One Night\"},{\"IMDB Rating\":5.6,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"The Net\"},{\"IMDB Rating\":6.1,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"La otra conquista\"},{\"IMDB Rating\":4.4,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Journey\"},{\"IMDB Rating\":7,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"They Live\"},{\"IMDB Rating\":5.8,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Tales from the Hood\"},{\"IMDB Rating\":6.9,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Time Bandits\"},{\"IMDB Rating\":7.7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Tombstone\"},{\"IMDB Rating\":5,\"Production Budget\":825000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Time Changer\"},{\"IMDB Rating\":5.3,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Teenage Mutant Ninja Turtles II: The Secret of the Ooze\"},{\"IMDB Rating\":4.3,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Teenage Mutant Ninja Turtles III\"},{\"IMDB Rating\":5.8,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Tango & Cash\"},{\"IMDB Rating\":6.4,\"Production Budget\":13500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Teenage Mutant Ninja Turtles\"},{\"IMDB Rating\":6.2,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Topaz\"},{\"IMDB Rating\":6.5,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Taps\"},{\"IMDB Rating\":8.2,\"Production Budget\":3100000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Trainspotting\"},{\"IMDB Rating\":7.8,\"Production Budget\":5800000,\"Rotten Tomatoes Rating\":83,\"Title\":\"The Train\"},{\"IMDB Rating\":4.7,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Troop Beverly Hills\"},{\"IMDB Rating\":6.9,\"Production Budget\":375000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Trekkies\"},{\"IMDB Rating\":7.2,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"True Lies\"},{\"IMDB Rating\":8.5,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Terminator 2: Judgment Day\"},{\"IMDB Rating\":7.4,\"Production Budget\":1800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Travellers and Magicians\"},{\"IMDB Rating\":8.1,\"Production Budget\":6400000,\"Rotten Tomatoes Rating\":100,\"Title\":\"The Terminator\"},{\"IMDB Rating\":7.2,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Tremors\"},{\"IMDB Rating\":7.9,\"Production Budget\":12500000,\"Rotten Tomatoes Rating\":91,\"Title\":\"True Romance\"},{\"IMDB Rating\":2.9,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Tron\"},{\"IMDB Rating\":6.7,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Trapeze\"},{\"IMDB Rating\":5.5,\"Production Budget\":25000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Terrorist\"},{\"IMDB Rating\":3.3,\"Production Budget\":200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Trois\"},{\"IMDB Rating\":6.6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Things to Do in Denver when You're Dead\"},{\"IMDB Rating\":7.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"A Time to Kill\"},{\"IMDB Rating\":7.4,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Total Recall\"},{\"IMDB Rating\":5.2,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"This Thing of Ours\"},{\"IMDB Rating\":7.4,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Tootsie\"},{\"IMDB Rating\":6.7,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":92,\"Title\":\"That Thing You Do!\"},{\"IMDB Rating\":7.2,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":89,\"Title\":\"The Trouble With Harry\"},{\"IMDB Rating\":null,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Twins\"},{\"IMDB Rating\":6,\"Production Budget\":88000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"Twister\"},{\"IMDB Rating\":8.6,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Taxi Driver\"},{\"IMDB Rating\":6,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Tycoon\"},{\"IMDB Rating\":8.2,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Toy Story\"},{\"IMDB Rating\":6.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Twilight Zone: The Movie\"},{\"IMDB Rating\":5.7,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Unforgettable\"},{\"IMDB Rating\":6.6,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"UHF\"},{\"IMDB Rating\":7,\"Production Budget\":2700000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Ulee's Gold\"},{\"IMDB Rating\":5.1,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"Under Siege 2: Dark Territory\"},{\"IMDB Rating\":8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"The Untouchables\"},{\"IMDB Rating\":4.9,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Under the Rainbow\"},{\"IMDB Rating\":7.3,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Veer-Zaara\"},{\"IMDB Rating\":7.3,\"Production Budget\":5952000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Videodrome\"},{\"IMDB Rating\":6.7,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Les Visiteurs\"},{\"IMDB Rating\":7.3,\"Production Budget\":2160000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Valley of Decision\"},{\"IMDB Rating\":4.3,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"Vampire in Brooklyn\"},{\"IMDB Rating\":7.7,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"The Verdict\"},{\"IMDB Rating\":5.3,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"Virtuosity\"},{\"IMDB Rating\":6.7,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Everything Put Together\"},{\"IMDB Rating\":6.1,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"A View to a Kill\"},{\"IMDB Rating\":5.6,\"Production Budget\":6500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Work and the Glory: American Zion\"},{\"IMDB Rating\":6.4,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"A Walk on the Moon\"},{\"IMDB Rating\":6,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":17,\"Title\":\"The Work and the Glory\"},{\"IMDB Rating\":5.1,\"Production Budget\":103000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Work and the Story\"},{\"IMDB Rating\":7.4,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Waiting for Guffman\"},{\"IMDB Rating\":7.6,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Who Framed Roger Rabbit?\"},{\"IMDB Rating\":null,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"White Fang\"},{\"IMDB Rating\":6.4,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"White Squall\"},{\"IMDB Rating\":7.8,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"What's Eating Gilbert Grape\"},{\"IMDB Rating\":5.2,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Witchboard\"},{\"IMDB Rating\":4.5,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"The Wiz\"},{\"IMDB Rating\":6.5,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Walking and Talking\"},{\"IMDB Rating\":8.2,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"The Wild Bunch\"},{\"IMDB Rating\":7.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Wall Street\"},{\"IMDB Rating\":7.5,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":89,\"Title\":\"The Wrong Man\"},{\"IMDB Rating\":7.9,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Wings\"},{\"IMDB Rating\":5.6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"We're No Angels\"},{\"IMDB Rating\":6,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Wolf\"},{\"IMDB Rating\":4,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"Warriors of Virtue\"},{\"IMDB Rating\":6.4,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"War Games\"},{\"IMDB Rating\":5.9,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Warlock\"},{\"IMDB Rating\":6.8,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"War and Peace\"},{\"IMDB Rating\":4.9,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Warlock: The Armageddon\"},{\"IMDB Rating\":6.5,\"Production Budget\":15300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Wasabi\"},{\"IMDB Rating\":7.7,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"West Side Story\"},{\"IMDB Rating\":7.3,\"Production Budget\":800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Welcome to the Dollhouse\"},{\"IMDB Rating\":7.6,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Witness\"},{\"IMDB Rating\":5.7,\"Production Budget\":175000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Waterworld\"},{\"IMDB Rating\":7.8,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Willy Wonka & the Chocolate Factory\"},{\"IMDB Rating\":6.9,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Wayne's World\"},{\"IMDB Rating\":6.4,\"Production Budget\":63000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Wyatt Earp\"},{\"IMDB Rating\":8.3,\"Production Budget\":2777000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Wizard of Oz\"},{\"IMDB Rating\":6.3,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Executive Decision\"},{\"IMDB Rating\":6.8,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Exodus\"},{\"IMDB Rating\":8.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"The Exorcist\"},{\"IMDB Rating\":5.9,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Extreme Measures\"},{\"IMDB Rating\":8,\"Production Budget\":1644000,\"Rotten Tomatoes Rating\":96,\"Title\":\"You Can't Take It With You\"},{\"IMDB Rating\":5.7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Eye for an Eye\"},{\"IMDB Rating\":6.6,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Young Guns\"},{\"IMDB Rating\":8,\"Production Budget\":2800000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Young Frankenstein\"},{\"IMDB Rating\":6.2,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Yentl\"},{\"IMDB Rating\":7,\"Production Budget\":9500000,\"Rotten Tomatoes Rating\":70,\"Title\":\"You Only Live Twice\"},{\"IMDB Rating\":7.3,\"Production Budget\":300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Ayurveda: Art of Being\"},{\"IMDB Rating\":6.5,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Young Sherlock Holmes\"},{\"IMDB Rating\":4.4,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"102 Dalmatians\"},{\"IMDB Rating\":6.9,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Ten Things I Hate About You\"},{\"IMDB Rating\":5.8,\"Production Budget\":105000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"10,000 B.C.\"},{\"IMDB Rating\":6.3,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"10th & Wolf\"},{\"IMDB Rating\":7.3,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"11:14\"},{\"IMDB Rating\":7.4,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Cloverfield\"},{\"IMDB Rating\":5.4,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"12 Rounds\"},{\"IMDB Rating\":7.1,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Thirteen Conversations About One Thing\"},{\"IMDB Rating\":6.1,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"13 Going On 30\"},{\"IMDB Rating\":5.1,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Thirteen Ghosts\"},{\"IMDB Rating\":6.9,\"Production Budget\":22500000,\"Rotten Tomatoes Rating\":78,\"Title\":1408},{\"IMDB Rating\":6.1,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"15 Minutes\"},{\"IMDB Rating\":6.7,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"16 Blocks\"},{\"IMDB Rating\":5.7,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"One Man's Hero\"},{\"IMDB Rating\":4.7,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"First Daughter\"},{\"IMDB Rating\":6.2,\"Production Budget\":200000000,\"Rotten Tomatoes Rating\":39,\"Title\":2012},{\"IMDB Rating\":7.5,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":2046},{\"IMDB Rating\":4.9,\"Production Budget\":66000,\"Rotten Tomatoes Rating\":null,\"Title\":\"20 Dates\"},{\"IMDB Rating\":6.7,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":35,\"Title\":21},{\"IMDB Rating\":7.9,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"21 Grams\"},{\"IMDB Rating\":7.9,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":78,\"Title\":\"25th Hour\"},{\"IMDB Rating\":5.8,\"Production Budget\":43000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"28 Days\"},{\"IMDB Rating\":7.6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"28 Days Later...\"},{\"IMDB Rating\":7.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"28 Weeks Later\"},{\"IMDB Rating\":6,\"Production Budget\":72000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Two Brothers\"},{\"IMDB Rating\":5.7,\"Production Budget\":37000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Cop Out\"},{\"IMDB Rating\":7.3,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Two Lovers\"},{\"IMDB Rating\":7.5,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Secondhand Lions\"},{\"IMDB Rating\":5.6,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Two Can Play That Game\"},{\"IMDB Rating\":5.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Two Weeks Notice\"},{\"IMDB Rating\":7.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":60,\"Title\":300},{\"IMDB Rating\":6.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"30 Days of Night\"},{\"IMDB Rating\":7.3,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Three Kings\"},{\"IMDB Rating\":5.6,\"Production Budget\":62000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"3000 Miles to Graceland\"},{\"IMDB Rating\":2.9,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"3 Strikes\"},{\"IMDB Rating\":7.9,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"3:10 to Yuma\"},{\"IMDB Rating\":5.4,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"40 Days and 40 Nights\"},{\"IMDB Rating\":7.5,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The 40 Year-old Virgin\"},{\"IMDB Rating\":6.8,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"Four Brothers\"},{\"IMDB Rating\":5.7,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Four Christmases\"},{\"IMDB Rating\":6.3,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"The Four Feathers\"},{\"IMDB Rating\":6,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"The Fourth Kind\"},{\"IMDB Rating\":6.8,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"50 First Dates\"},{\"IMDB Rating\":6.4,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Six-String Samurai\"},{\"IMDB Rating\":5.8,\"Production Budget\":82000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"The 6th Day\"},{\"IMDB Rating\":7.6,\"Production Budget\":54000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Seven Pounds\"},{\"IMDB Rating\":5.9,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":5,\"Title\":\"88 Minutes\"},{\"IMDB Rating\":7.3,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Eight Below\"},{\"IMDB Rating\":5.4,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Eight Legged Freaks\"},{\"IMDB Rating\":6.7,\"Production Budget\":41000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"8 Mile\"},{\"IMDB Rating\":7,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"8 femmes\"},{\"IMDB Rating\":7.8,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":9},{\"IMDB Rating\":5.1,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":4,\"Title\":\"The Whole Ten Yards\"},{\"IMDB Rating\":6.6,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"The Whole Nine Yards\"},{\"IMDB Rating\":7.4,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"About a Boy\"},{\"IMDB Rating\":7.3,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"A Bug's Life\"},{\"IMDB Rating\":4.8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Abandon\"},{\"IMDB Rating\":6.5,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Absolute Power\"},{\"IMDB Rating\":6.3,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Adoration\"},{\"IMDB Rating\":7.9,\"Production Budget\":18500000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Adaptation\"},{\"IMDB Rating\":6.4,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Anything Else\"},{\"IMDB Rating\":7.3,\"Production Budget\":12500000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Antwone Fisher\"},{\"IMDB Rating\":8.1,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"Aeon Flux\"},{\"IMDB Rating\":6.2,\"Production Budget\":57000000,\"Rotten Tomatoes Rating\":18,\"Title\":\"After the Sunset\"},{\"IMDB Rating\":6.8,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"A Good Year\"},{\"IMDB Rating\":7.3,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Agora\"},{\"IMDB Rating\":4.6,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Air Bud\"},{\"IMDB Rating\":6.3,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Air Force One\"},{\"IMDB Rating\":7.6,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Akeelah and the Bee\"},{\"IMDB Rating\":6,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"All the King's Men\"},{\"IMDB Rating\":5.9,\"Production Budget\":92000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"The Alamo\"},{\"IMDB Rating\":5.3,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"All About the Benjamins\"},{\"IMDB Rating\":5.9,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Albino Alligator\"},{\"IMDB Rating\":5.8,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Sweet Home Alabama\"},{\"IMDB Rating\":4,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Fat Albert\"},{\"IMDB Rating\":6.7,\"Production Budget\":200000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"Alice in Wonderland\"},{\"IMDB Rating\":6.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"Alfie\"},{\"IMDB Rating\":7.3,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"It's All Gone Pete Tong\"},{\"IMDB Rating\":6.6,\"Production Budget\":109000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Ali\"},{\"IMDB Rating\":6.2,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Alien: Resurrection\"},{\"IMDB Rating\":8.5,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Alien\"},{\"IMDB Rating\":6.4,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"A Lot Like Love\"},{\"IMDB Rating\":5.7,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"All the Pretty Horses\"},{\"IMDB Rating\":8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Almost Famous\"},{\"IMDB Rating\":5.5,\"Production Budget\":175000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Evan Almighty\"},{\"IMDB Rating\":6.6,\"Production Budget\":81000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Bruce Almighty\"},{\"IMDB Rating\":2.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":1,\"Title\":\"Alone in the Dark\"},{\"IMDB Rating\":6.2,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Alpha and Omega 3D\"},{\"IMDB Rating\":6.1,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"Along Came a Spider\"},{\"IMDB Rating\":6.9,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"The Dangerous Lives of Altar Boys\"},{\"IMDB Rating\":5.9,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Alatriste\"},{\"IMDB Rating\":5.5,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Alvin and the Chipmunks\"},{\"IMDB Rating\":5.4,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"Alex & Emma\"},{\"IMDB Rating\":5.4,\"Production Budget\":155000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"Alexander\"},{\"IMDB Rating\":8.6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"American Beauty\"},{\"IMDB Rating\":4.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"An American Carol\"},{\"IMDB Rating\":5.7,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"American Dreamz\"},{\"IMDB Rating\":5.7,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Amelia\"},{\"IMDB Rating\":8.5,\"Production Budget\":10350000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Le Fabuleux destin d'AmÈlie Poulain\"},{\"IMDB Rating\":8.6,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"American History X\"},{\"IMDB Rating\":7.9,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"American Gangster\"},{\"IMDB Rating\":4.9,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"An American Haunting\"},{\"IMDB Rating\":7.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Amistad\"},{\"IMDB Rating\":7.2,\"Production Budget\":6800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"AimÈe & Jaguar\"},{\"IMDB Rating\":8.1,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Amores Perros\"},{\"IMDB Rating\":6.2,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"American Pie 2\"},{\"IMDB Rating\":6.1,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"American Wedding\"},{\"IMDB Rating\":6.9,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":59,\"Title\":\"American Pie\"},{\"IMDB Rating\":7.4,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"American Psycho\"},{\"IMDB Rating\":7.6,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"American Splendor\"},{\"IMDB Rating\":5.7,\"Production Budget\":46000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"America's Sweethearts\"},{\"IMDB Rating\":5.8,\"Production Budget\":18500000,\"Rotten Tomatoes Rating\":24,\"Title\":\"The Amityville Horror\"},{\"IMDB Rating\":4.3,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Anacondas: The Hunt for the Blood Orchid\"},{\"IMDB Rating\":4.2,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Anaconda\"},{\"IMDB Rating\":6.6,\"Production Budget\":53000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Anastasia\"},{\"IMDB Rating\":7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Anchorman: The Legend of Ron Burgundy\"},{\"IMDB Rating\":6.7,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Angels & Demons\"},{\"IMDB Rating\":7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"Angela's Ashes\"},{\"IMDB Rating\":5.5,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"Angel Eyes\"},{\"IMDB Rating\":6.1,\"Production Budget\":56000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Anger Management\"},{\"IMDB Rating\":5.7,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"A Night at the Roxbury\"},{\"IMDB Rating\":4.6,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"The Animal\"},{\"IMDB Rating\":6.5,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"Anna and the King\"},{\"IMDB Rating\":5.6,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Analyze That\"},{\"IMDB Rating\":6.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Analyze This\"},{\"IMDB Rating\":6.2,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"The Ant Bully\"},{\"IMDB Rating\":6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Antitrust\"},{\"IMDB Rating\":6.4,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Marie Antoinette\"},{\"IMDB Rating\":6.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"Antz\"},{\"IMDB Rating\":5.9,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Anywhere But Here\"},{\"IMDB Rating\":6.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Appaloosa\"},{\"IMDB Rating\":7.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Apocalypto\"},{\"IMDB Rating\":7.2,\"Production Budget\":300000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Pieces of April\"},{\"IMDB Rating\":7.1,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"The Apostle\"},{\"IMDB Rating\":4.6,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"Aquamarine\"},{\"IMDB Rating\":6.6,\"Production Budget\":15500000,\"Rotten Tomatoes Rating\":56,\"Title\":\"Ararat\"},{\"IMDB Rating\":4.2,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Are We There Yet?\"},{\"IMDB Rating\":7.2,\"Production Budget\":21500000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Arlington Road\"},{\"IMDB Rating\":6.1,\"Production Budget\":140000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Armageddon\"},{\"IMDB Rating\":5.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Hey Arnold! The Movie\"},{\"IMDB Rating\":5.2,\"Production Budget\":39000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Against the Ropes\"},{\"IMDB Rating\":6.2,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"King Arthur\"},{\"IMDB Rating\":5.9,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Arthur et les Minimoys\"},{\"IMDB Rating\":6.9,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Artificial Intelligence: AI\"},{\"IMDB Rating\":5.5,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"The Art of War\"},{\"IMDB Rating\":6.4,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Astro Boy\"},{\"IMDB Rating\":7.2,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"A Serious Man\"},{\"IMDB Rating\":6.4,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Astronaut Farmer\"},{\"IMDB Rating\":7.8,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"As Good as it Gets\"},{\"IMDB Rating\":7.6,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"A Single Man\"},{\"IMDB Rating\":7.6,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"A Simple Plan\"},{\"IMDB Rating\":7.4,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Assault On Precinct 13\"},{\"IMDB Rating\":4.9,\"Production Budget\":34000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"The Astronaut's Wife\"},{\"IMDB Rating\":7.2,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"The A-Team\"},{\"IMDB Rating\":5.6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"At First Sight\"},{\"IMDB Rating\":4.7,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"ATL\"},{\"IMDB Rating\":6.4,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Atlantis: The Lost Empire\"},{\"IMDB Rating\":6.8,\"Production Budget\":31000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"Hearts in Atlantis\"},{\"IMDB Rating\":4.8,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Autumn in New York\"},{\"IMDB Rating\":7.9,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Atonement\"},{\"IMDB Rating\":6.7,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"The Rules of Attraction\"},{\"IMDB Rating\":7.5,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"August Rush\"},{\"IMDB Rating\":7.5,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Across the Universe\"},{\"IMDB Rating\":6.6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Austin Powers: The Spy Who Shagged Me\"},{\"IMDB Rating\":6.2,\"Production Budget\":63000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Austin Powers in Goldmember\"},{\"IMDB Rating\":7.1,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Austin Powers: International Man of Mystery\"},{\"IMDB Rating\":6.8,\"Production Budget\":78000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Australia\"},{\"IMDB Rating\":6.6,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"Auto Focus\"},{\"IMDB Rating\":8.3,\"Production Budget\":237000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Avatar\"},{\"IMDB Rating\":3.4,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"The Avengers\"},{\"IMDB Rating\":7.6,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"The Aviator\"},{\"IMDB Rating\":5.4,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"AVP: Alien Vs. Predator\"},{\"IMDB Rating\":5.6,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Around the World in 80 Days\"},{\"IMDB Rating\":6.5,\"Production Budget\":8600000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Awake\"},{\"IMDB Rating\":6.8,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"And When Did You Last See Your Father?\"},{\"IMDB Rating\":7.3,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"Away We Go\"},{\"IMDB Rating\":6.1,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Don't Say a Word\"},{\"IMDB Rating\":6.1,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Babe: Pig in the City\"},{\"IMDB Rating\":7.6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Babel\"},{\"IMDB Rating\":5.3,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Babylon A.D.\"},{\"IMDB Rating\":4,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"My Baby's Daddy\"},{\"IMDB Rating\":1.4,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Super Babies: Baby Geniuses 2\"},{\"IMDB Rating\":2.2,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":2,\"Title\":\"Baby Geniuses\"},{\"IMDB Rating\":6.2,\"Production Budget\":130000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Bad Boys II\"},{\"IMDB Rating\":5.3,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"Bad Company\"},{\"IMDB Rating\":7.5,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"La mala educaciÛn\"},{\"IMDB Rating\":null,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Bad Lieutenant: Port of Call New Orleans\"},{\"IMDB Rating\":7.1,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Bad News Bears\"},{\"IMDB Rating\":7.2,\"Production Budget\":37000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Burn After Reading\"},{\"IMDB Rating\":5.6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Bait\"},{\"IMDB Rating\":4.9,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"Boys and Girls\"},{\"IMDB Rating\":6.6,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Black and White\"},{\"IMDB Rating\":5.4,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Bangkok Dangerous\"},{\"IMDB Rating\":5.5,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"The Banger Sisters\"},{\"IMDB Rating\":7.8,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Les invasions barbares\"},{\"IMDB Rating\":2.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Barney's Great Adventure\"},{\"IMDB Rating\":3.9,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Basic Instinct 2\"},{\"IMDB Rating\":6.3,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Basic\"},{\"IMDB Rating\":8.3,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Batman Begins\"},{\"IMDB Rating\":2.3,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Battlefield Earth: A Saga of the Year 3000\"},{\"IMDB Rating\":8.9,\"Production Budget\":185000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"The Dark Knight\"},{\"IMDB Rating\":3.3,\"Production Budget\":6500000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Bats\"},{\"IMDB Rating\":6.1,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"The Battle of Shaker Heights\"},{\"IMDB Rating\":6.1,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Baby Boy\"},{\"IMDB Rating\":8,\"Production Budget\":160000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"The Curious Case of Benjamin Button\"},{\"IMDB Rating\":4.8,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":3,\"Title\":\"Bless the Child\"},{\"IMDB Rating\":4.8,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"The Bachelor\"},{\"IMDB Rating\":6.6,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Broken Hearts Club: A Romantic Comedy\"},{\"IMDB Rating\":5.6,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Be Cool\"},{\"IMDB Rating\":4.7,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Big Daddy\"},{\"IMDB Rating\":5.9,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"Bedazzled\"},{\"IMDB Rating\":7.2,\"Production Budget\":67500000,\"Rotten Tomatoes Rating\":52,\"Title\":\"Body of Lies\"},{\"IMDB Rating\":8,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Blood Diamond\"},{\"IMDB Rating\":6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Mr. Bean's Holiday\"},{\"IMDB Rating\":4.4,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Beautiful\"},{\"IMDB Rating\":6.6,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Beavis and Butt-head Do America\"},{\"IMDB Rating\":6.9,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bend it Like Beckham\"},{\"IMDB Rating\":7.5,\"Production Budget\":1700000,\"Rotten Tomatoes Rating\":93,\"Title\":\"In the Bedroom\"},{\"IMDB Rating\":6.3,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"Bee Movie\"},{\"IMDB Rating\":7.9,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Being John Malkovich\"},{\"IMDB Rating\":6.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"Behind Enemy Lines\"},{\"IMDB Rating\":7.3,\"Production Budget\":3300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bella\"},{\"IMDB Rating\":5.3,\"Production Budget\":53000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Beloved\"},{\"IMDB Rating\":7.7,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Les Triplettes de Belleville\"},{\"IMDB Rating\":7.2,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Beyond the Mat\"},{\"IMDB Rating\":5.4,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"The Benchwarmers\"},{\"IMDB Rating\":4.4,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"The Last Airbender\"},{\"IMDB Rating\":6.6,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Beowulf\"},{\"IMDB Rating\":6.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"The Importance of Being Earnest\"},{\"IMDB Rating\":5.3,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Beauty Shop\"},{\"IMDB Rating\":7.1,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Better Luck Tomorrow\"},{\"IMDB Rating\":5.2,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Big Fat Liar\"},{\"IMDB Rating\":8.1,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Big Fish\"},{\"IMDB Rating\":8,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"Before Sunset\"},{\"IMDB Rating\":5.8,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"The Big Hit\"},{\"IMDB Rating\":6,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Birthday Girl\"},{\"IMDB Rating\":8.2,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"The Big Lebowski\"},{\"IMDB Rating\":4.7,\"Production Budget\":33000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Big Momma's House\"},{\"IMDB Rating\":7.7,\"Production Budget\":95000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Black Hawk Down\"},{\"IMDB Rating\":4.6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Eye of the Beholder\"},{\"IMDB Rating\":4.8,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Big Bounce\"},{\"IMDB Rating\":6.3,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Big Trouble\"},{\"IMDB Rating\":7.7,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Billy Elliot\"},{\"IMDB Rating\":6.4,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Bicentennial Man\"},{\"IMDB Rating\":6.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Birth\"},{\"IMDB Rating\":7,\"Production Budget\":16500000,\"Rotten Tomatoes Rating\":58,\"Title\":\"Becoming Jane\"},{\"IMDB Rating\":5.6,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bridget Jones: The Edge Of Reason\"},{\"IMDB Rating\":6.8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Bridget Jones's Diary\"},{\"IMDB Rating\":7.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"The Bank Job\"},{\"IMDB Rating\":7,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Blade\"},{\"IMDB Rating\":6.2,\"Production Budget\":600000,\"Rotten Tomatoes Rating\":85,\"Title\":\"The Blair Witch Project\"},{\"IMDB Rating\":6.4,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Blast from the Past\"},{\"IMDB Rating\":5.5,\"Production Budget\":54000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Blade 2\"},{\"IMDB Rating\":5.7,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Blade: Trinity\"},{\"IMDB Rating\":6.5,\"Production Budget\":61000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Blades of Glory\"},{\"IMDB Rating\":7.7,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"The Blind Side\"},{\"IMDB Rating\":6.3,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Blood Work\"},{\"IMDB Rating\":8,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Zwartboek\"},{\"IMDB Rating\":4.3,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Black Christmas\"},{\"IMDB Rating\":7.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"Black Snake Moan\"},{\"IMDB Rating\":6.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Blindness\"},{\"IMDB Rating\":6.2,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Legally Blonde\"},{\"IMDB Rating\":6.1,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Blood and Wine\"},{\"IMDB Rating\":7.4,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Blow\"},{\"IMDB Rating\":3.4,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Ballistic: Ecks vs. Sever\"},{\"IMDB Rating\":5.5,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Blue Crush\"},{\"IMDB Rating\":6.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Bamboozled\"},{\"IMDB Rating\":8,\"Production Budget\":78000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"A Beautiful Mind\"},{\"IMDB Rating\":4,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":6,\"Title\":\"Big Momma's House 2\"},{\"IMDB Rating\":7.8,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"The Boondock Saints\"},{\"IMDB Rating\":5.6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Bandidas\"},{\"IMDB Rating\":6.5,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Bandits\"},{\"IMDB Rating\":7.1,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Bobby\"},{\"IMDB Rating\":6.9,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"The Book of Eli\"},{\"IMDB Rating\":3.9,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Boogeyman\"},{\"IMDB Rating\":7.4,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Bolt\"},{\"IMDB Rating\":6.7,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"The Other Boleyn Girl\"},{\"IMDB Rating\":6.3,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"The Bone Collector\"},{\"IMDB Rating\":3.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Bones\"},{\"IMDB Rating\":6.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Bon Voyage\"},{\"IMDB Rating\":7.9,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Boogie Nights\"},{\"IMDB Rating\":7.7,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Borat\"},{\"IMDB Rating\":7.7,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"The Bourne Identity\"},{\"IMDB Rating\":7.6,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"The Bourne Supremacy\"},{\"IMDB Rating\":8.2,\"Production Budget\":130000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"The Bourne Ultimatum\"},{\"IMDB Rating\":5.6,\"Production Budget\":29000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Borrowers\"},{\"IMDB Rating\":4.3,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"My Boss's Daughter\"},{\"IMDB Rating\":5.5,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"Bounce\"},{\"IMDB Rating\":8.2,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Bowling for Columbine\"},{\"IMDB Rating\":7.6,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Boys Don't Cry\"},{\"IMDB Rating\":7.8,\"Production Budget\":12500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Boy in the Striped Pyjamas\"},{\"IMDB Rating\":5.2,\"Production Budget\":52000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Bulletproof Monk\"},{\"IMDB Rating\":6.2,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"Heartbreakers\"},{\"IMDB Rating\":6.2,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bride & Prejudice\"},{\"IMDB Rating\":6.2,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Beyond Borders\"},{\"IMDB Rating\":5,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Bride Wars\"},{\"IMDB Rating\":4.3,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Breakfast of Champions\"},{\"IMDB Rating\":7.1,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Brigham City\"},{\"IMDB Rating\":7.5,\"Production Budget\":450000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Brick\"},{\"IMDB Rating\":6.8,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Bringing Out The Dead\"},{\"IMDB Rating\":null,\"Production Budget\":36000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Breakdown\"},{\"IMDB Rating\":6.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Brooklyn's Finest\"},{\"IMDB Rating\":7.8,\"Production Budget\":13900000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Brokeback Mountain\"},{\"IMDB Rating\":5.3,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Breakin' All the Rules\"},{\"IMDB Rating\":5.9,\"Production Budget\":52000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Break Up\"},{\"IMDB Rating\":3.5,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"An Alan Smithee Film: Burn Hollywood Burn\"},{\"IMDB Rating\":6.4,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Brooklyn Rules\"},{\"IMDB Rating\":6.9,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Boiler Room\"},{\"IMDB Rating\":5.2,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"The Brothers Solomon\"},{\"IMDB Rating\":2.8,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"The Brothers\"},{\"IMDB Rating\":6,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Brown Sugar\"},{\"IMDB Rating\":7.1,\"Production Budget\":8500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bright Star\"},{\"IMDB Rating\":7.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Brother\"},{\"IMDB Rating\":8.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"In Bruges\"},{\"IMDB Rating\":4.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Brown Bunny\"},{\"IMDB Rating\":5.5,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Barbershop 2: Back in Business\"},{\"IMDB Rating\":6.2,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Barbershop\"},{\"IMDB Rating\":7.4,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Best in Show\"},{\"IMDB Rating\":7.3,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Bad Santa\"},{\"IMDB Rating\":8.4,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Inglourious Basterds\"},{\"IMDB Rating\":5.9,\"Production Budget\":36000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Blue Streak\"},{\"IMDB Rating\":7.8,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"The Butterfly Effect\"},{\"IMDB Rating\":3.5,\"Production Budget\":125000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"Batman & Robin\"},{\"IMDB Rating\":4.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Boat Trip\"},{\"IMDB Rating\":7.3,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bubba Ho-Tep\"},{\"IMDB Rating\":4.6,\"Production Budget\":1600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bubble\"},{\"IMDB Rating\":5.4,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Bubble Boy\"},{\"IMDB Rating\":7.3,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Buffalo '66\"},{\"IMDB Rating\":6.9,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Buffalo Soldiers\"},{\"IMDB Rating\":6.8,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Bulworth\"},{\"IMDB Rating\":null,\"Production Budget\":25100000,\"Rotten Tomatoes Rating\":60,\"Title\":\"W.\"},{\"IMDB Rating\":6.4,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Bowfinger\"},{\"IMDB Rating\":4.8,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Bewitched\"},{\"IMDB Rating\":null,\"Production Budget\":51000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Barnyard: The Original Party Animals\"},{\"IMDB Rating\":6.6,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Beyond the Sea\"},{\"IMDB Rating\":5.4,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Cabin Fever\"},{\"IMDB Rating\":5.5,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"CachÈ\"},{\"IMDB Rating\":6.7,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Cadillac Records\"},{\"IMDB Rating\":6.2,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Can't Hardly Wait\"},{\"IMDB Rating\":7.6,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Capote\"},{\"IMDB Rating\":7,\"Production Budget\":1600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Sukkar banat\"},{\"IMDB Rating\":null,\"Production Budget\":190000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Disney's A Christmas Carol\"},{\"IMDB Rating\":4.3,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"The Rage: Carrie 2\"},{\"IMDB Rating\":7.5,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"Cars\"},{\"IMDB Rating\":7.5,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Cast Away\"},{\"IMDB Rating\":5.7,\"Production Budget\":52000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Catch Me if You Can\"},{\"IMDB Rating\":3.4,\"Production Budget\":109000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Cat in the Hat\"},{\"IMDB Rating\":6.9,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Cats Don't Dance\"},{\"IMDB Rating\":3.2,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"Catwoman\"},{\"IMDB Rating\":5.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"Cecil B. Demented\"},{\"IMDB Rating\":3.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"The Country Bears\"},{\"IMDB Rating\":6.2,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Center Stage\"},{\"IMDB Rating\":6,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Critical Care\"},{\"IMDB Rating\":6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Connie & Carla\"},{\"IMDB Rating\":5.2,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Collateral Damage\"},{\"IMDB Rating\":4.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Crocodile Dundee in Los Angeles\"},{\"IMDB Rating\":6.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"Celebrity\"},{\"IMDB Rating\":6.2,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"The Cell\"},{\"IMDB Rating\":6.5,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Cellular\"},{\"IMDB Rating\":6.4,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"City of Ember\"},{\"IMDB Rating\":7.1,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Charlie and the Chocolate Factory\"},{\"IMDB Rating\":6.8,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Catch a Fire\"},{\"IMDB Rating\":4.7,\"Production Budget\":120000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Charlie's Angels: Full Throttle\"},{\"IMDB Rating\":5.5,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Charlie's Angels\"},{\"IMDB Rating\":7.5,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Chasing Amy\"},{\"IMDB Rating\":7.2,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Chicago\"},{\"IMDB Rating\":5.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"Chicken Little\"},{\"IMDB Rating\":7.3,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Chicken Run\"},{\"IMDB Rating\":5.6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Cheaper by the Dozen\"},{\"IMDB Rating\":5.2,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Cheaper by the Dozen 2\"},{\"IMDB Rating\":6.1,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Cheri\"},{\"IMDB Rating\":4.9,\"Production Budget\":34000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Chill Factor\"},{\"IMDB Rating\":5.3,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Bride of Chucky\"},{\"IMDB Rating\":5.1,\"Production Budget\":29000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"Seed of Chucky\"},{\"IMDB Rating\":8.1,\"Production Budget\":76000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Children of Men\"},{\"IMDB Rating\":6.5,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Chloe\"},{\"IMDB Rating\":6.2,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Love in the Time of Cholera\"},{\"IMDB Rating\":7.3,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Chocolat\"},{\"IMDB Rating\":6.9,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"The Children of Huang Shi\"},{\"IMDB Rating\":7.8,\"Production Budget\":5500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Les Choristes\"},{\"IMDB Rating\":2.1,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Chairman of the Board\"},{\"IMDB Rating\":6.5,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Chuck&Buck\"},{\"IMDB Rating\":7,\"Production Budget\":6800000,\"Rotten Tomatoes Rating\":34,\"Title\":\"The Chumscrubber\"},{\"IMDB Rating\":6.7,\"Production Budget\":82500000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Charlotte's Web\"},{\"IMDB Rating\":8,\"Production Budget\":88000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Cinderella Man\"},{\"IMDB Rating\":5.4,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"A Cinderella Story\"},{\"IMDB Rating\":6.4,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":59,\"Title\":\"City of Angels\"},{\"IMDB Rating\":6.4,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"A Civil Action\"},{\"IMDB Rating\":3.2,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":5,\"Title\":\"The Cookout\"},{\"IMDB Rating\":6.5,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"The Claim\"},{\"IMDB Rating\":5.5,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Santa Clause 2\"},{\"IMDB Rating\":7.3,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Cold Mountain\"},{\"IMDB Rating\":5,\"Production Budget\":82500000,\"Rotten Tomatoes Rating\":32,\"Title\":\"Click\"},{\"IMDB Rating\":4,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":4,\"Title\":\"Code Name: The Cleaner\"},{\"IMDB Rating\":6.2,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Welcome to Collinwood\"},{\"IMDB Rating\":2.9,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Closer\"},{\"IMDB Rating\":7.7,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Clerks II\"},{\"IMDB Rating\":4.6,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Maid in Manhattan\"},{\"IMDB Rating\":6.7,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"It's Complicated\"},{\"IMDB Rating\":6.2,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"The Company\"},{\"IMDB Rating\":6.7,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Constantine\"},{\"IMDB Rating\":6.9,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"The Contender\"},{\"IMDB Rating\":7.6,\"Production Budget\":6250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Die F‰lscher\"},{\"IMDB Rating\":7.8,\"Production Budget\":6400000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Control\"},{\"IMDB Rating\":6.5,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Centurion\"},{\"IMDB Rating\":7.1,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Coach Carter\"},{\"IMDB Rating\":7.1,\"Production Budget\":29000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Confessions of a Dangerous Mind\"},{\"IMDB Rating\":6.5,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Coco avant Chanel\"},{\"IMDB Rating\":6.3,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Code 46\"},{\"IMDB Rating\":4.1,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Agent Cody Banks 2: Destination London\"},{\"IMDB Rating\":5.1,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Agent Cody Banks\"},{\"IMDB Rating\":7.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Collateral\"},{\"IMDB Rating\":4.3,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":5,\"Title\":\"College\"},{\"IMDB Rating\":5,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Company Man\"},{\"IMDB Rating\":6.2,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Come Early Morning\"},{\"IMDB Rating\":6.6,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"Con Air\"},{\"IMDB Rating\":6.8,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Confidence\"},{\"IMDB Rating\":6.5,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"Conspiracy Theory\"},{\"IMDB Rating\":7.3,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Contact\"},{\"IMDB Rating\":7,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"The Cooler\"},{\"IMDB Rating\":6.8,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Copying Beethoven\"},{\"IMDB Rating\":4.2,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":5,\"Title\":\"Corky Romano\"},{\"IMDB Rating\":7.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Coraline\"},{\"IMDB Rating\":4.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Confessions of a Teenage Drama Queen\"},{\"IMDB Rating\":4.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":3,\"Title\":\"The Covenant\"},{\"IMDB Rating\":6.9,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Cop Land\"},{\"IMDB Rating\":5.5,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Couples Retreat\"},{\"IMDB Rating\":6.7,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Cradle Will Rock\"},{\"IMDB Rating\":7.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Crank\"},{\"IMDB Rating\":6.1,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Crash\"},{\"IMDB Rating\":6.7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"The Crazies\"},{\"IMDB Rating\":5.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"Crazy in Alabama\"},{\"IMDB Rating\":6,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"The Crew\"},{\"IMDB Rating\":5.4,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Cradle 2 the Grave\"},{\"IMDB Rating\":4.2,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":2,\"Title\":\"The In Crowd\"},{\"IMDB Rating\":5.8,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"The Corruptor\"},{\"IMDB Rating\":7,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Man cheng jin dai huang jin jia\"},{\"IMDB Rating\":6.1,\"Production Budget\":6500000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Crash\"},{\"IMDB Rating\":1.7,\"Production Budget\":5600000,\"Rotten Tomatoes Rating\":3,\"Title\":\"Crossover\"},{\"IMDB Rating\":6.6,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Crossroads\"},{\"IMDB Rating\":7.6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"The Count of Monte Cristo\"},{\"IMDB Rating\":6.7,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Cruel Intentions\"},{\"IMDB Rating\":6.2,\"Production Budget\":11500000,\"Rotten Tomatoes Rating\":14,\"Title\":\"The Cry of the Owl\"},{\"IMDB Rating\":6.4,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Cry Wolf\"},{\"IMDB Rating\":7.4,\"Production Budget\":8500000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Crazy Heart\"},{\"IMDB Rating\":6.3,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"crazy/beautiful\"},{\"IMDB Rating\":6.5,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"The Last Castle\"},{\"IMDB Rating\":5,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Clockstoppers\"},{\"IMDB Rating\":4.7,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Catch That Kid\"},{\"IMDB Rating\":5.2,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Cats & Dogs\"},{\"IMDB Rating\":6.6,\"Production Budget\":8300000,\"Rotten Tomatoes Rating\":40,\"Title\":\"The City of Your Final Destination\"},{\"IMDB Rating\":8.8,\"Production Budget\":3300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Cidade de Deus\"},{\"IMDB Rating\":5.9,\"Production Budget\":17500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"City of Ghosts\"},{\"IMDB Rating\":6.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"City by the Sea\"},{\"IMDB Rating\":7.1,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Cube\"},{\"IMDB Rating\":5.3,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Coyote Ugly\"},{\"IMDB Rating\":6.7,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Curious George\"},{\"IMDB Rating\":4.8,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Cursed\"},{\"IMDB Rating\":4.9,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Civil Brand\"},{\"IMDB Rating\":7.2,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Cloudy with a Chance of Meatballs\"},{\"IMDB Rating\":7.3,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Charlie Wilson's War\"},{\"IMDB Rating\":null,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Cyrus\"},{\"IMDB Rating\":2.4,\"Production Budget\":76000000,\"Rotten Tomatoes Rating\":1,\"Title\":\"Daddy Day Camp\"},{\"IMDB Rating\":5.5,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Daddy Day Care\"},{\"IMDB Rating\":5.6,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"The Black Dahlia\"},{\"IMDB Rating\":4.9,\"Production Budget\":5500000,\"Rotten Tomatoes Rating\":16,\"Title\":\"Diary of a Mad Black Woman\"},{\"IMDB Rating\":3.4,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Dance Flick\"},{\"IMDB Rating\":null,\"Production Budget\":2300000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Dancer, Texas Pop. 81\"},{\"IMDB Rating\":5.5,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Daredevil\"},{\"IMDB Rating\":7.8,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Dark City\"},{\"IMDB Rating\":8.3,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Donnie Darko\"},{\"IMDB Rating\":5.6,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Dark Water\"},{\"IMDB Rating\":5.7,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"Win a Date with Tad Hamilton!\"},{\"IMDB Rating\":2.6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":6,\"Title\":\"Date Movie\"},{\"IMDB Rating\":6.5,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Date Night\"},{\"IMDB Rating\":7.4,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Dawn of the Dead\"},{\"IMDB Rating\":6.6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Daybreakers\"},{\"IMDB Rating\":4.5,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Day of the Dead\"},{\"IMDB Rating\":7.6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"The Great Debaters\"},{\"IMDB Rating\":6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Double Jeopardy\"},{\"IMDB Rating\":7.4,\"Production Budget\":19700000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Der Baader Meinhof Komplex\"},{\"IMDB Rating\":5.6,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"Deep Blue Sea\"},{\"IMDB Rating\":5.1,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Drive Me Crazy\"},{\"IMDB Rating\":7.8,\"Production Budget\":12500000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Dancer in the Dark\"},{\"IMDB Rating\":6,\"Production Budget\":2750000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Diary of the Dead\"},{\"IMDB Rating\":7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Dear John\"},{\"IMDB Rating\":6.6,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Dear Wendy\"},{\"IMDB Rating\":5.1,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"D.E.B.S.\"},{\"IMDB Rating\":7.2,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Deconstructing Harry\"},{\"IMDB Rating\":5.5,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Mr. Deeds\"},{\"IMDB Rating\":6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"The Deep End of the Ocean\"},{\"IMDB Rating\":5.7,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Deep Rising\"},{\"IMDB Rating\":null,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Definitely, Maybe\"},{\"IMDB Rating\":5.1,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Death at a Funeral\"},{\"IMDB Rating\":7,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"DÈj‡ Vu\"},{\"IMDB Rating\":4.4,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Delgo\"},{\"IMDB Rating\":7.7,\"Production Budget\":69000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Despicable Me\"},{\"IMDB Rating\":4.3,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"Deuce Bigalow: European Gigolo\"},{\"IMDB Rating\":5.6,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Deuce Bigalow: Male Gigolo\"},{\"IMDB Rating\":5.8,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"The Devil's Own\"},{\"IMDB Rating\":4.6,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Darkness Falls\"},{\"IMDB Rating\":5.9,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"Defiance\"},{\"IMDB Rating\":5.9,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"A Dog of Flanders\"},{\"IMDB Rating\":5.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Dragonfly\"},{\"IMDB Rating\":6.8,\"Production Budget\":3300000,\"Rotten Tomatoes Rating\":73,\"Title\":\"The Dead Girl\"},{\"IMDB Rating\":6.1,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Dick\"},{\"IMDB Rating\":7.5,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Live Free or Die Hard\"},{\"IMDB Rating\":4.6,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Digimon: The Movie\"},{\"IMDB Rating\":4.8,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Dirty Work\"},{\"IMDB Rating\":7.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Banlieue 13\"},{\"IMDB Rating\":1.7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":2,\"Title\":\"Disaster Movie\"},{\"IMDB Rating\":8.3,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"District 9\"},{\"IMDB Rating\":5.2,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Disturbing Behavior\"},{\"IMDB Rating\":8,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Le Scaphandre et le Papillon\"},{\"IMDB Rating\":6.6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"Dark Blue\"},{\"IMDB Rating\":5.8,\"Production Budget\":3250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dreaming of Joseph Lees\"},{\"IMDB Rating\":6.5,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"De-Lovely\"},{\"IMDB Rating\":3.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Madea's Family Reunion\"},{\"IMDB Rating\":5.6,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Dead Man on Campus\"},{\"IMDB Rating\":5.3,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Drowning Mona\"},{\"IMDB Rating\":5.3,\"Production Budget\":11900000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Diamonds\"},{\"IMDB Rating\":6,\"Production Budget\":33000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Doomsday\"},{\"IMDB Rating\":5.4,\"Production Budget\":750000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Donkey Punch\"},{\"IMDB Rating\":6.2,\"Production Budget\":127500000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Dinosaur\"},{\"IMDB Rating\":4.9,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"DOA: Dead or Alive\"},{\"IMDB Rating\":2.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Doogal\"},{\"IMDB Rating\":7.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Dogma\"},{\"IMDB Rating\":5.3,\"Production Budget\":53000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Domestic Disturbance\"},{\"IMDB Rating\":5.9,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Domino\"},{\"IMDB Rating\":7.7,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Donnie Brasco\"},{\"IMDB Rating\":5.2,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Doom\"},{\"IMDB Rating\":null,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Doubt\"},{\"IMDB Rating\":4.8,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Doug's 1st Movie\"},{\"IMDB Rating\":6.1,\"Production Budget\":13500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Downfall\"},{\"IMDB Rating\":6.6,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"The Deep End\"},{\"IMDB Rating\":6,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Deep Impact\"},{\"IMDB Rating\":8.5,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"The Departed\"},{\"IMDB Rating\":4.8,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Dracula 2000\"},{\"IMDB Rating\":6.6,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"Death Race\"},{\"IMDB Rating\":7.1,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Drag Me To Hell\"},{\"IMDB Rating\":3.4,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"Derailed\"},{\"IMDB Rating\":6,\"Production Budget\":72000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Doctor Dolittle 2\"},{\"IMDB Rating\":5.2,\"Production Budget\":71500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Doctor Dolittle\"},{\"IMDB Rating\":5.5,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dickie Roberts: Former Child Star\"},{\"IMDB Rating\":5.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Drillbit Taylor\"},{\"IMDB Rating\":6.7,\"Production Budget\":4700000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Driving Lessons\"},{\"IMDB Rating\":4.2,\"Production Budget\":72000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Driven\"},{\"IMDB Rating\":5.3,\"Production Budget\":10600000,\"Rotten Tomatoes Rating\":4,\"Title\":\"Darkness\"},{\"IMDB Rating\":5.2,\"Production Budget\":34000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"I Dreamed of Africa\"},{\"IMDB Rating\":5.3,\"Production Budget\":68000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Dreamcatcher\"},{\"IMDB Rating\":6.6,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Dreamgirls\"},{\"IMDB Rating\":6.4,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Detroit Rock City\"},{\"IMDB Rating\":6.2,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Drop Dead Gorgeous\"},{\"IMDB Rating\":5.2,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Drumline\"},{\"IMDB Rating\":7.2,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dinner Rush\"},{\"IMDB Rating\":7.4,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Descent\"},{\"IMDB Rating\":5.9,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"DysFunkTional Family\"},{\"IMDB Rating\":3,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":2,\"Title\":\"The Master of Disguise\"},{\"IMDB Rating\":6,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Desert Blue\"},{\"IMDB Rating\":7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Disturbia\"},{\"IMDB Rating\":6.8,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Double Take\"},{\"IMDB Rating\":5.1,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Death at a Funeral\"},{\"IMDB Rating\":6.3,\"Production Budget\":800000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Deterrence\"},{\"IMDB Rating\":7.5,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dirty Pretty Things\"},{\"IMDB Rating\":3.6,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Dudley Do-Right\"},{\"IMDB Rating\":5.7,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Duets\"},{\"IMDB Rating\":4.7,\"Production Budget\":53000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"The Dukes of Hazzard\"},{\"IMDB Rating\":7.2,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Duma\"},{\"IMDB Rating\":3.3,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"Dumb and Dumberer: When Harry Met Lloyd\"},{\"IMDB Rating\":3.6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dungeons and Dragons\"},{\"IMDB Rating\":5.7,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Duplex\"},{\"IMDB Rating\":6.1,\"Production Budget\":54000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"You, Me and Dupree\"},{\"IMDB Rating\":6.4,\"Production Budget\":125000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"The Da Vinci Code\"},{\"IMDB Rating\":3.8,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"D-War\"},{\"IMDB Rating\":5.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":3,\"Title\":\"Deuces Wild\"},{\"IMDB Rating\":5,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Down to Earth\"},{\"IMDB Rating\":4.4,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":3,\"Title\":\"Down to You\"},{\"IMDB Rating\":7.1,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"I'm Not There\"},{\"IMDB Rating\":7.7,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Easy A\"},{\"IMDB Rating\":6.2,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Eclipse\"},{\"IMDB Rating\":6.7,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Edge of Darkness\"},{\"IMDB Rating\":6,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"EDtv\"},{\"IMDB Rating\":7.5,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":94,\"Title\":\"An Education\"},{\"IMDB Rating\":6.7,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"East is East\"},{\"IMDB Rating\":4.8,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"8 Heads in a Duffel Bag\"},{\"IMDB Rating\":6.6,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Eagle Eye\"},{\"IMDB Rating\":6.3,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"8MM\"},{\"IMDB Rating\":5.8,\"Production Budget\":5500000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Iris\"},{\"IMDB Rating\":7.4,\"Production Budget\":8500000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Election\"},{\"IMDB Rating\":4.9,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"Elektra\"},{\"IMDB Rating\":6.8,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Elf\"},{\"IMDB Rating\":7.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Elizabeth\"},{\"IMDB Rating\":6.3,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"Ella Enchanted\"},{\"IMDB Rating\":6.2,\"Production Budget\":29000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Once Upon a Time in Mexico\"},{\"IMDB Rating\":5.4,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"The Adventures of Elmo in Grouchland\"},{\"IMDB Rating\":6.7,\"Production Budget\":12500000,\"Rotten Tomatoes Rating\":50,\"Title\":\"The Emperor's Club\"},{\"IMDB Rating\":6.5,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Empire\"},{\"IMDB Rating\":7.8,\"Production Budget\":3400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"La marche de l'empereur\"},{\"IMDB Rating\":5.4,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"Employee of the Month\"},{\"IMDB Rating\":7.4,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"The Emperor's New Groove\"},{\"IMDB Rating\":7.5,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Enchanted\"},{\"IMDB Rating\":6.9,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"The End of the Affair\"},{\"IMDB Rating\":5.4,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"End of Days\"},{\"IMDB Rating\":6.7,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"End of the Spear\"},{\"IMDB Rating\":7.4,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Enemy at the Gates\"},{\"IMDB Rating\":7.2,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Enemy of the State\"},{\"IMDB Rating\":6.1,\"Production Budget\":66000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Entrapment\"},{\"IMDB Rating\":6.5,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Enough\"},{\"IMDB Rating\":4.6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Envy\"},{\"IMDB Rating\":2.2,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":2,\"Title\":\"Epic Movie\"},{\"IMDB Rating\":5,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"Eragon\"},{\"IMDB Rating\":7.2,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Erin Brockovich\"},{\"IMDB Rating\":6.4,\"Production Budget\":54000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Elizabethtown\"},{\"IMDB Rating\":4.7,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Eat Pray Love\"},{\"IMDB Rating\":8.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Eternal Sunshine of the Spotless Mind\"},{\"IMDB Rating\":6.6,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"Eulogy\"},{\"IMDB Rating\":7.9,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Eureka\"},{\"IMDB Rating\":6.5,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Eurotrip\"},{\"IMDB Rating\":7,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Eve's Bayou\"},{\"IMDB Rating\":6.3,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Event Horizon\"},{\"IMDB Rating\":6.1,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Evita\"},{\"IMDB Rating\":5.9,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Evolution\"},{\"IMDB Rating\":6,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"An Everlasting Piece\"},{\"IMDB Rating\":7.3,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Fong juk\"},{\"IMDB Rating\":5.2,\"Production Budget\":33000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Exit Wounds\"},{\"IMDB Rating\":6.8,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"The Exorcism of Emily Rose\"},{\"IMDB Rating\":5,\"Production Budget\":78000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Exorcist: The Beginning\"},{\"IMDB Rating\":7.1,\"Production Budget\":37500000,\"Rotten Tomatoes Rating\":61,\"Title\":\"The Express\"},{\"IMDB Rating\":6.8,\"Production Budget\":20700000,\"Rotten Tomatoes Rating\":71,\"Title\":\"eXistenZ\"},{\"IMDB Rating\":6.4,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Extract\"},{\"IMDB Rating\":4.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":6,\"Title\":\"Extreme Ops\"},{\"IMDB Rating\":7.2,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Eyes Wide Shut\"},{\"IMDB Rating\":6.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"The Faculty\"},{\"IMDB Rating\":5.6,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Failure to Launch\"},{\"IMDB Rating\":6.5,\"Production Budget\":29000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Keeping the Faith\"},{\"IMDB Rating\":4.5,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Fame\"},{\"IMDB Rating\":6.3,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"The Family Stone\"},{\"IMDB Rating\":7.5,\"Production Budget\":13500000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Far From Heaven\"},{\"IMDB Rating\":2.5,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Fascination\"},{\"IMDB Rating\":4.8,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Father's Day\"},{\"IMDB Rating\":6,\"Production Budget\":100000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Facing the Giants\"},{\"IMDB Rating\":7.3,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Face/Off\"},{\"IMDB Rating\":6.4,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Final Destination 2\"},{\"IMDB Rating\":5.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Final Destination 3\"},{\"IMDB Rating\":4.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"The Final Destination\"},{\"IMDB Rating\":3.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"FearDotCom\"},{\"IMDB Rating\":7.6,\"Production Budget\":18500000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Fear and Loathing in Las Vegas\"},{\"IMDB Rating\":6.4,\"Production Budget\":3200000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Feast\"},{\"IMDB Rating\":7.4,\"Production Budget\":95000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"The Fifth Element\"},{\"IMDB Rating\":6.3,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Femme Fatale\"},{\"IMDB Rating\":5.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Bring it On\"},{\"IMDB Rating\":5.7,\"Production Budget\":87500000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Fantastic Four\"},{\"IMDB Rating\":5.6,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":13,\"Title\":54},{\"IMDB Rating\":5.1,\"Production Budget\":76000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"2 Fast 2 Furious\"},{\"IMDB Rating\":6,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"The Fast and the Furious\"},{\"IMDB Rating\":7.6,\"Production Budget\":72500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Fool's Gold\"},{\"IMDB Rating\":7.6,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Fahrenheit 9/11\"},{\"IMDB Rating\":7.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Capitalism: A Love Story\"},{\"IMDB Rating\":6.8,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"From Hell\"},{\"IMDB Rating\":6.9,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Fido\"},{\"IMDB Rating\":8.8,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Fight Club\"},{\"IMDB Rating\":6.4,\"Production Budget\":137000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Final Fantasy: The Spirits Within\"},{\"IMDB Rating\":7.2,\"Production Budget\":43000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"Finding Forrester\"},{\"IMDB Rating\":4,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"Freddy Got Fingered\"},{\"IMDB Rating\":4.4,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Firestorm\"},{\"IMDB Rating\":7.5,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Fish Tank\"},{\"IMDB Rating\":6.9,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Felicia's Journey\"},{\"IMDB Rating\":1.6,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"From Justin to Kelly\"},{\"IMDB Rating\":6.8,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"Final Destination\"},{\"IMDB Rating\":7.2,\"Production Budget\":53000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"Flags of Our Fathers\"},{\"IMDB Rating\":6.7,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Flawless\"},{\"IMDB Rating\":7.2,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Flammen og Citronen\"},{\"IMDB Rating\":5.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Flicka\"},{\"IMDB Rating\":6,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Flight of the Phoenix\"},{\"IMDB Rating\":7.8,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"United 93\"},{\"IMDB Rating\":4.6,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Flubber\"},{\"IMDB Rating\":7,\"Production Budget\":149000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"Flushed Away\"},{\"IMDB Rating\":6.5,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Flyboys\"},{\"IMDB Rating\":4.7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Fly Me To the Moon\"},{\"IMDB Rating\":7.1,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Find Me Guilty\"},{\"IMDB Rating\":6.6,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"The Family Man\"},{\"IMDB Rating\":6.1,\"Production Budget\":6500000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Friends with Money\"},{\"IMDB Rating\":8.2,\"Production Budget\":94000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Finding Nemo\"},{\"IMDB Rating\":null,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Finishing the Game\"},{\"IMDB Rating\":7.4,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"The Fountain\"},{\"IMDB Rating\":null,\"Production Budget\":120000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"Fantastic Four: Rise of the Silver Surfer\"},{\"IMDB Rating\":4.1,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Farce of the Penguins\"},{\"IMDB Rating\":6.2,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Flightplan\"},{\"IMDB Rating\":7.3,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"Frailty\"},{\"IMDB Rating\":6.7,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"The Forbidden Kingdom\"},{\"IMDB Rating\":7.5,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Freedom Writers\"},{\"IMDB Rating\":5.3,\"Production Budget\":9500000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Next Friday\"},{\"IMDB Rating\":6.5,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Freaky Friday\"},{\"IMDB Rating\":7.3,\"Production Budget\":31000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Frequency\"},{\"IMDB Rating\":8,\"Production Budget\":39000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Serenity\"},{\"IMDB Rating\":4.9,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Forgotton\"},{\"IMDB Rating\":4.4,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Jason X\"},{\"IMDB Rating\":5.6,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Friday the 13th\"},{\"IMDB Rating\":5.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Friday After Next\"},{\"IMDB Rating\":7.3,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Frida\"},{\"IMDB Rating\":7.2,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Friday Night Lights\"},{\"IMDB Rating\":7.2,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Frozen River\"},{\"IMDB Rating\":7.4,\"Production Budget\":105000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"The Princess and the Frog\"},{\"IMDB Rating\":4.8,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Full Frontal\"},{\"IMDB Rating\":5.6,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Fireproof\"},{\"IMDB Rating\":5.1,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"The Forsaken\"},{\"IMDB Rating\":7.9,\"Production Budget\":29000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Frost/Nixon\"},{\"IMDB Rating\":6.1,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Factory Girl\"},{\"IMDB Rating\":6,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Fateless\"},{\"IMDB Rating\":7.2,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":95,\"Title\":\"The Full Monty\"},{\"IMDB Rating\":6.3,\"Production Budget\":140000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Fun With Dick And Jane\"},{\"IMDB Rating\":6.8,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Funny People\"},{\"IMDB Rating\":2.6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Furry Vengeance\"},{\"IMDB Rating\":6.3,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Fever Pitch\"},{\"IMDB Rating\":6.2,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"For Your Consideration\"},{\"IMDB Rating\":7.7,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"The Game\"},{\"IMDB Rating\":7.4,\"Production Budget\":97000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Gangs of New York\"},{\"IMDB Rating\":4.8,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Garfield\"},{\"IMDB Rating\":5.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Georgia Rule\"},{\"IMDB Rating\":7.8,\"Production Budget\":36000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Gattaca\"},{\"IMDB Rating\":3.3,\"Production Budget\":6400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Goodbye, Lenin!\"},{\"IMDB Rating\":5,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Good Boy!\"},{\"IMDB Rating\":6,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Gods and Generals\"},{\"IMDB Rating\":6.1,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"The Good German\"},{\"IMDB Rating\":7.5,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Gods and Monsters\"},{\"IMDB Rating\":6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"The Good Night\"},{\"IMDB Rating\":null,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"The Good Thief\"},{\"IMDB Rating\":5.7,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"George and the Dragon\"},{\"IMDB Rating\":6.2,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Gerry\"},{\"IMDB Rating\":5,\"Production Budget\":82500000,\"Rotten Tomatoes Rating\":22,\"Title\":\"G-Force\"},{\"IMDB Rating\":6.8,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"Gridiron Gang\"},{\"IMDB Rating\":6.6,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"The Good Girl\"},{\"IMDB Rating\":5.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Ghost Ship\"},{\"IMDB Rating\":6.4,\"Production Budget\":36000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Ghosts of Mississippi\"},{\"IMDB Rating\":5.6,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"The Glass House\"},{\"IMDB Rating\":5.2,\"Production Budget\":120000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Ghost Rider\"},{\"IMDB Rating\":4.7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Ghost Town\"},{\"IMDB Rating\":6.7,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"The Gift\"},{\"IMDB Rating\":2.4,\"Production Budget\":54000000,\"Rotten Tomatoes Rating\":6,\"Title\":\"Gigli\"},{\"IMDB Rating\":5.5,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"G.I.Jane\"},{\"IMDB Rating\":5.8,\"Production Budget\":175000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"G.I. Joe: The Rise of Cobra\"},{\"IMDB Rating\":null,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Girl, Interrupted\"},{\"IMDB Rating\":8.3,\"Production Budget\":103000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Gladiator\"},{\"IMDB Rating\":2,\"Production Budget\":8500000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Glitter\"},{\"IMDB Rating\":4.7,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Gloria\"},{\"IMDB Rating\":5.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":5,\"Title\":\"Good Luck Chuck\"},{\"IMDB Rating\":8.4,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"The Green Mile\"},{\"IMDB Rating\":6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"The Game of Their Lives\"},{\"IMDB Rating\":8.1,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Gandhi, My Father\"},{\"IMDB Rating\":7.7,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Good Night and Good Luck\"},{\"IMDB Rating\":6.1,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"The General's Daughter\"},{\"IMDB Rating\":5.4,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Gun Shy\"},{\"IMDB Rating\":null,\"Production Budget\":6500000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Go!\"},{\"IMDB Rating\":6.9,\"Production Budget\":33000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Goal!\"},{\"IMDB Rating\":4.7,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":4,\"Title\":\"Godsend\"},{\"IMDB Rating\":4.8,\"Production Budget\":125000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Godzilla\"},{\"IMDB Rating\":6.4,\"Production Budget\":103300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Gone in 60 Seconds\"},{\"IMDB Rating\":6.2,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"Good\"},{\"IMDB Rating\":8.1,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Good Will Hunting\"},{\"IMDB Rating\":7.3,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Gosford Park\"},{\"IMDB Rating\":null,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Gossip\"},{\"IMDB Rating\":6.3,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"The Game Plan\"},{\"IMDB Rating\":7.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Girl with a Pearl Earring\"},{\"IMDB Rating\":7.2,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Galaxy Quest\"},{\"IMDB Rating\":6.8,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Saving Grace\"},{\"IMDB Rating\":6.2,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":59,\"Title\":\"Gracie\"},{\"IMDB Rating\":6.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"The Great Raid\"},{\"IMDB Rating\":6.1,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Grand\"},{\"IMDB Rating\":7.6,\"Production Budget\":25500000,\"Rotten Tomatoes Rating\":83,\"Title\":\"The Constant Gardener\"},{\"IMDB Rating\":7.9,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Garden State\"},{\"IMDB Rating\":7,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Grease\"},{\"IMDB Rating\":7.1,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Green Zone\"},{\"IMDB Rating\":5.3,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"George Of The Jungle\"},{\"IMDB Rating\":5.9,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"The Brothers Grimm\"},{\"IMDB Rating\":7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"The Girl Next Door\"},{\"IMDB Rating\":5.7,\"Production Budget\":123000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"How the Grinch Stole Christmas\"},{\"IMDB Rating\":7.9,\"Production Budget\":53000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Grindhouse\"},{\"IMDB Rating\":4,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"Get Rich or Die Tryin'\"},{\"IMDB Rating\":7.9,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"Wallace & Gromit: The Curse of the Were-Rabbit\"},{\"IMDB Rating\":5.8,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":56,\"Title\":\"Groove\"},{\"IMDB Rating\":7.4,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Grosse Point Blank\"},{\"IMDB Rating\":4.6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"The Grudge 2\"},{\"IMDB Rating\":5.7,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"The Grudge\"},{\"IMDB Rating\":5.8,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Grown Ups\"},{\"IMDB Rating\":5.7,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Guess Who\"},{\"IMDB Rating\":4.8,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Get Carter\"},{\"IMDB Rating\":5.5,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Get Over It\"},{\"IMDB Rating\":6.8,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Veronica Guerin\"},{\"IMDB Rating\":5.5,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Guru\"},{\"IMDB Rating\":5.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"A Guy Thing\"},{\"IMDB Rating\":7.7,\"Production Budget\":5500000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Ghost World\"},{\"IMDB Rating\":4.5,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Halloween 2\"},{\"IMDB Rating\":7.2,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Hairspray\"},{\"IMDB Rating\":6.3,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Half Baked\"},{\"IMDB Rating\":6,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Hamlet\"},{\"IMDB Rating\":6,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Hamlet\"},{\"IMDB Rating\":6.5,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Hancock\"},{\"IMDB Rating\":3.9,\"Production Budget\":47000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Happily N'Ever After\"},{\"IMDB Rating\":5.2,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":18,\"Title\":\"The Happening\"},{\"IMDB Rating\":7.5,\"Production Budget\":1700000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Happy, Texas\"},{\"IMDB Rating\":7.2,\"Production Budget\":950000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Hard Candy\"},{\"IMDB Rating\":7,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Harsh Times\"},{\"IMDB Rating\":4.9,\"Production Budget\":5500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Harvard Man\"},{\"IMDB Rating\":7.4,\"Production Budget\":7300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Harry Brown\"},{\"IMDB Rating\":5.5,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"The House Bunny\"},{\"IMDB Rating\":6.9,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"The Devil's Rejects\"},{\"IMDB Rating\":5.5,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"House of 1,000 Corpses\"},{\"IMDB Rating\":6.5,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The House of the Dead\"},{\"IMDB Rating\":6.6,\"Production Budget\":78000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Hidalgo\"},{\"IMDB Rating\":5.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Hide and Seek\"},{\"IMDB Rating\":6.7,\"Production Budget\":17500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Hoodwinked\"},{\"IMDB Rating\":5.1,\"Production Budget\":35200000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Head of State\"},{\"IMDB Rating\":7.6,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Hedwig and the Angry Inch\"},{\"IMDB Rating\":6.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Pooh's Heffalump Movie\"},{\"IMDB Rating\":6.8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"He Got Game\"},{\"IMDB Rating\":3.2,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"Heist\"},{\"IMDB Rating\":7.3,\"Production Budget\":82500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Hellboy 2: The Golden Army\"},{\"IMDB Rating\":6.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Hellboy\"},{\"IMDB Rating\":5.7,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Raising Helen\"},{\"IMDB Rating\":6.7,\"Production Budget\":6500000,\"Rotten Tomatoes Rating\":48,\"Title\":\"A Home at the End of the World\"},{\"IMDB Rating\":4.6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":18,\"Title\":\"Here on Earth\"},{\"IMDB Rating\":4.8,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Head Over Heels\"},{\"IMDB Rating\":4.6,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"The Haunting\"},{\"IMDB Rating\":6.1,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"High Crimes\"},{\"IMDB Rating\":7.6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"High Fidelity\"},{\"IMDB Rating\":4.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Highlander: Endgame\"},{\"IMDB Rating\":6.1,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"High Heels and Low Lifes\"},{\"IMDB Rating\":3.7,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"High School Musical 3: Senior Year\"},{\"IMDB Rating\":6.7,\"Production Budget\":3700000,\"Rotten Tomatoes Rating\":63,\"Title\":\"The History Boys\"},{\"IMDB Rating\":7.6,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"A History of Violence\"},{\"IMDB Rating\":5.7,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Hitch\"},{\"IMDB Rating\":6.8,\"Production Budget\":17500000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Hitman\"},{\"IMDB Rating\":6.7,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Harold & Kumar Escape from Guantanamo Bay\"},{\"IMDB Rating\":7.2,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"Harold & Kumar Go to White Castle\"},{\"IMDB Rating\":4.7,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Held Up\"},{\"IMDB Rating\":5,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Hills Have Eyes II\"},{\"IMDB Rating\":6.5,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"The Hills Have Eyes\"},{\"IMDB Rating\":6.7,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"How to Lose Friends & Alienate People\"},{\"IMDB Rating\":4.1,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":2,\"Title\":\"Half Past Dead\"},{\"IMDB Rating\":3.9,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Halloween: Resurrection\"},{\"IMDB Rating\":4.7,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Holy Man\"},{\"IMDB Rating\":3.6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Milk\"},{\"IMDB Rating\":6.4,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Hamlet 2\"},{\"IMDB Rating\":null,\"Production Budget\":6500000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Hannah Montana/Miley Cyrus: Best of Both Worlds Concert Tour\"},{\"IMDB Rating\":5.4,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Home on the Range\"},{\"IMDB Rating\":6,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Hannibal Rising\"},{\"IMDB Rating\":7.9,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"The Hangover\"},{\"IMDB Rating\":4.3,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Hanging Up\"},{\"IMDB Rating\":6.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"The Hoax\"},{\"IMDB Rating\":7.1,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Holes\"},{\"IMDB Rating\":6.9,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"The Holiday\"},{\"IMDB Rating\":5.5,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Hollow Man\"},{\"IMDB Rating\":4.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"Home Fries\"},{\"IMDB Rating\":4.6,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"Honey\"},{\"IMDB Rating\":2.6,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"The Honeymooners\"},{\"IMDB Rating\":5.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Hoot\"},{\"IMDB Rating\":5.3,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Hope Floats\"},{\"IMDB Rating\":7.2,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Horton Hears a Who\"},{\"IMDB Rating\":5.4,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Hostel: Part II\"},{\"IMDB Rating\":7.3,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Hostage\"},{\"IMDB Rating\":5.7,\"Production Budget\":4800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Hostel\"},{\"IMDB Rating\":6.5,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Hot Rod\"},{\"IMDB Rating\":7.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"The Hours\"},{\"IMDB Rating\":7.5,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Life as a House\"},{\"IMDB Rating\":5.4,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"Bringing Down the House\"},{\"IMDB Rating\":5.4,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"House of Wax\"},{\"IMDB Rating\":5.4,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"How to Deal\"},{\"IMDB Rating\":5.5,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"How High\"},{\"IMDB Rating\":7.2,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Harry Potter and the Chamber of Secrets\"},{\"IMDB Rating\":7.7,\"Production Budget\":130000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Harry Potter and the Prisoner of Azkaban\"},{\"IMDB Rating\":7.6,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Harry Potter and the Goblet of Fire\"},{\"IMDB Rating\":7.4,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Harry Potter and the Order of the Phoenix\"},{\"IMDB Rating\":7.3,\"Production Budget\":250000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Harry Potter and the Half-Blood Prince\"},{\"IMDB Rating\":7.2,\"Production Budget\":125000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Harry Potter and the Sorcerer's Stone\"},{\"IMDB Rating\":6.7,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"Happy Feet\"},{\"IMDB Rating\":6.8,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Hercules\"},{\"IMDB Rating\":4.1,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Hardball\"},{\"IMDB Rating\":5.6,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Hard Rain\"},{\"IMDB Rating\":6.3,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"The Horse Whisperer\"},{\"IMDB Rating\":6.3,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Heart of Me\"},{\"IMDB Rating\":7.5,\"Production Budget\":3750000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Casa de Areia\"},{\"IMDB Rating\":5.1,\"Production Budget\":12500000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Sorority Row\"},{\"IMDB Rating\":6.2,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"Hart's War\"},{\"IMDB Rating\":6.6,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"The Hitchhiker's Guide to the Galaxy\"},{\"IMDB Rating\":5.4,\"Production Budget\":2850000,\"Rotten Tomatoes Rating\":null,\"Title\":\"High Tension\"},{\"IMDB Rating\":8,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Hot Fuzz\"},{\"IMDB Rating\":6.6,\"Production Budget\":3300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Human Traffic\"},{\"IMDB Rating\":8.2,\"Production Budget\":165000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"How to Train Your Dragon\"},{\"IMDB Rating\":6.8,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"I Heart Huckabees\"},{\"IMDB Rating\":5.7,\"Production Budget\":137000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Hulk\"},{\"IMDB Rating\":7.1,\"Production Budget\":137500000,\"Rotten Tomatoes Rating\":66,\"Title\":\"The Incredible Hulk\"},{\"IMDB Rating\":6.5,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"The Hunchback of Notre Dame\"},{\"IMDB Rating\":5.8,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"The Hunted\"},{\"IMDB Rating\":7.8,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Hurt Locker\"},{\"IMDB Rating\":7.5,\"Production Budget\":2800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Hustle & Flow\"},{\"IMDB Rating\":6.2,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Starsky & Hutch\"},{\"IMDB Rating\":6.3,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Hollywood Ending\"},{\"IMDB Rating\":5.2,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Hollywood Homicide\"},{\"IMDB Rating\":5.2,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"Whatever it Takes\"},{\"IMDB Rating\":6.9,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Ice Age: The Meltdown\"},{\"IMDB Rating\":7.1,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Ice Age: Dawn of the Dinosaurs\"},{\"IMDB Rating\":7.4,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Ice Age\"},{\"IMDB Rating\":6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"Ice Princess\"},{\"IMDB Rating\":7.5,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"The Ice Storm\"},{\"IMDB Rating\":5.2,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"I Come with the Rain\"},{\"IMDB Rating\":7.3,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Identity\"},{\"IMDB Rating\":6.7,\"Production Budget\":10700000,\"Rotten Tomatoes Rating\":86,\"Title\":\"An Ideal Husband\"},{\"IMDB Rating\":5.8,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Idlewild\"},{\"IMDB Rating\":7,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Igby Goes Down\"},{\"IMDB Rating\":6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Igor\"},{\"IMDB Rating\":3.3,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":17,\"Title\":\"I Got the Hook-Up!\"},{\"IMDB Rating\":5.8,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Idle Hands\"},{\"IMDB Rating\":7.2,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Imaginary Heroes\"},{\"IMDB Rating\":4.1,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"I Still Know What You Did Last Summer\"},{\"IMDB Rating\":5.4,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"I Know What You Did Last Summer\"},{\"IMDB Rating\":5.9,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"I Love You, Beth Cooper\"},{\"IMDB Rating\":7.7,\"Production Budget\":16500000,\"Rotten Tomatoes Rating\":74,\"Title\":\"The Illusionist\"},{\"IMDB Rating\":6.1,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"But I'm a Cheerleader\"},{\"IMDB Rating\":7.1,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"The Imaginarium of Doctor Parnassus\"},{\"IMDB Rating\":6.7,\"Production Budget\":7900000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Imagine Me & You\"},{\"IMDB Rating\":5.4,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Imagine That\"},{\"IMDB Rating\":6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Impostor\"},{\"IMDB Rating\":9.1,\"Production Budget\":160000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Inception\"},{\"IMDB Rating\":5.2,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"In the Cut\"},{\"IMDB Rating\":5.5,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"In Too Deep\"},{\"IMDB Rating\":7.2,\"Production Budget\":18900000,\"Rotten Tomatoes Rating\":null,\"Title\":\"IndigËnes\"},{\"IMDB Rating\":6.6,\"Production Budget\":185000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Indiana Jones and the Kingdom of the Crystal Skull\"},{\"IMDB Rating\":5.3,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"In Dreams\"},{\"IMDB Rating\":7.1,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"Infamous\"},{\"IMDB Rating\":6.2,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Informant\"},{\"IMDB Rating\":5.2,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Informers\"},{\"IMDB Rating\":6.1,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Inkheart\"},{\"IMDB Rating\":6.1,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"In & Out\"},{\"IMDB Rating\":6.1,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"I Now Pronounce You Chuck and Larry\"},{\"IMDB Rating\":7.7,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Inside Man\"},{\"IMDB Rating\":8,\"Production Budget\":68000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"The Insider\"},{\"IMDB Rating\":6.3,\"Production Budget\":46000000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Insomnia\"},{\"IMDB Rating\":3.9,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Inspector Gadget\"},{\"IMDB Rating\":6.2,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Instinct\"},{\"IMDB Rating\":6.5,\"Production Budget\":18500000,\"Rotten Tomatoes Rating\":57,\"Title\":\"The Invention of Lying\"},{\"IMDB Rating\":6,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"The Invasion\"},{\"IMDB Rating\":6.3,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Ira and Abby\"},{\"IMDB Rating\":null,\"Production Budget\":105000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"I, Robot\"},{\"IMDB Rating\":7.3,\"Production Budget\":170000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"Iron Man 2\"},{\"IMDB Rating\":7.9,\"Production Budget\":186000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Iron Man\"},{\"IMDB Rating\":7.9,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"The Iron Giant\"},{\"IMDB Rating\":7.4,\"Production Budget\":4900000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Obsluhoval jsem anglickÈho kr·le\"},{\"IMDB Rating\":6.9,\"Production Budget\":120000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"The Island\"},{\"IMDB Rating\":4.9,\"Production Budget\":36000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Isn't She Great\"},{\"IMDB Rating\":5.3,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"I Spy\"},{\"IMDB Rating\":6.9,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"The Italian Job\"},{\"IMDB Rating\":5.5,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"I Think I Love My Wife\"},{\"IMDB Rating\":4.6,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Jack Frost\"},{\"IMDB Rating\":7.6,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Jackie Brown\"},{\"IMDB Rating\":6,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"The Jackal\"},{\"IMDB Rating\":7.1,\"Production Budget\":28500000,\"Rotten Tomatoes Rating\":43,\"Title\":\"The Jacket\"},{\"IMDB Rating\":6.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Jakob the Liar\"},{\"IMDB Rating\":7.2,\"Production Budget\":72000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Jarhead\"},{\"IMDB Rating\":4.8,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Jawbreaker\"},{\"IMDB Rating\":6.3,\"Production Budget\":135000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"The World is Not Enough\"},{\"IMDB Rating\":6,\"Production Budget\":142000000,\"Rotten Tomatoes Rating\":59,\"Title\":\"Die Another Day\"},{\"IMDB Rating\":8,\"Production Budget\":102000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Casino Royale\"},{\"IMDB Rating\":6.8,\"Production Budget\":230000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Quantum of Solace\"},{\"IMDB Rating\":5.3,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Jennifer's Body\"},{\"IMDB Rating\":7.2,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Jackass: Number Two\"},{\"IMDB Rating\":6.3,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Jackass: The Movie\"},{\"IMDB Rating\":5.9,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Journey to the Center of the Earth\"},{\"IMDB Rating\":5.4,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"Joe Dirt\"},{\"IMDB Rating\":6.7,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"The Curse of the Jade Scorpion\"},{\"IMDB Rating\":5.7,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Jeepers Creepers\"},{\"IMDB Rating\":5.8,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Johnny English\"},{\"IMDB Rating\":5.3,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Jeepers Creepers II\"},{\"IMDB Rating\":7.7,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"The Assassination of Jesse James by the Coward Robert Ford\"},{\"IMDB Rating\":3.8,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":6,\"Title\":\"Johnson Family Vacation\"},{\"IMDB Rating\":6.2,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Jersey Girl\"},{\"IMDB Rating\":5.1,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"The Jimmy Show\"},{\"IMDB Rating\":6.4,\"Production Budget\":10800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Jindabyne\"},{\"IMDB Rating\":5.7,\"Production Budget\":400000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Jackpot\"},{\"IMDB Rating\":6.8,\"Production Budget\":58000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"Just Like Heaven\"},{\"IMDB Rating\":5,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Just My Luck\"},{\"IMDB Rating\":null,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"The Messenger: The Story of Joan of Arc\"},{\"IMDB Rating\":5.2,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"The Jungle Book 2\"},{\"IMDB Rating\":5.3,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Joe Somebody\"},{\"IMDB Rating\":4.3,\"Production Budget\":47000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Jonah Hex\"},{\"IMDB Rating\":6.6,\"Production Budget\":36000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"John Q\"},{\"IMDB Rating\":6.3,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Jonah: A VeggieTales Movie\"},{\"IMDB Rating\":6.6,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Joneses\"},{\"IMDB Rating\":5.1,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Josie and the Pussycats\"},{\"IMDB Rating\":5.4,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Joy Ride\"},{\"IMDB Rating\":7.2,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Jerry Maguire\"},{\"IMDB Rating\":6.8,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Jay and Silent Bob Strike Back\"},{\"IMDB Rating\":6.7,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Jesus' Son\"},{\"IMDB Rating\":7.1,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Being Julia\"},{\"IMDB Rating\":7.2,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Julie & Julia\"},{\"IMDB Rating\":5.9,\"Production Budget\":82500000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Jumper\"},{\"IMDB Rating\":7.1,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Junebug\"},{\"IMDB Rating\":7.9,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Juno\"},{\"IMDB Rating\":7.9,\"Production Budget\":93000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Jurassic Park 3\"},{\"IMDB Rating\":6.3,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Just Looking\"},{\"IMDB Rating\":5.1,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"Just Married\"},{\"IMDB Rating\":4.1,\"Production Budget\":15600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Juwanna Man\"},{\"IMDB Rating\":5.8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"Freddy vs. Jason\"},{\"IMDB Rating\":6.5,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"K-19: The Widowmaker\"},{\"IMDB Rating\":6.2,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Kate and Leopold\"},{\"IMDB Rating\":4.1,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Kangaroo Jack\"},{\"IMDB Rating\":8.1,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Kick-Ass\"},{\"IMDB Rating\":6.2,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"The Original Kings of Comedy\"},{\"IMDB Rating\":6.3,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"Kiss of the Dragon\"},{\"IMDB Rating\":null,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Kung Fu Hustle\"},{\"IMDB Rating\":6.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"The Karate Kid\"},{\"IMDB Rating\":6.4,\"Production Budget\":600000,\"Rotten Tomatoes Rating\":77,\"Title\":\"The Kentucky Fried Movie\"},{\"IMDB Rating\":6.9,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Kicking and Screaming\"},{\"IMDB Rating\":8,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Kill Bill: Volume 2\"},{\"IMDB Rating\":8.2,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Kill Bill: Volume 1\"},{\"IMDB Rating\":null,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Kingdom Come\"},{\"IMDB Rating\":7.1,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Kingdom of Heaven\"},{\"IMDB Rating\":7.2,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Kinsey\"},{\"IMDB Rating\":6.8,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Kissing Jessica Stein\"},{\"IMDB Rating\":6.4,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"Kiss the Girls\"},{\"IMDB Rating\":7.6,\"Production Budget\":207000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"King Kong\"},{\"IMDB Rating\":7.5,\"Production Budget\":27500000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Knocked Up\"},{\"IMDB Rating\":6.6,\"Production Budget\":117000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Knight and Day\"},{\"IMDB Rating\":7.1,\"Production Budget\":72500000,\"Rotten Tomatoes Rating\":51,\"Title\":\"The Kingdom\"},{\"IMDB Rating\":4.3,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Black Knight\"},{\"IMDB Rating\":6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Knockaround Guys\"},{\"IMDB Rating\":6.4,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"Knowing\"},{\"IMDB Rating\":4.1,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Knock Off\"},{\"IMDB Rating\":7.3,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"K-PAX\"},{\"IMDB Rating\":4.7,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":5,\"Title\":\"Christmas with the Kranks\"},{\"IMDB Rating\":3.5,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":2,\"Title\":\"King's Ransom\"},{\"IMDB Rating\":null,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Kiss Kiss, Bang Bang\"},{\"IMDB Rating\":6.6,\"Production Budget\":41000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"A Knight's Tale\"},{\"IMDB Rating\":7.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"The Kite Runner\"},{\"IMDB Rating\":7,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Kundun\"},{\"IMDB Rating\":5.7,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Kung Pow: Enter the Fist\"},{\"IMDB Rating\":8.4,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":99,\"Title\":\"L.A. Confidential\"},{\"IMDB Rating\":7.2,\"Production Budget\":53000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Law Abiding Citizen\"},{\"IMDB Rating\":6.5,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Ladder 49\"},{\"IMDB Rating\":6.2,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"The Ladykillers\"},{\"IMDB Rating\":5.8,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Lady in the Water\"},{\"IMDB Rating\":6.8,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"The Lake House\"},{\"IMDB Rating\":6.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Lakeview Terrace\"},{\"IMDB Rating\":4.7,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"The Ladies Man\"},{\"IMDB Rating\":5.3,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Land of the Lost\"},{\"IMDB Rating\":6.5,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Changing Lanes\"},{\"IMDB Rating\":7.5,\"Production Budget\":12500000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Lars and the Real Girl\"},{\"IMDB Rating\":7.3,\"Production Budget\":5900000,\"Rotten Tomatoes Rating\":null,\"Title\":\"L'auberge espagnole\"},{\"IMDB Rating\":5.7,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":18,\"Title\":\"Laws of Attraction\"},{\"IMDB Rating\":5.2,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Little Black Book\"},{\"IMDB Rating\":7.4,\"Production Budget\":6500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Layer Cake\"},{\"IMDB Rating\":2.8,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":6,\"Title\":\"Larry the Cable Guy: Health Inspector\"},{\"IMDB Rating\":7.8,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Little Children\"},{\"IMDB Rating\":5.9,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Save the Last Dance\"},{\"IMDB Rating\":5,\"Production Budget\":18500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Left Behind\"},{\"IMDB Rating\":5,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Legion\"},{\"IMDB Rating\":7.1,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"I am Legend\"},{\"IMDB Rating\":6.1,\"Production Budget\":58000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"Leatherheads\"},{\"IMDB Rating\":8.1,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Letters from Iwo Jima\"},{\"IMDB Rating\":6.3,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Last Holiday\"},{\"IMDB Rating\":7.4,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"The Hurricane\"},{\"IMDB Rating\":6.7,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Liar Liar\"},{\"IMDB Rating\":7.7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Equilibrium\"},{\"IMDB Rating\":5.8,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Chasing Liberty\"},{\"IMDB Rating\":6.4,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Libertine\"},{\"IMDB Rating\":7.2,\"Production Budget\":700000,\"Rotten Tomatoes Rating\":83,\"Title\":\"L.I.E.\"},{\"IMDB Rating\":7.2,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"The Life Aquatic with Steve Zissou\"},{\"IMDB Rating\":7.3,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"The Life of David Gale\"},{\"IMDB Rating\":5.3,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Life\"},{\"IMDB Rating\":4.4,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"Like Mike\"},{\"IMDB Rating\":7.1,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Lilo & Stitch\"},{\"IMDB Rating\":6.9,\"Production Budget\":8300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Limbo\"},{\"IMDB Rating\":5.4,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Light It Up\"},{\"IMDB Rating\":6.5,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"Living Out Loud\"},{\"IMDB Rating\":4.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"The Lizzie McGuire Movie\"},{\"IMDB Rating\":6.3,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Letters to Juliet\"},{\"IMDB Rating\":6.1,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Lucky Break\"},{\"IMDB Rating\":7.8,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"The Last King of Scotland\"},{\"IMDB Rating\":6.7,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Lolita\"},{\"IMDB Rating\":6.8,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Love Lisa\"},{\"IMDB Rating\":8,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Little Miss Sunshine\"},{\"IMDB Rating\":6.7,\"Production Budget\":10500000,\"Rotten Tomatoes Rating\":44,\"Title\":\"In the Land of Women\"},{\"IMDB Rating\":6.2,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Lions for Lambs\"},{\"IMDB Rating\":7.7,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"London\"},{\"IMDB Rating\":6.1,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"How to Lose a Guy in 10 Days\"},{\"IMDB Rating\":5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Loser\"},{\"IMDB Rating\":null,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"The Losers\"},{\"IMDB Rating\":6.6,\"Production Budget\":9600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Lost City\"},{\"IMDB Rating\":4.8,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Lost In Space\"},{\"IMDB Rating\":4.8,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Lost and Found\"},{\"IMDB Rating\":null,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"Lottery Ticket\"},{\"IMDB Rating\":6.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Love and Basketball\"},{\"IMDB Rating\":6.7,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Love Jones\"},{\"IMDB Rating\":5.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"The Love Letter\"},{\"IMDB Rating\":6.8,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Lovely and Amazing\"},{\"IMDB Rating\":8.7,\"Production Budget\":94000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Lord of the Rings: The Two Towers\"},{\"IMDB Rating\":8.8,\"Production Budget\":94000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Lord of the Rings: The Return of the King\"},{\"IMDB Rating\":8.8,\"Production Budget\":109000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Lord of the Rings: The Fellowship of the Ring\"},{\"IMDB Rating\":7.7,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Lord of War\"},{\"IMDB Rating\":5.7,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"The Last Shot\"},{\"IMDB Rating\":6.7,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Lonesome Jim\"},{\"IMDB Rating\":5.4,\"Production Budget\":67000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"The Last Legion\"},{\"IMDB Rating\":7.8,\"Production Budget\":120000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"The Last Samurai\"},{\"IMDB Rating\":5.7,\"Production Budget\":2200000,\"Rotten Tomatoes Rating\":19,\"Title\":\"The Last Sin Eater\"},{\"IMDB Rating\":3.9,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"The Last Song\"},{\"IMDB Rating\":5.3,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Love Stinks\"},{\"IMDB Rating\":7.9,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Lost in Translation\"},{\"IMDB Rating\":7,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Last Orders\"},{\"IMDB Rating\":4.5,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Lost Souls\"},{\"IMDB Rating\":7,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Last Station\"},{\"IMDB Rating\":6,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Lost World: Jurassic Park\"},{\"IMDB Rating\":5.1,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"License to Wed\"},{\"IMDB Rating\":6,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"Looney Tunes: Back in Action\"},{\"IMDB Rating\":4.4,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Letters to God\"},{\"IMDB Rating\":6.4,\"Production Budget\":140000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Lethal Weapon 4\"},{\"IMDB Rating\":5.7,\"Production Budget\":64000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Little Man\"},{\"IMDB Rating\":7.1,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"The Lucky Ones\"},{\"IMDB Rating\":5.9,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Lucky You\"},{\"IMDB Rating\":4.3,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Luminarias\"},{\"IMDB Rating\":7.6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Se jie\"},{\"IMDB Rating\":6.8,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Luther\"},{\"IMDB Rating\":7.9,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Love Actually\"},{\"IMDB Rating\":5.3,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"The Little Vampire\"},{\"IMDB Rating\":6.6,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"The Lovely Bones\"},{\"IMDB Rating\":4.7,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Herbie: Fully Loaded\"},{\"IMDB Rating\":6.2,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"For Love of the Game\"},{\"IMDB Rating\":6.9,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Leaves of Grass\"},{\"IMDB Rating\":5.5,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Love Happens\"},{\"IMDB Rating\":5.6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Just Visiting\"},{\"IMDB Rating\":8.5,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Das Leben der Anderen\"},{\"IMDB Rating\":5.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Love Ranch\"},{\"IMDB Rating\":7.6,\"Production Budget\":15500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"La MÙme\"},{\"IMDB Rating\":null,\"Production Budget\":180000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"The Chronicles of Narnia: The Lion, the Witch and the Wardrobe\"},{\"IMDB Rating\":6.2,\"Production Budget\":82000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"The Longest Yard\"},{\"IMDB Rating\":6.1,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Mad City\"},{\"IMDB Rating\":6.3,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Made\"},{\"IMDB Rating\":6.8,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Madagascar: Escape 2 Africa\"},{\"IMDB Rating\":6.6,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Madagascar\"},{\"IMDB Rating\":7.4,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Mad Hot Ballroom\"},{\"IMDB Rating\":6.4,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Madison\"},{\"IMDB Rating\":5,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Jane Austen's Mafia\"},{\"IMDB Rating\":5.3,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Paul Blart: Mall Cop\"},{\"IMDB Rating\":5.7,\"Production Budget\":36000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"A Man Apart\"},{\"IMDB Rating\":7.7,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Man on Fire\"},{\"IMDB Rating\":4.2,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Man of the House\"},{\"IMDB Rating\":7.4,\"Production Budget\":52000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Man on the Moon\"},{\"IMDB Rating\":6.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"The Man Who Knew Too Little\"},{\"IMDB Rating\":2.4,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"Marci X\"},{\"IMDB Rating\":6.4,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Married Life\"},{\"IMDB Rating\":4.5,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"The Marine\"},{\"IMDB Rating\":2,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":6,\"Title\":\"Son of the Mask\"},{\"IMDB Rating\":6.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"The Matador\"},{\"IMDB Rating\":8.7,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"The Matrix\"},{\"IMDB Rating\":5.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Max Keeble's Big Move\"},{\"IMDB Rating\":5.8,\"Production Budget\":1750000,\"Rotten Tomatoes Rating\":null,\"Title\":\"May\"},{\"IMDB Rating\":7.8,\"Production Budget\":350000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Murderball\"},{\"IMDB Rating\":7.4,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Vicky Cristina Barcelona\"},{\"IMDB Rating\":6.6,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"My Big Fat Greek Wedding\"},{\"IMDB Rating\":5.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"My Best Friend's Girl\"},{\"IMDB Rating\":4.5,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"Monkeybone\"},{\"IMDB Rating\":3.1,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Meet the Browns\"},{\"IMDB Rating\":5.7,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"My Bloody Valentine\"},{\"IMDB Rating\":5.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Wu ji\"},{\"IMDB Rating\":3.9,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":3,\"Title\":\"McHale's Navy\"},{\"IMDB Rating\":6.7,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"The Manchurian Candidate\"},{\"IMDB Rating\":5.7,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Mickey Blue Eyes\"},{\"IMDB Rating\":7.5,\"Production Budget\":21500000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Michael Clayton\"},{\"IMDB Rating\":7.5,\"Production Budget\":135000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Master and Commander: The Far Side of the World\"},{\"IMDB Rating\":6.1,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Nanny McPhee and the Big Bang\"},{\"IMDB Rating\":6.7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"Nanny McPhee\"},{\"IMDB Rating\":7.3,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mean Creek\"},{\"IMDB Rating\":4.7,\"Production Budget\":41000000,\"Rotten Tomatoes Rating\":18,\"Title\":\"The Medallion\"},{\"IMDB Rating\":4.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Meet Dave\"},{\"IMDB Rating\":8.2,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Million Dollar Baby\"},{\"IMDB Rating\":3.1,\"Production Budget\":17500000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Madea Goes To Jail\"},{\"IMDB Rating\":5.5,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Made of Honor\"},{\"IMDB Rating\":7,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Mean Girls\"},{\"IMDB Rating\":6.3,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mean Machine\"},{\"IMDB Rating\":3.4,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":4,\"Title\":\"Meet the Deedles\"},{\"IMDB Rating\":6.9,\"Production Budget\":51000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Me, Myself & Irene\"},{\"IMDB Rating\":7.1,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"Memoirs of a Geisha\"},{\"IMDB Rating\":7,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Men in Black\"},{\"IMDB Rating\":6.8,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"Men of Honor\"},{\"IMDB Rating\":8.7,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Memento\"},{\"IMDB Rating\":5.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Mercury Rising\"},{\"IMDB Rating\":4.9,\"Production Budget\":600000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Mercy Streets\"},{\"IMDB Rating\":7.8,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Joyeux NoÎl\"},{\"IMDB Rating\":5.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"Message in a Bottle\"},{\"IMDB Rating\":6.9,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Meet Joe Black\"},{\"IMDB Rating\":7.6,\"Production Budget\":3200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Maria Full of Grace\"},{\"IMDB Rating\":null,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"Megiddo: Omega Code 2\"},{\"IMDB Rating\":8,\"Production Budget\":37000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Magnolia\"},{\"IMDB Rating\":6.4,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"The Men Who Stare at Goats\"},{\"IMDB Rating\":6.6,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Marilyn Hotchkiss' Ballroom Dancing and Charm School\"},{\"IMDB Rating\":7.4,\"Production Budget\":140000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Men in Black 2\"},{\"IMDB Rating\":6.8,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"The House of Mirth\"},{\"IMDB Rating\":4.7,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Miss Congeniality 2: Armed and Fabulous\"},{\"IMDB Rating\":6.9,\"Production Budget\":120000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mission: Impossible 2\"},{\"IMDB Rating\":6.9,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Mission: Impossible III\"},{\"IMDB Rating\":6.1,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"Miss Congeniality\"},{\"IMDB Rating\":7.4,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":59,\"Title\":\"The Missing\"},{\"IMDB Rating\":5.4,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"Mighty Joe Young\"},{\"IMDB Rating\":6.8,\"Production Budget\":72000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"The Majestic\"},{\"IMDB Rating\":4.9,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Martin Lawrence Live: RunTelDat\"},{\"IMDB Rating\":4.8,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Malibu's Most Wanted\"},{\"IMDB Rating\":5.9,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Must Love Dogs\"},{\"IMDB Rating\":7.6,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":64,\"Title\":\"My Life Without Me\"},{\"IMDB Rating\":5.1,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Mission to Mars\"},{\"IMDB Rating\":7,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"MirrorMask\"},{\"IMDB Rating\":6.7,\"Production Budget\":28700000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Mumford\"},{\"IMDB Rating\":6.2,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Mindhunters\"},{\"IMDB Rating\":5.7,\"Production Budget\":57000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Captain Corelli's Mandolin\"},{\"IMDB Rating\":7.4,\"Production Budget\":14200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Manderlay\"},{\"IMDB Rating\":6.5,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Midnight in the Garden of Good and Evil\"},{\"IMDB Rating\":7.2,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"The Man in the Iron Mask\"},{\"IMDB Rating\":5.1,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"Monster-in-Law\"},{\"IMDB Rating\":6.7,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Moonlight Mile\"},{\"IMDB Rating\":6.1,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Mona Lisa Smile\"},{\"IMDB Rating\":7.2,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Monster's Ball\"},{\"IMDB Rating\":7.2,\"Production Budget\":21600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"MoliËre\"},{\"IMDB Rating\":5.6,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Molly\"},{\"IMDB Rating\":6.8,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"Monster House\"},{\"IMDB Rating\":8.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mononoke-hime\"},{\"IMDB Rating\":7.2,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Monsoon Wedding\"},{\"IMDB Rating\":7.4,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Monster\"},{\"IMDB Rating\":7.4,\"Production Budget\":115000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"Monsters, Inc.\"},{\"IMDB Rating\":5.7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Money Talks\"},{\"IMDB Rating\":8,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Moon\"},{\"IMDB Rating\":5.2,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Welcome to Mooseport\"},{\"IMDB Rating\":6.4,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Morvern Callar\"},{\"IMDB Rating\":6.5,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"The Mothman Prophecies\"},{\"IMDB Rating\":7.3,\"Production Budget\":53000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Moulin Rouge\"},{\"IMDB Rating\":7.1,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Me and Orson Welles\"},{\"IMDB Rating\":6.4,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Meet the Fockers\"},{\"IMDB Rating\":7,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Meet the Parents\"},{\"IMDB Rating\":5.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Mr. 3000\"},{\"IMDB Rating\":6.1,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Miracle\"},{\"IMDB Rating\":7.7,\"Production Budget\":102000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Minority Report\"},{\"IMDB Rating\":5.2,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mr. Nice Guy\"},{\"IMDB Rating\":7.1,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"Mrs. Henderson Presents\"},{\"IMDB Rating\":3.2,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Mortal Kombat: Annihilation\"},{\"IMDB Rating\":6.6,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Marvin's Room\"},{\"IMDB Rating\":5.9,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"Miracle at St. Anna\"},{\"IMDB Rating\":6.1,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mouse Hunt\"},{\"IMDB Rating\":5.3,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Masked and Anonymous\"},{\"IMDB Rating\":7.1,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"Miss Potter\"},{\"IMDB Rating\":6.1,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Missing Person\"},{\"IMDB Rating\":2.4,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":2,\"Title\":\"Meet the Spartans\"},{\"IMDB Rating\":5.5,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Mystery, Alaska\"},{\"IMDB Rating\":7.8,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Match Point\"},{\"IMDB Rating\":7.2,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mother and Child\"},{\"IMDB Rating\":6.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"A Mighty Heart\"},{\"IMDB Rating\":7.1,\"Production Budget\":127000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"The Matrix Reloaded\"},{\"IMDB Rating\":6.5,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"The Matrix Revolutions\"},{\"IMDB Rating\":7.1,\"Production Budget\":800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Mudge Boy\"},{\"IMDB Rating\":7.2,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Mulan\"},{\"IMDB Rating\":7.9,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Mulholland Drive\"},{\"IMDB Rating\":6.8,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"The Mummy\"},{\"IMDB Rating\":6.2,\"Production Budget\":98000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"The Mummy Returns\"},{\"IMDB Rating\":5.1,\"Production Budget\":175000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"The Mummy: Tomb of the Dragon Emperor\"},{\"IMDB Rating\":7.8,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Munich\"},{\"IMDB Rating\":6.1,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Muppets From Space\"},{\"IMDB Rating\":5.9,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"Murder by Numbers\"},{\"IMDB Rating\":5.5,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"The Muse\"},{\"IMDB Rating\":6.4,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Night at the Museum\"},{\"IMDB Rating\":4.4,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"The Musketeer\"},{\"IMDB Rating\":6.6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Music and Lyrics\"},{\"IMDB Rating\":7.1,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Merchant of Venice\"},{\"IMDB Rating\":6,\"Production Budget\":135000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Miami Vice\"},{\"IMDB Rating\":6.8,\"Production Budget\":175000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"Monsters vs. Aliens\"},{\"IMDB Rating\":7.2,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"A Mighty Wind\"},{\"IMDB Rating\":5.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"The Mexican\"},{\"IMDB Rating\":6.2,\"Production Budget\":46000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"My Best Friend's Wedding\"},{\"IMDB Rating\":null,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Dude, Where's My Car?\"},{\"IMDB Rating\":6.9,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"My Dog Skip\"},{\"IMDB Rating\":6.5,\"Production Budget\":1100,\"Rotten Tomatoes Rating\":null,\"Title\":\"My Date With Drew\"},{\"IMDB Rating\":7.4,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Me and You and Everyone We Know\"},{\"IMDB Rating\":4.5,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"My Favorite Martian\"},{\"IMDB Rating\":6.3,\"Production Budget\":21500000,\"Rotten Tomatoes Rating\":50,\"Title\":\"My Fellow Americans\"},{\"IMDB Rating\":7.4,\"Production Budget\":27500000,\"Rotten Tomatoes Rating\":48,\"Title\":\"My Sister's Keeper\"},{\"IMDB Rating\":7,\"Production Budget\":1700000,\"Rotten Tomatoes Rating\":null,\"Title\":\"My Summer of Love\"},{\"IMDB Rating\":8,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Mystic River\"},{\"IMDB Rating\":5.7,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Nacho Libre\"},{\"IMDB Rating\":7.3,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Narc\"},{\"IMDB Rating\":6.9,\"Production Budget\":225000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"The Chronicles of Narnia: Prince Caspian\"},{\"IMDB Rating\":6.9,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"National Treasure\"},{\"IMDB Rating\":6.6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"The Nativity Story\"},{\"IMDB Rating\":6.2,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Never Back Down\"},{\"IMDB Rating\":5.7,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Into the Blue\"},{\"IMDB Rating\":8.3,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"No Country for Old Men\"},{\"IMDB Rating\":8.1,\"Production Budget\":92000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"The Incredibles\"},{\"IMDB Rating\":7.2,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"The Negotiator\"},{\"IMDB Rating\":5.3,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"A Nightmare on Elm Street\"},{\"IMDB Rating\":5.2,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Not Easily Broken\"},{\"IMDB Rating\":5.4,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"The New Guy\"},{\"IMDB Rating\":5.7,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"The Newton Boys\"},{\"IMDB Rating\":4.4,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"The Next Best Thing\"},{\"IMDB Rating\":6.3,\"Production Budget\":1900000,\"Rotten Tomatoes Rating\":57,\"Title\":\"Northfork\"},{\"IMDB Rating\":6.8,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"In Good Company\"},{\"IMDB Rating\":6.9,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Notting Hill\"},{\"IMDB Rating\":5,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Little Nicky\"},{\"IMDB Rating\":7.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Nicholas Nickleby\"},{\"IMDB Rating\":6,\"Production Budget\":37000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Nim's Island\"},{\"IMDB Rating\":6.3,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Ninja Assassin\"},{\"IMDB Rating\":6.6,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Ninth Gate\"},{\"IMDB Rating\":7.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Never Let Me Go\"},{\"IMDB Rating\":4.9,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Lucky Numbers\"},{\"IMDB Rating\":5.9,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Night at the Museum: Battle of the Smithsonian\"},{\"IMDB Rating\":6.8,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"Nick and Norah's Infinite Playlist\"},{\"IMDB Rating\":6.3,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Notorious\"},{\"IMDB Rating\":8.3,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"No End In Sight\"},{\"IMDB Rating\":5.5,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Nomad\"},{\"IMDB Rating\":8,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"No Man's Land\"},{\"IMDB Rating\":6.3,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"No Reservations\"},{\"IMDB Rating\":8,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"The Notebook\"},{\"IMDB Rating\":5.5,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"November\"},{\"IMDB Rating\":5.8,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Novocaine\"},{\"IMDB Rating\":6.9,\"Production Budget\":400000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Napoleon Dynamite\"},{\"IMDB Rating\":7.2,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"North Country\"},{\"IMDB Rating\":7.5,\"Production Budget\":8500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Namesake\"},{\"IMDB Rating\":6.9,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Inside Deep Throat\"},{\"IMDB Rating\":6.4,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Intolerable Cruelty\"},{\"IMDB Rating\":6.5,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"The Interpreter\"},{\"IMDB Rating\":5.9,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"The Night Listener\"},{\"IMDB Rating\":null,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":59,\"Title\":\"The International\"},{\"IMDB Rating\":6.2,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"The Number 23\"},{\"IMDB Rating\":6.4,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Nurse Betty\"},{\"IMDB Rating\":5.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Jimmy Neutron: Boy Genius\"},{\"IMDB Rating\":4.3,\"Production Budget\":84000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Nutty Professor II: The Klumps\"},{\"IMDB Rating\":5.8,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Never Again\"},{\"IMDB Rating\":7.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Finding Neverland\"},{\"IMDB Rating\":8.2,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Into the Wild\"},{\"IMDB Rating\":6.9,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"The New World\"},{\"IMDB Rating\":6.5,\"Production Budget\":4200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Nochnoy dozor\"},{\"IMDB Rating\":null,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"New York Minute\"},{\"IMDB Rating\":5.9,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"The Object of my Affection\"},{\"IMDB Rating\":6.1,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Orange County\"},{\"IMDB Rating\":7.6,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Ocean's Eleven\"},{\"IMDB Rating\":6,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Ocean's Twelve\"},{\"IMDB Rating\":6.9,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Ocean's Thirteen\"},{\"IMDB Rating\":7.6,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Oceans\"},{\"IMDB Rating\":7.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Office Space\"},{\"IMDB Rating\":7,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"White Oleander\"},{\"IMDB Rating\":5.4,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"The Omen\"},{\"IMDB Rating\":6.6,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"Any Given Sunday\"},{\"IMDB Rating\":8,\"Production Budget\":150000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Once\"},{\"IMDB Rating\":7.1,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Once in a Lifetime: the Extraordinary Story of the New York Cosmos\"},{\"IMDB Rating\":7,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"One Hour Photo\"},{\"IMDB Rating\":6.9,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"One True Thing\"},{\"IMDB Rating\":4.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Ong-Bak 2\"},{\"IMDB Rating\":3.4,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":18,\"Title\":\"On the Line\"},{\"IMDB Rating\":6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"One Night with the King\"},{\"IMDB Rating\":6.5,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Opal Dreams\"},{\"IMDB Rating\":6,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Open Season\"},{\"IMDB Rating\":5.9,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Open Water\"},{\"IMDB Rating\":7.5,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Open Range\"},{\"IMDB Rating\":4.9,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Order\"},{\"IMDB Rating\":6,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Orgazmo\"},{\"IMDB Rating\":5.6,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Original Sin\"},{\"IMDB Rating\":7.4,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Osama\"},{\"IMDB Rating\":6.7,\"Production Budget\":12500000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Oscar and Lucinda\"},{\"IMDB Rating\":7,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Old School\"},{\"IMDB Rating\":6,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Osmosis Jones\"},{\"IMDB Rating\":5.6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"American Outlaws\"},{\"IMDB Rating\":7,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":59,\"Title\":\"Oliver Twist\"},{\"IMDB Rating\":5.8,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Out Cold\"},{\"IMDB Rating\":6.4,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Outlander\"},{\"IMDB Rating\":7.1,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Out of Sight\"},{\"IMDB Rating\":4.9,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Out of Time\"},{\"IMDB Rating\":4.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"The Out-of-Towners\"},{\"IMDB Rating\":7,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Owning Mahowny\"},{\"IMDB Rating\":5.3,\"Production Budget\":56000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"The Pacifier\"},{\"IMDB Rating\":8.4,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"El Laberinto del Fauno\"},{\"IMDB Rating\":7.1,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"The Passion of the Christ\"},{\"IMDB Rating\":6.3,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Patch Adams\"},{\"IMDB Rating\":5.8,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"Payback\"},{\"IMDB Rating\":6.1,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Paycheck\"},{\"IMDB Rating\":5.4,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Max Payne\"},{\"IMDB Rating\":5.3,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Princess Diaries 2: Royal Engagement\"},{\"IMDB Rating\":5.9,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"The Princess Diaries\"},{\"IMDB Rating\":5.8,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"The Peacemaker\"},{\"IMDB Rating\":7.1,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Peter Pan\"},{\"IMDB Rating\":5.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"People I Know\"},{\"IMDB Rating\":6.2,\"Production Budget\":6600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Perrier's Bounty\"},{\"IMDB Rating\":6.5,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"A Perfect Getaway\"},{\"IMDB Rating\":2.2,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Phat Girlz\"},{\"IMDB Rating\":6.8,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Poolhall Junkies\"},{\"IMDB Rating\":7.2,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"The Phantom of the Opera\"},{\"IMDB Rating\":7.2,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Phone Booth\"},{\"IMDB Rating\":8.5,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Pianist\"},{\"IMDB Rating\":5.1,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"The Pink Panther\"},{\"IMDB Rating\":8,\"Production Budget\":125000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Pirates of the Caribbean: The Curse of the Black Pearl\"},{\"IMDB Rating\":7.3,\"Production Budget\":225000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Pirates of the Caribbean: Dead Man's Chest\"},{\"IMDB Rating\":7,\"Production Budget\":300000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Pirates of the Caribbean: At World's End\"},{\"IMDB Rating\":6.4,\"Production Budget\":120000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"The Chronicles of Riddick\"},{\"IMDB Rating\":7,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Pitch Black\"},{\"IMDB Rating\":5.1,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Play it to the Bone\"},{\"IMDB Rating\":5.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Screwed\"},{\"IMDB Rating\":5.8,\"Production Budget\":95000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Percy Jackson & the Olympians: The Lightning Thief\"},{\"IMDB Rating\":6.6,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Paris, je t'aime\"},{\"IMDB Rating\":5.3,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Princess Kaiulani\"},{\"IMDB Rating\":5.3,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Lake Placid\"},{\"IMDB Rating\":4.4,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"The Back-up Plan\"},{\"IMDB Rating\":6.9,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"The Pledge\"},{\"IMDB Rating\":6.1,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Proof of Life\"},{\"IMDB Rating\":7.1,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Pollock\"},{\"IMDB Rating\":5.5,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Planet of the Apes\"},{\"IMDB Rating\":7.4,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Please Give\"},{\"IMDB Rating\":6.1,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Planet 51\"},{\"IMDB Rating\":3.7,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":6,\"Title\":\"The Adventures of Pluto Nash\"},{\"IMDB Rating\":4.8,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"The Players Club\"},{\"IMDB Rating\":6.7,\"Production Budget\":15000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Paranormal Activity\"},{\"IMDB Rating\":3.5,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Pinocchio\"},{\"IMDB Rating\":6.5,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Pandaemonium\"},{\"IMDB Rating\":6.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Pandorum\"},{\"IMDB Rating\":6.4,\"Production Budget\":33000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"The Punisher\"},{\"IMDB Rating\":3.5,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Pokemon 3: The Movie\"},{\"IMDB Rating\":6.7,\"Production Budget\":170000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"The Polar Express\"},{\"IMDB Rating\":5.8,\"Production Budget\":42000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Along Came Polly\"},{\"IMDB Rating\":7.8,\"Production Budget\":34000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Gake no ue no Ponyo\"},{\"IMDB Rating\":4.5,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Pootie Tang\"},{\"IMDB Rating\":5.6,\"Production Budget\":160000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Poseidon\"},{\"IMDB Rating\":6.4,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Possession\"},{\"IMDB Rating\":null,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Peter Pan: Return to Neverland\"},{\"IMDB Rating\":5.5,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Practical Magic\"},{\"IMDB Rating\":6.8,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"The Devil Wears Prada\"},{\"IMDB Rating\":7.5,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Boat That Rocked\"},{\"IMDB Rating\":5.7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":18,\"Title\":\"Paparazzi\"},{\"IMDB Rating\":6.7,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Primary Colors\"},{\"IMDB Rating\":7.5,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Precious (Based on the Novel Push by Sapphire)\"},{\"IMDB Rating\":6.7,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"Pride and Glory\"},{\"IMDB Rating\":5.5,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Pride and Prejudice\"},{\"IMDB Rating\":6.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Predators\"},{\"IMDB Rating\":6.2,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Prefontaine\"},{\"IMDB Rating\":7.5,\"Production Budget\":63700000,\"Rotten Tomatoes Rating\":58,\"Title\":\"Perfume: The Story of a Murderer\"},{\"IMDB Rating\":5.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Prince & Me\"},{\"IMDB Rating\":5.1,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":5,\"Title\":\"The Perfect Man\"},{\"IMDB Rating\":7.8,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"The Pursuit of Happyness\"},{\"IMDB Rating\":6.9,\"Production Budget\":7000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Primer\"},{\"IMDB Rating\":5.4,\"Production Budget\":151500000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Pearl Harbor\"},{\"IMDB Rating\":null,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Premonition\"},{\"IMDB Rating\":6.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"The Prince of Egypt\"},{\"IMDB Rating\":5.1,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Prom Night\"},{\"IMDB Rating\":6.9,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Proof\"},{\"IMDB Rating\":6.9,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Panic Room\"},{\"IMDB Rating\":5.4,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"The Proposal\"},{\"IMDB Rating\":8.4,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"The Prestige\"},{\"IMDB Rating\":5.5,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"The Postman\"},{\"IMDB Rating\":6,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Psycho Beach Party\"},{\"IMDB Rating\":4.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Psycho\"},{\"IMDB Rating\":6.9,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"The Patriot\"},{\"IMDB Rating\":7.1,\"Production Budget\":102500000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Public Enemies\"},{\"IMDB Rating\":5.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Powerpuff Girls\"},{\"IMDB Rating\":5,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":11,\"Title\":\"Pulse\"},{\"IMDB Rating\":7.4,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Punch-Drunk Love\"},{\"IMDB Rating\":6.1,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Punisher: War Zone\"},{\"IMDB Rating\":6,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Push\"},{\"IMDB Rating\":5.9,\"Production Budget\":33000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"Pushing Tin\"},{\"IMDB Rating\":7.6,\"Production Budget\":19400000,\"Rotten Tomatoes Rating\":74,\"Title\":\"The Painted Veil\"},{\"IMDB Rating\":6.8,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Pay it Forward\"},{\"IMDB Rating\":4.7,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Queen of the Damned\"},{\"IMDB Rating\":7.2,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"The Quiet American\"},{\"IMDB Rating\":3.5,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"All the Queen's Men\"},{\"IMDB Rating\":6.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"Quarantine\"},{\"IMDB Rating\":7.6,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"The Queen\"},{\"IMDB Rating\":5,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Quest for Camelot\"},{\"IMDB Rating\":6.5,\"Production Budget\":900000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Quiet\"},{\"IMDB Rating\":7.1,\"Production Budget\":400000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Quinceanera\"},{\"IMDB Rating\":7.6,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Rabbit-Proof Fence\"},{\"IMDB Rating\":6.9,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Radio\"},{\"IMDB Rating\":6.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"The Rainmaker\"},{\"IMDB Rating\":7.3,\"Production Budget\":47500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Rambo\"},{\"IMDB Rating\":4.8,\"Production Budget\":64000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Random Hearts\"},{\"IMDB Rating\":5,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Rugrats Go Wild\"},{\"IMDB Rating\":8.1,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"Ratatouille\"},{\"IMDB Rating\":null,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Ray\"},{\"IMDB Rating\":2.7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":4,\"Title\":\"BloodRayne\"},{\"IMDB Rating\":2.8,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":3,\"Title\":\"Rollerball\"},{\"IMDB Rating\":6.9,\"Production Budget\":210000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Robin Hood\"},{\"IMDB Rating\":6.4,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Robots\"},{\"IMDB Rating\":7.6,\"Production Budget\":5250000,\"Rotten Tomatoes Rating\":null,\"Title\":\"A Room for Romeo Brass\"},{\"IMDB Rating\":5.2,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"Runaway Bride\"},{\"IMDB Rating\":5.2,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Racing Stripes\"},{\"IMDB Rating\":7.4,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Rocky Balboa\"},{\"IMDB Rating\":6.4,\"Production Budget\":95000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"The Road to El Dorado\"},{\"IMDB Rating\":7.7,\"Production Budget\":2600000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Riding Giants\"},{\"IMDB Rating\":7.3,\"Production Budget\":78000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Red Dragon\"},{\"IMDB Rating\":7.7,\"Production Budget\":33000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"The Reader\"},{\"IMDB Rating\":5.6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"The Reaping\"},{\"IMDB Rating\":4.7,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Rebound\"},{\"IMDB Rating\":6.2,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Recess: School's Out\"},{\"IMDB Rating\":6.1,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Redacted\"},{\"IMDB Rating\":6.5,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Red-Eye\"},{\"IMDB Rating\":7.7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Reign Over Me\"},{\"IMDB Rating\":5.4,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"The Relic\"},{\"IMDB Rating\":7.8,\"Production Budget\":2500000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Religulous\"},{\"IMDB Rating\":7,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Remember Me\"},{\"IMDB Rating\":7,\"Production Budget\":6700000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Remember Me, My Love\"},{\"IMDB Rating\":6.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Rent\"},{\"IMDB Rating\":6.2,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"The Replacements\"},{\"IMDB Rating\":5.9,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"The Replacement Killers\"},{\"IMDB Rating\":5.8,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Resident Evil: Apocalypse\"},{\"IMDB Rating\":6.2,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Resident Evil: Extinction\"},{\"IMDB Rating\":6.4,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"Resident Evil\"},{\"IMDB Rating\":6.6,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Return to Me\"},{\"IMDB Rating\":7.6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Revolutionary Road\"},{\"IMDB Rating\":6.6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Be Kind Rewind\"},{\"IMDB Rating\":5.9,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Reign of Fire\"},{\"IMDB Rating\":5.5,\"Production Budget\":36000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Reindeer Games\"},{\"IMDB Rating\":6.9,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"Rachel Getting Married\"},{\"IMDB Rating\":5.4,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"The Rugrats Movie\"},{\"IMDB Rating\":6.2,\"Production Budget\":47000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Riding in Cars with Boys\"},{\"IMDB Rating\":6.4,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Ride With the Devil\"},{\"IMDB Rating\":5.1,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"The Ring Two\"},{\"IMDB Rating\":6.8,\"Production Budget\":700000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Rize\"},{\"IMDB Rating\":4.1,\"Production Budget\":76000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"The Adventures of Rocky & Bullwinkle\"},{\"IMDB Rating\":7.1,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"All the Real Girls\"},{\"IMDB Rating\":7,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Real Women Have Curves\"},{\"IMDB Rating\":6.2,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Romance and Cigarettes\"},{\"IMDB Rating\":5.8,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Reno 911!: Miami\"},{\"IMDB Rating\":7.3,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Rounders\"},{\"IMDB Rating\":6.9,\"Production Budget\":27500000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Rendition\"},{\"IMDB Rating\":6.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"The Rocker\"},{\"IMDB Rating\":5.8,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"Rock Star\"},{\"IMDB Rating\":5.5,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"The Rookie\"},{\"IMDB Rating\":5,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Roll Bounce\"},{\"IMDB Rating\":5.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Romeo Must Die\"},{\"IMDB Rating\":7.2,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Ronin\"},{\"IMDB Rating\":6.8,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Ballad of Jack and Rose\"},{\"IMDB Rating\":5.3,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Red Planet\"},{\"IMDB Rating\":8.5,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Requiem for a Dream\"},{\"IMDB Rating\":6.4,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Rat Race\"},{\"IMDB Rating\":7.5,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Rescue Dawn\"},{\"IMDB Rating\":2.3,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"The Real Cancun\"},{\"IMDB Rating\":6.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Restless\"},{\"IMDB Rating\":7.5,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"Remember the Titans\"},{\"IMDB Rating\":6,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"Righteous Kill\"},{\"IMDB Rating\":6.4,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":59,\"Title\":\"Road Trip\"},{\"IMDB Rating\":6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"The Ruins\"},{\"IMDB Rating\":6.2,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Rules of Engagement\"},{\"IMDB Rating\":6.6,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Rundown\"},{\"IMDB Rating\":7.5,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Running Scared\"},{\"IMDB Rating\":6,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Running With Scissors\"},{\"IMDB Rating\":6.4,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"Rush Hour 2\"},{\"IMDB Rating\":6,\"Production Budget\":180000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Rush Hour 3\"},{\"IMDB Rating\":6.8,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Rush Hour\"},{\"IMDB Rating\":7.8,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Rushmore\"},{\"IMDB Rating\":6.9,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Ravenous\"},{\"IMDB Rating\":5.2,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"Raise Your Voice\"},{\"IMDB Rating\":8.3,\"Production Budget\":17500000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Hotel Rwanda\"},{\"IMDB Rating\":5.9,\"Production Budget\":145000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Sahara\"},{\"IMDB Rating\":5.9,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"The Saint\"},{\"IMDB Rating\":3.5,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":12,\"Title\":\"The Salon\"},{\"IMDB Rating\":7.4,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"I Am Sam\"},{\"IMDB Rating\":7.1,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"The Salton Sea\"},{\"IMDB Rating\":3.9,\"Production Budget\":95000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Sex and the City 2\"},{\"IMDB Rating\":7,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Saved!\"},{\"IMDB Rating\":5.6,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Saving Silverman\"},{\"IMDB Rating\":7.7,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Saw\"},{\"IMDB Rating\":6.8,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"Saw II\"},{\"IMDB Rating\":6.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Saw III\"},{\"IMDB Rating\":6,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Saw IV\"},{\"IMDB Rating\":5.7,\"Production Budget\":10800000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Saw V\"},{\"IMDB Rating\":6.2,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Saw VI\"},{\"IMDB Rating\":4.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Say It Isn't So\"},{\"IMDB Rating\":5.7,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Say Uncle\"},{\"IMDB Rating\":3.6,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"The Adventures of Sharkboy and Lavagirl in 3-D\"},{\"IMDB Rating\":7.4,\"Production Budget\":86000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Seabiscuit\"},{\"IMDB Rating\":7.2,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"A Scanner Darkly\"},{\"IMDB Rating\":4.7,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Scary Movie 2\"},{\"IMDB Rating\":5.4,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Scary Movie 3\"},{\"IMDB Rating\":5,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Scary Movie 4\"},{\"IMDB Rating\":4.8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Scooby-Doo 2: Monsters Unleashed\"},{\"IMDB Rating\":4.7,\"Production Budget\":84000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Scooby-Doo\"},{\"IMDB Rating\":7.3,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"About Schmidt\"},{\"IMDB Rating\":7.2,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The School of Rock\"},{\"IMDB Rating\":6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"School for Scoundrels\"},{\"IMDB Rating\":6.8,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Scoop\"},{\"IMDB Rating\":6.8,\"Production Budget\":68000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"The Score\"},{\"IMDB Rating\":2.9,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Scream\"},{\"IMDB Rating\":5.9,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Scream 2\"},{\"IMDB Rating\":5.3,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Scream 3\"},{\"IMDB Rating\":5.3,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"The Scorpion King\"},{\"IMDB Rating\":7.9,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Stardust\"},{\"IMDB Rating\":7.2,\"Production Budget\":13300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mar adentro\"},{\"IMDB Rating\":6.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Selena\"},{\"IMDB Rating\":6.1,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"The Sentinel\"},{\"IMDB Rating\":5.5,\"Production Budget\":10100000,\"Rotten Tomatoes Rating\":13,\"Title\":\"September Dawn\"},{\"IMDB Rating\":2.6,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"You Got Served\"},{\"IMDB Rating\":5,\"Production Budget\":29000000,\"Rotten Tomatoes Rating\":5,\"Title\":\"Serving Sara\"},{\"IMDB Rating\":6.8,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Session 9\"},{\"IMDB Rating\":6.7,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":59,\"Title\":\"Seven Years in Tibet\"},{\"IMDB Rating\":5.4,\"Production Budget\":57500000,\"Rotten Tomatoes Rating\":49,\"Title\":\"Sex and the City\"},{\"IMDB Rating\":6.3,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Swordfish\"},{\"IMDB Rating\":6.8,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Something's Gotta Give\"},{\"IMDB Rating\":5.6,\"Production Budget\":250000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Sugar Town\"},{\"IMDB Rating\":6.3,\"Production Budget\":6800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Shade\"},{\"IMDB Rating\":6.8,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Shadow of the Vampire\"},{\"IMDB Rating\":5.9,\"Production Budget\":53012938,\"Rotten Tomatoes Rating\":68,\"Title\":\"Shaft\"},{\"IMDB Rating\":4.1,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"The Shaggy Dog\"},{\"IMDB Rating\":6,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Scary Movie\"},{\"IMDB Rating\":8,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Shaun of the Dead\"},{\"IMDB Rating\":6.7,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"Shortbus\"},{\"IMDB Rating\":5.4,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"She's All That\"},{\"IMDB Rating\":6.4,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"She's the Man\"},{\"IMDB Rating\":6.7,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"Sherrybaby\"},{\"IMDB Rating\":6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Shallow Hal\"},{\"IMDB Rating\":6.5,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"Silent Hill\"},{\"IMDB Rating\":8,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Shutter Island\"},{\"IMDB Rating\":7.4,\"Production Budget\":26000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Shakespeare in Love\"},{\"IMDB Rating\":8,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"In the Shadow of the Moon\"},{\"IMDB Rating\":7.5,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Sherlock Holmes\"},{\"IMDB Rating\":6.7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"She's Out of My League\"},{\"IMDB Rating\":7.2,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Shooter\"},{\"IMDB Rating\":8,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Shrek\"},{\"IMDB Rating\":7.5,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Shrek 2\"},{\"IMDB Rating\":6.1,\"Production Budget\":160000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"Shrek the Third\"},{\"IMDB Rating\":6.7,\"Production Budget\":165000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Shrek Forever After\"},{\"IMDB Rating\":5.9,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Shark Tale\"},{\"IMDB Rating\":7.4,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Shattered Glass\"},{\"IMDB Rating\":4.7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Stealing Harvard\"},{\"IMDB Rating\":5.3,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Showtime\"},{\"IMDB Rating\":8.2,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Sicko\"},{\"IMDB Rating\":null,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"The Siege\"},{\"IMDB Rating\":6.9,\"Production Budget\":70702619,\"Rotten Tomatoes Rating\":74,\"Title\":\"Signs\"},{\"IMDB Rating\":6.7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Simon Birch\"},{\"IMDB Rating\":4.9,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"A Simple Wish\"},{\"IMDB Rating\":7.6,\"Production Budget\":72500000,\"Rotten Tomatoes Rating\":89,\"Title\":\"The Simpsons Movie\"},{\"IMDB Rating\":6.6,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Sinbad: Legend of the Seven Seas\"},{\"IMDB Rating\":8.3,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Sin City\"},{\"IMDB Rating\":5.6,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"The Singing Detective\"},{\"IMDB Rating\":8.2,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"The Sixth Sense\"},{\"IMDB Rating\":7.6,\"Production Budget\":65000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Super Size Me\"},{\"IMDB Rating\":6.5,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"The Skeleton Key\"},{\"IMDB Rating\":5.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"The Skulls\"},{\"IMDB Rating\":6.6,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"Sky High\"},{\"IMDB Rating\":4.9,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"Slackers\"},{\"IMDB Rating\":null,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Ready to Rumble\"},{\"IMDB Rating\":7.5,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Sleepy Hollow\"},{\"IMDB Rating\":7.8,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"Lucky Number Slevin\"},{\"IMDB Rating\":7,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"The Secret Life of Bees\"},{\"IMDB Rating\":6.4,\"Production Budget\":87000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Hannibal\"},{\"IMDB Rating\":5.6,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Southland Tales\"},{\"IMDB Rating\":5.9,\"Production Budget\":15500000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Slow Burn\"},{\"IMDB Rating\":4.6,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Sleepover\"},{\"IMDB Rating\":5,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":4,\"Title\":\"The Bridge of San Luis Rey\"},{\"IMDB Rating\":6.6,\"Production Budget\":15250000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Slither\"},{\"IMDB Rating\":8.3,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Slumdog Millionaire\"},{\"IMDB Rating\":6.4,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Slums of Beverly Hills\"},{\"IMDB Rating\":5.9,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Small Soldiers\"},{\"IMDB Rating\":4.7,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Mr. And Mrs. Smith\"},{\"IMDB Rating\":6.6,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Smokin' Aces\"},{\"IMDB Rating\":5.8,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"Someone Like You\"},{\"IMDB Rating\":6.2,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Death to Smoochy\"},{\"IMDB Rating\":4.8,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Simply Irresistible\"},{\"IMDB Rating\":4.6,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Summer Catch\"},{\"IMDB Rating\":7.2,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"There's Something About Mary\"},{\"IMDB Rating\":5.8,\"Production Budget\":73000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"Snake Eyes\"},{\"IMDB Rating\":6,\"Production Budget\":33000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"Snakes on a Plane\"},{\"IMDB Rating\":6.9,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Lemony Snicket's A Series of Unfortunate Events\"},{\"IMDB Rating\":7.8,\"Production Budget\":16500000,\"Rotten Tomatoes Rating\":75,\"Title\":\"House of Sand and Fog\"},{\"IMDB Rating\":4.1,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":6,\"Title\":\"A Sound of Thunder\"},{\"IMDB Rating\":5,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"See No Evil\"},{\"IMDB Rating\":6.7,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"The Shipping News\"},{\"IMDB Rating\":6.2,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"Shanghai Knights\"},{\"IMDB Rating\":6.6,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Shanghai Noon\"},{\"IMDB Rating\":4.9,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Snow Dogs\"},{\"IMDB Rating\":6.7,\"Production Budget\":36000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Snow Falling on Cedars\"},{\"IMDB Rating\":7.3,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"Sunshine\"},{\"IMDB Rating\":8.2,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Snatch\"},{\"IMDB Rating\":4.4,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Snow Day\"},{\"IMDB Rating\":5.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Sorority Boys\"},{\"IMDB Rating\":6.2,\"Production Budget\":47000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Solaris\"},{\"IMDB Rating\":6.7,\"Production Budget\":12500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Solitary Man\"},{\"IMDB Rating\":6.7,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Soloist\"},{\"IMDB Rating\":6.9,\"Production Budget\":1800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Songcatcher\"},{\"IMDB Rating\":5.7,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Sonny\"},{\"IMDB Rating\":7.5,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Standard Operating Procedure\"},{\"IMDB Rating\":6.4,\"Production Budget\":160000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"The Sorcerer's Apprentice\"},{\"IMDB Rating\":6.4,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Soul Food\"},{\"IMDB Rating\":3.7,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Soul Plane\"},{\"IMDB Rating\":null,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":80,\"Title\":\"South Park: Bigger, Longer & Uncut\"},{\"IMDB Rating\":5.6,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"Space Jam\"},{\"IMDB Rating\":6.7,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":52,\"Title\":\"Spanglish\"},{\"IMDB Rating\":4.8,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"Spawn\"},{\"IMDB Rating\":7.8,\"Production Budget\":17500000,\"Rotten Tomatoes Rating\":87,\"Title\":\"Superbad\"},{\"IMDB Rating\":4.5,\"Production Budget\":37000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"Space Chimps\"},{\"IMDB Rating\":6.3,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"Space Cowboys\"},{\"IMDB Rating\":7.8,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Spider\"},{\"IMDB Rating\":6.3,\"Production Budget\":120000000,\"Rotten Tomatoes Rating\":38,\"Title\":\"Speed Racer\"},{\"IMDB Rating\":6.8,\"Production Budget\":92500000,\"Rotten Tomatoes Rating\":79,\"Title\":\"The Spiderwick Chronicles\"},{\"IMDB Rating\":3.7,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Speedway Junky\"},{\"IMDB Rating\":3.4,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Speed II: Cruise Control\"},{\"IMDB Rating\":5.6,\"Production Budget\":73000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Sphere\"},{\"IMDB Rating\":2.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Spiceworld\"},{\"IMDB Rating\":7.7,\"Production Budget\":200000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Spider-Man 2\"},{\"IMDB Rating\":6.4,\"Production Budget\":258000000,\"Rotten Tomatoes Rating\":63,\"Title\":\"Spider-Man 3\"},{\"IMDB Rating\":7.4,\"Production Budget\":139000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Spider-Man\"},{\"IMDB Rating\":8.1,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Scott Pilgrim vs. The World\"},{\"IMDB Rating\":4.9,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"See Spot Run\"},{\"IMDB Rating\":6.6,\"Production Budget\":232000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Superman Returns\"},{\"IMDB Rating\":6.8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"Supernova\"},{\"IMDB Rating\":6.6,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Spun\"},{\"IMDB Rating\":6.9,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Spy Game\"},{\"IMDB Rating\":null,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Spy Kids 2: The Island of Lost Dreams\"},{\"IMDB Rating\":4.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Spy Kids 3-D: Game Over\"},{\"IMDB Rating\":5.7,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":93,\"Title\":\"Spy Kids\"},{\"IMDB Rating\":6.8,\"Production Budget\":1900000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Square\"},{\"IMDB Rating\":7.6,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":93,\"Title\":\"The Squid and the Whale\"},{\"IMDB Rating\":6.6,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"Serendipity\"},{\"IMDB Rating\":7.5,\"Production Budget\":5200000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Saint Ralph\"},{\"IMDB Rating\":null,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Shaolin Soccer\"},{\"IMDB Rating\":6,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Superstar\"},{\"IMDB Rating\":3.6,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":4,\"Title\":\"Soul Survivors\"},{\"IMDB Rating\":6.6,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Spirit: Stallion of the Cimarron\"},{\"IMDB Rating\":7.1,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Starship Troopers\"},{\"IMDB Rating\":7.8,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":95,\"Title\":\"The Station Agent\"},{\"IMDB Rating\":4.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Stay Alive\"},{\"IMDB Rating\":6.5,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"Small Time Crooks\"},{\"IMDB Rating\":2.7,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"Steel\"},{\"IMDB Rating\":5.1,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"How Stella Got Her Groove Back\"},{\"IMDB Rating\":5.1,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"The Stepford Wives\"},{\"IMDB Rating\":6.2,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Stepmom\"},{\"IMDB Rating\":4.3,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"Stomp the Yard\"},{\"IMDB Rating\":7.8,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"Stranger Than Fiction\"},{\"IMDB Rating\":5.9,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":31,\"Title\":\"Stick It\"},{\"IMDB Rating\":6,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Stigmata\"},{\"IMDB Rating\":7.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"A Stir of Echoes\"},{\"IMDB Rating\":7,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"Street Kings\"},{\"IMDB Rating\":5.8,\"Production Budget\":105000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Stuart Little\"},{\"IMDB Rating\":5.6,\"Production Budget\":120000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Stuart Little 2\"},{\"IMDB Rating\":4.8,\"Production Budget\":138000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Stealth\"},{\"IMDB Rating\":6,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"The Statement\"},{\"IMDB Rating\":6.4,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Stolen Summer\"},{\"IMDB Rating\":6.5,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Stop-Loss\"},{\"IMDB Rating\":6.2,\"Production Budget\":120000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"The Perfect Storm\"},{\"IMDB Rating\":5.6,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"The Story of Us\"},{\"IMDB Rating\":5.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"The Stepfather\"},{\"IMDB Rating\":7.3,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"State of Play\"},{\"IMDB Rating\":6.2,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"The Sisterhood of the Traveling Pants 2\"},{\"IMDB Rating\":6.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Step Up\"},{\"IMDB Rating\":8,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"The Straight Story\"},{\"IMDB Rating\":7.6,\"Production Budget\":46000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Star Trek: First Contact\"},{\"IMDB Rating\":6.4,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Star Trek: Insurrection\"},{\"IMDB Rating\":6.4,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Star Trek: Nemesis\"},{\"IMDB Rating\":6,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"The Strangers\"},{\"IMDB Rating\":6.8,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Super Troopers\"},{\"IMDB Rating\":5.9,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Strangers with Candy\"},{\"IMDB Rating\":5.9,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Stuck On You\"},{\"IMDB Rating\":5.6,\"Production Budget\":17500000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Step Up 2 the Streets\"},{\"IMDB Rating\":6.3,\"Production Budget\":68000000,\"Rotten Tomatoes Rating\":59,\"Title\":\"The Sum of All Fears\"},{\"IMDB Rating\":6.8,\"Production Budget\":5600000,\"Rotten Tomatoes Rating\":80,\"Title\":\"Sunshine State\"},{\"IMDB Rating\":2.9,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":6,\"Title\":\"Supercross\"},{\"IMDB Rating\":7,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":77,\"Title\":\"Surf's Up\"},{\"IMDB Rating\":6.3,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Surrogates\"},{\"IMDB Rating\":6.5,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Summer of Sam\"},{\"IMDB Rating\":5.7,\"Production Budget\":4600000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Savage Grace\"},{\"IMDB Rating\":8.5,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Saving Private Ryan\"},{\"IMDB Rating\":5.9,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"S.W.A.T.\"},{\"IMDB Rating\":7.8,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":97,\"Title\":\"Sideways\"},{\"IMDB Rating\":7.6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Shall We Dance?\"},{\"IMDB Rating\":6.5,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Secret Window\"},{\"IMDB Rating\":3.4,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":5,\"Title\":\"Swept Away\"},{\"IMDB Rating\":6.8,\"Production Budget\":7800000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Swimming Pool\"},{\"IMDB Rating\":4.6,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Swimfan\"},{\"IMDB Rating\":6,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"Sweet November\"},{\"IMDB Rating\":6.2,\"Production Budget\":16500000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Sydney White\"},{\"IMDB Rating\":6.1,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"Switchback\"},{\"IMDB Rating\":5.4,\"Production Budget\":8500000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Star Wars: The Clone Wars\"},{\"IMDB Rating\":4.7,\"Production Budget\":43000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"The Sweetest Thing\"},{\"IMDB Rating\":4.7,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Six Days, Seven Nights\"},{\"IMDB Rating\":6.8,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"Sex Drive\"},{\"IMDB Rating\":7.1,\"Production Budget\":4300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Sexy Beast\"},{\"IMDB Rating\":7.7,\"Production Budget\":4500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Chinjeolhan geumjassi\"},{\"IMDB Rating\":null,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Synecdoche, New York\"},{\"IMDB Rating\":7.1,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"Syriana\"},{\"IMDB Rating\":5.8,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":18,\"Title\":\"Suspect Zero\"},{\"IMDB Rating\":6.1,\"Production Budget\":150000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Tadpole\"},{\"IMDB Rating\":4.8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Taken\"},{\"IMDB Rating\":6.5,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":44,\"Title\":\"Take the Lead\"},{\"IMDB Rating\":6.4,\"Production Budget\":73000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"Talladega Nights: The Ballad of Ricky Bobby\"},{\"IMDB Rating\":7.2,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"The Talented Mr. Ripley\"},{\"IMDB Rating\":7.1,\"Production Budget\":218,\"Rotten Tomatoes Rating\":null,\"Title\":\"Tarnation\"},{\"IMDB Rating\":6.8,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Taxman\"},{\"IMDB Rating\":4,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Thunderbirds\"},{\"IMDB Rating\":6.1,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"The Best Man\"},{\"IMDB Rating\":4,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Book of Shadows: Blair Witch 2\"},{\"IMDB Rating\":4.8,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":12,\"Title\":\"The Cave\"},{\"IMDB Rating\":5.4,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"This Christmas\"},{\"IMDB Rating\":5.3,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"The Core\"},{\"IMDB Rating\":6.7,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"The Thomas Crown Affair\"},{\"IMDB Rating\":7.5,\"Production Budget\":6400000,\"Rotten Tomatoes Rating\":94,\"Title\":\"The Damned United\"},{\"IMDB Rating\":6.1,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"The Tale of Despereaux\"},{\"IMDB Rating\":7.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Team America: World Police\"},{\"IMDB Rating\":6.7,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Tea with Mussolini\"},{\"IMDB Rating\":6.4,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"Tears of the Sun\"},{\"IMDB Rating\":6.1,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Big Tease\"},{\"IMDB Rating\":5.5,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Not Another Teen Movie\"},{\"IMDB Rating\":5.5,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Teeth\"},{\"IMDB Rating\":7.4,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":85,\"Title\":\"Bridge to Terabithia\"},{\"IMDB Rating\":6.6,\"Production Budget\":170000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Terminator 3: Rise of the Machines\"},{\"IMDB Rating\":7.3,\"Production Budget\":151000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"Transformers\"},{\"IMDB Rating\":6,\"Production Budget\":210000000,\"Rotten Tomatoes Rating\":20,\"Title\":\"Transformers: Revenge of the Fallen\"},{\"IMDB Rating\":null,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"The Goods: Live Hard, Sell Hard\"},{\"IMDB Rating\":7.3,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"The Greatest Game Ever Played\"},{\"IMDB Rating\":7.6,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"The Ghost Writer\"},{\"IMDB Rating\":7.4,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Joheunnom nabbeunnom isanghannom\"},{\"IMDB Rating\":4.5,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"The Beach\"},{\"IMDB Rating\":6.8,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"The Box\"},{\"IMDB Rating\":6.7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Wild Thornberrys\"},{\"IMDB Rating\":6,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Bug\"},{\"IMDB Rating\":4.6,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"They\"},{\"IMDB Rating\":5.3,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"The Eye\"},{\"IMDB Rating\":3.3,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":5,\"Title\":\"The Fog\"},{\"IMDB Rating\":7.5,\"Production Budget\":52000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"The Thin Red Line\"},{\"IMDB Rating\":7.3,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Thirteen Days\"},{\"IMDB Rating\":5.9,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"The Kid\"},{\"IMDB Rating\":5.4,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"The Man\"},{\"IMDB Rating\":5.2,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"House on Haunted Hill\"},{\"IMDB Rating\":5.6,\"Production Budget\":49000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"The One\"},{\"IMDB Rating\":7.1,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Gwoemul\"},{\"IMDB Rating\":5,\"Production Budget\":2400000,\"Rotten Tomatoes Rating\":5,\"Title\":\"Thr3e\"},{\"IMDB Rating\":5.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"Three to Tango\"},{\"IMDB Rating\":6.7,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"The Thirteenth Floor\"},{\"IMDB Rating\":6.3,\"Production Budget\":125000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"The 13th Warrior\"},{\"IMDB Rating\":5,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"The Tuxedo\"},{\"IMDB Rating\":6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"The Tigger Movie\"},{\"IMDB Rating\":5.3,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"Timeline\"},{\"IMDB Rating\":7,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Thirteen\"},{\"IMDB Rating\":6.4,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"Titan A.E.\"},{\"IMDB Rating\":7.4,\"Production Budget\":200000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Titanic\"},{\"IMDB Rating\":7.8,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"The Kids Are All Right\"},{\"IMDB Rating\":5.5,\"Production Budget\":78000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"The League of Extraordinary Gentlemen\"},{\"IMDB Rating\":5.6,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"The Time Machine\"},{\"IMDB Rating\":4.9,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Tomcats\"},{\"IMDB Rating\":7.4,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"The Mist\"},{\"IMDB Rating\":6.6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"TMNT\"},{\"IMDB Rating\":6.4,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"Tomorrow Never Dies\"},{\"IMDB Rating\":7.6,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":79,\"Title\":\"The Royal Tenenbaums\"},{\"IMDB Rating\":5.2,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Lara Croft: Tomb Raider: The Cradle of Life\"},{\"IMDB Rating\":5.4,\"Production Budget\":94000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Lara Croft: Tomb Raider\"},{\"IMDB Rating\":6.3,\"Production Budget\":125000000,\"Rotten Tomatoes Rating\":46,\"Title\":\"The Day After Tomorrow\"},{\"IMDB Rating\":7.1,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Topsy Turvy\"},{\"IMDB Rating\":3.5,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Torque\"},{\"IMDB Rating\":7.8,\"Production Budget\":17000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"The Others\"},{\"IMDB Rating\":8.7,\"Production Budget\":37000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"The Town\"},{\"IMDB Rating\":8,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":100,\"Title\":\"Toy Story 2\"},{\"IMDB Rating\":8.9,\"Production Budget\":200000000,\"Rotten Tomatoes Rating\":99,\"Title\":\"Toy Story 3\"},{\"IMDB Rating\":6.5,\"Production Budget\":110000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Taking of Pelham 123\"},{\"IMDB Rating\":6.6,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"Treasure Planet\"},{\"IMDB Rating\":7.8,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":91,\"Title\":\"Traffic\"},{\"IMDB Rating\":2.7,\"Production Budget\":19000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"Thomas and the Magic Railroad\"},{\"IMDB Rating\":7.6,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"Training Day\"},{\"IMDB Rating\":7.1,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Traitor\"},{\"IMDB Rating\":6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":18,\"Title\":\"Trapped\"},{\"IMDB Rating\":5.5,\"Production Budget\":48000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"The Ring\"},{\"IMDB Rating\":4.6,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Trippin'\"},{\"IMDB Rating\":8.2,\"Production Budget\":140000000,\"Rotten Tomatoes Rating\":94,\"Title\":\"Star Trek\"},{\"IMDB Rating\":7.1,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"The Terminal\"},{\"IMDB Rating\":7.6,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Transamerica\"},{\"IMDB Rating\":6.6,\"Production Budget\":32000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Transporter 2\"},{\"IMDB Rating\":6.6,\"Production Budget\":21000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"The Transporter\"},{\"IMDB Rating\":7.5,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"The Road\"},{\"IMDB Rating\":7.2,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":83,\"Title\":\"Tropic Thunder\"},{\"IMDB Rating\":7,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":54,\"Title\":\"Troy\"},{\"IMDB Rating\":5.5,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"xXx\"},{\"IMDB Rating\":5.1,\"Production Budget\":7400000,\"Rotten Tomatoes Rating\":67,\"Title\":\"Ta Ra Rum Pum\"},{\"IMDB Rating\":8,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"The Truman Show\"},{\"IMDB Rating\":5.8,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Trust the Man\"},{\"IMDB Rating\":6.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":41,\"Title\":\"Where the Truth Lies\"},{\"IMDB Rating\":6.9,\"Production Budget\":145000000,\"Rotten Tomatoes Rating\":88,\"Title\":\"Tarzan\"},{\"IMDB Rating\":7.4,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Tsotsi\"},{\"IMDB Rating\":7.1,\"Production Budget\":39000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"The Time Traveler's Wife\"},{\"IMDB Rating\":4.5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Touch\"},{\"IMDB Rating\":6.5,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Tuck Everlasting\"},{\"IMDB Rating\":6.7,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":70,\"Title\":\"Thumbsucker\"},{\"IMDB Rating\":4.5,\"Production Budget\":55000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Turbulence\"},{\"IMDB Rating\":6.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Turistas\"},{\"IMDB Rating\":3.6,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"The Wash\"},{\"IMDB Rating\":5.6,\"Production Budget\":1000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Two Girls and a Guy\"},{\"IMDB Rating\":5.4,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":19,\"Title\":\"The Wild\"},{\"IMDB Rating\":6.1,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Twilight\"},{\"IMDB Rating\":4.8,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":2,\"Title\":\"Twisted\"},{\"IMDB Rating\":null,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"The Twilight Saga: New Moon\"},{\"IMDB Rating\":null,\"Production Budget\":68000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"The Twilight Saga: Eclipse\"},{\"IMDB Rating\":6.1,\"Production Budget\":37000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Twilight\"},{\"IMDB Rating\":4.4,\"Production Budget\":105000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Town & Country\"},{\"IMDB Rating\":5.4,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"200 Cigarettes\"},{\"IMDB Rating\":5.8,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Texas Chainsaw Massacre: The Beginning\"},{\"IMDB Rating\":6.1,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":36,\"Title\":\"The Texas Chainsaw Massacre\"},{\"IMDB Rating\":5,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Texas Rangers\"},{\"IMDB Rating\":6.9,\"Production Budget\":5700000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Tom yum goong\"},{\"IMDB Rating\":7.8,\"Production Budget\":7500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Thank You For Smoking\"},{\"IMDB Rating\":8.3,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"U2 3D\"},{\"IMDB Rating\":6.4,\"Production Budget\":62000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"U-571\"},{\"IMDB Rating\":5.7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"Undercover Brother\"},{\"IMDB Rating\":3.3,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Underclassman\"},{\"IMDB Rating\":6.6,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Dodgeball: A True Underdog Story\"},{\"IMDB Rating\":6.4,\"Production Budget\":38000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"The Ugly Truth\"},{\"IMDB Rating\":4,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Ultraviolet\"},{\"IMDB Rating\":3.7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Unaccompanied Minors\"},{\"IMDB Rating\":7.3,\"Production Budget\":73243106,\"Rotten Tomatoes Rating\":68,\"Title\":\"Unbreakable\"},{\"IMDB Rating\":4.5,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"The Unborn\"},{\"IMDB Rating\":5.6,\"Production Budget\":750000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Undead\"},{\"IMDB Rating\":6.7,\"Production Budget\":22000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Underworld\"},{\"IMDB Rating\":3.7,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":8,\"Title\":\"Undiscovered\"},{\"IMDB Rating\":5.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":49,\"Title\":\"Undisputed\"},{\"IMDB Rating\":6.6,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Underworld: Evolution\"},{\"IMDB Rating\":7.1,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"An Unfinished Life\"},{\"IMDB Rating\":6.6,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Unfaithful\"},{\"IMDB Rating\":3.4,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Universal Soldier II: The Return\"},{\"IMDB Rating\":6.6,\"Production Budget\":3700000,\"Rotten Tomatoes Rating\":39,\"Title\":null},{\"IMDB Rating\":7.1,\"Production Budget\":43000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Danny the Dog\"},{\"IMDB Rating\":6.1,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Untraceable\"},{\"IMDB Rating\":8.4,\"Production Budget\":175000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"Up\"},{\"IMDB Rating\":null,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Up in the Air\"},{\"IMDB Rating\":7,\"Production Budget\":12000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Upside of Anger\"},{\"IMDB Rating\":5.2,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Urban Legend\"},{\"IMDB Rating\":3.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Urban Legends: Final Cut\"},{\"IMDB Rating\":6.7,\"Production Budget\":225000,\"Rotten Tomatoes Rating\":73,\"Title\":\"Urbania\"},{\"IMDB Rating\":7.3,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"Valkyrie\"},{\"IMDB Rating\":5.6,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Valiant\"},{\"IMDB Rating\":4.3,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Valentine\"},{\"IMDB Rating\":6.1,\"Production Budget\":40000000,\"Rotten Tomatoes Rating\":37,\"Title\":\"Cirque du Freak: The Vampire's Assistant\"},{\"IMDB Rating\":6.4,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"The Legend of Bagger Vance\"},{\"IMDB Rating\":7.1,\"Production Budget\":800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Raising Victor Vargas\"},{\"IMDB Rating\":7.4,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"In the Valley of Elah\"},{\"IMDB Rating\":4.6,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"Venom\"},{\"IMDB Rating\":null,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Venus\"},{\"IMDB Rating\":6.2,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":50,\"Title\":\"Vanity Fair\"},{\"IMDB Rating\":8.2,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"V for Vendetta\"},{\"IMDB Rating\":5.5,\"Production Budget\":170000000,\"Rotten Tomatoes Rating\":22,\"Title\":\"Van Helsing\"},{\"IMDB Rating\":6.6,\"Production Budget\":71682975,\"Rotten Tomatoes Rating\":42,\"Title\":\"The Village\"},{\"IMDB Rating\":7.2,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Virgin Suicides\"},{\"IMDB Rating\":4.5,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"Virus\"},{\"IMDB Rating\":6.8,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":90,\"Title\":\"The Visitor\"},{\"IMDB Rating\":5.6,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":47,\"Title\":\"Vertical Limit\"},{\"IMDB Rating\":6.8,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":33,\"Title\":\"Vampires\"},{\"IMDB Rating\":6.9,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Vanilla Sky\"},{\"IMDB Rating\":5.2,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"Volcano\"},{\"IMDB Rating\":4.4,\"Production Budget\":9400000,\"Rotten Tomatoes Rating\":92,\"Title\":\"Volver\"},{\"IMDB Rating\":5.7,\"Production Budget\":8300000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Kurtlar vadisi - Irak\"},{\"IMDB Rating\":3.3,\"Production Budget\":58000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"The Flintstones in Viva Rock Vegas\"},{\"IMDB Rating\":6,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":39,\"Title\":\"Varsity Blues\"},{\"IMDB Rating\":5.7,\"Production Budget\":52000000,\"Rotten Tomatoes Rating\":17,\"Title\":\"Valentine's Day\"},{\"IMDB Rating\":7.1,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"The Wackness\"},{\"IMDB Rating\":7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Wag the Dog\"},{\"IMDB Rating\":6.8,\"Production Budget\":7000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Wah-Wah\"},{\"IMDB Rating\":null,\"Production Budget\":1125000,\"Rotten Tomatoes Rating\":30,\"Title\":\"Waiting...\"},{\"IMDB Rating\":null,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Waking Ned Devine\"},{\"IMDB Rating\":8.5,\"Production Budget\":180000000,\"Rotten Tomatoes Rating\":96,\"Title\":\"WALL-E\"},{\"IMDB Rating\":6.2,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"War\"},{\"IMDB Rating\":null,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":29,\"Title\":\"War, Inc.\"},{\"IMDB Rating\":7.2,\"Production Budget\":132000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The War of the Worlds\"},{\"IMDB Rating\":7.8,\"Production Budget\":138000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Watchmen\"},{\"IMDB Rating\":7.2,\"Production Budget\":1500000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Waitress\"},{\"IMDB Rating\":5.5,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Wendell Baker Story\"},{\"IMDB Rating\":8.2,\"Production Budget\":2000000,\"Rotten Tomatoes Rating\":95,\"Title\":\"Winter's Bone\"},{\"IMDB Rating\":7.5,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":81,\"Title\":\"Wonder Boys\"},{\"IMDB Rating\":5,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"White Chicks\"},{\"IMDB Rating\":6.3,\"Production Budget\":1100000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Wolf Creek\"},{\"IMDB Rating\":4.8,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":16,\"Title\":\"The Wedding Planner\"},{\"IMDB Rating\":6.6,\"Production Budget\":5500000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Wonderland\"},{\"IMDB Rating\":6.8,\"Production Budget\":29000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"Taking Woodstock\"},{\"IMDB Rating\":5.5,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"The Wedding Date\"},{\"IMDB Rating\":6.4,\"Production Budget\":312000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Tumbleweeds\"},{\"IMDB Rating\":7,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":56,\"Title\":\"We Own the Night\"},{\"IMDB Rating\":6.9,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"We Were Soldiers\"},{\"IMDB Rating\":7.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"The World's Fastest Indian\"},{\"IMDB Rating\":6.7,\"Production Budget\":14000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Les herbes folles\"},{\"IMDB Rating\":5.7,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"What a Girl Wants\"},{\"IMDB Rating\":7.7,\"Production Budget\":4300000,\"Rotten Tomatoes Rating\":90,\"Title\":\"Whale Rider\"},{\"IMDB Rating\":6.7,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":74,\"Title\":\"Walk Hard: The Dewey Cox Story\"},{\"IMDB Rating\":6.4,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":34,\"Title\":\"Where the Heart Is\"},{\"IMDB Rating\":4.2,\"Production Budget\":3000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"Whipped\"},{\"IMDB Rating\":7.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":84,\"Title\":\"Whip It\"},{\"IMDB Rating\":4.5,\"Production Budget\":27500000,\"Rotten Tomatoes Rating\":23,\"Title\":\"Welcome Home Roscoe Jenkins\"},{\"IMDB Rating\":4.7,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"When a Stranger Calls\"},{\"IMDB Rating\":6.6,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":55,\"Title\":\"What Dreams May Come\"},{\"IMDB Rating\":6.5,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":51,\"Title\":\"The White Countess\"},{\"IMDB Rating\":6.9,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":24,\"Title\":\"Wicker Park\"},{\"IMDB Rating\":7.2,\"Production Budget\":100000000,\"Rotten Tomatoes Rating\":73,\"Title\":\"Where the Wild Things Are\"},{\"IMDB Rating\":6.6,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"Wild Things\"},{\"IMDB Rating\":6.3,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":60,\"Title\":\"Wimbledon\"},{\"IMDB Rating\":5.8,\"Production Budget\":115000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"Windtalkers\"},{\"IMDB Rating\":6.1,\"Production Budget\":15000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"Because of Winn-Dixie\"},{\"IMDB Rating\":3.7,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":11,\"Title\":\"Wing Commander\"},{\"IMDB Rating\":6.9,\"Production Budget\":25000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"Without Limits\"},{\"IMDB Rating\":5.9,\"Production Budget\":27000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"What Just Happened\"},{\"IMDB Rating\":6.5,\"Production Budget\":90000000,\"Rotten Tomatoes Rating\":45,\"Title\":\"What Lies Beneath\"},{\"IMDB Rating\":7.9,\"Production Budget\":29000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"Walk the Line\"},{\"IMDB Rating\":7.1,\"Production Budget\":11000000,\"Rotten Tomatoes Rating\":28,\"Title\":\"A Walk to Remember\"},{\"IMDB Rating\":6.2,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Willard\"},{\"IMDB Rating\":4.3,\"Production Budget\":175000000,\"Rotten Tomatoes Rating\":21,\"Title\":\"Wild Wild West\"},{\"IMDB Rating\":5.9,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":86,\"Title\":\"White Noise 2: The Light\"},{\"IMDB Rating\":null,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":9,\"Title\":\"White Noise\"},{\"IMDB Rating\":6.4,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":71,\"Title\":\"Wanted\"},{\"IMDB Rating\":4.9,\"Production Budget\":8000000,\"Rotten Tomatoes Rating\":35,\"Title\":\"Woman on Top\"},{\"IMDB Rating\":7.4,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Wolf Man\"},{\"IMDB Rating\":6.7,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"X-Men Origins: Wolverine\"},{\"IMDB Rating\":7.9,\"Production Budget\":16000000,\"Rotten Tomatoes Rating\":13,\"Title\":\"The Women\"},{\"IMDB Rating\":3.4,\"Production Budget\":13000000,\"Rotten Tomatoes Rating\":5,\"Title\":\"Woo\"},{\"IMDB Rating\":6.1,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":61,\"Title\":\"The Wood\"},{\"IMDB Rating\":5.7,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":15,\"Title\":\"Without a Paddle\"},{\"IMDB Rating\":5,\"Production Budget\":30000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"What's the Worst That Could Happen?\"},{\"IMDB Rating\":6.4,\"Production Budget\":3500000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Winter Passing\"},{\"IMDB Rating\":5.4,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":42,\"Title\":\"What Planet Are You From?\"},{\"IMDB Rating\":7.4,\"Production Budget\":500000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Wordplay\"},{\"IMDB Rating\":8.2,\"Production Budget\":6000000,\"Rotten Tomatoes Rating\":98,\"Title\":\"The Wrestler\"},{\"IMDB Rating\":6,\"Production Budget\":56000000,\"Rotten Tomatoes Rating\":25,\"Title\":\"Walking Tall\"},{\"IMDB Rating\":6.2,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":69,\"Title\":\"World Trade Center\"},{\"IMDB Rating\":3.7,\"Production Budget\":33000000,\"Rotten Tomatoes Rating\":10,\"Title\":\"The Watcher\"},{\"IMDB Rating\":6.9,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":58,\"Title\":\"The Weather Man\"},{\"IMDB Rating\":6.3,\"Production Budget\":70000000,\"Rotten Tomatoes Rating\":72,\"Title\":\"Sky Captain and the World of Tomorrow\"},{\"IMDB Rating\":5.3,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":7,\"Title\":\"Whiteout\"},{\"IMDB Rating\":5.7,\"Production Budget\":23000000,\"Rotten Tomatoes Rating\":32,\"Title\":\"The Waterboy\"},{\"IMDB Rating\":5.8,\"Production Budget\":10000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"Wrong Turn\"},{\"IMDB Rating\":6.3,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":53,\"Title\":\"What Women Want\"},{\"IMDB Rating\":6.5,\"Production Budget\":9000000,\"Rotten Tomatoes Rating\":48,\"Title\":\"The Way of the Gun\"},{\"IMDB Rating\":5.9,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The X-Files: I Want to Believe\"},{\"IMDB Rating\":6.4,\"Production Budget\":31000000,\"Rotten Tomatoes Rating\":27,\"Title\":\"Extraordinary Measures\"},{\"IMDB Rating\":7.4,\"Production Budget\":75000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"X-Men\"},{\"IMDB Rating\":7.8,\"Production Budget\":125000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"X2\"},{\"IMDB Rating\":6.9,\"Production Budget\":150000000,\"Rotten Tomatoes Rating\":57,\"Title\":\"X-Men: The Last Stand\"},{\"IMDB Rating\":6.2,\"Production Budget\":40000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Exploding Girl\"},{\"IMDB Rating\":7.1,\"Production Budget\":82000000,\"Rotten Tomatoes Rating\":40,\"Title\":\"The Expendables\"},{\"IMDB Rating\":4.1,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"XXX: State of the Union\"},{\"IMDB Rating\":6.3,\"Production Budget\":20000000,\"Rotten Tomatoes Rating\":64,\"Title\":\"The Yards\"},{\"IMDB Rating\":7.7,\"Production Budget\":1200000,\"Rotten Tomatoes Rating\":95,\"Title\":\"You Can Count on Me\"},{\"IMDB Rating\":5,\"Production Budget\":60000000,\"Rotten Tomatoes Rating\":14,\"Title\":\"Year One\"},{\"IMDB Rating\":7,\"Production Budget\":50000000,\"Rotten Tomatoes Rating\":43,\"Title\":\"Yes Man\"},{\"IMDB Rating\":6.7,\"Production Budget\":4000000,\"Rotten Tomatoes Rating\":78,\"Title\":\"You Kill Me\"},{\"IMDB Rating\":7.6,\"Production Budget\":45000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Yours, Mine and Ours\"},{\"IMDB Rating\":6.2,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":68,\"Title\":\"You've Got Mail\"},{\"IMDB Rating\":6.7,\"Production Budget\":18000000,\"Rotten Tomatoes Rating\":null,\"Title\":\"Youth in Revolt\"},{\"IMDB Rating\":4.5,\"Production Budget\":800000,\"Rotten Tomatoes Rating\":null,\"Title\":\"The Young Unknowns\"},{\"IMDB Rating\":7.2,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":76,\"Title\":\"The Young Victoria\"},{\"IMDB Rating\":null,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":75,\"Title\":\"Zathura\"},{\"IMDB Rating\":6.8,\"Production Budget\":5000000,\"Rotten Tomatoes Rating\":66,\"Title\":\"Zero Effect\"},{\"IMDB Rating\":6.4,\"Production Budget\":28000000,\"Rotten Tomatoes Rating\":62,\"Title\":\"Zoolander\"},{\"IMDB Rating\":7.8,\"Production Budget\":23600000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Zombieland\"},{\"IMDB Rating\":7,\"Production Budget\":24000000,\"Rotten Tomatoes Rating\":65,\"Title\":\"Zack and Miri Make a Porno\"},{\"IMDB Rating\":null,\"Production Budget\":85000000,\"Rotten Tomatoes Rating\":89,\"Title\":\"Zodiac\"},{\"IMDB Rating\":3.4,\"Production Budget\":35000000,\"Rotten Tomatoes Rating\":3,\"Title\":\"Zoom\"},{\"IMDB Rating\":5.7,\"Production Budget\":80000000,\"Rotten Tomatoes Rating\":26,\"Title\":\"The Legend of Zorro\"},{\"IMDB Rating\":6.7,\"Production Budget\":65000000,\"Rotten Tomatoes Rating\":82,\"Title\":\"The Mask of Zorro\"}],\"metadata\":{\"IMDB Rating\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Production Budget\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Rotten Tomatoes Rating\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Title\":{\"type\":\"string\",\"semanticType\":\"Name\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Select relevant columns and filter out rows with missing values in key fields\\n    transformed_df = df_movies[['Title', 'Production Budget', 'Rotten Tomatoes Rating', 'IMDB Rating']].copy()\\n    \\n    # Remove rows where Production Budget is missing\\n    transformed_df = transformed_df[transformed_df['Production Budget'].notna()]\\n    \\n    # Keep rows where at least one rating is available\\n    transformed_df = transformed_df[\\n        (transformed_df['Rotten Tomatoes Rating'].notna()) | \\n        (transformed_df['IMDB Rating'].notna())\\n    ]\\n    \\n    return transformed_df\\n\",\"source\":[\"movies\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\". \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- you can use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 403706375.0, 441226247.0, 533345358.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 937499905.0, 976457891.0, 1133027325.0, 1842879955.0\\n\\t*US DVD Sales -- type: float64, values: 15442818.0, 17031573.0, 33619971.0, ..., nan, nan, 46260220.0, nan\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 5000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, 3.0, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: 1.5, 2.0, 2.4, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 212985.0, 237477.0, 417703.0, nan\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nDo higher production budgets correlate with better ratings?\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"The user wants to analyze the correlation between production budgets and movie ratings to understand if higher budgets lead to better ratings.\\\",\\n    \\\"display_instruction\\\": \\\"Show correlation between **Production Budget** and **ratings**\\\",\\n    \\\"recommendation\\\": \\\"Create a scatter plot visualization to show the relationship between Production Budget and ratings. Since there are two rating systems (Rotten Tomatoes and IMDB), we'll analyze both and include them as separate dimensions in the output data.\\\",\\n    \\\"output_fields\\\": [\\\"Title\\\", \\\"Production Budget\\\", \\\"Rotten Tomatoes Rating\\\", \\\"IMDB Rating\\\"],\\n    \\\"chart_type\\\": \\\"point\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Production Budget\\\",\\n        \\\"y\\\": \\\"Rotten Tomatoes Rating\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Select relevant columns and filter out rows with missing values in key fields\\n    transformed_df = df_movies[['Title', 'Production Budget', 'Rotten Tomatoes Rating', 'IMDB Rating']].copy()\\n    \\n    # Remove rows where Production Budget is missing\\n    transformed_df = transformed_df[transformed_df['Production Budget'].notna()]\\n    \\n    # Keep rows where at least one rating is available\\n    transformed_df = transformed_df[\\n        (transformed_df['Rotten Tomatoes Rating'].notna()) | \\n        (transformed_df['IMDB Rating'].notna())\\n    ]\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"movies\",\"sourceTableIds\":[\"movies\"],\"instruction\":\"Do higher production budgets correlate with better ratings?\",\"displayInstruction\":\"Show correlation between **Production Budget** and **ratings**\",\"chart\":{\"id\":\"chart-1760744462348\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"movies\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-456490\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"- Select key fields from the movies dataset: **Title**, **Production Budget**, **Rotten Tomatoes Rating**, and **IMDB Rating**\\n- Filter out movies with missing **Production Budget** values to ensure all movies have known budget information\\n- Retain only movies that have at least one rating available (either **Rotten Tomatoes Rating** or **IMDB Rating**), ensuring each movie has some form of critical assessment\\n- Return a cleaned dataset containing only movies with complete budget information and at least one rating metric\",\"concepts\":[],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 403706375.0, 441226247.0, 533345358.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., nan, 1133027325.0, 1842879955.0, 2767891499.0\\n\\t*US DVD Sales -- type: float64, values: nan, 853973.0, 13180936.0, ..., nan, 46260220.0, 124058348.0, nan\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 23000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, 3.0, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: 1.5, 2.0, 2.5, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 212985.0, 229156.0, 237477.0, 417703.0\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Select relevant columns and filter out rows with missing values in key fields\\n    transformed_df = df_movies[['Title', 'Production Budget', 'Rotten Tomatoes Rating', 'IMDB Rating']].copy()\\n    \\n    # Remove rows where Production Budget is missing\\n    transformed_df = transformed_df[transformed_df['Production Budget'].notna()]\\n    \\n    # Keep rows where at least one rating is available\\n    transformed_df = transformed_df[\\n        (transformed_df['Rotten Tomatoes Rating'].notna()) | \\n        (transformed_df['IMDB Rating'].notna())\\n    ]\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\n- Select key fields from the movies dataset: **Title**, **Production Budget**, **Rotten Tomatoes Rating**, and **IMDB Rating**\\n- Filter out movies with missing **Production Budget** values to ensure all movies have known budget information\\n- Retain only movies that have at least one rating available (either **Rotten Tomatoes Rating** or **IMDB Rating**), ensuring each movie has some form of critical assessment\\n- Return a cleaned dataset containing only movies with complete budget information and at least one rating metric\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-37\",\"displayId\":\"movie-budget-ratings\",\"names\":[\"Number of Movies\",\"Production Budget Bin\",\"Rotten Tomatoes Rating Bin\"],\"rows\":[{\"Number of Movies\":6,\"Production Budget Bin\":\"<$1M\",\"Rotten Tomatoes Rating Bin\":\"0-20\"},{\"Number of Movies\":9,\"Production Budget Bin\":\"<$1M\",\"Rotten Tomatoes Rating Bin\":\"21-40\"},{\"Number of Movies\":12,\"Production Budget Bin\":\"<$1M\",\"Rotten Tomatoes Rating Bin\":\"41-60\"},{\"Number of Movies\":19,\"Production Budget Bin\":\"<$1M\",\"Rotten Tomatoes Rating Bin\":\"61-80\"},{\"Number of Movies\":54,\"Production Budget Bin\":\"<$1M\",\"Rotten Tomatoes Rating Bin\":\"81-100\"},{\"Number of Movies\":61,\"Production Budget Bin\":\"$1M-$10M\",\"Rotten Tomatoes Rating Bin\":\"0-20\"},{\"Number of Movies\":72,\"Production Budget Bin\":\"$1M-$10M\",\"Rotten Tomatoes Rating Bin\":\"21-40\"},{\"Number of Movies\":58,\"Production Budget Bin\":\"$1M-$10M\",\"Rotten Tomatoes Rating Bin\":\"41-60\"},{\"Number of Movies\":104,\"Production Budget Bin\":\"$1M-$10M\",\"Rotten Tomatoes Rating Bin\":\"61-80\"},{\"Number of Movies\":219,\"Production Budget Bin\":\"$1M-$10M\",\"Rotten Tomatoes Rating Bin\":\"81-100\"},{\"Number of Movies\":229,\"Production Budget Bin\":\"$10M-$50M\",\"Rotten Tomatoes Rating Bin\":\"0-20\"},{\"Number of Movies\":257,\"Production Budget Bin\":\"$10M-$50M\",\"Rotten Tomatoes Rating Bin\":\"21-40\"},{\"Number of Movies\":241,\"Production Budget Bin\":\"$10M-$50M\",\"Rotten Tomatoes Rating Bin\":\"41-60\"},{\"Number of Movies\":245,\"Production Budget Bin\":\"$10M-$50M\",\"Rotten Tomatoes Rating Bin\":\"61-80\"},{\"Number of Movies\":210,\"Production Budget Bin\":\"$10M-$50M\",\"Rotten Tomatoes Rating Bin\":\"81-100\"},{\"Number of Movies\":62,\"Production Budget Bin\":\"$50M-$100M\",\"Rotten Tomatoes Rating Bin\":\"0-20\"},{\"Number of Movies\":99,\"Production Budget Bin\":\"$50M-$100M\",\"Rotten Tomatoes Rating Bin\":\"21-40\"},{\"Number of Movies\":98,\"Production Budget Bin\":\"$50M-$100M\",\"Rotten Tomatoes Rating Bin\":\"41-60\"},{\"Number of Movies\":95,\"Production Budget Bin\":\"$50M-$100M\",\"Rotten Tomatoes Rating Bin\":\"61-80\"},{\"Number of Movies\":54,\"Production Budget Bin\":\"$50M-$100M\",\"Rotten Tomatoes Rating Bin\":\"81-100\"},{\"Number of Movies\":9,\"Production Budget Bin\":\">$100M\",\"Rotten Tomatoes Rating Bin\":\"0-20\"},{\"Number of Movies\":24,\"Production Budget Bin\":\">$100M\",\"Rotten Tomatoes Rating Bin\":\"21-40\"},{\"Number of Movies\":26,\"Production Budget Bin\":\">$100M\",\"Rotten Tomatoes Rating Bin\":\"41-60\"},{\"Number of Movies\":26,\"Production Budget Bin\":\">$100M\",\"Rotten Tomatoes Rating Bin\":\"61-80\"},{\"Number of Movies\":31,\"Production Budget Bin\":\">$100M\",\"Rotten Tomatoes Rating Bin\":\"81-100\"}],\"metadata\":{\"Number of Movies\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Production Budget Bin\":{\"type\":\"string\",\"semanticType\":\"Range\",\"levels\":[\"<$1M\",\"$1M-$10M\",\"$10M-$50M\",\"$50M-$100M\",\">$100M\"]},\"Rotten Tomatoes Rating Bin\":{\"type\":\"string\",\"semanticType\":\"Range\",\"levels\":[\"0-20\",\"21-40\",\"41-60\",\"61-80\",\"81-100\"]}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Select relevant columns and filter out rows with missing values\\n    df_filtered = df_movies[['Production Budget', 'Rotten Tomatoes Rating']].copy()\\n    df_filtered = df_filtered[\\n        (df_filtered['Production Budget'].notna()) & \\n        (df_filtered['Rotten Tomatoes Rating'].notna())\\n    ]\\n    \\n    # Create budget bins (in millions for readability)\\n    budget_bins = [0, 1000000, 10000000, 50000000, 100000000, float('inf')]\\n    budget_labels = ['<$1M', '$1M-$10M', '$10M-$50M', '$50M-$100M', '>$100M']\\n    df_filtered['Production Budget Bin'] = pd.cut(\\n        df_filtered['Production Budget'], \\n        bins=budget_bins, \\n        labels=budget_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Create rating bins\\n    rating_bins = [0, 20, 40, 60, 80, 100]\\n    rating_labels = ['0-20', '21-40', '41-60', '61-80', '81-100']\\n    df_filtered['Rotten Tomatoes Rating Bin'] = pd.cut(\\n        df_filtered['Rotten Tomatoes Rating'], \\n        bins=rating_bins, \\n        labels=rating_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Count movies in each bin combination\\n    transformed_df = df_filtered.groupby(\\n        ['Production Budget Bin', 'Rotten Tomatoes Rating Bin'], \\n        observed=True\\n    ).size().reset_index(name='Number of Movies')\\n    \\n    # Convert categorical to string for better display\\n    transformed_df['Production Budget Bin'] = transformed_df['Production Budget Bin'].astype(str)\\n    transformed_df['Rotten Tomatoes Rating Bin'] = transformed_df['Rotten Tomatoes Rating Bin'].astype(str)\\n    \\n    return transformed_df\\n\",\"source\":[\"movies\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 403706375.0, 441226247.0, 533345358.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 937499905.0, 976457891.0, 1133027325.0, 1842879955.0\\n\\t*US DVD Sales -- type: float64, values: 15442818.0, 17031573.0, 33619971.0, ..., nan, nan, 46260220.0, nan\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 5000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, 3.0, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: 1.5, 2.0, 2.4, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 212985.0, 237477.0, 417703.0, nan\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nDo higher production budgets correlate with better ratings?\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"The user wants to analyze the correlation between production budgets and movie ratings to understand if higher budgets lead to better ratings.\\\",\\n    \\\"display_instruction\\\": \\\"Show correlation between **Production Budget** and **ratings**\\\",\\n    \\\"recommendation\\\": \\\"Create a scatter plot visualization to show the relationship between Production Budget and ratings. Since there are two rating systems (Rotten Tomatoes and IMDB), we'll analyze both and include them as separate dimensions in the output data.\\\",\\n    \\\"output_fields\\\": [\\\"Title\\\", \\\"Production Budget\\\", \\\"Rotten Tomatoes Rating\\\", \\\"IMDB Rating\\\"],\\n    \\\"chart_type\\\": \\\"point\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Production Budget\\\",\\n        \\\"y\\\": \\\"Rotten Tomatoes Rating\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Select relevant columns and filter out rows with missing values in key fields\\n    transformed_df = df_movies[['Title', 'Production Budget', 'Rotten Tomatoes Rating', 'IMDB Rating']].copy()\\n    \\n    # Remove rows where Production Budget is missing\\n    transformed_df = transformed_df[transformed_df['Production Budget'].notna()]\\n    \\n    # Keep rows where at least one rating is available\\n    transformed_df = transformed_df[\\n        (transformed_df['Rotten Tomatoes Rating'].notna()) | \\n        (transformed_df['IMDB Rating'].notna())\\n    ]\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n   IMDB Rating  Production Budget  Rotten Tomatoes Rating                       Title\\n0          6.1            8000000                     NaN              The Land Girls\\n1          6.9             300000                     NaN      First Love, Last Rites\\n2          6.8             250000                     NaN  I Married a Strange Person\\n3          NaN             300000                    13.0        Let's Talk About Sex\\n4          3.4            1000000                    62.0                        Slam\\n5          7.7               6000                     NaN                   Following\\n6          3.8            1600000                     NaN                     Foolish\\n7          5.8           40000000                    25.0                     Pirates\\n8          7.0            6000000                    86.0             Duel in the Sun\\n9          7.0            1000000                    81.0                   Tom Jones\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"bin rt rating and budget into bins to show number of movies in each range\\\",\\n    \\\"chart_type\\\": \\\"Scatter Plot\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Production Budget\\\",\\n        \\\"y\\\": \\\"Rotten Tomatoes Rating\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Bin the Production Budget and Rotten Tomatoes Rating into categorical ranges, then count the number of movies that fall into each combination of budget and rating bins to create a heatmap-style aggregation.\\\",\\n    \\\"display_instruction\\\": \\\"Show **number of movies** in each **Production Budget** and **Rotten Tomatoes Rating** bin\\\",\\n    \\\"output_fields\\\": [\\\"Production Budget Bin\\\", \\\"Rotten Tomatoes Rating Bin\\\", \\\"Number of Movies\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Production Budget Bin\\\",\\n        \\\"y\\\": \\\"Rotten Tomatoes Rating Bin\\\",\\n        \\\"color\\\": \\\"Number of Movies\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to bin both Production Budget and Rotten Tomatoes Rating into ranges and count movies in each combination. This requires creating categorical bins for both dimensions and aggregating counts. A heatmap visualization (using color encoding for count) would be more appropriate than a scatter plot for showing binned data.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Select relevant columns and filter out rows with missing values\\n    df_filtered = df_movies[['Production Budget', 'Rotten Tomatoes Rating']].copy()\\n    df_filtered = df_filtered[\\n        (df_filtered['Production Budget'].notna()) & \\n        (df_filtered['Rotten Tomatoes Rating'].notna())\\n    ]\\n    \\n    # Create budget bins (in millions for readability)\\n    budget_bins = [0, 1000000, 10000000, 50000000, 100000000, float('inf')]\\n    budget_labels = ['<$1M', '$1M-$10M', '$10M-$50M', '$50M-$100M', '>$100M']\\n    df_filtered['Production Budget Bin'] = pd.cut(\\n        df_filtered['Production Budget'], \\n        bins=budget_bins, \\n        labels=budget_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Create rating bins\\n    rating_bins = [0, 20, 40, 60, 80, 100]\\n    rating_labels = ['0-20', '21-40', '41-60', '61-80', '81-100']\\n    df_filtered['Rotten Tomatoes Rating Bin'] = pd.cut(\\n        df_filtered['Rotten Tomatoes Rating'], \\n        bins=rating_bins, \\n        labels=rating_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Count movies in each bin combination\\n    transformed_df = df_filtered.groupby(\\n        ['Production Budget Bin', 'Rotten Tomatoes Rating Bin'], \\n        observed=True\\n    ).size().reset_index(name='Number of Movies')\\n    \\n    # Convert categorical to string for better display\\n    transformed_df['Production Budget Bin'] = transformed_df['Production Budget Bin'].astype(str)\\n    transformed_df['Rotten Tomatoes Rating Bin'] = transformed_df['Rotten Tomatoes Rating Bin'].astype(str)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"table-456490\",\"sourceTableIds\":[\"movies\"],\"instruction\":\"bin rt rating and budget into bins to show number of movies in each range\",\"displayInstruction\":\"Show **number of movies** in each **Production Budget** and **Rotten Tomatoes Rating** bin\",\"chart\":{\"id\":\"chart-1760744514854\",\"chartType\":\"Scatter Plot\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--movies--Production Budget\"},\"y\":{\"fieldID\":\"original--movies--Rotten Tomatoes Rating\"},\"color\":{\"channel\":\"color\",\"bin\":false},\"size\":{\"channel\":\"size\",\"bin\":false},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-456490\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-37\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"- Filter the dataset to include only movies with both **Production Budget** and **Rotten Tomatoes Rating** values available\\n- Create **budget categories** by grouping Production Budget into five bins: **<$1M**, **$1M-$10M**, **$10M-$50M**, **$50M-$100M**, and **>$100M**\\n- Create **rating categories** by grouping Rotten Tomatoes Rating into five bins: **0-20**, **21-40**, **41-60**, **61-80**, and **81-100**\\n- **Count** the number of movies that fall into each combination of budget category and rating category\\n- Return a summary table showing the distribution of movies across budget and rating bins\",\"concepts\":[{\"explanation\":\"Categorical bins created through discretization of continuous variables. Production Budget is divided into 5 ranges based on million-dollar thresholds, while Rotten Tomatoes Rating is divided into 5 equal-width intervals of 20 points each. This binning approach enables analysis of the relationship between production investment levels and critical reception patterns.\",\"field\":\"Production Budget Bin, Rotten Tomatoes Rating Bin\"},{\"explanation\":\"This analysis employs a **two-dimensional frequency distribution** (contingency table approach) to explore the relationship between production budget and critical reception. The transformation creates a discrete joint distribution by binning two continuous variables and counting occurrences in each cell. This approach is useful for identifying patterns such as whether higher-budget films tend to receive better or worse critical ratings. **Alternative modeling approaches** could include: (1) correlation analysis between raw budget and rating values, (2) regression modeling to predict ratings from budget while controlling for other factors, (3) chi-square tests of independence to formally test whether budget and rating categories are associated, or (4) visualization through heatmaps to reveal concentration patterns across the budget-rating space.\",\"field\":\"Statistical Analysis\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 402111870.0, 441226247.0, 600788188.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 937499905.0, 1133027325.0, 1842879955.0, 2767891499.0\\n\\t*US DVD Sales -- type: float64, values: 618454.0, 853973.0, 1877732.0, ..., nan, nan, 46260220.0, nan\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 5000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, nan, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: nan, 1.5, 2.5, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 57313.0, nan, 73720.0, 212985.0\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Select relevant columns and filter out rows with missing values\\n    df_filtered = df_movies[['Production Budget', 'Rotten Tomatoes Rating']].copy()\\n    df_filtered = df_filtered[\\n        (df_filtered['Production Budget'].notna()) & \\n        (df_filtered['Rotten Tomatoes Rating'].notna())\\n    ]\\n    \\n    # Create budget bins (in millions for readability)\\n    budget_bins = [0, 1000000, 10000000, 50000000, 100000000, float('inf')]\\n    budget_labels = ['<$1M', '$1M-$10M', '$10M-$50M', '$50M-$100M', '>$100M']\\n    df_filtered['Production Budget Bin'] = pd.cut(\\n        df_filtered['Production Budget'], \\n        bins=budget_bins, \\n        labels=budget_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Create rating bins\\n    rating_bins = [0, 20, 40, 60, 80, 100]\\n    rating_labels = ['0-20', '21-40', '41-60', '61-80', '81-100']\\n    df_filtered['Rotten Tomatoes Rating Bin'] = pd.cut(\\n        df_filtered['Rotten Tomatoes Rating'], \\n        bins=rating_bins, \\n        labels=rating_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Count movies in each bin combination\\n    transformed_df = df_filtered.groupby(\\n        ['Production Budget Bin', 'Rotten Tomatoes Rating Bin'], \\n        observed=True\\n    ).size().reset_index(name='Number of Movies')\\n    \\n    # Convert categorical to string for better display\\n    transformed_df['Production Budget Bin'] = transformed_df['Production Budget Bin'].astype(str)\\n    transformed_df['Rotten Tomatoes Rating Bin'] = transformed_df['Rotten Tomatoes Rating Bin'].astype(str)\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\n- Filter the dataset to include only movies with both **Production Budget** and **Rotten Tomatoes Rating** values available\\n- Create **budget categories** by grouping Production Budget into five bins: **<$1M**, **$1M-$10M**, **$10M-$50M**, **$50M-$100M**, and **>$100M**\\n- Create **rating categories** by grouping Rotten Tomatoes Rating into five bins: **0-20**, **21-40**, **41-60**, **61-80**, and **81-100**\\n- **Count** the number of movies that fall into each combination of budget category and rating category\\n- Return a summary table showing the distribution of movies across budget and rating bins\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"Production Budget Bin, Rotten Tomatoes Rating Bin\\\",\\n        \\\"explanation\\\": \\\"Categorical bins created through discretization of continuous variables. Production Budget is divided into 5 ranges based on million-dollar thresholds, while Rotten Tomatoes Rating is divided into 5 equal-width intervals of 20 points each. This binning approach enables analysis of the relationship between production investment levels and critical reception patterns.\\\"\\n    },\\n    {\\n        \\\"field\\\": \\\"Statistical Analysis\\\",\\n        \\\"explanation\\\": \\\"This analysis employs a **two-dimensional frequency distribution** (contingency table approach) to explore the relationship between production budget and critical reception. The transformation creates a discrete joint distribution by binning two continuous variables and counting occurrences in each cell. This approach is useful for identifying patterns such as whether higher-budget films tend to receive better or worse critical ratings. **Alternative modeling approaches** could include: (1) correlation analysis between raw budget and rating values, (2) regression modeling to predict ratings from budget while controlling for other factors, (3) chi-square tests of independence to formally test whether budget and rating categories are associated, or (4) visualization through heatmaps to reveal concentration patterns across the budget-rating space.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-54\",\"displayId\":\"film-profit-analysis\",\"names\":[\"Average Profit\",\"Production Budget Bin\",\"Rotten Tomatoes Rating Bin\"],\"rows\":[{\"Average Profit\":1265816.3333333333,\"Production Budget Bin\":\"<$1M\",\"Rotten Tomatoes Rating Bin\":\"0-20\"},{\"Average Profit\":6494134,\"Production Budget Bin\":\"<$1M\",\"Rotten Tomatoes Rating Bin\":\"21-40\"},{\"Average Profit\":7866065.833333333,\"Production Budget Bin\":\"<$1M\",\"Rotten Tomatoes Rating Bin\":\"41-60\"},{\"Average Profit\":6749073.2105263155,\"Production Budget Bin\":\"<$1M\",\"Rotten Tomatoes Rating Bin\":\"61-80\"},{\"Average Profit\":20121581.403846152,\"Production Budget Bin\":\"<$1M\",\"Rotten Tomatoes Rating Bin\":\"81-100\"},{\"Average Profit\":9285520.68852459,\"Production Budget Bin\":\"$1M-$10M\",\"Rotten Tomatoes Rating Bin\":\"0-20\"},{\"Average Profit\":17386269.305555556,\"Production Budget Bin\":\"$1M-$10M\",\"Rotten Tomatoes Rating Bin\":\"21-40\"},{\"Average Profit\":13840988.827586208,\"Production Budget Bin\":\"$1M-$10M\",\"Rotten Tomatoes Rating Bin\":\"41-60\"},{\"Average Profit\":20654143.125,\"Production Budget Bin\":\"$1M-$10M\",\"Rotten Tomatoes Rating Bin\":\"61-80\"},{\"Average Profit\":37024663.62962963,\"Production Budget Bin\":\"$1M-$10M\",\"Rotten Tomatoes Rating Bin\":\"81-100\"},{\"Average Profit\":11168889.11790393,\"Production Budget Bin\":\"$10M-$50M\",\"Rotten Tomatoes Rating Bin\":\"0-20\"},{\"Average Profit\":32529317.311284047,\"Production Budget Bin\":\"$10M-$50M\",\"Rotten Tomatoes Rating Bin\":\"21-40\"},{\"Average Profit\":36640084.60165975,\"Production Budget Bin\":\"$10M-$50M\",\"Rotten Tomatoes Rating Bin\":\"41-60\"},{\"Average Profit\":49506279.571428575,\"Production Budget Bin\":\"$10M-$50M\",\"Rotten Tomatoes Rating Bin\":\"61-80\"},{\"Average Profit\":93010923.90476191,\"Production Budget Bin\":\"$10M-$50M\",\"Rotten Tomatoes Rating Bin\":\"81-100\"},{\"Average Profit\":11584648.806451613,\"Production Budget Bin\":\"$50M-$100M\",\"Rotten Tomatoes Rating Bin\":\"0-20\"},{\"Average Profit\":59680849.09090909,\"Production Budget Bin\":\"$50M-$100M\",\"Rotten Tomatoes Rating Bin\":\"21-40\"},{\"Average Profit\":104106140.86734694,\"Production Budget Bin\":\"$50M-$100M\",\"Rotten Tomatoes Rating Bin\":\"41-60\"},{\"Average Profit\":121416300.37894736,\"Production Budget Bin\":\"$50M-$100M\",\"Rotten Tomatoes Rating Bin\":\"61-80\"},{\"Average Profit\":226983168.4814815,\"Production Budget Bin\":\"$50M-$100M\",\"Rotten Tomatoes Rating Bin\":\"81-100\"},{\"Average Profit\":132877326,\"Production Budget Bin\":\">$100M\",\"Rotten Tomatoes Rating Bin\":\"0-20\"},{\"Average Profit\":148619038.95833334,\"Production Budget Bin\":\">$100M\",\"Rotten Tomatoes Rating Bin\":\"21-40\"},{\"Average Profit\":297717419.34615386,\"Production Budget Bin\":\">$100M\",\"Rotten Tomatoes Rating Bin\":\"41-60\"},{\"Average Profit\":289246367.34615386,\"Production Budget Bin\":\">$100M\",\"Rotten Tomatoes Rating Bin\":\"61-80\"},{\"Average Profit\":515989525.483871,\"Production Budget Bin\":\">$100M\",\"Rotten Tomatoes Rating Bin\":\"81-100\"}],\"metadata\":{\"Average Profit\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"Production Budget Bin\":{\"type\":\"string\",\"semanticType\":\"Range\",\"levels\":[\"<$1M\",\"$1M-$10M\",\"$10M-$50M\",\"$50M-$100M\",\">$100M\"]},\"Rotten Tomatoes Rating Bin\":{\"type\":\"string\",\"semanticType\":\"Range\",\"levels\":[\"0-20\",\"21-40\",\"41-60\",\"61-80\",\"81-100\"]}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Select relevant columns and filter out rows with missing values\\n    df_filtered = df_movies[['Production Budget', 'Rotten Tomatoes Rating', 'Worldwide Gross']].copy()\\n    df_filtered = df_filtered[\\n        (df_filtered['Production Budget'].notna()) & \\n        (df_filtered['Rotten Tomatoes Rating'].notna()) &\\n        (df_filtered['Worldwide Gross'].notna())\\n    ]\\n    \\n    # Calculate profit\\n    df_filtered['Profit'] = df_filtered['Worldwide Gross'] - df_filtered['Production Budget']\\n    \\n    # Create budget bins (in millions for readability)\\n    budget_bins = [0, 1000000, 10000000, 50000000, 100000000, float('inf')]\\n    budget_labels = ['<$1M', '$1M-$10M', '$10M-$50M', '$50M-$100M', '>$100M']\\n    df_filtered['Production Budget Bin'] = pd.cut(\\n        df_filtered['Production Budget'], \\n        bins=budget_bins, \\n        labels=budget_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Create rating bins\\n    rating_bins = [0, 20, 40, 60, 80, 100]\\n    rating_labels = ['0-20', '21-40', '41-60', '61-80', '81-100']\\n    df_filtered['Rotten Tomatoes Rating Bin'] = pd.cut(\\n        df_filtered['Rotten Tomatoes Rating'], \\n        bins=rating_bins, \\n        labels=rating_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Calculate average profit in each bin combination\\n    transformed_df = df_filtered.groupby(\\n        ['Production Budget Bin', 'Rotten Tomatoes Rating Bin'], \\n        observed=True\\n    )['Profit'].mean().reset_index(name='Average Profit')\\n    \\n    # Convert categorical to string for better display\\n    transformed_df['Production Budget Bin'] = transformed_df['Production Budget Bin'].astype(str)\\n    transformed_df['Rotten Tomatoes Rating Bin'] = transformed_df['Rotten Tomatoes Rating Bin'].astype(str)\\n    \\n    return transformed_df\\n\",\"source\":[\"movies\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 403706375.0, 441226247.0, 533345358.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 937499905.0, 976457891.0, 1133027325.0, 1842879955.0\\n\\t*US DVD Sales -- type: float64, values: 15442818.0, 17031573.0, 33619971.0, ..., nan, nan, 46260220.0, nan\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 5000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, 3.0, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: 1.5, 2.0, 2.4, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 212985.0, 237477.0, 417703.0, nan\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nDo higher production budgets correlate with better ratings?\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"The user wants to analyze the correlation between production budgets and movie ratings to understand if higher budgets lead to better ratings.\\\",\\n    \\\"display_instruction\\\": \\\"Show correlation between **Production Budget** and **ratings**\\\",\\n    \\\"recommendation\\\": \\\"Create a scatter plot visualization to show the relationship between Production Budget and ratings. Since there are two rating systems (Rotten Tomatoes and IMDB), we'll analyze both and include them as separate dimensions in the output data.\\\",\\n    \\\"output_fields\\\": [\\\"Title\\\", \\\"Production Budget\\\", \\\"Rotten Tomatoes Rating\\\", \\\"IMDB Rating\\\"],\\n    \\\"chart_type\\\": \\\"point\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Production Budget\\\",\\n        \\\"y\\\": \\\"Rotten Tomatoes Rating\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Select relevant columns and filter out rows with missing values in key fields\\n    transformed_df = df_movies[['Title', 'Production Budget', 'Rotten Tomatoes Rating', 'IMDB Rating']].copy()\\n    \\n    # Remove rows where Production Budget is missing\\n    transformed_df = transformed_df[transformed_df['Production Budget'].notna()]\\n    \\n    # Keep rows where at least one rating is available\\n    transformed_df = transformed_df[\\n        (transformed_df['Rotten Tomatoes Rating'].notna()) | \\n        (transformed_df['IMDB Rating'].notna())\\n    ]\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n   IMDB Rating  Production Budget  Rotten Tomatoes Rating                       Title\\n0          6.1            8000000                     NaN              The Land Girls\\n1          6.9             300000                     NaN      First Love, Last Rites\\n2          6.8             250000                     NaN  I Married a Strange Person\\n3          NaN             300000                    13.0        Let's Talk About Sex\\n4          3.4            1000000                    62.0                        Slam\\n5          7.7               6000                     NaN                   Following\\n6          3.8            1600000                     NaN                     Foolish\\n7          5.8           40000000                    25.0                     Pirates\\n8          7.0            6000000                    86.0             Duel in the Sun\\n9          7.0            1000000                    81.0                   Tom Jones\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"bin rt rating and budget into bins to show number of movies in each range\\\",\\n    \\\"chart_type\\\": \\\"Scatter Plot\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Production Budget\\\",\\n        \\\"y\\\": \\\"Rotten Tomatoes Rating\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Bin the Production Budget and Rotten Tomatoes Rating into categorical ranges, then count the number of movies that fall into each combination of budget and rating bins to create a heatmap-style aggregation.\\\",\\n    \\\"display_instruction\\\": \\\"Show **number of movies** in each **Production Budget** and **Rotten Tomatoes Rating** bin\\\",\\n    \\\"output_fields\\\": [\\\"Production Budget Bin\\\", \\\"Rotten Tomatoes Rating Bin\\\", \\\"Number of Movies\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Production Budget Bin\\\",\\n        \\\"y\\\": \\\"Rotten Tomatoes Rating Bin\\\",\\n        \\\"color\\\": \\\"Number of Movies\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to bin both Production Budget and Rotten Tomatoes Rating into ranges and count movies in each combination. This requires creating categorical bins for both dimensions and aggregating counts. A heatmap visualization (using color encoding for count) would be more appropriate than a scatter plot for showing binned data.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Select relevant columns and filter out rows with missing values\\n    df_filtered = df_movies[['Production Budget', 'Rotten Tomatoes Rating']].copy()\\n    df_filtered = df_filtered[\\n        (df_filtered['Production Budget'].notna()) & \\n        (df_filtered['Rotten Tomatoes Rating'].notna())\\n    ]\\n    \\n    # Create budget bins (in millions for readability)\\n    budget_bins = [0, 1000000, 10000000, 50000000, 100000000, float('inf')]\\n    budget_labels = ['<$1M', '$1M-$10M', '$10M-$50M', '$50M-$100M', '>$100M']\\n    df_filtered['Production Budget Bin'] = pd.cut(\\n        df_filtered['Production Budget'], \\n        bins=budget_bins, \\n        labels=budget_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Create rating bins\\n    rating_bins = [0, 20, 40, 60, 80, 100]\\n    rating_labels = ['0-20', '21-40', '41-60', '61-80', '81-100']\\n    df_filtered['Rotten Tomatoes Rating Bin'] = pd.cut(\\n        df_filtered['Rotten Tomatoes Rating'], \\n        bins=rating_bins, \\n        labels=rating_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Count movies in each bin combination\\n    transformed_df = df_filtered.groupby(\\n        ['Production Budget Bin', 'Rotten Tomatoes Rating Bin'], \\n        observed=True\\n    ).size().reset_index(name='Number of Movies')\\n    \\n    # Convert categorical to string for better display\\n    transformed_df['Production Budget Bin'] = transformed_df['Production Budget Bin'].astype(str)\\n    transformed_df['Rotten Tomatoes Rating Bin'] = transformed_df['Rotten Tomatoes Rating Bin'].astype(str)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n   Number of Movies Production Budget Bin Rotten Tomatoes Rating Bin\\n0                 6                  <$1M                       0-20\\n1                 9                  <$1M                      21-40\\n2                12                  <$1M                      41-60\\n3                19                  <$1M                      61-80\\n4                54                  <$1M                     81-100\\n5                61              $1M-$10M                       0-20\\n6                72              $1M-$10M                      21-40\\n7                58              $1M-$10M                      41-60\\n8               104              $1M-$10M                      61-80\\n9               219              $1M-$10M                     81-100\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"show profit relation to budget ratings bin\\\",\\n    \\\"chart_type\\\": \\\"Heatmap\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Rotten Tomatoes Rating Bin\\\",\\n        \\\"y\\\": \\\"Production Budget Bin\\\",\\n        \\\"color\\\": \\\"Number of Movies\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Calculate profit (Worldwide Gross minus Production Budget) for movies, then bin the Production Budget and Rotten Tomatoes Rating into categorical ranges, and compute the average profit for movies in each combination of budget and rating bins.\\\",\\n    \\\"display_instruction\\\": \\\"Show **average profit** in each **Production Budget** and **Rotten Tomatoes Rating** bin\\\",\\n    \\\"output_fields\\\": [\\\"Production Budget Bin\\\", \\\"Rotten Tomatoes Rating Bin\\\", \\\"Average Profit\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"Rotten Tomatoes Rating Bin\\\",\\n        \\\"y\\\": \\\"Production Budget Bin\\\",\\n        \\\"color\\\": \\\"Average Profit\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    },\\n    \\\"reason\\\": \\\"The user wants to analyze the relationship between profit and the budget/rating bins. This requires calculating profit (Worldwide Gross - Production Budget) and then aggregating it by the budget and rating bins. The chart encodings are swapped to match the user's preference (x=Rating, y=Budget).\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Select relevant columns and filter out rows with missing values\\n    df_filtered = df_movies[['Production Budget', 'Rotten Tomatoes Rating', 'Worldwide Gross']].copy()\\n    df_filtered = df_filtered[\\n        (df_filtered['Production Budget'].notna()) & \\n        (df_filtered['Rotten Tomatoes Rating'].notna()) &\\n        (df_filtered['Worldwide Gross'].notna())\\n    ]\\n    \\n    # Calculate profit\\n    df_filtered['Profit'] = df_filtered['Worldwide Gross'] - df_filtered['Production Budget']\\n    \\n    # Create budget bins (in millions for readability)\\n    budget_bins = [0, 1000000, 10000000, 50000000, 100000000, float('inf')]\\n    budget_labels = ['<$1M', '$1M-$10M', '$10M-$50M', '$50M-$100M', '>$100M']\\n    df_filtered['Production Budget Bin'] = pd.cut(\\n        df_filtered['Production Budget'], \\n        bins=budget_bins, \\n        labels=budget_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Create rating bins\\n    rating_bins = [0, 20, 40, 60, 80, 100]\\n    rating_labels = ['0-20', '21-40', '41-60', '61-80', '81-100']\\n    df_filtered['Rotten Tomatoes Rating Bin'] = pd.cut(\\n        df_filtered['Rotten Tomatoes Rating'], \\n        bins=rating_bins, \\n        labels=rating_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Calculate average profit in each bin combination\\n    transformed_df = df_filtered.groupby(\\n        ['Production Budget Bin', 'Rotten Tomatoes Rating Bin'], \\n        observed=True\\n    )['Profit'].mean().reset_index(name='Average Profit')\\n    \\n    # Convert categorical to string for better display\\n    transformed_df['Production Budget Bin'] = transformed_df['Production Budget Bin'].astype(str)\\n    transformed_df['Rotten Tomatoes Rating Bin'] = transformed_df['Rotten Tomatoes Rating Bin'].astype(str)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"table-37\",\"sourceTableIds\":[\"movies\"],\"instruction\":\"show profit relation to budget ratings bin\",\"displayInstruction\":\"Show **average profit** in each **Production Budget** and **Rotten Tomatoes Rating** bin\",\"chart\":{\"id\":\"chart-1760744581372\",\"chartType\":\"Heatmap\",\"encodingMap\":{\"x\":{\"fieldID\":\"concept-Rotten Tomatoes Rating Bin-1760744520448\",\"sortBy\":\"[\\\"0-20\\\",\\\"21-40\\\",\\\"41-60\\\",\\\"61-80\\\",\\\"81-100\\\"]\"},\"y\":{\"fieldID\":\"concept-Production Budget Bin-1760744338462\",\"sortBy\":\"[\\\"<$1M\\\",\\\"$1M-$10M\\\",\\\"$10M-$50M\\\",\\\"$50M-$100M\\\",\\\">$100M\\\"]\"},\"color\":{\"fieldID\":\"concept-Number of Movies-1760744520448\"},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-37\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-54\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"This code analyzes the relationship between movie **production budgets**, **critical ratings**, and **profitability**:\\n\\n- Filters the dataset to include only movies with complete data for **Production Budget**, **Rotten Tomatoes Rating**, and **Worldwide Gross**\\n- Calculates **Profit** for each movie by subtracting **Production Budget** from **Worldwide Gross**\\n- Creates **Production Budget Bins** to categorize movies into five budget ranges: **<$1M**, **$1M-$10M**, **$10M-$50M**, **$50M-$100M**, and **>$100M**\\n- Creates **Rotten Tomatoes Rating Bins** to categorize movies into five rating ranges: **0-20**, **21-40**, **41-60**, **61-80**, and **81-100**\\n- Groups movies by their **budget bin** and **rating bin** combinations\\n- Calculates the **Average Profit** for each budget-rating combination to reveal profitability patterns across different production scales and critical reception levels\",\"concepts\":[{\"explanation\":\"The net financial return of a movie, calculated as: \\\\[ \\\\text{Profit} = \\\\text{Worldwide\\\\_Gross} - \\\\text{Production\\\\_Budget} \\\\] This represents the total revenue minus the initial investment, indicating whether a movie was financially successful.\",\"field\":\"Profit\"},{\"explanation\":\"This analysis uses a **two-dimensional binning approach** to examine how movie profitability varies across production budget levels and critical reception scores. The model segments movies into categorical bins based on **Production Budget** (five budget tiers from under $1M to over $100M) and **Rotten Tomatoes Rating** (five quality tiers from 0-100), then calculates **Average Profit** within each budget-rating combination. This binning strategy helps identify optimal investment strategies by revealing which budget-quality combinations yield the highest returns. Alternative modeling approaches could include: **multiple linear regression** to model profit as a continuous function of budget and rating, **polynomial regression** to capture non-linear relationships, **interaction effect models** to test whether budget impact varies by rating level, or **quantile regression** to analyze profitability patterns at different profit percentiles rather than just averages.\",\"field\":\"Statistical Analysis\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (movies)\\n\\n## fields\\n\\t*Title -- type: object, values: Silent Movie, 9, Rapa Nui, ..., A Night at the Roxbury, Fighting Tommy Riley, Gridiron Gang, Journey from the Fall\\n\\t*US Gross -- type: float64, values: 0.0, 401.0, 673.0, ..., 403706375.0, 441226247.0, 533345358.0, 760167650.0\\n\\t*Worldwide Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 937499905.0, 976457891.0, 1133027325.0, 1842879955.0\\n\\t*US DVD Sales -- type: float64, values: 13180936.0, 33619971.0, 140689412.0, ..., nan, nan, 46260220.0, 83571732.0\\n\\t*Production Budget -- type: float64, values: 218.0, 1100.0, 23000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\\n\\t*Release Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\\n\\t*MPAA Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\\n\\t*Running Time min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\\n\\t*Distributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\\n\\t*Source -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\\n\\t*Major Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\\n\\t*Creative Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\\n\\t*Director -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\\n\\t*Rotten Tomatoes Rating -- type: float64, values: 1.0, 2.0, nan, ..., nan, nan, nan, nan\\n\\t*IMDB Rating -- type: float64, values: 1.5, 2.0, 2.5, ..., nan, nan, nan, nan\\n\\t*IMDB Votes -- type: float64, values: 18.0, 25.0, 26.0, ..., 237477.0, 417703.0, nan, nan\\n\\n## sample\\n                        Title  US Gross  Worldwide Gross US DVD Sales  Production Budget Release Date MPAA Rating Running Time min Distributor               Source Major Genre         Creative Type Director  Rotten Tomatoes Rating  IMDB Rating  IMDB Votes\\n0              The Land Girls    146083           146083         None            8000000  Jun 12 1998           R             None    Gramercy                 None        None                  None     None                     NaN          6.1      1071.0\\n1      First Love, Last Rites     10876            10876         None             300000  Aug 07 1998           R             None      Strand                 None       Drama                  None     None                     NaN          6.9       207.0\\n2  I Married a Strange Person    203134           203134         None             250000  Aug 28 1998        None             None   Lionsgate                 None      Comedy                  None     None                     NaN          6.8       865.0\\n3        Let's Talk About Sex    373615           373615         None             300000  Sep 11 1998        None             None   Fine Line                 None      Comedy                  None     None                    13.0          NaN         NaN\\n4                        Slam   1009819          1087521         None            1000000  Oct 09 1998           R             None     Trimark  Original Screenplay       Drama  Contemporary Fiction     None                    62.0          3.4       165.0\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_movies):\\n    # Select relevant columns and filter out rows with missing values\\n    df_filtered = df_movies[['Production Budget', 'Rotten Tomatoes Rating', 'Worldwide Gross']].copy()\\n    df_filtered = df_filtered[\\n        (df_filtered['Production Budget'].notna()) & \\n        (df_filtered['Rotten Tomatoes Rating'].notna()) &\\n        (df_filtered['Worldwide Gross'].notna())\\n    ]\\n    \\n    # Calculate profit\\n    df_filtered['Profit'] = df_filtered['Worldwide Gross'] - df_filtered['Production Budget']\\n    \\n    # Create budget bins (in millions for readability)\\n    budget_bins = [0, 1000000, 10000000, 50000000, 100000000, float('inf')]\\n    budget_labels = ['<$1M', '$1M-$10M', '$10M-$50M', '$50M-$100M', '>$100M']\\n    df_filtered['Production Budget Bin'] = pd.cut(\\n        df_filtered['Production Budget'], \\n        bins=budget_bins, \\n        labels=budget_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Create rating bins\\n    rating_bins = [0, 20, 40, 60, 80, 100]\\n    rating_labels = ['0-20', '21-40', '41-60', '61-80', '81-100']\\n    df_filtered['Rotten Tomatoes Rating Bin'] = pd.cut(\\n        df_filtered['Rotten Tomatoes Rating'], \\n        bins=rating_bins, \\n        labels=rating_labels,\\n        include_lowest=True\\n    )\\n    \\n    # Calculate average profit in each bin combination\\n    transformed_df = df_filtered.groupby(\\n        ['Production Budget Bin', 'Rotten Tomatoes Rating Bin'], \\n        observed=True\\n    )['Profit'].mean().reset_index(name='Average Profit')\\n    \\n    # Convert categorical to string for better display\\n    transformed_df['Production Budget Bin'] = transformed_df['Production Budget Bin'].astype(str)\\n    transformed_df['Rotten Tomatoes Rating Bin'] = transformed_df['Rotten Tomatoes Rating Bin'].astype(str)\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\nThis code analyzes the relationship between movie **production budgets**, **critical ratings**, and **profitability**:\\n\\n- Filters the dataset to include only movies with complete data for **Production Budget**, **Rotten Tomatoes Rating**, and **Worldwide Gross**\\n- Calculates **Profit** for each movie by subtracting **Production Budget** from **Worldwide Gross**\\n- Creates **Production Budget Bins** to categorize movies into five budget ranges: **<$1M**, **$1M-$10M**, **$10M-$50M**, **$50M-$100M**, and **>$100M**\\n- Creates **Rotten Tomatoes Rating Bins** to categorize movies into five rating ranges: **0-20**, **21-40**, **41-60**, **61-80**, and **81-100**\\n- Groups movies by their **budget bin** and **rating bin** combinations\\n- Calculates the **Average Profit** for each budget-rating combination to reveal profitability patterns across different production scales and critical reception levels\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"Profit\\\",\\n        \\\"explanation\\\": \\\"The net financial return of a movie, calculated as: \\\\\\\\[ \\\\\\\\text{Profit} = \\\\\\\\text{Worldwide\\\\\\\\_Gross} - \\\\\\\\text{Production\\\\\\\\_Budget} \\\\\\\\] This represents the total revenue minus the initial investment, indicating whether a movie was financially successful.\\\"\\n    },\\n    {\\n        \\\"field\\\": \\\"Statistical Analysis\\\",\\n        \\\"explanation\\\": \\\"This analysis uses a **two-dimensional binning approach** to examine how movie profitability varies across production budget levels and critical reception scores. The model segments movies into categorical bins based on **Production Budget** (five budget tiers from under $1M to over $100M) and **Rotten Tomatoes Rating** (five quality tiers from 0-100), then calculates **Average Profit** within each budget-rating combination. This binning strategy helps identify optimal investment strategies by revealing which budget-quality combinations yield the highest returns. Alternative modeling approaches could include: **multiple linear regression** to model profit as a continuous function of budget and rating, **polynomial regression** to capture non-linear relationships, **interaction effect models** to test whether budget impact varies by rating level, or **quantile regression** to analyze profitability patterns at different profit percentiles rather than just averages.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"}],\"charts\":[{\"id\":\"chart-1760744573683\",\"chartType\":\"Heatmap\",\"encodingMap\":{\"x\":{\"fieldID\":\"concept-Rotten Tomatoes Rating Bin-1760744520448\",\"sortBy\":\"[\\\"0-20\\\",\\\"21-40\\\",\\\"41-60\\\",\\\"61-80\\\",\\\"81-100\\\"]\"},\"y\":{\"fieldID\":\"concept-Production Budget Bin-1760744338462\",\"sortBy\":\"[\\\"<$1M\\\",\\\"$1M-$10M\\\",\\\"$10M-$50M\\\",\\\"$50M-$100M\\\",\\\">$100M\\\"]\"},\"color\":{\"fieldID\":\"concept-Average Profit-1760744582466\"},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-54\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760744520082\",\"chartType\":\"Heatmap\",\"encodingMap\":{\"x\":{\"fieldID\":\"concept-Rotten Tomatoes Rating Bin-1760744520448\",\"sortBy\":\"[\\\"0-20\\\",\\\"21-40\\\",\\\"41-60\\\",\\\"61-80\\\",\\\"81-100\\\"]\"},\"y\":{\"fieldID\":\"concept-Production Budget Bin-1760744338462\",\"sortBy\":\"[\\\"<$1M\\\",\\\"$1M-$10M\\\",\\\"$10M-$50M\\\",\\\"$50M-$100M\\\",\\\">$100M\\\"]\"},\"color\":{\"fieldID\":\"concept-Number of Movies-1760744520448\"},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-37\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760744464684\",\"chartType\":\"Scatter Plot\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--movies--Production Budget\"},\"y\":{\"fieldID\":\"original--movies--Rotten Tomatoes Rating\"},\"color\":{\"channel\":\"color\",\"bin\":false},\"size\":{\"channel\":\"size\",\"bin\":false},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-456490\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760743804092\",\"chartType\":\"Bar Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--movies--Director\"},\"y\":{\"fieldID\":\"concept-Genre_Profit-1760743809438\"},\"color\":{\"fieldID\":\"original--movies--Major Genre\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-89\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760743768741\",\"chartType\":\"Bar Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--movies--Director\"},\"y\":{\"fieldID\":\"concept-Profit-1760742653681\"},\"color\":{\"fieldID\":\"original--movies--Title\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-770727\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760743347871\",\"chartType\":\"Bar Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--movies--Title\"},\"y\":{\"fieldID\":\"concept-Profit-1760742653681\"},\"color\":{\"fieldID\":\"original--movies--Major Genre\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-77\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760743154847\",\"chartType\":\"Bar Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--movies--Title\"},\"y\":{\"fieldID\":\"concept-Profit-1760742653681\"},\"color\":{},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-78\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760742454293\",\"chartType\":\"Scatter Plot\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--movies--Production Budget\"},\"y\":{\"fieldID\":\"original--movies--Worldwide Gross\"},\"color\":{\"fieldID\":\"original--movies--Title\"},\"size\":{\"channel\":\"size\",\"bin\":false},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"movies\",\"saved\":false,\"source\":\"user\",\"unread\":false}],\"conceptShelfItems\":[{\"id\":\"concept-Average Profit-1760744582466\",\"name\":\"Average Profit\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-Number of Movies-1760744520448\",\"name\":\"Number of Movies\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-Rotten Tomatoes Rating Bin-1760744520448\",\"name\":\"Rotten Tomatoes Rating Bin\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-Production Budget Bin-1760744338462\",\"name\":\"Production Budget Bin\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-Genre_Profit-1760743809438\",\"name\":\"Genre_Profit\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-Total_Director_Profit-1760743773495\",\"name\":\"Total_Director_Profit\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-Profit-1760742653681\",\"name\":\"Profit\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"original--movies--Title\",\"name\":\"Title\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--US Gross\",\"name\":\"US Gross\",\"type\":\"integer\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--Worldwide Gross\",\"name\":\"Worldwide Gross\",\"type\":\"number\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--US DVD Sales\",\"name\":\"US DVD Sales\",\"type\":\"integer\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--Production Budget\",\"name\":\"Production Budget\",\"type\":\"integer\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--Release Date\",\"name\":\"Release Date\",\"type\":\"date\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--MPAA Rating\",\"name\":\"MPAA Rating\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--Running Time min\",\"name\":\"Running Time min\",\"type\":\"integer\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--Distributor\",\"name\":\"Distributor\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--Source\",\"name\":\"Source\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--Major Genre\",\"name\":\"Major Genre\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--Creative Type\",\"name\":\"Creative Type\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--Director\",\"name\":\"Director\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--Rotten Tomatoes Rating\",\"name\":\"Rotten Tomatoes Rating\",\"type\":\"integer\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--IMDB Rating\",\"name\":\"IMDB Rating\",\"type\":\"date\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"},{\"id\":\"original--movies--IMDB Votes\",\"name\":\"IMDB Votes\",\"type\":\"integer\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"movies\"}],\"messages\":[{\"timestamp\":1760831191070,\"type\":\"success\",\"component\":\"data formulator\",\"value\":\"Successfully loaded Movies\"}],\"displayedMessageIdx\":0,\"focusedTableId\":\"table-89\",\"focusedChartId\":\"chart-1760743804092\",\"viewMode\":\"report\",\"chartSynthesisInProgress\":[],\"config\":{\"formulateTimeoutSeconds\":60,\"maxRepairAttempts\":1,\"defaultChartWidth\":300,\"defaultChartHeight\":300},\"agentActions\":[],\"dataCleanBlocks\":[],\"cleanInProgress\":false,\"generatedReports\":[{\"id\":\"report-1760831318093-4967\",\"content\":\"# Bigger Budgets Win with Great Reviews\\n\\nLow-budget films struggle regardless of reviews, averaging just $1.3M profit even with poor ratings. The real story emerges with blockbusters: films budgeted over $100M earn an average of $516M profit when they achieve 81-100% on Rotten Tomatoes—a staggering return that dwarfs all other categories.\\n\\n[IMAGE(chart-1760744573683)]\\n\\nMid-budget films ($10M-$50M) show steady but modest profits across all rating tiers, rarely exceeding $30M in average returns. The data reveals a clear pattern: critical acclaim matters most when paired with substantial production investment.\\n\\n**In summary**, the film industry's most profitable strategy combines massive budgets with quality execution—blockbusters that earn top critic scores generate extraordinary returns, while smaller productions face profit ceilings regardless of critical reception.\",\"style\":\"short note\",\"selectedChartIds\":[\"chart-1760744573683\"],\"createdAt\":1760831325401},{\"id\":\"report-1760831241705-9562\",\"content\":\"# Top Directors Dominate with Action & Adventure Films\\n\\nSteven Spielberg leads all directors with over $7 billion in total profit, driven primarily by action ($2.3B) and drama ($2.2B) films. James Cameron follows at $5.1B, focusing almost exclusively on action blockbusters.\\n\\n[IMAGE(chart-1760743804092)]\\n\\nAdventure films emerge as the most profitable genre across multiple directors—Chris Columbus, George Lucas, and Peter Jackson each generated $3B+ primarily from adventure franchises. Meanwhile, directors like Michael Bay and Gore Verbinski found success mixing action with adventure content.\\n\\n**In summary**, the most profitable directors concentrate on action and adventure genres, with Spielberg's genre diversity being the exception among top earners. This suggests blockbuster franchises in these genres offer the most reliable path to commercial success.\",\"style\":\"short note\",\"selectedChartIds\":[\"chart-1760743804092\"],\"createdAt\":1760831249446},{\"id\":\"report-1760831215537-1231\",\"content\":\"# Movie Magic: When Big Budgets Pay Off (and When They Don't)\\n\\nEver wonder if spending more money guarantees box office gold? The data tells a fascinating story about Hollywood's biggest gambles.\\n\\n[IMAGE(chart-1760742454293)]\\n\\nLooking at the relationship between production budgets and worldwide gross, there's a clear trend: **bigger budgets *can* lead to bigger returns**, but it's far from guaranteed. The sweet spot appears to be around $200-250M, where blockbusters like *Avatar* ($2.77B worldwide) dominate. However, the chart reveals something crucial—**most films cluster in the lower-left corner**, suggesting that moderate budgets between $25-100M are the industry standard, though they rarely break the billion-dollar barrier.\\n\\n[IMAGE(chart-1760743347871)]\\n\\nWhen we examine the **top performers by genre**, the winners become crystal clear. *Avatar* leads the pack with an astounding $2.53B profit, followed by adventure franchises like *Jurassic Park* and *The Lord of the Rings*. Action and adventure films dominate profitability, while genres like comedy, horror, and romantic comedies show more modest—but still impressive—returns in the $300-450M range. Musicals like *The Sound of Music* prove timeless appeal still pays dividends.\\n\\n**In summary**, while throwing money at a film doesn't guarantee success, the blockbuster strategy works when executed well—particularly for action and adventure franchises. The real question: *Are mid-budget films becoming an endangered species in modern Hollywood?*\",\"style\":\"social post\",\"selectedChartIds\":[\"chart-1760743347871\",\"chart-1760742454293\"],\"createdAt\":1760831228624}],\"currentReport\":{\"id\":\"report-1760750575650-2619\",\"content\":\"# Hollywood's Billion-Dollar Hitmakers\\n\\n*Avatar* stands alone—earning over $2.5B in profit, dwarfing all competition. Action and Adventure films dominate the most profitable titles, with franchises like *Jurassic Park*, *The Dark Knight*, and *Lord of the Rings* proving blockbuster formulas work.\\n\\n<img src=\\\"blob:http://localhost:5173/de49db0f-5fad-4c15-b1b9-cda87ef53107\\\" alt=\\\"Chart\\\" width=\\\"3384\\\" height=\\\"1728\\\" />\\n\\nSteven Spielberg leads all directors with $7.2B in total profit across his career, showcasing remarkable consistency with hits spanning decades—from *Jurassic Park* to *E.T.* His nearest competitors trail by billions, underlining his unmatched commercial impact.\\n\\n<img src=\\\"blob:http://localhost:5173/d7a91ff7-1d87-4299-bcd7-f9b69558cac7\\\" alt=\\\"Chart\\\" width=\\\"2764\\\" height=\\\"1712\\\" />\\n\\n**In summary**, mega-budget Action and Adventure films generate extraordinary returns when they succeed, and a handful of elite directors—led by Spielberg—have mastered the formula for sustained box office dominance.\",\"style\":\"short note\",\"selectedChartIds\":[\"chart-1760743347871\",\"chart-1760743768741\"],\"chartImages\":{},\"createdAt\":1760750584189,\"title\":\"Report - 10/17/2025\"},\"activeChallenges\":[],\"agentWorkInProgress\":[],\"_persist\":{\"version\":-1,\"rehydrated\":true}}"
  },
  {
    "path": "public/df_stock_prices_live.json",
    "content": "{\"tables\":[{\"id\":\"history\",\"displayId\":\"stock-hist\",\"names\":[\"symbol\",\"date\",\"open\",\"high\",\"low\",\"close\",\"volume\",\"fetched_at\"],\"metadata\":{\"symbol\":{\"type\":\"string\",\"semanticType\":\"String\"},\"date\":{\"type\":\"date\",\"semanticType\":\"Date\"},\"open\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"high\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"low\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"close\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"volume\":{\"type\":\"integer\",\"semanticType\":\"Number\"},\"fetched_at\":{\"type\":\"date\",\"semanticType\":\"DateTime\"}},\"rows\":[{\"symbol\":\"AAPL\",\"date\":\"2025-07-31\",\"open\":208.05,\"high\":209.4,\"low\":206.72,\"close\":207.13,\"volume\":80698400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-01\",\"open\":210.43,\"high\":213.13,\"low\":201.08,\"close\":201.95,\"volume\":104434500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-04\",\"open\":204.08,\"high\":207.44,\"low\":201.26,\"close\":202.92,\"volume\":75109300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-05\",\"open\":202.97,\"high\":204.91,\"low\":201.74,\"close\":202.49,\"volume\":44155100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-06\",\"open\":205.2,\"high\":214.93,\"low\":205.16,\"close\":212.8,\"volume\":108483100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-07\",\"open\":218.42,\"high\":220.39,\"low\":216.12,\"close\":219.57,\"volume\":90224800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-08\",\"open\":220.37,\"high\":230.51,\"low\":218.79,\"close\":228.87,\"volume\":113854000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-11\",\"open\":227.7,\"high\":229.34,\"low\":224.54,\"close\":226.96,\"volume\":61806100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-12\",\"open\":227.79,\"high\":230.58,\"low\":226.85,\"close\":229.43,\"volume\":55626200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-13\",\"open\":230.85,\"high\":234.77,\"low\":230.21,\"close\":233.1,\"volume\":69878500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-14\",\"open\":233.83,\"high\":234.89,\"low\":230.63,\"close\":232.55,\"volume\":51916300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-15\",\"open\":233.77,\"high\":234.05,\"low\":229.12,\"close\":231.37,\"volume\":56038700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-18\",\"open\":231.48,\"high\":232.89,\"low\":229.89,\"close\":230.67,\"volume\":37476200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-19\",\"open\":231.06,\"high\":232.64,\"low\":229.13,\"close\":230.34,\"volume\":39402600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-20\",\"open\":229.76,\"high\":230.25,\"low\":225.55,\"close\":225.79,\"volume\":42263900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-21\",\"open\":226.05,\"high\":226.3,\"low\":223.56,\"close\":224.68,\"volume\":30621200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-22\",\"open\":225.95,\"high\":228.87,\"low\":225.19,\"close\":227.54,\"volume\":42477800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-25\",\"open\":226.26,\"high\":229.08,\"low\":226.01,\"close\":226.94,\"volume\":30983100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-26\",\"open\":226.65,\"high\":229.27,\"low\":224.47,\"close\":229.09,\"volume\":54575100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-27\",\"open\":228.39,\"high\":230.68,\"low\":228.04,\"close\":230.27,\"volume\":31259500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-28\",\"open\":230.6,\"high\":233.18,\"low\":229.12,\"close\":232.33,\"volume\":38074700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-08-29\",\"open\":232.28,\"high\":233.15,\"low\":231.15,\"close\":231.92,\"volume\":39418400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-02\",\"open\":229.03,\"high\":230.63,\"low\":226.75,\"close\":229.5,\"volume\":44075600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-03\",\"open\":236.98,\"high\":238.62,\"low\":234.13,\"close\":238.24,\"volume\":66427800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-04\",\"open\":238.22,\"high\":239.67,\"low\":236.51,\"close\":239.55,\"volume\":47549400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-05\",\"open\":239.77,\"high\":241.09,\"low\":238.26,\"close\":239.46,\"volume\":54870400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-08\",\"open\":239.07,\"high\":239.92,\"low\":236.11,\"close\":237.65,\"volume\":48999500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-09\",\"open\":236.77,\"high\":238.55,\"low\":233.13,\"close\":234.12,\"volume\":66313900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-10\",\"open\":231.97,\"high\":232.19,\"low\":225.73,\"close\":226.57,\"volume\":83440800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-11\",\"open\":226.66,\"high\":230.23,\"low\":226.43,\"close\":229.81,\"volume\":50208600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-12\",\"open\":229,\"high\":234.28,\"low\":228.8,\"close\":233.84,\"volume\":55824200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-15\",\"open\":236.77,\"high\":237.96,\"low\":234.8,\"close\":236.47,\"volume\":42699500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-16\",\"open\":236.95,\"high\":240.99,\"low\":236.09,\"close\":237.92,\"volume\":63421100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-17\",\"open\":238.74,\"high\":239.87,\"low\":237.5,\"close\":238.76,\"volume\":46508000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-18\",\"open\":239.74,\"high\":240.97,\"low\":236.42,\"close\":237.65,\"volume\":44249600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-19\",\"open\":241,\"high\":246.06,\"low\":239.98,\"close\":245.26,\"volume\":163741300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-22\",\"open\":248.06,\"high\":256.39,\"low\":247.88,\"close\":255.83,\"volume\":105517400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-23\",\"open\":255.63,\"high\":257.09,\"low\":253.33,\"close\":254.18,\"volume\":60275200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-24\",\"open\":254.97,\"high\":255.49,\"low\":250.8,\"close\":252.07,\"volume\":42303700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-25\",\"open\":252.96,\"high\":256.92,\"low\":251.47,\"close\":256.62,\"volume\":55202100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-26\",\"open\":253.85,\"high\":257.35,\"low\":253.53,\"close\":255.21,\"volume\":46076300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-29\",\"open\":254.31,\"high\":254.75,\"low\":252.76,\"close\":254.18,\"volume\":40127700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-09-30\",\"open\":254.61,\"high\":255.67,\"low\":252.86,\"close\":254.38,\"volume\":37704300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-01\",\"open\":254.79,\"high\":258.54,\"low\":254.68,\"close\":255.2,\"volume\":48713900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-02\",\"open\":256.33,\"high\":257.93,\"low\":253.9,\"close\":256.88,\"volume\":42630200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-03\",\"open\":254.42,\"high\":258.99,\"low\":253.7,\"close\":257.77,\"volume\":49155600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-06\",\"open\":257.74,\"high\":258.82,\"low\":254.8,\"close\":256.44,\"volume\":44664100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-07\",\"open\":256.56,\"high\":257.15,\"low\":255.18,\"close\":256.23,\"volume\":31955800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-08\",\"open\":256.27,\"high\":258.27,\"low\":255.86,\"close\":257.81,\"volume\":36496900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-09\",\"open\":257.56,\"high\":257.75,\"low\":252.89,\"close\":253.79,\"volume\":38322000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-10\",\"open\":254.69,\"high\":256.13,\"low\":243.76,\"close\":245.03,\"volume\":61999100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-13\",\"open\":249.14,\"high\":249.45,\"low\":245.32,\"close\":247.42,\"volume\":38142900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-14\",\"open\":246.36,\"high\":248.61,\"low\":244.46,\"close\":247.53,\"volume\":35478000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-15\",\"open\":249.25,\"high\":251.58,\"low\":247.23,\"close\":249.1,\"volume\":33893600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-16\",\"open\":248.01,\"high\":248.8,\"low\":244.89,\"close\":247.21,\"volume\":39777000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-17\",\"open\":247.78,\"high\":253.13,\"low\":247.03,\"close\":252.05,\"volume\":49147000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-20\",\"open\":255.64,\"high\":264.12,\"low\":255.38,\"close\":261.99,\"volume\":90483000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-21\",\"open\":261.63,\"high\":265.03,\"low\":261.58,\"close\":262.52,\"volume\":46695900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-22\",\"open\":262.4,\"high\":262.6,\"low\":255.18,\"close\":258.2,\"volume\":45015300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-23\",\"open\":259.69,\"high\":260.37,\"low\":257.76,\"close\":259.33,\"volume\":32754900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-24\",\"open\":260.94,\"high\":263.87,\"low\":258.93,\"close\":262.57,\"volume\":38253700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-27\",\"open\":264.62,\"high\":268.86,\"low\":264.39,\"close\":268.55,\"volume\":44888200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-28\",\"open\":268.73,\"high\":269.63,\"low\":267.89,\"close\":268.74,\"volume\":41534800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-29\",\"open\":269.02,\"high\":271.15,\"low\":266.85,\"close\":269.44,\"volume\":51086700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-30\",\"open\":271.73,\"high\":273.87,\"low\":268.22,\"close\":271.14,\"volume\":69886500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-10-31\",\"open\":276.72,\"high\":277.05,\"low\":268.9,\"close\":270.11,\"volume\":86167100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-03\",\"open\":270.16,\"high\":270.59,\"low\":265.99,\"close\":268.79,\"volume\":50194600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-04\",\"open\":268.07,\"high\":271.23,\"low\":267.36,\"close\":269.78,\"volume\":49274800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-05\",\"open\":268.35,\"high\":271.44,\"low\":266.67,\"close\":269.88,\"volume\":43683100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-06\",\"open\":267.63,\"high\":273.14,\"low\":267.63,\"close\":269.51,\"volume\":51204000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-07\",\"open\":269.54,\"high\":272.03,\"low\":266.51,\"close\":268.21,\"volume\":48227400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-10\",\"open\":268.96,\"high\":273.73,\"low\":267.46,\"close\":269.43,\"volume\":41312400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-11\",\"open\":269.81,\"high\":275.91,\"low\":269.8,\"close\":275.25,\"volume\":46208300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-12\",\"open\":275,\"high\":275.73,\"low\":271.7,\"close\":273.47,\"volume\":48398000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-13\",\"open\":274.11,\"high\":276.7,\"low\":272.09,\"close\":272.95,\"volume\":49602800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-14\",\"open\":271.05,\"high\":275.96,\"low\":269.6,\"close\":272.41,\"volume\":47431300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-17\",\"open\":268.82,\"high\":270.49,\"low\":265.73,\"close\":267.46,\"volume\":45018300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-18\",\"open\":269.99,\"high\":270.71,\"low\":265.32,\"close\":267.44,\"volume\":45677300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-19\",\"open\":265.53,\"high\":272.21,\"low\":265.5,\"close\":268.56,\"volume\":40424500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-20\",\"open\":270.83,\"high\":275.43,\"low\":265.92,\"close\":266.25,\"volume\":45823600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-21\",\"open\":265.95,\"high\":273.33,\"low\":265.67,\"close\":271.49,\"volume\":59030800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-24\",\"open\":270.9,\"high\":277,\"low\":270.9,\"close\":275.92,\"volume\":65585800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-25\",\"open\":275.27,\"high\":280.38,\"low\":275.25,\"close\":276.97,\"volume\":46914200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-26\",\"open\":276.96,\"high\":279.53,\"low\":276.63,\"close\":277.55,\"volume\":33431400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-11-28\",\"open\":277.26,\"high\":279,\"low\":275.99,\"close\":278.85,\"volume\":20135600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-01\",\"open\":278.01,\"high\":283.42,\"low\":276.14,\"close\":283.1,\"volume\":46587700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-02\",\"open\":283,\"high\":287.4,\"low\":282.63,\"close\":286.19,\"volume\":53669500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-03\",\"open\":286.2,\"high\":288.62,\"low\":283.3,\"close\":284.15,\"volume\":43538700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-04\",\"open\":284.1,\"high\":284.73,\"low\":278.59,\"close\":280.7,\"volume\":43989100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-05\",\"open\":280.54,\"high\":281.14,\"low\":278.05,\"close\":278.78,\"volume\":47265800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-08\",\"open\":278.13,\"high\":279.67,\"low\":276.15,\"close\":277.89,\"volume\":38211800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-09\",\"open\":278.16,\"high\":280.03,\"low\":276.92,\"close\":277.18,\"volume\":32193300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-10\",\"open\":277.75,\"high\":279.75,\"low\":276.44,\"close\":278.78,\"volume\":33038300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-11\",\"open\":279.1,\"high\":279.59,\"low\":273.81,\"close\":278.03,\"volume\":33248000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-12\",\"open\":277.9,\"high\":279.22,\"low\":276.82,\"close\":278.28,\"volume\":39532900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-15\",\"open\":280.15,\"high\":280.15,\"low\":272.84,\"close\":274.11,\"volume\":50409100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-16\",\"open\":272.82,\"high\":275.5,\"low\":271.79,\"close\":274.61,\"volume\":37648600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-17\",\"open\":275.01,\"high\":276.16,\"low\":271.64,\"close\":271.84,\"volume\":50138700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-18\",\"open\":273.61,\"high\":273.63,\"low\":266.95,\"close\":272.19,\"volume\":51630700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-19\",\"open\":272.15,\"high\":274.6,\"low\":269.9,\"close\":273.67,\"volume\":144632000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-22\",\"open\":272.86,\"high\":273.88,\"low\":270.51,\"close\":270.97,\"volume\":36571800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-23\",\"open\":270.84,\"high\":272.5,\"low\":269.56,\"close\":272.36,\"volume\":29642000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-24\",\"open\":272.34,\"high\":275.43,\"low\":272.2,\"close\":273.81,\"volume\":17910600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-26\",\"open\":274.16,\"high\":275.37,\"low\":272.86,\"close\":273.4,\"volume\":21521800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-29\",\"open\":272.69,\"high\":274.36,\"low\":272.35,\"close\":273.76,\"volume\":23715200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-30\",\"open\":272.81,\"high\":274.08,\"low\":272.28,\"close\":273.08,\"volume\":22139600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2025-12-31\",\"open\":273.06,\"high\":273.68,\"low\":271.75,\"close\":271.86,\"volume\":27293600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-02\",\"open\":272.26,\"high\":277.84,\"low\":269,\"close\":271.01,\"volume\":37838100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-05\",\"open\":270.64,\"high\":271.51,\"low\":266.14,\"close\":267.26,\"volume\":45647200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-06\",\"open\":267,\"high\":267.55,\"low\":262.12,\"close\":262.36,\"volume\":52352100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-07\",\"open\":263.2,\"high\":263.68,\"low\":259.81,\"close\":260.33,\"volume\":48309800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-08\",\"open\":257.02,\"high\":259.29,\"low\":255.7,\"close\":259.04,\"volume\":50419300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-09\",\"open\":259.08,\"high\":260.21,\"low\":256.22,\"close\":259.37,\"volume\":39997000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-12\",\"open\":259.16,\"high\":261.3,\"low\":256.8,\"close\":260.25,\"volume\":45263800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-13\",\"open\":258.72,\"high\":261.81,\"low\":258.39,\"close\":261.05,\"volume\":45730800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-14\",\"open\":259.49,\"high\":261.82,\"low\":256.71,\"close\":259.96,\"volume\":40019400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-15\",\"open\":260.65,\"high\":261.04,\"low\":257.05,\"close\":258.21,\"volume\":39388600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-16\",\"open\":257.9,\"high\":258.9,\"low\":254.93,\"close\":255.53,\"volume\":72142800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-20\",\"open\":252.73,\"high\":254.79,\"low\":243.42,\"close\":246.7,\"volume\":80267500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-21\",\"open\":248.7,\"high\":251.56,\"low\":245.18,\"close\":247.65,\"volume\":54641700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-22\",\"open\":249.2,\"high\":251,\"low\":248.15,\"close\":248.35,\"volume\":39708300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-23\",\"open\":247.32,\"high\":249.41,\"low\":244.68,\"close\":248.04,\"volume\":41689000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AAPL\",\"date\":\"2026-01-26\",\"open\":251.48,\"high\":256.56,\"low\":249.8,\"close\":255.41,\"volume\":55857900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-07-31\",\"open\":235.77,\"high\":236.53,\"low\":231.4,\"close\":234.11,\"volume\":104357300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-01\",\"open\":217.21,\"high\":220.44,\"low\":212.8,\"close\":214.75,\"volume\":122258800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-04\",\"open\":217.4,\"high\":217.44,\"low\":211.42,\"close\":211.65,\"volume\":77890100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-05\",\"open\":213.05,\"high\":216.3,\"low\":212.87,\"close\":213.75,\"volume\":51505100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-06\",\"open\":214.7,\"high\":222.65,\"low\":213.74,\"close\":222.31,\"volume\":54823000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-07\",\"open\":221,\"high\":226.22,\"low\":220.82,\"close\":223.13,\"volume\":40603500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-08\",\"open\":223.14,\"high\":223.8,\"low\":221.88,\"close\":222.69,\"volume\":32970500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-11\",\"open\":221.78,\"high\":223.05,\"low\":220.4,\"close\":221.3,\"volume\":31646200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-12\",\"open\":222.23,\"high\":223.5,\"low\":219.05,\"close\":221.47,\"volume\":37185800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-13\",\"open\":222,\"high\":224.92,\"low\":222,\"close\":224.56,\"volume\":36508300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-14\",\"open\":227.4,\"high\":233.11,\"low\":227.02,\"close\":230.98,\"volume\":61545800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-15\",\"open\":232.58,\"high\":234.08,\"low\":229.81,\"close\":231.03,\"volume\":39649200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-18\",\"open\":230.23,\"high\":231.91,\"low\":228.33,\"close\":231.49,\"volume\":25248900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-19\",\"open\":230.09,\"high\":230.53,\"low\":227.12,\"close\":228.01,\"volume\":29891000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-20\",\"open\":227.12,\"high\":227.27,\"low\":220.92,\"close\":223.81,\"volume\":36604300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-21\",\"open\":222.65,\"high\":222.78,\"low\":220.5,\"close\":221.95,\"volume\":32140500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-22\",\"open\":222.79,\"high\":229.14,\"low\":220.82,\"close\":228.84,\"volume\":37315300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-25\",\"open\":227.35,\"high\":229.6,\"low\":227.31,\"close\":227.94,\"volume\":22633700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-26\",\"open\":227.11,\"high\":229,\"low\":226.02,\"close\":228.71,\"volume\":26105400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-27\",\"open\":228.57,\"high\":229.87,\"low\":227.81,\"close\":229.12,\"volume\":21254500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-28\",\"open\":229.01,\"high\":232.71,\"low\":228.02,\"close\":231.6,\"volume\":33679600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-08-29\",\"open\":231.32,\"high\":231.81,\"low\":228.16,\"close\":229,\"volume\":26199200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-02\",\"open\":223.52,\"high\":226.17,\"low\":221.83,\"close\":225.34,\"volume\":38843900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-03\",\"open\":225.21,\"high\":227.17,\"low\":224.36,\"close\":225.99,\"volume\":29223100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-04\",\"open\":231.19,\"high\":235.77,\"low\":230.78,\"close\":235.68,\"volume\":59391800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-05\",\"open\":235.19,\"high\":236,\"low\":231.93,\"close\":232.33,\"volume\":36721800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-08\",\"open\":234.94,\"high\":237.6,\"low\":233.75,\"close\":235.84,\"volume\":33947100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-09\",\"open\":236.36,\"high\":238.85,\"low\":235.08,\"close\":238.24,\"volume\":27033800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-10\",\"open\":237.52,\"high\":237.68,\"low\":229.1,\"close\":230.33,\"volume\":60907700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-11\",\"open\":231.49,\"high\":231.53,\"low\":229.34,\"close\":229.95,\"volume\":37485600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-12\",\"open\":230.35,\"high\":230.79,\"low\":226.29,\"close\":228.15,\"volume\":38496200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-15\",\"open\":230.63,\"high\":233.73,\"low\":230.32,\"close\":231.43,\"volume\":33243300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-16\",\"open\":232.94,\"high\":235.9,\"low\":232.23,\"close\":234.05,\"volume\":38203900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-17\",\"open\":233.77,\"high\":234.3,\"low\":228.71,\"close\":231.62,\"volume\":42815200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-18\",\"open\":232.5,\"high\":233.48,\"low\":228.79,\"close\":231.23,\"volume\":37931700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-19\",\"open\":232.37,\"high\":234.16,\"low\":229.7,\"close\":231.48,\"volume\":97943200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-22\",\"open\":230.56,\"high\":230.57,\"low\":227.51,\"close\":227.63,\"volume\":45914500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-23\",\"open\":227.83,\"high\":227.86,\"low\":220.07,\"close\":220.71,\"volume\":70956200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-24\",\"open\":224.15,\"high\":224.56,\"low\":219.45,\"close\":220.21,\"volume\":49509000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-25\",\"open\":220.06,\"high\":220.67,\"low\":216.47,\"close\":218.15,\"volume\":52226300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-26\",\"open\":219.08,\"high\":221.05,\"low\":218.02,\"close\":219.78,\"volume\":41650100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-29\",\"open\":220.08,\"high\":222.6,\"low\":219.3,\"close\":222.17,\"volume\":44259200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-09-30\",\"open\":222.03,\"high\":222.24,\"low\":217.89,\"close\":219.57,\"volume\":48396400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-01\",\"open\":217.36,\"high\":222.15,\"low\":216.61,\"close\":220.63,\"volume\":43933800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-02\",\"open\":221.01,\"high\":222.81,\"low\":218.95,\"close\":222.41,\"volume\":41258600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-03\",\"open\":223.44,\"high\":224.2,\"low\":219.34,\"close\":219.51,\"volume\":43639000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-06\",\"open\":221,\"high\":221.73,\"low\":216.03,\"close\":220.9,\"volume\":43690900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-07\",\"open\":220.88,\"high\":222.89,\"low\":220.17,\"close\":221.78,\"volume\":31194700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-08\",\"open\":222.92,\"high\":226.73,\"low\":221.19,\"close\":225.22,\"volume\":46686000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-09\",\"open\":225,\"high\":228.21,\"low\":221.75,\"close\":227.74,\"volume\":46412100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-10\",\"open\":226.21,\"high\":228.25,\"low\":216,\"close\":216.37,\"volume\":72367500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-13\",\"open\":217.7,\"high\":220.68,\"low\":217.04,\"close\":220.07,\"volume\":37809700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-14\",\"open\":215.56,\"high\":219.32,\"low\":212.6,\"close\":216.39,\"volume\":45665600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-15\",\"open\":216.62,\"high\":217.71,\"low\":212.66,\"close\":215.57,\"volume\":45909500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-16\",\"open\":215.67,\"high\":218.59,\"low\":212.81,\"close\":214.47,\"volume\":42414600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-17\",\"open\":214.56,\"high\":214.8,\"low\":211.03,\"close\":213.04,\"volume\":45986900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-20\",\"open\":213.88,\"high\":216.69,\"low\":213.59,\"close\":216.48,\"volume\":38882800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-21\",\"open\":218.43,\"high\":223.32,\"low\":217.99,\"close\":222.03,\"volume\":50494600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-22\",\"open\":219.3,\"high\":220.01,\"low\":216.52,\"close\":217.95,\"volume\":44308500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-23\",\"open\":219,\"high\":221.3,\"low\":218.18,\"close\":221.09,\"volume\":31540000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-24\",\"open\":221.97,\"high\":225.4,\"low\":221.9,\"close\":224.21,\"volume\":38685100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-27\",\"open\":227.66,\"high\":228.4,\"low\":225.54,\"close\":226.97,\"volume\":38267000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-28\",\"open\":228.22,\"high\":231.49,\"low\":226.21,\"close\":229.25,\"volume\":47100000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-29\",\"open\":231.67,\"high\":232.82,\"low\":227.76,\"close\":230.3,\"volume\":52036200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-30\",\"open\":227.06,\"high\":228.44,\"low\":222.75,\"close\":222.86,\"volume\":102252900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-10-31\",\"open\":250.1,\"high\":250.5,\"low\":243.98,\"close\":244.22,\"volume\":166340800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-03\",\"open\":255.36,\"high\":258.6,\"low\":252.9,\"close\":254,\"volume\":95997800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-04\",\"open\":250.38,\"high\":257.01,\"low\":248.66,\"close\":249.32,\"volume\":51546300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-05\",\"open\":249.03,\"high\":251,\"low\":246.16,\"close\":250.2,\"volume\":40610700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-06\",\"open\":249.16,\"high\":250.38,\"low\":242.17,\"close\":243.04,\"volume\":46004200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-07\",\"open\":242.9,\"high\":244.9,\"low\":238.49,\"close\":244.41,\"volume\":46374300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-10\",\"open\":248.34,\"high\":251.75,\"low\":245.59,\"close\":248.4,\"volume\":36476500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-11\",\"open\":248.41,\"high\":249.75,\"low\":247.23,\"close\":249.1,\"volume\":23564100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-12\",\"open\":250.24,\"high\":250.37,\"low\":243.75,\"close\":244.2,\"volume\":31190100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-13\",\"open\":243.05,\"high\":243.75,\"low\":236.5,\"close\":237.58,\"volume\":41401700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-14\",\"open\":235.06,\"high\":238.73,\"low\":232.89,\"close\":234.69,\"volume\":38956700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-17\",\"open\":233.25,\"high\":234.6,\"low\":229.19,\"close\":232.87,\"volume\":59919000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-18\",\"open\":228.1,\"high\":230.2,\"low\":222.42,\"close\":222.55,\"volume\":60608400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-19\",\"open\":223.74,\"high\":223.74,\"low\":218.52,\"close\":222.69,\"volume\":58335600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-20\",\"open\":227.05,\"high\":227.41,\"low\":216.74,\"close\":217.14,\"volume\":50309000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-21\",\"open\":216.35,\"high\":222.21,\"low\":215.18,\"close\":220.69,\"volume\":68490500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-24\",\"open\":222.56,\"high\":227.33,\"low\":222.27,\"close\":226.28,\"volume\":54318400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-25\",\"open\":226.38,\"high\":230.52,\"low\":223.8,\"close\":229.67,\"volume\":39379300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-26\",\"open\":230.74,\"high\":231.75,\"low\":228.77,\"close\":229.16,\"volume\":38497900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-11-28\",\"open\":231.24,\"high\":233.29,\"low\":230.22,\"close\":233.22,\"volume\":20292300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-01\",\"open\":233.22,\"high\":235.8,\"low\":232.25,\"close\":233.88,\"volume\":42904000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-02\",\"open\":235.01,\"high\":238.97,\"low\":233.55,\"close\":234.42,\"volume\":45785400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-03\",\"open\":233.35,\"high\":233.38,\"low\":230.61,\"close\":232.38,\"volume\":35495100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-04\",\"open\":232.77,\"high\":233.5,\"low\":226.8,\"close\":229.11,\"volume\":45683200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-05\",\"open\":230.32,\"high\":231.24,\"low\":228.55,\"close\":229.53,\"volume\":33117400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-08\",\"open\":229.59,\"high\":230.83,\"low\":226.27,\"close\":226.89,\"volume\":35019200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-09\",\"open\":226.84,\"high\":228.57,\"low\":225.11,\"close\":227.92,\"volume\":25841700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-10\",\"open\":228.81,\"high\":232.42,\"low\":228.46,\"close\":231.78,\"volume\":38790700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-11\",\"open\":230.71,\"high\":232.11,\"low\":228.69,\"close\":230.28,\"volume\":28249600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-12\",\"open\":229.87,\"high\":230.08,\"low\":225.12,\"close\":226.19,\"volume\":35639100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-15\",\"open\":227.93,\"high\":227.93,\"low\":221.5,\"close\":222.54,\"volume\":47286100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-16\",\"open\":223.04,\"high\":223.66,\"low\":221.13,\"close\":222.56,\"volume\":39298900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-17\",\"open\":224.66,\"high\":225.19,\"low\":220.99,\"close\":221.27,\"volume\":44034400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-18\",\"open\":225.71,\"high\":229.23,\"low\":224.41,\"close\":226.76,\"volume\":50272400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-19\",\"open\":226.76,\"high\":229.13,\"low\":225.58,\"close\":227.35,\"volume\":85544400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-22\",\"open\":228.61,\"high\":229.48,\"low\":226.71,\"close\":228.43,\"volume\":32261300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-23\",\"open\":229.06,\"high\":232.45,\"low\":228.73,\"close\":232.14,\"volume\":29230200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-24\",\"open\":232.13,\"high\":232.95,\"low\":231.33,\"close\":232.38,\"volume\":11420500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-26\",\"open\":232.04,\"high\":232.99,\"low\":231.18,\"close\":232.52,\"volume\":15994700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-29\",\"open\":231.94,\"high\":232.6,\"low\":230.77,\"close\":232.07,\"volume\":19797900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-30\",\"open\":231.21,\"high\":232.77,\"low\":230.2,\"close\":232.53,\"volume\":21910500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2025-12-31\",\"open\":232.91,\"high\":232.99,\"low\":230.12,\"close\":230.82,\"volume\":24383700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-02\",\"open\":231.34,\"high\":235.46,\"low\":224.7,\"close\":226.5,\"volume\":51456200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-05\",\"open\":228.84,\"high\":234,\"low\":227.18,\"close\":233.06,\"volume\":49733300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-06\",\"open\":232.1,\"high\":243.18,\"low\":232.07,\"close\":240.93,\"volume\":53764700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-07\",\"open\":239.61,\"high\":245.29,\"low\":239.52,\"close\":241.56,\"volume\":42236500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-08\",\"open\":243.06,\"high\":246.41,\"low\":241.88,\"close\":246.29,\"volume\":39509800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-09\",\"open\":244.57,\"high\":247.86,\"low\":242.24,\"close\":247.38,\"volume\":34560000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-12\",\"open\":246.73,\"high\":248.94,\"low\":245.96,\"close\":246.47,\"volume\":35867800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-13\",\"open\":246.53,\"high\":247.66,\"low\":240.25,\"close\":242.6,\"volume\":38371800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-14\",\"open\":241.15,\"high\":241.28,\"low\":236.22,\"close\":236.65,\"volume\":41410600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-15\",\"open\":239.31,\"high\":240.65,\"low\":236.63,\"close\":238.18,\"volume\":43003600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-16\",\"open\":239.09,\"high\":239.57,\"low\":236.41,\"close\":239.12,\"volume\":45888300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-20\",\"open\":233.76,\"high\":235.09,\"low\":229.34,\"close\":231,\"volume\":47737900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-21\",\"open\":231.09,\"high\":232.3,\"low\":226.88,\"close\":231.31,\"volume\":47276100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-22\",\"open\":234.05,\"high\":235.72,\"low\":230.9,\"close\":234.34,\"volume\":31913300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-23\",\"open\":234.96,\"high\":240.45,\"low\":234.57,\"close\":239.16,\"volume\":33778500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"AMZN\",\"date\":\"2026-01-26\",\"open\":239.98,\"high\":240.95,\"low\":237.54,\"close\":238.42,\"volume\":32764700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-07-31\",\"open\":195.41,\"high\":195.69,\"low\":190.79,\"close\":191.6,\"volume\":51329200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-01\",\"open\":188.74,\"high\":190.53,\"low\":187.53,\"close\":188.84,\"volume\":34832200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-04\",\"open\":190,\"high\":194.97,\"low\":189.83,\"close\":194.74,\"volume\":31547400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-05\",\"open\":194.41,\"high\":197.55,\"low\":193.59,\"close\":194.37,\"volume\":31602300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-06\",\"open\":194.2,\"high\":196.33,\"low\":193.37,\"close\":195.79,\"volume\":21562900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-07\",\"open\":196.76,\"high\":197.23,\"low\":194.03,\"close\":196.22,\"volume\":26321800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-08\",\"open\":196.91,\"high\":202.3,\"low\":196.87,\"close\":201.11,\"volume\":39161800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-11\",\"open\":200.63,\"high\":201.17,\"low\":198.76,\"close\":200.69,\"volume\":25832400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-12\",\"open\":201.06,\"high\":204.18,\"low\":200.28,\"close\":203.03,\"volume\":30397900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-13\",\"open\":203.81,\"high\":204.21,\"low\":197.2,\"close\":201.65,\"volume\":28342900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-14\",\"open\":201.19,\"high\":204.12,\"low\":200.92,\"close\":202.63,\"volume\":25230400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-15\",\"open\":203.53,\"high\":206.12,\"low\":200.97,\"close\":203.58,\"volume\":34931400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-18\",\"open\":203.88,\"high\":204.95,\"low\":202.18,\"close\":203.19,\"volume\":18526600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-19\",\"open\":202.72,\"high\":203.13,\"low\":199.65,\"close\":201.26,\"volume\":24240200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-20\",\"open\":200.42,\"high\":200.97,\"low\":196.3,\"close\":199.01,\"volume\":28955500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-21\",\"open\":199.44,\"high\":202.17,\"low\":199.12,\"close\":199.44,\"volume\":19774600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-22\",\"open\":202.42,\"high\":208.22,\"low\":200.99,\"close\":205.77,\"volume\":42827000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-25\",\"open\":206.11,\"high\":210.19,\"low\":204.96,\"close\":208.17,\"volume\":29928900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-26\",\"open\":207.19,\"high\":207.53,\"low\":205.38,\"close\":206.82,\"volume\":28464100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-27\",\"open\":205.38,\"high\":208.59,\"low\":205.33,\"close\":207.16,\"volume\":23022900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-28\",\"open\":206.93,\"high\":211.89,\"low\":206.58,\"close\":211.31,\"volume\":32339300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-08-29\",\"open\":210.18,\"high\":214.32,\"low\":209.87,\"close\":212.58,\"volume\":39728400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-02\",\"open\":208.12,\"high\":211.35,\"low\":205.88,\"close\":211.02,\"volume\":47523000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-03\",\"open\":225.86,\"high\":230.95,\"low\":224.44,\"close\":230.3,\"volume\":103336100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-04\",\"open\":229.29,\"high\":232.01,\"low\":225.76,\"close\":231.94,\"volume\":51684200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-05\",\"open\":231.84,\"high\":235.4,\"low\":231.54,\"close\":234.64,\"volume\":46588900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-08\",\"open\":235.32,\"high\":237.97,\"low\":233.52,\"close\":233.89,\"volume\":32474700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-09\",\"open\":234.02,\"high\":240.31,\"low\":233.08,\"close\":239.47,\"volume\":38061000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-10\",\"open\":238.74,\"high\":241.5,\"low\":237.69,\"close\":239.01,\"volume\":35141100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-11\",\"open\":239.72,\"high\":242.09,\"low\":236.1,\"close\":240.21,\"volume\":30599300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-12\",\"open\":240.21,\"high\":241.92,\"low\":237.84,\"close\":240.64,\"volume\":26771600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-15\",\"open\":244.5,\"high\":252.25,\"low\":244.5,\"close\":251.45,\"volume\":58383800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-16\",\"open\":251.92,\"high\":252.87,\"low\":249.31,\"close\":251,\"volume\":34109700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-17\",\"open\":251.06,\"high\":251.44,\"low\":246.12,\"close\":249.37,\"volume\":34108000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-18\",\"open\":251.52,\"high\":253.82,\"low\":249.64,\"close\":251.87,\"volume\":31239500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-19\",\"open\":253.08,\"high\":255.83,\"low\":251.65,\"close\":254.55,\"volume\":55571400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-22\",\"open\":254.26,\"high\":255.61,\"low\":250.14,\"close\":252.36,\"volume\":32290500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-23\",\"open\":252.87,\"high\":254.19,\"low\":250.32,\"close\":251.5,\"volume\":26628000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-24\",\"open\":251.5,\"high\":252.19,\"low\":246.28,\"close\":246.98,\"volume\":28201000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-25\",\"open\":244.24,\"high\":246.33,\"low\":240.58,\"close\":245.63,\"volume\":31020400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-26\",\"open\":246.91,\"high\":249.26,\"low\":245.81,\"close\":246.38,\"volume\":18503200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-29\",\"open\":247.69,\"high\":250.99,\"low\":242.61,\"close\":243.89,\"volume\":32505800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-09-30\",\"open\":242.65,\"high\":243.13,\"low\":239.09,\"close\":242.94,\"volume\":34724300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-01\",\"open\":240.59,\"high\":246.14,\"low\":238.45,\"close\":244.74,\"volume\":31658200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-02\",\"open\":244.99,\"high\":246.65,\"low\":242.14,\"close\":245.53,\"volume\":25483300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-03\",\"open\":244.33,\"high\":246.14,\"low\":241.5,\"close\":245.19,\"volume\":30249600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-06\",\"open\":244.62,\"high\":251.16,\"low\":244.42,\"close\":250.27,\"volume\":28894700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-07\",\"open\":248.11,\"high\":250.28,\"low\":245.36,\"close\":245.6,\"volume\":23181300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-08\",\"open\":244.8,\"high\":245.85,\"low\":243.66,\"close\":244.46,\"volume\":21307100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-09\",\"open\":244.31,\"high\":244.6,\"low\":238.99,\"close\":241.37,\"volume\":27892100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-10\",\"open\":241.27,\"high\":243.93,\"low\":235.69,\"close\":236.42,\"volume\":33180300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-13\",\"open\":240.05,\"high\":244.34,\"low\":239.55,\"close\":243.99,\"volume\":24995000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-14\",\"open\":241.07,\"high\":246.96,\"low\":240.35,\"close\":245.29,\"volume\":22111600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-15\",\"open\":247.09,\"high\":251.95,\"low\":245.83,\"close\":250.87,\"volume\":27007700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-16\",\"open\":251.61,\"high\":256.79,\"low\":249.94,\"close\":251.3,\"volume\":27997200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-17\",\"open\":250.6,\"high\":254.05,\"low\":247.65,\"close\":253.13,\"volume\":29671600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-20\",\"open\":254.52,\"high\":257.16,\"low\":254.06,\"close\":256.38,\"volume\":22350200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-21\",\"open\":254.57,\"high\":254.71,\"low\":243.99,\"close\":250.3,\"volume\":47312100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-22\",\"open\":254.2,\"high\":256.19,\"low\":249.13,\"close\":251.53,\"volume\":35029400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-23\",\"open\":252.81,\"high\":254.87,\"low\":251.69,\"close\":252.91,\"volume\":19901400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-24\",\"open\":256.41,\"high\":261.51,\"low\":255.15,\"close\":259.75,\"volume\":28655100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-27\",\"open\":264.65,\"high\":269.96,\"low\":264.11,\"close\":269.09,\"volume\":35235200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-28\",\"open\":269.51,\"high\":270.55,\"low\":266.33,\"close\":267.3,\"volume\":29738600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-29\",\"open\":267.57,\"high\":275.16,\"low\":267.5,\"close\":274.39,\"volume\":43580300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-30\",\"open\":291.4,\"high\":291.4,\"low\":279.88,\"close\":281.3,\"volume\":74876000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-10-31\",\"open\":283.02,\"high\":285.81,\"low\":276.85,\"close\":281.01,\"volume\":39267900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-03\",\"open\":282,\"high\":285.34,\"low\":279.62,\"close\":283.53,\"volume\":29786000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-04\",\"open\":276.57,\"high\":281.09,\"low\":276.08,\"close\":277.36,\"volume\":30078400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-05\",\"open\":278.69,\"high\":286.23,\"low\":277.16,\"close\":284.12,\"volume\":31010300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-06\",\"open\":285.14,\"high\":288.16,\"low\":280.96,\"close\":284.56,\"volume\":37173600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-07\",\"open\":283.02,\"high\":283.59,\"low\":275.01,\"close\":278.65,\"volume\":34479600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-10\",\"open\":284.23,\"high\":290.61,\"low\":282.68,\"close\":289.91,\"volume\":29557300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-11\",\"open\":287.56,\"high\":291.73,\"low\":287.13,\"close\":291.12,\"volume\":19842100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-12\",\"open\":291.49,\"high\":291.82,\"low\":283.5,\"close\":286.52,\"volume\":24829900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-13\",\"open\":282.16,\"high\":282.66,\"low\":277.06,\"close\":278.39,\"volume\":29494000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-14\",\"open\":271.23,\"high\":278.38,\"low\":270.52,\"close\":276.23,\"volume\":31647200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-17\",\"open\":285.59,\"high\":293.76,\"low\":283.38,\"close\":284.83,\"volume\":52670200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-18\",\"open\":287.73,\"high\":288.61,\"low\":278.02,\"close\":284.09,\"volume\":49158700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-19\",\"open\":286.97,\"high\":303.61,\"low\":286.44,\"close\":292.62,\"volume\":68198900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-20\",\"open\":304.34,\"high\":306.22,\"low\":288.48,\"close\":289.26,\"volume\":62025200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-21\",\"open\":296.23,\"high\":303.72,\"low\":293.66,\"close\":299.46,\"volume\":74137700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-24\",\"open\":310.93,\"high\":319.27,\"low\":309.4,\"close\":318.37,\"volume\":85165100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-25\",\"open\":326,\"high\":328.62,\"low\":317.44,\"close\":323.23,\"volume\":88632100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-26\",\"open\":320.47,\"high\":324.29,\"low\":316.58,\"close\":319.74,\"volume\":51373400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-11-28\",\"open\":323.16,\"high\":326.64,\"low\":316.58,\"close\":319.97,\"volume\":26018600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-01\",\"open\":317.49,\"high\":319.64,\"low\":313.68,\"close\":314.68,\"volume\":41183000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-02\",\"open\":316.53,\"high\":318.17,\"low\":313.7,\"close\":315.6,\"volume\":35854700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-03\",\"open\":315.68,\"high\":321.37,\"low\":313.89,\"close\":319.42,\"volume\":41838300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-04\",\"open\":322.02,\"high\":322.15,\"low\":314.49,\"close\":317.41,\"volume\":31240900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-05\",\"open\":319.28,\"high\":322.95,\"low\":318.96,\"close\":321.06,\"volume\":28851700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-08\",\"open\":320.05,\"high\":320.44,\"low\":311.22,\"close\":313.72,\"volume\":33909400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-09\",\"open\":312.37,\"high\":317.99,\"low\":311.9,\"close\":317.08,\"volume\":30194000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-10\",\"open\":315.83,\"high\":321.31,\"low\":314.68,\"close\":320.21,\"volume\":33428900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-11\",\"open\":320.08,\"high\":321.12,\"low\":308.6,\"close\":312.43,\"volume\":42353700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-12\",\"open\":313.7,\"high\":314.87,\"low\":305.56,\"close\":309.29,\"volume\":35940200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-15\",\"open\":311.32,\"high\":311.42,\"low\":304.88,\"close\":308.22,\"volume\":29151900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-16\",\"open\":304.95,\"high\":310.77,\"low\":302.59,\"close\":306.57,\"volume\":30585000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-17\",\"open\":308.01,\"high\":308.09,\"low\":296.12,\"close\":296.72,\"volume\":43930400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-18\",\"open\":301.72,\"high\":303.96,\"low\":299.23,\"close\":302.46,\"volume\":33518000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-19\",\"open\":301.73,\"high\":307.25,\"low\":300.97,\"close\":307.16,\"volume\":59943200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-22\",\"open\":309.88,\"high\":310.13,\"low\":305.3,\"close\":309.78,\"volume\":26429900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-23\",\"open\":309.63,\"high\":314.94,\"low\":309.32,\"close\":314.35,\"volume\":25478700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-24\",\"open\":314.77,\"high\":315.08,\"low\":311.92,\"close\":314.09,\"volume\":10097400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-26\",\"open\":314.48,\"high\":315.09,\"low\":312.28,\"close\":313.51,\"volume\":10899000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-29\",\"open\":311.37,\"high\":314.02,\"low\":310.62,\"close\":313.56,\"volume\":19621800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-30\",\"open\":312.5,\"high\":316.95,\"low\":312.46,\"close\":313.85,\"volume\":17380900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2025-12-31\",\"open\":312.85,\"high\":314.58,\"low\":311.44,\"close\":313,\"volume\":16377700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-02\",\"open\":316.9,\"high\":322.5,\"low\":310.33,\"close\":315.15,\"volume\":32009400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-05\",\"open\":317.66,\"high\":319.02,\"low\":314.63,\"close\":316.54,\"volume\":30195600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-06\",\"open\":316.4,\"high\":320.94,\"low\":311.78,\"close\":314.34,\"volume\":31212100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-07\",\"open\":314.36,\"high\":326.15,\"low\":314.19,\"close\":321.98,\"volume\":35104400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-08\",\"open\":328.97,\"high\":330.32,\"low\":321.5,\"close\":325.44,\"volume\":31896100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-09\",\"open\":327.09,\"high\":330.83,\"low\":325.8,\"close\":328.57,\"volume\":26214200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-12\",\"open\":325.8,\"high\":334.04,\"low\":325,\"close\":331.86,\"volume\":33923900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-13\",\"open\":334.95,\"high\":340.49,\"low\":333.62,\"close\":335.97,\"volume\":33517600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-14\",\"open\":335.06,\"high\":336.52,\"low\":330.48,\"close\":335.84,\"volume\":28525600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-15\",\"open\":337.65,\"high\":337.69,\"low\":330.74,\"close\":332.78,\"volume\":28442400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-16\",\"open\":334.41,\"high\":334.65,\"low\":327.7,\"close\":330,\"volume\":40341600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-20\",\"open\":320.87,\"high\":327.73,\"low\":320.43,\"close\":322,\"volume\":35361000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-21\",\"open\":320.92,\"high\":332.48,\"low\":319.35,\"close\":328.38,\"volume\":35386600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-22\",\"open\":334.45,\"high\":335.15,\"low\":328.75,\"close\":330.54,\"volume\":26253600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-23\",\"open\":332.49,\"high\":333.69,\"low\":327.45,\"close\":327.93,\"volume\":27280000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"GOOGL\",\"date\":\"2026-01-26\",\"open\":327.81,\"high\":335.84,\"low\":327,\"close\":333.26,\"volume\":26011100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-07-31\",\"open\":774.05,\"high\":783.58,\"low\":764.37,\"close\":772.29,\"volume\":38831100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-01\",\"open\":759.6,\"high\":764.86,\"low\":744.2,\"close\":748.89,\"volume\":19028700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-04\",\"open\":758.87,\"high\":775.69,\"low\":757.28,\"close\":775.21,\"volume\":15801700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-05\",\"open\":775.29,\"high\":781.96,\"low\":761.86,\"close\":762.32,\"volume\":11640300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-06\",\"open\":768.85,\"high\":772.49,\"low\":759.33,\"close\":770.84,\"volume\":9733900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-07\",\"open\":772.34,\"high\":773.85,\"low\":758.42,\"close\":760.7,\"volume\":9019700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-08\",\"open\":761.61,\"high\":768.75,\"low\":757.45,\"close\":768.15,\"volume\":7320800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-11\",\"open\":768.93,\"high\":772.31,\"low\":763.53,\"close\":764.73,\"volume\":7612000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-12\",\"open\":771.85,\"high\":792.49,\"low\":771.28,\"close\":788.82,\"volume\":14563100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-13\",\"open\":789.97,\"high\":794.28,\"low\":777.07,\"close\":778.92,\"volume\":8811800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-14\",\"open\":776.72,\"high\":786.64,\"low\":771.36,\"close\":780.97,\"volume\":8116200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-15\",\"open\":782.98,\"high\":795.06,\"low\":779.66,\"close\":784.06,\"volume\":13375400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-18\",\"open\":773.94,\"high\":774.65,\"low\":755.43,\"close\":766.23,\"volume\":16513700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-19\",\"open\":765.98,\"high\":766.03,\"low\":748.24,\"close\":750.36,\"volume\":12286700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-20\",\"open\":746.46,\"high\":749.08,\"low\":729.91,\"close\":746.61,\"volume\":11898200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-21\",\"open\":743.6,\"high\":744.39,\"low\":732.02,\"close\":738,\"volume\":8876300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-22\",\"open\":738.13,\"high\":755.77,\"low\":733.3,\"close\":753.67,\"volume\":10612700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-25\",\"open\":753.7,\"high\":757.75,\"low\":749.01,\"close\":752.18,\"volume\":6861200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-26\",\"open\":749.68,\"high\":753.75,\"low\":746.83,\"close\":752.98,\"volume\":7601800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-27\",\"open\":751.18,\"high\":753.03,\"low\":741.73,\"close\":746.27,\"volume\":8315400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-28\",\"open\":742.89,\"high\":751.93,\"low\":739.7,\"close\":749.99,\"volume\":7468000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-08-29\",\"open\":744.17,\"high\":746.03,\"low\":734.26,\"close\":737.6,\"volume\":9070500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-02\",\"open\":724.96,\"high\":734.9,\"low\":720.66,\"close\":734.02,\"volume\":9350900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-03\",\"open\":734.9,\"high\":739.15,\"low\":732.9,\"close\":735.95,\"volume\":7699300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-04\",\"open\":747.46,\"high\":760.03,\"low\":744.71,\"close\":747.54,\"volume\":11439100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-05\",\"open\":751.5,\"high\":756.82,\"low\":743.92,\"close\":751.33,\"volume\":9663400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-08\",\"open\":754.87,\"high\":765.37,\"low\":750.9,\"close\":751.18,\"volume\":13087800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-09\",\"open\":756.36,\"high\":765.16,\"low\":752.31,\"close\":764.56,\"volume\":10999000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-10\",\"open\":763.99,\"high\":764.56,\"low\":749.88,\"close\":750.86,\"volume\":12478300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-11\",\"open\":753.53,\"high\":755.97,\"low\":747.26,\"close\":749.78,\"volume\":7923300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-12\",\"open\":747.62,\"high\":756.44,\"low\":742.65,\"close\":754.47,\"volume\":8248600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-15\",\"open\":756.34,\"high\":772.92,\"low\":750.87,\"close\":763.56,\"volume\":10533800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-16\",\"open\":765.86,\"high\":780.2,\"low\":763.96,\"close\":777.84,\"volume\":11782500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-17\",\"open\":778.83,\"high\":782.12,\"low\":765.17,\"close\":774.57,\"volume\":9400900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-18\",\"open\":779.59,\"high\":787.61,\"low\":772.21,\"close\":779.09,\"volume\":10955000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-19\",\"open\":785.25,\"high\":789.62,\"low\":768.04,\"close\":777.22,\"volume\":23696800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-22\",\"open\":781.21,\"high\":785.09,\"low\":763.85,\"close\":764.54,\"volume\":11706900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-23\",\"open\":768.62,\"high\":769.97,\"low\":750.46,\"close\":754.78,\"volume\":10872600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-24\",\"open\":756.88,\"high\":760.49,\"low\":751.92,\"close\":760.04,\"volume\":8828200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-25\",\"open\":752.84,\"high\":756.15,\"low\":743.94,\"close\":748.3,\"volume\":10591100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-26\",\"open\":749.39,\"high\":751.32,\"low\":736.75,\"close\":743.14,\"volume\":9696300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-29\",\"open\":748.11,\"high\":750.17,\"low\":738.55,\"close\":742.79,\"volume\":9246800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-09-30\",\"open\":741.65,\"high\":742.36,\"low\":725.71,\"close\":733.78,\"volume\":16226800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-01\",\"open\":720.9,\"high\":721.26,\"low\":709.62,\"close\":716.76,\"volume\":20419600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-02\",\"open\":721.99,\"high\":727.18,\"low\":717.55,\"close\":726.46,\"volume\":11415300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-03\",\"open\":729.04,\"high\":730.4,\"low\":709.6,\"close\":709.98,\"volume\":16154300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-06\",\"open\":704.62,\"high\":716.3,\"low\":689.95,\"close\":715.08,\"volume\":21654700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-07\",\"open\":717.14,\"high\":717.91,\"low\":705.17,\"close\":712.5,\"volume\":12062900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-08\",\"open\":712.87,\"high\":719.06,\"low\":707.23,\"close\":717.26,\"volume\":10790600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-09\",\"open\":717.69,\"high\":732.91,\"low\":711.86,\"close\":732.91,\"volume\":12717200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-10\",\"open\":730.32,\"high\":734.67,\"low\":703.94,\"close\":704.73,\"volume\":16980100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-13\",\"open\":712.43,\"high\":719.35,\"low\":707.06,\"close\":715.12,\"volume\":9251800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-14\",\"open\":707.2,\"high\":714.97,\"low\":698.76,\"close\":708.07,\"volume\":8829800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-15\",\"open\":716.48,\"high\":723.31,\"low\":708.93,\"close\":716.97,\"volume\":10246800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-16\",\"open\":716.97,\"high\":724.9,\"low\":703.31,\"close\":711.49,\"volume\":9017000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-17\",\"open\":706.5,\"high\":717.95,\"low\":705.54,\"close\":716.34,\"volume\":12232400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-20\",\"open\":720.6,\"high\":733.17,\"low\":719.59,\"close\":731.57,\"volume\":8900200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-21\",\"open\":735.42,\"high\":737.9,\"low\":728.16,\"close\":732.67,\"volume\":7647300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-22\",\"open\":733.23,\"high\":740,\"low\":723.44,\"close\":732.81,\"volume\":8734500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-23\",\"open\":734.1,\"high\":741.8,\"low\":732.5,\"close\":733.4,\"volume\":9856000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-24\",\"open\":736.19,\"high\":740.61,\"low\":730.55,\"close\":737.76,\"volume\":9151300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-27\",\"open\":749.12,\"high\":755.13,\"low\":747.4,\"close\":750.21,\"volume\":11321100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-28\",\"open\":752.02,\"high\":757.78,\"low\":744.91,\"close\":750.83,\"volume\":12193800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-29\",\"open\":754.13,\"high\":758.54,\"low\":741.9,\"close\":751.06,\"volume\":26818600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-30\",\"open\":668.6,\"high\":680.41,\"low\":649.64,\"close\":665.93,\"volume\":88440100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-10-31\",\"open\":673.96,\"high\":674.34,\"low\":645.04,\"close\":647.82,\"volume\":56953200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-03\",\"open\":655.47,\"high\":658.79,\"low\":635.66,\"close\":637.19,\"volume\":33003600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-04\",\"open\":627.53,\"high\":641.22,\"low\":625.5,\"close\":626.81,\"volume\":27356600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-05\",\"open\":631.79,\"high\":641.71,\"low\":626.03,\"close\":635.43,\"volume\":20219900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-06\",\"open\":635.33,\"high\":635.48,\"low\":617.5,\"close\":618.44,\"volume\":23628800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-07\",\"open\":615.99,\"high\":621.62,\"low\":600.71,\"close\":621.2,\"volume\":29946800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-10\",\"open\":630.58,\"high\":634.48,\"low\":617.61,\"close\":631.25,\"volume\":19245000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-11\",\"open\":627.49,\"high\":629.05,\"low\":618.89,\"close\":626.57,\"volume\":13302200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-12\",\"open\":627.62,\"high\":628.48,\"low\":607.27,\"close\":608.51,\"volume\":24493300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-13\",\"open\":612.57,\"high\":617.15,\"low\":602.51,\"close\":609.39,\"volume\":20973800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-14\",\"open\":601.3,\"high\":613.18,\"low\":594.71,\"close\":608.96,\"volume\":20724100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-17\",\"open\":608.54,\"high\":611.19,\"low\":594.91,\"close\":601.52,\"volume\":16501300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-18\",\"open\":591.12,\"high\":603.17,\"low\":583.3,\"close\":597.2,\"volume\":25500600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-19\",\"open\":593.24,\"high\":594.84,\"low\":580.78,\"close\":589.84,\"volume\":24744700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-20\",\"open\":603.01,\"high\":606.23,\"low\":582.87,\"close\":588.67,\"volume\":20603000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-21\",\"open\":588.02,\"high\":597.63,\"low\":581.39,\"close\":593.77,\"volume\":21052600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-24\",\"open\":598.23,\"high\":616.2,\"low\":597.14,\"close\":612.55,\"volume\":23554900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-25\",\"open\":623.49,\"high\":636.53,\"low\":617.8,\"close\":635.7,\"volume\":25213000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-26\",\"open\":637.17,\"high\":637.84,\"low\":631.12,\"close\":633.09,\"volume\":15209500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-11-28\",\"open\":635.56,\"high\":647.52,\"low\":634.98,\"close\":647.42,\"volume\":11033200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-01\",\"open\":639.03,\"high\":644.79,\"low\":637.24,\"close\":640.35,\"volume\":13029900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-02\",\"open\":641.82,\"high\":647.34,\"low\":637.55,\"close\":646.57,\"volume\":11640900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-03\",\"open\":643.88,\"high\":648.32,\"low\":637.03,\"close\":639.08,\"volume\":11134300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-04\",\"open\":675.45,\"high\":675.55,\"low\":659.51,\"close\":660.99,\"volume\":29874600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-05\",\"open\":663.46,\"high\":674.14,\"low\":661.85,\"close\":672.87,\"volume\":21207900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-08\",\"open\":668.79,\"high\":676.16,\"low\":664.53,\"close\":666.26,\"volume\":13161000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-09\",\"open\":663.23,\"high\":663.94,\"low\":652.81,\"close\":656.42,\"volume\":12997100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-10\",\"open\":649.42,\"high\":653.98,\"low\":642.88,\"close\":649.6,\"volume\":16910900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-11\",\"open\":642.77,\"high\":654.75,\"low\":640.28,\"close\":652.18,\"volume\":13056700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-12\",\"open\":649.27,\"high\":710.42,\"low\":638.09,\"close\":643.71,\"volume\":14016900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-15\",\"open\":645.7,\"high\":653,\"low\":638.7,\"close\":647.51,\"volume\":15549100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-16\",\"open\":643.5,\"high\":662.54,\"low\":643.2,\"close\":657.15,\"volume\":14309100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-17\",\"open\":655.61,\"high\":661.23,\"low\":649.2,\"close\":649.5,\"volume\":15598500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-18\",\"open\":657.03,\"high\":670.56,\"low\":656.46,\"close\":664.45,\"volume\":20260300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-19\",\"open\":666.42,\"high\":671,\"low\":658.18,\"close\":658.77,\"volume\":49977100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-22\",\"open\":661.65,\"high\":673.58,\"low\":656.65,\"close\":661.5,\"volume\":15659400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-23\",\"open\":660.05,\"high\":666,\"low\":658.25,\"close\":664.94,\"volume\":8486800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-24\",\"open\":662.53,\"high\":668.18,\"low\":662.2,\"close\":667.55,\"volume\":5627500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-26\",\"open\":668.06,\"high\":668.95,\"low\":661.32,\"close\":663.29,\"volume\":7133800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-29\",\"open\":658.01,\"high\":660.25,\"low\":654.39,\"close\":658.69,\"volume\":8506500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-30\",\"open\":658.69,\"high\":672.22,\"low\":657.84,\"close\":665.95,\"volume\":9187500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2025-12-31\",\"open\":664.75,\"high\":665,\"low\":659.44,\"close\":660.09,\"volume\":7940400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-02\",\"open\":662.73,\"high\":664.39,\"low\":643.5,\"close\":650.41,\"volume\":13726500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-05\",\"open\":651.01,\"high\":664.54,\"low\":647.75,\"close\":658.79,\"volume\":12213700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-06\",\"open\":659.57,\"high\":665.52,\"low\":651.9,\"close\":660.62,\"volume\":11074400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-07\",\"open\":655.64,\"high\":659.15,\"low\":644.81,\"close\":648.69,\"volume\":12846300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-08\",\"open\":645.88,\"high\":647.1,\"low\":635.72,\"close\":646.06,\"volume\":11921700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-09\",\"open\":645.44,\"high\":654.95,\"low\":642.85,\"close\":653.06,\"volume\":11634900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-12\",\"open\":652.53,\"high\":653.97,\"low\":641.23,\"close\":641.97,\"volume\":14797200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-13\",\"open\":642.27,\"high\":642.27,\"low\":624.1,\"close\":631.09,\"volume\":18030400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-14\",\"open\":626.5,\"high\":628.45,\"low\":614.82,\"close\":615.52,\"volume\":15527900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-15\",\"open\":618.48,\"high\":624.17,\"low\":614.23,\"close\":620.8,\"volume\":13076100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-16\",\"open\":624.18,\"high\":629.08,\"low\":620.08,\"close\":620.25,\"volume\":17012500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-20\",\"open\":607.88,\"high\":611.4,\"low\":600,\"close\":604.12,\"volume\":15169600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-21\",\"open\":606.74,\"high\":618.27,\"low\":600.08,\"close\":612.96,\"volume\":14494700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-22\",\"open\":629.35,\"high\":660.57,\"low\":626.55,\"close\":647.63,\"volume\":21394700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-23\",\"open\":644.77,\"high\":666.49,\"low\":644.45,\"close\":658.76,\"volume\":22797700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"META\",\"date\":\"2026-01-26\",\"open\":665.13,\"high\":675.28,\"low\":661.29,\"close\":672.36,\"volume\":16293000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-07-31\",\"open\":553.28,\"high\":553.5,\"low\":530.04,\"close\":531.63,\"volume\":51617300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-01\",\"open\":533.12,\"high\":533.92,\"low\":519.03,\"close\":522.27,\"volume\":28977600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-04\",\"open\":526.42,\"high\":536.36,\"low\":526.28,\"close\":533.76,\"volume\":25349000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-05\",\"open\":535.3,\"high\":535.42,\"low\":525.39,\"close\":525.9,\"volume\":19171600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-06\",\"open\":529.04,\"high\":529.84,\"low\":522.19,\"close\":523.1,\"volume\":21355700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-07\",\"open\":524.95,\"high\":526.24,\"low\":515.74,\"close\":519.01,\"volume\":16079100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-08\",\"open\":520.77,\"high\":522.82,\"low\":517.59,\"close\":520.21,\"volume\":15531000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-11\",\"open\":520.47,\"high\":525.74,\"low\":517.9,\"close\":519.94,\"volume\":20194400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-12\",\"open\":521.91,\"high\":529.12,\"low\":520.87,\"close\":527.38,\"volume\":18667000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-13\",\"open\":530.24,\"high\":530.83,\"low\":517.55,\"close\":518.75,\"volume\":19619200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-14\",\"open\":520.73,\"high\":524.11,\"low\":518.32,\"close\":520.65,\"volume\":20269100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-15\",\"open\":520.94,\"high\":524.26,\"low\":517.26,\"close\":518.35,\"volume\":25213300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-18\",\"open\":519.76,\"high\":520.99,\"low\":512.22,\"close\":515.29,\"volume\":23760600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-19\",\"open\":513.19,\"high\":513.35,\"low\":506.77,\"close\":507.98,\"volume\":21481000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-20\",\"open\":508.08,\"high\":509.21,\"low\":502.67,\"close\":503.95,\"volume\":27723000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-21\",\"open\":502.75,\"high\":506.68,\"low\":501.78,\"close\":503.3,\"volume\":18443300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-22\",\"open\":503.31,\"high\":509.78,\"low\":501.47,\"close\":506.28,\"volume\":24324200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-25\",\"open\":505.68,\"high\":507.24,\"low\":503.18,\"close\":503.32,\"volume\":21638600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-26\",\"open\":503.42,\"high\":504.04,\"low\":497.58,\"close\":501.1,\"volume\":30835700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-27\",\"open\":501.06,\"high\":506.34,\"low\":498.97,\"close\":505.79,\"volume\":17277900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-28\",\"open\":506.14,\"high\":510.14,\"low\":504.56,\"close\":508.69,\"volume\":18015600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-08-29\",\"open\":507.71,\"high\":508.65,\"low\":503.55,\"close\":505.74,\"volume\":20961600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-02\",\"open\":499.54,\"high\":505.05,\"low\":495.88,\"close\":504.18,\"volume\":18128000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-03\",\"open\":502.85,\"high\":506.84,\"low\":501.38,\"close\":504.41,\"volume\":16345100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-04\",\"open\":503.36,\"high\":507.2,\"low\":502.21,\"close\":507.02,\"volume\":15509500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-05\",\"open\":508.12,\"high\":511.01,\"low\":491.45,\"close\":494.08,\"volume\":31994800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-08\",\"open\":497.18,\"high\":500.26,\"low\":494.11,\"close\":497.27,\"volume\":16771000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-09\",\"open\":500.49,\"high\":501.31,\"low\":496.77,\"close\":497.48,\"volume\":14410500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-10\",\"open\":502.04,\"high\":502.29,\"low\":495.79,\"close\":499.44,\"volume\":21611800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-11\",\"open\":501.31,\"high\":502.23,\"low\":496.95,\"close\":500.07,\"volume\":18881600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-12\",\"open\":505.7,\"high\":511.59,\"low\":502.91,\"close\":508.95,\"volume\":23624900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-15\",\"open\":507.84,\"high\":514.51,\"low\":506.05,\"close\":514.4,\"volume\":17143800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-16\",\"open\":515.91,\"high\":516.26,\"low\":507.65,\"close\":508.09,\"volume\":19711900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-17\",\"open\":509.67,\"high\":510.33,\"low\":504.98,\"close\":509.07,\"volume\":15816600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-18\",\"open\":510.53,\"high\":512.11,\"low\":506.71,\"close\":507.5,\"volume\":18913700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-19\",\"open\":509.61,\"high\":518.33,\"low\":509.36,\"close\":516.96,\"volume\":52474100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-22\",\"open\":514.63,\"high\":516.77,\"low\":511.58,\"close\":513.49,\"volume\":20009300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-23\",\"open\":512.84,\"high\":513.63,\"low\":506.36,\"close\":508.28,\"volume\":19799600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-24\",\"open\":509.43,\"high\":511.52,\"low\":505.97,\"close\":509.2,\"volume\":13533700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-25\",\"open\":507.35,\"high\":509.06,\"low\":504.1,\"close\":506.08,\"volume\":15786500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-26\",\"open\":509.11,\"high\":512.98,\"low\":505.67,\"close\":510.5,\"volume\":16213100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-29\",\"open\":510.54,\"high\":515.88,\"low\":507.93,\"close\":513.64,\"volume\":17617800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-09-30\",\"open\":512.28,\"high\":517.19,\"low\":508.71,\"close\":516.98,\"volume\":19728200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-01\",\"open\":513.84,\"high\":519.54,\"low\":510.73,\"close\":518.74,\"volume\":22632300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-02\",\"open\":516.67,\"high\":520.63,\"low\":509.73,\"close\":514.78,\"volume\":21222900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-03\",\"open\":516.13,\"high\":519.52,\"low\":514.04,\"close\":516.38,\"volume\":15112300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-06\",\"open\":517.64,\"high\":530.04,\"low\":517.23,\"close\":527.58,\"volume\":21388600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-07\",\"open\":527.3,\"high\":528.81,\"low\":520.47,\"close\":523,\"volume\":14615200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-08\",\"open\":522.3,\"high\":525.97,\"low\":522.11,\"close\":523.87,\"volume\":13363400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-09\",\"open\":521.36,\"high\":523.35,\"low\":516.43,\"close\":521.42,\"volume\":18343600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-10\",\"open\":518.67,\"high\":522.6,\"low\":508.68,\"close\":510.01,\"volume\":24133800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-13\",\"open\":515.45,\"high\":515.45,\"low\":510.72,\"close\":513.09,\"volume\":14284200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-14\",\"open\":509.28,\"high\":514.32,\"low\":505.05,\"close\":512.61,\"volume\":14684300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-15\",\"open\":514,\"high\":516.22,\"low\":509.05,\"close\":512.47,\"volume\":14694700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-16\",\"open\":511.62,\"high\":515.88,\"low\":507.18,\"close\":510.65,\"volume\":15559600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-17\",\"open\":508.09,\"high\":514.52,\"low\":506.36,\"close\":512.62,\"volume\":19867800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-20\",\"open\":513.65,\"high\":517.73,\"low\":512.47,\"close\":515.82,\"volume\":14665600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-21\",\"open\":516.53,\"high\":517.72,\"low\":512.08,\"close\":516.69,\"volume\":15586200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-22\",\"open\":520.18,\"high\":524.25,\"low\":516.74,\"close\":519.57,\"volume\":18962700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-23\",\"open\":521.48,\"high\":522.97,\"low\":517.64,\"close\":519.59,\"volume\":14023500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-24\",\"open\":521.81,\"high\":524.37,\"low\":519.74,\"close\":522.63,\"volume\":15532400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-27\",\"open\":530.79,\"high\":533.58,\"low\":528.02,\"close\":530.53,\"volume\":18734700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-28\",\"open\":548.97,\"high\":552.69,\"low\":539.76,\"close\":541.06,\"volume\":29986700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-29\",\"open\":543.92,\"high\":545.25,\"low\":535.73,\"close\":540.54,\"volume\":36023000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-30\",\"open\":529.49,\"high\":533.97,\"low\":521.14,\"close\":524.78,\"volume\":41023100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-10-31\",\"open\":527.89,\"high\":528.33,\"low\":514.14,\"close\":516.84,\"volume\":34006400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-03\",\"open\":518.84,\"high\":523.98,\"low\":513.63,\"close\":516.06,\"volume\":22374700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-04\",\"open\":510.8,\"high\":514.59,\"low\":506.89,\"close\":513.37,\"volume\":20958700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-05\",\"open\":512.34,\"high\":513.87,\"low\":505.63,\"close\":506.21,\"volume\":23024300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-06\",\"open\":504.72,\"high\":504.76,\"low\":494.88,\"close\":496.17,\"volume\":27406500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-07\",\"open\":496.02,\"high\":498.45,\"low\":492.33,\"close\":495.89,\"volume\":24019800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-10\",\"open\":499.11,\"high\":505.9,\"low\":497.87,\"close\":505.05,\"volume\":26101500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-11\",\"open\":503.86,\"high\":508.65,\"low\":501.41,\"close\":507.73,\"volume\":17980000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-12\",\"open\":508.41,\"high\":510.71,\"low\":498.19,\"close\":510.19,\"volume\":26574900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-13\",\"open\":509.36,\"high\":512.54,\"low\":500.35,\"close\":502.35,\"volume\":25273100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-14\",\"open\":497.3,\"high\":510.64,\"low\":496.51,\"close\":509.23,\"volume\":28505700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-17\",\"open\":507.5,\"high\":511.16,\"low\":503.97,\"close\":506.54,\"volume\":19092800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-18\",\"open\":494.44,\"high\":502.04,\"low\":485.87,\"close\":492.87,\"volume\":33815100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-19\",\"open\":489.18,\"high\":494.26,\"low\":481.93,\"close\":486.21,\"volume\":23245300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-20\",\"open\":492.71,\"high\":493.57,\"low\":475.5,\"close\":478.43,\"volume\":26802500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-21\",\"open\":478.5,\"high\":478.92,\"low\":468.27,\"close\":472.12,\"volume\":31769200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-24\",\"open\":475,\"high\":476.9,\"low\":468.02,\"close\":474,\"volume\":34421000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-25\",\"open\":474.07,\"high\":479.15,\"low\":464.89,\"close\":476.99,\"volume\":28019800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-26\",\"open\":486.31,\"high\":488.31,\"low\":481.2,\"close\":485.5,\"volume\":25709100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-11-28\",\"open\":487.6,\"high\":492.63,\"low\":486.65,\"close\":492.01,\"volume\":14386700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-01\",\"open\":488.44,\"high\":489.86,\"low\":484.65,\"close\":486.74,\"volume\":23964000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-02\",\"open\":486.72,\"high\":493.5,\"low\":486.32,\"close\":490,\"volume\":19562700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-03\",\"open\":476.32,\"high\":484.24,\"low\":475.2,\"close\":477.73,\"volume\":34615100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-04\",\"open\":479.76,\"high\":481.32,\"low\":476.49,\"close\":480.84,\"volume\":22318200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-05\",\"open\":482.52,\"high\":483.4,\"low\":478.88,\"close\":483.16,\"volume\":22608700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-08\",\"open\":484.89,\"high\":492.3,\"low\":484.38,\"close\":491.02,\"volume\":21965900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-09\",\"open\":489.1,\"high\":492.12,\"low\":488.5,\"close\":492.02,\"volume\":14696100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-10\",\"open\":484.03,\"high\":484.25,\"low\":475.08,\"close\":478.56,\"volume\":35756200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-11\",\"open\":476.63,\"high\":486.03,\"low\":475.86,\"close\":483.47,\"volume\":24669200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-12\",\"open\":479.82,\"high\":482.45,\"low\":476.34,\"close\":478.53,\"volume\":21248100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-15\",\"open\":480.1,\"high\":480.72,\"low\":472.52,\"close\":474.82,\"volume\":23727700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-16\",\"open\":471.91,\"high\":477.89,\"low\":470.88,\"close\":476.39,\"volume\":20705600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-17\",\"open\":476.91,\"high\":480,\"low\":475,\"close\":476.12,\"volume\":24527200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-18\",\"open\":478.19,\"high\":489.6,\"low\":477.89,\"close\":483.98,\"volume\":28573500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-19\",\"open\":487.36,\"high\":487.85,\"low\":482.49,\"close\":485.92,\"volume\":70836100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-22\",\"open\":486.12,\"high\":488.73,\"low\":482.69,\"close\":484.92,\"volume\":16963000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-23\",\"open\":484.98,\"high\":487.83,\"low\":484.74,\"close\":486.85,\"volume\":14683600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-24\",\"open\":485.68,\"high\":489.16,\"low\":484.83,\"close\":488.02,\"volume\":5855900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-26\",\"open\":486.71,\"high\":488.12,\"low\":485.96,\"close\":487.71,\"volume\":8842200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-29\",\"open\":484.86,\"high\":488.35,\"low\":484.18,\"close\":487.1,\"volume\":10893400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-30\",\"open\":485.93,\"high\":489.68,\"low\":485.5,\"close\":487.48,\"volume\":13944500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2025-12-31\",\"open\":487.84,\"high\":488.14,\"low\":483.3,\"close\":483.62,\"volume\":15601600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-02\",\"open\":484.39,\"high\":484.66,\"low\":470.16,\"close\":472.94,\"volume\":25571600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-05\",\"open\":474.06,\"high\":476.07,\"low\":469.5,\"close\":472.85,\"volume\":25250300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-06\",\"open\":473.8,\"high\":478.74,\"low\":469.75,\"close\":478.51,\"volume\":23037700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-07\",\"open\":479.76,\"high\":489.7,\"low\":477.95,\"close\":483.47,\"volume\":25564200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-08\",\"open\":481.24,\"high\":482.66,\"low\":475.86,\"close\":478.11,\"volume\":18162600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-09\",\"open\":474.06,\"high\":479.82,\"low\":472.2,\"close\":479.28,\"volume\":18491000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-12\",\"open\":476.67,\"high\":480.99,\"low\":475.68,\"close\":477.18,\"volume\":23519900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-13\",\"open\":474.68,\"high\":475.78,\"low\":465.95,\"close\":470.67,\"volume\":28545800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-14\",\"open\":466.46,\"high\":468.2,\"low\":457.17,\"close\":459.38,\"volume\":28184300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-15\",\"open\":464.12,\"high\":464.25,\"low\":455.9,\"close\":456.66,\"volume\":23225800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-16\",\"open\":457.83,\"high\":463.19,\"low\":456.48,\"close\":459.86,\"volume\":34246700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-20\",\"open\":451.22,\"high\":456.8,\"low\":449.28,\"close\":454.52,\"volume\":26130000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-21\",\"open\":452.6,\"high\":452.69,\"low\":438.68,\"close\":444.11,\"volume\":37980500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-22\",\"open\":447.62,\"high\":452.84,\"low\":444.7,\"close\":451.14,\"volume\":25349400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-23\",\"open\":451.87,\"high\":471.1,\"low\":450.53,\"close\":465.95,\"volume\":38000200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"MSFT\",\"date\":\"2026-01-26\",\"open\":465.31,\"high\":474.25,\"low\":462,\"close\":470.28,\"volume\":29247100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-07-31\",\"open\":182.88,\"high\":183.28,\"low\":175.91,\"close\":177.85,\"volume\":221685400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-01\",\"open\":174.07,\"high\":176.52,\"low\":170.87,\"close\":173.7,\"volume\":204529000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-04\",\"open\":175.14,\"high\":180.18,\"low\":174.5,\"close\":179.98,\"volume\":148174600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-05\",\"open\":179.6,\"high\":180.24,\"low\":175.88,\"close\":178.24,\"volume\":156407600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-06\",\"open\":176.31,\"high\":179.88,\"low\":176.23,\"close\":179.4,\"volume\":137192300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-07\",\"open\":181.55,\"high\":183.86,\"low\":178.78,\"close\":180.75,\"volume\":151878400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-08\",\"open\":181.53,\"high\":183.28,\"low\":180.38,\"close\":182.68,\"volume\":123396700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-11\",\"open\":182.03,\"high\":183.82,\"low\":180.23,\"close\":182.04,\"volume\":138323200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-12\",\"open\":182.94,\"high\":184.46,\"low\":179.44,\"close\":183.14,\"volume\":145485700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-13\",\"open\":182.6,\"high\":183.95,\"low\":179.33,\"close\":181.57,\"volume\":179871700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-14\",\"open\":179.73,\"high\":183,\"low\":179.44,\"close\":182,\"volume\":129554000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-15\",\"open\":181.86,\"high\":181.88,\"low\":178.02,\"close\":180.43,\"volume\":156602200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-18\",\"open\":180.58,\"high\":182.92,\"low\":180.57,\"close\":181.99,\"volume\":132008000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-19\",\"open\":182.41,\"high\":182.48,\"low\":175.47,\"close\":175.62,\"volume\":185229200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-20\",\"open\":175.15,\"high\":175.98,\"low\":168.78,\"close\":175.38,\"volume\":215142700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-21\",\"open\":174.83,\"high\":176.88,\"low\":173.79,\"close\":174.96,\"volume\":140040900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-22\",\"open\":172.59,\"high\":178.57,\"low\":171.18,\"close\":177.97,\"volume\":172789400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-25\",\"open\":178.33,\"high\":181.89,\"low\":176.55,\"close\":179.79,\"volume\":163012800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-26\",\"open\":180.04,\"high\":182.37,\"low\":178.79,\"close\":181.75,\"volume\":168688200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-27\",\"open\":181.96,\"high\":182.47,\"low\":179.08,\"close\":181.58,\"volume\":235518900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-28\",\"open\":180.8,\"high\":184.45,\"low\":176.39,\"close\":180.15,\"volume\":281787800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-08-29\",\"open\":178.09,\"high\":178.13,\"low\":173.13,\"close\":174.16,\"volume\":243257900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-02\",\"open\":169.98,\"high\":172.36,\"low\":167.2,\"close\":170.76,\"volume\":231164900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-03\",\"open\":171.04,\"high\":172.39,\"low\":168.86,\"close\":170.6,\"volume\":164424900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-04\",\"open\":170.55,\"high\":171.84,\"low\":169.39,\"close\":171.64,\"volume\":141670100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-05\",\"open\":168.01,\"high\":169.01,\"low\":164.05,\"close\":167,\"volume\":224441400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-08\",\"open\":167.53,\"high\":170.94,\"low\":167.33,\"close\":168.29,\"volume\":163769100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-09\",\"open\":169.07,\"high\":170.96,\"low\":166.72,\"close\":170.74,\"volume\":157548400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-10\",\"open\":176.62,\"high\":179.27,\"low\":175.45,\"close\":177.31,\"volume\":226852000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-11\",\"open\":179.67,\"high\":180.27,\"low\":176.47,\"close\":177.16,\"volume\":151159300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-12\",\"open\":177.76,\"high\":178.59,\"low\":176.44,\"close\":177.81,\"volume\":124911000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-15\",\"open\":175.66,\"high\":178.84,\"low\":174.5,\"close\":177.74,\"volume\":147061600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-16\",\"open\":176.99,\"high\":177.49,\"low\":174.37,\"close\":174.87,\"volume\":140737800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-17\",\"open\":172.63,\"high\":173.19,\"low\":168.4,\"close\":170.28,\"volume\":211843800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-18\",\"open\":173.97,\"high\":177.09,\"low\":172.95,\"close\":176.23,\"volume\":191763300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-19\",\"open\":175.76,\"high\":178.07,\"low\":175.17,\"close\":176.66,\"volume\":237182100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-22\",\"open\":175.29,\"high\":184.54,\"low\":174.7,\"close\":183.6,\"volume\":269637000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-23\",\"open\":181.96,\"high\":182.41,\"low\":176.2,\"close\":178.42,\"volume\":192559600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-24\",\"open\":179.76,\"high\":179.77,\"low\":175.39,\"close\":176.96,\"volume\":143564100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-25\",\"open\":174.47,\"high\":180.25,\"low\":173.12,\"close\":177.68,\"volume\":191586700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-26\",\"open\":178.16,\"high\":179.76,\"low\":174.92,\"close\":178.18,\"volume\":148573700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-29\",\"open\":180.42,\"high\":183.99,\"low\":180.31,\"close\":181.84,\"volume\":193063500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-09-30\",\"open\":182.07,\"high\":187.34,\"low\":181.47,\"close\":186.57,\"volume\":236981000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-01\",\"open\":185.23,\"high\":188.13,\"low\":183.89,\"close\":187.23,\"volume\":173844900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-02\",\"open\":189.59,\"high\":191.04,\"low\":188.05,\"close\":188.88,\"volume\":136805800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-03\",\"open\":189.18,\"high\":190.35,\"low\":185.37,\"close\":187.61,\"volume\":137596900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-06\",\"open\":185.49,\"high\":187.22,\"low\":183.32,\"close\":185.53,\"volume\":157678100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-07\",\"open\":186.22,\"high\":189.05,\"low\":183.99,\"close\":185.03,\"volume\":140088000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-08\",\"open\":186.56,\"high\":189.59,\"low\":186.53,\"close\":189.1,\"volume\":130168900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-09\",\"open\":192.22,\"high\":195.29,\"low\":191.05,\"close\":192.56,\"volume\":182997200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-10\",\"open\":193.5,\"high\":195.61,\"low\":182.04,\"close\":183.15,\"volume\":268774400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-13\",\"open\":187.96,\"high\":190.1,\"low\":185.95,\"close\":188.31,\"volume\":153482800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-14\",\"open\":184.76,\"high\":184.79,\"low\":179.69,\"close\":180.02,\"volume\":205641400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-15\",\"open\":184.79,\"high\":184.86,\"low\":177.28,\"close\":179.82,\"volume\":214450500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-16\",\"open\":182.22,\"high\":183.27,\"low\":179.76,\"close\":181.8,\"volume\":179723300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-17\",\"open\":180.17,\"high\":184.09,\"low\":179.74,\"close\":183.21,\"volume\":173135200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-20\",\"open\":183.12,\"high\":185.19,\"low\":181.72,\"close\":182.63,\"volume\":128544700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-21\",\"open\":182.78,\"high\":182.78,\"low\":179.79,\"close\":181.15,\"volume\":124240200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-22\",\"open\":181.13,\"high\":183.43,\"low\":176.75,\"close\":180.27,\"volume\":162249600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-23\",\"open\":180.41,\"high\":183.02,\"low\":179.78,\"close\":182.15,\"volume\":111363700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-24\",\"open\":183.83,\"high\":187.46,\"low\":183.49,\"close\":186.25,\"volume\":131296700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-27\",\"open\":189.98,\"high\":191.99,\"low\":188.42,\"close\":191.48,\"volume\":153452700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-28\",\"open\":193.04,\"high\":203.14,\"low\":191.9,\"close\":201.02,\"volume\":297986200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-29\",\"open\":207.97,\"high\":212.18,\"low\":204.77,\"close\":207.03,\"volume\":308829600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-30\",\"open\":205.14,\"high\":206.15,\"low\":201.4,\"close\":202.88,\"volume\":178864400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-10-31\",\"open\":206.44,\"high\":207.96,\"low\":202.06,\"close\":202.48,\"volume\":179802200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-03\",\"open\":208.07,\"high\":211.33,\"low\":205.55,\"close\":206.87,\"volume\":180267300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-04\",\"open\":202.99,\"high\":203.96,\"low\":197.92,\"close\":198.68,\"volume\":188919300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-05\",\"open\":198.76,\"high\":202.91,\"low\":194.64,\"close\":195.2,\"volume\":171350300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-06\",\"open\":196.41,\"high\":197.61,\"low\":186.37,\"close\":188.07,\"volume\":223029800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-07\",\"open\":184.89,\"high\":188.31,\"low\":178.9,\"close\":188.14,\"volume\":264942300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-10\",\"open\":195.1,\"high\":199.93,\"low\":193.78,\"close\":199.04,\"volume\":198897100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-11\",\"open\":195.15,\"high\":195.41,\"low\":191.29,\"close\":193.15,\"volume\":176483300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-12\",\"open\":195.71,\"high\":195.88,\"low\":191.12,\"close\":193.79,\"volume\":154935300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-13\",\"open\":191.04,\"high\":191.43,\"low\":183.84,\"close\":186.85,\"volume\":207423100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-14\",\"open\":182.85,\"high\":191,\"low\":180.57,\"close\":190.16,\"volume\":186591900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-17\",\"open\":185.96,\"high\":188.99,\"low\":184.31,\"close\":186.59,\"volume\":173628900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-18\",\"open\":183.37,\"high\":184.79,\"low\":179.64,\"close\":181.35,\"volume\":213598900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-19\",\"open\":184.78,\"high\":187.85,\"low\":182.82,\"close\":186.51,\"volume\":247246400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-20\",\"open\":195.94,\"high\":195.99,\"low\":179.84,\"close\":180.63,\"volume\":343504800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-21\",\"open\":181.23,\"high\":184.55,\"low\":172.92,\"close\":178.87,\"volume\":346926200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-24\",\"open\":179.48,\"high\":183.49,\"low\":176.47,\"close\":182.54,\"volume\":256618300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-25\",\"open\":174.9,\"high\":178.15,\"low\":169.54,\"close\":177.81,\"volume\":320600300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-26\",\"open\":181.62,\"high\":182.9,\"low\":178.23,\"close\":180.25,\"volume\":183852000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-11-28\",\"open\":179,\"high\":179.28,\"low\":176.49,\"close\":176.99,\"volume\":121332800,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-01\",\"open\":174.75,\"high\":180.29,\"low\":173.67,\"close\":179.91,\"volume\":188131000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-02\",\"open\":181.75,\"high\":185.65,\"low\":179.99,\"close\":181.45,\"volume\":182632200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-03\",\"open\":181.07,\"high\":182.44,\"low\":179.1,\"close\":179.58,\"volume\":165138000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-04\",\"open\":181.62,\"high\":184.52,\"low\":179.96,\"close\":183.38,\"volume\":167364900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-05\",\"open\":183.89,\"high\":184.66,\"low\":180.91,\"close\":182.41,\"volume\":143971100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-08\",\"open\":182.64,\"high\":188,\"low\":182.4,\"close\":185.55,\"volume\":204378100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-09\",\"open\":185.56,\"high\":185.72,\"low\":183.32,\"close\":184.97,\"volume\":144719700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-10\",\"open\":184.97,\"high\":185.48,\"low\":182.04,\"close\":183.78,\"volume\":162785400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-11\",\"open\":180.28,\"high\":181.32,\"low\":176.62,\"close\":180.93,\"volume\":182136600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-12\",\"open\":181.11,\"high\":182.82,\"low\":174.62,\"close\":175.02,\"volume\":204274900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-15\",\"open\":177.94,\"high\":178.42,\"low\":175.03,\"close\":176.29,\"volume\":164775600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-16\",\"open\":176.26,\"high\":178.49,\"low\":174.9,\"close\":177.72,\"volume\":148588100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-17\",\"open\":176.1,\"high\":176.13,\"low\":170.31,\"close\":170.94,\"volume\":222775500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-18\",\"open\":174.53,\"high\":176.15,\"low\":171.82,\"close\":174.14,\"volume\":176096000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-19\",\"open\":176.67,\"high\":181.45,\"low\":176.34,\"close\":180.99,\"volume\":324925900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-22\",\"open\":183.92,\"high\":184.16,\"low\":182.35,\"close\":183.69,\"volume\":129064400,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-23\",\"open\":182.97,\"high\":189.33,\"low\":182.9,\"close\":189.21,\"volume\":174873600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-24\",\"open\":187.94,\"high\":188.91,\"low\":186.59,\"close\":188.61,\"volume\":65528500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-26\",\"open\":189.92,\"high\":192.69,\"low\":188,\"close\":190.53,\"volume\":139740300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-29\",\"open\":187.71,\"high\":188.76,\"low\":185.91,\"close\":188.22,\"volume\":120006100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-30\",\"open\":188.24,\"high\":188.99,\"low\":186.93,\"close\":187.54,\"volume\":97687300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2025-12-31\",\"open\":189.57,\"high\":190.56,\"low\":186.49,\"close\":186.5,\"volume\":120100500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-02\",\"open\":189.84,\"high\":192.93,\"low\":188.26,\"close\":188.85,\"volume\":148240500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-05\",\"open\":191.76,\"high\":193.63,\"low\":186.15,\"close\":188.12,\"volume\":183529700,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-06\",\"open\":190.52,\"high\":192.17,\"low\":186.82,\"close\":187.24,\"volume\":176862600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-07\",\"open\":188.57,\"high\":191.37,\"low\":186.56,\"close\":189.11,\"volume\":153543200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-08\",\"open\":189.11,\"high\":189.55,\"low\":183.71,\"close\":185.04,\"volume\":172457000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-09\",\"open\":185.08,\"high\":186.34,\"low\":183.67,\"close\":184.86,\"volume\":131327500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-12\",\"open\":183.22,\"high\":187.12,\"low\":183.02,\"close\":184.94,\"volume\":137968500,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-13\",\"open\":185,\"high\":188.11,\"low\":183.4,\"close\":185.81,\"volume\":160128900,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-14\",\"open\":184.32,\"high\":184.46,\"low\":180.8,\"close\":183.14,\"volume\":159586100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-15\",\"open\":186.5,\"high\":189.7,\"low\":186.33,\"close\":187.05,\"volume\":206188600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-16\",\"open\":189.08,\"high\":190.44,\"low\":186.08,\"close\":186.23,\"volume\":187967200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-20\",\"open\":181.9,\"high\":182.38,\"low\":177.61,\"close\":178.07,\"volume\":223345300,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-21\",\"open\":179.05,\"high\":185.38,\"low\":178.4,\"close\":183.32,\"volume\":200381000,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-22\",\"open\":184.75,\"high\":186.17,\"low\":183.93,\"close\":184.84,\"volume\":139636600,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-23\",\"open\":187.5,\"high\":189.6,\"low\":186.82,\"close\":187.67,\"volume\":142748100,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"},{\"symbol\":\"NVDA\",\"date\":\"2026-01-26\",\"open\":187.16,\"high\":189.12,\"low\":185.99,\"close\":186.47,\"volume\":124489200,\"fetched_at\":\"2026-01-27T17:30:40.847133Z\"}],\"anchored\":true,\"createdBy\":\"user\",\"attachedMetadata\":\"\",\"source\":{\"type\":\"stream\",\"url\":\"/api/demo-stream/yfinance/history?symbols=AAPL,MSFT,GOOGL,AMZN,META,NVDA\",\"autoRefresh\":true,\"refreshIntervalSeconds\":86400,\"lastRefreshed\":1769535041338},\"contentHash\":\"361b756d\"},{\"id\":\"table-233476\",\"displayId\":\"stock-close\",\"names\":[\"date\",\"symbol\",\"close\"],\"rows\":[{\"date\":\"2025-07-31\",\"symbol\":\"AAPL\",\"close\":207.13},{\"date\":\"2025-08-01\",\"symbol\":\"AAPL\",\"close\":201.95},{\"date\":\"2025-08-04\",\"symbol\":\"AAPL\",\"close\":202.92},{\"date\":\"2025-08-05\",\"symbol\":\"AAPL\",\"close\":202.49},{\"date\":\"2025-08-06\",\"symbol\":\"AAPL\",\"close\":212.8},{\"date\":\"2025-08-07\",\"symbol\":\"AAPL\",\"close\":219.57},{\"date\":\"2025-08-08\",\"symbol\":\"AAPL\",\"close\":228.87},{\"date\":\"2025-08-11\",\"symbol\":\"AAPL\",\"close\":226.96},{\"date\":\"2025-08-12\",\"symbol\":\"AAPL\",\"close\":229.43},{\"date\":\"2025-08-13\",\"symbol\":\"AAPL\",\"close\":233.1},{\"date\":\"2025-08-14\",\"symbol\":\"AAPL\",\"close\":232.55},{\"date\":\"2025-08-15\",\"symbol\":\"AAPL\",\"close\":231.37},{\"date\":\"2025-08-18\",\"symbol\":\"AAPL\",\"close\":230.67},{\"date\":\"2025-08-19\",\"symbol\":\"AAPL\",\"close\":230.34},{\"date\":\"2025-08-20\",\"symbol\":\"AAPL\",\"close\":225.79},{\"date\":\"2025-08-21\",\"symbol\":\"AAPL\",\"close\":224.68},{\"date\":\"2025-08-22\",\"symbol\":\"AAPL\",\"close\":227.54},{\"date\":\"2025-08-25\",\"symbol\":\"AAPL\",\"close\":226.94},{\"date\":\"2025-08-26\",\"symbol\":\"AAPL\",\"close\":229.09},{\"date\":\"2025-08-27\",\"symbol\":\"AAPL\",\"close\":230.27},{\"date\":\"2025-08-28\",\"symbol\":\"AAPL\",\"close\":232.33},{\"date\":\"2025-08-29\",\"symbol\":\"AAPL\",\"close\":231.92},{\"date\":\"2025-09-02\",\"symbol\":\"AAPL\",\"close\":229.5},{\"date\":\"2025-09-03\",\"symbol\":\"AAPL\",\"close\":238.24},{\"date\":\"2025-09-04\",\"symbol\":\"AAPL\",\"close\":239.55},{\"date\":\"2025-09-05\",\"symbol\":\"AAPL\",\"close\":239.46},{\"date\":\"2025-09-08\",\"symbol\":\"AAPL\",\"close\":237.65},{\"date\":\"2025-09-09\",\"symbol\":\"AAPL\",\"close\":234.12},{\"date\":\"2025-09-10\",\"symbol\":\"AAPL\",\"close\":226.57},{\"date\":\"2025-09-11\",\"symbol\":\"AAPL\",\"close\":229.81},{\"date\":\"2025-09-12\",\"symbol\":\"AAPL\",\"close\":233.84},{\"date\":\"2025-09-15\",\"symbol\":\"AAPL\",\"close\":236.47},{\"date\":\"2025-09-16\",\"symbol\":\"AAPL\",\"close\":237.92},{\"date\":\"2025-09-17\",\"symbol\":\"AAPL\",\"close\":238.76},{\"date\":\"2025-09-18\",\"symbol\":\"AAPL\",\"close\":237.65},{\"date\":\"2025-09-19\",\"symbol\":\"AAPL\",\"close\":245.26},{\"date\":\"2025-09-22\",\"symbol\":\"AAPL\",\"close\":255.83},{\"date\":\"2025-09-23\",\"symbol\":\"AAPL\",\"close\":254.18},{\"date\":\"2025-09-24\",\"symbol\":\"AAPL\",\"close\":252.07},{\"date\":\"2025-09-25\",\"symbol\":\"AAPL\",\"close\":256.62},{\"date\":\"2025-09-26\",\"symbol\":\"AAPL\",\"close\":255.21},{\"date\":\"2025-09-29\",\"symbol\":\"AAPL\",\"close\":254.18},{\"date\":\"2025-09-30\",\"symbol\":\"AAPL\",\"close\":254.38},{\"date\":\"2025-10-01\",\"symbol\":\"AAPL\",\"close\":255.2},{\"date\":\"2025-10-02\",\"symbol\":\"AAPL\",\"close\":256.88},{\"date\":\"2025-10-03\",\"symbol\":\"AAPL\",\"close\":257.77},{\"date\":\"2025-10-06\",\"symbol\":\"AAPL\",\"close\":256.44},{\"date\":\"2025-10-07\",\"symbol\":\"AAPL\",\"close\":256.23},{\"date\":\"2025-10-08\",\"symbol\":\"AAPL\",\"close\":257.81},{\"date\":\"2025-10-09\",\"symbol\":\"AAPL\",\"close\":253.79},{\"date\":\"2025-10-10\",\"symbol\":\"AAPL\",\"close\":245.03},{\"date\":\"2025-10-13\",\"symbol\":\"AAPL\",\"close\":247.42},{\"date\":\"2025-10-14\",\"symbol\":\"AAPL\",\"close\":247.53},{\"date\":\"2025-10-15\",\"symbol\":\"AAPL\",\"close\":249.1},{\"date\":\"2025-10-16\",\"symbol\":\"AAPL\",\"close\":247.21},{\"date\":\"2025-10-17\",\"symbol\":\"AAPL\",\"close\":252.05},{\"date\":\"2025-10-20\",\"symbol\":\"AAPL\",\"close\":261.99},{\"date\":\"2025-10-21\",\"symbol\":\"AAPL\",\"close\":262.52},{\"date\":\"2025-10-22\",\"symbol\":\"AAPL\",\"close\":258.2},{\"date\":\"2025-10-23\",\"symbol\":\"AAPL\",\"close\":259.33},{\"date\":\"2025-10-24\",\"symbol\":\"AAPL\",\"close\":262.57},{\"date\":\"2025-10-27\",\"symbol\":\"AAPL\",\"close\":268.55},{\"date\":\"2025-10-28\",\"symbol\":\"AAPL\",\"close\":268.74},{\"date\":\"2025-10-29\",\"symbol\":\"AAPL\",\"close\":269.44},{\"date\":\"2025-10-30\",\"symbol\":\"AAPL\",\"close\":271.14},{\"date\":\"2025-10-31\",\"symbol\":\"AAPL\",\"close\":270.11},{\"date\":\"2025-11-03\",\"symbol\":\"AAPL\",\"close\":268.79},{\"date\":\"2025-11-04\",\"symbol\":\"AAPL\",\"close\":269.78},{\"date\":\"2025-11-05\",\"symbol\":\"AAPL\",\"close\":269.88},{\"date\":\"2025-11-06\",\"symbol\":\"AAPL\",\"close\":269.51},{\"date\":\"2025-11-07\",\"symbol\":\"AAPL\",\"close\":268.21},{\"date\":\"2025-11-10\",\"symbol\":\"AAPL\",\"close\":269.43},{\"date\":\"2025-11-11\",\"symbol\":\"AAPL\",\"close\":275.25},{\"date\":\"2025-11-12\",\"symbol\":\"AAPL\",\"close\":273.47},{\"date\":\"2025-11-13\",\"symbol\":\"AAPL\",\"close\":272.95},{\"date\":\"2025-11-14\",\"symbol\":\"AAPL\",\"close\":272.41},{\"date\":\"2025-11-17\",\"symbol\":\"AAPL\",\"close\":267.46},{\"date\":\"2025-11-18\",\"symbol\":\"AAPL\",\"close\":267.44},{\"date\":\"2025-11-19\",\"symbol\":\"AAPL\",\"close\":268.56},{\"date\":\"2025-11-20\",\"symbol\":\"AAPL\",\"close\":266.25},{\"date\":\"2025-11-21\",\"symbol\":\"AAPL\",\"close\":271.49},{\"date\":\"2025-11-24\",\"symbol\":\"AAPL\",\"close\":275.92},{\"date\":\"2025-11-25\",\"symbol\":\"AAPL\",\"close\":276.97},{\"date\":\"2025-11-26\",\"symbol\":\"AAPL\",\"close\":277.55},{\"date\":\"2025-11-28\",\"symbol\":\"AAPL\",\"close\":278.85},{\"date\":\"2025-12-01\",\"symbol\":\"AAPL\",\"close\":283.1},{\"date\":\"2025-12-02\",\"symbol\":\"AAPL\",\"close\":286.19},{\"date\":\"2025-12-03\",\"symbol\":\"AAPL\",\"close\":284.15},{\"date\":\"2025-12-04\",\"symbol\":\"AAPL\",\"close\":280.7},{\"date\":\"2025-12-05\",\"symbol\":\"AAPL\",\"close\":278.78},{\"date\":\"2025-12-08\",\"symbol\":\"AAPL\",\"close\":277.89},{\"date\":\"2025-12-09\",\"symbol\":\"AAPL\",\"close\":277.18},{\"date\":\"2025-12-10\",\"symbol\":\"AAPL\",\"close\":278.78},{\"date\":\"2025-12-11\",\"symbol\":\"AAPL\",\"close\":278.03},{\"date\":\"2025-12-12\",\"symbol\":\"AAPL\",\"close\":278.28},{\"date\":\"2025-12-15\",\"symbol\":\"AAPL\",\"close\":274.11},{\"date\":\"2025-12-16\",\"symbol\":\"AAPL\",\"close\":274.61},{\"date\":\"2025-12-17\",\"symbol\":\"AAPL\",\"close\":271.84},{\"date\":\"2025-12-18\",\"symbol\":\"AAPL\",\"close\":272.19},{\"date\":\"2025-12-19\",\"symbol\":\"AAPL\",\"close\":273.67},{\"date\":\"2025-12-22\",\"symbol\":\"AAPL\",\"close\":270.97},{\"date\":\"2025-12-23\",\"symbol\":\"AAPL\",\"close\":272.36},{\"date\":\"2025-12-24\",\"symbol\":\"AAPL\",\"close\":273.81},{\"date\":\"2025-12-26\",\"symbol\":\"AAPL\",\"close\":273.4},{\"date\":\"2025-12-29\",\"symbol\":\"AAPL\",\"close\":273.76},{\"date\":\"2025-12-30\",\"symbol\":\"AAPL\",\"close\":273.08},{\"date\":\"2025-12-31\",\"symbol\":\"AAPL\",\"close\":271.86},{\"date\":\"2026-01-02\",\"symbol\":\"AAPL\",\"close\":271.01},{\"date\":\"2026-01-05\",\"symbol\":\"AAPL\",\"close\":267.26},{\"date\":\"2026-01-06\",\"symbol\":\"AAPL\",\"close\":262.36},{\"date\":\"2026-01-07\",\"symbol\":\"AAPL\",\"close\":260.33},{\"date\":\"2026-01-08\",\"symbol\":\"AAPL\",\"close\":259.04},{\"date\":\"2026-01-09\",\"symbol\":\"AAPL\",\"close\":259.37},{\"date\":\"2026-01-12\",\"symbol\":\"AAPL\",\"close\":260.25},{\"date\":\"2026-01-13\",\"symbol\":\"AAPL\",\"close\":261.05},{\"date\":\"2026-01-14\",\"symbol\":\"AAPL\",\"close\":259.96},{\"date\":\"2026-01-15\",\"symbol\":\"AAPL\",\"close\":258.21},{\"date\":\"2026-01-16\",\"symbol\":\"AAPL\",\"close\":255.53},{\"date\":\"2026-01-20\",\"symbol\":\"AAPL\",\"close\":246.7},{\"date\":\"2026-01-21\",\"symbol\":\"AAPL\",\"close\":247.65},{\"date\":\"2026-01-22\",\"symbol\":\"AAPL\",\"close\":248.35},{\"date\":\"2026-01-23\",\"symbol\":\"AAPL\",\"close\":248.04},{\"date\":\"2026-01-26\",\"symbol\":\"AAPL\",\"close\":255.41},{\"date\":\"2025-07-31\",\"symbol\":\"AMZN\",\"close\":234.11},{\"date\":\"2025-08-01\",\"symbol\":\"AMZN\",\"close\":214.75},{\"date\":\"2025-08-04\",\"symbol\":\"AMZN\",\"close\":211.65},{\"date\":\"2025-08-05\",\"symbol\":\"AMZN\",\"close\":213.75},{\"date\":\"2025-08-06\",\"symbol\":\"AMZN\",\"close\":222.31},{\"date\":\"2025-08-07\",\"symbol\":\"AMZN\",\"close\":223.13},{\"date\":\"2025-08-08\",\"symbol\":\"AMZN\",\"close\":222.69},{\"date\":\"2025-08-11\",\"symbol\":\"AMZN\",\"close\":221.3},{\"date\":\"2025-08-12\",\"symbol\":\"AMZN\",\"close\":221.47},{\"date\":\"2025-08-13\",\"symbol\":\"AMZN\",\"close\":224.56},{\"date\":\"2025-08-14\",\"symbol\":\"AMZN\",\"close\":230.98},{\"date\":\"2025-08-15\",\"symbol\":\"AMZN\",\"close\":231.03},{\"date\":\"2025-08-18\",\"symbol\":\"AMZN\",\"close\":231.49},{\"date\":\"2025-08-19\",\"symbol\":\"AMZN\",\"close\":228.01},{\"date\":\"2025-08-20\",\"symbol\":\"AMZN\",\"close\":223.81},{\"date\":\"2025-08-21\",\"symbol\":\"AMZN\",\"close\":221.95},{\"date\":\"2025-08-22\",\"symbol\":\"AMZN\",\"close\":228.84},{\"date\":\"2025-08-25\",\"symbol\":\"AMZN\",\"close\":227.94},{\"date\":\"2025-08-26\",\"symbol\":\"AMZN\",\"close\":228.71},{\"date\":\"2025-08-27\",\"symbol\":\"AMZN\",\"close\":229.12},{\"date\":\"2025-08-28\",\"symbol\":\"AMZN\",\"close\":231.6},{\"date\":\"2025-08-29\",\"symbol\":\"AMZN\",\"close\":229},{\"date\":\"2025-09-02\",\"symbol\":\"AMZN\",\"close\":225.34},{\"date\":\"2025-09-03\",\"symbol\":\"AMZN\",\"close\":225.99},{\"date\":\"2025-09-04\",\"symbol\":\"AMZN\",\"close\":235.68},{\"date\":\"2025-09-05\",\"symbol\":\"AMZN\",\"close\":232.33},{\"date\":\"2025-09-08\",\"symbol\":\"AMZN\",\"close\":235.84},{\"date\":\"2025-09-09\",\"symbol\":\"AMZN\",\"close\":238.24},{\"date\":\"2025-09-10\",\"symbol\":\"AMZN\",\"close\":230.33},{\"date\":\"2025-09-11\",\"symbol\":\"AMZN\",\"close\":229.95},{\"date\":\"2025-09-12\",\"symbol\":\"AMZN\",\"close\":228.15},{\"date\":\"2025-09-15\",\"symbol\":\"AMZN\",\"close\":231.43},{\"date\":\"2025-09-16\",\"symbol\":\"AMZN\",\"close\":234.05},{\"date\":\"2025-09-17\",\"symbol\":\"AMZN\",\"close\":231.62},{\"date\":\"2025-09-18\",\"symbol\":\"AMZN\",\"close\":231.23},{\"date\":\"2025-09-19\",\"symbol\":\"AMZN\",\"close\":231.48},{\"date\":\"2025-09-22\",\"symbol\":\"AMZN\",\"close\":227.63},{\"date\":\"2025-09-23\",\"symbol\":\"AMZN\",\"close\":220.71},{\"date\":\"2025-09-24\",\"symbol\":\"AMZN\",\"close\":220.21},{\"date\":\"2025-09-25\",\"symbol\":\"AMZN\",\"close\":218.15},{\"date\":\"2025-09-26\",\"symbol\":\"AMZN\",\"close\":219.78},{\"date\":\"2025-09-29\",\"symbol\":\"AMZN\",\"close\":222.17},{\"date\":\"2025-09-30\",\"symbol\":\"AMZN\",\"close\":219.57},{\"date\":\"2025-10-01\",\"symbol\":\"AMZN\",\"close\":220.63},{\"date\":\"2025-10-02\",\"symbol\":\"AMZN\",\"close\":222.41},{\"date\":\"2025-10-03\",\"symbol\":\"AMZN\",\"close\":219.51},{\"date\":\"2025-10-06\",\"symbol\":\"AMZN\",\"close\":220.9},{\"date\":\"2025-10-07\",\"symbol\":\"AMZN\",\"close\":221.78},{\"date\":\"2025-10-08\",\"symbol\":\"AMZN\",\"close\":225.22},{\"date\":\"2025-10-09\",\"symbol\":\"AMZN\",\"close\":227.74},{\"date\":\"2025-10-10\",\"symbol\":\"AMZN\",\"close\":216.37},{\"date\":\"2025-10-13\",\"symbol\":\"AMZN\",\"close\":220.07},{\"date\":\"2025-10-14\",\"symbol\":\"AMZN\",\"close\":216.39},{\"date\":\"2025-10-15\",\"symbol\":\"AMZN\",\"close\":215.57},{\"date\":\"2025-10-16\",\"symbol\":\"AMZN\",\"close\":214.47},{\"date\":\"2025-10-17\",\"symbol\":\"AMZN\",\"close\":213.04},{\"date\":\"2025-10-20\",\"symbol\":\"AMZN\",\"close\":216.48},{\"date\":\"2025-10-21\",\"symbol\":\"AMZN\",\"close\":222.03},{\"date\":\"2025-10-22\",\"symbol\":\"AMZN\",\"close\":217.95},{\"date\":\"2025-10-23\",\"symbol\":\"AMZN\",\"close\":221.09},{\"date\":\"2025-10-24\",\"symbol\":\"AMZN\",\"close\":224.21},{\"date\":\"2025-10-27\",\"symbol\":\"AMZN\",\"close\":226.97},{\"date\":\"2025-10-28\",\"symbol\":\"AMZN\",\"close\":229.25},{\"date\":\"2025-10-29\",\"symbol\":\"AMZN\",\"close\":230.3},{\"date\":\"2025-10-30\",\"symbol\":\"AMZN\",\"close\":222.86},{\"date\":\"2025-10-31\",\"symbol\":\"AMZN\",\"close\":244.22},{\"date\":\"2025-11-03\",\"symbol\":\"AMZN\",\"close\":254},{\"date\":\"2025-11-04\",\"symbol\":\"AMZN\",\"close\":249.32},{\"date\":\"2025-11-05\",\"symbol\":\"AMZN\",\"close\":250.2},{\"date\":\"2025-11-06\",\"symbol\":\"AMZN\",\"close\":243.04},{\"date\":\"2025-11-07\",\"symbol\":\"AMZN\",\"close\":244.41},{\"date\":\"2025-11-10\",\"symbol\":\"AMZN\",\"close\":248.4},{\"date\":\"2025-11-11\",\"symbol\":\"AMZN\",\"close\":249.1},{\"date\":\"2025-11-12\",\"symbol\":\"AMZN\",\"close\":244.2},{\"date\":\"2025-11-13\",\"symbol\":\"AMZN\",\"close\":237.58},{\"date\":\"2025-11-14\",\"symbol\":\"AMZN\",\"close\":234.69},{\"date\":\"2025-11-17\",\"symbol\":\"AMZN\",\"close\":232.87},{\"date\":\"2025-11-18\",\"symbol\":\"AMZN\",\"close\":222.55},{\"date\":\"2025-11-19\",\"symbol\":\"AMZN\",\"close\":222.69},{\"date\":\"2025-11-20\",\"symbol\":\"AMZN\",\"close\":217.14},{\"date\":\"2025-11-21\",\"symbol\":\"AMZN\",\"close\":220.69},{\"date\":\"2025-11-24\",\"symbol\":\"AMZN\",\"close\":226.28},{\"date\":\"2025-11-25\",\"symbol\":\"AMZN\",\"close\":229.67},{\"date\":\"2025-11-26\",\"symbol\":\"AMZN\",\"close\":229.16},{\"date\":\"2025-11-28\",\"symbol\":\"AMZN\",\"close\":233.22},{\"date\":\"2025-12-01\",\"symbol\":\"AMZN\",\"close\":233.88},{\"date\":\"2025-12-02\",\"symbol\":\"AMZN\",\"close\":234.42},{\"date\":\"2025-12-03\",\"symbol\":\"AMZN\",\"close\":232.38},{\"date\":\"2025-12-04\",\"symbol\":\"AMZN\",\"close\":229.11},{\"date\":\"2025-12-05\",\"symbol\":\"AMZN\",\"close\":229.53},{\"date\":\"2025-12-08\",\"symbol\":\"AMZN\",\"close\":226.89},{\"date\":\"2025-12-09\",\"symbol\":\"AMZN\",\"close\":227.92},{\"date\":\"2025-12-10\",\"symbol\":\"AMZN\",\"close\":231.78},{\"date\":\"2025-12-11\",\"symbol\":\"AMZN\",\"close\":230.28},{\"date\":\"2025-12-12\",\"symbol\":\"AMZN\",\"close\":226.19},{\"date\":\"2025-12-15\",\"symbol\":\"AMZN\",\"close\":222.54},{\"date\":\"2025-12-16\",\"symbol\":\"AMZN\",\"close\":222.56},{\"date\":\"2025-12-17\",\"symbol\":\"AMZN\",\"close\":221.27},{\"date\":\"2025-12-18\",\"symbol\":\"AMZN\",\"close\":226.76},{\"date\":\"2025-12-19\",\"symbol\":\"AMZN\",\"close\":227.35},{\"date\":\"2025-12-22\",\"symbol\":\"AMZN\",\"close\":228.43},{\"date\":\"2025-12-23\",\"symbol\":\"AMZN\",\"close\":232.14},{\"date\":\"2025-12-24\",\"symbol\":\"AMZN\",\"close\":232.38},{\"date\":\"2025-12-26\",\"symbol\":\"AMZN\",\"close\":232.52},{\"date\":\"2025-12-29\",\"symbol\":\"AMZN\",\"close\":232.07},{\"date\":\"2025-12-30\",\"symbol\":\"AMZN\",\"close\":232.53},{\"date\":\"2025-12-31\",\"symbol\":\"AMZN\",\"close\":230.82},{\"date\":\"2026-01-02\",\"symbol\":\"AMZN\",\"close\":226.5},{\"date\":\"2026-01-05\",\"symbol\":\"AMZN\",\"close\":233.06},{\"date\":\"2026-01-06\",\"symbol\":\"AMZN\",\"close\":240.93},{\"date\":\"2026-01-07\",\"symbol\":\"AMZN\",\"close\":241.56},{\"date\":\"2026-01-08\",\"symbol\":\"AMZN\",\"close\":246.29},{\"date\":\"2026-01-09\",\"symbol\":\"AMZN\",\"close\":247.38},{\"date\":\"2026-01-12\",\"symbol\":\"AMZN\",\"close\":246.47},{\"date\":\"2026-01-13\",\"symbol\":\"AMZN\",\"close\":242.6},{\"date\":\"2026-01-14\",\"symbol\":\"AMZN\",\"close\":236.65},{\"date\":\"2026-01-15\",\"symbol\":\"AMZN\",\"close\":238.18},{\"date\":\"2026-01-16\",\"symbol\":\"AMZN\",\"close\":239.12},{\"date\":\"2026-01-20\",\"symbol\":\"AMZN\",\"close\":231},{\"date\":\"2026-01-21\",\"symbol\":\"AMZN\",\"close\":231.31},{\"date\":\"2026-01-22\",\"symbol\":\"AMZN\",\"close\":234.34},{\"date\":\"2026-01-23\",\"symbol\":\"AMZN\",\"close\":239.16},{\"date\":\"2026-01-26\",\"symbol\":\"AMZN\",\"close\":238.42},{\"date\":\"2025-07-31\",\"symbol\":\"GOOGL\",\"close\":191.6},{\"date\":\"2025-08-01\",\"symbol\":\"GOOGL\",\"close\":188.84},{\"date\":\"2025-08-04\",\"symbol\":\"GOOGL\",\"close\":194.74},{\"date\":\"2025-08-05\",\"symbol\":\"GOOGL\",\"close\":194.37},{\"date\":\"2025-08-06\",\"symbol\":\"GOOGL\",\"close\":195.79},{\"date\":\"2025-08-07\",\"symbol\":\"GOOGL\",\"close\":196.22},{\"date\":\"2025-08-08\",\"symbol\":\"GOOGL\",\"close\":201.11},{\"date\":\"2025-08-11\",\"symbol\":\"GOOGL\",\"close\":200.69},{\"date\":\"2025-08-12\",\"symbol\":\"GOOGL\",\"close\":203.03},{\"date\":\"2025-08-13\",\"symbol\":\"GOOGL\",\"close\":201.65},{\"date\":\"2025-08-14\",\"symbol\":\"GOOGL\",\"close\":202.63},{\"date\":\"2025-08-15\",\"symbol\":\"GOOGL\",\"close\":203.58},{\"date\":\"2025-08-18\",\"symbol\":\"GOOGL\",\"close\":203.19},{\"date\":\"2025-08-19\",\"symbol\":\"GOOGL\",\"close\":201.26},{\"date\":\"2025-08-20\",\"symbol\":\"GOOGL\",\"close\":199.01},{\"date\":\"2025-08-21\",\"symbol\":\"GOOGL\",\"close\":199.44},{\"date\":\"2025-08-22\",\"symbol\":\"GOOGL\",\"close\":205.77},{\"date\":\"2025-08-25\",\"symbol\":\"GOOGL\",\"close\":208.17},{\"date\":\"2025-08-26\",\"symbol\":\"GOOGL\",\"close\":206.82},{\"date\":\"2025-08-27\",\"symbol\":\"GOOGL\",\"close\":207.16},{\"date\":\"2025-08-28\",\"symbol\":\"GOOGL\",\"close\":211.31},{\"date\":\"2025-08-29\",\"symbol\":\"GOOGL\",\"close\":212.58},{\"date\":\"2025-09-02\",\"symbol\":\"GOOGL\",\"close\":211.02},{\"date\":\"2025-09-03\",\"symbol\":\"GOOGL\",\"close\":230.3},{\"date\":\"2025-09-04\",\"symbol\":\"GOOGL\",\"close\":231.94},{\"date\":\"2025-09-05\",\"symbol\":\"GOOGL\",\"close\":234.64},{\"date\":\"2025-09-08\",\"symbol\":\"GOOGL\",\"close\":233.89},{\"date\":\"2025-09-09\",\"symbol\":\"GOOGL\",\"close\":239.47},{\"date\":\"2025-09-10\",\"symbol\":\"GOOGL\",\"close\":239.01},{\"date\":\"2025-09-11\",\"symbol\":\"GOOGL\",\"close\":240.21},{\"date\":\"2025-09-12\",\"symbol\":\"GOOGL\",\"close\":240.64},{\"date\":\"2025-09-15\",\"symbol\":\"GOOGL\",\"close\":251.45},{\"date\":\"2025-09-16\",\"symbol\":\"GOOGL\",\"close\":251},{\"date\":\"2025-09-17\",\"symbol\":\"GOOGL\",\"close\":249.37},{\"date\":\"2025-09-18\",\"symbol\":\"GOOGL\",\"close\":251.87},{\"date\":\"2025-09-19\",\"symbol\":\"GOOGL\",\"close\":254.55},{\"date\":\"2025-09-22\",\"symbol\":\"GOOGL\",\"close\":252.36},{\"date\":\"2025-09-23\",\"symbol\":\"GOOGL\",\"close\":251.5},{\"date\":\"2025-09-24\",\"symbol\":\"GOOGL\",\"close\":246.98},{\"date\":\"2025-09-25\",\"symbol\":\"GOOGL\",\"close\":245.63},{\"date\":\"2025-09-26\",\"symbol\":\"GOOGL\",\"close\":246.38},{\"date\":\"2025-09-29\",\"symbol\":\"GOOGL\",\"close\":243.89},{\"date\":\"2025-09-30\",\"symbol\":\"GOOGL\",\"close\":242.94},{\"date\":\"2025-10-01\",\"symbol\":\"GOOGL\",\"close\":244.74},{\"date\":\"2025-10-02\",\"symbol\":\"GOOGL\",\"close\":245.53},{\"date\":\"2025-10-03\",\"symbol\":\"GOOGL\",\"close\":245.19},{\"date\":\"2025-10-06\",\"symbol\":\"GOOGL\",\"close\":250.27},{\"date\":\"2025-10-07\",\"symbol\":\"GOOGL\",\"close\":245.6},{\"date\":\"2025-10-08\",\"symbol\":\"GOOGL\",\"close\":244.46},{\"date\":\"2025-10-09\",\"symbol\":\"GOOGL\",\"close\":241.37},{\"date\":\"2025-10-10\",\"symbol\":\"GOOGL\",\"close\":236.42},{\"date\":\"2025-10-13\",\"symbol\":\"GOOGL\",\"close\":243.99},{\"date\":\"2025-10-14\",\"symbol\":\"GOOGL\",\"close\":245.29},{\"date\":\"2025-10-15\",\"symbol\":\"GOOGL\",\"close\":250.87},{\"date\":\"2025-10-16\",\"symbol\":\"GOOGL\",\"close\":251.3},{\"date\":\"2025-10-17\",\"symbol\":\"GOOGL\",\"close\":253.13},{\"date\":\"2025-10-20\",\"symbol\":\"GOOGL\",\"close\":256.38},{\"date\":\"2025-10-21\",\"symbol\":\"GOOGL\",\"close\":250.3},{\"date\":\"2025-10-22\",\"symbol\":\"GOOGL\",\"close\":251.53},{\"date\":\"2025-10-23\",\"symbol\":\"GOOGL\",\"close\":252.91},{\"date\":\"2025-10-24\",\"symbol\":\"GOOGL\",\"close\":259.75},{\"date\":\"2025-10-27\",\"symbol\":\"GOOGL\",\"close\":269.09},{\"date\":\"2025-10-28\",\"symbol\":\"GOOGL\",\"close\":267.3},{\"date\":\"2025-10-29\",\"symbol\":\"GOOGL\",\"close\":274.39},{\"date\":\"2025-10-30\",\"symbol\":\"GOOGL\",\"close\":281.3},{\"date\":\"2025-10-31\",\"symbol\":\"GOOGL\",\"close\":281.01},{\"date\":\"2025-11-03\",\"symbol\":\"GOOGL\",\"close\":283.53},{\"date\":\"2025-11-04\",\"symbol\":\"GOOGL\",\"close\":277.36},{\"date\":\"2025-11-05\",\"symbol\":\"GOOGL\",\"close\":284.12},{\"date\":\"2025-11-06\",\"symbol\":\"GOOGL\",\"close\":284.56},{\"date\":\"2025-11-07\",\"symbol\":\"GOOGL\",\"close\":278.65},{\"date\":\"2025-11-10\",\"symbol\":\"GOOGL\",\"close\":289.91},{\"date\":\"2025-11-11\",\"symbol\":\"GOOGL\",\"close\":291.12},{\"date\":\"2025-11-12\",\"symbol\":\"GOOGL\",\"close\":286.52},{\"date\":\"2025-11-13\",\"symbol\":\"GOOGL\",\"close\":278.39},{\"date\":\"2025-11-14\",\"symbol\":\"GOOGL\",\"close\":276.23},{\"date\":\"2025-11-17\",\"symbol\":\"GOOGL\",\"close\":284.83},{\"date\":\"2025-11-18\",\"symbol\":\"GOOGL\",\"close\":284.09},{\"date\":\"2025-11-19\",\"symbol\":\"GOOGL\",\"close\":292.62},{\"date\":\"2025-11-20\",\"symbol\":\"GOOGL\",\"close\":289.26},{\"date\":\"2025-11-21\",\"symbol\":\"GOOGL\",\"close\":299.46},{\"date\":\"2025-11-24\",\"symbol\":\"GOOGL\",\"close\":318.37},{\"date\":\"2025-11-25\",\"symbol\":\"GOOGL\",\"close\":323.23},{\"date\":\"2025-11-26\",\"symbol\":\"GOOGL\",\"close\":319.74},{\"date\":\"2025-11-28\",\"symbol\":\"GOOGL\",\"close\":319.97},{\"date\":\"2025-12-01\",\"symbol\":\"GOOGL\",\"close\":314.68},{\"date\":\"2025-12-02\",\"symbol\":\"GOOGL\",\"close\":315.6},{\"date\":\"2025-12-03\",\"symbol\":\"GOOGL\",\"close\":319.42},{\"date\":\"2025-12-04\",\"symbol\":\"GOOGL\",\"close\":317.41},{\"date\":\"2025-12-05\",\"symbol\":\"GOOGL\",\"close\":321.06},{\"date\":\"2025-12-08\",\"symbol\":\"GOOGL\",\"close\":313.72},{\"date\":\"2025-12-09\",\"symbol\":\"GOOGL\",\"close\":317.08},{\"date\":\"2025-12-10\",\"symbol\":\"GOOGL\",\"close\":320.21},{\"date\":\"2025-12-11\",\"symbol\":\"GOOGL\",\"close\":312.43},{\"date\":\"2025-12-12\",\"symbol\":\"GOOGL\",\"close\":309.29},{\"date\":\"2025-12-15\",\"symbol\":\"GOOGL\",\"close\":308.22},{\"date\":\"2025-12-16\",\"symbol\":\"GOOGL\",\"close\":306.57},{\"date\":\"2025-12-17\",\"symbol\":\"GOOGL\",\"close\":296.72},{\"date\":\"2025-12-18\",\"symbol\":\"GOOGL\",\"close\":302.46},{\"date\":\"2025-12-19\",\"symbol\":\"GOOGL\",\"close\":307.16},{\"date\":\"2025-12-22\",\"symbol\":\"GOOGL\",\"close\":309.78},{\"date\":\"2025-12-23\",\"symbol\":\"GOOGL\",\"close\":314.35},{\"date\":\"2025-12-24\",\"symbol\":\"GOOGL\",\"close\":314.09},{\"date\":\"2025-12-26\",\"symbol\":\"GOOGL\",\"close\":313.51},{\"date\":\"2025-12-29\",\"symbol\":\"GOOGL\",\"close\":313.56},{\"date\":\"2025-12-30\",\"symbol\":\"GOOGL\",\"close\":313.85},{\"date\":\"2025-12-31\",\"symbol\":\"GOOGL\",\"close\":313},{\"date\":\"2026-01-02\",\"symbol\":\"GOOGL\",\"close\":315.15},{\"date\":\"2026-01-05\",\"symbol\":\"GOOGL\",\"close\":316.54},{\"date\":\"2026-01-06\",\"symbol\":\"GOOGL\",\"close\":314.34},{\"date\":\"2026-01-07\",\"symbol\":\"GOOGL\",\"close\":321.98},{\"date\":\"2026-01-08\",\"symbol\":\"GOOGL\",\"close\":325.44},{\"date\":\"2026-01-09\",\"symbol\":\"GOOGL\",\"close\":328.57},{\"date\":\"2026-01-12\",\"symbol\":\"GOOGL\",\"close\":331.86},{\"date\":\"2026-01-13\",\"symbol\":\"GOOGL\",\"close\":335.97},{\"date\":\"2026-01-14\",\"symbol\":\"GOOGL\",\"close\":335.84},{\"date\":\"2026-01-15\",\"symbol\":\"GOOGL\",\"close\":332.78},{\"date\":\"2026-01-16\",\"symbol\":\"GOOGL\",\"close\":330},{\"date\":\"2026-01-20\",\"symbol\":\"GOOGL\",\"close\":322},{\"date\":\"2026-01-21\",\"symbol\":\"GOOGL\",\"close\":328.38},{\"date\":\"2026-01-22\",\"symbol\":\"GOOGL\",\"close\":330.54},{\"date\":\"2026-01-23\",\"symbol\":\"GOOGL\",\"close\":327.93},{\"date\":\"2026-01-26\",\"symbol\":\"GOOGL\",\"close\":333.26},{\"date\":\"2025-07-31\",\"symbol\":\"META\",\"close\":772.29},{\"date\":\"2025-08-01\",\"symbol\":\"META\",\"close\":748.89},{\"date\":\"2025-08-04\",\"symbol\":\"META\",\"close\":775.21},{\"date\":\"2025-08-05\",\"symbol\":\"META\",\"close\":762.32},{\"date\":\"2025-08-06\",\"symbol\":\"META\",\"close\":770.84},{\"date\":\"2025-08-07\",\"symbol\":\"META\",\"close\":760.7},{\"date\":\"2025-08-08\",\"symbol\":\"META\",\"close\":768.15},{\"date\":\"2025-08-11\",\"symbol\":\"META\",\"close\":764.73},{\"date\":\"2025-08-12\",\"symbol\":\"META\",\"close\":788.82},{\"date\":\"2025-08-13\",\"symbol\":\"META\",\"close\":778.92},{\"date\":\"2025-08-14\",\"symbol\":\"META\",\"close\":780.97},{\"date\":\"2025-08-15\",\"symbol\":\"META\",\"close\":784.06},{\"date\":\"2025-08-18\",\"symbol\":\"META\",\"close\":766.23},{\"date\":\"2025-08-19\",\"symbol\":\"META\",\"close\":750.36},{\"date\":\"2025-08-20\",\"symbol\":\"META\",\"close\":746.61},{\"date\":\"2025-08-21\",\"symbol\":\"META\",\"close\":738},{\"date\":\"2025-08-22\",\"symbol\":\"META\",\"close\":753.67},{\"date\":\"2025-08-25\",\"symbol\":\"META\",\"close\":752.18},{\"date\":\"2025-08-26\",\"symbol\":\"META\",\"close\":752.98},{\"date\":\"2025-08-27\",\"symbol\":\"META\",\"close\":746.27},{\"date\":\"2025-08-28\",\"symbol\":\"META\",\"close\":749.99},{\"date\":\"2025-08-29\",\"symbol\":\"META\",\"close\":737.6},{\"date\":\"2025-09-02\",\"symbol\":\"META\",\"close\":734.02},{\"date\":\"2025-09-03\",\"symbol\":\"META\",\"close\":735.95},{\"date\":\"2025-09-04\",\"symbol\":\"META\",\"close\":747.54},{\"date\":\"2025-09-05\",\"symbol\":\"META\",\"close\":751.33},{\"date\":\"2025-09-08\",\"symbol\":\"META\",\"close\":751.18},{\"date\":\"2025-09-09\",\"symbol\":\"META\",\"close\":764.56},{\"date\":\"2025-09-10\",\"symbol\":\"META\",\"close\":750.86},{\"date\":\"2025-09-11\",\"symbol\":\"META\",\"close\":749.78},{\"date\":\"2025-09-12\",\"symbol\":\"META\",\"close\":754.47},{\"date\":\"2025-09-15\",\"symbol\":\"META\",\"close\":763.56},{\"date\":\"2025-09-16\",\"symbol\":\"META\",\"close\":777.84},{\"date\":\"2025-09-17\",\"symbol\":\"META\",\"close\":774.57},{\"date\":\"2025-09-18\",\"symbol\":\"META\",\"close\":779.09},{\"date\":\"2025-09-19\",\"symbol\":\"META\",\"close\":777.22},{\"date\":\"2025-09-22\",\"symbol\":\"META\",\"close\":764.54},{\"date\":\"2025-09-23\",\"symbol\":\"META\",\"close\":754.78},{\"date\":\"2025-09-24\",\"symbol\":\"META\",\"close\":760.04},{\"date\":\"2025-09-25\",\"symbol\":\"META\",\"close\":748.3},{\"date\":\"2025-09-26\",\"symbol\":\"META\",\"close\":743.14},{\"date\":\"2025-09-29\",\"symbol\":\"META\",\"close\":742.79},{\"date\":\"2025-09-30\",\"symbol\":\"META\",\"close\":733.78},{\"date\":\"2025-10-01\",\"symbol\":\"META\",\"close\":716.76},{\"date\":\"2025-10-02\",\"symbol\":\"META\",\"close\":726.46},{\"date\":\"2025-10-03\",\"symbol\":\"META\",\"close\":709.98},{\"date\":\"2025-10-06\",\"symbol\":\"META\",\"close\":715.08},{\"date\":\"2025-10-07\",\"symbol\":\"META\",\"close\":712.5},{\"date\":\"2025-10-08\",\"symbol\":\"META\",\"close\":717.26},{\"date\":\"2025-10-09\",\"symbol\":\"META\",\"close\":732.91},{\"date\":\"2025-10-10\",\"symbol\":\"META\",\"close\":704.73},{\"date\":\"2025-10-13\",\"symbol\":\"META\",\"close\":715.12},{\"date\":\"2025-10-14\",\"symbol\":\"META\",\"close\":708.07},{\"date\":\"2025-10-15\",\"symbol\":\"META\",\"close\":716.97},{\"date\":\"2025-10-16\",\"symbol\":\"META\",\"close\":711.49},{\"date\":\"2025-10-17\",\"symbol\":\"META\",\"close\":716.34},{\"date\":\"2025-10-20\",\"symbol\":\"META\",\"close\":731.57},{\"date\":\"2025-10-21\",\"symbol\":\"META\",\"close\":732.67},{\"date\":\"2025-10-22\",\"symbol\":\"META\",\"close\":732.81},{\"date\":\"2025-10-23\",\"symbol\":\"META\",\"close\":733.4},{\"date\":\"2025-10-24\",\"symbol\":\"META\",\"close\":737.76},{\"date\":\"2025-10-27\",\"symbol\":\"META\",\"close\":750.21},{\"date\":\"2025-10-28\",\"symbol\":\"META\",\"close\":750.83},{\"date\":\"2025-10-29\",\"symbol\":\"META\",\"close\":751.06},{\"date\":\"2025-10-30\",\"symbol\":\"META\",\"close\":665.93},{\"date\":\"2025-10-31\",\"symbol\":\"META\",\"close\":647.82},{\"date\":\"2025-11-03\",\"symbol\":\"META\",\"close\":637.19},{\"date\":\"2025-11-04\",\"symbol\":\"META\",\"close\":626.81},{\"date\":\"2025-11-05\",\"symbol\":\"META\",\"close\":635.43},{\"date\":\"2025-11-06\",\"symbol\":\"META\",\"close\":618.44},{\"date\":\"2025-11-07\",\"symbol\":\"META\",\"close\":621.2},{\"date\":\"2025-11-10\",\"symbol\":\"META\",\"close\":631.25},{\"date\":\"2025-11-11\",\"symbol\":\"META\",\"close\":626.57},{\"date\":\"2025-11-12\",\"symbol\":\"META\",\"close\":608.51},{\"date\":\"2025-11-13\",\"symbol\":\"META\",\"close\":609.39},{\"date\":\"2025-11-14\",\"symbol\":\"META\",\"close\":608.96},{\"date\":\"2025-11-17\",\"symbol\":\"META\",\"close\":601.52},{\"date\":\"2025-11-18\",\"symbol\":\"META\",\"close\":597.2},{\"date\":\"2025-11-19\",\"symbol\":\"META\",\"close\":589.84},{\"date\":\"2025-11-20\",\"symbol\":\"META\",\"close\":588.67},{\"date\":\"2025-11-21\",\"symbol\":\"META\",\"close\":593.77},{\"date\":\"2025-11-24\",\"symbol\":\"META\",\"close\":612.55},{\"date\":\"2025-11-25\",\"symbol\":\"META\",\"close\":635.7},{\"date\":\"2025-11-26\",\"symbol\":\"META\",\"close\":633.09},{\"date\":\"2025-11-28\",\"symbol\":\"META\",\"close\":647.42},{\"date\":\"2025-12-01\",\"symbol\":\"META\",\"close\":640.35},{\"date\":\"2025-12-02\",\"symbol\":\"META\",\"close\":646.57},{\"date\":\"2025-12-03\",\"symbol\":\"META\",\"close\":639.08},{\"date\":\"2025-12-04\",\"symbol\":\"META\",\"close\":660.99},{\"date\":\"2025-12-05\",\"symbol\":\"META\",\"close\":672.87},{\"date\":\"2025-12-08\",\"symbol\":\"META\",\"close\":666.26},{\"date\":\"2025-12-09\",\"symbol\":\"META\",\"close\":656.42},{\"date\":\"2025-12-10\",\"symbol\":\"META\",\"close\":649.6},{\"date\":\"2025-12-11\",\"symbol\":\"META\",\"close\":652.18},{\"date\":\"2025-12-12\",\"symbol\":\"META\",\"close\":643.71},{\"date\":\"2025-12-15\",\"symbol\":\"META\",\"close\":647.51},{\"date\":\"2025-12-16\",\"symbol\":\"META\",\"close\":657.15},{\"date\":\"2025-12-17\",\"symbol\":\"META\",\"close\":649.5},{\"date\":\"2025-12-18\",\"symbol\":\"META\",\"close\":664.45},{\"date\":\"2025-12-19\",\"symbol\":\"META\",\"close\":658.77},{\"date\":\"2025-12-22\",\"symbol\":\"META\",\"close\":661.5},{\"date\":\"2025-12-23\",\"symbol\":\"META\",\"close\":664.94},{\"date\":\"2025-12-24\",\"symbol\":\"META\",\"close\":667.55},{\"date\":\"2025-12-26\",\"symbol\":\"META\",\"close\":663.29},{\"date\":\"2025-12-29\",\"symbol\":\"META\",\"close\":658.69},{\"date\":\"2025-12-30\",\"symbol\":\"META\",\"close\":665.95},{\"date\":\"2025-12-31\",\"symbol\":\"META\",\"close\":660.09},{\"date\":\"2026-01-02\",\"symbol\":\"META\",\"close\":650.41},{\"date\":\"2026-01-05\",\"symbol\":\"META\",\"close\":658.79},{\"date\":\"2026-01-06\",\"symbol\":\"META\",\"close\":660.62},{\"date\":\"2026-01-07\",\"symbol\":\"META\",\"close\":648.69},{\"date\":\"2026-01-08\",\"symbol\":\"META\",\"close\":646.06},{\"date\":\"2026-01-09\",\"symbol\":\"META\",\"close\":653.06},{\"date\":\"2026-01-12\",\"symbol\":\"META\",\"close\":641.97},{\"date\":\"2026-01-13\",\"symbol\":\"META\",\"close\":631.09},{\"date\":\"2026-01-14\",\"symbol\":\"META\",\"close\":615.52},{\"date\":\"2026-01-15\",\"symbol\":\"META\",\"close\":620.8},{\"date\":\"2026-01-16\",\"symbol\":\"META\",\"close\":620.25},{\"date\":\"2026-01-20\",\"symbol\":\"META\",\"close\":604.12},{\"date\":\"2026-01-21\",\"symbol\":\"META\",\"close\":612.96},{\"date\":\"2026-01-22\",\"symbol\":\"META\",\"close\":647.63},{\"date\":\"2026-01-23\",\"symbol\":\"META\",\"close\":658.76},{\"date\":\"2026-01-26\",\"symbol\":\"META\",\"close\":672.36},{\"date\":\"2025-07-31\",\"symbol\":\"MSFT\",\"close\":531.63},{\"date\":\"2025-08-01\",\"symbol\":\"MSFT\",\"close\":522.27},{\"date\":\"2025-08-04\",\"symbol\":\"MSFT\",\"close\":533.76},{\"date\":\"2025-08-05\",\"symbol\":\"MSFT\",\"close\":525.9},{\"date\":\"2025-08-06\",\"symbol\":\"MSFT\",\"close\":523.1},{\"date\":\"2025-08-07\",\"symbol\":\"MSFT\",\"close\":519.01},{\"date\":\"2025-08-08\",\"symbol\":\"MSFT\",\"close\":520.21},{\"date\":\"2025-08-11\",\"symbol\":\"MSFT\",\"close\":519.94},{\"date\":\"2025-08-12\",\"symbol\":\"MSFT\",\"close\":527.38},{\"date\":\"2025-08-13\",\"symbol\":\"MSFT\",\"close\":518.75},{\"date\":\"2025-08-14\",\"symbol\":\"MSFT\",\"close\":520.65},{\"date\":\"2025-08-15\",\"symbol\":\"MSFT\",\"close\":518.35},{\"date\":\"2025-08-18\",\"symbol\":\"MSFT\",\"close\":515.29},{\"date\":\"2025-08-19\",\"symbol\":\"MSFT\",\"close\":507.98},{\"date\":\"2025-08-20\",\"symbol\":\"MSFT\",\"close\":503.95},{\"date\":\"2025-08-21\",\"symbol\":\"MSFT\",\"close\":503.3},{\"date\":\"2025-08-22\",\"symbol\":\"MSFT\",\"close\":506.28},{\"date\":\"2025-08-25\",\"symbol\":\"MSFT\",\"close\":503.32},{\"date\":\"2025-08-26\",\"symbol\":\"MSFT\",\"close\":501.1},{\"date\":\"2025-08-27\",\"symbol\":\"MSFT\",\"close\":505.79},{\"date\":\"2025-08-28\",\"symbol\":\"MSFT\",\"close\":508.69},{\"date\":\"2025-08-29\",\"symbol\":\"MSFT\",\"close\":505.74},{\"date\":\"2025-09-02\",\"symbol\":\"MSFT\",\"close\":504.18},{\"date\":\"2025-09-03\",\"symbol\":\"MSFT\",\"close\":504.41},{\"date\":\"2025-09-04\",\"symbol\":\"MSFT\",\"close\":507.02},{\"date\":\"2025-09-05\",\"symbol\":\"MSFT\",\"close\":494.08},{\"date\":\"2025-09-08\",\"symbol\":\"MSFT\",\"close\":497.27},{\"date\":\"2025-09-09\",\"symbol\":\"MSFT\",\"close\":497.48},{\"date\":\"2025-09-10\",\"symbol\":\"MSFT\",\"close\":499.44},{\"date\":\"2025-09-11\",\"symbol\":\"MSFT\",\"close\":500.07},{\"date\":\"2025-09-12\",\"symbol\":\"MSFT\",\"close\":508.95},{\"date\":\"2025-09-15\",\"symbol\":\"MSFT\",\"close\":514.4},{\"date\":\"2025-09-16\",\"symbol\":\"MSFT\",\"close\":508.09},{\"date\":\"2025-09-17\",\"symbol\":\"MSFT\",\"close\":509.07},{\"date\":\"2025-09-18\",\"symbol\":\"MSFT\",\"close\":507.5},{\"date\":\"2025-09-19\",\"symbol\":\"MSFT\",\"close\":516.96},{\"date\":\"2025-09-22\",\"symbol\":\"MSFT\",\"close\":513.49},{\"date\":\"2025-09-23\",\"symbol\":\"MSFT\",\"close\":508.28},{\"date\":\"2025-09-24\",\"symbol\":\"MSFT\",\"close\":509.2},{\"date\":\"2025-09-25\",\"symbol\":\"MSFT\",\"close\":506.08},{\"date\":\"2025-09-26\",\"symbol\":\"MSFT\",\"close\":510.5},{\"date\":\"2025-09-29\",\"symbol\":\"MSFT\",\"close\":513.64},{\"date\":\"2025-09-30\",\"symbol\":\"MSFT\",\"close\":516.98},{\"date\":\"2025-10-01\",\"symbol\":\"MSFT\",\"close\":518.74},{\"date\":\"2025-10-02\",\"symbol\":\"MSFT\",\"close\":514.78},{\"date\":\"2025-10-03\",\"symbol\":\"MSFT\",\"close\":516.38},{\"date\":\"2025-10-06\",\"symbol\":\"MSFT\",\"close\":527.58},{\"date\":\"2025-10-07\",\"symbol\":\"MSFT\",\"close\":523},{\"date\":\"2025-10-08\",\"symbol\":\"MSFT\",\"close\":523.87},{\"date\":\"2025-10-09\",\"symbol\":\"MSFT\",\"close\":521.42},{\"date\":\"2025-10-10\",\"symbol\":\"MSFT\",\"close\":510.01},{\"date\":\"2025-10-13\",\"symbol\":\"MSFT\",\"close\":513.09},{\"date\":\"2025-10-14\",\"symbol\":\"MSFT\",\"close\":512.61},{\"date\":\"2025-10-15\",\"symbol\":\"MSFT\",\"close\":512.47},{\"date\":\"2025-10-16\",\"symbol\":\"MSFT\",\"close\":510.65},{\"date\":\"2025-10-17\",\"symbol\":\"MSFT\",\"close\":512.62},{\"date\":\"2025-10-20\",\"symbol\":\"MSFT\",\"close\":515.82},{\"date\":\"2025-10-21\",\"symbol\":\"MSFT\",\"close\":516.69},{\"date\":\"2025-10-22\",\"symbol\":\"MSFT\",\"close\":519.57},{\"date\":\"2025-10-23\",\"symbol\":\"MSFT\",\"close\":519.59},{\"date\":\"2025-10-24\",\"symbol\":\"MSFT\",\"close\":522.63},{\"date\":\"2025-10-27\",\"symbol\":\"MSFT\",\"close\":530.53},{\"date\":\"2025-10-28\",\"symbol\":\"MSFT\",\"close\":541.06},{\"date\":\"2025-10-29\",\"symbol\":\"MSFT\",\"close\":540.54},{\"date\":\"2025-10-30\",\"symbol\":\"MSFT\",\"close\":524.78},{\"date\":\"2025-10-31\",\"symbol\":\"MSFT\",\"close\":516.84},{\"date\":\"2025-11-03\",\"symbol\":\"MSFT\",\"close\":516.06},{\"date\":\"2025-11-04\",\"symbol\":\"MSFT\",\"close\":513.37},{\"date\":\"2025-11-05\",\"symbol\":\"MSFT\",\"close\":506.21},{\"date\":\"2025-11-06\",\"symbol\":\"MSFT\",\"close\":496.17},{\"date\":\"2025-11-07\",\"symbol\":\"MSFT\",\"close\":495.89},{\"date\":\"2025-11-10\",\"symbol\":\"MSFT\",\"close\":505.05},{\"date\":\"2025-11-11\",\"symbol\":\"MSFT\",\"close\":507.73},{\"date\":\"2025-11-12\",\"symbol\":\"MSFT\",\"close\":510.19},{\"date\":\"2025-11-13\",\"symbol\":\"MSFT\",\"close\":502.35},{\"date\":\"2025-11-14\",\"symbol\":\"MSFT\",\"close\":509.23},{\"date\":\"2025-11-17\",\"symbol\":\"MSFT\",\"close\":506.54},{\"date\":\"2025-11-18\",\"symbol\":\"MSFT\",\"close\":492.87},{\"date\":\"2025-11-19\",\"symbol\":\"MSFT\",\"close\":486.21},{\"date\":\"2025-11-20\",\"symbol\":\"MSFT\",\"close\":478.43},{\"date\":\"2025-11-21\",\"symbol\":\"MSFT\",\"close\":472.12},{\"date\":\"2025-11-24\",\"symbol\":\"MSFT\",\"close\":474},{\"date\":\"2025-11-25\",\"symbol\":\"MSFT\",\"close\":476.99},{\"date\":\"2025-11-26\",\"symbol\":\"MSFT\",\"close\":485.5},{\"date\":\"2025-11-28\",\"symbol\":\"MSFT\",\"close\":492.01},{\"date\":\"2025-12-01\",\"symbol\":\"MSFT\",\"close\":486.74},{\"date\":\"2025-12-02\",\"symbol\":\"MSFT\",\"close\":490},{\"date\":\"2025-12-03\",\"symbol\":\"MSFT\",\"close\":477.73},{\"date\":\"2025-12-04\",\"symbol\":\"MSFT\",\"close\":480.84},{\"date\":\"2025-12-05\",\"symbol\":\"MSFT\",\"close\":483.16},{\"date\":\"2025-12-08\",\"symbol\":\"MSFT\",\"close\":491.02},{\"date\":\"2025-12-09\",\"symbol\":\"MSFT\",\"close\":492.02},{\"date\":\"2025-12-10\",\"symbol\":\"MSFT\",\"close\":478.56},{\"date\":\"2025-12-11\",\"symbol\":\"MSFT\",\"close\":483.47},{\"date\":\"2025-12-12\",\"symbol\":\"MSFT\",\"close\":478.53},{\"date\":\"2025-12-15\",\"symbol\":\"MSFT\",\"close\":474.82},{\"date\":\"2025-12-16\",\"symbol\":\"MSFT\",\"close\":476.39},{\"date\":\"2025-12-17\",\"symbol\":\"MSFT\",\"close\":476.12},{\"date\":\"2025-12-18\",\"symbol\":\"MSFT\",\"close\":483.98},{\"date\":\"2025-12-19\",\"symbol\":\"MSFT\",\"close\":485.92},{\"date\":\"2025-12-22\",\"symbol\":\"MSFT\",\"close\":484.92},{\"date\":\"2025-12-23\",\"symbol\":\"MSFT\",\"close\":486.85},{\"date\":\"2025-12-24\",\"symbol\":\"MSFT\",\"close\":488.02},{\"date\":\"2025-12-26\",\"symbol\":\"MSFT\",\"close\":487.71},{\"date\":\"2025-12-29\",\"symbol\":\"MSFT\",\"close\":487.1},{\"date\":\"2025-12-30\",\"symbol\":\"MSFT\",\"close\":487.48},{\"date\":\"2025-12-31\",\"symbol\":\"MSFT\",\"close\":483.62},{\"date\":\"2026-01-02\",\"symbol\":\"MSFT\",\"close\":472.94},{\"date\":\"2026-01-05\",\"symbol\":\"MSFT\",\"close\":472.85},{\"date\":\"2026-01-06\",\"symbol\":\"MSFT\",\"close\":478.51},{\"date\":\"2026-01-07\",\"symbol\":\"MSFT\",\"close\":483.47},{\"date\":\"2026-01-08\",\"symbol\":\"MSFT\",\"close\":478.11},{\"date\":\"2026-01-09\",\"symbol\":\"MSFT\",\"close\":479.28},{\"date\":\"2026-01-12\",\"symbol\":\"MSFT\",\"close\":477.18},{\"date\":\"2026-01-13\",\"symbol\":\"MSFT\",\"close\":470.67},{\"date\":\"2026-01-14\",\"symbol\":\"MSFT\",\"close\":459.38},{\"date\":\"2026-01-15\",\"symbol\":\"MSFT\",\"close\":456.66},{\"date\":\"2026-01-16\",\"symbol\":\"MSFT\",\"close\":459.86},{\"date\":\"2026-01-20\",\"symbol\":\"MSFT\",\"close\":454.52},{\"date\":\"2026-01-21\",\"symbol\":\"MSFT\",\"close\":444.11},{\"date\":\"2026-01-22\",\"symbol\":\"MSFT\",\"close\":451.14},{\"date\":\"2026-01-23\",\"symbol\":\"MSFT\",\"close\":465.95},{\"date\":\"2026-01-26\",\"symbol\":\"MSFT\",\"close\":470.28},{\"date\":\"2025-07-31\",\"symbol\":\"NVDA\",\"close\":177.85},{\"date\":\"2025-08-01\",\"symbol\":\"NVDA\",\"close\":173.7},{\"date\":\"2025-08-04\",\"symbol\":\"NVDA\",\"close\":179.98},{\"date\":\"2025-08-05\",\"symbol\":\"NVDA\",\"close\":178.24},{\"date\":\"2025-08-06\",\"symbol\":\"NVDA\",\"close\":179.4},{\"date\":\"2025-08-07\",\"symbol\":\"NVDA\",\"close\":180.75},{\"date\":\"2025-08-08\",\"symbol\":\"NVDA\",\"close\":182.68},{\"date\":\"2025-08-11\",\"symbol\":\"NVDA\",\"close\":182.04},{\"date\":\"2025-08-12\",\"symbol\":\"NVDA\",\"close\":183.14},{\"date\":\"2025-08-13\",\"symbol\":\"NVDA\",\"close\":181.57},{\"date\":\"2025-08-14\",\"symbol\":\"NVDA\",\"close\":182},{\"date\":\"2025-08-15\",\"symbol\":\"NVDA\",\"close\":180.43},{\"date\":\"2025-08-18\",\"symbol\":\"NVDA\",\"close\":181.99},{\"date\":\"2025-08-19\",\"symbol\":\"NVDA\",\"close\":175.62},{\"date\":\"2025-08-20\",\"symbol\":\"NVDA\",\"close\":175.38},{\"date\":\"2025-08-21\",\"symbol\":\"NVDA\",\"close\":174.96},{\"date\":\"2025-08-22\",\"symbol\":\"NVDA\",\"close\":177.97},{\"date\":\"2025-08-25\",\"symbol\":\"NVDA\",\"close\":179.79},{\"date\":\"2025-08-26\",\"symbol\":\"NVDA\",\"close\":181.75},{\"date\":\"2025-08-27\",\"symbol\":\"NVDA\",\"close\":181.58},{\"date\":\"2025-08-28\",\"symbol\":\"NVDA\",\"close\":180.15},{\"date\":\"2025-08-29\",\"symbol\":\"NVDA\",\"close\":174.16},{\"date\":\"2025-09-02\",\"symbol\":\"NVDA\",\"close\":170.76},{\"date\":\"2025-09-03\",\"symbol\":\"NVDA\",\"close\":170.6},{\"date\":\"2025-09-04\",\"symbol\":\"NVDA\",\"close\":171.64},{\"date\":\"2025-09-05\",\"symbol\":\"NVDA\",\"close\":167},{\"date\":\"2025-09-08\",\"symbol\":\"NVDA\",\"close\":168.29},{\"date\":\"2025-09-09\",\"symbol\":\"NVDA\",\"close\":170.74},{\"date\":\"2025-09-10\",\"symbol\":\"NVDA\",\"close\":177.31},{\"date\":\"2025-09-11\",\"symbol\":\"NVDA\",\"close\":177.16},{\"date\":\"2025-09-12\",\"symbol\":\"NVDA\",\"close\":177.81},{\"date\":\"2025-09-15\",\"symbol\":\"NVDA\",\"close\":177.74},{\"date\":\"2025-09-16\",\"symbol\":\"NVDA\",\"close\":174.87},{\"date\":\"2025-09-17\",\"symbol\":\"NVDA\",\"close\":170.28},{\"date\":\"2025-09-18\",\"symbol\":\"NVDA\",\"close\":176.23},{\"date\":\"2025-09-19\",\"symbol\":\"NVDA\",\"close\":176.66},{\"date\":\"2025-09-22\",\"symbol\":\"NVDA\",\"close\":183.6},{\"date\":\"2025-09-23\",\"symbol\":\"NVDA\",\"close\":178.42},{\"date\":\"2025-09-24\",\"symbol\":\"NVDA\",\"close\":176.96},{\"date\":\"2025-09-25\",\"symbol\":\"NVDA\",\"close\":177.68},{\"date\":\"2025-09-26\",\"symbol\":\"NVDA\",\"close\":178.18},{\"date\":\"2025-09-29\",\"symbol\":\"NVDA\",\"close\":181.84},{\"date\":\"2025-09-30\",\"symbol\":\"NVDA\",\"close\":186.57},{\"date\":\"2025-10-01\",\"symbol\":\"NVDA\",\"close\":187.23},{\"date\":\"2025-10-02\",\"symbol\":\"NVDA\",\"close\":188.88},{\"date\":\"2025-10-03\",\"symbol\":\"NVDA\",\"close\":187.61},{\"date\":\"2025-10-06\",\"symbol\":\"NVDA\",\"close\":185.53},{\"date\":\"2025-10-07\",\"symbol\":\"NVDA\",\"close\":185.03},{\"date\":\"2025-10-08\",\"symbol\":\"NVDA\",\"close\":189.1},{\"date\":\"2025-10-09\",\"symbol\":\"NVDA\",\"close\":192.56},{\"date\":\"2025-10-10\",\"symbol\":\"NVDA\",\"close\":183.15},{\"date\":\"2025-10-13\",\"symbol\":\"NVDA\",\"close\":188.31},{\"date\":\"2025-10-14\",\"symbol\":\"NVDA\",\"close\":180.02},{\"date\":\"2025-10-15\",\"symbol\":\"NVDA\",\"close\":179.82},{\"date\":\"2025-10-16\",\"symbol\":\"NVDA\",\"close\":181.8},{\"date\":\"2025-10-17\",\"symbol\":\"NVDA\",\"close\":183.21},{\"date\":\"2025-10-20\",\"symbol\":\"NVDA\",\"close\":182.63},{\"date\":\"2025-10-21\",\"symbol\":\"NVDA\",\"close\":181.15},{\"date\":\"2025-10-22\",\"symbol\":\"NVDA\",\"close\":180.27},{\"date\":\"2025-10-23\",\"symbol\":\"NVDA\",\"close\":182.15},{\"date\":\"2025-10-24\",\"symbol\":\"NVDA\",\"close\":186.25},{\"date\":\"2025-10-27\",\"symbol\":\"NVDA\",\"close\":191.48},{\"date\":\"2025-10-28\",\"symbol\":\"NVDA\",\"close\":201.02},{\"date\":\"2025-10-29\",\"symbol\":\"NVDA\",\"close\":207.03},{\"date\":\"2025-10-30\",\"symbol\":\"NVDA\",\"close\":202.88},{\"date\":\"2025-10-31\",\"symbol\":\"NVDA\",\"close\":202.48},{\"date\":\"2025-11-03\",\"symbol\":\"NVDA\",\"close\":206.87},{\"date\":\"2025-11-04\",\"symbol\":\"NVDA\",\"close\":198.68},{\"date\":\"2025-11-05\",\"symbol\":\"NVDA\",\"close\":195.2},{\"date\":\"2025-11-06\",\"symbol\":\"NVDA\",\"close\":188.07},{\"date\":\"2025-11-07\",\"symbol\":\"NVDA\",\"close\":188.14},{\"date\":\"2025-11-10\",\"symbol\":\"NVDA\",\"close\":199.04},{\"date\":\"2025-11-11\",\"symbol\":\"NVDA\",\"close\":193.15},{\"date\":\"2025-11-12\",\"symbol\":\"NVDA\",\"close\":193.79},{\"date\":\"2025-11-13\",\"symbol\":\"NVDA\",\"close\":186.85},{\"date\":\"2025-11-14\",\"symbol\":\"NVDA\",\"close\":190.16},{\"date\":\"2025-11-17\",\"symbol\":\"NVDA\",\"close\":186.59},{\"date\":\"2025-11-18\",\"symbol\":\"NVDA\",\"close\":181.35},{\"date\":\"2025-11-19\",\"symbol\":\"NVDA\",\"close\":186.51},{\"date\":\"2025-11-20\",\"symbol\":\"NVDA\",\"close\":180.63},{\"date\":\"2025-11-21\",\"symbol\":\"NVDA\",\"close\":178.87},{\"date\":\"2025-11-24\",\"symbol\":\"NVDA\",\"close\":182.54},{\"date\":\"2025-11-25\",\"symbol\":\"NVDA\",\"close\":177.81},{\"date\":\"2025-11-26\",\"symbol\":\"NVDA\",\"close\":180.25},{\"date\":\"2025-11-28\",\"symbol\":\"NVDA\",\"close\":176.99},{\"date\":\"2025-12-01\",\"symbol\":\"NVDA\",\"close\":179.91},{\"date\":\"2025-12-02\",\"symbol\":\"NVDA\",\"close\":181.45},{\"date\":\"2025-12-03\",\"symbol\":\"NVDA\",\"close\":179.58},{\"date\":\"2025-12-04\",\"symbol\":\"NVDA\",\"close\":183.38},{\"date\":\"2025-12-05\",\"symbol\":\"NVDA\",\"close\":182.41},{\"date\":\"2025-12-08\",\"symbol\":\"NVDA\",\"close\":185.55},{\"date\":\"2025-12-09\",\"symbol\":\"NVDA\",\"close\":184.97},{\"date\":\"2025-12-10\",\"symbol\":\"NVDA\",\"close\":183.78},{\"date\":\"2025-12-11\",\"symbol\":\"NVDA\",\"close\":180.93},{\"date\":\"2025-12-12\",\"symbol\":\"NVDA\",\"close\":175.02},{\"date\":\"2025-12-15\",\"symbol\":\"NVDA\",\"close\":176.29},{\"date\":\"2025-12-16\",\"symbol\":\"NVDA\",\"close\":177.72},{\"date\":\"2025-12-17\",\"symbol\":\"NVDA\",\"close\":170.94},{\"date\":\"2025-12-18\",\"symbol\":\"NVDA\",\"close\":174.14},{\"date\":\"2025-12-19\",\"symbol\":\"NVDA\",\"close\":180.99},{\"date\":\"2025-12-22\",\"symbol\":\"NVDA\",\"close\":183.69},{\"date\":\"2025-12-23\",\"symbol\":\"NVDA\",\"close\":189.21},{\"date\":\"2025-12-24\",\"symbol\":\"NVDA\",\"close\":188.61},{\"date\":\"2025-12-26\",\"symbol\":\"NVDA\",\"close\":190.53},{\"date\":\"2025-12-29\",\"symbol\":\"NVDA\",\"close\":188.22},{\"date\":\"2025-12-30\",\"symbol\":\"NVDA\",\"close\":187.54},{\"date\":\"2025-12-31\",\"symbol\":\"NVDA\",\"close\":186.5},{\"date\":\"2026-01-02\",\"symbol\":\"NVDA\",\"close\":188.85},{\"date\":\"2026-01-05\",\"symbol\":\"NVDA\",\"close\":188.12},{\"date\":\"2026-01-06\",\"symbol\":\"NVDA\",\"close\":187.24},{\"date\":\"2026-01-07\",\"symbol\":\"NVDA\",\"close\":189.11},{\"date\":\"2026-01-08\",\"symbol\":\"NVDA\",\"close\":185.04},{\"date\":\"2026-01-09\",\"symbol\":\"NVDA\",\"close\":184.86},{\"date\":\"2026-01-12\",\"symbol\":\"NVDA\",\"close\":184.94},{\"date\":\"2026-01-13\",\"symbol\":\"NVDA\",\"close\":185.81},{\"date\":\"2026-01-14\",\"symbol\":\"NVDA\",\"close\":183.14},{\"date\":\"2026-01-15\",\"symbol\":\"NVDA\",\"close\":187.05},{\"date\":\"2026-01-16\",\"symbol\":\"NVDA\",\"close\":186.23},{\"date\":\"2026-01-20\",\"symbol\":\"NVDA\",\"close\":178.07},{\"date\":\"2026-01-21\",\"symbol\":\"NVDA\",\"close\":183.32},{\"date\":\"2026-01-22\",\"symbol\":\"NVDA\",\"close\":184.84},{\"date\":\"2026-01-23\",\"symbol\":\"NVDA\",\"close\":187.67},{\"date\":\"2026-01-26\",\"symbol\":\"NVDA\",\"close\":186.47}],\"metadata\":{\"date\":{\"type\":\"date\",\"semanticType\":\"Date\"},\"symbol\":{\"type\":\"string\",\"semanticType\":\"String\"},\"close\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Select only needed columns\\n    cols = [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"]\\n    df = df_history[cols].copy()\\n\\n    # Ensure date is a string in YYYY-MM-DD format (no datetime objects)\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper line plotting\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"]).reset_index(drop=True)\\n\\n    transformed_df = df\\n    return transformed_df\\n\",\"source\":[\"history\"],\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"input_tables\\\": [...] // string[], describe names of the input tables that will be used in the transformation.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\", 'boxplot'. \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - determine \\\"input_tables\\\", the names of a subset of input tables from [CONTEXT] section that will be used to achieve the user's goal.\\n        - **IMPORTANT** Note that the Table 1 in [CONTEXT] section is the table the user is currently viewing, it should take precedence if the user refers to insights about the \\\"current table\\\".\\n        - At the same time, leverage table information to determine which tables are relevant to the user's goal and should be used.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\", \\\"boxplot\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n            - boxplot: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n            - (boxplot) Box plots: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical (optional for creating grouped boxplots), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the boxplot will be grouped automatically (items with the same x values will be grouped).\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE]. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n# from sklearn import ... # import from sklearn if you need it.\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- decide the function signature based on the number of tables you decided in the previous step \\\"input_tables\\\":\\n    - if you decide there will only be one input table, then function signature should be `def transform_data(df1)`\\n    - if you decided there will be k input tables, then function signature should be `def transform_data(df_1, df_2, ..., df_k)`.\\n    - instead of using generic names like df1, df2, ..., try to use intuitive table names for function arguments, for example, if you have input_tables: [\\\"City\\\", \\\"Weather\\\"]`, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes.\\n    - **VERY IMPORTANT** the number of arguments in the function signature must be the same as the number of tables provided in \\\"input_tables\\\", and the order of arguments must match the order of tables provided in \\\"input_tables\\\".\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\n## Table 1: history (738 rows × 8 columns)\\n\\n### Schema (8 fields)\\n  - symbol -- type: object, values: AAPL, AMZN, GOOGL, META, MSFT, NVDA\\n  - date -- type: object, values: 2025-07-30, 2025-07-31, 2025-08-01, ..., 2026-01-20, 2026-01-21, 2026-01-22, 2026-01-23\\n  - open -- type: float64, values: 167.53, 168.01, 169.07, ..., 781.21, 782.98, 785.25, 789.97\\n  - high -- type: float64, values: 169.01, 170.94, 170.96, ..., 789.62, 792.49, 794.28, 795.06\\n  - low -- type: float64, values: 164.05, 166.72, 167.2, ..., 771.36, 772.21, 777.07, 779.66\\n  - close -- type: float64, values: 167.0, 168.29, 170.28, ..., 779.09, 780.97, 784.06, 788.82\\n  - volume -- type: int64, values: 5627500, 5855900, 6861200, ..., 320600300, 324925900, 343504800, 346926200\\n  - fetched_at -- type: object, values: 2026-01-26T23:46:42.347312Z\\n\\n### Sample Data (first 5 rows)\\n```\\n  symbol        date    open    high     low   close     volume                   fetched_at\\n0   AAPL  2025-07-30  211.45  211.94  207.28  208.61   45512500  2026-01-26T23:46:42.347312Z\\n1   AAPL  2025-07-31  208.05  209.40  206.72  207.13   80698400  2026-01-26T23:46:42.347312Z\\n2   AAPL  2025-08-01  210.43  213.13  201.08  201.95  104434500  2026-01-26T23:46:42.347312Z\\n3   AAPL  2025-08-04  204.08  207.44  201.26  202.92   75109300  2026-01-26T23:46:42.347312Z\\n4   AAPL  2025-08-05  202.97  204.91  201.74  202.49   44155100  2026-01-26T23:46:42.347312Z\\n```\\n\\n\\n[GOAL]\\n\\n1) First, plot the overall **closing price** trends for each **symbol** over **time** on a single line chart to compare their broad trajectories and volatility.\"},{\"role\":\"assistant\",\"content\":\"{\\n  \\\"mode\\\": \\\"infer\\\",\\n  \\\"recap\\\": \\\"Compare overall closing price trends and volatility over time for each stock symbol on a single line chart.\\\",\\n  \\\"display_instruction\\\": \\\"Visualize **closing price** trends by **symbol** over **date**\\\",\\n  \\\"recommendation\\\": \\\"A line chart with time on the x-axis and closing price on the y-axis, colored by symbol, best shows comparative trajectories and volatility over time. The data only needs column selection, date normalization, and sorting to be visualization-ready.\\\",\\n  \\\"input_tables\\\": [\\\"history\\\"],\\n  \\\"output_fields\\\": [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"],\\n  \\\"chart_type\\\": \\\"line\\\",\\n  \\\"chart_encodings\\\": {\\n    \\\"x\\\": \\\"date\\\",\\n    \\\"y\\\": \\\"close\\\",\\n    \\\"color\\\": \\\"symbol\\\",\\n    \\\"size\\\": \\\"\\\",\\n    \\\"opacity\\\": \\\"\\\",\\n    \\\"facet\\\": \\\"\\\"\\n  }\\n}\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Select only needed columns\\n    cols = [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"]\\n    df = df_history[cols].copy()\\n\\n    # Ensure date is a string in YYYY-MM-DD format (no datetime objects)\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper line plotting\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"]).reset_index(drop=True)\\n\\n    transformed_df = df\\n    return transformed_df\\n```\"}],\"trigger\":{\"tableId\":\"history\",\"sourceTableIds\":[\"history\"],\"instruction\":\"1) First, plot the overall **closing price** trends for each **symbol** over **time** on a single line chart to compare their broad trajectories and volatility.\",\"displayInstruction\":\"Visualize **closing price** trends by **symbol** over **date**\",\"chart\":{\"id\":\"chart-1769471233291\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"history\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-233476\"},\"explanation\":{\"status\":\"ok\",\"concepts\":[],\"code\":\"- **Keep only the key fields**: selects the columns **`\\\"date\\\"`**, **`\\\"symbol\\\"`**, and **`\\\"close\\\"`** from the input data and **drops all other columns**.\\n- **Standardize the date format**: converts **`date`** into a **string** in the **`\\\"YYYY-MM-DD\\\"`** format to ensure consistency (no time component, no different date formats).\\n- **Order the data for time-series use**: **sorts** the rows first by **`symbol`** and then by **`date`** so that each stock’s closing prices are in **chronological order**, which is important for **line charts** or time-based analysis.\\n- **Return the cleaned dataset**: outputs this **simplified and ordered** table as the final transformed data.\",\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\n## Table 1: history (738 rows × 8 columns)\\n\\n### Schema (8 fields)\\n  - symbol -- type: object, values: AAPL, AMZN, GOOGL, META, MSFT, NVDA\\n  - date -- type: object, values: 2025-07-30, 2025-07-31, 2025-08-01, ..., 2026-01-20, 2026-01-21, 2026-01-22, 2026-01-23\\n  - open -- type: float64, values: 167.53, 168.01, 169.07, ..., 781.21, 782.98, 785.25, 789.97\\n  - high -- type: float64, values: 169.01, 170.94, 170.96, ..., 789.62, 792.49, 794.28, 795.06\\n  - low -- type: float64, values: 164.05, 166.72, 167.2, ..., 771.36, 772.21, 777.07, 779.66\\n  - close -- type: float64, values: 167.0, 168.29, 170.28, ..., 779.09, 780.97, 784.06, 788.82\\n  - volume -- type: int64, values: 5627500, 5855900, 6861200, ..., 320600300, 324925900, 343504800, 346926200\\n  - fetched_at -- type: object, values: 2026-01-26T23:46:42.347312Z\\n\\n### Sample Data (first 5 rows)\\n```\\n  symbol        date    open    high     low   close     volume                   fetched_at\\n0   AAPL  2025-07-30  211.45  211.94  207.28  208.61   45512500  2026-01-26T23:46:42.347312Z\\n1   AAPL  2025-07-31  208.05  209.40  206.72  207.13   80698400  2026-01-26T23:46:42.347312Z\\n2   AAPL  2025-08-01  210.43  213.13  201.08  201.95  104434500  2026-01-26T23:46:42.347312Z\\n3   AAPL  2025-08-04  204.08  207.44  201.26  202.92   75109300  2026-01-26T23:46:42.347312Z\\n4   AAPL  2025-08-05  202.97  204.91  201.74  202.49   44155100  2026-01-26T23:46:42.347312Z\\n```\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Select only needed columns\\n    cols = [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"]\\n    df = df_history[cols].copy()\\n\\n    # Ensure date is a string in YYYY-MM-DD format (no datetime objects)\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper line plotting\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"]).reset_index(drop=True)\\n\\n    transformed_df = df\\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\"},{\"role\":\"assistant\",\"content\":\"[CODE EXPLANATION]\\n\\n- **Keep only the key fields**: selects the columns **`\\\"date\\\"`**, **`\\\"symbol\\\"`**, and **`\\\"close\\\"`** from the input data and **drops all other columns**.\\n- **Standardize the date format**: converts **`date`** into a **string** in the **`\\\"YYYY-MM-DD\\\"`** format to ensure consistency (no time component, no different date formats).\\n- **Order the data for time-series use**: **sorts** the rows first by **`symbol`** and then by **`date`** so that each stock’s closing prices are in **chronological order**, which is important for **line charts** or time-based analysis.\\n- **Return the cleaned dataset**: outputs this **simplified and ordered** table as the final transformed data.\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[]\\n```\"}],\"agent\":\"CodeExplanationAgent\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\",\"contentHash\":\"a2a0adc6\"},{\"id\":\"table-265247\",\"displayId\":\"stock-ma\",\"names\":[\"date\",\"symbol\",\"close\",\"value\",\"ma_window\"],\"rows\":[{\"date\":\"2025-07-31\",\"symbol\":\"AAPL\",\"close\":207.13,\"value\":207.13,\"ma_window\":20},{\"date\":\"2025-08-01\",\"symbol\":\"AAPL\",\"close\":201.95,\"value\":204.54,\"ma_window\":20},{\"date\":\"2025-08-04\",\"symbol\":\"AAPL\",\"close\":202.92,\"value\":204,\"ma_window\":20},{\"date\":\"2025-08-05\",\"symbol\":\"AAPL\",\"close\":202.49,\"value\":203.6225,\"ma_window\":20},{\"date\":\"2025-08-06\",\"symbol\":\"AAPL\",\"close\":212.8,\"value\":205.458,\"ma_window\":20},{\"date\":\"2025-08-07\",\"symbol\":\"AAPL\",\"close\":219.57,\"value\":207.81,\"ma_window\":20},{\"date\":\"2025-08-08\",\"symbol\":\"AAPL\",\"close\":228.87,\"value\":210.8185714286,\"ma_window\":20},{\"date\":\"2025-08-11\",\"symbol\":\"AAPL\",\"close\":226.96,\"value\":212.83625,\"ma_window\":20},{\"date\":\"2025-08-12\",\"symbol\":\"AAPL\",\"close\":229.43,\"value\":214.68,\"ma_window\":20},{\"date\":\"2025-08-13\",\"symbol\":\"AAPL\",\"close\":233.1,\"value\":216.522,\"ma_window\":20},{\"date\":\"2025-08-14\",\"symbol\":\"AAPL\",\"close\":232.55,\"value\":217.9790909091,\"ma_window\":20},{\"date\":\"2025-08-15\",\"symbol\":\"AAPL\",\"close\":231.37,\"value\":219.095,\"ma_window\":20},{\"date\":\"2025-08-18\",\"symbol\":\"AAPL\",\"close\":230.67,\"value\":219.9853846154,\"ma_window\":20},{\"date\":\"2025-08-19\",\"symbol\":\"AAPL\",\"close\":230.34,\"value\":220.725,\"ma_window\":20},{\"date\":\"2025-08-20\",\"symbol\":\"AAPL\",\"close\":225.79,\"value\":221.0626666667,\"ma_window\":20},{\"date\":\"2025-08-21\",\"symbol\":\"AAPL\",\"close\":224.68,\"value\":221.28875,\"ma_window\":20},{\"date\":\"2025-08-22\",\"symbol\":\"AAPL\",\"close\":227.54,\"value\":221.6564705882,\"ma_window\":20},{\"date\":\"2025-08-25\",\"symbol\":\"AAPL\",\"close\":226.94,\"value\":221.95,\"ma_window\":20},{\"date\":\"2025-08-26\",\"symbol\":\"AAPL\",\"close\":229.09,\"value\":222.3257894737,\"ma_window\":20},{\"date\":\"2025-08-27\",\"symbol\":\"AAPL\",\"close\":230.27,\"value\":222.723,\"ma_window\":20},{\"date\":\"2025-08-28\",\"symbol\":\"AAPL\",\"close\":232.33,\"value\":223.983,\"ma_window\":20},{\"date\":\"2025-08-29\",\"symbol\":\"AAPL\",\"close\":231.92,\"value\":225.4815,\"ma_window\":20},{\"date\":\"2025-09-02\",\"symbol\":\"AAPL\",\"close\":229.5,\"value\":226.8105,\"ma_window\":20},{\"date\":\"2025-09-03\",\"symbol\":\"AAPL\",\"close\":238.24,\"value\":228.598,\"ma_window\":20},{\"date\":\"2025-09-04\",\"symbol\":\"AAPL\",\"close\":239.55,\"value\":229.9355,\"ma_window\":20},{\"date\":\"2025-09-05\",\"symbol\":\"AAPL\",\"close\":239.46,\"value\":230.93,\"ma_window\":20},{\"date\":\"2025-09-08\",\"symbol\":\"AAPL\",\"close\":237.65,\"value\":231.369,\"ma_window\":20},{\"date\":\"2025-09-09\",\"symbol\":\"AAPL\",\"close\":234.12,\"value\":231.727,\"ma_window\":20},{\"date\":\"2025-09-10\",\"symbol\":\"AAPL\",\"close\":226.57,\"value\":231.584,\"ma_window\":20},{\"date\":\"2025-09-11\",\"symbol\":\"AAPL\",\"close\":229.81,\"value\":231.4195,\"ma_window\":20},{\"date\":\"2025-09-12\",\"symbol\":\"AAPL\",\"close\":233.84,\"value\":231.484,\"ma_window\":20},{\"date\":\"2025-09-15\",\"symbol\":\"AAPL\",\"close\":236.47,\"value\":231.739,\"ma_window\":20},{\"date\":\"2025-09-16\",\"symbol\":\"AAPL\",\"close\":237.92,\"value\":232.1015,\"ma_window\":20},{\"date\":\"2025-09-17\",\"symbol\":\"AAPL\",\"close\":238.76,\"value\":232.5225,\"ma_window\":20},{\"date\":\"2025-09-18\",\"symbol\":\"AAPL\",\"close\":237.65,\"value\":233.1155,\"ma_window\":20},{\"date\":\"2025-09-19\",\"symbol\":\"AAPL\",\"close\":245.26,\"value\":234.1445,\"ma_window\":20},{\"date\":\"2025-09-22\",\"symbol\":\"AAPL\",\"close\":255.83,\"value\":235.559,\"ma_window\":20},{\"date\":\"2025-09-23\",\"symbol\":\"AAPL\",\"close\":254.18,\"value\":236.921,\"ma_window\":20},{\"date\":\"2025-09-24\",\"symbol\":\"AAPL\",\"close\":252.07,\"value\":238.07,\"ma_window\":20},{\"date\":\"2025-09-25\",\"symbol\":\"AAPL\",\"close\":256.62,\"value\":239.3875,\"ma_window\":20},{\"date\":\"2025-09-26\",\"symbol\":\"AAPL\",\"close\":255.21,\"value\":240.5315,\"ma_window\":20},{\"date\":\"2025-09-29\",\"symbol\":\"AAPL\",\"close\":254.18,\"value\":241.6445,\"ma_window\":20},{\"date\":\"2025-09-30\",\"symbol\":\"AAPL\",\"close\":254.38,\"value\":242.8885,\"ma_window\":20},{\"date\":\"2025-10-01\",\"symbol\":\"AAPL\",\"close\":255.2,\"value\":243.7365,\"ma_window\":20},{\"date\":\"2025-10-02\",\"symbol\":\"AAPL\",\"close\":256.88,\"value\":244.603,\"ma_window\":20},{\"date\":\"2025-10-03\",\"symbol\":\"AAPL\",\"close\":257.77,\"value\":245.5185,\"ma_window\":20},{\"date\":\"2025-10-06\",\"symbol\":\"AAPL\",\"close\":256.44,\"value\":246.458,\"ma_window\":20},{\"date\":\"2025-10-07\",\"symbol\":\"AAPL\",\"close\":256.23,\"value\":247.5635,\"ma_window\":20},{\"date\":\"2025-10-08\",\"symbol\":\"AAPL\",\"close\":257.81,\"value\":249.1255,\"ma_window\":20},{\"date\":\"2025-10-09\",\"symbol\":\"AAPL\",\"close\":253.79,\"value\":250.3245,\"ma_window\":20},{\"date\":\"2025-10-10\",\"symbol\":\"AAPL\",\"close\":245.03,\"value\":250.884,\"ma_window\":20},{\"date\":\"2025-10-13\",\"symbol\":\"AAPL\",\"close\":247.42,\"value\":251.4315,\"ma_window\":20},{\"date\":\"2025-10-14\",\"symbol\":\"AAPL\",\"close\":247.53,\"value\":251.912,\"ma_window\":20},{\"date\":\"2025-10-15\",\"symbol\":\"AAPL\",\"close\":249.1,\"value\":252.429,\"ma_window\":20},{\"date\":\"2025-10-16\",\"symbol\":\"AAPL\",\"close\":247.21,\"value\":252.907,\"ma_window\":20},{\"date\":\"2025-10-17\",\"symbol\":\"AAPL\",\"close\":252.05,\"value\":253.2465,\"ma_window\":20},{\"date\":\"2025-10-20\",\"symbol\":\"AAPL\",\"close\":261.99,\"value\":253.5545,\"ma_window\":20},{\"date\":\"2025-10-21\",\"symbol\":\"AAPL\",\"close\":262.52,\"value\":253.9715,\"ma_window\":20},{\"date\":\"2025-10-22\",\"symbol\":\"AAPL\",\"close\":258.2,\"value\":254.278,\"ma_window\":20},{\"date\":\"2025-10-23\",\"symbol\":\"AAPL\",\"close\":259.33,\"value\":254.4135,\"ma_window\":20},{\"date\":\"2025-10-24\",\"symbol\":\"AAPL\",\"close\":262.57,\"value\":254.7815,\"ma_window\":20},{\"date\":\"2025-10-27\",\"symbol\":\"AAPL\",\"close\":268.55,\"value\":255.5,\"ma_window\":20},{\"date\":\"2025-10-28\",\"symbol\":\"AAPL\",\"close\":268.74,\"value\":256.218,\"ma_window\":20},{\"date\":\"2025-10-29\",\"symbol\":\"AAPL\",\"close\":269.44,\"value\":256.93,\"ma_window\":20},{\"date\":\"2025-10-30\",\"symbol\":\"AAPL\",\"close\":271.14,\"value\":257.643,\"ma_window\":20},{\"date\":\"2025-10-31\",\"symbol\":\"AAPL\",\"close\":270.11,\"value\":258.26,\"ma_window\":20},{\"date\":\"2025-11-03\",\"symbol\":\"AAPL\",\"close\":268.79,\"value\":258.8775,\"ma_window\":20},{\"date\":\"2025-11-04\",\"symbol\":\"AAPL\",\"close\":269.78,\"value\":259.555,\"ma_window\":20},{\"date\":\"2025-11-05\",\"symbol\":\"AAPL\",\"close\":269.88,\"value\":260.1585,\"ma_window\":20},{\"date\":\"2025-11-06\",\"symbol\":\"AAPL\",\"close\":269.51,\"value\":260.9445,\"ma_window\":20},{\"date\":\"2025-11-07\",\"symbol\":\"AAPL\",\"close\":268.21,\"value\":262.1035,\"ma_window\":20},{\"date\":\"2025-11-10\",\"symbol\":\"AAPL\",\"close\":269.43,\"value\":263.204,\"ma_window\":20},{\"date\":\"2025-11-11\",\"symbol\":\"AAPL\",\"close\":275.25,\"value\":264.59,\"ma_window\":20},{\"date\":\"2025-11-12\",\"symbol\":\"AAPL\",\"close\":273.47,\"value\":265.8085,\"ma_window\":20},{\"date\":\"2025-11-13\",\"symbol\":\"AAPL\",\"close\":272.95,\"value\":267.0955,\"ma_window\":20},{\"date\":\"2025-11-14\",\"symbol\":\"AAPL\",\"close\":272.41,\"value\":268.1135,\"ma_window\":20},{\"date\":\"2025-11-17\",\"symbol\":\"AAPL\",\"close\":267.46,\"value\":268.387,\"ma_window\":20},{\"date\":\"2025-11-18\",\"symbol\":\"AAPL\",\"close\":267.44,\"value\":268.633,\"ma_window\":20},{\"date\":\"2025-11-19\",\"symbol\":\"AAPL\",\"close\":268.56,\"value\":269.151,\"ma_window\":20},{\"date\":\"2025-11-20\",\"symbol\":\"AAPL\",\"close\":266.25,\"value\":269.497,\"ma_window\":20},{\"date\":\"2025-11-21\",\"symbol\":\"AAPL\",\"close\":271.49,\"value\":269.943,\"ma_window\":20},{\"date\":\"2025-11-24\",\"symbol\":\"AAPL\",\"close\":275.92,\"value\":270.3115,\"ma_window\":20},{\"date\":\"2025-11-25\",\"symbol\":\"AAPL\",\"close\":276.97,\"value\":270.723,\"ma_window\":20},{\"date\":\"2025-11-26\",\"symbol\":\"AAPL\",\"close\":277.55,\"value\":271.1285,\"ma_window\":20},{\"date\":\"2025-11-28\",\"symbol\":\"AAPL\",\"close\":278.85,\"value\":271.514,\"ma_window\":20},{\"date\":\"2025-12-01\",\"symbol\":\"AAPL\",\"close\":283.1,\"value\":272.1635,\"ma_window\":20},{\"date\":\"2025-12-02\",\"symbol\":\"AAPL\",\"close\":286.19,\"value\":273.0335,\"ma_window\":20},{\"date\":\"2025-12-03\",\"symbol\":\"AAPL\",\"close\":284.15,\"value\":273.752,\"ma_window\":20},{\"date\":\"2025-12-04\",\"symbol\":\"AAPL\",\"close\":280.7,\"value\":274.293,\"ma_window\":20},{\"date\":\"2025-12-05\",\"symbol\":\"AAPL\",\"close\":278.78,\"value\":274.7565,\"ma_window\":20},{\"date\":\"2025-12-08\",\"symbol\":\"AAPL\",\"close\":277.89,\"value\":275.2405,\"ma_window\":20},{\"date\":\"2025-12-09\",\"symbol\":\"AAPL\",\"close\":277.18,\"value\":275.628,\"ma_window\":20},{\"date\":\"2025-12-10\",\"symbol\":\"AAPL\",\"close\":278.78,\"value\":275.8045,\"ma_window\":20},{\"date\":\"2025-12-11\",\"symbol\":\"AAPL\",\"close\":278.03,\"value\":276.0325,\"ma_window\":20},{\"date\":\"2025-12-12\",\"symbol\":\"AAPL\",\"close\":278.28,\"value\":276.299,\"ma_window\":20},{\"date\":\"2025-12-15\",\"symbol\":\"AAPL\",\"close\":274.11,\"value\":276.384,\"ma_window\":20},{\"date\":\"2025-12-16\",\"symbol\":\"AAPL\",\"close\":274.61,\"value\":276.7415,\"ma_window\":20},{\"date\":\"2025-12-17\",\"symbol\":\"AAPL\",\"close\":271.84,\"value\":276.9615,\"ma_window\":20},{\"date\":\"2025-12-18\",\"symbol\":\"AAPL\",\"close\":272.19,\"value\":277.143,\"ma_window\":20},{\"date\":\"2025-12-19\",\"symbol\":\"AAPL\",\"close\":273.67,\"value\":277.514,\"ma_window\":20},{\"date\":\"2025-12-22\",\"symbol\":\"AAPL\",\"close\":270.97,\"value\":277.488,\"ma_window\":20},{\"date\":\"2025-12-23\",\"symbol\":\"AAPL\",\"close\":272.36,\"value\":277.31,\"ma_window\":20},{\"date\":\"2025-12-24\",\"symbol\":\"AAPL\",\"close\":273.81,\"value\":277.152,\"ma_window\":20},{\"date\":\"2025-12-26\",\"symbol\":\"AAPL\",\"close\":273.4,\"value\":276.9445,\"ma_window\":20},{\"date\":\"2025-12-29\",\"symbol\":\"AAPL\",\"close\":273.76,\"value\":276.69,\"ma_window\":20},{\"date\":\"2025-12-30\",\"symbol\":\"AAPL\",\"close\":273.08,\"value\":276.189,\"ma_window\":20},{\"date\":\"2025-12-31\",\"symbol\":\"AAPL\",\"close\":271.86,\"value\":275.4725,\"ma_window\":20},{\"date\":\"2026-01-02\",\"symbol\":\"AAPL\",\"close\":271.01,\"value\":274.8155,\"ma_window\":20},{\"date\":\"2026-01-05\",\"symbol\":\"AAPL\",\"close\":267.26,\"value\":274.1435,\"ma_window\":20},{\"date\":\"2026-01-06\",\"symbol\":\"AAPL\",\"close\":262.36,\"value\":273.3225,\"ma_window\":20},{\"date\":\"2026-01-07\",\"symbol\":\"AAPL\",\"close\":260.33,\"value\":272.4445,\"ma_window\":20},{\"date\":\"2026-01-08\",\"symbol\":\"AAPL\",\"close\":259.04,\"value\":271.5375,\"ma_window\":20},{\"date\":\"2026-01-09\",\"symbol\":\"AAPL\",\"close\":259.37,\"value\":270.567,\"ma_window\":20},{\"date\":\"2026-01-12\",\"symbol\":\"AAPL\",\"close\":260.25,\"value\":269.678,\"ma_window\":20},{\"date\":\"2026-01-13\",\"symbol\":\"AAPL\",\"close\":261.05,\"value\":268.8165,\"ma_window\":20},{\"date\":\"2026-01-14\",\"symbol\":\"AAPL\",\"close\":259.96,\"value\":268.109,\"ma_window\":20},{\"date\":\"2026-01-15\",\"symbol\":\"AAPL\",\"close\":258.21,\"value\":267.289,\"ma_window\":20},{\"date\":\"2026-01-16\",\"symbol\":\"AAPL\",\"close\":255.53,\"value\":266.4735,\"ma_window\":20},{\"date\":\"2026-01-20\",\"symbol\":\"AAPL\",\"close\":246.7,\"value\":265.199,\"ma_window\":20},{\"date\":\"2026-01-21\",\"symbol\":\"AAPL\",\"close\":247.65,\"value\":263.898,\"ma_window\":20},{\"date\":\"2026-01-22\",\"symbol\":\"AAPL\",\"close\":248.35,\"value\":262.767,\"ma_window\":20},{\"date\":\"2026-01-23\",\"symbol\":\"AAPL\",\"close\":248.04,\"value\":261.551,\"ma_window\":20},{\"date\":\"2026-01-26\",\"symbol\":\"AAPL\",\"close\":255.41,\"value\":260.631,\"ma_window\":20},{\"date\":\"2025-07-31\",\"symbol\":\"AMZN\",\"close\":234.11,\"value\":234.11,\"ma_window\":20},{\"date\":\"2025-08-01\",\"symbol\":\"AMZN\",\"close\":214.75,\"value\":224.43,\"ma_window\":20},{\"date\":\"2025-08-04\",\"symbol\":\"AMZN\",\"close\":211.65,\"value\":220.17,\"ma_window\":20},{\"date\":\"2025-08-05\",\"symbol\":\"AMZN\",\"close\":213.75,\"value\":218.565,\"ma_window\":20},{\"date\":\"2025-08-06\",\"symbol\":\"AMZN\",\"close\":222.31,\"value\":219.314,\"ma_window\":20},{\"date\":\"2025-08-07\",\"symbol\":\"AMZN\",\"close\":223.13,\"value\":219.95,\"ma_window\":20},{\"date\":\"2025-08-08\",\"symbol\":\"AMZN\",\"close\":222.69,\"value\":220.3414285714,\"ma_window\":20},{\"date\":\"2025-08-11\",\"symbol\":\"AMZN\",\"close\":221.3,\"value\":220.46125,\"ma_window\":20},{\"date\":\"2025-08-12\",\"symbol\":\"AMZN\",\"close\":221.47,\"value\":220.5733333333,\"ma_window\":20},{\"date\":\"2025-08-13\",\"symbol\":\"AMZN\",\"close\":224.56,\"value\":220.972,\"ma_window\":20},{\"date\":\"2025-08-14\",\"symbol\":\"AMZN\",\"close\":230.98,\"value\":221.8818181818,\"ma_window\":20},{\"date\":\"2025-08-15\",\"symbol\":\"AMZN\",\"close\":231.03,\"value\":222.6441666667,\"ma_window\":20},{\"date\":\"2025-08-18\",\"symbol\":\"AMZN\",\"close\":231.49,\"value\":223.3246153846,\"ma_window\":20},{\"date\":\"2025-08-19\",\"symbol\":\"AMZN\",\"close\":228.01,\"value\":223.6592857143,\"ma_window\":20},{\"date\":\"2025-08-20\",\"symbol\":\"AMZN\",\"close\":223.81,\"value\":223.6693333333,\"ma_window\":20},{\"date\":\"2025-08-21\",\"symbol\":\"AMZN\",\"close\":221.95,\"value\":223.561875,\"ma_window\":20},{\"date\":\"2025-08-22\",\"symbol\":\"AMZN\",\"close\":228.84,\"value\":223.8723529412,\"ma_window\":20},{\"date\":\"2025-08-25\",\"symbol\":\"AMZN\",\"close\":227.94,\"value\":224.0983333333,\"ma_window\":20},{\"date\":\"2025-08-26\",\"symbol\":\"AMZN\",\"close\":228.71,\"value\":224.3410526316,\"ma_window\":20},{\"date\":\"2025-08-27\",\"symbol\":\"AMZN\",\"close\":229.12,\"value\":224.58,\"ma_window\":20},{\"date\":\"2025-08-28\",\"symbol\":\"AMZN\",\"close\":231.6,\"value\":224.4545,\"ma_window\":20},{\"date\":\"2025-08-29\",\"symbol\":\"AMZN\",\"close\":229,\"value\":225.167,\"ma_window\":20},{\"date\":\"2025-09-02\",\"symbol\":\"AMZN\",\"close\":225.34,\"value\":225.8515,\"ma_window\":20},{\"date\":\"2025-09-03\",\"symbol\":\"AMZN\",\"close\":225.99,\"value\":226.4635,\"ma_window\":20},{\"date\":\"2025-09-04\",\"symbol\":\"AMZN\",\"close\":235.68,\"value\":227.132,\"ma_window\":20},{\"date\":\"2025-09-05\",\"symbol\":\"AMZN\",\"close\":232.33,\"value\":227.592,\"ma_window\":20},{\"date\":\"2025-09-08\",\"symbol\":\"AMZN\",\"close\":235.84,\"value\":228.2495,\"ma_window\":20},{\"date\":\"2025-09-09\",\"symbol\":\"AMZN\",\"close\":238.24,\"value\":229.0965,\"ma_window\":20},{\"date\":\"2025-09-10\",\"symbol\":\"AMZN\",\"close\":230.33,\"value\":229.5395,\"ma_window\":20},{\"date\":\"2025-09-11\",\"symbol\":\"AMZN\",\"close\":229.95,\"value\":229.809,\"ma_window\":20},{\"date\":\"2025-09-12\",\"symbol\":\"AMZN\",\"close\":228.15,\"value\":229.6675,\"ma_window\":20},{\"date\":\"2025-09-15\",\"symbol\":\"AMZN\",\"close\":231.43,\"value\":229.6875,\"ma_window\":20},{\"date\":\"2025-09-16\",\"symbol\":\"AMZN\",\"close\":234.05,\"value\":229.8155,\"ma_window\":20},{\"date\":\"2025-09-17\",\"symbol\":\"AMZN\",\"close\":231.62,\"value\":229.996,\"ma_window\":20},{\"date\":\"2025-09-18\",\"symbol\":\"AMZN\",\"close\":231.23,\"value\":230.367,\"ma_window\":20},{\"date\":\"2025-09-19\",\"symbol\":\"AMZN\",\"close\":231.48,\"value\":230.8435,\"ma_window\":20},{\"date\":\"2025-09-22\",\"symbol\":\"AMZN\",\"close\":227.63,\"value\":230.783,\"ma_window\":20},{\"date\":\"2025-09-23\",\"symbol\":\"AMZN\",\"close\":220.71,\"value\":230.4215,\"ma_window\":20},{\"date\":\"2025-09-24\",\"symbol\":\"AMZN\",\"close\":220.21,\"value\":229.9965,\"ma_window\":20},{\"date\":\"2025-09-25\",\"symbol\":\"AMZN\",\"close\":218.15,\"value\":229.448,\"ma_window\":20},{\"date\":\"2025-09-26\",\"symbol\":\"AMZN\",\"close\":219.78,\"value\":228.857,\"ma_window\":20},{\"date\":\"2025-09-29\",\"symbol\":\"AMZN\",\"close\":222.17,\"value\":228.5155,\"ma_window\":20},{\"date\":\"2025-09-30\",\"symbol\":\"AMZN\",\"close\":219.57,\"value\":228.227,\"ma_window\":20},{\"date\":\"2025-10-01\",\"symbol\":\"AMZN\",\"close\":220.63,\"value\":227.959,\"ma_window\":20},{\"date\":\"2025-10-02\",\"symbol\":\"AMZN\",\"close\":222.41,\"value\":227.2955,\"ma_window\":20},{\"date\":\"2025-10-03\",\"symbol\":\"AMZN\",\"close\":219.51,\"value\":226.6545,\"ma_window\":20},{\"date\":\"2025-10-06\",\"symbol\":\"AMZN\",\"close\":220.9,\"value\":225.9075,\"ma_window\":20},{\"date\":\"2025-10-07\",\"symbol\":\"AMZN\",\"close\":221.78,\"value\":225.0845,\"ma_window\":20},{\"date\":\"2025-10-08\",\"symbol\":\"AMZN\",\"close\":225.22,\"value\":224.829,\"ma_window\":20},{\"date\":\"2025-10-09\",\"symbol\":\"AMZN\",\"close\":227.74,\"value\":224.7185,\"ma_window\":20},{\"date\":\"2025-10-10\",\"symbol\":\"AMZN\",\"close\":216.37,\"value\":224.1295,\"ma_window\":20},{\"date\":\"2025-10-13\",\"symbol\":\"AMZN\",\"close\":220.07,\"value\":223.5615,\"ma_window\":20},{\"date\":\"2025-10-14\",\"symbol\":\"AMZN\",\"close\":216.39,\"value\":222.6785,\"ma_window\":20},{\"date\":\"2025-10-15\",\"symbol\":\"AMZN\",\"close\":215.57,\"value\":221.876,\"ma_window\":20},{\"date\":\"2025-10-16\",\"symbol\":\"AMZN\",\"close\":214.47,\"value\":221.038,\"ma_window\":20},{\"date\":\"2025-10-17\",\"symbol\":\"AMZN\",\"close\":213.04,\"value\":220.116,\"ma_window\":20},{\"date\":\"2025-10-20\",\"symbol\":\"AMZN\",\"close\":216.48,\"value\":219.5585,\"ma_window\":20},{\"date\":\"2025-10-21\",\"symbol\":\"AMZN\",\"close\":222.03,\"value\":219.6245,\"ma_window\":20},{\"date\":\"2025-10-22\",\"symbol\":\"AMZN\",\"close\":217.95,\"value\":219.5115,\"ma_window\":20},{\"date\":\"2025-10-23\",\"symbol\":\"AMZN\",\"close\":221.09,\"value\":219.6585,\"ma_window\":20},{\"date\":\"2025-10-24\",\"symbol\":\"AMZN\",\"close\":224.21,\"value\":219.88,\"ma_window\":20},{\"date\":\"2025-10-27\",\"symbol\":\"AMZN\",\"close\":226.97,\"value\":220.12,\"ma_window\":20},{\"date\":\"2025-10-28\",\"symbol\":\"AMZN\",\"close\":229.25,\"value\":220.604,\"ma_window\":20},{\"date\":\"2025-10-29\",\"symbol\":\"AMZN\",\"close\":230.3,\"value\":221.0875,\"ma_window\":20},{\"date\":\"2025-10-30\",\"symbol\":\"AMZN\",\"close\":222.86,\"value\":221.11,\"ma_window\":20},{\"date\":\"2025-10-31\",\"symbol\":\"AMZN\",\"close\":244.22,\"value\":222.3455,\"ma_window\":20},{\"date\":\"2025-11-03\",\"symbol\":\"AMZN\",\"close\":254,\"value\":224.0005,\"ma_window\":20},{\"date\":\"2025-11-04\",\"symbol\":\"AMZN\",\"close\":249.32,\"value\":225.3775,\"ma_window\":20},{\"date\":\"2025-11-05\",\"symbol\":\"AMZN\",\"close\":250.2,\"value\":226.6265,\"ma_window\":20},{\"date\":\"2025-11-06\",\"symbol\":\"AMZN\",\"close\":243.04,\"value\":227.3915,\"ma_window\":20},{\"date\":\"2025-11-07\",\"symbol\":\"AMZN\",\"close\":244.41,\"value\":228.7935,\"ma_window\":20},{\"date\":\"2025-11-10\",\"symbol\":\"AMZN\",\"close\":248.4,\"value\":230.21,\"ma_window\":20},{\"date\":\"2025-11-11\",\"symbol\":\"AMZN\",\"close\":249.1,\"value\":231.8455,\"ma_window\":20},{\"date\":\"2025-11-12\",\"symbol\":\"AMZN\",\"close\":244.2,\"value\":233.277,\"ma_window\":20},{\"date\":\"2025-11-13\",\"symbol\":\"AMZN\",\"close\":237.58,\"value\":234.4325,\"ma_window\":20},{\"date\":\"2025-11-14\",\"symbol\":\"AMZN\",\"close\":234.69,\"value\":235.515,\"ma_window\":20},{\"date\":\"2025-11-17\",\"symbol\":\"AMZN\",\"close\":232.87,\"value\":236.3345,\"ma_window\":20},{\"date\":\"2025-11-18\",\"symbol\":\"AMZN\",\"close\":222.55,\"value\":236.3605,\"ma_window\":20},{\"date\":\"2025-11-19\",\"symbol\":\"AMZN\",\"close\":222.69,\"value\":236.5975,\"ma_window\":20},{\"date\":\"2025-11-20\",\"symbol\":\"AMZN\",\"close\":217.14,\"value\":236.4,\"ma_window\":20},{\"date\":\"2025-11-21\",\"symbol\":\"AMZN\",\"close\":220.69,\"value\":236.224,\"ma_window\":20},{\"date\":\"2025-11-24\",\"symbol\":\"AMZN\",\"close\":226.28,\"value\":236.1895,\"ma_window\":20},{\"date\":\"2025-11-25\",\"symbol\":\"AMZN\",\"close\":229.67,\"value\":236.2105,\"ma_window\":20},{\"date\":\"2025-11-26\",\"symbol\":\"AMZN\",\"close\":229.16,\"value\":236.1535,\"ma_window\":20},{\"date\":\"2025-11-28\",\"symbol\":\"AMZN\",\"close\":233.22,\"value\":236.6715,\"ma_window\":20},{\"date\":\"2025-12-01\",\"symbol\":\"AMZN\",\"close\":233.88,\"value\":236.1545,\"ma_window\":20},{\"date\":\"2025-12-02\",\"symbol\":\"AMZN\",\"close\":234.42,\"value\":235.1755,\"ma_window\":20},{\"date\":\"2025-12-03\",\"symbol\":\"AMZN\",\"close\":232.38,\"value\":234.3285,\"ma_window\":20},{\"date\":\"2025-12-04\",\"symbol\":\"AMZN\",\"close\":229.11,\"value\":233.274,\"ma_window\":20},{\"date\":\"2025-12-05\",\"symbol\":\"AMZN\",\"close\":229.53,\"value\":232.5985,\"ma_window\":20},{\"date\":\"2025-12-08\",\"symbol\":\"AMZN\",\"close\":226.89,\"value\":231.7225,\"ma_window\":20},{\"date\":\"2025-12-09\",\"symbol\":\"AMZN\",\"close\":227.92,\"value\":230.6985,\"ma_window\":20},{\"date\":\"2025-12-10\",\"symbol\":\"AMZN\",\"close\":231.78,\"value\":229.8325,\"ma_window\":20},{\"date\":\"2025-12-11\",\"symbol\":\"AMZN\",\"close\":230.28,\"value\":229.1365,\"ma_window\":20},{\"date\":\"2025-12-12\",\"symbol\":\"AMZN\",\"close\":226.19,\"value\":228.567,\"ma_window\":20},{\"date\":\"2025-12-15\",\"symbol\":\"AMZN\",\"close\":222.54,\"value\":227.9595,\"ma_window\":20},{\"date\":\"2025-12-16\",\"symbol\":\"AMZN\",\"close\":222.56,\"value\":227.444,\"ma_window\":20},{\"date\":\"2025-12-17\",\"symbol\":\"AMZN\",\"close\":221.27,\"value\":227.38,\"ma_window\":20},{\"date\":\"2025-12-18\",\"symbol\":\"AMZN\",\"close\":226.76,\"value\":227.5835,\"ma_window\":20},{\"date\":\"2025-12-19\",\"symbol\":\"AMZN\",\"close\":227.35,\"value\":228.094,\"ma_window\":20},{\"date\":\"2025-12-22\",\"symbol\":\"AMZN\",\"close\":228.43,\"value\":228.481,\"ma_window\":20},{\"date\":\"2025-12-23\",\"symbol\":\"AMZN\",\"close\":232.14,\"value\":228.774,\"ma_window\":20},{\"date\":\"2025-12-24\",\"symbol\":\"AMZN\",\"close\":232.38,\"value\":228.9095,\"ma_window\":20},{\"date\":\"2025-12-26\",\"symbol\":\"AMZN\",\"close\":232.52,\"value\":229.0775,\"ma_window\":20},{\"date\":\"2025-12-29\",\"symbol\":\"AMZN\",\"close\":232.07,\"value\":229.02,\"ma_window\":20},{\"date\":\"2025-12-30\",\"symbol\":\"AMZN\",\"close\":232.53,\"value\":228.9525,\"ma_window\":20},{\"date\":\"2025-12-31\",\"symbol\":\"AMZN\",\"close\":230.82,\"value\":228.7725,\"ma_window\":20},{\"date\":\"2026-01-02\",\"symbol\":\"AMZN\",\"close\":226.5,\"value\":228.4785,\"ma_window\":20},{\"date\":\"2026-01-05\",\"symbol\":\"AMZN\",\"close\":233.06,\"value\":228.676,\"ma_window\":20},{\"date\":\"2026-01-06\",\"symbol\":\"AMZN\",\"close\":240.93,\"value\":229.246,\"ma_window\":20},{\"date\":\"2026-01-07\",\"symbol\":\"AMZN\",\"close\":241.56,\"value\":229.9795,\"ma_window\":20},{\"date\":\"2026-01-08\",\"symbol\":\"AMZN\",\"close\":246.29,\"value\":230.898,\"ma_window\":20},{\"date\":\"2026-01-09\",\"symbol\":\"AMZN\",\"close\":247.38,\"value\":231.678,\"ma_window\":20},{\"date\":\"2026-01-12\",\"symbol\":\"AMZN\",\"close\":246.47,\"value\":232.4875,\"ma_window\":20},{\"date\":\"2026-01-13\",\"symbol\":\"AMZN\",\"close\":242.6,\"value\":233.308,\"ma_window\":20},{\"date\":\"2026-01-14\",\"symbol\":\"AMZN\",\"close\":236.65,\"value\":234.0135,\"ma_window\":20},{\"date\":\"2026-01-15\",\"symbol\":\"AMZN\",\"close\":238.18,\"value\":234.7945,\"ma_window\":20},{\"date\":\"2026-01-16\",\"symbol\":\"AMZN\",\"close\":239.12,\"value\":235.687,\"ma_window\":20},{\"date\":\"2026-01-20\",\"symbol\":\"AMZN\",\"close\":231,\"value\":235.899,\"ma_window\":20},{\"date\":\"2026-01-21\",\"symbol\":\"AMZN\",\"close\":231.31,\"value\":236.097,\"ma_window\":20},{\"date\":\"2026-01-22\",\"symbol\":\"AMZN\",\"close\":234.34,\"value\":236.3925,\"ma_window\":20},{\"date\":\"2026-01-23\",\"symbol\":\"AMZN\",\"close\":239.16,\"value\":236.7435,\"ma_window\":20},{\"date\":\"2026-01-26\",\"symbol\":\"AMZN\",\"close\":238.42,\"value\":237.0455,\"ma_window\":20},{\"date\":\"2025-07-31\",\"symbol\":\"GOOGL\",\"close\":191.6,\"value\":191.6,\"ma_window\":20},{\"date\":\"2025-08-01\",\"symbol\":\"GOOGL\",\"close\":188.84,\"value\":190.22,\"ma_window\":20},{\"date\":\"2025-08-04\",\"symbol\":\"GOOGL\",\"close\":194.74,\"value\":191.7266666667,\"ma_window\":20},{\"date\":\"2025-08-05\",\"symbol\":\"GOOGL\",\"close\":194.37,\"value\":192.3875,\"ma_window\":20},{\"date\":\"2025-08-06\",\"symbol\":\"GOOGL\",\"close\":195.79,\"value\":193.068,\"ma_window\":20},{\"date\":\"2025-08-07\",\"symbol\":\"GOOGL\",\"close\":196.22,\"value\":193.5933333333,\"ma_window\":20},{\"date\":\"2025-08-08\",\"symbol\":\"GOOGL\",\"close\":201.11,\"value\":194.6671428571,\"ma_window\":20},{\"date\":\"2025-08-11\",\"symbol\":\"GOOGL\",\"close\":200.69,\"value\":195.42,\"ma_window\":20},{\"date\":\"2025-08-12\",\"symbol\":\"GOOGL\",\"close\":203.03,\"value\":196.2655555556,\"ma_window\":20},{\"date\":\"2025-08-13\",\"symbol\":\"GOOGL\",\"close\":201.65,\"value\":196.804,\"ma_window\":20},{\"date\":\"2025-08-14\",\"symbol\":\"GOOGL\",\"close\":202.63,\"value\":197.3336363636,\"ma_window\":20},{\"date\":\"2025-08-15\",\"symbol\":\"GOOGL\",\"close\":203.58,\"value\":197.8541666667,\"ma_window\":20},{\"date\":\"2025-08-18\",\"symbol\":\"GOOGL\",\"close\":203.19,\"value\":198.2646153846,\"ma_window\":20},{\"date\":\"2025-08-19\",\"symbol\":\"GOOGL\",\"close\":201.26,\"value\":198.4785714286,\"ma_window\":20},{\"date\":\"2025-08-20\",\"symbol\":\"GOOGL\",\"close\":199.01,\"value\":198.514,\"ma_window\":20},{\"date\":\"2025-08-21\",\"symbol\":\"GOOGL\",\"close\":199.44,\"value\":198.571875,\"ma_window\":20},{\"date\":\"2025-08-22\",\"symbol\":\"GOOGL\",\"close\":205.77,\"value\":198.9952941176,\"ma_window\":20},{\"date\":\"2025-08-25\",\"symbol\":\"GOOGL\",\"close\":208.17,\"value\":199.505,\"ma_window\":20},{\"date\":\"2025-08-26\",\"symbol\":\"GOOGL\",\"close\":206.82,\"value\":199.89,\"ma_window\":20},{\"date\":\"2025-08-27\",\"symbol\":\"GOOGL\",\"close\":207.16,\"value\":200.2535,\"ma_window\":20},{\"date\":\"2025-08-28\",\"symbol\":\"GOOGL\",\"close\":211.31,\"value\":201.239,\"ma_window\":20},{\"date\":\"2025-08-29\",\"symbol\":\"GOOGL\",\"close\":212.58,\"value\":202.426,\"ma_window\":20},{\"date\":\"2025-09-02\",\"symbol\":\"GOOGL\",\"close\":211.02,\"value\":203.24,\"ma_window\":20},{\"date\":\"2025-09-03\",\"symbol\":\"GOOGL\",\"close\":230.3,\"value\":205.0365,\"ma_window\":20},{\"date\":\"2025-09-04\",\"symbol\":\"GOOGL\",\"close\":231.94,\"value\":206.844,\"ma_window\":20},{\"date\":\"2025-09-05\",\"symbol\":\"GOOGL\",\"close\":234.64,\"value\":208.765,\"ma_window\":20},{\"date\":\"2025-09-08\",\"symbol\":\"GOOGL\",\"close\":233.89,\"value\":210.404,\"ma_window\":20},{\"date\":\"2025-09-09\",\"symbol\":\"GOOGL\",\"close\":239.47,\"value\":212.343,\"ma_window\":20},{\"date\":\"2025-09-10\",\"symbol\":\"GOOGL\",\"close\":239.01,\"value\":214.142,\"ma_window\":20},{\"date\":\"2025-09-11\",\"symbol\":\"GOOGL\",\"close\":240.21,\"value\":216.07,\"ma_window\":20},{\"date\":\"2025-09-12\",\"symbol\":\"GOOGL\",\"close\":240.64,\"value\":217.9705,\"ma_window\":20},{\"date\":\"2025-09-15\",\"symbol\":\"GOOGL\",\"close\":251.45,\"value\":220.364,\"ma_window\":20},{\"date\":\"2025-09-16\",\"symbol\":\"GOOGL\",\"close\":251,\"value\":222.7545,\"ma_window\":20},{\"date\":\"2025-09-17\",\"symbol\":\"GOOGL\",\"close\":249.37,\"value\":225.16,\"ma_window\":20},{\"date\":\"2025-09-18\",\"symbol\":\"GOOGL\",\"close\":251.87,\"value\":227.803,\"ma_window\":20},{\"date\":\"2025-09-19\",\"symbol\":\"GOOGL\",\"close\":254.55,\"value\":230.5585,\"ma_window\":20},{\"date\":\"2025-09-22\",\"symbol\":\"GOOGL\",\"close\":252.36,\"value\":232.888,\"ma_window\":20},{\"date\":\"2025-09-23\",\"symbol\":\"GOOGL\",\"close\":251.5,\"value\":235.0545,\"ma_window\":20},{\"date\":\"2025-09-24\",\"symbol\":\"GOOGL\",\"close\":246.98,\"value\":237.0625,\"ma_window\":20},{\"date\":\"2025-09-25\",\"symbol\":\"GOOGL\",\"close\":245.63,\"value\":238.986,\"ma_window\":20},{\"date\":\"2025-09-26\",\"symbol\":\"GOOGL\",\"close\":246.38,\"value\":240.7395,\"ma_window\":20},{\"date\":\"2025-09-29\",\"symbol\":\"GOOGL\",\"close\":243.89,\"value\":242.305,\"ma_window\":20},{\"date\":\"2025-09-30\",\"symbol\":\"GOOGL\",\"close\":242.94,\"value\":243.901,\"ma_window\":20},{\"date\":\"2025-10-01\",\"symbol\":\"GOOGL\",\"close\":244.74,\"value\":244.623,\"ma_window\":20},{\"date\":\"2025-10-02\",\"symbol\":\"GOOGL\",\"close\":245.53,\"value\":245.3025,\"ma_window\":20},{\"date\":\"2025-10-03\",\"symbol\":\"GOOGL\",\"close\":245.19,\"value\":245.83,\"ma_window\":20},{\"date\":\"2025-10-06\",\"symbol\":\"GOOGL\",\"close\":250.27,\"value\":246.649,\"ma_window\":20},{\"date\":\"2025-10-07\",\"symbol\":\"GOOGL\",\"close\":245.6,\"value\":246.9555,\"ma_window\":20},{\"date\":\"2025-10-08\",\"symbol\":\"GOOGL\",\"close\":244.46,\"value\":247.228,\"ma_window\":20},{\"date\":\"2025-10-09\",\"symbol\":\"GOOGL\",\"close\":241.37,\"value\":247.286,\"ma_window\":20},{\"date\":\"2025-10-10\",\"symbol\":\"GOOGL\",\"close\":236.42,\"value\":247.075,\"ma_window\":20},{\"date\":\"2025-10-13\",\"symbol\":\"GOOGL\",\"close\":243.99,\"value\":246.702,\"ma_window\":20},{\"date\":\"2025-10-14\",\"symbol\":\"GOOGL\",\"close\":245.29,\"value\":246.4165,\"ma_window\":20},{\"date\":\"2025-10-15\",\"symbol\":\"GOOGL\",\"close\":250.87,\"value\":246.4915,\"ma_window\":20},{\"date\":\"2025-10-16\",\"symbol\":\"GOOGL\",\"close\":251.3,\"value\":246.463,\"ma_window\":20},{\"date\":\"2025-10-17\",\"symbol\":\"GOOGL\",\"close\":253.13,\"value\":246.392,\"ma_window\":20},{\"date\":\"2025-10-20\",\"symbol\":\"GOOGL\",\"close\":256.38,\"value\":246.593,\"ma_window\":20},{\"date\":\"2025-10-21\",\"symbol\":\"GOOGL\",\"close\":250.3,\"value\":246.533,\"ma_window\":20},{\"date\":\"2025-10-22\",\"symbol\":\"GOOGL\",\"close\":251.53,\"value\":246.7605,\"ma_window\":20},{\"date\":\"2025-10-23\",\"symbol\":\"GOOGL\",\"close\":252.91,\"value\":247.1245,\"ma_window\":20},{\"date\":\"2025-10-24\",\"symbol\":\"GOOGL\",\"close\":259.75,\"value\":247.793,\"ma_window\":20},{\"date\":\"2025-10-27\",\"symbol\":\"GOOGL\",\"close\":269.09,\"value\":249.053,\"ma_window\":20},{\"date\":\"2025-10-28\",\"symbol\":\"GOOGL\",\"close\":267.3,\"value\":250.271,\"ma_window\":20},{\"date\":\"2025-10-29\",\"symbol\":\"GOOGL\",\"close\":274.39,\"value\":251.7535,\"ma_window\":20},{\"date\":\"2025-10-30\",\"symbol\":\"GOOGL\",\"close\":281.3,\"value\":253.542,\"ma_window\":20},{\"date\":\"2025-10-31\",\"symbol\":\"GOOGL\",\"close\":281.01,\"value\":255.333,\"ma_window\":20},{\"date\":\"2025-11-03\",\"symbol\":\"GOOGL\",\"close\":283.53,\"value\":256.996,\"ma_window\":20},{\"date\":\"2025-11-04\",\"symbol\":\"GOOGL\",\"close\":277.36,\"value\":258.584,\"ma_window\":20},{\"date\":\"2025-11-05\",\"symbol\":\"GOOGL\",\"close\":284.12,\"value\":260.567,\"ma_window\":20},{\"date\":\"2025-11-06\",\"symbol\":\"GOOGL\",\"close\":284.56,\"value\":262.7265,\"ma_window\":20},{\"date\":\"2025-11-07\",\"symbol\":\"GOOGL\",\"close\":278.65,\"value\":264.838,\"ma_window\":20},{\"date\":\"2025-11-10\",\"symbol\":\"GOOGL\",\"close\":289.91,\"value\":267.134,\"ma_window\":20},{\"date\":\"2025-11-11\",\"symbol\":\"GOOGL\",\"close\":291.12,\"value\":269.4255,\"ma_window\":20},{\"date\":\"2025-11-12\",\"symbol\":\"GOOGL\",\"close\":286.52,\"value\":271.208,\"ma_window\":20},{\"date\":\"2025-11-13\",\"symbol\":\"GOOGL\",\"close\":278.39,\"value\":272.5625,\"ma_window\":20},{\"date\":\"2025-11-14\",\"symbol\":\"GOOGL\",\"close\":276.23,\"value\":273.7175,\"ma_window\":20},{\"date\":\"2025-11-17\",\"symbol\":\"GOOGL\",\"close\":284.83,\"value\":275.14,\"ma_window\":20},{\"date\":\"2025-11-18\",\"symbol\":\"GOOGL\",\"close\":284.09,\"value\":276.8295,\"ma_window\":20},{\"date\":\"2025-11-19\",\"symbol\":\"GOOGL\",\"close\":292.62,\"value\":278.884,\"ma_window\":20},{\"date\":\"2025-11-20\",\"symbol\":\"GOOGL\",\"close\":289.26,\"value\":280.7015,\"ma_window\":20},{\"date\":\"2025-11-21\",\"symbol\":\"GOOGL\",\"close\":299.46,\"value\":282.687,\"ma_window\":20},{\"date\":\"2025-11-24\",\"symbol\":\"GOOGL\",\"close\":318.37,\"value\":285.151,\"ma_window\":20},{\"date\":\"2025-11-25\",\"symbol\":\"GOOGL\",\"close\":323.23,\"value\":287.9475,\"ma_window\":20},{\"date\":\"2025-11-26\",\"symbol\":\"GOOGL\",\"close\":319.74,\"value\":290.215,\"ma_window\":20},{\"date\":\"2025-11-28\",\"symbol\":\"GOOGL\",\"close\":319.97,\"value\":292.1485,\"ma_window\":20},{\"date\":\"2025-12-01\",\"symbol\":\"GOOGL\",\"close\":314.68,\"value\":293.832,\"ma_window\":20},{\"date\":\"2025-12-02\",\"symbol\":\"GOOGL\",\"close\":315.6,\"value\":295.4355,\"ma_window\":20},{\"date\":\"2025-12-03\",\"symbol\":\"GOOGL\",\"close\":319.42,\"value\":297.5385,\"ma_window\":20},{\"date\":\"2025-12-04\",\"symbol\":\"GOOGL\",\"close\":317.41,\"value\":299.203,\"ma_window\":20},{\"date\":\"2025-12-05\",\"symbol\":\"GOOGL\",\"close\":321.06,\"value\":301.028,\"ma_window\":20},{\"date\":\"2025-12-08\",\"symbol\":\"GOOGL\",\"close\":313.72,\"value\":302.7815,\"ma_window\":20},{\"date\":\"2025-12-09\",\"symbol\":\"GOOGL\",\"close\":317.08,\"value\":304.14,\"ma_window\":20},{\"date\":\"2025-12-10\",\"symbol\":\"GOOGL\",\"close\":320.21,\"value\":305.5945,\"ma_window\":20},{\"date\":\"2025-12-11\",\"symbol\":\"GOOGL\",\"close\":312.43,\"value\":306.89,\"ma_window\":20},{\"date\":\"2025-12-12\",\"symbol\":\"GOOGL\",\"close\":309.29,\"value\":308.435,\"ma_window\":20},{\"date\":\"2025-12-15\",\"symbol\":\"GOOGL\",\"close\":308.22,\"value\":310.0345,\"ma_window\":20},{\"date\":\"2025-12-16\",\"symbol\":\"GOOGL\",\"close\":306.57,\"value\":311.1215,\"ma_window\":20},{\"date\":\"2025-12-17\",\"symbol\":\"GOOGL\",\"close\":296.72,\"value\":311.753,\"ma_window\":20},{\"date\":\"2025-12-18\",\"symbol\":\"GOOGL\",\"close\":302.46,\"value\":312.245,\"ma_window\":20},{\"date\":\"2025-12-19\",\"symbol\":\"GOOGL\",\"close\":307.16,\"value\":313.14,\"ma_window\":20},{\"date\":\"2025-12-22\",\"symbol\":\"GOOGL\",\"close\":309.78,\"value\":313.656,\"ma_window\":20},{\"date\":\"2025-12-23\",\"symbol\":\"GOOGL\",\"close\":314.35,\"value\":313.455,\"ma_window\":20},{\"date\":\"2025-12-24\",\"symbol\":\"GOOGL\",\"close\":314.09,\"value\":312.998,\"ma_window\":20},{\"date\":\"2025-12-26\",\"symbol\":\"GOOGL\",\"close\":313.51,\"value\":312.6865,\"ma_window\":20},{\"date\":\"2025-12-29\",\"symbol\":\"GOOGL\",\"close\":313.56,\"value\":312.366,\"ma_window\":20},{\"date\":\"2025-12-30\",\"symbol\":\"GOOGL\",\"close\":313.85,\"value\":312.3245,\"ma_window\":20},{\"date\":\"2025-12-31\",\"symbol\":\"GOOGL\",\"close\":313,\"value\":312.1945,\"ma_window\":20},{\"date\":\"2026-01-02\",\"symbol\":\"GOOGL\",\"close\":315.15,\"value\":311.981,\"ma_window\":20},{\"date\":\"2026-01-05\",\"symbol\":\"GOOGL\",\"close\":316.54,\"value\":311.9375,\"ma_window\":20},{\"date\":\"2026-01-06\",\"symbol\":\"GOOGL\",\"close\":314.34,\"value\":311.6015,\"ma_window\":20},{\"date\":\"2026-01-07\",\"symbol\":\"GOOGL\",\"close\":321.98,\"value\":312.0145,\"ma_window\":20},{\"date\":\"2026-01-08\",\"symbol\":\"GOOGL\",\"close\":325.44,\"value\":312.4325,\"ma_window\":20},{\"date\":\"2026-01-09\",\"symbol\":\"GOOGL\",\"close\":328.57,\"value\":312.8505,\"ma_window\":20},{\"date\":\"2026-01-12\",\"symbol\":\"GOOGL\",\"close\":331.86,\"value\":313.822,\"ma_window\":20},{\"date\":\"2026-01-13\",\"symbol\":\"GOOGL\",\"close\":335.97,\"value\":315.156,\"ma_window\":20},{\"date\":\"2026-01-14\",\"symbol\":\"GOOGL\",\"close\":335.84,\"value\":316.537,\"ma_window\":20},{\"date\":\"2026-01-15\",\"symbol\":\"GOOGL\",\"close\":332.78,\"value\":317.8475,\"ma_window\":20},{\"date\":\"2026-01-16\",\"symbol\":\"GOOGL\",\"close\":330,\"value\":319.5115,\"ma_window\":20},{\"date\":\"2026-01-20\",\"symbol\":\"GOOGL\",\"close\":322,\"value\":320.4885,\"ma_window\":20},{\"date\":\"2026-01-21\",\"symbol\":\"GOOGL\",\"close\":328.38,\"value\":321.5495,\"ma_window\":20},{\"date\":\"2026-01-22\",\"symbol\":\"GOOGL\",\"close\":330.54,\"value\":322.5875,\"ma_window\":20},{\"date\":\"2026-01-23\",\"symbol\":\"GOOGL\",\"close\":327.93,\"value\":323.2665,\"ma_window\":20},{\"date\":\"2026-01-26\",\"symbol\":\"GOOGL\",\"close\":333.26,\"value\":324.225,\"ma_window\":20},{\"date\":\"2025-07-31\",\"symbol\":\"META\",\"close\":772.29,\"value\":772.29,\"ma_window\":20},{\"date\":\"2025-08-01\",\"symbol\":\"META\",\"close\":748.89,\"value\":760.59,\"ma_window\":20},{\"date\":\"2025-08-04\",\"symbol\":\"META\",\"close\":775.21,\"value\":765.4633333333,\"ma_window\":20},{\"date\":\"2025-08-05\",\"symbol\":\"META\",\"close\":762.32,\"value\":764.6775,\"ma_window\":20},{\"date\":\"2025-08-06\",\"symbol\":\"META\",\"close\":770.84,\"value\":765.91,\"ma_window\":20},{\"date\":\"2025-08-07\",\"symbol\":\"META\",\"close\":760.7,\"value\":765.0416666667,\"ma_window\":20},{\"date\":\"2025-08-08\",\"symbol\":\"META\",\"close\":768.15,\"value\":765.4857142857,\"ma_window\":20},{\"date\":\"2025-08-11\",\"symbol\":\"META\",\"close\":764.73,\"value\":765.39125,\"ma_window\":20},{\"date\":\"2025-08-12\",\"symbol\":\"META\",\"close\":788.82,\"value\":767.9944444444,\"ma_window\":20},{\"date\":\"2025-08-13\",\"symbol\":\"META\",\"close\":778.92,\"value\":769.087,\"ma_window\":20},{\"date\":\"2025-08-14\",\"symbol\":\"META\",\"close\":780.97,\"value\":770.1672727273,\"ma_window\":20},{\"date\":\"2025-08-15\",\"symbol\":\"META\",\"close\":784.06,\"value\":771.325,\"ma_window\":20},{\"date\":\"2025-08-18\",\"symbol\":\"META\",\"close\":766.23,\"value\":770.9330769231,\"ma_window\":20},{\"date\":\"2025-08-19\",\"symbol\":\"META\",\"close\":750.36,\"value\":769.4635714286,\"ma_window\":20},{\"date\":\"2025-08-20\",\"symbol\":\"META\",\"close\":746.61,\"value\":767.94,\"ma_window\":20},{\"date\":\"2025-08-21\",\"symbol\":\"META\",\"close\":738,\"value\":766.06875,\"ma_window\":20},{\"date\":\"2025-08-22\",\"symbol\":\"META\",\"close\":753.67,\"value\":765.3394117647,\"ma_window\":20},{\"date\":\"2025-08-25\",\"symbol\":\"META\",\"close\":752.18,\"value\":764.6083333333,\"ma_window\":20},{\"date\":\"2025-08-26\",\"symbol\":\"META\",\"close\":752.98,\"value\":763.9963157895,\"ma_window\":20},{\"date\":\"2025-08-27\",\"symbol\":\"META\",\"close\":746.27,\"value\":763.11,\"ma_window\":20},{\"date\":\"2025-08-28\",\"symbol\":\"META\",\"close\":749.99,\"value\":761.995,\"ma_window\":20},{\"date\":\"2025-08-29\",\"symbol\":\"META\",\"close\":737.6,\"value\":761.4305,\"ma_window\":20},{\"date\":\"2025-09-02\",\"symbol\":\"META\",\"close\":734.02,\"value\":759.371,\"ma_window\":20},{\"date\":\"2025-09-03\",\"symbol\":\"META\",\"close\":735.95,\"value\":758.0525,\"ma_window\":20},{\"date\":\"2025-09-04\",\"symbol\":\"META\",\"close\":747.54,\"value\":756.8875,\"ma_window\":20},{\"date\":\"2025-09-05\",\"symbol\":\"META\",\"close\":751.33,\"value\":756.419,\"ma_window\":20},{\"date\":\"2025-09-08\",\"symbol\":\"META\",\"close\":751.18,\"value\":755.5705,\"ma_window\":20},{\"date\":\"2025-09-09\",\"symbol\":\"META\",\"close\":764.56,\"value\":755.562,\"ma_window\":20},{\"date\":\"2025-09-10\",\"symbol\":\"META\",\"close\":750.86,\"value\":753.664,\"ma_window\":20},{\"date\":\"2025-09-11\",\"symbol\":\"META\",\"close\":749.78,\"value\":752.207,\"ma_window\":20},{\"date\":\"2025-09-12\",\"symbol\":\"META\",\"close\":754.47,\"value\":750.882,\"ma_window\":20},{\"date\":\"2025-09-15\",\"symbol\":\"META\",\"close\":763.56,\"value\":749.857,\"ma_window\":20},{\"date\":\"2025-09-16\",\"symbol\":\"META\",\"close\":777.84,\"value\":750.4375,\"ma_window\":20},{\"date\":\"2025-09-17\",\"symbol\":\"META\",\"close\":774.57,\"value\":751.648,\"ma_window\":20},{\"date\":\"2025-09-18\",\"symbol\":\"META\",\"close\":779.09,\"value\":753.272,\"ma_window\":20},{\"date\":\"2025-09-19\",\"symbol\":\"META\",\"close\":777.22,\"value\":755.233,\"ma_window\":20},{\"date\":\"2025-09-22\",\"symbol\":\"META\",\"close\":764.54,\"value\":755.7765,\"ma_window\":20},{\"date\":\"2025-09-23\",\"symbol\":\"META\",\"close\":754.78,\"value\":755.9065,\"ma_window\":20},{\"date\":\"2025-09-24\",\"symbol\":\"META\",\"close\":760.04,\"value\":756.2595,\"ma_window\":20},{\"date\":\"2025-09-25\",\"symbol\":\"META\",\"close\":748.3,\"value\":756.361,\"ma_window\":20},{\"date\":\"2025-09-26\",\"symbol\":\"META\",\"close\":743.14,\"value\":756.0185,\"ma_window\":20},{\"date\":\"2025-09-29\",\"symbol\":\"META\",\"close\":742.79,\"value\":756.278,\"ma_window\":20},{\"date\":\"2025-09-30\",\"symbol\":\"META\",\"close\":733.78,\"value\":756.266,\"ma_window\":20},{\"date\":\"2025-10-01\",\"symbol\":\"META\",\"close\":716.76,\"value\":755.3065,\"ma_window\":20},{\"date\":\"2025-10-02\",\"symbol\":\"META\",\"close\":726.46,\"value\":754.2525,\"ma_window\":20},{\"date\":\"2025-10-03\",\"symbol\":\"META\",\"close\":709.98,\"value\":752.185,\"ma_window\":20},{\"date\":\"2025-10-06\",\"symbol\":\"META\",\"close\":715.08,\"value\":750.38,\"ma_window\":20},{\"date\":\"2025-10-07\",\"symbol\":\"META\",\"close\":712.5,\"value\":747.777,\"ma_window\":20},{\"date\":\"2025-10-08\",\"symbol\":\"META\",\"close\":717.26,\"value\":746.097,\"ma_window\":20},{\"date\":\"2025-10-09\",\"symbol\":\"META\",\"close\":732.91,\"value\":745.2535,\"ma_window\":20},{\"date\":\"2025-10-10\",\"symbol\":\"META\",\"close\":704.73,\"value\":742.7665,\"ma_window\":20},{\"date\":\"2025-10-13\",\"symbol\":\"META\",\"close\":715.12,\"value\":740.3445,\"ma_window\":20},{\"date\":\"2025-10-14\",\"symbol\":\"META\",\"close\":708.07,\"value\":736.856,\"ma_window\":20},{\"date\":\"2025-10-15\",\"symbol\":\"META\",\"close\":716.97,\"value\":733.976,\"ma_window\":20},{\"date\":\"2025-10-16\",\"symbol\":\"META\",\"close\":711.49,\"value\":730.596,\"ma_window\":20},{\"date\":\"2025-10-17\",\"symbol\":\"META\",\"close\":716.34,\"value\":727.552,\"ma_window\":20},{\"date\":\"2025-10-20\",\"symbol\":\"META\",\"close\":731.57,\"value\":725.9035,\"ma_window\":20},{\"date\":\"2025-10-21\",\"symbol\":\"META\",\"close\":732.67,\"value\":724.798,\"ma_window\":20},{\"date\":\"2025-10-22\",\"symbol\":\"META\",\"close\":732.81,\"value\":723.4365,\"ma_window\":20},{\"date\":\"2025-10-23\",\"symbol\":\"META\",\"close\":733.4,\"value\":722.6915,\"ma_window\":20},{\"date\":\"2025-10-24\",\"symbol\":\"META\",\"close\":737.76,\"value\":722.4225,\"ma_window\":20},{\"date\":\"2025-10-27\",\"symbol\":\"META\",\"close\":750.21,\"value\":722.7935,\"ma_window\":20},{\"date\":\"2025-10-28\",\"symbol\":\"META\",\"close\":750.83,\"value\":723.646,\"ma_window\":20},{\"date\":\"2025-10-29\",\"symbol\":\"META\",\"close\":751.06,\"value\":725.361,\"ma_window\":20},{\"date\":\"2025-10-30\",\"symbol\":\"META\",\"close\":665.93,\"value\":722.3345,\"ma_window\":20},{\"date\":\"2025-10-31\",\"symbol\":\"META\",\"close\":647.82,\"value\":719.2265,\"ma_window\":20},{\"date\":\"2025-11-03\",\"symbol\":\"META\",\"close\":637.19,\"value\":715.332,\"ma_window\":20},{\"date\":\"2025-11-04\",\"symbol\":\"META\",\"close\":626.81,\"value\":711.0475,\"ma_window\":20},{\"date\":\"2025-11-05\",\"symbol\":\"META\",\"close\":635.43,\"value\":706.956,\"ma_window\":20},{\"date\":\"2025-11-06\",\"symbol\":\"META\",\"close\":618.44,\"value\":701.2325,\"ma_window\":20},{\"date\":\"2025-11-07\",\"symbol\":\"META\",\"close\":621.2,\"value\":697.056,\"ma_window\":20},{\"date\":\"2025-11-10\",\"symbol\":\"META\",\"close\":631.25,\"value\":692.8625,\"ma_window\":20},{\"date\":\"2025-11-11\",\"symbol\":\"META\",\"close\":626.57,\"value\":688.7875,\"ma_window\":20},{\"date\":\"2025-11-12\",\"symbol\":\"META\",\"close\":608.51,\"value\":683.3645,\"ma_window\":20},{\"date\":\"2025-11-13\",\"symbol\":\"META\",\"close\":609.39,\"value\":678.2595,\"ma_window\":20},{\"date\":\"2025-11-14\",\"symbol\":\"META\",\"close\":608.96,\"value\":672.8905,\"ma_window\":20},{\"date\":\"2025-11-17\",\"symbol\":\"META\",\"close\":601.52,\"value\":666.388,\"ma_window\":20},{\"date\":\"2025-11-18\",\"symbol\":\"META\",\"close\":597.2,\"value\":659.6145,\"ma_window\":20},{\"date\":\"2025-11-19\",\"symbol\":\"META\",\"close\":589.84,\"value\":652.466,\"ma_window\":20},{\"date\":\"2025-11-20\",\"symbol\":\"META\",\"close\":588.67,\"value\":645.2295,\"ma_window\":20},{\"date\":\"2025-11-21\",\"symbol\":\"META\",\"close\":593.77,\"value\":638.03,\"ma_window\":20},{\"date\":\"2025-11-24\",\"symbol\":\"META\",\"close\":612.55,\"value\":631.147,\"ma_window\":20},{\"date\":\"2025-11-25\",\"symbol\":\"META\",\"close\":635.7,\"value\":625.3905,\"ma_window\":20},{\"date\":\"2025-11-26\",\"symbol\":\"META\",\"close\":633.09,\"value\":619.492,\"ma_window\":20},{\"date\":\"2025-11-28\",\"symbol\":\"META\",\"close\":647.42,\"value\":618.5665,\"ma_window\":20},{\"date\":\"2025-12-01\",\"symbol\":\"META\",\"close\":640.35,\"value\":618.193,\"ma_window\":20},{\"date\":\"2025-12-02\",\"symbol\":\"META\",\"close\":646.57,\"value\":618.662,\"ma_window\":20},{\"date\":\"2025-12-03\",\"symbol\":\"META\",\"close\":639.08,\"value\":619.2755,\"ma_window\":20},{\"date\":\"2025-12-04\",\"symbol\":\"META\",\"close\":660.99,\"value\":620.5535,\"ma_window\":20},{\"date\":\"2025-12-05\",\"symbol\":\"META\",\"close\":672.87,\"value\":623.275,\"ma_window\":20},{\"date\":\"2025-12-08\",\"symbol\":\"META\",\"close\":666.26,\"value\":625.528,\"ma_window\":20},{\"date\":\"2025-12-09\",\"symbol\":\"META\",\"close\":656.42,\"value\":626.7865,\"ma_window\":20},{\"date\":\"2025-12-10\",\"symbol\":\"META\",\"close\":649.6,\"value\":627.938,\"ma_window\":20},{\"date\":\"2025-12-11\",\"symbol\":\"META\",\"close\":652.18,\"value\":630.1215,\"ma_window\":20},{\"date\":\"2025-12-12\",\"symbol\":\"META\",\"close\":643.71,\"value\":631.8375,\"ma_window\":20},{\"date\":\"2025-12-15\",\"symbol\":\"META\",\"close\":647.51,\"value\":633.765,\"ma_window\":20},{\"date\":\"2025-12-16\",\"symbol\":\"META\",\"close\":657.15,\"value\":636.5465,\"ma_window\":20},{\"date\":\"2025-12-17\",\"symbol\":\"META\",\"close\":649.5,\"value\":639.1615,\"ma_window\":20},{\"date\":\"2025-12-18\",\"symbol\":\"META\",\"close\":664.45,\"value\":642.892,\"ma_window\":20},{\"date\":\"2025-12-19\",\"symbol\":\"META\",\"close\":658.77,\"value\":646.397,\"ma_window\":20},{\"date\":\"2025-12-22\",\"symbol\":\"META\",\"close\":661.5,\"value\":649.7835,\"ma_window\":20},{\"date\":\"2025-12-23\",\"symbol\":\"META\",\"close\":664.94,\"value\":652.403,\"ma_window\":20},{\"date\":\"2025-12-24\",\"symbol\":\"META\",\"close\":667.55,\"value\":653.9955,\"ma_window\":20},{\"date\":\"2025-12-26\",\"symbol\":\"META\",\"close\":663.29,\"value\":655.5055,\"ma_window\":20},{\"date\":\"2025-12-29\",\"symbol\":\"META\",\"close\":658.69,\"value\":656.069,\"ma_window\":20},{\"date\":\"2025-12-30\",\"symbol\":\"META\",\"close\":665.95,\"value\":657.349,\"ma_window\":20},{\"date\":\"2025-12-31\",\"symbol\":\"META\",\"close\":660.09,\"value\":658.025,\"ma_window\":20},{\"date\":\"2026-01-02\",\"symbol\":\"META\",\"close\":650.41,\"value\":658.5915,\"ma_window\":20},{\"date\":\"2026-01-05\",\"symbol\":\"META\",\"close\":658.79,\"value\":658.4815,\"ma_window\":20},{\"date\":\"2026-01-06\",\"symbol\":\"META\",\"close\":660.62,\"value\":657.869,\"ma_window\":20},{\"date\":\"2026-01-07\",\"symbol\":\"META\",\"close\":648.69,\"value\":656.9905,\"ma_window\":20},{\"date\":\"2026-01-08\",\"symbol\":\"META\",\"close\":646.06,\"value\":656.4725,\"ma_window\":20},{\"date\":\"2026-01-09\",\"symbol\":\"META\",\"close\":653.06,\"value\":656.6455,\"ma_window\":20},{\"date\":\"2026-01-12\",\"symbol\":\"META\",\"close\":641.97,\"value\":656.135,\"ma_window\":20},{\"date\":\"2026-01-13\",\"symbol\":\"META\",\"close\":631.09,\"value\":655.504,\"ma_window\":20},{\"date\":\"2026-01-14\",\"symbol\":\"META\",\"close\":615.52,\"value\":653.9045,\"ma_window\":20},{\"date\":\"2026-01-15\",\"symbol\":\"META\",\"close\":620.8,\"value\":652.087,\"ma_window\":20},{\"date\":\"2026-01-16\",\"symbol\":\"META\",\"close\":620.25,\"value\":650.6245,\"ma_window\":20},{\"date\":\"2026-01-20\",\"symbol\":\"META\",\"close\":604.12,\"value\":647.608,\"ma_window\":20},{\"date\":\"2026-01-21\",\"symbol\":\"META\",\"close\":612.96,\"value\":645.3175,\"ma_window\":20},{\"date\":\"2026-01-22\",\"symbol\":\"META\",\"close\":647.63,\"value\":644.624,\"ma_window\":20},{\"date\":\"2026-01-23\",\"symbol\":\"META\",\"close\":658.76,\"value\":644.315,\"ma_window\":20},{\"date\":\"2026-01-26\",\"symbol\":\"META\",\"close\":672.36,\"value\":644.5555,\"ma_window\":20},{\"date\":\"2025-07-31\",\"symbol\":\"MSFT\",\"close\":531.63,\"value\":531.63,\"ma_window\":20},{\"date\":\"2025-08-01\",\"symbol\":\"MSFT\",\"close\":522.27,\"value\":526.95,\"ma_window\":20},{\"date\":\"2025-08-04\",\"symbol\":\"MSFT\",\"close\":533.76,\"value\":529.22,\"ma_window\":20},{\"date\":\"2025-08-05\",\"symbol\":\"MSFT\",\"close\":525.9,\"value\":528.39,\"ma_window\":20},{\"date\":\"2025-08-06\",\"symbol\":\"MSFT\",\"close\":523.1,\"value\":527.332,\"ma_window\":20},{\"date\":\"2025-08-07\",\"symbol\":\"MSFT\",\"close\":519.01,\"value\":525.945,\"ma_window\":20},{\"date\":\"2025-08-08\",\"symbol\":\"MSFT\",\"close\":520.21,\"value\":525.1257142857,\"ma_window\":20},{\"date\":\"2025-08-11\",\"symbol\":\"MSFT\",\"close\":519.94,\"value\":524.4775,\"ma_window\":20},{\"date\":\"2025-08-12\",\"symbol\":\"MSFT\",\"close\":527.38,\"value\":524.8,\"ma_window\":20},{\"date\":\"2025-08-13\",\"symbol\":\"MSFT\",\"close\":518.75,\"value\":524.195,\"ma_window\":20},{\"date\":\"2025-08-14\",\"symbol\":\"MSFT\",\"close\":520.65,\"value\":523.8727272727,\"ma_window\":20},{\"date\":\"2025-08-15\",\"symbol\":\"MSFT\",\"close\":518.35,\"value\":523.4125,\"ma_window\":20},{\"date\":\"2025-08-18\",\"symbol\":\"MSFT\",\"close\":515.29,\"value\":522.7876923077,\"ma_window\":20},{\"date\":\"2025-08-19\",\"symbol\":\"MSFT\",\"close\":507.98,\"value\":521.73,\"ma_window\":20},{\"date\":\"2025-08-20\",\"symbol\":\"MSFT\",\"close\":503.95,\"value\":520.5446666667,\"ma_window\":20},{\"date\":\"2025-08-21\",\"symbol\":\"MSFT\",\"close\":503.3,\"value\":519.466875,\"ma_window\":20},{\"date\":\"2025-08-22\",\"symbol\":\"MSFT\",\"close\":506.28,\"value\":518.6911764706,\"ma_window\":20},{\"date\":\"2025-08-25\",\"symbol\":\"MSFT\",\"close\":503.32,\"value\":517.8372222222,\"ma_window\":20},{\"date\":\"2025-08-26\",\"symbol\":\"MSFT\",\"close\":501.1,\"value\":516.9563157895,\"ma_window\":20},{\"date\":\"2025-08-27\",\"symbol\":\"MSFT\",\"close\":505.79,\"value\":516.398,\"ma_window\":20},{\"date\":\"2025-08-28\",\"symbol\":\"MSFT\",\"close\":508.69,\"value\":515.251,\"ma_window\":20},{\"date\":\"2025-08-29\",\"symbol\":\"MSFT\",\"close\":505.74,\"value\":514.4245,\"ma_window\":20},{\"date\":\"2025-09-02\",\"symbol\":\"MSFT\",\"close\":504.18,\"value\":512.9455,\"ma_window\":20},{\"date\":\"2025-09-03\",\"symbol\":\"MSFT\",\"close\":504.41,\"value\":511.871,\"ma_window\":20},{\"date\":\"2025-09-04\",\"symbol\":\"MSFT\",\"close\":507.02,\"value\":511.067,\"ma_window\":20},{\"date\":\"2025-09-05\",\"symbol\":\"MSFT\",\"close\":494.08,\"value\":509.8205,\"ma_window\":20},{\"date\":\"2025-09-08\",\"symbol\":\"MSFT\",\"close\":497.27,\"value\":508.6735,\"ma_window\":20},{\"date\":\"2025-09-09\",\"symbol\":\"MSFT\",\"close\":497.48,\"value\":507.5505,\"ma_window\":20},{\"date\":\"2025-09-10\",\"symbol\":\"MSFT\",\"close\":499.44,\"value\":506.1535,\"ma_window\":20},{\"date\":\"2025-09-11\",\"symbol\":\"MSFT\",\"close\":500.07,\"value\":505.2195,\"ma_window\":20},{\"date\":\"2025-09-12\",\"symbol\":\"MSFT\",\"close\":508.95,\"value\":504.6345,\"ma_window\":20},{\"date\":\"2025-09-15\",\"symbol\":\"MSFT\",\"close\":514.4,\"value\":504.437,\"ma_window\":20},{\"date\":\"2025-09-16\",\"symbol\":\"MSFT\",\"close\":508.09,\"value\":504.077,\"ma_window\":20},{\"date\":\"2025-09-17\",\"symbol\":\"MSFT\",\"close\":509.07,\"value\":504.1315,\"ma_window\":20},{\"date\":\"2025-09-18\",\"symbol\":\"MSFT\",\"close\":507.5,\"value\":504.309,\"ma_window\":20},{\"date\":\"2025-09-19\",\"symbol\":\"MSFT\",\"close\":516.96,\"value\":504.992,\"ma_window\":20},{\"date\":\"2025-09-22\",\"symbol\":\"MSFT\",\"close\":513.49,\"value\":505.3525,\"ma_window\":20},{\"date\":\"2025-09-23\",\"symbol\":\"MSFT\",\"close\":508.28,\"value\":505.6005,\"ma_window\":20},{\"date\":\"2025-09-24\",\"symbol\":\"MSFT\",\"close\":509.2,\"value\":506.0055,\"ma_window\":20},{\"date\":\"2025-09-25\",\"symbol\":\"MSFT\",\"close\":506.08,\"value\":506.02,\"ma_window\":20},{\"date\":\"2025-09-26\",\"symbol\":\"MSFT\",\"close\":510.5,\"value\":506.1105,\"ma_window\":20},{\"date\":\"2025-09-29\",\"symbol\":\"MSFT\",\"close\":513.64,\"value\":506.5055,\"ma_window\":20},{\"date\":\"2025-09-30\",\"symbol\":\"MSFT\",\"close\":516.98,\"value\":507.1455,\"ma_window\":20},{\"date\":\"2025-10-01\",\"symbol\":\"MSFT\",\"close\":518.74,\"value\":507.862,\"ma_window\":20},{\"date\":\"2025-10-02\",\"symbol\":\"MSFT\",\"close\":514.78,\"value\":508.25,\"ma_window\":20},{\"date\":\"2025-10-03\",\"symbol\":\"MSFT\",\"close\":516.38,\"value\":509.365,\"ma_window\":20},{\"date\":\"2025-10-06\",\"symbol\":\"MSFT\",\"close\":527.58,\"value\":510.8805,\"ma_window\":20},{\"date\":\"2025-10-07\",\"symbol\":\"MSFT\",\"close\":523,\"value\":512.1565,\"ma_window\":20},{\"date\":\"2025-10-08\",\"symbol\":\"MSFT\",\"close\":523.87,\"value\":513.378,\"ma_window\":20},{\"date\":\"2025-10-09\",\"symbol\":\"MSFT\",\"close\":521.42,\"value\":514.4455,\"ma_window\":20},{\"date\":\"2025-10-10\",\"symbol\":\"MSFT\",\"close\":510.01,\"value\":514.4985,\"ma_window\":20},{\"date\":\"2025-10-13\",\"symbol\":\"MSFT\",\"close\":513.09,\"value\":514.433,\"ma_window\":20},{\"date\":\"2025-10-14\",\"symbol\":\"MSFT\",\"close\":512.61,\"value\":514.659,\"ma_window\":20},{\"date\":\"2025-10-15\",\"symbol\":\"MSFT\",\"close\":512.47,\"value\":514.829,\"ma_window\":20},{\"date\":\"2025-10-16\",\"symbol\":\"MSFT\",\"close\":510.65,\"value\":514.9865,\"ma_window\":20},{\"date\":\"2025-10-17\",\"symbol\":\"MSFT\",\"close\":512.62,\"value\":514.7695,\"ma_window\":20},{\"date\":\"2025-10-20\",\"symbol\":\"MSFT\",\"close\":515.82,\"value\":514.886,\"ma_window\":20},{\"date\":\"2025-10-21\",\"symbol\":\"MSFT\",\"close\":516.69,\"value\":515.3065,\"ma_window\":20},{\"date\":\"2025-10-22\",\"symbol\":\"MSFT\",\"close\":519.57,\"value\":515.825,\"ma_window\":20},{\"date\":\"2025-10-23\",\"symbol\":\"MSFT\",\"close\":519.59,\"value\":516.5005,\"ma_window\":20},{\"date\":\"2025-10-24\",\"symbol\":\"MSFT\",\"close\":522.63,\"value\":517.107,\"ma_window\":20},{\"date\":\"2025-10-27\",\"symbol\":\"MSFT\",\"close\":530.53,\"value\":517.9515,\"ma_window\":20},{\"date\":\"2025-10-28\",\"symbol\":\"MSFT\",\"close\":541.06,\"value\":519.1555,\"ma_window\":20},{\"date\":\"2025-10-29\",\"symbol\":\"MSFT\",\"close\":540.54,\"value\":520.2455,\"ma_window\":20},{\"date\":\"2025-10-30\",\"symbol\":\"MSFT\",\"close\":524.78,\"value\":520.7455,\"ma_window\":20},{\"date\":\"2025-10-31\",\"symbol\":\"MSFT\",\"close\":516.84,\"value\":520.7685,\"ma_window\":20},{\"date\":\"2025-11-03\",\"symbol\":\"MSFT\",\"close\":516.06,\"value\":520.1925,\"ma_window\":20},{\"date\":\"2025-11-04\",\"symbol\":\"MSFT\",\"close\":513.37,\"value\":519.711,\"ma_window\":20},{\"date\":\"2025-11-05\",\"symbol\":\"MSFT\",\"close\":506.21,\"value\":518.828,\"ma_window\":20},{\"date\":\"2025-11-06\",\"symbol\":\"MSFT\",\"close\":496.17,\"value\":517.5655,\"ma_window\":20},{\"date\":\"2025-11-07\",\"symbol\":\"MSFT\",\"close\":495.89,\"value\":516.8595,\"ma_window\":20},{\"date\":\"2025-11-10\",\"symbol\":\"MSFT\",\"close\":505.05,\"value\":516.4575,\"ma_window\":20},{\"date\":\"2025-11-11\",\"symbol\":\"MSFT\",\"close\":507.73,\"value\":516.2135,\"ma_window\":20},{\"date\":\"2025-11-12\",\"symbol\":\"MSFT\",\"close\":510.19,\"value\":516.0995,\"ma_window\":20},{\"date\":\"2025-11-13\",\"symbol\":\"MSFT\",\"close\":502.35,\"value\":515.6845,\"ma_window\":20},{\"date\":\"2025-11-14\",\"symbol\":\"MSFT\",\"close\":509.23,\"value\":515.515,\"ma_window\":20},{\"date\":\"2025-11-17\",\"symbol\":\"MSFT\",\"close\":506.54,\"value\":515.051,\"ma_window\":20},{\"date\":\"2025-11-18\",\"symbol\":\"MSFT\",\"close\":492.87,\"value\":513.86,\"ma_window\":20},{\"date\":\"2025-11-19\",\"symbol\":\"MSFT\",\"close\":486.21,\"value\":512.192,\"ma_window\":20},{\"date\":\"2025-11-20\",\"symbol\":\"MSFT\",\"close\":478.43,\"value\":510.134,\"ma_window\":20},{\"date\":\"2025-11-21\",\"symbol\":\"MSFT\",\"close\":472.12,\"value\":507.6085,\"ma_window\":20},{\"date\":\"2025-11-24\",\"symbol\":\"MSFT\",\"close\":474,\"value\":504.782,\"ma_window\":20},{\"date\":\"2025-11-25\",\"symbol\":\"MSFT\",\"close\":476.99,\"value\":501.5785,\"ma_window\":20},{\"date\":\"2025-11-26\",\"symbol\":\"MSFT\",\"close\":485.5,\"value\":498.8265,\"ma_window\":20},{\"date\":\"2025-11-28\",\"symbol\":\"MSFT\",\"close\":492.01,\"value\":497.188,\"ma_window\":20},{\"date\":\"2025-12-01\",\"symbol\":\"MSFT\",\"close\":486.74,\"value\":495.683,\"ma_window\":20},{\"date\":\"2025-12-02\",\"symbol\":\"MSFT\",\"close\":490,\"value\":494.38,\"ma_window\":20},{\"date\":\"2025-12-03\",\"symbol\":\"MSFT\",\"close\":477.73,\"value\":492.598,\"ma_window\":20},{\"date\":\"2025-12-04\",\"symbol\":\"MSFT\",\"close\":480.84,\"value\":491.3295,\"ma_window\":20},{\"date\":\"2025-12-05\",\"symbol\":\"MSFT\",\"close\":483.16,\"value\":490.679,\"ma_window\":20},{\"date\":\"2025-12-08\",\"symbol\":\"MSFT\",\"close\":491.02,\"value\":490.4355,\"ma_window\":20},{\"date\":\"2025-12-09\",\"symbol\":\"MSFT\",\"close\":492.02,\"value\":489.784,\"ma_window\":20},{\"date\":\"2025-12-10\",\"symbol\":\"MSFT\",\"close\":478.56,\"value\":488.3255,\"ma_window\":20},{\"date\":\"2025-12-11\",\"symbol\":\"MSFT\",\"close\":483.47,\"value\":486.9895,\"ma_window\":20},{\"date\":\"2025-12-12\",\"symbol\":\"MSFT\",\"close\":478.53,\"value\":485.7985,\"ma_window\":20},{\"date\":\"2025-12-15\",\"symbol\":\"MSFT\",\"close\":474.82,\"value\":484.078,\"ma_window\":20},{\"date\":\"2025-12-16\",\"symbol\":\"MSFT\",\"close\":476.39,\"value\":482.5705,\"ma_window\":20},{\"date\":\"2025-12-17\",\"symbol\":\"MSFT\",\"close\":476.12,\"value\":481.733,\"ma_window\":20},{\"date\":\"2025-12-18\",\"symbol\":\"MSFT\",\"close\":483.98,\"value\":481.6215,\"ma_window\":20},{\"date\":\"2025-12-19\",\"symbol\":\"MSFT\",\"close\":485.92,\"value\":481.996,\"ma_window\":20},{\"date\":\"2025-12-22\",\"symbol\":\"MSFT\",\"close\":484.92,\"value\":482.636,\"ma_window\":20},{\"date\":\"2025-12-23\",\"symbol\":\"MSFT\",\"close\":486.85,\"value\":483.2785,\"ma_window\":20},{\"date\":\"2025-12-24\",\"symbol\":\"MSFT\",\"close\":488.02,\"value\":483.83,\"ma_window\":20},{\"date\":\"2025-12-26\",\"symbol\":\"MSFT\",\"close\":487.71,\"value\":483.9405,\"ma_window\":20},{\"date\":\"2025-12-29\",\"symbol\":\"MSFT\",\"close\":487.1,\"value\":483.695,\"ma_window\":20},{\"date\":\"2025-12-30\",\"symbol\":\"MSFT\",\"close\":487.48,\"value\":483.732,\"ma_window\":20},{\"date\":\"2025-12-31\",\"symbol\":\"MSFT\",\"close\":483.62,\"value\":483.413,\"ma_window\":20},{\"date\":\"2026-01-02\",\"symbol\":\"MSFT\",\"close\":472.94,\"value\":483.1735,\"ma_window\":20},{\"date\":\"2026-01-05\",\"symbol\":\"MSFT\",\"close\":472.85,\"value\":482.774,\"ma_window\":20},{\"date\":\"2026-01-06\",\"symbol\":\"MSFT\",\"close\":478.51,\"value\":482.5415,\"ma_window\":20},{\"date\":\"2026-01-07\",\"symbol\":\"MSFT\",\"close\":483.47,\"value\":482.164,\"ma_window\":20},{\"date\":\"2026-01-08\",\"symbol\":\"MSFT\",\"close\":478.11,\"value\":481.4685,\"ma_window\":20},{\"date\":\"2026-01-09\",\"symbol\":\"MSFT\",\"close\":479.28,\"value\":481.5045,\"ma_window\":20},{\"date\":\"2026-01-12\",\"symbol\":\"MSFT\",\"close\":477.18,\"value\":481.19,\"ma_window\":20},{\"date\":\"2026-01-13\",\"symbol\":\"MSFT\",\"close\":470.67,\"value\":480.797,\"ma_window\":20},{\"date\":\"2026-01-14\",\"symbol\":\"MSFT\",\"close\":459.38,\"value\":480.025,\"ma_window\":20},{\"date\":\"2026-01-15\",\"symbol\":\"MSFT\",\"close\":456.66,\"value\":479.0385,\"ma_window\":20},{\"date\":\"2026-01-16\",\"symbol\":\"MSFT\",\"close\":459.86,\"value\":478.2255,\"ma_window\":20},{\"date\":\"2026-01-20\",\"symbol\":\"MSFT\",\"close\":454.52,\"value\":476.7525,\"ma_window\":20},{\"date\":\"2026-01-21\",\"symbol\":\"MSFT\",\"close\":444.11,\"value\":474.662,\"ma_window\":20},{\"date\":\"2026-01-22\",\"symbol\":\"MSFT\",\"close\":451.14,\"value\":472.973,\"ma_window\":20},{\"date\":\"2026-01-23\",\"symbol\":\"MSFT\",\"close\":465.95,\"value\":471.928,\"ma_window\":20},{\"date\":\"2026-01-26\",\"symbol\":\"MSFT\",\"close\":470.28,\"value\":471.041,\"ma_window\":20},{\"date\":\"2025-07-31\",\"symbol\":\"NVDA\",\"close\":177.85,\"value\":177.85,\"ma_window\":20},{\"date\":\"2025-08-01\",\"symbol\":\"NVDA\",\"close\":173.7,\"value\":175.775,\"ma_window\":20},{\"date\":\"2025-08-04\",\"symbol\":\"NVDA\",\"close\":179.98,\"value\":177.1766666667,\"ma_window\":20},{\"date\":\"2025-08-05\",\"symbol\":\"NVDA\",\"close\":178.24,\"value\":177.4425,\"ma_window\":20},{\"date\":\"2025-08-06\",\"symbol\":\"NVDA\",\"close\":179.4,\"value\":177.834,\"ma_window\":20},{\"date\":\"2025-08-07\",\"symbol\":\"NVDA\",\"close\":180.75,\"value\":178.32,\"ma_window\":20},{\"date\":\"2025-08-08\",\"symbol\":\"NVDA\",\"close\":182.68,\"value\":178.9428571429,\"ma_window\":20},{\"date\":\"2025-08-11\",\"symbol\":\"NVDA\",\"close\":182.04,\"value\":179.33,\"ma_window\":20},{\"date\":\"2025-08-12\",\"symbol\":\"NVDA\",\"close\":183.14,\"value\":179.7533333333,\"ma_window\":20},{\"date\":\"2025-08-13\",\"symbol\":\"NVDA\",\"close\":181.57,\"value\":179.935,\"ma_window\":20},{\"date\":\"2025-08-14\",\"symbol\":\"NVDA\",\"close\":182,\"value\":180.1227272727,\"ma_window\":20},{\"date\":\"2025-08-15\",\"symbol\":\"NVDA\",\"close\":180.43,\"value\":180.1483333333,\"ma_window\":20},{\"date\":\"2025-08-18\",\"symbol\":\"NVDA\",\"close\":181.99,\"value\":180.29,\"ma_window\":20},{\"date\":\"2025-08-19\",\"symbol\":\"NVDA\",\"close\":175.62,\"value\":179.9564285714,\"ma_window\":20},{\"date\":\"2025-08-20\",\"symbol\":\"NVDA\",\"close\":175.38,\"value\":179.6513333333,\"ma_window\":20},{\"date\":\"2025-08-21\",\"symbol\":\"NVDA\",\"close\":174.96,\"value\":179.358125,\"ma_window\":20},{\"date\":\"2025-08-22\",\"symbol\":\"NVDA\",\"close\":177.97,\"value\":179.2764705882,\"ma_window\":20},{\"date\":\"2025-08-25\",\"symbol\":\"NVDA\",\"close\":179.79,\"value\":179.305,\"ma_window\":20},{\"date\":\"2025-08-26\",\"symbol\":\"NVDA\",\"close\":181.75,\"value\":179.4336842105,\"ma_window\":20},{\"date\":\"2025-08-27\",\"symbol\":\"NVDA\",\"close\":181.58,\"value\":179.541,\"ma_window\":20},{\"date\":\"2025-08-28\",\"symbol\":\"NVDA\",\"close\":180.15,\"value\":179.656,\"ma_window\":20},{\"date\":\"2025-08-29\",\"symbol\":\"NVDA\",\"close\":174.16,\"value\":179.679,\"ma_window\":20},{\"date\":\"2025-09-02\",\"symbol\":\"NVDA\",\"close\":170.76,\"value\":179.218,\"ma_window\":20},{\"date\":\"2025-09-03\",\"symbol\":\"NVDA\",\"close\":170.6,\"value\":178.836,\"ma_window\":20},{\"date\":\"2025-09-04\",\"symbol\":\"NVDA\",\"close\":171.64,\"value\":178.448,\"ma_window\":20},{\"date\":\"2025-09-05\",\"symbol\":\"NVDA\",\"close\":167,\"value\":177.7605,\"ma_window\":20},{\"date\":\"2025-09-08\",\"symbol\":\"NVDA\",\"close\":168.29,\"value\":177.041,\"ma_window\":20},{\"date\":\"2025-09-09\",\"symbol\":\"NVDA\",\"close\":170.74,\"value\":176.476,\"ma_window\":20},{\"date\":\"2025-09-10\",\"symbol\":\"NVDA\",\"close\":177.31,\"value\":176.1845,\"ma_window\":20},{\"date\":\"2025-09-11\",\"symbol\":\"NVDA\",\"close\":177.16,\"value\":175.964,\"ma_window\":20},{\"date\":\"2025-09-12\",\"symbol\":\"NVDA\",\"close\":177.81,\"value\":175.7545,\"ma_window\":20},{\"date\":\"2025-09-15\",\"symbol\":\"NVDA\",\"close\":177.74,\"value\":175.62,\"ma_window\":20},{\"date\":\"2025-09-16\",\"symbol\":\"NVDA\",\"close\":174.87,\"value\":175.264,\"ma_window\":20},{\"date\":\"2025-09-17\",\"symbol\":\"NVDA\",\"close\":170.28,\"value\":174.997,\"ma_window\":20},{\"date\":\"2025-09-18\",\"symbol\":\"NVDA\",\"close\":176.23,\"value\":175.0395,\"ma_window\":20},{\"date\":\"2025-09-19\",\"symbol\":\"NVDA\",\"close\":176.66,\"value\":175.1245,\"ma_window\":20},{\"date\":\"2025-09-22\",\"symbol\":\"NVDA\",\"close\":183.6,\"value\":175.406,\"ma_window\":20},{\"date\":\"2025-09-23\",\"symbol\":\"NVDA\",\"close\":178.42,\"value\":175.3375,\"ma_window\":20},{\"date\":\"2025-09-24\",\"symbol\":\"NVDA\",\"close\":176.96,\"value\":175.098,\"ma_window\":20},{\"date\":\"2025-09-25\",\"symbol\":\"NVDA\",\"close\":177.68,\"value\":174.903,\"ma_window\":20},{\"date\":\"2025-09-26\",\"symbol\":\"NVDA\",\"close\":178.18,\"value\":174.8045,\"ma_window\":20},{\"date\":\"2025-09-29\",\"symbol\":\"NVDA\",\"close\":181.84,\"value\":175.1885,\"ma_window\":20},{\"date\":\"2025-09-30\",\"symbol\":\"NVDA\",\"close\":186.57,\"value\":175.979,\"ma_window\":20},{\"date\":\"2025-10-01\",\"symbol\":\"NVDA\",\"close\":187.23,\"value\":176.8105,\"ma_window\":20},{\"date\":\"2025-10-02\",\"symbol\":\"NVDA\",\"close\":188.88,\"value\":177.6725,\"ma_window\":20},{\"date\":\"2025-10-03\",\"symbol\":\"NVDA\",\"close\":187.61,\"value\":178.703,\"ma_window\":20},{\"date\":\"2025-10-06\",\"symbol\":\"NVDA\",\"close\":185.53,\"value\":179.565,\"ma_window\":20},{\"date\":\"2025-10-07\",\"symbol\":\"NVDA\",\"close\":185.03,\"value\":180.2795,\"ma_window\":20},{\"date\":\"2025-10-08\",\"symbol\":\"NVDA\",\"close\":189.1,\"value\":180.869,\"ma_window\":20},{\"date\":\"2025-10-09\",\"symbol\":\"NVDA\",\"close\":192.56,\"value\":181.639,\"ma_window\":20},{\"date\":\"2025-10-10\",\"symbol\":\"NVDA\",\"close\":183.15,\"value\":181.906,\"ma_window\":20},{\"date\":\"2025-10-13\",\"symbol\":\"NVDA\",\"close\":188.31,\"value\":182.4345,\"ma_window\":20},{\"date\":\"2025-10-14\",\"symbol\":\"NVDA\",\"close\":180.02,\"value\":182.692,\"ma_window\":20},{\"date\":\"2025-10-15\",\"symbol\":\"NVDA\",\"close\":179.82,\"value\":183.169,\"ma_window\":20},{\"date\":\"2025-10-16\",\"symbol\":\"NVDA\",\"close\":181.8,\"value\":183.4475,\"ma_window\":20},{\"date\":\"2025-10-17\",\"symbol\":\"NVDA\",\"close\":183.21,\"value\":183.775,\"ma_window\":20},{\"date\":\"2025-10-20\",\"symbol\":\"NVDA\",\"close\":182.63,\"value\":183.7265,\"ma_window\":20},{\"date\":\"2025-10-21\",\"symbol\":\"NVDA\",\"close\":181.15,\"value\":183.863,\"ma_window\":20},{\"date\":\"2025-10-22\",\"symbol\":\"NVDA\",\"close\":180.27,\"value\":184.0285,\"ma_window\":20},{\"date\":\"2025-10-23\",\"symbol\":\"NVDA\",\"close\":182.15,\"value\":184.252,\"ma_window\":20},{\"date\":\"2025-10-24\",\"symbol\":\"NVDA\",\"close\":186.25,\"value\":184.6555,\"ma_window\":20},{\"date\":\"2025-10-27\",\"symbol\":\"NVDA\",\"close\":191.48,\"value\":185.1375,\"ma_window\":20},{\"date\":\"2025-10-28\",\"symbol\":\"NVDA\",\"close\":201.02,\"value\":185.86,\"ma_window\":20},{\"date\":\"2025-10-29\",\"symbol\":\"NVDA\",\"close\":207.03,\"value\":186.85,\"ma_window\":20},{\"date\":\"2025-10-30\",\"symbol\":\"NVDA\",\"close\":202.88,\"value\":187.55,\"ma_window\":20},{\"date\":\"2025-10-31\",\"symbol\":\"NVDA\",\"close\":202.48,\"value\":188.2935,\"ma_window\":20},{\"date\":\"2025-11-03\",\"symbol\":\"NVDA\",\"close\":206.87,\"value\":189.3605,\"ma_window\":20},{\"date\":\"2025-11-04\",\"symbol\":\"NVDA\",\"close\":198.68,\"value\":190.043,\"ma_window\":20},{\"date\":\"2025-11-05\",\"symbol\":\"NVDA\",\"close\":195.2,\"value\":190.348,\"ma_window\":20},{\"date\":\"2025-11-06\",\"symbol\":\"NVDA\",\"close\":188.07,\"value\":190.1235,\"ma_window\":20},{\"date\":\"2025-11-07\",\"symbol\":\"NVDA\",\"close\":188.14,\"value\":190.373,\"ma_window\":20},{\"date\":\"2025-11-10\",\"symbol\":\"NVDA\",\"close\":199.04,\"value\":190.9095,\"ma_window\":20},{\"date\":\"2025-11-11\",\"symbol\":\"NVDA\",\"close\":193.15,\"value\":191.566,\"ma_window\":20},{\"date\":\"2025-11-12\",\"symbol\":\"NVDA\",\"close\":193.79,\"value\":192.2645,\"ma_window\":20},{\"date\":\"2025-11-13\",\"symbol\":\"NVDA\",\"close\":186.85,\"value\":192.517,\"ma_window\":20},{\"date\":\"2025-11-14\",\"symbol\":\"NVDA\",\"close\":190.16,\"value\":192.8645,\"ma_window\":20},{\"date\":\"2025-11-17\",\"symbol\":\"NVDA\",\"close\":186.59,\"value\":193.0625,\"ma_window\":20},{\"date\":\"2025-11-18\",\"symbol\":\"NVDA\",\"close\":181.35,\"value\":193.0725,\"ma_window\":20},{\"date\":\"2025-11-19\",\"symbol\":\"NVDA\",\"close\":186.51,\"value\":193.3845,\"ma_window\":20},{\"date\":\"2025-11-20\",\"symbol\":\"NVDA\",\"close\":180.63,\"value\":193.3085,\"ma_window\":20},{\"date\":\"2025-11-21\",\"symbol\":\"NVDA\",\"close\":178.87,\"value\":192.9395,\"ma_window\":20},{\"date\":\"2025-11-24\",\"symbol\":\"NVDA\",\"close\":182.54,\"value\":192.4925,\"ma_window\":20},{\"date\":\"2025-11-25\",\"symbol\":\"NVDA\",\"close\":177.81,\"value\":191.332,\"ma_window\":20},{\"date\":\"2025-11-26\",\"symbol\":\"NVDA\",\"close\":180.25,\"value\":189.993,\"ma_window\":20},{\"date\":\"2025-11-28\",\"symbol\":\"NVDA\",\"close\":176.99,\"value\":188.6985,\"ma_window\":20},{\"date\":\"2025-12-01\",\"symbol\":\"NVDA\",\"close\":179.91,\"value\":187.57,\"ma_window\":20},{\"date\":\"2025-12-02\",\"symbol\":\"NVDA\",\"close\":181.45,\"value\":186.299,\"ma_window\":20},{\"date\":\"2025-12-03\",\"symbol\":\"NVDA\",\"close\":179.58,\"value\":185.344,\"ma_window\":20},{\"date\":\"2025-12-04\",\"symbol\":\"NVDA\",\"close\":183.38,\"value\":184.753,\"ma_window\":20},{\"date\":\"2025-12-05\",\"symbol\":\"NVDA\",\"close\":182.41,\"value\":184.47,\"ma_window\":20},{\"date\":\"2025-12-08\",\"symbol\":\"NVDA\",\"close\":185.55,\"value\":184.3405,\"ma_window\":20},{\"date\":\"2025-12-09\",\"symbol\":\"NVDA\",\"close\":184.97,\"value\":183.637,\"ma_window\":20},{\"date\":\"2025-12-10\",\"symbol\":\"NVDA\",\"close\":183.78,\"value\":183.1685,\"ma_window\":20},{\"date\":\"2025-12-11\",\"symbol\":\"NVDA\",\"close\":180.93,\"value\":182.5255,\"ma_window\":20},{\"date\":\"2025-12-12\",\"symbol\":\"NVDA\",\"close\":175.02,\"value\":181.934,\"ma_window\":20},{\"date\":\"2025-12-15\",\"symbol\":\"NVDA\",\"close\":176.29,\"value\":181.2405,\"ma_window\":20},{\"date\":\"2025-12-16\",\"symbol\":\"NVDA\",\"close\":177.72,\"value\":180.797,\"ma_window\":20},{\"date\":\"2025-12-17\",\"symbol\":\"NVDA\",\"close\":170.94,\"value\":180.2765,\"ma_window\":20},{\"date\":\"2025-12-18\",\"symbol\":\"NVDA\",\"close\":174.14,\"value\":179.658,\"ma_window\":20},{\"date\":\"2025-12-19\",\"symbol\":\"NVDA\",\"close\":180.99,\"value\":179.676,\"ma_window\":20},{\"date\":\"2025-12-22\",\"symbol\":\"NVDA\",\"close\":183.69,\"value\":179.917,\"ma_window\":20},{\"date\":\"2025-12-23\",\"symbol\":\"NVDA\",\"close\":189.21,\"value\":180.2505,\"ma_window\":20},{\"date\":\"2025-12-24\",\"symbol\":\"NVDA\",\"close\":188.61,\"value\":180.7905,\"ma_window\":20},{\"date\":\"2025-12-26\",\"symbol\":\"NVDA\",\"close\":190.53,\"value\":181.3045,\"ma_window\":20},{\"date\":\"2025-12-29\",\"symbol\":\"NVDA\",\"close\":188.22,\"value\":181.866,\"ma_window\":20},{\"date\":\"2025-12-30\",\"symbol\":\"NVDA\",\"close\":187.54,\"value\":182.2475,\"ma_window\":20},{\"date\":\"2025-12-31\",\"symbol\":\"NVDA\",\"close\":186.5,\"value\":182.5,\"ma_window\":20},{\"date\":\"2026-01-02\",\"symbol\":\"NVDA\",\"close\":188.85,\"value\":182.9635,\"ma_window\":20},{\"date\":\"2026-01-05\",\"symbol\":\"NVDA\",\"close\":188.12,\"value\":183.2005,\"ma_window\":20},{\"date\":\"2026-01-06\",\"symbol\":\"NVDA\",\"close\":187.24,\"value\":183.442,\"ma_window\":20},{\"date\":\"2026-01-07\",\"symbol\":\"NVDA\",\"close\":189.11,\"value\":183.62,\"ma_window\":20},{\"date\":\"2026-01-08\",\"symbol\":\"NVDA\",\"close\":185.04,\"value\":183.6235,\"ma_window\":20},{\"date\":\"2026-01-09\",\"symbol\":\"NVDA\",\"close\":184.86,\"value\":183.6775,\"ma_window\":20},{\"date\":\"2026-01-12\",\"symbol\":\"NVDA\",\"close\":184.94,\"value\":183.878,\"ma_window\":20},{\"date\":\"2026-01-13\",\"symbol\":\"NVDA\",\"close\":185.81,\"value\":184.4175,\"ma_window\":20},{\"date\":\"2026-01-14\",\"symbol\":\"NVDA\",\"close\":183.14,\"value\":184.76,\"ma_window\":20},{\"date\":\"2026-01-15\",\"symbol\":\"NVDA\",\"close\":187.05,\"value\":185.2265,\"ma_window\":20},{\"date\":\"2026-01-16\",\"symbol\":\"NVDA\",\"close\":186.23,\"value\":185.991,\"ma_window\":20},{\"date\":\"2026-01-20\",\"symbol\":\"NVDA\",\"close\":178.07,\"value\":186.1875,\"ma_window\":20},{\"date\":\"2026-01-21\",\"symbol\":\"NVDA\",\"close\":183.32,\"value\":186.304,\"ma_window\":20},{\"date\":\"2026-01-22\",\"symbol\":\"NVDA\",\"close\":184.84,\"value\":186.3615,\"ma_window\":20},{\"date\":\"2026-01-23\",\"symbol\":\"NVDA\",\"close\":187.67,\"value\":186.2845,\"ma_window\":20},{\"date\":\"2026-01-26\",\"symbol\":\"NVDA\",\"close\":186.47,\"value\":186.1775,\"ma_window\":20},{\"date\":\"2025-07-31\",\"symbol\":\"AAPL\",\"close\":207.13,\"value\":207.13,\"ma_window\":60},{\"date\":\"2025-08-01\",\"symbol\":\"AAPL\",\"close\":201.95,\"value\":204.54,\"ma_window\":60},{\"date\":\"2025-08-04\",\"symbol\":\"AAPL\",\"close\":202.92,\"value\":204,\"ma_window\":60},{\"date\":\"2025-08-05\",\"symbol\":\"AAPL\",\"close\":202.49,\"value\":203.6225,\"ma_window\":60},{\"date\":\"2025-08-06\",\"symbol\":\"AAPL\",\"close\":212.8,\"value\":205.458,\"ma_window\":60},{\"date\":\"2025-08-07\",\"symbol\":\"AAPL\",\"close\":219.57,\"value\":207.81,\"ma_window\":60},{\"date\":\"2025-08-08\",\"symbol\":\"AAPL\",\"close\":228.87,\"value\":210.8185714286,\"ma_window\":60},{\"date\":\"2025-08-11\",\"symbol\":\"AAPL\",\"close\":226.96,\"value\":212.83625,\"ma_window\":60},{\"date\":\"2025-08-12\",\"symbol\":\"AAPL\",\"close\":229.43,\"value\":214.68,\"ma_window\":60},{\"date\":\"2025-08-13\",\"symbol\":\"AAPL\",\"close\":233.1,\"value\":216.522,\"ma_window\":60},{\"date\":\"2025-08-14\",\"symbol\":\"AAPL\",\"close\":232.55,\"value\":217.9790909091,\"ma_window\":60},{\"date\":\"2025-08-15\",\"symbol\":\"AAPL\",\"close\":231.37,\"value\":219.095,\"ma_window\":60},{\"date\":\"2025-08-18\",\"symbol\":\"AAPL\",\"close\":230.67,\"value\":219.9853846154,\"ma_window\":60},{\"date\":\"2025-08-19\",\"symbol\":\"AAPL\",\"close\":230.34,\"value\":220.725,\"ma_window\":60},{\"date\":\"2025-08-20\",\"symbol\":\"AAPL\",\"close\":225.79,\"value\":221.0626666667,\"ma_window\":60},{\"date\":\"2025-08-21\",\"symbol\":\"AAPL\",\"close\":224.68,\"value\":221.28875,\"ma_window\":60},{\"date\":\"2025-08-22\",\"symbol\":\"AAPL\",\"close\":227.54,\"value\":221.6564705882,\"ma_window\":60},{\"date\":\"2025-08-25\",\"symbol\":\"AAPL\",\"close\":226.94,\"value\":221.95,\"ma_window\":60},{\"date\":\"2025-08-26\",\"symbol\":\"AAPL\",\"close\":229.09,\"value\":222.3257894737,\"ma_window\":60},{\"date\":\"2025-08-27\",\"symbol\":\"AAPL\",\"close\":230.27,\"value\":222.723,\"ma_window\":60},{\"date\":\"2025-08-28\",\"symbol\":\"AAPL\",\"close\":232.33,\"value\":223.1804761905,\"ma_window\":60},{\"date\":\"2025-08-29\",\"symbol\":\"AAPL\",\"close\":231.92,\"value\":223.5777272727,\"ma_window\":60},{\"date\":\"2025-09-02\",\"symbol\":\"AAPL\",\"close\":229.5,\"value\":223.8352173913,\"ma_window\":60},{\"date\":\"2025-09-03\",\"symbol\":\"AAPL\",\"close\":238.24,\"value\":224.4354166667,\"ma_window\":60},{\"date\":\"2025-09-04\",\"symbol\":\"AAPL\",\"close\":239.55,\"value\":225.04,\"ma_window\":60},{\"date\":\"2025-09-05\",\"symbol\":\"AAPL\",\"close\":239.46,\"value\":225.5946153846,\"ma_window\":60},{\"date\":\"2025-09-08\",\"symbol\":\"AAPL\",\"close\":237.65,\"value\":226.0411111111,\"ma_window\":60},{\"date\":\"2025-09-09\",\"symbol\":\"AAPL\",\"close\":234.12,\"value\":226.3296428571,\"ma_window\":60},{\"date\":\"2025-09-10\",\"symbol\":\"AAPL\",\"close\":226.57,\"value\":226.3379310345,\"ma_window\":60},{\"date\":\"2025-09-11\",\"symbol\":\"AAPL\",\"close\":229.81,\"value\":226.4536666667,\"ma_window\":60},{\"date\":\"2025-09-12\",\"symbol\":\"AAPL\",\"close\":233.84,\"value\":226.6919354839,\"ma_window\":60},{\"date\":\"2025-09-15\",\"symbol\":\"AAPL\",\"close\":236.47,\"value\":226.9975,\"ma_window\":60},{\"date\":\"2025-09-16\",\"symbol\":\"AAPL\",\"close\":237.92,\"value\":227.3284848485,\"ma_window\":60},{\"date\":\"2025-09-17\",\"symbol\":\"AAPL\",\"close\":238.76,\"value\":227.6647058824,\"ma_window\":60},{\"date\":\"2025-09-18\",\"symbol\":\"AAPL\",\"close\":237.65,\"value\":227.95,\"ma_window\":60},{\"date\":\"2025-09-19\",\"symbol\":\"AAPL\",\"close\":245.26,\"value\":228.4308333333,\"ma_window\":60},{\"date\":\"2025-09-22\",\"symbol\":\"AAPL\",\"close\":255.83,\"value\":229.1713513514,\"ma_window\":60},{\"date\":\"2025-09-23\",\"symbol\":\"AAPL\",\"close\":254.18,\"value\":229.8294736842,\"ma_window\":60},{\"date\":\"2025-09-24\",\"symbol\":\"AAPL\",\"close\":252.07,\"value\":230.3997435897,\"ma_window\":60},{\"date\":\"2025-09-25\",\"symbol\":\"AAPL\",\"close\":256.62,\"value\":231.05525,\"ma_window\":60},{\"date\":\"2025-09-26\",\"symbol\":\"AAPL\",\"close\":255.21,\"value\":231.6443902439,\"ma_window\":60},{\"date\":\"2025-09-29\",\"symbol\":\"AAPL\",\"close\":254.18,\"value\":232.180952381,\"ma_window\":60},{\"date\":\"2025-09-30\",\"symbol\":\"AAPL\",\"close\":254.38,\"value\":232.6972093023,\"ma_window\":60},{\"date\":\"2025-10-01\",\"symbol\":\"AAPL\",\"close\":255.2,\"value\":233.2086363636,\"ma_window\":60},{\"date\":\"2025-10-02\",\"symbol\":\"AAPL\",\"close\":256.88,\"value\":233.7346666667,\"ma_window\":60},{\"date\":\"2025-10-03\",\"symbol\":\"AAPL\",\"close\":257.77,\"value\":234.257173913,\"ma_window\":60},{\"date\":\"2025-10-06\",\"symbol\":\"AAPL\",\"close\":256.44,\"value\":234.7291489362,\"ma_window\":60},{\"date\":\"2025-10-07\",\"symbol\":\"AAPL\",\"close\":256.23,\"value\":235.1770833333,\"ma_window\":60},{\"date\":\"2025-10-08\",\"symbol\":\"AAPL\",\"close\":257.81,\"value\":235.6389795918,\"ma_window\":60},{\"date\":\"2025-10-09\",\"symbol\":\"AAPL\",\"close\":253.79,\"value\":236.002,\"ma_window\":60},{\"date\":\"2025-10-10\",\"symbol\":\"AAPL\",\"close\":245.03,\"value\":236.1790196078,\"ma_window\":60},{\"date\":\"2025-10-13\",\"symbol\":\"AAPL\",\"close\":247.42,\"value\":236.3951923077,\"ma_window\":60},{\"date\":\"2025-10-14\",\"symbol\":\"AAPL\",\"close\":247.53,\"value\":236.6052830189,\"ma_window\":60},{\"date\":\"2025-10-15\",\"symbol\":\"AAPL\",\"close\":249.1,\"value\":236.8366666667,\"ma_window\":60},{\"date\":\"2025-10-16\",\"symbol\":\"AAPL\",\"close\":247.21,\"value\":237.0252727273,\"ma_window\":60},{\"date\":\"2025-10-17\",\"symbol\":\"AAPL\",\"close\":252.05,\"value\":237.2935714286,\"ma_window\":60},{\"date\":\"2025-10-20\",\"symbol\":\"AAPL\",\"close\":261.99,\"value\":237.7268421053,\"ma_window\":60},{\"date\":\"2025-10-21\",\"symbol\":\"AAPL\",\"close\":262.52,\"value\":238.1543103448,\"ma_window\":60},{\"date\":\"2025-10-22\",\"symbol\":\"AAPL\",\"close\":258.2,\"value\":238.4940677966,\"ma_window\":60},{\"date\":\"2025-10-23\",\"symbol\":\"AAPL\",\"close\":259.33,\"value\":238.8413333333,\"ma_window\":60},{\"date\":\"2025-10-24\",\"symbol\":\"AAPL\",\"close\":262.57,\"value\":239.7653333333,\"ma_window\":60},{\"date\":\"2025-10-27\",\"symbol\":\"AAPL\",\"close\":268.55,\"value\":240.8753333333,\"ma_window\":60},{\"date\":\"2025-10-28\",\"symbol\":\"AAPL\",\"close\":268.74,\"value\":241.9723333333,\"ma_window\":60},{\"date\":\"2025-10-29\",\"symbol\":\"AAPL\",\"close\":269.44,\"value\":243.0881666667,\"ma_window\":60},{\"date\":\"2025-10-30\",\"symbol\":\"AAPL\",\"close\":271.14,\"value\":244.0605,\"ma_window\":60},{\"date\":\"2025-10-31\",\"symbol\":\"AAPL\",\"close\":270.11,\"value\":244.9028333333,\"ma_window\":60},{\"date\":\"2025-11-03\",\"symbol\":\"AAPL\",\"close\":268.79,\"value\":245.5681666667,\"ma_window\":60},{\"date\":\"2025-11-04\",\"symbol\":\"AAPL\",\"close\":269.78,\"value\":246.2818333333,\"ma_window\":60},{\"date\":\"2025-11-05\",\"symbol\":\"AAPL\",\"close\":269.88,\"value\":246.956,\"ma_window\":60},{\"date\":\"2025-11-06\",\"symbol\":\"AAPL\",\"close\":269.51,\"value\":247.5628333333,\"ma_window\":60},{\"date\":\"2025-11-07\",\"symbol\":\"AAPL\",\"close\":268.21,\"value\":248.1571666667,\"ma_window\":60},{\"date\":\"2025-11-10\",\"symbol\":\"AAPL\",\"close\":269.43,\"value\":248.7915,\"ma_window\":60},{\"date\":\"2025-11-11\",\"symbol\":\"AAPL\",\"close\":275.25,\"value\":249.5345,\"ma_window\":60},{\"date\":\"2025-11-12\",\"symbol\":\"AAPL\",\"close\":273.47,\"value\":250.2533333333,\"ma_window\":60},{\"date\":\"2025-11-13\",\"symbol\":\"AAPL\",\"close\":272.95,\"value\":251.0393333333,\"ma_window\":60},{\"date\":\"2025-11-14\",\"symbol\":\"AAPL\",\"close\":272.41,\"value\":251.8348333333,\"ma_window\":60},{\"date\":\"2025-11-17\",\"symbol\":\"AAPL\",\"close\":267.46,\"value\":252.5001666667,\"ma_window\":60},{\"date\":\"2025-11-18\",\"symbol\":\"AAPL\",\"close\":267.44,\"value\":253.1751666667,\"ma_window\":60},{\"date\":\"2025-11-19\",\"symbol\":\"AAPL\",\"close\":268.56,\"value\":253.833,\"ma_window\":60},{\"date\":\"2025-11-20\",\"symbol\":\"AAPL\",\"close\":266.25,\"value\":254.4326666667,\"ma_window\":60},{\"date\":\"2025-11-21\",\"symbol\":\"AAPL\",\"close\":271.49,\"value\":255.0853333333,\"ma_window\":60},{\"date\":\"2025-11-24\",\"symbol\":\"AAPL\",\"close\":275.92,\"value\":255.8186666667,\"ma_window\":60},{\"date\":\"2025-11-25\",\"symbol\":\"AAPL\",\"close\":276.97,\"value\":256.6098333333,\"ma_window\":60},{\"date\":\"2025-11-26\",\"symbol\":\"AAPL\",\"close\":277.55,\"value\":257.265,\"ma_window\":60},{\"date\":\"2025-11-28\",\"symbol\":\"AAPL\",\"close\":278.85,\"value\":257.92,\"ma_window\":60},{\"date\":\"2025-12-01\",\"symbol\":\"AAPL\",\"close\":283.1,\"value\":258.6473333333,\"ma_window\":60},{\"date\":\"2025-12-02\",\"symbol\":\"AAPL\",\"close\":286.19,\"value\":259.4563333333,\"ma_window\":60},{\"date\":\"2025-12-03\",\"symbol\":\"AAPL\",\"close\":284.15,\"value\":260.2901666667,\"ma_window\":60},{\"date\":\"2025-12-04\",\"symbol\":\"AAPL\",\"close\":280.7,\"value\":261.1923333333,\"ma_window\":60},{\"date\":\"2025-12-05\",\"symbol\":\"AAPL\",\"close\":278.78,\"value\":262.0085,\"ma_window\":60},{\"date\":\"2025-12-08\",\"symbol\":\"AAPL\",\"close\":277.89,\"value\":262.7426666667,\"ma_window\":60},{\"date\":\"2025-12-09\",\"symbol\":\"AAPL\",\"close\":277.18,\"value\":263.4211666667,\"ma_window\":60},{\"date\":\"2025-12-10\",\"symbol\":\"AAPL\",\"close\":278.78,\"value\":264.1021666667,\"ma_window\":60},{\"date\":\"2025-12-11\",\"symbol\":\"AAPL\",\"close\":278.03,\"value\":264.7566666667,\"ma_window\":60},{\"date\":\"2025-12-12\",\"symbol\":\"AAPL\",\"close\":278.28,\"value\":265.4338333333,\"ma_window\":60},{\"date\":\"2025-12-15\",\"symbol\":\"AAPL\",\"close\":274.11,\"value\":265.9146666667,\"ma_window\":60},{\"date\":\"2025-12-16\",\"symbol\":\"AAPL\",\"close\":274.61,\"value\":266.2276666667,\"ma_window\":60},{\"date\":\"2025-12-17\",\"symbol\":\"AAPL\",\"close\":271.84,\"value\":266.522,\"ma_window\":60},{\"date\":\"2025-12-18\",\"symbol\":\"AAPL\",\"close\":272.19,\"value\":266.8573333333,\"ma_window\":60},{\"date\":\"2025-12-19\",\"symbol\":\"AAPL\",\"close\":273.67,\"value\":267.1415,\"ma_window\":60},{\"date\":\"2025-12-22\",\"symbol\":\"AAPL\",\"close\":270.97,\"value\":267.4041666667,\"ma_window\":60},{\"date\":\"2025-12-23\",\"symbol\":\"AAPL\",\"close\":272.36,\"value\":267.7071666667,\"ma_window\":60},{\"date\":\"2025-12-24\",\"symbol\":\"AAPL\",\"close\":273.81,\"value\":268.031,\"ma_window\":60},{\"date\":\"2025-12-26\",\"symbol\":\"AAPL\",\"close\":273.4,\"value\":268.3343333333,\"ma_window\":60},{\"date\":\"2025-12-29\",\"symbol\":\"AAPL\",\"close\":273.76,\"value\":268.6156666667,\"ma_window\":60},{\"date\":\"2025-12-30\",\"symbol\":\"AAPL\",\"close\":273.08,\"value\":268.8708333333,\"ma_window\":60},{\"date\":\"2025-12-31\",\"symbol\":\"AAPL\",\"close\":271.86,\"value\":269.1278333333,\"ma_window\":60},{\"date\":\"2026-01-02\",\"symbol\":\"AAPL\",\"close\":271.01,\"value\":269.3741666667,\"ma_window\":60},{\"date\":\"2026-01-05\",\"symbol\":\"AAPL\",\"close\":267.26,\"value\":269.5316666667,\"ma_window\":60},{\"date\":\"2026-01-06\",\"symbol\":\"AAPL\",\"close\":262.36,\"value\":269.6745,\"ma_window\":60},{\"date\":\"2026-01-07\",\"symbol\":\"AAPL\",\"close\":260.33,\"value\":269.9295,\"ma_window\":60},{\"date\":\"2026-01-08\",\"symbol\":\"AAPL\",\"close\":259.04,\"value\":270.1231666667,\"ma_window\":60},{\"date\":\"2026-01-09\",\"symbol\":\"AAPL\",\"close\":259.37,\"value\":270.3205,\"ma_window\":60},{\"date\":\"2026-01-12\",\"symbol\":\"AAPL\",\"close\":260.25,\"value\":270.5063333333,\"ma_window\":60},{\"date\":\"2026-01-13\",\"symbol\":\"AAPL\",\"close\":261.05,\"value\":270.737,\"ma_window\":60},{\"date\":\"2026-01-14\",\"symbol\":\"AAPL\",\"close\":259.96,\"value\":270.8688333333,\"ma_window\":60},{\"date\":\"2026-01-15\",\"symbol\":\"AAPL\",\"close\":258.21,\"value\":270.8058333333,\"ma_window\":60},{\"date\":\"2026-01-16\",\"symbol\":\"AAPL\",\"close\":255.53,\"value\":270.6893333333,\"ma_window\":60},{\"date\":\"2026-01-20\",\"symbol\":\"AAPL\",\"close\":246.7,\"value\":270.4976666667,\"ma_window\":60},{\"date\":\"2026-01-21\",\"symbol\":\"AAPL\",\"close\":247.65,\"value\":270.303,\"ma_window\":60},{\"date\":\"2026-01-22\",\"symbol\":\"AAPL\",\"close\":248.35,\"value\":270.066,\"ma_window\":60},{\"date\":\"2026-01-23\",\"symbol\":\"AAPL\",\"close\":248.04,\"value\":269.7241666667,\"ma_window\":60},{\"date\":\"2026-01-26\",\"symbol\":\"AAPL\",\"close\":255.41,\"value\":269.502,\"ma_window\":60},{\"date\":\"2025-07-31\",\"symbol\":\"AMZN\",\"close\":234.11,\"value\":234.11,\"ma_window\":60},{\"date\":\"2025-08-01\",\"symbol\":\"AMZN\",\"close\":214.75,\"value\":224.43,\"ma_window\":60},{\"date\":\"2025-08-04\",\"symbol\":\"AMZN\",\"close\":211.65,\"value\":220.17,\"ma_window\":60},{\"date\":\"2025-08-05\",\"symbol\":\"AMZN\",\"close\":213.75,\"value\":218.565,\"ma_window\":60},{\"date\":\"2025-08-06\",\"symbol\":\"AMZN\",\"close\":222.31,\"value\":219.314,\"ma_window\":60},{\"date\":\"2025-08-07\",\"symbol\":\"AMZN\",\"close\":223.13,\"value\":219.95,\"ma_window\":60},{\"date\":\"2025-08-08\",\"symbol\":\"AMZN\",\"close\":222.69,\"value\":220.3414285714,\"ma_window\":60},{\"date\":\"2025-08-11\",\"symbol\":\"AMZN\",\"close\":221.3,\"value\":220.46125,\"ma_window\":60},{\"date\":\"2025-08-12\",\"symbol\":\"AMZN\",\"close\":221.47,\"value\":220.5733333333,\"ma_window\":60},{\"date\":\"2025-08-13\",\"symbol\":\"AMZN\",\"close\":224.56,\"value\":220.972,\"ma_window\":60},{\"date\":\"2025-08-14\",\"symbol\":\"AMZN\",\"close\":230.98,\"value\":221.8818181818,\"ma_window\":60},{\"date\":\"2025-08-15\",\"symbol\":\"AMZN\",\"close\":231.03,\"value\":222.6441666667,\"ma_window\":60},{\"date\":\"2025-08-18\",\"symbol\":\"AMZN\",\"close\":231.49,\"value\":223.3246153846,\"ma_window\":60},{\"date\":\"2025-08-19\",\"symbol\":\"AMZN\",\"close\":228.01,\"value\":223.6592857143,\"ma_window\":60},{\"date\":\"2025-08-20\",\"symbol\":\"AMZN\",\"close\":223.81,\"value\":223.6693333333,\"ma_window\":60},{\"date\":\"2025-08-21\",\"symbol\":\"AMZN\",\"close\":221.95,\"value\":223.561875,\"ma_window\":60},{\"date\":\"2025-08-22\",\"symbol\":\"AMZN\",\"close\":228.84,\"value\":223.8723529412,\"ma_window\":60},{\"date\":\"2025-08-25\",\"symbol\":\"AMZN\",\"close\":227.94,\"value\":224.0983333333,\"ma_window\":60},{\"date\":\"2025-08-26\",\"symbol\":\"AMZN\",\"close\":228.71,\"value\":224.3410526316,\"ma_window\":60},{\"date\":\"2025-08-27\",\"symbol\":\"AMZN\",\"close\":229.12,\"value\":224.58,\"ma_window\":60},{\"date\":\"2025-08-28\",\"symbol\":\"AMZN\",\"close\":231.6,\"value\":224.9142857143,\"ma_window\":60},{\"date\":\"2025-08-29\",\"symbol\":\"AMZN\",\"close\":229,\"value\":225.1,\"ma_window\":60},{\"date\":\"2025-09-02\",\"symbol\":\"AMZN\",\"close\":225.34,\"value\":225.1104347826,\"ma_window\":60},{\"date\":\"2025-09-03\",\"symbol\":\"AMZN\",\"close\":225.99,\"value\":225.1470833333,\"ma_window\":60},{\"date\":\"2025-09-04\",\"symbol\":\"AMZN\",\"close\":235.68,\"value\":225.5684,\"ma_window\":60},{\"date\":\"2025-09-05\",\"symbol\":\"AMZN\",\"close\":232.33,\"value\":225.8284615385,\"ma_window\":60},{\"date\":\"2025-09-08\",\"symbol\":\"AMZN\",\"close\":235.84,\"value\":226.1992592593,\"ma_window\":60},{\"date\":\"2025-09-09\",\"symbol\":\"AMZN\",\"close\":238.24,\"value\":226.6292857143,\"ma_window\":60},{\"date\":\"2025-09-10\",\"symbol\":\"AMZN\",\"close\":230.33,\"value\":226.7568965517,\"ma_window\":60},{\"date\":\"2025-09-11\",\"symbol\":\"AMZN\",\"close\":229.95,\"value\":226.8633333333,\"ma_window\":60},{\"date\":\"2025-09-12\",\"symbol\":\"AMZN\",\"close\":228.15,\"value\":226.9048387097,\"ma_window\":60},{\"date\":\"2025-09-15\",\"symbol\":\"AMZN\",\"close\":231.43,\"value\":227.04625,\"ma_window\":60},{\"date\":\"2025-09-16\",\"symbol\":\"AMZN\",\"close\":234.05,\"value\":227.2584848485,\"ma_window\":60},{\"date\":\"2025-09-17\",\"symbol\":\"AMZN\",\"close\":231.62,\"value\":227.3867647059,\"ma_window\":60},{\"date\":\"2025-09-18\",\"symbol\":\"AMZN\",\"close\":231.23,\"value\":227.4965714286,\"ma_window\":60},{\"date\":\"2025-09-19\",\"symbol\":\"AMZN\",\"close\":231.48,\"value\":227.6072222222,\"ma_window\":60},{\"date\":\"2025-09-22\",\"symbol\":\"AMZN\",\"close\":227.63,\"value\":227.6078378378,\"ma_window\":60},{\"date\":\"2025-09-23\",\"symbol\":\"AMZN\",\"close\":220.71,\"value\":227.4263157895,\"ma_window\":60},{\"date\":\"2025-09-24\",\"symbol\":\"AMZN\",\"close\":220.21,\"value\":227.2412820513,\"ma_window\":60},{\"date\":\"2025-09-25\",\"symbol\":\"AMZN\",\"close\":218.15,\"value\":227.014,\"ma_window\":60},{\"date\":\"2025-09-26\",\"symbol\":\"AMZN\",\"close\":219.78,\"value\":226.8375609756,\"ma_window\":60},{\"date\":\"2025-09-29\",\"symbol\":\"AMZN\",\"close\":222.17,\"value\":226.7264285714,\"ma_window\":60},{\"date\":\"2025-09-30\",\"symbol\":\"AMZN\",\"close\":219.57,\"value\":226.56,\"ma_window\":60},{\"date\":\"2025-10-01\",\"symbol\":\"AMZN\",\"close\":220.63,\"value\":226.4252272727,\"ma_window\":60},{\"date\":\"2025-10-02\",\"symbol\":\"AMZN\",\"close\":222.41,\"value\":226.336,\"ma_window\":60},{\"date\":\"2025-10-03\",\"symbol\":\"AMZN\",\"close\":219.51,\"value\":226.1876086957,\"ma_window\":60},{\"date\":\"2025-10-06\",\"symbol\":\"AMZN\",\"close\":220.9,\"value\":226.075106383,\"ma_window\":60},{\"date\":\"2025-10-07\",\"symbol\":\"AMZN\",\"close\":221.78,\"value\":225.985625,\"ma_window\":60},{\"date\":\"2025-10-08\",\"symbol\":\"AMZN\",\"close\":225.22,\"value\":225.97,\"ma_window\":60},{\"date\":\"2025-10-09\",\"symbol\":\"AMZN\",\"close\":227.74,\"value\":226.0054,\"ma_window\":60},{\"date\":\"2025-10-10\",\"symbol\":\"AMZN\",\"close\":216.37,\"value\":225.8164705882,\"ma_window\":60},{\"date\":\"2025-10-13\",\"symbol\":\"AMZN\",\"close\":220.07,\"value\":225.7059615385,\"ma_window\":60},{\"date\":\"2025-10-14\",\"symbol\":\"AMZN\",\"close\":216.39,\"value\":225.5301886792,\"ma_window\":60},{\"date\":\"2025-10-15\",\"symbol\":\"AMZN\",\"close\":215.57,\"value\":225.3457407407,\"ma_window\":60},{\"date\":\"2025-10-16\",\"symbol\":\"AMZN\",\"close\":214.47,\"value\":225.148,\"ma_window\":60},{\"date\":\"2025-10-17\",\"symbol\":\"AMZN\",\"close\":213.04,\"value\":224.9317857143,\"ma_window\":60},{\"date\":\"2025-10-20\",\"symbol\":\"AMZN\",\"close\":216.48,\"value\":224.7835087719,\"ma_window\":60},{\"date\":\"2025-10-21\",\"symbol\":\"AMZN\",\"close\":222.03,\"value\":224.7360344828,\"ma_window\":60},{\"date\":\"2025-10-22\",\"symbol\":\"AMZN\",\"close\":217.95,\"value\":224.6210169492,\"ma_window\":60},{\"date\":\"2025-10-23\",\"symbol\":\"AMZN\",\"close\":221.09,\"value\":224.5621666667,\"ma_window\":60},{\"date\":\"2025-10-24\",\"symbol\":\"AMZN\",\"close\":224.21,\"value\":224.3971666667,\"ma_window\":60},{\"date\":\"2025-10-27\",\"symbol\":\"AMZN\",\"close\":226.97,\"value\":224.6008333333,\"ma_window\":60},{\"date\":\"2025-10-28\",\"symbol\":\"AMZN\",\"close\":229.25,\"value\":224.8941666667,\"ma_window\":60},{\"date\":\"2025-10-29\",\"symbol\":\"AMZN\",\"close\":230.3,\"value\":225.17,\"ma_window\":60},{\"date\":\"2025-10-30\",\"symbol\":\"AMZN\",\"close\":222.86,\"value\":225.1791666667,\"ma_window\":60},{\"date\":\"2025-10-31\",\"symbol\":\"AMZN\",\"close\":244.22,\"value\":225.5306666667,\"ma_window\":60},{\"date\":\"2025-11-03\",\"symbol\":\"AMZN\",\"close\":254,\"value\":226.0525,\"ma_window\":60},{\"date\":\"2025-11-04\",\"symbol\":\"AMZN\",\"close\":249.32,\"value\":226.5195,\"ma_window\":60},{\"date\":\"2025-11-05\",\"symbol\":\"AMZN\",\"close\":250.2,\"value\":226.9983333333,\"ma_window\":60},{\"date\":\"2025-11-06\",\"symbol\":\"AMZN\",\"close\":243.04,\"value\":227.3063333333,\"ma_window\":60},{\"date\":\"2025-11-07\",\"symbol\":\"AMZN\",\"close\":244.41,\"value\":227.5301666667,\"ma_window\":60},{\"date\":\"2025-11-10\",\"symbol\":\"AMZN\",\"close\":248.4,\"value\":227.8196666667,\"ma_window\":60},{\"date\":\"2025-11-11\",\"symbol\":\"AMZN\",\"close\":249.1,\"value\":228.1131666667,\"ma_window\":60},{\"date\":\"2025-11-12\",\"symbol\":\"AMZN\",\"close\":244.2,\"value\":228.383,\"ma_window\":60},{\"date\":\"2025-11-13\",\"symbol\":\"AMZN\",\"close\":237.58,\"value\":228.6125,\"ma_window\":60},{\"date\":\"2025-11-14\",\"symbol\":\"AMZN\",\"close\":234.69,\"value\":228.8248333333,\"ma_window\":60},{\"date\":\"2025-11-17\",\"symbol\":\"AMZN\",\"close\":232.87,\"value\":228.892,\"ma_window\":60},{\"date\":\"2025-11-18\",\"symbol\":\"AMZN\",\"close\":222.55,\"value\":228.8021666667,\"ma_window\":60},{\"date\":\"2025-11-19\",\"symbol\":\"AMZN\",\"close\":222.69,\"value\":228.7018333333,\"ma_window\":60},{\"date\":\"2025-11-20\",\"symbol\":\"AMZN\",\"close\":217.14,\"value\":228.5021666667,\"ma_window\":60},{\"date\":\"2025-11-21\",\"symbol\":\"AMZN\",\"close\":220.69,\"value\":228.3203333333,\"ma_window\":60},{\"date\":\"2025-11-24\",\"symbol\":\"AMZN\",\"close\":226.28,\"value\":228.275,\"ma_window\":60},{\"date\":\"2025-11-25\",\"symbol\":\"AMZN\",\"close\":229.67,\"value\":228.3471666667,\"ma_window\":60},{\"date\":\"2025-11-26\",\"symbol\":\"AMZN\",\"close\":229.16,\"value\":228.4,\"ma_window\":60},{\"date\":\"2025-11-28\",\"symbol\":\"AMZN\",\"close\":233.22,\"value\":228.359,\"ma_window\":60},{\"date\":\"2025-12-01\",\"symbol\":\"AMZN\",\"close\":233.88,\"value\":228.3848333333,\"ma_window\":60},{\"date\":\"2025-12-02\",\"symbol\":\"AMZN\",\"close\":234.42,\"value\":228.3611666667,\"ma_window\":60},{\"date\":\"2025-12-03\",\"symbol\":\"AMZN\",\"close\":232.38,\"value\":228.2635,\"ma_window\":60},{\"date\":\"2025-12-04\",\"symbol\":\"AMZN\",\"close\":229.11,\"value\":228.2431666667,\"ma_window\":60},{\"date\":\"2025-12-05\",\"symbol\":\"AMZN\",\"close\":229.53,\"value\":228.2361666667,\"ma_window\":60},{\"date\":\"2025-12-08\",\"symbol\":\"AMZN\",\"close\":226.89,\"value\":228.2151666667,\"ma_window\":60},{\"date\":\"2025-12-09\",\"symbol\":\"AMZN\",\"close\":227.92,\"value\":228.1566666667,\"ma_window\":60},{\"date\":\"2025-12-10\",\"symbol\":\"AMZN\",\"close\":231.78,\"value\":228.1188333333,\"ma_window\":60},{\"date\":\"2025-12-11\",\"symbol\":\"AMZN\",\"close\":230.28,\"value\":228.0965,\"ma_window\":60},{\"date\":\"2025-12-12\",\"symbol\":\"AMZN\",\"close\":226.19,\"value\":228.0125,\"ma_window\":60},{\"date\":\"2025-12-15\",\"symbol\":\"AMZN\",\"close\":222.54,\"value\":227.8635,\"ma_window\":60},{\"date\":\"2025-12-16\",\"symbol\":\"AMZN\",\"close\":222.56,\"value\":227.779,\"ma_window\":60},{\"date\":\"2025-12-17\",\"symbol\":\"AMZN\",\"close\":221.27,\"value\":227.7883333333,\"ma_window\":60},{\"date\":\"2025-12-18\",\"symbol\":\"AMZN\",\"close\":226.76,\"value\":227.8975,\"ma_window\":60},{\"date\":\"2025-12-19\",\"symbol\":\"AMZN\",\"close\":227.35,\"value\":228.0508333333,\"ma_window\":60},{\"date\":\"2025-12-22\",\"symbol\":\"AMZN\",\"close\":228.43,\"value\":228.195,\"ma_window\":60},{\"date\":\"2025-12-23\",\"symbol\":\"AMZN\",\"close\":232.14,\"value\":228.3611666667,\"ma_window\":60},{\"date\":\"2025-12-24\",\"symbol\":\"AMZN\",\"close\":232.38,\"value\":228.5746666667,\"ma_window\":60},{\"date\":\"2025-12-26\",\"symbol\":\"AMZN\",\"close\":232.52,\"value\":228.7728333333,\"ma_window\":60},{\"date\":\"2025-12-29\",\"symbol\":\"AMZN\",\"close\":232.07,\"value\":228.9338333333,\"ma_window\":60},{\"date\":\"2025-12-30\",\"symbol\":\"AMZN\",\"close\":232.53,\"value\":229.1508333333,\"ma_window\":60},{\"date\":\"2025-12-31\",\"symbol\":\"AMZN\",\"close\":230.82,\"value\":229.3161666667,\"ma_window\":60},{\"date\":\"2026-01-02\",\"symbol\":\"AMZN\",\"close\":226.5,\"value\":229.3948333333,\"ma_window\":60},{\"date\":\"2026-01-05\",\"symbol\":\"AMZN\",\"close\":233.06,\"value\":229.5255,\"ma_window\":60},{\"date\":\"2026-01-06\",\"symbol\":\"AMZN\",\"close\":240.93,\"value\":229.7453333333,\"ma_window\":60},{\"date\":\"2026-01-07\",\"symbol\":\"AMZN\",\"close\":241.56,\"value\":230.1651666667,\"ma_window\":60},{\"date\":\"2026-01-08\",\"symbol\":\"AMZN\",\"close\":246.29,\"value\":230.6021666667,\"ma_window\":60},{\"date\":\"2026-01-09\",\"symbol\":\"AMZN\",\"close\":247.38,\"value\":231.1186666667,\"ma_window\":60},{\"date\":\"2026-01-12\",\"symbol\":\"AMZN\",\"close\":246.47,\"value\":231.6336666667,\"ma_window\":60},{\"date\":\"2026-01-13\",\"symbol\":\"AMZN\",\"close\":242.6,\"value\":232.1025,\"ma_window\":60},{\"date\":\"2026-01-14\",\"symbol\":\"AMZN\",\"close\":236.65,\"value\":232.496,\"ma_window\":60},{\"date\":\"2026-01-15\",\"symbol\":\"AMZN\",\"close\":238.18,\"value\":232.8576666667,\"ma_window\":60},{\"date\":\"2026-01-16\",\"symbol\":\"AMZN\",\"close\":239.12,\"value\":233.1425,\"ma_window\":60},{\"date\":\"2026-01-20\",\"symbol\":\"AMZN\",\"close\":231,\"value\":233.36,\"ma_window\":60},{\"date\":\"2026-01-21\",\"symbol\":\"AMZN\",\"close\":231.31,\"value\":233.5303333333,\"ma_window\":60},{\"date\":\"2026-01-22\",\"symbol\":\"AMZN\",\"close\":234.34,\"value\":233.6991666667,\"ma_window\":60},{\"date\":\"2026-01-23\",\"symbol\":\"AMZN\",\"close\":239.16,\"value\":233.9023333333,\"ma_window\":60},{\"date\":\"2026-01-26\",\"symbol\":\"AMZN\",\"close\":238.42,\"value\":234.0551666667,\"ma_window\":60},{\"date\":\"2025-07-31\",\"symbol\":\"GOOGL\",\"close\":191.6,\"value\":191.6,\"ma_window\":60},{\"date\":\"2025-08-01\",\"symbol\":\"GOOGL\",\"close\":188.84,\"value\":190.22,\"ma_window\":60},{\"date\":\"2025-08-04\",\"symbol\":\"GOOGL\",\"close\":194.74,\"value\":191.7266666667,\"ma_window\":60},{\"date\":\"2025-08-05\",\"symbol\":\"GOOGL\",\"close\":194.37,\"value\":192.3875,\"ma_window\":60},{\"date\":\"2025-08-06\",\"symbol\":\"GOOGL\",\"close\":195.79,\"value\":193.068,\"ma_window\":60},{\"date\":\"2025-08-07\",\"symbol\":\"GOOGL\",\"close\":196.22,\"value\":193.5933333333,\"ma_window\":60},{\"date\":\"2025-08-08\",\"symbol\":\"GOOGL\",\"close\":201.11,\"value\":194.6671428571,\"ma_window\":60},{\"date\":\"2025-08-11\",\"symbol\":\"GOOGL\",\"close\":200.69,\"value\":195.42,\"ma_window\":60},{\"date\":\"2025-08-12\",\"symbol\":\"GOOGL\",\"close\":203.03,\"value\":196.2655555556,\"ma_window\":60},{\"date\":\"2025-08-13\",\"symbol\":\"GOOGL\",\"close\":201.65,\"value\":196.804,\"ma_window\":60},{\"date\":\"2025-08-14\",\"symbol\":\"GOOGL\",\"close\":202.63,\"value\":197.3336363636,\"ma_window\":60},{\"date\":\"2025-08-15\",\"symbol\":\"GOOGL\",\"close\":203.58,\"value\":197.8541666667,\"ma_window\":60},{\"date\":\"2025-08-18\",\"symbol\":\"GOOGL\",\"close\":203.19,\"value\":198.2646153846,\"ma_window\":60},{\"date\":\"2025-08-19\",\"symbol\":\"GOOGL\",\"close\":201.26,\"value\":198.4785714286,\"ma_window\":60},{\"date\":\"2025-08-20\",\"symbol\":\"GOOGL\",\"close\":199.01,\"value\":198.514,\"ma_window\":60},{\"date\":\"2025-08-21\",\"symbol\":\"GOOGL\",\"close\":199.44,\"value\":198.571875,\"ma_window\":60},{\"date\":\"2025-08-22\",\"symbol\":\"GOOGL\",\"close\":205.77,\"value\":198.9952941176,\"ma_window\":60},{\"date\":\"2025-08-25\",\"symbol\":\"GOOGL\",\"close\":208.17,\"value\":199.505,\"ma_window\":60},{\"date\":\"2025-08-26\",\"symbol\":\"GOOGL\",\"close\":206.82,\"value\":199.89,\"ma_window\":60},{\"date\":\"2025-08-27\",\"symbol\":\"GOOGL\",\"close\":207.16,\"value\":200.2535,\"ma_window\":60},{\"date\":\"2025-08-28\",\"symbol\":\"GOOGL\",\"close\":211.31,\"value\":200.78,\"ma_window\":60},{\"date\":\"2025-08-29\",\"symbol\":\"GOOGL\",\"close\":212.58,\"value\":201.3163636364,\"ma_window\":60},{\"date\":\"2025-09-02\",\"symbol\":\"GOOGL\",\"close\":211.02,\"value\":201.7382608696,\"ma_window\":60},{\"date\":\"2025-09-03\",\"symbol\":\"GOOGL\",\"close\":230.3,\"value\":202.9283333333,\"ma_window\":60},{\"date\":\"2025-09-04\",\"symbol\":\"GOOGL\",\"close\":231.94,\"value\":204.0888,\"ma_window\":60},{\"date\":\"2025-09-05\",\"symbol\":\"GOOGL\",\"close\":234.64,\"value\":205.2638461538,\"ma_window\":60},{\"date\":\"2025-09-08\",\"symbol\":\"GOOGL\",\"close\":233.89,\"value\":206.3240740741,\"ma_window\":60},{\"date\":\"2025-09-09\",\"symbol\":\"GOOGL\",\"close\":239.47,\"value\":207.5078571429,\"ma_window\":60},{\"date\":\"2025-09-10\",\"symbol\":\"GOOGL\",\"close\":239.01,\"value\":208.594137931,\"ma_window\":60},{\"date\":\"2025-09-11\",\"symbol\":\"GOOGL\",\"close\":240.21,\"value\":209.648,\"ma_window\":60},{\"date\":\"2025-09-12\",\"symbol\":\"GOOGL\",\"close\":240.64,\"value\":210.6477419355,\"ma_window\":60},{\"date\":\"2025-09-15\",\"symbol\":\"GOOGL\",\"close\":251.45,\"value\":211.9228125,\"ma_window\":60},{\"date\":\"2025-09-16\",\"symbol\":\"GOOGL\",\"close\":251,\"value\":213.106969697,\"ma_window\":60},{\"date\":\"2025-09-17\",\"symbol\":\"GOOGL\",\"close\":249.37,\"value\":214.1735294118,\"ma_window\":60},{\"date\":\"2025-09-18\",\"symbol\":\"GOOGL\",\"close\":251.87,\"value\":215.2505714286,\"ma_window\":60},{\"date\":\"2025-09-19\",\"symbol\":\"GOOGL\",\"close\":254.55,\"value\":216.3422222222,\"ma_window\":60},{\"date\":\"2025-09-22\",\"symbol\":\"GOOGL\",\"close\":252.36,\"value\":217.3156756757,\"ma_window\":60},{\"date\":\"2025-09-23\",\"symbol\":\"GOOGL\",\"close\":251.5,\"value\":218.2152631579,\"ma_window\":60},{\"date\":\"2025-09-24\",\"symbol\":\"GOOGL\",\"close\":246.98,\"value\":218.9528205128,\"ma_window\":60},{\"date\":\"2025-09-25\",\"symbol\":\"GOOGL\",\"close\":245.63,\"value\":219.61975,\"ma_window\":60},{\"date\":\"2025-09-26\",\"symbol\":\"GOOGL\",\"close\":246.38,\"value\":220.2724390244,\"ma_window\":60},{\"date\":\"2025-09-29\",\"symbol\":\"GOOGL\",\"close\":243.89,\"value\":220.8347619048,\"ma_window\":60},{\"date\":\"2025-09-30\",\"symbol\":\"GOOGL\",\"close\":242.94,\"value\":221.3488372093,\"ma_window\":60},{\"date\":\"2025-10-01\",\"symbol\":\"GOOGL\",\"close\":244.74,\"value\":221.8804545455,\"ma_window\":60},{\"date\":\"2025-10-02\",\"symbol\":\"GOOGL\",\"close\":245.53,\"value\":222.406,\"ma_window\":60},{\"date\":\"2025-10-03\",\"symbol\":\"GOOGL\",\"close\":245.19,\"value\":222.9013043478,\"ma_window\":60},{\"date\":\"2025-10-06\",\"symbol\":\"GOOGL\",\"close\":250.27,\"value\":223.4836170213,\"ma_window\":60},{\"date\":\"2025-10-07\",\"symbol\":\"GOOGL\",\"close\":245.6,\"value\":223.944375,\"ma_window\":60},{\"date\":\"2025-10-08\",\"symbol\":\"GOOGL\",\"close\":244.46,\"value\":224.3630612245,\"ma_window\":60},{\"date\":\"2025-10-09\",\"symbol\":\"GOOGL\",\"close\":241.37,\"value\":224.7032,\"ma_window\":60},{\"date\":\"2025-10-10\",\"symbol\":\"GOOGL\",\"close\":236.42,\"value\":224.9329411765,\"ma_window\":60},{\"date\":\"2025-10-13\",\"symbol\":\"GOOGL\",\"close\":243.99,\"value\":225.2994230769,\"ma_window\":60},{\"date\":\"2025-10-14\",\"symbol\":\"GOOGL\",\"close\":245.29,\"value\":225.6766037736,\"ma_window\":60},{\"date\":\"2025-10-15\",\"symbol\":\"GOOGL\",\"close\":250.87,\"value\":226.1431481481,\"ma_window\":60},{\"date\":\"2025-10-16\",\"symbol\":\"GOOGL\",\"close\":251.3,\"value\":226.6005454545,\"ma_window\":60},{\"date\":\"2025-10-17\",\"symbol\":\"GOOGL\",\"close\":253.13,\"value\":227.0742857143,\"ma_window\":60},{\"date\":\"2025-10-20\",\"symbol\":\"GOOGL\",\"close\":256.38,\"value\":227.5884210526,\"ma_window\":60},{\"date\":\"2025-10-21\",\"symbol\":\"GOOGL\",\"close\":250.3,\"value\":227.98,\"ma_window\":60},{\"date\":\"2025-10-22\",\"symbol\":\"GOOGL\",\"close\":251.53,\"value\":228.3791525424,\"ma_window\":60},{\"date\":\"2025-10-23\",\"symbol\":\"GOOGL\",\"close\":252.91,\"value\":228.788,\"ma_window\":60},{\"date\":\"2025-10-24\",\"symbol\":\"GOOGL\",\"close\":259.75,\"value\":229.9238333333,\"ma_window\":60},{\"date\":\"2025-10-27\",\"symbol\":\"GOOGL\",\"close\":269.09,\"value\":231.2613333333,\"ma_window\":60},{\"date\":\"2025-10-28\",\"symbol\":\"GOOGL\",\"close\":267.3,\"value\":232.4706666667,\"ma_window\":60},{\"date\":\"2025-10-29\",\"symbol\":\"GOOGL\",\"close\":274.39,\"value\":233.8043333333,\"ma_window\":60},{\"date\":\"2025-10-30\",\"symbol\":\"GOOGL\",\"close\":281.3,\"value\":235.2295,\"ma_window\":60},{\"date\":\"2025-10-31\",\"symbol\":\"GOOGL\",\"close\":281.01,\"value\":236.6426666667,\"ma_window\":60},{\"date\":\"2025-11-03\",\"symbol\":\"GOOGL\",\"close\":283.53,\"value\":238.0163333333,\"ma_window\":60},{\"date\":\"2025-11-04\",\"symbol\":\"GOOGL\",\"close\":277.36,\"value\":239.2941666667,\"ma_window\":60},{\"date\":\"2025-11-05\",\"symbol\":\"GOOGL\",\"close\":284.12,\"value\":240.6456666667,\"ma_window\":60},{\"date\":\"2025-11-06\",\"symbol\":\"GOOGL\",\"close\":284.56,\"value\":242.0275,\"ma_window\":60},{\"date\":\"2025-11-07\",\"symbol\":\"GOOGL\",\"close\":278.65,\"value\":243.2945,\"ma_window\":60},{\"date\":\"2025-11-10\",\"symbol\":\"GOOGL\",\"close\":289.91,\"value\":244.7333333333,\"ma_window\":60},{\"date\":\"2025-11-11\",\"symbol\":\"GOOGL\",\"close\":291.12,\"value\":246.1988333333,\"ma_window\":60},{\"date\":\"2025-11-12\",\"symbol\":\"GOOGL\",\"close\":286.52,\"value\":247.6198333333,\"ma_window\":60},{\"date\":\"2025-11-13\",\"symbol\":\"GOOGL\",\"close\":278.39,\"value\":248.9428333333,\"ma_window\":60},{\"date\":\"2025-11-14\",\"symbol\":\"GOOGL\",\"close\":276.23,\"value\":250.2226666667,\"ma_window\":60},{\"date\":\"2025-11-17\",\"symbol\":\"GOOGL\",\"close\":284.83,\"value\":251.5403333333,\"ma_window\":60},{\"date\":\"2025-11-18\",\"symbol\":\"GOOGL\",\"close\":284.09,\"value\":252.8056666667,\"ma_window\":60},{\"date\":\"2025-11-19\",\"symbol\":\"GOOGL\",\"close\":292.62,\"value\":254.2356666667,\"ma_window\":60},{\"date\":\"2025-11-20\",\"symbol\":\"GOOGL\",\"close\":289.26,\"value\":255.604,\"ma_window\":60},{\"date\":\"2025-11-21\",\"symbol\":\"GOOGL\",\"close\":299.46,\"value\":257.0731666667,\"ma_window\":60},{\"date\":\"2025-11-24\",\"symbol\":\"GOOGL\",\"close\":318.37,\"value\":258.8363333333,\"ma_window\":60},{\"date\":\"2025-11-25\",\"symbol\":\"GOOGL\",\"close\":323.23,\"value\":260.7065,\"ma_window\":60},{\"date\":\"2025-11-26\",\"symbol\":\"GOOGL\",\"close\":319.74,\"value\":262.1971666667,\"ma_window\":60},{\"date\":\"2025-11-28\",\"symbol\":\"GOOGL\",\"close\":319.97,\"value\":263.6643333333,\"ma_window\":60},{\"date\":\"2025-12-01\",\"symbol\":\"GOOGL\",\"close\":314.68,\"value\":264.9983333333,\"ma_window\":60},{\"date\":\"2025-12-02\",\"symbol\":\"GOOGL\",\"close\":315.6,\"value\":266.3601666667,\"ma_window\":60},{\"date\":\"2025-12-03\",\"symbol\":\"GOOGL\",\"close\":319.42,\"value\":267.6926666667,\"ma_window\":60},{\"date\":\"2025-12-04\",\"symbol\":\"GOOGL\",\"close\":317.41,\"value\":268.9993333333,\"ma_window\":60},{\"date\":\"2025-12-05\",\"symbol\":\"GOOGL\",\"close\":321.06,\"value\":270.3468333333,\"ma_window\":60},{\"date\":\"2025-12-08\",\"symbol\":\"GOOGL\",\"close\":313.72,\"value\":271.5648333333,\"ma_window\":60},{\"date\":\"2025-12-09\",\"symbol\":\"GOOGL\",\"close\":317.08,\"value\":272.6586666667,\"ma_window\":60},{\"date\":\"2025-12-10\",\"symbol\":\"GOOGL\",\"close\":320.21,\"value\":273.8121666667,\"ma_window\":60},{\"date\":\"2025-12-11\",\"symbol\":\"GOOGL\",\"close\":312.43,\"value\":274.8631666667,\"ma_window\":60},{\"date\":\"2025-12-12\",\"symbol\":\"GOOGL\",\"close\":309.29,\"value\":275.8201666667,\"ma_window\":60},{\"date\":\"2025-12-15\",\"symbol\":\"GOOGL\",\"close\":308.22,\"value\":276.7146666667,\"ma_window\":60},{\"date\":\"2025-12-16\",\"symbol\":\"GOOGL\",\"close\":306.57,\"value\":277.6181666667,\"ma_window\":60},{\"date\":\"2025-12-17\",\"symbol\":\"GOOGL\",\"close\":296.72,\"value\":278.3718333333,\"ma_window\":60},{\"date\":\"2025-12-18\",\"symbol\":\"GOOGL\",\"close\":302.46,\"value\":279.2965,\"ma_window\":60},{\"date\":\"2025-12-19\",\"symbol\":\"GOOGL\",\"close\":307.16,\"value\":280.322,\"ma_window\":60},{\"date\":\"2025-12-22\",\"symbol\":\"GOOGL\",\"close\":309.78,\"value\":281.3786666667,\"ma_window\":60},{\"date\":\"2025-12-23\",\"symbol\":\"GOOGL\",\"close\":314.35,\"value\":282.553,\"ma_window\":60},{\"date\":\"2025-12-24\",\"symbol\":\"GOOGL\",\"close\":314.09,\"value\":283.7388333333,\"ma_window\":60},{\"date\":\"2025-12-26\",\"symbol\":\"GOOGL\",\"close\":313.51,\"value\":284.885,\"ma_window\":60},{\"date\":\"2025-12-29\",\"symbol\":\"GOOGL\",\"close\":313.56,\"value\":286.0188333333,\"ma_window\":60},{\"date\":\"2025-12-30\",\"symbol\":\"GOOGL\",\"close\":313.85,\"value\":287.1631666667,\"ma_window\":60},{\"date\":\"2025-12-31\",\"symbol\":\"GOOGL\",\"close\":313,\"value\":288.2086666667,\"ma_window\":60},{\"date\":\"2026-01-02\",\"symbol\":\"GOOGL\",\"close\":315.15,\"value\":289.3678333333,\"ma_window\":60},{\"date\":\"2026-01-05\",\"symbol\":\"GOOGL\",\"close\":316.54,\"value\":290.5691666667,\"ma_window\":60},{\"date\":\"2026-01-06\",\"symbol\":\"GOOGL\",\"close\":314.34,\"value\":291.7853333333,\"ma_window\":60},{\"date\":\"2026-01-07\",\"symbol\":\"GOOGL\",\"close\":321.98,\"value\":293.2113333333,\"ma_window\":60},{\"date\":\"2026-01-08\",\"symbol\":\"GOOGL\",\"close\":325.44,\"value\":294.5688333333,\"ma_window\":60},{\"date\":\"2026-01-09\",\"symbol\":\"GOOGL\",\"close\":328.57,\"value\":295.9568333333,\"ma_window\":60},{\"date\":\"2026-01-12\",\"symbol\":\"GOOGL\",\"close\":331.86,\"value\":297.3066666667,\"ma_window\":60},{\"date\":\"2026-01-13\",\"symbol\":\"GOOGL\",\"close\":335.97,\"value\":298.7178333333,\"ma_window\":60},{\"date\":\"2026-01-14\",\"symbol\":\"GOOGL\",\"close\":335.84,\"value\":300.0963333333,\"ma_window\":60},{\"date\":\"2026-01-15\",\"symbol\":\"GOOGL\",\"close\":332.78,\"value\":301.3696666667,\"ma_window\":60},{\"date\":\"2026-01-16\",\"symbol\":\"GOOGL\",\"close\":330,\"value\":302.698,\"ma_window\":60},{\"date\":\"2026-01-20\",\"symbol\":\"GOOGL\",\"close\":322,\"value\":303.8725,\"ma_window\":60},{\"date\":\"2026-01-21\",\"symbol\":\"GOOGL\",\"close\":328.38,\"value\":305.1303333333,\"ma_window\":60},{\"date\":\"2026-01-22\",\"symbol\":\"GOOGL\",\"close\":330.54,\"value\":306.3101666667,\"ma_window\":60},{\"date\":\"2026-01-23\",\"symbol\":\"GOOGL\",\"close\":327.93,\"value\":307.2908333333,\"ma_window\":60},{\"date\":\"2026-01-26\",\"symbol\":\"GOOGL\",\"close\":333.26,\"value\":308.3901666667,\"ma_window\":60},{\"date\":\"2025-07-31\",\"symbol\":\"META\",\"close\":772.29,\"value\":772.29,\"ma_window\":60},{\"date\":\"2025-08-01\",\"symbol\":\"META\",\"close\":748.89,\"value\":760.59,\"ma_window\":60},{\"date\":\"2025-08-04\",\"symbol\":\"META\",\"close\":775.21,\"value\":765.4633333333,\"ma_window\":60},{\"date\":\"2025-08-05\",\"symbol\":\"META\",\"close\":762.32,\"value\":764.6775,\"ma_window\":60},{\"date\":\"2025-08-06\",\"symbol\":\"META\",\"close\":770.84,\"value\":765.91,\"ma_window\":60},{\"date\":\"2025-08-07\",\"symbol\":\"META\",\"close\":760.7,\"value\":765.0416666667,\"ma_window\":60},{\"date\":\"2025-08-08\",\"symbol\":\"META\",\"close\":768.15,\"value\":765.4857142857,\"ma_window\":60},{\"date\":\"2025-08-11\",\"symbol\":\"META\",\"close\":764.73,\"value\":765.39125,\"ma_window\":60},{\"date\":\"2025-08-12\",\"symbol\":\"META\",\"close\":788.82,\"value\":767.9944444444,\"ma_window\":60},{\"date\":\"2025-08-13\",\"symbol\":\"META\",\"close\":778.92,\"value\":769.087,\"ma_window\":60},{\"date\":\"2025-08-14\",\"symbol\":\"META\",\"close\":780.97,\"value\":770.1672727273,\"ma_window\":60},{\"date\":\"2025-08-15\",\"symbol\":\"META\",\"close\":784.06,\"value\":771.325,\"ma_window\":60},{\"date\":\"2025-08-18\",\"symbol\":\"META\",\"close\":766.23,\"value\":770.9330769231,\"ma_window\":60},{\"date\":\"2025-08-19\",\"symbol\":\"META\",\"close\":750.36,\"value\":769.4635714286,\"ma_window\":60},{\"date\":\"2025-08-20\",\"symbol\":\"META\",\"close\":746.61,\"value\":767.94,\"ma_window\":60},{\"date\":\"2025-08-21\",\"symbol\":\"META\",\"close\":738,\"value\":766.06875,\"ma_window\":60},{\"date\":\"2025-08-22\",\"symbol\":\"META\",\"close\":753.67,\"value\":765.3394117647,\"ma_window\":60},{\"date\":\"2025-08-25\",\"symbol\":\"META\",\"close\":752.18,\"value\":764.6083333333,\"ma_window\":60},{\"date\":\"2025-08-26\",\"symbol\":\"META\",\"close\":752.98,\"value\":763.9963157895,\"ma_window\":60},{\"date\":\"2025-08-27\",\"symbol\":\"META\",\"close\":746.27,\"value\":763.11,\"ma_window\":60},{\"date\":\"2025-08-28\",\"symbol\":\"META\",\"close\":749.99,\"value\":762.4852380952,\"ma_window\":60},{\"date\":\"2025-08-29\",\"symbol\":\"META\",\"close\":737.6,\"value\":761.3540909091,\"ma_window\":60},{\"date\":\"2025-09-02\",\"symbol\":\"META\",\"close\":734.02,\"value\":760.1656521739,\"ma_window\":60},{\"date\":\"2025-09-03\",\"symbol\":\"META\",\"close\":735.95,\"value\":759.1566666667,\"ma_window\":60},{\"date\":\"2025-09-04\",\"symbol\":\"META\",\"close\":747.54,\"value\":758.692,\"ma_window\":60},{\"date\":\"2025-09-05\",\"symbol\":\"META\",\"close\":751.33,\"value\":758.4088461538,\"ma_window\":60},{\"date\":\"2025-09-08\",\"symbol\":\"META\",\"close\":751.18,\"value\":758.1411111111,\"ma_window\":60},{\"date\":\"2025-09-09\",\"symbol\":\"META\",\"close\":764.56,\"value\":758.3703571429,\"ma_window\":60},{\"date\":\"2025-09-10\",\"symbol\":\"META\",\"close\":750.86,\"value\":758.1113793103,\"ma_window\":60},{\"date\":\"2025-09-11\",\"symbol\":\"META\",\"close\":749.78,\"value\":757.8336666667,\"ma_window\":60},{\"date\":\"2025-09-12\",\"symbol\":\"META\",\"close\":754.47,\"value\":757.7251612903,\"ma_window\":60},{\"date\":\"2025-09-15\",\"symbol\":\"META\",\"close\":763.56,\"value\":757.9075,\"ma_window\":60},{\"date\":\"2025-09-16\",\"symbol\":\"META\",\"close\":777.84,\"value\":758.5115151515,\"ma_window\":60},{\"date\":\"2025-09-17\",\"symbol\":\"META\",\"close\":774.57,\"value\":758.9838235294,\"ma_window\":60},{\"date\":\"2025-09-18\",\"symbol\":\"META\",\"close\":779.09,\"value\":759.5582857143,\"ma_window\":60},{\"date\":\"2025-09-19\",\"symbol\":\"META\",\"close\":777.22,\"value\":760.0488888889,\"ma_window\":60},{\"date\":\"2025-09-22\",\"symbol\":\"META\",\"close\":764.54,\"value\":760.1702702703,\"ma_window\":60},{\"date\":\"2025-09-23\",\"symbol\":\"META\",\"close\":754.78,\"value\":760.0284210526,\"ma_window\":60},{\"date\":\"2025-09-24\",\"symbol\":\"META\",\"close\":760.04,\"value\":760.0287179487,\"ma_window\":60},{\"date\":\"2025-09-25\",\"symbol\":\"META\",\"close\":748.3,\"value\":759.7355,\"ma_window\":60},{\"date\":\"2025-09-26\",\"symbol\":\"META\",\"close\":743.14,\"value\":759.3307317073,\"ma_window\":60},{\"date\":\"2025-09-29\",\"symbol\":\"META\",\"close\":742.79,\"value\":758.9369047619,\"ma_window\":60},{\"date\":\"2025-09-30\",\"symbol\":\"META\",\"close\":733.78,\"value\":758.3518604651,\"ma_window\":60},{\"date\":\"2025-10-01\",\"symbol\":\"META\",\"close\":716.76,\"value\":757.4065909091,\"ma_window\":60},{\"date\":\"2025-10-02\",\"symbol\":\"META\",\"close\":726.46,\"value\":756.7188888889,\"ma_window\":60},{\"date\":\"2025-10-03\",\"symbol\":\"META\",\"close\":709.98,\"value\":755.702826087,\"ma_window\":60},{\"date\":\"2025-10-06\",\"symbol\":\"META\",\"close\":715.08,\"value\":754.8385106383,\"ma_window\":60},{\"date\":\"2025-10-07\",\"symbol\":\"META\",\"close\":712.5,\"value\":753.9564583333,\"ma_window\":60},{\"date\":\"2025-10-08\",\"symbol\":\"META\",\"close\":717.26,\"value\":753.2075510204,\"ma_window\":60},{\"date\":\"2025-10-09\",\"symbol\":\"META\",\"close\":732.91,\"value\":752.8016,\"ma_window\":60},{\"date\":\"2025-10-10\",\"symbol\":\"META\",\"close\":704.73,\"value\":751.8590196078,\"ma_window\":60},{\"date\":\"2025-10-13\",\"symbol\":\"META\",\"close\":715.12,\"value\":751.1525,\"ma_window\":60},{\"date\":\"2025-10-14\",\"symbol\":\"META\",\"close\":708.07,\"value\":750.3396226415,\"ma_window\":60},{\"date\":\"2025-10-15\",\"symbol\":\"META\",\"close\":716.97,\"value\":749.7216666667,\"ma_window\":60},{\"date\":\"2025-10-16\",\"symbol\":\"META\",\"close\":711.49,\"value\":749.0265454545,\"ma_window\":60},{\"date\":\"2025-10-17\",\"symbol\":\"META\",\"close\":716.34,\"value\":748.4428571429,\"ma_window\":60},{\"date\":\"2025-10-20\",\"symbol\":\"META\",\"close\":731.57,\"value\":748.1468421053,\"ma_window\":60},{\"date\":\"2025-10-21\",\"symbol\":\"META\",\"close\":732.67,\"value\":747.88,\"ma_window\":60},{\"date\":\"2025-10-22\",\"symbol\":\"META\",\"close\":732.81,\"value\":747.6245762712,\"ma_window\":60},{\"date\":\"2025-10-23\",\"symbol\":\"META\",\"close\":733.4,\"value\":747.3875,\"ma_window\":60},{\"date\":\"2025-10-24\",\"symbol\":\"META\",\"close\":737.76,\"value\":746.812,\"ma_window\":60},{\"date\":\"2025-10-27\",\"symbol\":\"META\",\"close\":750.21,\"value\":746.834,\"ma_window\":60},{\"date\":\"2025-10-28\",\"symbol\":\"META\",\"close\":750.83,\"value\":746.4276666667,\"ma_window\":60},{\"date\":\"2025-10-29\",\"symbol\":\"META\",\"close\":751.06,\"value\":746.24,\"ma_window\":60},{\"date\":\"2025-10-30\",\"symbol\":\"META\",\"close\":665.93,\"value\":744.4915,\"ma_window\":60},{\"date\":\"2025-10-31\",\"symbol\":\"META\",\"close\":647.82,\"value\":742.6101666667,\"ma_window\":60},{\"date\":\"2025-11-03\",\"symbol\":\"META\",\"close\":637.19,\"value\":740.4275,\"ma_window\":60},{\"date\":\"2025-11-04\",\"symbol\":\"META\",\"close\":626.81,\"value\":738.1288333333,\"ma_window\":60},{\"date\":\"2025-11-05\",\"symbol\":\"META\",\"close\":635.43,\"value\":735.5723333333,\"ma_window\":60},{\"date\":\"2025-11-06\",\"symbol\":\"META\",\"close\":618.44,\"value\":732.8976666667,\"ma_window\":60},{\"date\":\"2025-11-07\",\"symbol\":\"META\",\"close\":621.2,\"value\":730.2348333333,\"ma_window\":60},{\"date\":\"2025-11-10\",\"symbol\":\"META\",\"close\":631.25,\"value\":727.688,\"ma_window\":60},{\"date\":\"2025-11-11\",\"symbol\":\"META\",\"close\":626.57,\"value\":725.3603333333,\"ma_window\":60},{\"date\":\"2025-11-12\",\"symbol\":\"META\",\"close\":608.51,\"value\":722.9961666667,\"ma_window\":60},{\"date\":\"2025-11-13\",\"symbol\":\"META\",\"close\":609.39,\"value\":720.7091666667,\"ma_window\":60},{\"date\":\"2025-11-14\",\"symbol\":\"META\",\"close\":608.96,\"value\":718.5585,\"ma_window\":60},{\"date\":\"2025-11-17\",\"symbol\":\"META\",\"close\":601.52,\"value\":716.0226666667,\"ma_window\":60},{\"date\":\"2025-11-18\",\"symbol\":\"META\",\"close\":597.2,\"value\":713.4396666667,\"ma_window\":60},{\"date\":\"2025-11-19\",\"symbol\":\"META\",\"close\":589.84,\"value\":710.7206666667,\"ma_window\":60},{\"date\":\"2025-11-20\",\"symbol\":\"META\",\"close\":588.67,\"value\":708.094,\"ma_window\":60},{\"date\":\"2025-11-21\",\"symbol\":\"META\",\"close\":593.77,\"value\":705.4903333333,\"ma_window\":60},{\"date\":\"2025-11-24\",\"symbol\":\"META\",\"close\":612.55,\"value\":703.4061666667,\"ma_window\":60},{\"date\":\"2025-11-25\",\"symbol\":\"META\",\"close\":635.7,\"value\":701.7675,\"ma_window\":60},{\"date\":\"2025-11-26\",\"symbol\":\"META\",\"close\":633.09,\"value\":700.0531666667,\"ma_window\":60},{\"date\":\"2025-11-28\",\"symbol\":\"META\",\"close\":647.42,\"value\":698.3845,\"ma_window\":60},{\"date\":\"2025-12-01\",\"symbol\":\"META\",\"close\":640.35,\"value\":696.5348333333,\"ma_window\":60},{\"date\":\"2025-12-02\",\"symbol\":\"META\",\"close\":646.57,\"value\":694.7913333333,\"ma_window\":60},{\"date\":\"2025-12-03\",\"symbol\":\"META\",\"close\":639.08,\"value\":692.7,\"ma_window\":60},{\"date\":\"2025-12-04\",\"symbol\":\"META\",\"close\":660.99,\"value\":691.2021666667,\"ma_window\":60},{\"date\":\"2025-12-05\",\"symbol\":\"META\",\"close\":672.87,\"value\":689.9203333333,\"ma_window\":60},{\"date\":\"2025-12-08\",\"symbol\":\"META\",\"close\":666.26,\"value\":688.4501666667,\"ma_window\":60},{\"date\":\"2025-12-09\",\"symbol\":\"META\",\"close\":656.42,\"value\":686.6645,\"ma_window\":60},{\"date\":\"2025-12-10\",\"symbol\":\"META\",\"close\":649.6,\"value\":684.5271666667,\"ma_window\":60},{\"date\":\"2025-12-11\",\"symbol\":\"META\",\"close\":652.18,\"value\":682.4873333333,\"ma_window\":60},{\"date\":\"2025-12-12\",\"symbol\":\"META\",\"close\":643.71,\"value\":680.231,\"ma_window\":60},{\"date\":\"2025-12-15\",\"symbol\":\"META\",\"close\":647.51,\"value\":678.0691666667,\"ma_window\":60},{\"date\":\"2025-12-16\",\"symbol\":\"META\",\"close\":657.15,\"value\":676.2793333333,\"ma_window\":60},{\"date\":\"2025-12-17\",\"symbol\":\"META\",\"close\":649.5,\"value\":674.5246666667,\"ma_window\":60},{\"date\":\"2025-12-18\",\"symbol\":\"META\",\"close\":664.45,\"value\":672.9315,\"ma_window\":60},{\"date\":\"2025-12-19\",\"symbol\":\"META\",\"close\":658.77,\"value\":671.4393333333,\"ma_window\":60},{\"date\":\"2025-12-22\",\"symbol\":\"META\",\"close\":661.5,\"value\":670.0786666667,\"ma_window\":60},{\"date\":\"2025-12-23\",\"symbol\":\"META\",\"close\":664.94,\"value\":668.7811666667,\"ma_window\":60},{\"date\":\"2025-12-24\",\"symbol\":\"META\",\"close\":667.55,\"value\":667.6773333333,\"ma_window\":60},{\"date\":\"2025-12-26\",\"symbol\":\"META\",\"close\":663.29,\"value\":666.7861666667,\"ma_window\":60},{\"date\":\"2025-12-29\",\"symbol\":\"META\",\"close\":658.69,\"value\":665.6566666667,\"ma_window\":60},{\"date\":\"2025-12-30\",\"symbol\":\"META\",\"close\":665.95,\"value\":664.9228333333,\"ma_window\":60},{\"date\":\"2025-12-31\",\"symbol\":\"META\",\"close\":660.09,\"value\":664.0063333333,\"ma_window\":60},{\"date\":\"2026-01-02\",\"symbol\":\"META\",\"close\":650.41,\"value\":662.9715,\"ma_window\":60},{\"date\":\"2026-01-05\",\"symbol\":\"META\",\"close\":658.79,\"value\":661.997,\"ma_window\":60},{\"date\":\"2026-01-06\",\"symbol\":\"META\",\"close\":660.62,\"value\":660.7921666667,\"ma_window\":60},{\"date\":\"2026-01-07\",\"symbol\":\"META\",\"close\":648.69,\"value\":659.8581666667,\"ma_window\":60},{\"date\":\"2026-01-08\",\"symbol\":\"META\",\"close\":646.06,\"value\":658.7071666667,\"ma_window\":60},{\"date\":\"2026-01-09\",\"symbol\":\"META\",\"close\":653.06,\"value\":657.7903333333,\"ma_window\":60},{\"date\":\"2026-01-12\",\"symbol\":\"META\",\"close\":641.97,\"value\":656.5403333333,\"ma_window\":60},{\"date\":\"2026-01-13\",\"symbol\":\"META\",\"close\":631.09,\"value\":655.2003333333,\"ma_window\":60},{\"date\":\"2026-01-14\",\"symbol\":\"META\",\"close\":615.52,\"value\":653.52,\"ma_window\":60},{\"date\":\"2026-01-15\",\"symbol\":\"META\",\"close\":620.8,\"value\":651.6738333333,\"ma_window\":60},{\"date\":\"2026-01-16\",\"symbol\":\"META\",\"close\":620.25,\"value\":649.8001666667,\"ma_window\":60},{\"date\":\"2026-01-20\",\"symbol\":\"META\",\"close\":604.12,\"value\":647.6553333333,\"ma_window\":60},{\"date\":\"2026-01-21\",\"symbol\":\"META\",\"close\":612.96,\"value\":645.648,\"ma_window\":60},{\"date\":\"2026-01-22\",\"symbol\":\"META\",\"close\":647.63,\"value\":644.1458333333,\"ma_window\":60},{\"date\":\"2026-01-23\",\"symbol\":\"META\",\"close\":658.76,\"value\":642.6216666667,\"ma_window\":60},{\"date\":\"2026-01-26\",\"symbol\":\"META\",\"close\":672.36,\"value\":641.3138333333,\"ma_window\":60},{\"date\":\"2025-07-31\",\"symbol\":\"MSFT\",\"close\":531.63,\"value\":531.63,\"ma_window\":60},{\"date\":\"2025-08-01\",\"symbol\":\"MSFT\",\"close\":522.27,\"value\":526.95,\"ma_window\":60},{\"date\":\"2025-08-04\",\"symbol\":\"MSFT\",\"close\":533.76,\"value\":529.22,\"ma_window\":60},{\"date\":\"2025-08-05\",\"symbol\":\"MSFT\",\"close\":525.9,\"value\":528.39,\"ma_window\":60},{\"date\":\"2025-08-06\",\"symbol\":\"MSFT\",\"close\":523.1,\"value\":527.332,\"ma_window\":60},{\"date\":\"2025-08-07\",\"symbol\":\"MSFT\",\"close\":519.01,\"value\":525.945,\"ma_window\":60},{\"date\":\"2025-08-08\",\"symbol\":\"MSFT\",\"close\":520.21,\"value\":525.1257142857,\"ma_window\":60},{\"date\":\"2025-08-11\",\"symbol\":\"MSFT\",\"close\":519.94,\"value\":524.4775,\"ma_window\":60},{\"date\":\"2025-08-12\",\"symbol\":\"MSFT\",\"close\":527.38,\"value\":524.8,\"ma_window\":60},{\"date\":\"2025-08-13\",\"symbol\":\"MSFT\",\"close\":518.75,\"value\":524.195,\"ma_window\":60},{\"date\":\"2025-08-14\",\"symbol\":\"MSFT\",\"close\":520.65,\"value\":523.8727272727,\"ma_window\":60},{\"date\":\"2025-08-15\",\"symbol\":\"MSFT\",\"close\":518.35,\"value\":523.4125,\"ma_window\":60},{\"date\":\"2025-08-18\",\"symbol\":\"MSFT\",\"close\":515.29,\"value\":522.7876923077,\"ma_window\":60},{\"date\":\"2025-08-19\",\"symbol\":\"MSFT\",\"close\":507.98,\"value\":521.73,\"ma_window\":60},{\"date\":\"2025-08-20\",\"symbol\":\"MSFT\",\"close\":503.95,\"value\":520.5446666667,\"ma_window\":60},{\"date\":\"2025-08-21\",\"symbol\":\"MSFT\",\"close\":503.3,\"value\":519.466875,\"ma_window\":60},{\"date\":\"2025-08-22\",\"symbol\":\"MSFT\",\"close\":506.28,\"value\":518.6911764706,\"ma_window\":60},{\"date\":\"2025-08-25\",\"symbol\":\"MSFT\",\"close\":503.32,\"value\":517.8372222222,\"ma_window\":60},{\"date\":\"2025-08-26\",\"symbol\":\"MSFT\",\"close\":501.1,\"value\":516.9563157895,\"ma_window\":60},{\"date\":\"2025-08-27\",\"symbol\":\"MSFT\",\"close\":505.79,\"value\":516.398,\"ma_window\":60},{\"date\":\"2025-08-28\",\"symbol\":\"MSFT\",\"close\":508.69,\"value\":516.030952381,\"ma_window\":60},{\"date\":\"2025-08-29\",\"symbol\":\"MSFT\",\"close\":505.74,\"value\":515.5631818182,\"ma_window\":60},{\"date\":\"2025-09-02\",\"symbol\":\"MSFT\",\"close\":504.18,\"value\":515.0682608696,\"ma_window\":60},{\"date\":\"2025-09-03\",\"symbol\":\"MSFT\",\"close\":504.41,\"value\":514.6241666667,\"ma_window\":60},{\"date\":\"2025-09-04\",\"symbol\":\"MSFT\",\"close\":507.02,\"value\":514.32,\"ma_window\":60},{\"date\":\"2025-09-05\",\"symbol\":\"MSFT\",\"close\":494.08,\"value\":513.5415384615,\"ma_window\":60},{\"date\":\"2025-09-08\",\"symbol\":\"MSFT\",\"close\":497.27,\"value\":512.9388888889,\"ma_window\":60},{\"date\":\"2025-09-09\",\"symbol\":\"MSFT\",\"close\":497.48,\"value\":512.3867857143,\"ma_window\":60},{\"date\":\"2025-09-10\",\"symbol\":\"MSFT\",\"close\":499.44,\"value\":511.9403448276,\"ma_window\":60},{\"date\":\"2025-09-11\",\"symbol\":\"MSFT\",\"close\":500.07,\"value\":511.5446666667,\"ma_window\":60},{\"date\":\"2025-09-12\",\"symbol\":\"MSFT\",\"close\":508.95,\"value\":511.4609677419,\"ma_window\":60},{\"date\":\"2025-09-15\",\"symbol\":\"MSFT\",\"close\":514.4,\"value\":511.5528125,\"ma_window\":60},{\"date\":\"2025-09-16\",\"symbol\":\"MSFT\",\"close\":508.09,\"value\":511.4478787879,\"ma_window\":60},{\"date\":\"2025-09-17\",\"symbol\":\"MSFT\",\"close\":509.07,\"value\":511.3779411765,\"ma_window\":60},{\"date\":\"2025-09-18\",\"symbol\":\"MSFT\",\"close\":507.5,\"value\":511.2671428571,\"ma_window\":60},{\"date\":\"2025-09-19\",\"symbol\":\"MSFT\",\"close\":516.96,\"value\":511.4252777778,\"ma_window\":60},{\"date\":\"2025-09-22\",\"symbol\":\"MSFT\",\"close\":513.49,\"value\":511.4810810811,\"ma_window\":60},{\"date\":\"2025-09-23\",\"symbol\":\"MSFT\",\"close\":508.28,\"value\":511.3968421053,\"ma_window\":60},{\"date\":\"2025-09-24\",\"symbol\":\"MSFT\",\"close\":509.2,\"value\":511.3405128205,\"ma_window\":60},{\"date\":\"2025-09-25\",\"symbol\":\"MSFT\",\"close\":506.08,\"value\":511.209,\"ma_window\":60},{\"date\":\"2025-09-26\",\"symbol\":\"MSFT\",\"close\":510.5,\"value\":511.1917073171,\"ma_window\":60},{\"date\":\"2025-09-29\",\"symbol\":\"MSFT\",\"close\":513.64,\"value\":511.25,\"ma_window\":60},{\"date\":\"2025-09-30\",\"symbol\":\"MSFT\",\"close\":516.98,\"value\":511.383255814,\"ma_window\":60},{\"date\":\"2025-10-01\",\"symbol\":\"MSFT\",\"close\":518.74,\"value\":511.5504545455,\"ma_window\":60},{\"date\":\"2025-10-02\",\"symbol\":\"MSFT\",\"close\":514.78,\"value\":511.6222222222,\"ma_window\":60},{\"date\":\"2025-10-03\",\"symbol\":\"MSFT\",\"close\":516.38,\"value\":511.7256521739,\"ma_window\":60},{\"date\":\"2025-10-06\",\"symbol\":\"MSFT\",\"close\":527.58,\"value\":512.0629787234,\"ma_window\":60},{\"date\":\"2025-10-07\",\"symbol\":\"MSFT\",\"close\":523,\"value\":512.2908333333,\"ma_window\":60},{\"date\":\"2025-10-08\",\"symbol\":\"MSFT\",\"close\":523.87,\"value\":512.5271428571,\"ma_window\":60},{\"date\":\"2025-10-09\",\"symbol\":\"MSFT\",\"close\":521.42,\"value\":512.705,\"ma_window\":60},{\"date\":\"2025-10-10\",\"symbol\":\"MSFT\",\"close\":510.01,\"value\":512.6521568627,\"ma_window\":60},{\"date\":\"2025-10-13\",\"symbol\":\"MSFT\",\"close\":513.09,\"value\":512.6605769231,\"ma_window\":60},{\"date\":\"2025-10-14\",\"symbol\":\"MSFT\",\"close\":512.61,\"value\":512.6596226415,\"ma_window\":60},{\"date\":\"2025-10-15\",\"symbol\":\"MSFT\",\"close\":512.47,\"value\":512.6561111111,\"ma_window\":60},{\"date\":\"2025-10-16\",\"symbol\":\"MSFT\",\"close\":510.65,\"value\":512.6196363636,\"ma_window\":60},{\"date\":\"2025-10-17\",\"symbol\":\"MSFT\",\"close\":512.62,\"value\":512.6196428571,\"ma_window\":60},{\"date\":\"2025-10-20\",\"symbol\":\"MSFT\",\"close\":515.82,\"value\":512.6757894737,\"ma_window\":60},{\"date\":\"2025-10-21\",\"symbol\":\"MSFT\",\"close\":516.69,\"value\":512.745,\"ma_window\":60},{\"date\":\"2025-10-22\",\"symbol\":\"MSFT\",\"close\":519.57,\"value\":512.8606779661,\"ma_window\":60},{\"date\":\"2025-10-23\",\"symbol\":\"MSFT\",\"close\":519.59,\"value\":512.9728333333,\"ma_window\":60},{\"date\":\"2025-10-24\",\"symbol\":\"MSFT\",\"close\":522.63,\"value\":512.8228333333,\"ma_window\":60},{\"date\":\"2025-10-27\",\"symbol\":\"MSFT\",\"close\":530.53,\"value\":512.9605,\"ma_window\":60},{\"date\":\"2025-10-28\",\"symbol\":\"MSFT\",\"close\":541.06,\"value\":513.0821666667,\"ma_window\":60},{\"date\":\"2025-10-29\",\"symbol\":\"MSFT\",\"close\":540.54,\"value\":513.3261666667,\"ma_window\":60},{\"date\":\"2025-10-30\",\"symbol\":\"MSFT\",\"close\":524.78,\"value\":513.3541666667,\"ma_window\":60},{\"date\":\"2025-10-31\",\"symbol\":\"MSFT\",\"close\":516.84,\"value\":513.318,\"ma_window\":60},{\"date\":\"2025-11-03\",\"symbol\":\"MSFT\",\"close\":516.06,\"value\":513.2488333333,\"ma_window\":60},{\"date\":\"2025-11-04\",\"symbol\":\"MSFT\",\"close\":513.37,\"value\":513.1393333333,\"ma_window\":60},{\"date\":\"2025-11-05\",\"symbol\":\"MSFT\",\"close\":506.21,\"value\":512.7865,\"ma_window\":60},{\"date\":\"2025-11-06\",\"symbol\":\"MSFT\",\"close\":496.17,\"value\":512.4101666667,\"ma_window\":60},{\"date\":\"2025-11-07\",\"symbol\":\"MSFT\",\"close\":495.89,\"value\":511.9975,\"ma_window\":60},{\"date\":\"2025-11-10\",\"symbol\":\"MSFT\",\"close\":505.05,\"value\":511.7758333333,\"ma_window\":60},{\"date\":\"2025-11-11\",\"symbol\":\"MSFT\",\"close\":507.73,\"value\":511.6498333333,\"ma_window\":60},{\"date\":\"2025-11-12\",\"symbol\":\"MSFT\",\"close\":510.19,\"value\":511.6866666667,\"ma_window\":60},{\"date\":\"2025-11-13\",\"symbol\":\"MSFT\",\"close\":502.35,\"value\":511.66,\"ma_window\":60},{\"date\":\"2025-11-14\",\"symbol\":\"MSFT\",\"close\":509.23,\"value\":511.7588333333,\"ma_window\":60},{\"date\":\"2025-11-17\",\"symbol\":\"MSFT\",\"close\":506.54,\"value\":511.7631666667,\"ma_window\":60},{\"date\":\"2025-11-18\",\"symbol\":\"MSFT\",\"close\":492.87,\"value\":511.589,\"ma_window\":60},{\"date\":\"2025-11-19\",\"symbol\":\"MSFT\",\"close\":486.21,\"value\":511.3408333333,\"ma_window\":60},{\"date\":\"2025-11-20\",\"symbol\":\"MSFT\",\"close\":478.43,\"value\":510.8848333333,\"ma_window\":60},{\"date\":\"2025-11-21\",\"symbol\":\"MSFT\",\"close\":472.12,\"value\":510.2753333333,\"ma_window\":60},{\"date\":\"2025-11-24\",\"symbol\":\"MSFT\",\"close\":474,\"value\":509.7463333333,\"ma_window\":60},{\"date\":\"2025-11-25\",\"symbol\":\"MSFT\",\"close\":476.99,\"value\":509.2931666667,\"ma_window\":60},{\"date\":\"2025-11-26\",\"symbol\":\"MSFT\",\"close\":485.5,\"value\":508.978,\"ma_window\":60},{\"date\":\"2025-11-28\",\"symbol\":\"MSFT\",\"close\":492.01,\"value\":508.7278333333,\"ma_window\":60},{\"date\":\"2025-12-01\",\"symbol\":\"MSFT\",\"close\":486.74,\"value\":508.6055,\"ma_window\":60},{\"date\":\"2025-12-02\",\"symbol\":\"MSFT\",\"close\":490,\"value\":508.4843333333,\"ma_window\":60},{\"date\":\"2025-12-03\",\"symbol\":\"MSFT\",\"close\":477.73,\"value\":508.1551666667,\"ma_window\":60},{\"date\":\"2025-12-04\",\"symbol\":\"MSFT\",\"close\":480.84,\"value\":507.8451666667,\"ma_window\":60},{\"date\":\"2025-12-05\",\"symbol\":\"MSFT\",\"close\":483.16,\"value\":507.5633333333,\"ma_window\":60},{\"date\":\"2025-12-08\",\"symbol\":\"MSFT\",\"close\":491.02,\"value\":507.2645,\"ma_window\":60},{\"date\":\"2025-12-09\",\"symbol\":\"MSFT\",\"close\":492.02,\"value\":506.8915,\"ma_window\":60},{\"date\":\"2025-12-10\",\"symbol\":\"MSFT\",\"close\":478.56,\"value\":506.3993333333,\"ma_window\":60},{\"date\":\"2025-12-11\",\"symbol\":\"MSFT\",\"close\":483.47,\"value\":505.9726666667,\"ma_window\":60},{\"date\":\"2025-12-12\",\"symbol\":\"MSFT\",\"close\":478.53,\"value\":505.4898333333,\"ma_window\":60},{\"date\":\"2025-12-15\",\"symbol\":\"MSFT\",\"close\":474.82,\"value\":504.7875,\"ma_window\":60},{\"date\":\"2025-12-16\",\"symbol\":\"MSFT\",\"close\":476.39,\"value\":504.1691666667,\"ma_window\":60},{\"date\":\"2025-12-17\",\"symbol\":\"MSFT\",\"close\":476.12,\"value\":503.6331666667,\"ma_window\":60},{\"date\":\"2025-12-18\",\"symbol\":\"MSFT\",\"close\":483.98,\"value\":503.2128333333,\"ma_window\":60},{\"date\":\"2025-12-19\",\"symbol\":\"MSFT\",\"close\":485.92,\"value\":502.8768333333,\"ma_window\":60},{\"date\":\"2025-12-22\",\"symbol\":\"MSFT\",\"close\":484.92,\"value\":502.4505,\"ma_window\":60},{\"date\":\"2025-12-23\",\"symbol\":\"MSFT\",\"close\":486.85,\"value\":502.004,\"ma_window\":60},{\"date\":\"2025-12-24\",\"symbol\":\"MSFT\",\"close\":488.02,\"value\":501.5213333333,\"ma_window\":60},{\"date\":\"2025-12-26\",\"symbol\":\"MSFT\",\"close\":487.71,\"value\":501.0041666667,\"ma_window\":60},{\"date\":\"2025-12-29\",\"symbol\":\"MSFT\",\"close\":487.1,\"value\":500.5428333333,\"ma_window\":60},{\"date\":\"2025-12-30\",\"symbol\":\"MSFT\",\"close\":487.48,\"value\":500.0611666667,\"ma_window\":60},{\"date\":\"2025-12-31\",\"symbol\":\"MSFT\",\"close\":483.62,\"value\":499.3285,\"ma_window\":60},{\"date\":\"2026-01-02\",\"symbol\":\"MSFT\",\"close\":472.94,\"value\":498.4941666667,\"ma_window\":60},{\"date\":\"2026-01-05\",\"symbol\":\"MSFT\",\"close\":472.85,\"value\":497.6438333333,\"ma_window\":60},{\"date\":\"2026-01-06\",\"symbol\":\"MSFT\",\"close\":478.51,\"value\":496.9286666667,\"ma_window\":60},{\"date\":\"2026-01-07\",\"symbol\":\"MSFT\",\"close\":483.47,\"value\":496.4863333333,\"ma_window\":60},{\"date\":\"2026-01-08\",\"symbol\":\"MSFT\",\"close\":478.11,\"value\":495.9033333333,\"ma_window\":60},{\"date\":\"2026-01-09\",\"symbol\":\"MSFT\",\"close\":479.28,\"value\":495.3478333333,\"ma_window\":60},{\"date\":\"2026-01-12\",\"symbol\":\"MSFT\",\"close\":477.18,\"value\":494.7596666667,\"ma_window\":60},{\"date\":\"2026-01-13\",\"symbol\":\"MSFT\",\"close\":470.67,\"value\":494.0933333333,\"ma_window\":60},{\"date\":\"2026-01-14\",\"symbol\":\"MSFT\",\"close\":459.38,\"value\":493.206,\"ma_window\":60},{\"date\":\"2026-01-15\",\"symbol\":\"MSFT\",\"close\":456.66,\"value\":492.22,\"ma_window\":60},{\"date\":\"2026-01-16\",\"symbol\":\"MSFT\",\"close\":459.86,\"value\":491.2728333333,\"ma_window\":60},{\"date\":\"2026-01-20\",\"symbol\":\"MSFT\",\"close\":454.52,\"value\":490.1886666667,\"ma_window\":60},{\"date\":\"2026-01-21\",\"symbol\":\"MSFT\",\"close\":444.11,\"value\":488.9306666667,\"ma_window\":60},{\"date\":\"2026-01-22\",\"symbol\":\"MSFT\",\"close\":451.14,\"value\":487.7391666667,\"ma_window\":60},{\"date\":\"2026-01-23\",\"symbol\":\"MSFT\",\"close\":465.95,\"value\":486.6628333333,\"ma_window\":60},{\"date\":\"2026-01-26\",\"symbol\":\"MSFT\",\"close\":470.28,\"value\":485.4831666667,\"ma_window\":60},{\"date\":\"2025-07-31\",\"symbol\":\"NVDA\",\"close\":177.85,\"value\":177.85,\"ma_window\":60},{\"date\":\"2025-08-01\",\"symbol\":\"NVDA\",\"close\":173.7,\"value\":175.775,\"ma_window\":60},{\"date\":\"2025-08-04\",\"symbol\":\"NVDA\",\"close\":179.98,\"value\":177.1766666667,\"ma_window\":60},{\"date\":\"2025-08-05\",\"symbol\":\"NVDA\",\"close\":178.24,\"value\":177.4425,\"ma_window\":60},{\"date\":\"2025-08-06\",\"symbol\":\"NVDA\",\"close\":179.4,\"value\":177.834,\"ma_window\":60},{\"date\":\"2025-08-07\",\"symbol\":\"NVDA\",\"close\":180.75,\"value\":178.32,\"ma_window\":60},{\"date\":\"2025-08-08\",\"symbol\":\"NVDA\",\"close\":182.68,\"value\":178.9428571429,\"ma_window\":60},{\"date\":\"2025-08-11\",\"symbol\":\"NVDA\",\"close\":182.04,\"value\":179.33,\"ma_window\":60},{\"date\":\"2025-08-12\",\"symbol\":\"NVDA\",\"close\":183.14,\"value\":179.7533333333,\"ma_window\":60},{\"date\":\"2025-08-13\",\"symbol\":\"NVDA\",\"close\":181.57,\"value\":179.935,\"ma_window\":60},{\"date\":\"2025-08-14\",\"symbol\":\"NVDA\",\"close\":182,\"value\":180.1227272727,\"ma_window\":60},{\"date\":\"2025-08-15\",\"symbol\":\"NVDA\",\"close\":180.43,\"value\":180.1483333333,\"ma_window\":60},{\"date\":\"2025-08-18\",\"symbol\":\"NVDA\",\"close\":181.99,\"value\":180.29,\"ma_window\":60},{\"date\":\"2025-08-19\",\"symbol\":\"NVDA\",\"close\":175.62,\"value\":179.9564285714,\"ma_window\":60},{\"date\":\"2025-08-20\",\"symbol\":\"NVDA\",\"close\":175.38,\"value\":179.6513333333,\"ma_window\":60},{\"date\":\"2025-08-21\",\"symbol\":\"NVDA\",\"close\":174.96,\"value\":179.358125,\"ma_window\":60},{\"date\":\"2025-08-22\",\"symbol\":\"NVDA\",\"close\":177.97,\"value\":179.2764705882,\"ma_window\":60},{\"date\":\"2025-08-25\",\"symbol\":\"NVDA\",\"close\":179.79,\"value\":179.305,\"ma_window\":60},{\"date\":\"2025-08-26\",\"symbol\":\"NVDA\",\"close\":181.75,\"value\":179.4336842105,\"ma_window\":60},{\"date\":\"2025-08-27\",\"symbol\":\"NVDA\",\"close\":181.58,\"value\":179.541,\"ma_window\":60},{\"date\":\"2025-08-28\",\"symbol\":\"NVDA\",\"close\":180.15,\"value\":179.57,\"ma_window\":60},{\"date\":\"2025-08-29\",\"symbol\":\"NVDA\",\"close\":174.16,\"value\":179.3240909091,\"ma_window\":60},{\"date\":\"2025-09-02\",\"symbol\":\"NVDA\",\"close\":170.76,\"value\":178.9517391304,\"ma_window\":60},{\"date\":\"2025-09-03\",\"symbol\":\"NVDA\",\"close\":170.6,\"value\":178.60375,\"ma_window\":60},{\"date\":\"2025-09-04\",\"symbol\":\"NVDA\",\"close\":171.64,\"value\":178.3252,\"ma_window\":60},{\"date\":\"2025-09-05\",\"symbol\":\"NVDA\",\"close\":167,\"value\":177.8896153846,\"ma_window\":60},{\"date\":\"2025-09-08\",\"symbol\":\"NVDA\",\"close\":168.29,\"value\":177.5340740741,\"ma_window\":60},{\"date\":\"2025-09-09\",\"symbol\":\"NVDA\",\"close\":170.74,\"value\":177.2914285714,\"ma_window\":60},{\"date\":\"2025-09-10\",\"symbol\":\"NVDA\",\"close\":177.31,\"value\":177.2920689655,\"ma_window\":60},{\"date\":\"2025-09-11\",\"symbol\":\"NVDA\",\"close\":177.16,\"value\":177.2876666667,\"ma_window\":60},{\"date\":\"2025-09-12\",\"symbol\":\"NVDA\",\"close\":177.81,\"value\":177.304516129,\"ma_window\":60},{\"date\":\"2025-09-15\",\"symbol\":\"NVDA\",\"close\":177.74,\"value\":177.318125,\"ma_window\":60},{\"date\":\"2025-09-16\",\"symbol\":\"NVDA\",\"close\":174.87,\"value\":177.2439393939,\"ma_window\":60},{\"date\":\"2025-09-17\",\"symbol\":\"NVDA\",\"close\":170.28,\"value\":177.0391176471,\"ma_window\":60},{\"date\":\"2025-09-18\",\"symbol\":\"NVDA\",\"close\":176.23,\"value\":177.016,\"ma_window\":60},{\"date\":\"2025-09-19\",\"symbol\":\"NVDA\",\"close\":176.66,\"value\":177.0061111111,\"ma_window\":60},{\"date\":\"2025-09-22\",\"symbol\":\"NVDA\",\"close\":183.6,\"value\":177.1843243243,\"ma_window\":60},{\"date\":\"2025-09-23\",\"symbol\":\"NVDA\",\"close\":178.42,\"value\":177.2168421053,\"ma_window\":60},{\"date\":\"2025-09-24\",\"symbol\":\"NVDA\",\"close\":176.96,\"value\":177.2102564103,\"ma_window\":60},{\"date\":\"2025-09-25\",\"symbol\":\"NVDA\",\"close\":177.68,\"value\":177.222,\"ma_window\":60},{\"date\":\"2025-09-26\",\"symbol\":\"NVDA\",\"close\":178.18,\"value\":177.2453658537,\"ma_window\":60},{\"date\":\"2025-09-29\",\"symbol\":\"NVDA\",\"close\":181.84,\"value\":177.3547619048,\"ma_window\":60},{\"date\":\"2025-09-30\",\"symbol\":\"NVDA\",\"close\":186.57,\"value\":177.5690697674,\"ma_window\":60},{\"date\":\"2025-10-01\",\"symbol\":\"NVDA\",\"close\":187.23,\"value\":177.7886363636,\"ma_window\":60},{\"date\":\"2025-10-02\",\"symbol\":\"NVDA\",\"close\":188.88,\"value\":178.0351111111,\"ma_window\":60},{\"date\":\"2025-10-03\",\"symbol\":\"NVDA\",\"close\":187.61,\"value\":178.2432608696,\"ma_window\":60},{\"date\":\"2025-10-06\",\"symbol\":\"NVDA\",\"close\":185.53,\"value\":178.3982978723,\"ma_window\":60},{\"date\":\"2025-10-07\",\"symbol\":\"NVDA\",\"close\":185.03,\"value\":178.5364583333,\"ma_window\":60},{\"date\":\"2025-10-08\",\"symbol\":\"NVDA\",\"close\":189.1,\"value\":178.7520408163,\"ma_window\":60},{\"date\":\"2025-10-09\",\"symbol\":\"NVDA\",\"close\":192.56,\"value\":179.0282,\"ma_window\":60},{\"date\":\"2025-10-10\",\"symbol\":\"NVDA\",\"close\":183.15,\"value\":179.1090196078,\"ma_window\":60},{\"date\":\"2025-10-13\",\"symbol\":\"NVDA\",\"close\":188.31,\"value\":179.2859615385,\"ma_window\":60},{\"date\":\"2025-10-14\",\"symbol\":\"NVDA\",\"close\":180.02,\"value\":179.2998113208,\"ma_window\":60},{\"date\":\"2025-10-15\",\"symbol\":\"NVDA\",\"close\":179.82,\"value\":179.3094444444,\"ma_window\":60},{\"date\":\"2025-10-16\",\"symbol\":\"NVDA\",\"close\":181.8,\"value\":179.3547272727,\"ma_window\":60},{\"date\":\"2025-10-17\",\"symbol\":\"NVDA\",\"close\":183.21,\"value\":179.4235714286,\"ma_window\":60},{\"date\":\"2025-10-20\",\"symbol\":\"NVDA\",\"close\":182.63,\"value\":179.4798245614,\"ma_window\":60},{\"date\":\"2025-10-21\",\"symbol\":\"NVDA\",\"close\":181.15,\"value\":179.5086206897,\"ma_window\":60},{\"date\":\"2025-10-22\",\"symbol\":\"NVDA\",\"close\":180.27,\"value\":179.5215254237,\"ma_window\":60},{\"date\":\"2025-10-23\",\"symbol\":\"NVDA\",\"close\":182.15,\"value\":179.5653333333,\"ma_window\":60},{\"date\":\"2025-10-24\",\"symbol\":\"NVDA\",\"close\":186.25,\"value\":179.7053333333,\"ma_window\":60},{\"date\":\"2025-10-27\",\"symbol\":\"NVDA\",\"close\":191.48,\"value\":180.0016666667,\"ma_window\":60},{\"date\":\"2025-10-28\",\"symbol\":\"NVDA\",\"close\":201.02,\"value\":180.3523333333,\"ma_window\":60},{\"date\":\"2025-10-29\",\"symbol\":\"NVDA\",\"close\":207.03,\"value\":180.8321666667,\"ma_window\":60},{\"date\":\"2025-10-30\",\"symbol\":\"NVDA\",\"close\":202.88,\"value\":181.2235,\"ma_window\":60},{\"date\":\"2025-10-31\",\"symbol\":\"NVDA\",\"close\":202.48,\"value\":181.5856666667,\"ma_window\":60},{\"date\":\"2025-11-03\",\"symbol\":\"NVDA\",\"close\":206.87,\"value\":181.9888333333,\"ma_window\":60},{\"date\":\"2025-11-04\",\"symbol\":\"NVDA\",\"close\":198.68,\"value\":182.2661666667,\"ma_window\":60},{\"date\":\"2025-11-05\",\"symbol\":\"NVDA\",\"close\":195.2,\"value\":182.4671666667,\"ma_window\":60},{\"date\":\"2025-11-06\",\"symbol\":\"NVDA\",\"close\":188.07,\"value\":182.5755,\"ma_window\":60},{\"date\":\"2025-11-07\",\"symbol\":\"NVDA\",\"close\":188.14,\"value\":182.6778333333,\"ma_window\":60},{\"date\":\"2025-11-10\",\"symbol\":\"NVDA\",\"close\":199.04,\"value\":182.988,\"ma_window\":60},{\"date\":\"2025-11-11\",\"symbol\":\"NVDA\",\"close\":193.15,\"value\":183.174,\"ma_window\":60},{\"date\":\"2025-11-12\",\"symbol\":\"NVDA\",\"close\":193.79,\"value\":183.4768333333,\"ma_window\":60},{\"date\":\"2025-11-13\",\"symbol\":\"NVDA\",\"close\":186.85,\"value\":183.668,\"ma_window\":60},{\"date\":\"2025-11-14\",\"symbol\":\"NVDA\",\"close\":190.16,\"value\":183.9213333333,\"ma_window\":60},{\"date\":\"2025-11-17\",\"symbol\":\"NVDA\",\"close\":186.59,\"value\":184.065,\"ma_window\":60},{\"date\":\"2025-11-18\",\"symbol\":\"NVDA\",\"close\":181.35,\"value\":184.091,\"ma_window\":60},{\"date\":\"2025-11-19\",\"symbol\":\"NVDA\",\"close\":186.51,\"value\":184.1703333333,\"ma_window\":60},{\"date\":\"2025-11-20\",\"symbol\":\"NVDA\",\"close\":180.63,\"value\":184.1545,\"ma_window\":60},{\"date\":\"2025-11-21\",\"symbol\":\"NVDA\",\"close\":178.87,\"value\":184.1331666667,\"ma_window\":60},{\"date\":\"2025-11-24\",\"symbol\":\"NVDA\",\"close\":182.54,\"value\":184.2728333333,\"ma_window\":60},{\"date\":\"2025-11-25\",\"symbol\":\"NVDA\",\"close\":177.81,\"value\":184.3903333333,\"ma_window\":60},{\"date\":\"2025-11-26\",\"symbol\":\"NVDA\",\"close\":180.25,\"value\":184.5511666667,\"ma_window\":60},{\"date\":\"2025-11-28\",\"symbol\":\"NVDA\",\"close\":176.99,\"value\":184.6403333333,\"ma_window\":60},{\"date\":\"2025-12-01\",\"symbol\":\"NVDA\",\"close\":179.91,\"value\":184.8555,\"ma_window\":60},{\"date\":\"2025-12-02\",\"symbol\":\"NVDA\",\"close\":181.45,\"value\":185.0748333333,\"ma_window\":60},{\"date\":\"2025-12-03\",\"symbol\":\"NVDA\",\"close\":179.58,\"value\":185.2221666667,\"ma_window\":60},{\"date\":\"2025-12-04\",\"symbol\":\"NVDA\",\"close\":183.38,\"value\":185.3233333333,\"ma_window\":60},{\"date\":\"2025-12-05\",\"symbol\":\"NVDA\",\"close\":182.41,\"value\":185.4108333333,\"ma_window\":60},{\"date\":\"2025-12-08\",\"symbol\":\"NVDA\",\"close\":185.55,\"value\":185.5398333333,\"ma_window\":60},{\"date\":\"2025-12-09\",\"symbol\":\"NVDA\",\"close\":184.97,\"value\":185.6603333333,\"ma_window\":60},{\"date\":\"2025-12-10\",\"symbol\":\"NVDA\",\"close\":183.78,\"value\":185.8088333333,\"ma_window\":60},{\"date\":\"2025-12-11\",\"symbol\":\"NVDA\",\"close\":180.93,\"value\":185.9863333333,\"ma_window\":60},{\"date\":\"2025-12-12\",\"symbol\":\"NVDA\",\"close\":175.02,\"value\":185.9661666667,\"ma_window\":60},{\"date\":\"2025-12-15\",\"symbol\":\"NVDA\",\"close\":176.29,\"value\":185.96,\"ma_window\":60},{\"date\":\"2025-12-16\",\"symbol\":\"NVDA\",\"close\":177.72,\"value\":185.862,\"ma_window\":60},{\"date\":\"2025-12-17\",\"symbol\":\"NVDA\",\"close\":170.94,\"value\":185.7373333333,\"ma_window\":60},{\"date\":\"2025-12-18\",\"symbol\":\"NVDA\",\"close\":174.14,\"value\":185.6903333333,\"ma_window\":60},{\"date\":\"2025-12-19\",\"symbol\":\"NVDA\",\"close\":180.99,\"value\":185.7455,\"ma_window\":60},{\"date\":\"2025-12-22\",\"symbol\":\"NVDA\",\"close\":183.69,\"value\":185.8373333333,\"ma_window\":60},{\"date\":\"2025-12-23\",\"symbol\":\"NVDA\",\"close\":189.21,\"value\":185.9601666667,\"ma_window\":60},{\"date\":\"2025-12-24\",\"symbol\":\"NVDA\",\"close\":188.61,\"value\":185.9941666667,\"ma_window\":60},{\"date\":\"2025-12-26\",\"symbol\":\"NVDA\",\"close\":190.53,\"value\":186.0491666667,\"ma_window\":60},{\"date\":\"2025-12-29\",\"symbol\":\"NVDA\",\"close\":188.22,\"value\":186.0381666667,\"ma_window\":60},{\"date\":\"2025-12-30\",\"symbol\":\"NVDA\",\"close\":187.54,\"value\":186.037,\"ma_window\":60},{\"date\":\"2025-12-31\",\"symbol\":\"NVDA\",\"close\":186.5,\"value\":186.0531666667,\"ma_window\":60},{\"date\":\"2026-01-02\",\"symbol\":\"NVDA\",\"close\":188.85,\"value\":186.1168333333,\"ma_window\":60},{\"date\":\"2026-01-05\",\"symbol\":\"NVDA\",\"close\":188.12,\"value\":186.1005,\"ma_window\":60},{\"date\":\"2026-01-06\",\"symbol\":\"NVDA\",\"close\":187.24,\"value\":186.0118333333,\"ma_window\":60},{\"date\":\"2026-01-07\",\"symbol\":\"NVDA\",\"close\":189.11,\"value\":186.1111666667,\"ma_window\":60},{\"date\":\"2026-01-08\",\"symbol\":\"NVDA\",\"close\":185.04,\"value\":186.0566666667,\"ma_window\":60},{\"date\":\"2026-01-09\",\"symbol\":\"NVDA\",\"close\":184.86,\"value\":186.1373333333,\"ma_window\":60},{\"date\":\"2026-01-12\",\"symbol\":\"NVDA\",\"close\":184.94,\"value\":186.2226666667,\"ma_window\":60},{\"date\":\"2026-01-13\",\"symbol\":\"NVDA\",\"close\":185.81,\"value\":186.2895,\"ma_window\":60},{\"date\":\"2026-01-14\",\"symbol\":\"NVDA\",\"close\":183.14,\"value\":186.2883333333,\"ma_window\":60},{\"date\":\"2026-01-15\",\"symbol\":\"NVDA\",\"close\":187.05,\"value\":186.362,\"ma_window\":60},{\"date\":\"2026-01-16\",\"symbol\":\"NVDA\",\"close\":186.23,\"value\":186.4466666667,\"ma_window\":60},{\"date\":\"2026-01-20\",\"symbol\":\"NVDA\",\"close\":178.07,\"value\":186.41,\"ma_window\":60},{\"date\":\"2026-01-21\",\"symbol\":\"NVDA\",\"close\":183.32,\"value\":186.4295,\"ma_window\":60},{\"date\":\"2026-01-22\",\"symbol\":\"NVDA\",\"close\":184.84,\"value\":186.406,\"ma_window\":60},{\"date\":\"2026-01-23\",\"symbol\":\"NVDA\",\"close\":187.67,\"value\":186.3425,\"ma_window\":60},{\"date\":\"2026-01-26\",\"symbol\":\"NVDA\",\"close\":186.47,\"value\":186.1,\"ma_window\":60}],\"metadata\":{\"date\":{\"type\":\"date\",\"semanticType\":\"Date\"},\"symbol\":{\"type\":\"string\",\"semanticType\":\"String\"},\"close\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"value\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"ma_window\":{\"type\":\"integer\",\"semanticType\":\"Duration\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Work on a copy and keep only needed columns if present\\n    base_cols = [c for c in [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"] if c in df_history.columns]\\n    df = df_history[base_cols].copy()\\n\\n    # Normalize date to string YYYY-MM-DD\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper rolling computation\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"])\\n\\n    # Ensure we have a clean, simple index to avoid alignment issues\\n    df = df.reset_index(drop=True)\\n\\n    # Compute rolling means using transform to preserve index alignment\\n    df[\\\"ma_20\\\"] = (\\n        df.groupby(\\\"symbol\\\")[\\\"close\\\"]\\n          .transform(lambda s: s.rolling(window=20, min_periods=1).mean())\\n    )\\n    df[\\\"ma_60\\\"] = (\\n        df.groupby(\\\"symbol\\\")[\\\"close\\\"]\\n          .transform(lambda s: s.rolling(window=60, min_periods=1).mean())\\n    )\\n\\n    # Reshape to long format for the moving averages\\n    df_long = df.melt(\\n        id_vars=[\\\"date\\\", \\\"symbol\\\", \\\"close\\\"],\\n        value_vars=[\\\"ma_20\\\", \\\"ma_60\\\"],\\n        var_name=\\\"ma_window\\\",\\n        value_name=\\\"value\\\",\\n    )\\n\\n    # Map ma_window to numeric window size (20 or 60)\\n    window_map = {\\\"ma_20\\\": 20, \\\"ma_60\\\": 60}\\n    df_long[\\\"ma_window\\\"] = df_long[\\\"ma_window\\\"].map(window_map).astype(int)\\n\\n    # Final tidy output\\n    transformed_df = df_long[[\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"value\\\", \\\"ma_window\\\"]].reset_index(drop=True)\\n    return transformed_df\\n\",\"source\":[\"history\"],\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"input_tables\\\": [...] // string[], describe names of the input tables that will be used in the transformation.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\", 'boxplot'. \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - determine \\\"input_tables\\\", the names of a subset of input tables from [CONTEXT] section that will be used to achieve the user's goal.\\n        - **IMPORTANT** Note that the Table 1 in [CONTEXT] section is the table the user is currently viewing, it should take precedence if the user refers to insights about the \\\"current table\\\".\\n        - At the same time, leverage table information to determine which tables are relevant to the user's goal and should be used.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\", \\\"boxplot\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n            - boxplot: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n            - (boxplot) Box plots: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical (optional for creating grouped boxplots), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the boxplot will be grouped automatically (items with the same x values will be grouped).\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE]. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n# from sklearn import ... # import from sklearn if you need it.\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- decide the function signature based on the number of tables you decided in the previous step \\\"input_tables\\\":\\n    - if you decide there will only be one input table, then function signature should be `def transform_data(df1)`\\n    - if you decided there will be k input tables, then function signature should be `def transform_data(df_1, df_2, ..., df_k)`.\\n    - instead of using generic names like df1, df2, ..., try to use intuitive table names for function arguments, for example, if you have input_tables: [\\\"City\\\", \\\"Weather\\\"]`, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes.\\n    - **VERY IMPORTANT** the number of arguments in the function signature must be the same as the number of tables provided in \\\"input_tables\\\", and the order of arguments must match the order of tables provided in \\\"input_tables\\\".\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\n## Table 1: history (738 rows × 8 columns)\\n\\n### Schema (8 fields)\\n  - symbol -- type: object, values: AAPL, AMZN, GOOGL, META, MSFT, NVDA\\n  - date -- type: object, values: 2025-07-30, 2025-07-31, 2025-08-01, ..., 2026-01-20, 2026-01-21, 2026-01-22, 2026-01-23\\n  - open -- type: float64, values: 167.53, 168.01, 169.07, ..., 781.21, 782.98, 785.25, 789.97\\n  - high -- type: float64, values: 169.01, 170.94, 170.96, ..., 789.62, 792.49, 794.28, 795.06\\n  - low -- type: float64, values: 164.05, 166.72, 167.2, ..., 771.36, 772.21, 777.07, 779.66\\n  - close -- type: float64, values: 167.0, 168.29, 170.28, ..., 779.09, 780.97, 784.06, 788.82\\n  - volume -- type: int64, values: 5627500, 5855900, 6861200, ..., 320600300, 324925900, 343504800, 346926200\\n  - fetched_at -- type: object, values: 2026-01-26T23:46:42.347312Z\\n\\n### Sample Data (first 5 rows)\\n```\\n  symbol        date    open    high     low   close     volume                   fetched_at\\n0   AAPL  2025-07-30  211.45  211.94  207.28  208.61   45512500  2026-01-26T23:46:42.347312Z\\n1   AAPL  2025-07-31  208.05  209.40  206.72  207.13   80698400  2026-01-26T23:46:42.347312Z\\n2   AAPL  2025-08-01  210.43  213.13  201.08  201.95  104434500  2026-01-26T23:46:42.347312Z\\n3   AAPL  2025-08-04  204.08  207.44  201.26  202.92   75109300  2026-01-26T23:46:42.347312Z\\n4   AAPL  2025-08-05  202.97  204.91  201.74  202.49   44155100  2026-01-26T23:46:42.347312Z\\n```\\n\\n\\n[GOAL]\\n\\n1) First, plot the overall **closing price** trends for each **symbol** over **time** on a single line chart to compare their broad trajectories and volatility.\"},{\"role\":\"assistant\",\"content\":\"{\\n  \\\"mode\\\": \\\"infer\\\",\\n  \\\"recap\\\": \\\"Compare overall closing price trends and volatility over time for each stock symbol on a single line chart.\\\",\\n  \\\"display_instruction\\\": \\\"Visualize **closing price** trends by **symbol** over **date**\\\",\\n  \\\"recommendation\\\": \\\"A line chart with time on the x-axis and closing price on the y-axis, colored by symbol, best shows comparative trajectories and volatility over time. The data only needs column selection, date normalization, and sorting to be visualization-ready.\\\",\\n  \\\"input_tables\\\": [\\\"history\\\"],\\n  \\\"output_fields\\\": [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"],\\n  \\\"chart_type\\\": \\\"line\\\",\\n  \\\"chart_encodings\\\": {\\n    \\\"x\\\": \\\"date\\\",\\n    \\\"y\\\": \\\"close\\\",\\n    \\\"color\\\": \\\"symbol\\\",\\n    \\\"size\\\": \\\"\\\",\\n    \\\"opacity\\\": \\\"\\\",\\n    \\\"facet\\\": \\\"\\\"\\n  }\\n}\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Select only needed columns\\n    cols = [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"]\\n    df = df_history[cols].copy()\\n\\n    # Ensure date is a string in YYYY-MM-DD format (no datetime objects)\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper line plotting\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"]).reset_index(drop=True)\\n\\n    transformed_df = df\\n    return transformed_df\\n```\"},{\"role\":\"user\",\"content\":\"This is the result from the latest python code:\\n\\n         date symbol   close\\n0  2025-07-30   AAPL  208.61\\n1  2025-07-31   AAPL  207.13\\n2  2025-08-01   AAPL  201.95\\n3  2025-08-04   AAPL  202.92\\n4  2025-08-05   AAPL  202.49\\n5  2025-08-06   AAPL  212.80\\n6  2025-08-07   AAPL  219.57\\n7  2025-08-08   AAPL  228.87\\n8  2025-08-11   AAPL  226.96\\n9  2025-08-12   AAPL  229.43\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n2) For each symbol, compute 20-day and 60-day rolling averages of close price (columns: date, symbol, value, ma_window with values 20 or 60) and plot them over time alongside the actual close to compare short- vs long-term trends and reversals.\"},{\"role\":\"assistant\",\"content\":\"{\\n  \\\"mode\\\": \\\"infer\\\",\\n  \\\"recap\\\": \\\"Compute 20-day and 60-day rolling averages of closing prices for each symbol in tidy format for plotting alongside actual closes over time.\\\",\\n  \\\"display_instruction\\\": \\\"Add **20/60-day moving averages** of **close** by **symbol** over **date**\\\",\\n  \\\"recommendation\\\": \\\"To compare short- and long-term trends per symbol, compute 20- and 60-day rolling means of close, reshape them into a long format with one row per date-symbol-window, and keep the original close for plotting alongside the moving averages.\\\",\\n  \\\"input_tables\\\": [\\\"history\\\"],\\n  \\\"output_fields\\\": [\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"value\\\", \\\"ma_window\\\"],\\n  \\\"chart_type\\\": \\\"line\\\",\\n  \\\"chart_encodings\\\": {\\n    \\\"x\\\": \\\"date\\\",\\n    \\\"y\\\": \\\"value\\\",\\n    \\\"color\\\": \\\"ma_window\\\",\\n    \\\"size\\\": \\\"\\\",\\n    \\\"opacity\\\": \\\"\\\",\\n    \\\"facet\\\": \\\"symbol\\\"\\n  }\\n}\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Work on a copy\\n    df = df_history.copy()\\n\\n    # Normalize date to string YYYY-MM-DD\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper rolling computation\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"])\\n\\n    # Group by symbol and compute rolling means on close\\n    group = df.groupby(\\\"symbol\\\", group_keys=False)[\\\"close\\\"]\\n    df[\\\"ma_20\\\"] = group.rolling(20, min_periods=1).mean()\\n    df[\\\"ma_60\\\"] = group.rolling(60, min_periods=1).mean()\\n\\n    # Reshape to long format for the moving averages\\n    df_long = df.melt(\\n        id_vars=[\\\"date\\\", \\\"symbol\\\", \\\"close\\\"],\\n        value_vars=[\\\"ma_20\\\", \\\"ma_60\\\"],\\n        var_name=\\\"ma_window\\\",\\n        value_name=\\\"value\\\",\\n    )\\n\\n    # Map ma_window to numeric window size (20 or 60)\\n    window_map = {\\\"ma_20\\\": 20, \\\"ma_60\\\": 60}\\n    df_long[\\\"ma_window\\\"] = df_long[\\\"ma_window\\\"].map(window_map)\\n\\n    # Ensure correct column order and types\\n    df_long[\\\"ma_window\\\"] = df_long[\\\"ma_window\\\"].astype(int)\\n\\n    transformed_df = df_long[[\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"value\\\", \\\"ma_window\\\"]].reset_index(drop=True)\\n    return transformed_df\\n```\"},{\"role\":\"user\",\"content\":\"This is the result from the latest python code:\\n\\nEmpty DataFrame\\nColumns: []\\nIndex: []\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\nWe run into the following problem executing the code, please fix it:\\n\\nError: TypeError - incompatible index of inserted column with frame index\\n\\nPlease think step by step, reflect why the error happens and fix the code so that no more errors would occur.\"},{\"role\":\"assistant\",\"content\":\"{\\n  \\\"mode\\\": \\\"infer\\\",\\n  \\\"recap\\\": \\\"Compute 20-day and 60-day rolling averages of closing prices for each symbol in tidy format for plotting alongside actual closes over time.\\\",\\n  \\\"display_instruction\\\": \\\"Compute **20/60-day moving averages** of **close** by **symbol** over **date**\\\",\\n  \\\"recommendation\\\": \\\"The previous implementation used groupby().rolling() and assigned the result directly to new columns, which can create an index mismatch and raise a TypeError. Using groupby().transform(...) with an inner rolling mean keeps the index aligned with the original DataFrame, avoiding incompatible index issues. After computing the moving averages, reshape to long format for visualization.\\\",\\n  \\\"input_tables\\\": [\\\"history\\\"],\\n  \\\"output_fields\\\": [\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"value\\\", \\\"ma_window\\\"],\\n  \\\"chart_type\\\": \\\"line\\\",\\n  \\\"chart_encodings\\\": {\\n    \\\"x\\\": \\\"date\\\",\\n    \\\"y\\\": \\\"value\\\",\\n    \\\"color\\\": \\\"ma_window\\\",\\n    \\\"size\\\": \\\"\\\",\\n    \\\"opacity\\\": \\\"\\\",\\n    \\\"facet\\\": \\\"symbol\\\"\\n  }\\n}\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Work on a copy and keep only needed columns if present\\n    base_cols = [c for c in [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"] if c in df_history.columns]\\n    df = df_history[base_cols].copy()\\n\\n    # Normalize date to string YYYY-MM-DD\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper rolling computation\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"])\\n\\n    # Ensure we have a clean, simple index to avoid alignment issues\\n    df = df.reset_index(drop=True)\\n\\n    # Compute rolling means using transform to preserve index alignment\\n    df[\\\"ma_20\\\"] = (\\n        df.groupby(\\\"symbol\\\")[\\\"close\\\"]\\n          .transform(lambda s: s.rolling(window=20, min_periods=1).mean())\\n    )\\n    df[\\\"ma_60\\\"] = (\\n        df.groupby(\\\"symbol\\\")[\\\"close\\\"]\\n          .transform(lambda s: s.rolling(window=60, min_periods=1).mean())\\n    )\\n\\n    # Reshape to long format for the moving averages\\n    df_long = df.melt(\\n        id_vars=[\\\"date\\\", \\\"symbol\\\", \\\"close\\\"],\\n        value_vars=[\\\"ma_20\\\", \\\"ma_60\\\"],\\n        var_name=\\\"ma_window\\\",\\n        value_name=\\\"value\\\",\\n    )\\n\\n    # Map ma_window to numeric window size (20 or 60)\\n    window_map = {\\\"ma_20\\\": 20, \\\"ma_60\\\": 60}\\n    df_long[\\\"ma_window\\\"] = df_long[\\\"ma_window\\\"].map(window_map).astype(int)\\n\\n    # Final tidy output\\n    transformed_df = df_long[[\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"value\\\", \\\"ma_window\\\"]].reset_index(drop=True)\\n    return transformed_df\\n```\"}],\"trigger\":{\"tableId\":\"table-233476\",\"sourceTableIds\":[\"history\"],\"instruction\":\"2) For each symbol, compute 20-day and 60-day rolling averages of close price (columns: date, symbol, value, ma_window with values 20 or 60) and plot them over time alongside the actual close to compare short- vs long-term trends and reversals.\",\"displayInstruction\":\"Compute **20/60-day moving averages** of **close** by **symbol** over **date**\",\"chart\":{\"id\":\"chart-1769471261112\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"history\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-265247\"},\"explanation\":{\"status\":\"ok\",\"concepts\":[{\"field\":\"ma_20, ma_60, value\",\"explanation\":\"These fields represent a rolling (moving) average of the closing price over a fixed number of recent trading days for each stock symbol. For a window of N days (N = 20 or 60), the moving average on a given date is the average of the last N closing prices up to that date. Mathematically, if close_t is the closing price on day t, then the N-day moving average MA_N(t) is: MA_N(t) = (close_t + close_{t-1} + ... + close_{t-N+1}) / N. At the start of the series, when fewer than N days are available, the average is taken over all available past days instead.\"},{\"field\":\"ma_window\",\"explanation\":\"This field indicates the length of the moving-average window, in days. A value of 20 means the corresponding 'value' is a 20-day moving average; a value of 60 means it is a 60-day moving average.\"}],\"code\":\"- Start from the original **history** table but keep only the **`date`**, **`symbol`**, and **`close`** fields to simplify the data.\\n- Convert **`date`** into a standardized text format **`YYYY-MM-DD`** so all dates look consistent.\\n- **Sort** the data by **`symbol`** and then by **`date`** to ensure the time series for each stock is in the correct order.\\n- For each **`symbol`**, **compute**:\\n  - **`ma_20`**: a **20-day moving average** of the **`close`** price (uses up to the last **20** days; for the first few days it uses all available past days).\\n  - **`ma_60`**: a **60-day moving average** of the **`close`** price (uses up to the last **60** days; similarly relaxed at the start).\\n- **Reshape** the data so that instead of having separate columns **`ma_20`** and **`ma_60`**, each row represents **one moving-average value**:\\n  - Keep **`date`**, **`symbol`**, and **`close`**.\\n  - Put the moving-average values into a single column **`value`**.\\n  - Use a column **`ma_window`** to indicate whether **`value`** is for **20** days or **60** days.\\n- **Map** the labels **`ma_20`** and **`ma_60`** into numeric values **20** and **60** in **`ma_window`**, and keep only:\\n  - **`date`**, **`symbol`**, **`close`**, **`value`** (moving average), **`ma_window`** (window length in days).\",\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\n## Table 1: history (738 rows × 8 columns)\\n\\n### Schema (8 fields)\\n  - symbol -- type: object, values: AAPL, AMZN, GOOGL, META, MSFT, NVDA\\n  - date -- type: object, values: 2025-07-30, 2025-07-31, 2025-08-01, ..., 2026-01-20, 2026-01-21, 2026-01-22, 2026-01-23\\n  - open -- type: float64, values: 167.53, 168.01, 169.07, ..., 781.21, 782.98, 785.25, 789.97\\n  - high -- type: float64, values: 169.01, 170.94, 170.96, ..., 789.62, 792.49, 794.28, 795.06\\n  - low -- type: float64, values: 164.05, 166.72, 167.2, ..., 771.36, 772.21, 777.07, 779.66\\n  - close -- type: float64, values: 167.0, 168.29, 170.28, ..., 779.09, 780.97, 784.06, 788.82\\n  - volume -- type: int64, values: 5627500, 5855900, 6861200, ..., 320600300, 324925900, 343504800, 346926200\\n  - fetched_at -- type: object, values: 2026-01-26T23:46:42.347312Z\\n\\n### Sample Data (first 5 rows)\\n```\\n  symbol        date    open    high     low   close     volume                   fetched_at\\n0   AAPL  2025-07-30  211.45  211.94  207.28  208.61   45512500  2026-01-26T23:46:42.347312Z\\n1   AAPL  2025-07-31  208.05  209.40  206.72  207.13   80698400  2026-01-26T23:46:42.347312Z\\n2   AAPL  2025-08-01  210.43  213.13  201.08  201.95  104434500  2026-01-26T23:46:42.347312Z\\n3   AAPL  2025-08-04  204.08  207.44  201.26  202.92   75109300  2026-01-26T23:46:42.347312Z\\n4   AAPL  2025-08-05  202.97  204.91  201.74  202.49   44155100  2026-01-26T23:46:42.347312Z\\n```\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Work on a copy and keep only needed columns if present\\n    base_cols = [c for c in [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"] if c in df_history.columns]\\n    df = df_history[base_cols].copy()\\n\\n    # Normalize date to string YYYY-MM-DD\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper rolling computation\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"])\\n\\n    # Ensure we have a clean, simple index to avoid alignment issues\\n    df = df.reset_index(drop=True)\\n\\n    # Compute rolling means using transform to preserve index alignment\\n    df[\\\"ma_20\\\"] = (\\n        df.groupby(\\\"symbol\\\")[\\\"close\\\"]\\n          .transform(lambda s: s.rolling(window=20, min_periods=1).mean())\\n    )\\n    df[\\\"ma_60\\\"] = (\\n        df.groupby(\\\"symbol\\\")[\\\"close\\\"]\\n          .transform(lambda s: s.rolling(window=60, min_periods=1).mean())\\n    )\\n\\n    # Reshape to long format for the moving averages\\n    df_long = df.melt(\\n        id_vars=[\\\"date\\\", \\\"symbol\\\", \\\"close\\\"],\\n        value_vars=[\\\"ma_20\\\", \\\"ma_60\\\"],\\n        var_name=\\\"ma_window\\\",\\n        value_name=\\\"value\\\",\\n    )\\n\\n    # Map ma_window to numeric window size (20 or 60)\\n    window_map = {\\\"ma_20\\\": 20, \\\"ma_60\\\": 60}\\n    df_long[\\\"ma_window\\\"] = df_long[\\\"ma_window\\\"].map(window_map).astype(int)\\n\\n    # Final tidy output\\n    transformed_df = df_long[[\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"value\\\", \\\"ma_window\\\"]].reset_index(drop=True)\\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\"},{\"role\":\"assistant\",\"content\":\"[CODE EXPLANATION]\\n\\n- Start from the original **history** table but keep only the **`date`**, **`symbol`**, and **`close`** fields to simplify the data.\\n- Convert **`date`** into a standardized text format **`YYYY-MM-DD`** so all dates look consistent.\\n- **Sort** the data by **`symbol`** and then by **`date`** to ensure the time series for each stock is in the correct order.\\n- For each **`symbol`**, **compute**:\\n  - **`ma_20`**: a **20-day moving average** of the **`close`** price (uses up to the last **20** days; for the first few days it uses all available past days).\\n  - **`ma_60`**: a **60-day moving average** of the **`close`** price (uses up to the last **60** days; similarly relaxed at the start).\\n- **Reshape** the data so that instead of having separate columns **`ma_20`** and **`ma_60`**, each row represents **one moving-average value**:\\n  - Keep **`date`**, **`symbol`**, and **`close`**.\\n  - Put the moving-average values into a single column **`value`**.\\n  - Use a column **`ma_window`** to indicate whether **`value`** is for **20** days or **60** days.\\n- **Map** the labels **`ma_20`** and **`ma_60`** into numeric values **20** and **60** in **`ma_window`**, and keep only:\\n  - **`date`**, **`symbol`**, **`close`**, **`value`** (moving average), **`ma_window`** (window length in days).\\n\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n  {\\n    \\\"field\\\": \\\"ma_20, ma_60, value\\\",\\n    \\\"explanation\\\": \\\"These fields represent a rolling (moving) average of the closing price over a fixed number of recent trading days for each stock symbol. For a window of N days (N = 20 or 60), the moving average on a given date is the average of the last N closing prices up to that date. Mathematically, if close_t is the closing price on day t, then the N-day moving average MA_N(t) is: MA_N(t) = (close_t + close_{t-1} + ... + close_{t-N+1}) / N. At the start of the series, when fewer than N days are available, the average is taken over all available past days instead.\\\"\\n  },\\n  {\\n    \\\"field\\\": \\\"ma_window\\\",\\n    \\\"explanation\\\": \\\"This field indicates the length of the moving-average window, in days. A value of 20 means the corresponding 'value' is a 20-day moving average; a value of 60 means it is a 60-day moving average.\\\"\\n  }\\n]\\n```\"}],\"agent\":\"CodeExplanationAgent\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\",\"contentHash\":\"63c48b66\"},{\"id\":\"table-277926\",\"displayId\":\"stock-metr\",\"names\":[\"date\",\"symbol\",\"metric\",\"value\"],\"rows\":[{\"date\":\"2025-07-31\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":null},{\"date\":\"2025-08-01\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0250084488},{\"date\":\"2025-08-04\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0048031691},{\"date\":\"2025-08-05\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0021190617},{\"date\":\"2025-08-06\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0509160946},{\"date\":\"2025-08-07\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0318139098},{\"date\":\"2025-08-08\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.042355513},{\"date\":\"2025-08-11\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0083453489},{\"date\":\"2025-08-12\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.010882975},{\"date\":\"2025-08-13\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0159961644},{\"date\":\"2025-08-14\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0023595024},{\"date\":\"2025-08-15\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0050741776},{\"date\":\"2025-08-18\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0030254571},{\"date\":\"2025-08-19\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0014306152},{\"date\":\"2025-08-20\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.019753408},{\"date\":\"2025-08-21\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0049160725},{\"date\":\"2025-08-22\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0127292149},{\"date\":\"2025-08-25\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.002636899},{\"date\":\"2025-08-26\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0094738697},{\"date\":\"2025-08-27\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0051508141},{\"date\":\"2025-08-28\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0089460199},{\"date\":\"2025-08-29\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0017647312},{\"date\":\"2025-09-02\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0104346326},{\"date\":\"2025-09-03\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0380827887},{\"date\":\"2025-09-04\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0054986568},{\"date\":\"2025-09-05\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0003757044},{\"date\":\"2025-09-08\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0075586737},{\"date\":\"2025-09-09\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0148537766},{\"date\":\"2025-09-10\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0322484196},{\"date\":\"2025-09-11\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0143002163},{\"date\":\"2025-09-12\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0175362256},{\"date\":\"2025-09-15\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0112470065},{\"date\":\"2025-09-16\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.006131856},{\"date\":\"2025-09-17\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0035305985},{\"date\":\"2025-09-18\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0046490199},{\"date\":\"2025-09-19\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0320218809},{\"date\":\"2025-09-22\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0430971214},{\"date\":\"2025-09-23\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0064495954},{\"date\":\"2025-09-24\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0083012039},{\"date\":\"2025-09-25\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0180505415},{\"date\":\"2025-09-26\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0054945055},{\"date\":\"2025-09-29\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.004035892},{\"date\":\"2025-09-30\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.000786844},{\"date\":\"2025-10-01\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0032235239},{\"date\":\"2025-10-02\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0065830721},{\"date\":\"2025-10-03\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0034646528},{\"date\":\"2025-10-06\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0051596384},{\"date\":\"2025-10-07\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.000818905},{\"date\":\"2025-10-08\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0061663349},{\"date\":\"2025-10-09\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0155928785},{\"date\":\"2025-10-10\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0345167264},{\"date\":\"2025-10-13\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0097539077},{\"date\":\"2025-10-14\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0004445881},{\"date\":\"2025-10-15\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0063426655},{\"date\":\"2025-10-16\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0075873143},{\"date\":\"2025-10-17\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.019578496},{\"date\":\"2025-10-20\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0394366197},{\"date\":\"2025-10-21\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.002022978},{\"date\":\"2025-10-22\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0164558891},{\"date\":\"2025-10-23\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0043764524},{\"date\":\"2025-10-24\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0124937339},{\"date\":\"2025-10-27\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0227748791},{\"date\":\"2025-10-28\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0007075033},{\"date\":\"2025-10-29\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0026047481},{\"date\":\"2025-10-30\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0063093824},{\"date\":\"2025-10-31\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0037987755},{\"date\":\"2025-11-03\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0048868979},{\"date\":\"2025-11-04\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0036831727},{\"date\":\"2025-11-05\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0003706724},{\"date\":\"2025-11-06\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0013709797},{\"date\":\"2025-11-07\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0048235687},{\"date\":\"2025-11-10\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0045486745},{\"date\":\"2025-11-11\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.021601158},{\"date\":\"2025-11-12\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0064668483},{\"date\":\"2025-11-13\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0019014883},{\"date\":\"2025-11-14\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0019783843},{\"date\":\"2025-11-17\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0181711391},{\"date\":\"2025-11-18\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0000747775},{\"date\":\"2025-11-19\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0041878552},{\"date\":\"2025-11-20\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0086014298},{\"date\":\"2025-11-21\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0196807512},{\"date\":\"2025-11-24\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0163173598},{\"date\":\"2025-11-25\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0038054509},{\"date\":\"2025-11-26\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0020940896},{\"date\":\"2025-11-28\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0046838407},{\"date\":\"2025-12-01\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0152411691},{\"date\":\"2025-12-02\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0109148711},{\"date\":\"2025-12-03\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0071281317},{\"date\":\"2025-12-04\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0121414746},{\"date\":\"2025-12-05\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0068400428},{\"date\":\"2025-12-08\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0031924815},{\"date\":\"2025-12-09\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0025549678},{\"date\":\"2025-12-10\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0057724223},{\"date\":\"2025-12-11\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0026902934},{\"date\":\"2025-12-12\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0008991835},{\"date\":\"2025-12-15\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0149849073},{\"date\":\"2025-12-16\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0018240852},{\"date\":\"2025-12-17\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0100870325},{\"date\":\"2025-12-18\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0012875221},{\"date\":\"2025-12-19\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0054373783},{\"date\":\"2025-12-22\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0098658969},{\"date\":\"2025-12-23\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0051297192},{\"date\":\"2025-12-24\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0053238361},{\"date\":\"2025-12-26\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0014973887},{\"date\":\"2025-12-29\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.001316752},{\"date\":\"2025-12-30\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0024839275},{\"date\":\"2025-12-31\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0044675553},{\"date\":\"2026-01-02\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0031266093},{\"date\":\"2026-01-05\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0138371278},{\"date\":\"2026-01-06\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0183342064},{\"date\":\"2026-01-07\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.00773746},{\"date\":\"2026-01-08\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0049552491},{\"date\":\"2026-01-09\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0012739345},{\"date\":\"2026-01-12\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0033928365},{\"date\":\"2026-01-13\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0030739673},{\"date\":\"2026-01-14\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0041754453},{\"date\":\"2026-01-15\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0067318049},{\"date\":\"2026-01-16\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0103791488},{\"date\":\"2026-01-20\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0345556295},{\"date\":\"2026-01-21\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.003850831},{\"date\":\"2026-01-22\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0028265698},{\"date\":\"2026-01-23\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":-0.0012482384},{\"date\":\"2026-01-26\",\"symbol\":\"AAPL\",\"metric\":\"return\",\"value\":0.0297129495},{\"date\":\"2025-07-31\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":null},{\"date\":\"2025-08-01\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0826961685},{\"date\":\"2025-08-04\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.01443539},{\"date\":\"2025-08-05\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0099220411},{\"date\":\"2025-08-06\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0400467836},{\"date\":\"2025-08-07\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.003688543},{\"date\":\"2025-08-08\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0019719446},{\"date\":\"2025-08-11\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0062418609},{\"date\":\"2025-08-12\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.000768188},{\"date\":\"2025-08-13\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0139522283},{\"date\":\"2025-08-14\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0285892412},{\"date\":\"2025-08-15\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.000216469},{\"date\":\"2025-08-18\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0019910834},{\"date\":\"2025-08-19\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0150330468},{\"date\":\"2025-08-20\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0184202447},{\"date\":\"2025-08-21\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0083106206},{\"date\":\"2025-08-22\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0310430277},{\"date\":\"2025-08-25\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0039328789},{\"date\":\"2025-08-26\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.003378082},{\"date\":\"2025-08-27\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0017926632},{\"date\":\"2025-08-28\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0108240223},{\"date\":\"2025-08-29\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0112262522},{\"date\":\"2025-09-02\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0159825328},{\"date\":\"2025-09-03\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.00288453},{\"date\":\"2025-09-04\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0428780035},{\"date\":\"2025-09-05\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0142141887},{\"date\":\"2025-09-08\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0151078208},{\"date\":\"2025-09-09\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0101763908},{\"date\":\"2025-09-10\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0332018133},{\"date\":\"2025-09-11\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0016498068},{\"date\":\"2025-09-12\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0078277886},{\"date\":\"2025-09-15\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0143765067},{\"date\":\"2025-09-16\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0113209178},{\"date\":\"2025-09-17\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0103823969},{\"date\":\"2025-09-18\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0016837924},{\"date\":\"2025-09-19\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0010811746},{\"date\":\"2025-09-22\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0166321064},{\"date\":\"2025-09-23\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0304002109},{\"date\":\"2025-09-24\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0022654162},{\"date\":\"2025-09-25\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0093547069},{\"date\":\"2025-09-26\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.007471923},{\"date\":\"2025-09-29\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0108745109},{\"date\":\"2025-09-30\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0117027501},{\"date\":\"2025-10-01\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0048276176},{\"date\":\"2025-10-02\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0080678058},{\"date\":\"2025-10-03\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0130389821},{\"date\":\"2025-10-06\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0063322855},{\"date\":\"2025-10-07\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.003983703},{\"date\":\"2025-10-08\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0155108666},{\"date\":\"2025-10-09\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0111890596},{\"date\":\"2025-10-10\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0499253535},{\"date\":\"2025-10-13\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0171003374},{\"date\":\"2025-10-14\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0167219521},{\"date\":\"2025-10-15\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0037894542},{\"date\":\"2025-10-16\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0051027508},{\"date\":\"2025-10-17\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0066675992},{\"date\":\"2025-10-20\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0161472024},{\"date\":\"2025-10-21\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0256374723},{\"date\":\"2025-10-22\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0183758951},{\"date\":\"2025-10-23\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0144069741},{\"date\":\"2025-10-24\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0141119001},{\"date\":\"2025-10-27\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0123098881},{\"date\":\"2025-10-28\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0100453804},{\"date\":\"2025-10-29\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0045801527},{\"date\":\"2025-10-30\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0323056882},{\"date\":\"2025-10-31\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0958449251},{\"date\":\"2025-11-03\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0400458603},{\"date\":\"2025-11-04\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0184251969},{\"date\":\"2025-11-05\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0035296005},{\"date\":\"2025-11-06\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0286171063},{\"date\":\"2025-11-07\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0056369322},{\"date\":\"2025-11-10\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0163250276},{\"date\":\"2025-11-11\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0028180354},{\"date\":\"2025-11-12\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0196708149},{\"date\":\"2025-11-13\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0271089271},{\"date\":\"2025-11-14\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0121643236},{\"date\":\"2025-11-17\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0077549107},{\"date\":\"2025-11-18\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0443165715},{\"date\":\"2025-11-19\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0006290721},{\"date\":\"2025-11-20\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0249225381},{\"date\":\"2025-11-21\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0163488993},{\"date\":\"2025-11-24\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0253296479},{\"date\":\"2025-11-25\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0149814389},{\"date\":\"2025-11-26\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0022205774},{\"date\":\"2025-11-28\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.017716879},{\"date\":\"2025-12-01\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.002829946},{\"date\":\"2025-12-02\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0023088763},{\"date\":\"2025-12-03\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0087023292},{\"date\":\"2025-12-04\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.014071779},{\"date\":\"2025-12-05\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0018331806},{\"date\":\"2025-12-08\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0115017645},{\"date\":\"2025-12-09\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0045396448},{\"date\":\"2025-12-10\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0169357669},{\"date\":\"2025-12-11\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0064716542},{\"date\":\"2025-12-12\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0177609866},{\"date\":\"2025-12-15\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0161368761},{\"date\":\"2025-12-16\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0000898715},{\"date\":\"2025-12-17\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0057961898},{\"date\":\"2025-12-18\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0248113165},{\"date\":\"2025-12-19\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0026018698},{\"date\":\"2025-12-22\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0047503849},{\"date\":\"2025-12-23\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0162412993},{\"date\":\"2025-12-24\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0010338589},{\"date\":\"2025-12-26\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0006024615},{\"date\":\"2025-12-29\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0019353174},{\"date\":\"2025-12-30\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0019821606},{\"date\":\"2025-12-31\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0073538898},{\"date\":\"2026-01-02\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0187158825},{\"date\":\"2026-01-05\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0289624724},{\"date\":\"2026-01-06\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0337681284},{\"date\":\"2026-01-07\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0026148674},{\"date\":\"2026-01-08\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0195810565},{\"date\":\"2026-01-09\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.004425677},{\"date\":\"2026-01-12\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0036785512},{\"date\":\"2026-01-13\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0157017081},{\"date\":\"2026-01-14\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0245259687},{\"date\":\"2026-01-15\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.006465244},{\"date\":\"2026-01-16\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.003946595},{\"date\":\"2026-01-20\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0339578454},{\"date\":\"2026-01-21\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0013419913},{\"date\":\"2026-01-22\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.013099304},{\"date\":\"2026-01-23\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":0.0205684049},{\"date\":\"2026-01-26\",\"symbol\":\"AMZN\",\"metric\":\"return\",\"value\":-0.0030941629},{\"date\":\"2025-07-31\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":null},{\"date\":\"2025-08-01\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0144050104},{\"date\":\"2025-08-04\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0312433806},{\"date\":\"2025-08-05\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0018999692},{\"date\":\"2025-08-06\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0073056542},{\"date\":\"2025-08-07\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0021962307},{\"date\":\"2025-08-08\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.024921007},{\"date\":\"2025-08-11\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0020884093},{\"date\":\"2025-08-12\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0116597738},{\"date\":\"2025-08-13\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0067970251},{\"date\":\"2025-08-14\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0048599058},{\"date\":\"2025-08-15\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0046883482},{\"date\":\"2025-08-18\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0019157088},{\"date\":\"2025-08-19\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0094984989},{\"date\":\"2025-08-20\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0111795687},{\"date\":\"2025-08-21\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0021606954},{\"date\":\"2025-08-22\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0317388688},{\"date\":\"2025-08-25\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0116635078},{\"date\":\"2025-08-26\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0064850843},{\"date\":\"2025-08-27\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0016439416},{\"date\":\"2025-08-28\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0200328249},{\"date\":\"2025-08-29\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0060101273},{\"date\":\"2025-09-02\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0073384138},{\"date\":\"2025-09-03\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0913657473},{\"date\":\"2025-09-04\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0071211463},{\"date\":\"2025-09-05\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0116409416},{\"date\":\"2025-09-08\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.003196386},{\"date\":\"2025-09-09\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0238573688},{\"date\":\"2025-09-10\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0019209087},{\"date\":\"2025-09-11\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0050207104},{\"date\":\"2025-09-12\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0017901003},{\"date\":\"2025-09-15\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.044921875},{\"date\":\"2025-09-16\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0017896202},{\"date\":\"2025-09-17\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0064940239},{\"date\":\"2025-09-18\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0100252637},{\"date\":\"2025-09-19\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0106404097},{\"date\":\"2025-09-22\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0086034178},{\"date\":\"2025-09-23\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0034078301},{\"date\":\"2025-09-24\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.017972167},{\"date\":\"2025-09-25\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0054660296},{\"date\":\"2025-09-26\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.003053373},{\"date\":\"2025-09-29\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0101063398},{\"date\":\"2025-09-30\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0038951987},{\"date\":\"2025-10-01\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0074092368},{\"date\":\"2025-10-02\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0032279153},{\"date\":\"2025-10-03\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0013847595},{\"date\":\"2025-10-06\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0207186264},{\"date\":\"2025-10-07\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0186598474},{\"date\":\"2025-10-08\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0046416938},{\"date\":\"2025-10-09\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0126401047},{\"date\":\"2025-10-10\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0205079339},{\"date\":\"2025-10-13\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0320192877},{\"date\":\"2025-10-14\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0053280872},{\"date\":\"2025-10-15\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0227485833},{\"date\":\"2025-10-16\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0017140352},{\"date\":\"2025-10-17\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0072821329},{\"date\":\"2025-10-20\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0128392526},{\"date\":\"2025-10-21\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0237147983},{\"date\":\"2025-10-22\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0049141031},{\"date\":\"2025-10-23\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0054864231},{\"date\":\"2025-10-24\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0270451939},{\"date\":\"2025-10-27\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0359576516},{\"date\":\"2025-10-28\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0066520495},{\"date\":\"2025-10-29\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0265245043},{\"date\":\"2025-10-30\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0251831335},{\"date\":\"2025-10-31\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0010309278},{\"date\":\"2025-11-03\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0089676524},{\"date\":\"2025-11-04\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0217613656},{\"date\":\"2025-11-05\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0243726565},{\"date\":\"2025-11-06\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0015486414},{\"date\":\"2025-11-07\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0207689064},{\"date\":\"2025-11-10\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0404091154},{\"date\":\"2025-11-11\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0041737091},{\"date\":\"2025-11-12\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0158010442},{\"date\":\"2025-11-13\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0283749825},{\"date\":\"2025-11-14\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0077588994},{\"date\":\"2025-11-17\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0311334757},{\"date\":\"2025-11-18\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0025980409},{\"date\":\"2025-11-19\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0300256961},{\"date\":\"2025-11-20\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0114824687},{\"date\":\"2025-11-21\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0352623937},{\"date\":\"2025-11-24\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0631469979},{\"date\":\"2025-11-25\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0152652574},{\"date\":\"2025-11-26\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0107972651},{\"date\":\"2025-11-28\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0007193345},{\"date\":\"2025-12-01\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0165327999},{\"date\":\"2025-12-02\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0029236049},{\"date\":\"2025-12-03\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.012103929},{\"date\":\"2025-12-04\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0062926554},{\"date\":\"2025-12-05\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0114993226},{\"date\":\"2025-12-08\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0228617704},{\"date\":\"2025-12-09\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0107101874},{\"date\":\"2025-12-10\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0098713258},{\"date\":\"2025-12-11\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0242965554},{\"date\":\"2025-12-12\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0100502513},{\"date\":\"2025-12-15\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0034595364},{\"date\":\"2025-12-16\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0053533191},{\"date\":\"2025-12-17\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0321296931},{\"date\":\"2025-12-18\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0193448369},{\"date\":\"2025-12-19\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0155392449},{\"date\":\"2025-12-22\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0085297565},{\"date\":\"2025-12-23\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0147524049},{\"date\":\"2025-12-24\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0008271035},{\"date\":\"2025-12-26\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0018466045},{\"date\":\"2025-12-29\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0001594845},{\"date\":\"2025-12-30\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0009248629},{\"date\":\"2025-12-31\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0027083001},{\"date\":\"2026-01-02\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0068690096},{\"date\":\"2026-01-05\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0044105981},{\"date\":\"2026-01-06\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0069501485},{\"date\":\"2026-01-07\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0243048928},{\"date\":\"2026-01-08\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0107460091},{\"date\":\"2026-01-09\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0096177483},{\"date\":\"2026-01-12\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.010013087},{\"date\":\"2026-01-13\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0123847406},{\"date\":\"2026-01-14\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0003869393},{\"date\":\"2026-01-15\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0091114817},{\"date\":\"2026-01-16\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0083538674},{\"date\":\"2026-01-20\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0242424242},{\"date\":\"2026-01-21\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0198136646},{\"date\":\"2026-01-22\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0065777453},{\"date\":\"2026-01-23\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":-0.0078961699},{\"date\":\"2026-01-26\",\"symbol\":\"GOOGL\",\"metric\":\"return\",\"value\":0.0162534687},{\"date\":\"2025-07-31\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":null},{\"date\":\"2025-08-01\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0302994989},{\"date\":\"2025-08-04\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0351453484},{\"date\":\"2025-08-05\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0166277525},{\"date\":\"2025-08-06\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0111764089},{\"date\":\"2025-08-07\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0131544808},{\"date\":\"2025-08-08\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0097936111},{\"date\":\"2025-08-11\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0044522554},{\"date\":\"2025-08-12\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0315013142},{\"date\":\"2025-08-13\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0125503917},{\"date\":\"2025-08-14\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0026318492},{\"date\":\"2025-08-15\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0039566181},{\"date\":\"2025-08-18\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0227406066},{\"date\":\"2025-08-19\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0207117967},{\"date\":\"2025-08-20\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0049976012},{\"date\":\"2025-08-21\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0115321252},{\"date\":\"2025-08-22\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0212330623},{\"date\":\"2025-08-25\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0019769926},{\"date\":\"2025-08-26\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0010635752},{\"date\":\"2025-08-27\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0089112593},{\"date\":\"2025-08-28\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.004984791},{\"date\":\"2025-08-29\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0165202203},{\"date\":\"2025-09-02\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0048535792},{\"date\":\"2025-09-03\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0026293561},{\"date\":\"2025-09-04\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0157483525},{\"date\":\"2025-09-05\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0050699628},{\"date\":\"2025-09-08\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.000199646},{\"date\":\"2025-09-09\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0178119758},{\"date\":\"2025-09-10\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.017918803},{\"date\":\"2025-09-11\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0014383507},{\"date\":\"2025-09-12\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0062551682},{\"date\":\"2025-09-15\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0120481928},{\"date\":\"2025-09-16\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0187018702},{\"date\":\"2025-09-17\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0042039494},{\"date\":\"2025-09-18\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0058354958},{\"date\":\"2025-09-19\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0024002362},{\"date\":\"2025-09-22\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.016314557},{\"date\":\"2025-09-23\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0127658461},{\"date\":\"2025-09-24\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0069689181},{\"date\":\"2025-09-25\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0154465554},{\"date\":\"2025-09-26\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0068956301},{\"date\":\"2025-09-29\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0004709745},{\"date\":\"2025-09-30\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0121299425},{\"date\":\"2025-10-01\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0231949631},{\"date\":\"2025-10-02\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0135331213},{\"date\":\"2025-10-03\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0226853509},{\"date\":\"2025-10-06\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0071833009},{\"date\":\"2025-10-07\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0036079879},{\"date\":\"2025-10-08\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0066807018},{\"date\":\"2025-10-09\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0218191451},{\"date\":\"2025-10-10\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0384494686},{\"date\":\"2025-10-13\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.014743235},{\"date\":\"2025-10-14\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0098584853},{\"date\":\"2025-10-15\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0125693787},{\"date\":\"2025-10-16\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0076432766},{\"date\":\"2025-10-17\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0068166805},{\"date\":\"2025-10-20\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0212608538},{\"date\":\"2025-10-21\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0015036155},{\"date\":\"2025-10-22\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0001910819},{\"date\":\"2025-10-23\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.00080512},{\"date\":\"2025-10-24\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0059449141},{\"date\":\"2025-10-27\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0168754066},{\"date\":\"2025-10-28\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0008264353},{\"date\":\"2025-10-29\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0003063277},{\"date\":\"2025-10-30\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.1133464703},{\"date\":\"2025-10-31\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0271950505},{\"date\":\"2025-11-03\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.016408879},{\"date\":\"2025-11-04\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0162902745},{\"date\":\"2025-11-05\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0137521737},{\"date\":\"2025-11-06\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0267377996},{\"date\":\"2025-11-07\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.004462842},{\"date\":\"2025-11-10\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0161783645},{\"date\":\"2025-11-11\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0074138614},{\"date\":\"2025-11-12\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0288235951},{\"date\":\"2025-11-13\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0014461554},{\"date\":\"2025-11-14\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0007056237},{\"date\":\"2025-11-17\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0122175512},{\"date\":\"2025-11-18\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0071818061},{\"date\":\"2025-11-19\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0123241795},{\"date\":\"2025-11-20\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0019835888},{\"date\":\"2025-11-21\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0086635976},{\"date\":\"2025-11-24\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0316284083},{\"date\":\"2025-11-25\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0377928332},{\"date\":\"2025-11-26\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0041057102},{\"date\":\"2025-11-28\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0226350124},{\"date\":\"2025-12-01\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0109202681},{\"date\":\"2025-12-02\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.009713438},{\"date\":\"2025-12-03\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0115842059},{\"date\":\"2025-12-04\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0342836578},{\"date\":\"2025-12-05\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0179730404},{\"date\":\"2025-12-08\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0098235915},{\"date\":\"2025-12-09\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0147690091},{\"date\":\"2025-12-10\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0103896895},{\"date\":\"2025-12-11\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0039716749},{\"date\":\"2025-12-12\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0129872121},{\"date\":\"2025-12-15\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0059032794},{\"date\":\"2025-12-16\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.014887801},{\"date\":\"2025-12-17\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0116411778},{\"date\":\"2025-12-18\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0230177059},{\"date\":\"2025-12-19\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0085484235},{\"date\":\"2025-12-22\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0041440867},{\"date\":\"2025-12-23\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0052003023},{\"date\":\"2025-12-24\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0039251662},{\"date\":\"2025-12-26\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0063815445},{\"date\":\"2025-12-29\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0069351264},{\"date\":\"2025-12-30\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0110218768},{\"date\":\"2025-12-31\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0087994594},{\"date\":\"2026-01-02\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0146646669},{\"date\":\"2026-01-05\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0128841807},{\"date\":\"2026-01-06\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0027778199},{\"date\":\"2026-01-07\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0180587933},{\"date\":\"2026-01-08\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0040543249},{\"date\":\"2026-01-09\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.010834907},{\"date\":\"2026-01-12\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0169815943},{\"date\":\"2026-01-13\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0169478325},{\"date\":\"2026-01-14\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0246715999},{\"date\":\"2026-01-15\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0085781128},{\"date\":\"2026-01-16\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0008859536},{\"date\":\"2026-01-20\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":-0.0260056429},{\"date\":\"2026-01-21\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0146328544},{\"date\":\"2026-01-22\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0565616027},{\"date\":\"2026-01-23\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0171857388},{\"date\":\"2026-01-26\",\"symbol\":\"META\",\"metric\":\"return\",\"value\":0.0206448479},{\"date\":\"2025-07-31\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":null},{\"date\":\"2025-08-01\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0176062299},{\"date\":\"2025-08-04\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0220001149},{\"date\":\"2025-08-05\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0147257194},{\"date\":\"2025-08-06\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0053242061},{\"date\":\"2025-08-07\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0078187727},{\"date\":\"2025-08-08\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0023120942},{\"date\":\"2025-08-11\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0005190212},{\"date\":\"2025-08-12\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0143093434},{\"date\":\"2025-08-13\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0163639122},{\"date\":\"2025-08-14\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0036626506},{\"date\":\"2025-08-15\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.004417555},{\"date\":\"2025-08-18\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0059033472},{\"date\":\"2025-08-19\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0141861864},{\"date\":\"2025-08-20\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0079333832},{\"date\":\"2025-08-21\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0012898105},{\"date\":\"2025-08-22\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0059209219},{\"date\":\"2025-08-25\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0058465671},{\"date\":\"2025-08-26\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0044107129},{\"date\":\"2025-08-27\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0093594093},{\"date\":\"2025-08-28\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0057336049},{\"date\":\"2025-08-29\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0057992097},{\"date\":\"2025-09-02\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0030845889},{\"date\":\"2025-09-03\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0004561863},{\"date\":\"2025-09-04\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0051743621},{\"date\":\"2025-09-05\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0255216757},{\"date\":\"2025-09-08\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0064564443},{\"date\":\"2025-09-09\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0004223058},{\"date\":\"2025-09-10\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0039398569},{\"date\":\"2025-09-11\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0012614128},{\"date\":\"2025-09-12\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0177575139},{\"date\":\"2025-09-15\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0107083211},{\"date\":\"2025-09-16\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0122667185},{\"date\":\"2025-09-17\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0019287921},{\"date\":\"2025-09-18\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0030840552},{\"date\":\"2025-09-19\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0186403941},{\"date\":\"2025-09-22\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0067123182},{\"date\":\"2025-09-23\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0101462541},{\"date\":\"2025-09-24\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.001810026},{\"date\":\"2025-09-25\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0061272584},{\"date\":\"2025-09-26\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.008733797},{\"date\":\"2025-09-29\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0061508325},{\"date\":\"2025-09-30\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0065026088},{\"date\":\"2025-10-01\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.003404387},{\"date\":\"2025-10-02\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0076338821},{\"date\":\"2025-10-03\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0031081239},{\"date\":\"2025-10-06\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0216894535},{\"date\":\"2025-10-07\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0086811479},{\"date\":\"2025-10-08\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0016634799},{\"date\":\"2025-10-09\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0046767328},{\"date\":\"2025-10-10\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0218825515},{\"date\":\"2025-10-13\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0060390973},{\"date\":\"2025-10-14\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0009355084},{\"date\":\"2025-10-15\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0002731121},{\"date\":\"2025-10-16\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0035514274},{\"date\":\"2025-10-17\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0038578283},{\"date\":\"2025-10-20\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0062424408},{\"date\":\"2025-10-21\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0016866349},{\"date\":\"2025-10-22\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0055739418},{\"date\":\"2025-10-23\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0000384934},{\"date\":\"2025-10-24\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.005850767},{\"date\":\"2025-10-27\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0151158563},{\"date\":\"2025-10-28\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0198480765},{\"date\":\"2025-10-29\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0009610764},{\"date\":\"2025-10-30\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0291560292},{\"date\":\"2025-10-31\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0151301498},{\"date\":\"2025-11-03\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0015091711},{\"date\":\"2025-11-04\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0052125722},{\"date\":\"2025-11-05\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0139470557},{\"date\":\"2025-11-06\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0198336659},{\"date\":\"2025-11-07\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0005643227},{\"date\":\"2025-11-10\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0184718385},{\"date\":\"2025-11-11\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0053064053},{\"date\":\"2025-11-12\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0048450948},{\"date\":\"2025-11-13\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0153668241},{\"date\":\"2025-11-14\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0136956305},{\"date\":\"2025-11-17\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0052824853},{\"date\":\"2025-11-18\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0269870099},{\"date\":\"2025-11-19\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.013512691},{\"date\":\"2025-11-20\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0160013163},{\"date\":\"2025-11-21\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0131889723},{\"date\":\"2025-11-24\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0039820385},{\"date\":\"2025-11-25\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0063080169},{\"date\":\"2025-11-26\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0178410449},{\"date\":\"2025-11-28\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0134088568},{\"date\":\"2025-12-01\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0107111644},{\"date\":\"2025-12-02\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0066976209},{\"date\":\"2025-12-03\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0250408163},{\"date\":\"2025-12-04\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0065099533},{\"date\":\"2025-12-05\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0048248898},{\"date\":\"2025-12-08\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.016267903},{\"date\":\"2025-12-09\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0020365769},{\"date\":\"2025-12-10\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0273566115},{\"date\":\"2025-12-11\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0102599465},{\"date\":\"2025-12-12\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0102178005},{\"date\":\"2025-12-15\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.00775291},{\"date\":\"2025-12-16\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0033065162},{\"date\":\"2025-12-17\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0005667625},{\"date\":\"2025-12-18\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0165084432},{\"date\":\"2025-12-19\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0040084301},{\"date\":\"2025-12-22\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0020579519},{\"date\":\"2025-12-23\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0039800379},{\"date\":\"2025-12-24\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0024032043},{\"date\":\"2025-12-26\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0006352199},{\"date\":\"2025-12-29\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0012507433},{\"date\":\"2025-12-30\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0007801273},{\"date\":\"2025-12-31\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0079182736},{\"date\":\"2026-01-02\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.022083454},{\"date\":\"2026-01-05\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.000190299},{\"date\":\"2026-01-06\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0119699693},{\"date\":\"2026-01-07\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0103655096},{\"date\":\"2026-01-08\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0110865204},{\"date\":\"2026-01-09\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0024471356},{\"date\":\"2026-01-12\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0043815724},{\"date\":\"2026-01-13\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0136426506},{\"date\":\"2026-01-14\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0239870822},{\"date\":\"2026-01-15\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.005921024},{\"date\":\"2026-01-16\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0070074016},{\"date\":\"2026-01-20\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0116122298},{\"date\":\"2026-01-21\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":-0.0229032826},{\"date\":\"2026-01-22\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0158294116},{\"date\":\"2026-01-23\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.032827947},{\"date\":\"2026-01-26\",\"symbol\":\"MSFT\",\"metric\":\"return\",\"value\":0.0092928426},{\"date\":\"2025-07-31\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":null},{\"date\":\"2025-08-01\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0233342705},{\"date\":\"2025-08-04\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.036154289},{\"date\":\"2025-08-05\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0096677409},{\"date\":\"2025-08-06\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.006508079},{\"date\":\"2025-08-07\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0075250836},{\"date\":\"2025-08-08\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0106777317},{\"date\":\"2025-08-11\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0035033939},{\"date\":\"2025-08-12\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.006042628},{\"date\":\"2025-08-13\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0085726766},{\"date\":\"2025-08-14\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0023682326},{\"date\":\"2025-08-15\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0086263736},{\"date\":\"2025-08-18\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0086460123},{\"date\":\"2025-08-19\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0350019232},{\"date\":\"2025-08-20\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0013665869},{\"date\":\"2025-08-21\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0023947999},{\"date\":\"2025-08-22\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0172039323},{\"date\":\"2025-08-25\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0102264427},{\"date\":\"2025-08-26\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0109016074},{\"date\":\"2025-08-27\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0009353508},{\"date\":\"2025-08-28\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0078753167},{\"date\":\"2025-08-29\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0332500694},{\"date\":\"2025-09-02\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0195222784},{\"date\":\"2025-09-03\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0009369876},{\"date\":\"2025-09-04\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0060961313},{\"date\":\"2025-09-05\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0270333256},{\"date\":\"2025-09-08\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0077245509},{\"date\":\"2025-09-09\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0145582031},{\"date\":\"2025-09-10\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0384795596},{\"date\":\"2025-09-11\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.000845976},{\"date\":\"2025-09-12\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0036689998},{\"date\":\"2025-09-15\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0003936786},{\"date\":\"2025-09-16\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0161471813},{\"date\":\"2025-09-17\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.02624807},{\"date\":\"2025-09-18\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0349424477},{\"date\":\"2025-09-19\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0024399932},{\"date\":\"2025-09-22\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0392845013},{\"date\":\"2025-09-23\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0282135076},{\"date\":\"2025-09-24\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0081829391},{\"date\":\"2025-09-25\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0040687161},{\"date\":\"2025-09-26\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0028140477},{\"date\":\"2025-09-29\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0205410259},{\"date\":\"2025-09-30\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0260118786},{\"date\":\"2025-10-01\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0035375462},{\"date\":\"2025-10-02\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0088126903},{\"date\":\"2025-10-03\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0067238458},{\"date\":\"2025-10-06\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0110868291},{\"date\":\"2025-10-07\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0026949819},{\"date\":\"2025-10-08\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.021996433},{\"date\":\"2025-10-09\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0182971973},{\"date\":\"2025-10-10\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0488678853},{\"date\":\"2025-10-13\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0281736282},{\"date\":\"2025-10-14\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0440231533},{\"date\":\"2025-10-15\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0011109877},{\"date\":\"2025-10-16\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.011011011},{\"date\":\"2025-10-17\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0077557756},{\"date\":\"2025-10-20\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0031657661},{\"date\":\"2025-10-21\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0081038165},{\"date\":\"2025-10-22\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0048578526},{\"date\":\"2025-10-23\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0104288012},{\"date\":\"2025-10-24\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0225089212},{\"date\":\"2025-10-27\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0280805369},{\"date\":\"2025-10-28\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0498224358},{\"date\":\"2025-10-29\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0298975226},{\"date\":\"2025-10-30\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.020045404},{\"date\":\"2025-10-31\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0019716088},{\"date\":\"2025-11-03\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0216811537},{\"date\":\"2025-11-04\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0395900807},{\"date\":\"2025-11-05\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.017515603},{\"date\":\"2025-11-06\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0365266393},{\"date\":\"2025-11-07\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0003722018},{\"date\":\"2025-11-10\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0579355799},{\"date\":\"2025-11-11\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0295920418},{\"date\":\"2025-11-12\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0033134869},{\"date\":\"2025-11-13\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0358119614},{\"date\":\"2025-11-14\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0177147444},{\"date\":\"2025-11-17\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0187736643},{\"date\":\"2025-11-18\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0280829626},{\"date\":\"2025-11-19\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0284532672},{\"date\":\"2025-11-20\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0315264597},{\"date\":\"2025-11-21\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0097436749},{\"date\":\"2025-11-24\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0205176944},{\"date\":\"2025-11-25\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0259121288},{\"date\":\"2025-11-26\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0137225128},{\"date\":\"2025-11-28\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0180859917},{\"date\":\"2025-12-01\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0164981072},{\"date\":\"2025-12-02\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0085598355},{\"date\":\"2025-12-03\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0103058694},{\"date\":\"2025-12-04\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0211604856},{\"date\":\"2025-12-05\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0052895627},{\"date\":\"2025-12-08\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0172139685},{\"date\":\"2025-12-09\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0031258421},{\"date\":\"2025-12-10\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0064334757},{\"date\":\"2025-12-11\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0155076722},{\"date\":\"2025-12-12\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0326645664},{\"date\":\"2025-12-15\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0072563136},{\"date\":\"2025-12-16\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0081116342},{\"date\":\"2025-12-17\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0381498987},{\"date\":\"2025-12-18\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0187200187},{\"date\":\"2025-12-19\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0393361663},{\"date\":\"2025-12-22\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0149179513},{\"date\":\"2025-12-23\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0300506288},{\"date\":\"2025-12-24\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0031710798},{\"date\":\"2025-12-26\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.010179736},{\"date\":\"2025-12-29\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0121240749},{\"date\":\"2025-12-30\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0036127935},{\"date\":\"2025-12-31\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0055454836},{\"date\":\"2026-01-02\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0126005362},{\"date\":\"2026-01-05\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0038655017},{\"date\":\"2026-01-06\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0046778652},{\"date\":\"2026-01-07\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0099871822},{\"date\":\"2026-01-08\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0215218656},{\"date\":\"2026-01-09\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0009727626},{\"date\":\"2026-01-12\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0004327599},{\"date\":\"2026-01-13\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0047042284},{\"date\":\"2026-01-14\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0143695172},{\"date\":\"2026-01-15\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.021349787},{\"date\":\"2026-01-16\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0043838546},{\"date\":\"2026-01-20\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0438167857},{\"date\":\"2026-01-21\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0294827877},{\"date\":\"2026-01-22\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0082915121},{\"date\":\"2026-01-23\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":0.0153105388},{\"date\":\"2026-01-26\",\"symbol\":\"NVDA\",\"metric\":\"return\",\"value\":-0.0063942026},{\"date\":\"2025-07-31\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":null},{\"date\":\"2025-08-01\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":null},{\"date\":\"2025-08-04\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0210799972},{\"date\":\"2025-08-05\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0156022108},{\"date\":\"2025-08-06\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0318384462},{\"date\":\"2025-08-07\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0296975929},{\"date\":\"2025-08-08\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0292969959},{\"date\":\"2025-08-11\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0284244991},{\"date\":\"2025-08-12\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0263320844},{\"date\":\"2025-08-13\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0246495155},{\"date\":\"2025-08-14\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0237732587},{\"date\":\"2025-08-15\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0231262644},{\"date\":\"2025-08-18\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0223855889},{\"date\":\"2025-08-19\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0216357948},{\"date\":\"2025-08-20\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0221083278},{\"date\":\"2025-08-21\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0215036722},{\"date\":\"2025-08-22\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0208497906},{\"date\":\"2025-08-25\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0202984159},{\"date\":\"2025-08-26\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0197137526},{\"date\":\"2025-08-27\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.019158893},{\"date\":\"2025-08-28\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0186614949},{\"date\":\"2025-08-29\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0173087321},{\"date\":\"2025-09-02\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0177442141},{\"date\":\"2025-09-03\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0189724375},{\"date\":\"2025-09-04\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0161089184},{\"date\":\"2025-09-05\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0149679631},{\"date\":\"2025-09-08\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0122250064},{\"date\":\"2025-09-09\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0125946419},{\"date\":\"2025-09-10\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.014478458},{\"date\":\"2025-09-11\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0143812273},{\"date\":\"2025-09-12\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0149316116},{\"date\":\"2025-09-15\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0150631274},{\"date\":\"2025-09-16\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0150671567},{\"date\":\"2025-09-17\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0150544964},{\"date\":\"2025-09-18\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0142692225},{\"date\":\"2025-09-19\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0155684321},{\"date\":\"2025-09-22\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0177418124},{\"date\":\"2025-09-23\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0178598706},{\"date\":\"2025-09-24\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0181097338},{\"date\":\"2025-09-25\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0183456145},{\"date\":\"2025-09-26\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0184901925},{\"date\":\"2025-09-29\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0185399808},{\"date\":\"2025-09-30\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0182232027},{\"date\":\"2025-10-01\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0165108643},{\"date\":\"2025-10-02\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0165192997},{\"date\":\"2025-10-03\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0164926212},{\"date\":\"2025-10-06\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0164140515},{\"date\":\"2025-10-07\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0158589488},{\"date\":\"2025-10-08\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0132711511},{\"date\":\"2025-10-09\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0140161519},{\"date\":\"2025-10-10\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.016235928},{\"date\":\"2025-10-13\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0161968039},{\"date\":\"2025-10-14\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0161775575},{\"date\":\"2025-10-15\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0162027982},{\"date\":\"2025-10-16\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0162817348},{\"date\":\"2025-10-17\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0152853784},{\"date\":\"2025-10-20\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0147741587},{\"date\":\"2025-10-21\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0146614838},{\"date\":\"2025-10-22\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0150626646},{\"date\":\"2025-10-23\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0145649028},{\"date\":\"2025-10-24\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.014721624},{\"date\":\"2025-10-27\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0153939039},{\"date\":\"2025-10-28\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0153944781},{\"date\":\"2025-10-29\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0153943349},{\"date\":\"2025-10-30\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0153909452},{\"date\":\"2025-10-31\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0154604043},{\"date\":\"2025-11-03\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0154534538},{\"date\":\"2025-11-04\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0154358387},{\"date\":\"2025-11-05\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0154215931},{\"date\":\"2025-11-06\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0148660004},{\"date\":\"2025-11-07\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0121434433},{\"date\":\"2025-11-10\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0120827714},{\"date\":\"2025-11-11\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0126373055},{\"date\":\"2025-11-12\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0129085142},{\"date\":\"2025-11-13\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0126830063},{\"date\":\"2025-11-14\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0122924408},{\"date\":\"2025-11-17\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0100956311},{\"date\":\"2025-11-18\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0100962372},{\"date\":\"2025-11-19\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0092390433},{\"date\":\"2025-11-20\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0095156398},{\"date\":\"2025-11-21\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.010077339},{\"date\":\"2025-11-24\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0094512291},{\"date\":\"2025-11-25\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0094647134},{\"date\":\"2025-11-26\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0094624118},{\"date\":\"2025-11-28\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.009426076},{\"date\":\"2025-12-01\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0098217825},{\"date\":\"2025-12-02\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0098405634},{\"date\":\"2025-12-03\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0101052594},{\"date\":\"2025-12-04\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0106273855},{\"date\":\"2025-12-05\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0107883965},{\"date\":\"2025-12-08\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0107421753},{\"date\":\"2025-12-09\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.010764931},{\"date\":\"2025-12-10\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.009740394},{\"date\":\"2025-12-11\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0096304914},{\"date\":\"2025-12-12\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0096083899},{\"date\":\"2025-12-15\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0102407369},{\"date\":\"2025-12-16\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0092659434},{\"date\":\"2025-12-17\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0096115959},{\"date\":\"2025-12-18\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0095805735},{\"date\":\"2025-12-19\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0093741273},{\"date\":\"2025-12-22\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0086441229},{\"date\":\"2025-12-23\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0078544144},{\"date\":\"2025-12-24\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0079066038},{\"date\":\"2025-12-26\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0078842909},{\"date\":\"2025-12-29\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.007798231},{\"date\":\"2025-12-30\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0068132592},{\"date\":\"2025-12-31\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0061399559},{\"date\":\"2026-01-02\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.006047322},{\"date\":\"2026-01-05\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0062017791},{\"date\":\"2026-01-06\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0070993915},{\"date\":\"2026-01-07\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0071779622},{\"date\":\"2026-01-08\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.007186076},{\"date\":\"2026-01-09\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0069519778},{\"date\":\"2026-01-12\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0071238425},{\"date\":\"2026-01-13\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0072070174},{\"date\":\"2026-01-14\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0066584659},{\"date\":\"2026-01-15\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0066323481},{\"date\":\"2026-01-16\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0066489542},{\"date\":\"2026-01-20\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0095923262},{\"date\":\"2026-01-21\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0095088839},{\"date\":\"2026-01-22\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0095860108},{\"date\":\"2026-01-23\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0093590396},{\"date\":\"2026-01-26\",\"symbol\":\"AAPL\",\"metric\":\"vol20\",\"value\":0.0119528553},{\"date\":\"2025-07-31\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":null},{\"date\":\"2025-08-01\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":null},{\"date\":\"2025-08-04\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0482676594},{\"date\":\"2025-08-05\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0480120663},{\"date\":\"2025-08-06\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0522594415},{\"date\":\"2025-08-07\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0457843664},{\"date\":\"2025-08-08\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.041042654},{\"date\":\"2025-08-11\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0374700306},{\"date\":\"2025-08-12\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0348100356},{\"date\":\"2025-08-13\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0332586331},{\"date\":\"2025-08-14\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0330172735},{\"date\":\"2025-08-15\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0313245489},{\"date\":\"2025-08-18\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0298772045},{\"date\":\"2025-08-19\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0288872834},{\"date\":\"2025-08-20\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0281143876},{\"date\":\"2025-08-21\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0271286301},{\"date\":\"2025-08-22\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.027571114},{\"date\":\"2025-08-25\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.026704735},{\"date\":\"2025-08-26\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0259301062},{\"date\":\"2025-08-27\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0252074985},{\"date\":\"2025-08-28\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0246730342},{\"date\":\"2025-08-29\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0156152879},{\"date\":\"2025-09-02\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.015711475},{\"date\":\"2025-09-03\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0156329023},{\"date\":\"2025-09-04\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0159955681},{\"date\":\"2025-09-05\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0164520388},{\"date\":\"2025-09-08\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0166687198},{\"date\":\"2025-09-09\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0165935691},{\"date\":\"2025-09-10\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0185464789},{\"date\":\"2025-09-11\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0183499306},{\"date\":\"2025-09-12\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.017279889},{\"date\":\"2025-09-15\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0175969054},{\"date\":\"2025-09-16\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0177688015},{\"date\":\"2025-09-17\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0175815291},{\"date\":\"2025-09-18\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0170006683},{\"date\":\"2025-09-19\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0168365287},{\"date\":\"2025-09-22\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0158921011},{\"date\":\"2025-09-23\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0172666196},{\"date\":\"2025-09-24\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0172293111},{\"date\":\"2025-09-25\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0172888387},{\"date\":\"2025-09-26\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0171706697},{\"date\":\"2025-09-29\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0172886659},{\"date\":\"2025-09-30\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0171239982},{\"date\":\"2025-10-01\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0171536225},{\"date\":\"2025-10-02\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.013922472},{\"date\":\"2025-10-03\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.013874161},{\"date\":\"2025-10-06\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0134109831},{\"date\":\"2025-10-07\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0131554197},{\"date\":\"2025-10-08\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0118051},{\"date\":\"2025-10-09\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0121160109},{\"date\":\"2025-10-10\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0163788617},{\"date\":\"2025-10-13\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0165372881},{\"date\":\"2025-10-14\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0165031748},{\"date\":\"2025-10-15\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0164301087},{\"date\":\"2025-10-16\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0164285099},{\"date\":\"2025-10-17\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0164030394},{\"date\":\"2025-10-20\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0167104552},{\"date\":\"2025-10-21\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0164598707},{\"date\":\"2025-10-22\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0169845074},{\"date\":\"2025-10-23\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0171536773},{\"date\":\"2025-10-24\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0173524797},{\"date\":\"2025-10-27\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0173977552},{\"date\":\"2025-10-28\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0172266826},{\"date\":\"2025-10-29\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0172248622},{\"date\":\"2025-10-30\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0188053793},{\"date\":\"2025-10-31\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0281757227},{\"date\":\"2025-11-03\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0292042838},{\"date\":\"2025-11-04\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0297667525},{\"date\":\"2025-11-05\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0296916869},{\"date\":\"2025-11-06\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0306226465},{\"date\":\"2025-11-07\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0279019427},{\"date\":\"2025-11-10\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.02788693},{\"date\":\"2025-11-11\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0273706034},{\"date\":\"2025-11-12\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0279370629},{\"date\":\"2025-11-13\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0288415249},{\"date\":\"2025-11-14\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0289895191},{\"date\":\"2025-11-17\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0290088179},{\"date\":\"2025-11-18\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0304496412},{\"date\":\"2025-11-19\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0301228631},{\"date\":\"2025-11-20\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0305168262},{\"date\":\"2025-11-21\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0305771262},{\"date\":\"2025-11-24\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0309967507},{\"date\":\"2025-11-25\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0310979791},{\"date\":\"2025-11-26\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0310886475},{\"date\":\"2025-11-28\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0303391102},{\"date\":\"2025-12-01\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0210015925},{\"date\":\"2025-12-02\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0185862375},{\"date\":\"2025-12-03\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0183096925},{\"date\":\"2025-12-04\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0183844147},{\"date\":\"2025-12-05\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0174981113},{\"date\":\"2025-12-08\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0174875509},{\"date\":\"2025-12-09\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0169730214},{\"date\":\"2025-12-10\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0175616445},{\"date\":\"2025-12-11\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.017163449},{\"date\":\"2025-12-12\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0165838061},{\"date\":\"2025-12-15\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0167310342},{\"date\":\"2025-12-16\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0166937712},{\"date\":\"2025-12-17\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0134836239},{\"date\":\"2025-12-18\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0146000973},{\"date\":\"2025-12-19\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0132633545},{\"date\":\"2025-12-22\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0128682652},{\"date\":\"2025-12-23\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0121332302},{\"date\":\"2025-12-24\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0117015902},{\"date\":\"2025-12-26\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.011682132},{\"date\":\"2025-12-29\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.010989649},{\"date\":\"2025-12-30\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0109790176},{\"date\":\"2025-12-31\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0110735069},{\"date\":\"2026-01-02\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0116642511},{\"date\":\"2026-01-05\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0130543862},{\"date\":\"2026-01-06\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0149808669},{\"date\":\"2026-01-07\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0146128783},{\"date\":\"2026-01-08\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0150635008},{\"date\":\"2026-01-09\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.014754214},{\"date\":\"2026-01-12\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0146691819},{\"date\":\"2026-01-13\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0145185163},{\"date\":\"2026-01-14\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0152230596},{\"date\":\"2026-01-15\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0152215227},{\"date\":\"2026-01-16\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0150632084},{\"date\":\"2026-01-20\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0164562783},{\"date\":\"2026-01-21\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0164524576},{\"date\":\"2026-01-22\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0166574689},{\"date\":\"2026-01-23\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0168867695},{\"date\":\"2026-01-26\",\"symbol\":\"AMZN\",\"metric\":\"vol20\",\"value\":0.0169195857},{\"date\":\"2025-07-31\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":null},{\"date\":\"2025-08-01\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":null},{\"date\":\"2025-08-04\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0322782869},{\"date\":\"2025-08-05\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0235889568},{\"date\":\"2025-08-06\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0192953892},{\"date\":\"2025-08-07\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0167779136},{\"date\":\"2025-08-08\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0170905009},{\"date\":\"2025-08-11\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0160812033},{\"date\":\"2025-08-12\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0149890206},{\"date\":\"2025-08-13\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0147944803},{\"date\":\"2025-08-14\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0139514895},{\"date\":\"2025-08-15\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0132390562},{\"date\":\"2025-08-18\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0128084133},{\"date\":\"2025-08-19\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0129039075},{\"date\":\"2025-08-20\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0130335513},{\"date\":\"2025-08-21\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0125605025},{\"date\":\"2025-08-22\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.014134017},{\"date\":\"2025-08-25\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0137931672},{\"date\":\"2025-08-26\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0136514601},{\"date\":\"2025-08-27\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0132812733},{\"date\":\"2025-08-28\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0134030345},{\"date\":\"2025-08-29\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0126014391},{\"date\":\"2025-09-02\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0114349177},{\"date\":\"2025-09-03\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0225152312},{\"date\":\"2025-09-04\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0225158907},{\"date\":\"2025-09-05\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0224704649},{\"date\":\"2025-09-08\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0223148275},{\"date\":\"2025-09-09\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0224631315},{\"date\":\"2025-09-10\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0225866561},{\"date\":\"2025-09-11\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0223205555},{\"date\":\"2025-09-12\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0223611394},{\"date\":\"2025-09-15\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0237337322},{\"date\":\"2025-09-16\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0237301732},{\"date\":\"2025-09-17\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0236035631},{\"date\":\"2025-09-18\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0230226143},{\"date\":\"2025-09-19\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0229079578},{\"date\":\"2025-09-22\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0229020378},{\"date\":\"2025-09-23\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0231085978},{\"date\":\"2025-09-24\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0236690912},{\"date\":\"2025-09-25\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0238408084},{\"date\":\"2025-09-26\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0237222244},{\"date\":\"2025-09-29\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0240633289},{\"date\":\"2025-09-30\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0239662842},{\"date\":\"2025-10-01\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0135699197},{\"date\":\"2025-10-02\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0135375603},{\"date\":\"2025-10-03\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0134094913},{\"date\":\"2025-10-06\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0139503035},{\"date\":\"2025-10-07\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0139213257},{\"date\":\"2025-10-08\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0139682413},{\"date\":\"2025-10-09\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0142702519},{\"date\":\"2025-10-10\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0150029289},{\"date\":\"2025-10-13\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0130897981},{\"date\":\"2025-10-14\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0131758026},{\"date\":\"2025-10-15\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0141299547},{\"date\":\"2025-10-16\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0139529071},{\"date\":\"2025-10-17\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0138375785},{\"date\":\"2025-10-20\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0139812754},{\"date\":\"2025-10-21\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.015008882},{\"date\":\"2025-10-22\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0144387743},{\"date\":\"2025-10-23\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0143877614},{\"date\":\"2025-10-24\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.015477749},{\"date\":\"2025-10-27\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0168307087},{\"date\":\"2025-10-28\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.016918989},{\"date\":\"2025-10-29\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0175932245},{\"date\":\"2025-10-30\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0180967795},{\"date\":\"2025-10-31\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0180883447},{\"date\":\"2025-11-03\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0178078062},{\"date\":\"2025-11-04\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0180494603},{\"date\":\"2025-11-05\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0182920891},{\"date\":\"2025-11-06\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0177279976},{\"date\":\"2025-11-07\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0177504871},{\"date\":\"2025-11-10\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0184243925},{\"date\":\"2025-11-11\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0184377098},{\"date\":\"2025-11-12\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0189075921},{\"date\":\"2025-11-13\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0204690551},{\"date\":\"2025-11-14\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0206688924},{\"date\":\"2025-11-17\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0214440176},{\"date\":\"2025-11-18\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0204259377},{\"date\":\"2025-11-19\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0210814678},{\"date\":\"2025-11-20\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0215166273},{\"date\":\"2025-11-21\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0219935946},{\"date\":\"2025-11-24\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0245460823},{\"date\":\"2025-11-25\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0243115238},{\"date\":\"2025-11-26\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0243942137},{\"date\":\"2025-11-28\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0240964447},{\"date\":\"2025-12-01\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0246032987},{\"date\":\"2025-12-02\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0246014979},{\"date\":\"2025-12-03\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.02376642},{\"date\":\"2025-12-04\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0235989006},{\"date\":\"2025-12-05\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0236091061},{\"date\":\"2025-12-08\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0237397353},{\"date\":\"2025-12-09\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0223776043},{\"date\":\"2025-12-10\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0224064892},{\"date\":\"2025-12-11\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.022896906},{\"date\":\"2025-12-12\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0218514124},{\"date\":\"2025-12-15\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0217349522},{\"date\":\"2025-12-16\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0210082233},{\"date\":\"2025-12-17\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0224748879},{\"date\":\"2025-12-18\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0219038879},{\"date\":\"2025-12-19\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0218696632},{\"date\":\"2025-12-22\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0205882904},{\"date\":\"2025-12-23\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0151309774},{\"date\":\"2025-12-24\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0146678494},{\"date\":\"2025-12-26\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0144993805},{\"date\":\"2025-12-29\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0144966648},{\"date\":\"2025-12-30\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0140244094},{\"date\":\"2025-12-31\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0140183553},{\"date\":\"2026-01-02\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0138216726},{\"date\":\"2026-01-05\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0137960804},{\"date\":\"2026-01-06\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0135988672},{\"date\":\"2026-01-07\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.013691827},{\"date\":\"2026-01-08\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0136931127},{\"date\":\"2026-01-09\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0136849627},{\"date\":\"2026-01-12\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0123857957},{\"date\":\"2026-01-13\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0121462907},{\"date\":\"2026-01-14\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.012063245},{\"date\":\"2026-01-15\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0122504885},{\"date\":\"2026-01-16\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0093520836},{\"date\":\"2026-01-20\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0108783424},{\"date\":\"2026-01-21\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0111717371},{\"date\":\"2026-01-22\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0111330685},{\"date\":\"2026-01-23\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.01105927},{\"date\":\"2026-01-26\",\"symbol\":\"GOOGL\",\"metric\":\"vol20\",\"value\":0.0114672233},{\"date\":\"2025-07-31\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":null},{\"date\":\"2025-08-01\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":null},{\"date\":\"2025-08-04\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0462764953},{\"date\":\"2025-08-05\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0345214877},{\"date\":\"2025-08-06\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0291808028},{\"date\":\"2025-08-07\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0259317489},{\"date\":\"2025-08-08\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0237528213},{\"date\":\"2025-08-11\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0217305562},{\"date\":\"2025-08-12\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.023204552},{\"date\":\"2025-08-13\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0223073609},{\"date\":\"2025-08-14\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0210366597},{\"date\":\"2025-08-15\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0199729978},{\"date\":\"2025-08-18\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0202941037},{\"date\":\"2025-08-19\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0202250515},{\"date\":\"2025-08-20\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0194478293},{\"date\":\"2025-08-21\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0188934235},{\"date\":\"2025-08-22\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0192207178},{\"date\":\"2025-08-25\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0186109978},{\"date\":\"2025-08-26\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0180645683},{\"date\":\"2025-08-27\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0176433159},{\"date\":\"2025-08-28\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0172368126},{\"date\":\"2025-08-29\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0162656926},{\"date\":\"2025-09-02\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0139255428},{\"date\":\"2025-09-03\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0135682392},{\"date\":\"2025-09-04\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.013832043},{\"date\":\"2025-09-05\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0136185516},{\"date\":\"2025-09-08\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.013401372},{\"date\":\"2025-09-09\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0140130081},{\"date\":\"2025-09-10\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0124512631},{\"date\":\"2025-09-11\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0122197531},{\"date\":\"2025-09-12\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0123159209},{\"date\":\"2025-09-15\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0126385538},{\"date\":\"2025-09-16\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0123226465},{\"date\":\"2025-09-17\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0113159394},{\"date\":\"2025-09-18\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.011240027},{\"date\":\"2025-09-19\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0108312544},{\"date\":\"2025-09-22\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0106935386},{\"date\":\"2025-09-23\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.011103695},{\"date\":\"2025-09-24\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0112050509},{\"date\":\"2025-09-25\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0115836552},{\"date\":\"2025-09-26\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0116298792},{\"date\":\"2025-09-29\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0109950054},{\"date\":\"2025-09-30\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0112945774},{\"date\":\"2025-10-01\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0124050394},{\"date\":\"2025-10-02\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0122542791},{\"date\":\"2025-10-03\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0130347989},{\"date\":\"2025-10-06\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0132140038},{\"date\":\"2025-10-07\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.012330099},{\"date\":\"2025-10-08\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0120339287},{\"date\":\"2025-10-09\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0131821159},{\"date\":\"2025-10-10\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0154691922},{\"date\":\"2025-10-13\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.015620828},{\"date\":\"2025-10-14\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0148015384},{\"date\":\"2025-10-15\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0152912402},{\"date\":\"2025-10-16\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0151431124},{\"date\":\"2025-10-17\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0153466392},{\"date\":\"2025-10-20\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0160386619},{\"date\":\"2025-10-21\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0158545538},{\"date\":\"2025-10-22\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0157390537},{\"date\":\"2025-10-23\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0154082563},{\"date\":\"2025-10-24\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0154124278},{\"date\":\"2025-10-27\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0158802807},{\"date\":\"2025-10-28\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0155945787},{\"date\":\"2025-10-29\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0145015587},{\"date\":\"2025-10-30\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0294460469},{\"date\":\"2025-10-31\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0296142282},{\"date\":\"2025-11-03\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0296097942},{\"date\":\"2025-11-04\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0297071036},{\"date\":\"2025-11-05\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0299066636},{\"date\":\"2025-11-06\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0295331664},{\"date\":\"2025-11-07\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0287543725},{\"date\":\"2025-11-10\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0288102594},{\"date\":\"2025-11-11\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0287973146},{\"date\":\"2025-11-12\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0289041763},{\"date\":\"2025-11-13\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0289772552},{\"date\":\"2025-11-14\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0288329461},{\"date\":\"2025-11-17\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0280255417},{\"date\":\"2025-11-18\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0279157098},{\"date\":\"2025-11-19\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0278206228},{\"date\":\"2025-11-20\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0277684346},{\"date\":\"2025-11-21\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0278598931},{\"date\":\"2025-11-24\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0287996977},{\"date\":\"2025-11-25\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0306363365},{\"date\":\"2025-11-26\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0305905932},{\"date\":\"2025-11-28\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0187882874},{\"date\":\"2025-12-01\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0179382583},{\"date\":\"2025-12-02\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0176622796},{\"date\":\"2025-12-03\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.017451605},{\"date\":\"2025-12-04\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0187869615},{\"date\":\"2025-12-05\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0178042367},{\"date\":\"2025-12-08\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0180849421},{\"date\":\"2025-12-09\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.01828051},{\"date\":\"2025-12-10\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.018374015},{\"date\":\"2025-12-11\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0168847062},{\"date\":\"2025-12-12\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0172855299},{\"date\":\"2025-12-15\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.017276475},{\"date\":\"2025-12-16\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0170640745},{\"date\":\"2025-12-17\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0172537803},{\"date\":\"2025-12-18\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0172663904},{\"date\":\"2025-12-19\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0174893775},{\"date\":\"2025-12-22\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.017479422},{\"date\":\"2025-12-23\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0163685681},{\"date\":\"2025-12-24\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0143407198},{\"date\":\"2025-12-26\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0144051484},{\"date\":\"2025-12-29\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0137236462},{\"date\":\"2025-12-30\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0136011026},{\"date\":\"2025-12-31\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0136817641},{\"date\":\"2026-01-02\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0138486716},{\"date\":\"2026-01-05\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0118169264},{\"date\":\"2026-01-06\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0110578412},{\"date\":\"2026-01-07\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0115514816},{\"date\":\"2026-01-08\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0111334748},{\"date\":\"2026-01-09\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0111763679},{\"date\":\"2026-01-12\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0117821827},{\"date\":\"2026-01-13\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0120298502},{\"date\":\"2026-01-14\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0130190558},{\"date\":\"2026-01-15\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0126479781},{\"date\":\"2026-01-16\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0124782265},{\"date\":\"2026-01-20\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0120663856},{\"date\":\"2026-01-21\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0127680432},{\"date\":\"2026-01-22\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0185118023},{\"date\":\"2026-01-23\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0189093559},{\"date\":\"2026-01-26\",\"symbol\":\"META\",\"metric\":\"vol20\",\"value\":0.0194673033},{\"date\":\"2025-07-31\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":null},{\"date\":\"2025-08-01\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":null},{\"date\":\"2025-08-04\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.028005915},{\"date\":\"2025-08-05\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0220822206},{\"date\":\"2025-08-06\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0180545513},{\"date\":\"2025-08-07\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.015732913},{\"date\":\"2025-08-08\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0143597626},{\"date\":\"2025-08-11\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0131578234},{\"date\":\"2025-08-12\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0136480769},{\"date\":\"2025-08-13\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0137652656},{\"date\":\"2025-08-14\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0131300398},{\"date\":\"2025-08-15\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0124774293},{\"date\":\"2025-08-18\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0119440179},{\"date\":\"2025-08-19\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0118834922},{\"date\":\"2025-08-20\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0114805737},{\"date\":\"2025-08-21\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0110811942},{\"date\":\"2025-08-22\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0109661582},{\"date\":\"2025-08-25\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0106404738},{\"date\":\"2025-08-26\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0103269806},{\"date\":\"2025-08-27\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0104433467},{\"date\":\"2025-08-28\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0103328918},{\"date\":\"2025-08-29\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0097227667},{\"date\":\"2025-09-02\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0079861521},{\"date\":\"2025-09-03\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0075013778},{\"date\":\"2025-09-04\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.007627005},{\"date\":\"2025-09-05\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0092496268},{\"date\":\"2025-09-08\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0094062529},{\"date\":\"2025-09-09\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0094175086},{\"date\":\"2025-09-10\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0087227125},{\"date\":\"2025-09-11\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0081383958},{\"date\":\"2025-09-12\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0091799756},{\"date\":\"2025-09-15\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0095090626},{\"date\":\"2025-09-16\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0098068284},{\"date\":\"2025-09-17\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0092849065},{\"date\":\"2025-09-18\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0091246883},{\"date\":\"2025-09-19\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.009979721},{\"date\":\"2025-09-22\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0100769981},{\"date\":\"2025-09-23\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0102692943},{\"date\":\"2025-09-24\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0102054426},{\"date\":\"2025-09-25\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0101130523},{\"date\":\"2025-09-26\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0102230222},{\"date\":\"2025-09-29\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0102014475},{\"date\":\"2025-09-30\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0102332746},{\"date\":\"2025-10-01\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0102416465},{\"date\":\"2025-10-02\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0103959016},{\"date\":\"2025-10-03\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0083486253},{\"date\":\"2025-10-06\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0093839426},{\"date\":\"2025-10-07\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0097301749},{\"date\":\"2025-10-08\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0097263647},{\"date\":\"2025-10-09\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0098538853},{\"date\":\"2025-10-10\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0105115728},{\"date\":\"2025-10-13\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0103148939},{\"date\":\"2025-10-14\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0099134985},{\"date\":\"2025-10-15\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0099088995},{\"date\":\"2025-10-16\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0099180444},{\"date\":\"2025-10-17\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0089912384},{\"date\":\"2025-10-20\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0089778987},{\"date\":\"2025-10-21\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0086392113},{\"date\":\"2025-10-22\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0087018487},{\"date\":\"2025-10-23\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0085421486},{\"date\":\"2025-10-24\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.008434687},{\"date\":\"2025-10-27\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0089345602},{\"date\":\"2025-10-28\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0097743835},{\"date\":\"2025-10-29\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0097977074},{\"date\":\"2025-10-30\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0118836302},{\"date\":\"2025-10-31\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0124041305},{\"date\":\"2025-11-03\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0113178806},{\"date\":\"2025-11-04\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.011220821},{\"date\":\"2025-11-05\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0115728362},{\"date\":\"2025-11-06\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0122575543},{\"date\":\"2025-11-07\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0113695771},{\"date\":\"2025-11-10\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.012110095},{\"date\":\"2025-11-11\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0121844364},{\"date\":\"2025-11-12\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.012241021},{\"date\":\"2025-11-13\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0126906057},{\"date\":\"2025-11-14\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0130634666},{\"date\":\"2025-11-17\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0130160941},{\"date\":\"2025-11-18\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0142457772},{\"date\":\"2025-11-19\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0143323897},{\"date\":\"2025-11-20\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.01458728},{\"date\":\"2025-11-21\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0145306036},{\"date\":\"2025-11-24\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0139211361},{\"date\":\"2025-11-25\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0129151429},{\"date\":\"2025-11-26\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0139588686},{\"date\":\"2025-11-28\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0133559516},{\"date\":\"2025-12-01\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0131824757},{\"date\":\"2025-12-02\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.01335507},{\"date\":\"2025-12-03\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.014271374},{\"date\":\"2025-12-04\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.01421574},{\"date\":\"2025-12-05\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0136902394},{\"date\":\"2025-12-08\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0142401843},{\"date\":\"2025-12-09\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0135515986},{\"date\":\"2025-12-10\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0146477275},{\"date\":\"2025-12-11\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0148461745},{\"date\":\"2025-12-12\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0146562085},{\"date\":\"2025-12-15\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.014199993},{\"date\":\"2025-12-16\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0142696369},{\"date\":\"2025-12-17\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0131042175},{\"date\":\"2025-12-18\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0133896049},{\"date\":\"2025-12-19\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0128802718},{\"date\":\"2025-12-22\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0124755672},{\"date\":\"2025-12-23\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0124755455},{\"date\":\"2025-12-24\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0124253564},{\"date\":\"2025-12-26\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0117952282},{\"date\":\"2025-12-29\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0113857073},{\"date\":\"2025-12-30\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0111270796},{\"date\":\"2025-12-31\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0111533313},{\"date\":\"2026-01-02\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0108270151},{\"date\":\"2026-01-05\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0107033535},{\"date\":\"2026-01-06\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0110150772},{\"date\":\"2026-01-07\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0106161286},{\"date\":\"2026-01-08\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0108399408},{\"date\":\"2026-01-09\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0089672968},{\"date\":\"2026-01-12\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0086886845},{\"date\":\"2026-01-13\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0089185385},{\"date\":\"2026-01-14\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0102282278},{\"date\":\"2026-01-15\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0102032695},{\"date\":\"2026-01-16\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0104003834},{\"date\":\"2026-01-20\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0096878788},{\"date\":\"2026-01-21\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0104860744},{\"date\":\"2026-01-22\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0114207239},{\"date\":\"2026-01-23\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0139600511},{\"date\":\"2026-01-26\",\"symbol\":\"MSFT\",\"metric\":\"vol20\",\"value\":0.0141605633},{\"date\":\"2025-07-31\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":null},{\"date\":\"2025-08-01\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":null},{\"date\":\"2025-08-04\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0420647638},{\"date\":\"2025-08-05\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0311590574},{\"date\":\"2025-08-06\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0255871744},{\"date\":\"2025-08-07\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.02227667},{\"date\":\"2025-08-08\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0201429353},{\"date\":\"2025-08-11\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0186439644},{\"date\":\"2025-08-12\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0172847198},{\"date\":\"2025-08-13\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0166861143},{\"date\":\"2025-08-14\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0157318298},{\"date\":\"2025-08-15\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0152916303},{\"date\":\"2025-08-18\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0147286421},{\"date\":\"2025-08-19\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0174435388},{\"date\":\"2025-08-20\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0167598246},{\"date\":\"2025-08-21\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0161549822},{\"date\":\"2025-08-22\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0162550651},{\"date\":\"2025-08-25\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0159269099},{\"date\":\"2025-08-26\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0156352568},{\"date\":\"2025-08-27\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0152035567},{\"date\":\"2025-08-28\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.014936631},{\"date\":\"2025-08-29\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0159108839},{\"date\":\"2025-09-02\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0140621408},{\"date\":\"2025-09-03\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0139641005},{\"date\":\"2025-09-04\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0139510417},{\"date\":\"2025-09-05\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0148080425},{\"date\":\"2025-09-08\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0146697073},{\"date\":\"2025-09-09\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0152458988},{\"date\":\"2025-09-10\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0177825431},{\"date\":\"2025-09-11\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0177037693},{\"date\":\"2025-09-12\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0177194831},{\"date\":\"2025-09-15\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0176287328},{\"date\":\"2025-09-16\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0178148919},{\"date\":\"2025-09-17\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0170483598},{\"date\":\"2025-09-18\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0188867364},{\"date\":\"2025-09-19\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0188798745},{\"date\":\"2025-09-22\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0204767385},{\"date\":\"2025-09-23\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.021422118},{\"date\":\"2025-09-24\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0213280532},{\"date\":\"2025-09-25\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0213596558},{\"date\":\"2025-09-26\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0213087984},{\"date\":\"2025-09-29\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0203067899},{\"date\":\"2025-09-30\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0202774694},{\"date\":\"2025-10-01\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0202374429},{\"date\":\"2025-10-02\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0202553189},{\"date\":\"2025-10-03\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0190378272},{\"date\":\"2025-10-06\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0194095382},{\"date\":\"2025-10-07\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0193487609},{\"date\":\"2025-10-08\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0181242245},{\"date\":\"2025-10-09\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0183928468},{\"date\":\"2025-10-10\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0219087402},{\"date\":\"2025-10-13\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0226820057},{\"date\":\"2025-10-14\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0246964547},{\"date\":\"2025-10-15\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0238210286},{\"date\":\"2025-10-16\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0227071118},{\"date\":\"2025-10-17\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0227460227},{\"date\":\"2025-10-20\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0210045655},{\"date\":\"2025-10-21\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.020044956},{\"date\":\"2025-10-22\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0199788741},{\"date\":\"2025-10-23\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0200786595},{\"date\":\"2025-10-24\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0206252583},{\"date\":\"2025-10-27\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0210386157},{\"date\":\"2025-10-28\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0230032766},{\"date\":\"2025-10-29\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0237200152},{\"date\":\"2025-10-30\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0243645415},{\"date\":\"2025-10-31\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0242788665},{\"date\":\"2025-11-03\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.024305544},{\"date\":\"2025-11-04\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0262979676},{\"date\":\"2025-11-05\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0263507091},{\"date\":\"2025-11-06\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0273885424},{\"date\":\"2025-11-07\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0249464681},{\"date\":\"2025-11-10\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0273813292},{\"date\":\"2025-11-11\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0262397152},{\"date\":\"2025-11-12\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0262143209},{\"date\":\"2025-11-13\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0276153812},{\"date\":\"2025-11-14\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.027818778},{\"date\":\"2025-11-17\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0281944595},{\"date\":\"2025-11-18\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0288959286},{\"date\":\"2025-11-19\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0295270515},{\"date\":\"2025-11-20\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0303832532},{\"date\":\"2025-11-21\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0299798908},{\"date\":\"2025-11-24\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0296315535},{\"date\":\"2025-11-25\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0274206873},{\"date\":\"2025-11-26\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0265379618},{\"date\":\"2025-11-28\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0264891646},{\"date\":\"2025-12-01\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0269718409},{\"date\":\"2025-12-02\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0264287816},{\"date\":\"2025-12-03\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.025267441},{\"date\":\"2025-12-04\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0257142339},{\"date\":\"2025-12-05\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0244771571},{\"date\":\"2025-12-08\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0248229407},{\"date\":\"2025-12-09\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0206794372},{\"date\":\"2025-12-10\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0197671239},{\"date\":\"2025-12-11\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0199332858},{\"date\":\"2025-12-12\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0196733134},{\"date\":\"2025-12-15\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0192253714},{\"date\":\"2025-12-16\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0190479338},{\"date\":\"2025-12-17\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0198810408},{\"date\":\"2025-12-18\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0191835953},{\"date\":\"2025-12-19\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0202029632},{\"date\":\"2025-12-22\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0203104002},{\"date\":\"2025-12-23\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0208833126},{\"date\":\"2025-12-24\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0198782775},{\"date\":\"2025-12-26\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0197946271},{\"date\":\"2025-12-29\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0195037028},{\"date\":\"2025-12-30\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0193027478},{\"date\":\"2025-12-31\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.019317983},{\"date\":\"2026-01-02\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0192569665},{\"date\":\"2026-01-05\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0188017258},{\"date\":\"2026-01-06\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0187906886},{\"date\":\"2026-01-07\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0185399238},{\"date\":\"2026-01-08\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0192057224},{\"date\":\"2026-01-09\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0191452611},{\"date\":\"2026-01-12\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0187734065},{\"date\":\"2026-01-13\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0169941398},{\"date\":\"2026-01-14\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0174010866},{\"date\":\"2026-01-15\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0178886832},{\"date\":\"2026-01-16\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0152240266},{\"date\":\"2026-01-20\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0182498962},{\"date\":\"2026-01-21\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0172753024},{\"date\":\"2026-01-22\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.017052026},{\"date\":\"2026-01-23\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0159908872},{\"date\":\"2026-01-26\",\"symbol\":\"NVDA\",\"metric\":\"vol20\",\"value\":0.0160376649},{\"date\":\"2025-07-31\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":80698400},{\"date\":\"2025-08-01\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":104434500},{\"date\":\"2025-08-04\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":75109300},{\"date\":\"2025-08-05\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":44155100},{\"date\":\"2025-08-06\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":108483100},{\"date\":\"2025-08-07\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":90224800},{\"date\":\"2025-08-08\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":113854000},{\"date\":\"2025-08-11\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":61806100},{\"date\":\"2025-08-12\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":55626200},{\"date\":\"2025-08-13\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":69878500},{\"date\":\"2025-08-14\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":51916300},{\"date\":\"2025-08-15\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":56038700},{\"date\":\"2025-08-18\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":37476200},{\"date\":\"2025-08-19\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":39402600},{\"date\":\"2025-08-20\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":42263900},{\"date\":\"2025-08-21\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":30621200},{\"date\":\"2025-08-22\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":42477800},{\"date\":\"2025-08-25\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":30983100},{\"date\":\"2025-08-26\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":54575100},{\"date\":\"2025-08-27\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":31259500},{\"date\":\"2025-08-28\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":38074700},{\"date\":\"2025-08-29\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":39418400},{\"date\":\"2025-09-02\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":44075600},{\"date\":\"2025-09-03\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":66427800},{\"date\":\"2025-09-04\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":47549400},{\"date\":\"2025-09-05\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":54870400},{\"date\":\"2025-09-08\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":48999500},{\"date\":\"2025-09-09\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":66313900},{\"date\":\"2025-09-10\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":83440800},{\"date\":\"2025-09-11\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":50208600},{\"date\":\"2025-09-12\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":55824200},{\"date\":\"2025-09-15\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":42699500},{\"date\":\"2025-09-16\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":63421100},{\"date\":\"2025-09-17\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":46508000},{\"date\":\"2025-09-18\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":44249600},{\"date\":\"2025-09-19\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":163741300},{\"date\":\"2025-09-22\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":105517400},{\"date\":\"2025-09-23\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":60275200},{\"date\":\"2025-09-24\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":42303700},{\"date\":\"2025-09-25\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":55202100},{\"date\":\"2025-09-26\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":46076300},{\"date\":\"2025-09-29\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":40127700},{\"date\":\"2025-09-30\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":37704300},{\"date\":\"2025-10-01\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":48713900},{\"date\":\"2025-10-02\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":42630200},{\"date\":\"2025-10-03\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":49155600},{\"date\":\"2025-10-06\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":44664100},{\"date\":\"2025-10-07\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":31955800},{\"date\":\"2025-10-08\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":36496900},{\"date\":\"2025-10-09\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":38322000},{\"date\":\"2025-10-10\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":61999100},{\"date\":\"2025-10-13\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":38142900},{\"date\":\"2025-10-14\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":35478000},{\"date\":\"2025-10-15\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":33893600},{\"date\":\"2025-10-16\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":39777000},{\"date\":\"2025-10-17\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":49147000},{\"date\":\"2025-10-20\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":90483000},{\"date\":\"2025-10-21\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":46695900},{\"date\":\"2025-10-22\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":45015300},{\"date\":\"2025-10-23\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":32754900},{\"date\":\"2025-10-24\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":38253700},{\"date\":\"2025-10-27\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":44888200},{\"date\":\"2025-10-28\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":41534800},{\"date\":\"2025-10-29\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":51086700},{\"date\":\"2025-10-30\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":69886500},{\"date\":\"2025-10-31\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":86167100},{\"date\":\"2025-11-03\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":50194600},{\"date\":\"2025-11-04\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":49274800},{\"date\":\"2025-11-05\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":43683100},{\"date\":\"2025-11-06\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":51204000},{\"date\":\"2025-11-07\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":48227400},{\"date\":\"2025-11-10\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":41312400},{\"date\":\"2025-11-11\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":46208300},{\"date\":\"2025-11-12\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":48398000},{\"date\":\"2025-11-13\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":49602800},{\"date\":\"2025-11-14\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":47431300},{\"date\":\"2025-11-17\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":45018300},{\"date\":\"2025-11-18\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":45677300},{\"date\":\"2025-11-19\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":40424500},{\"date\":\"2025-11-20\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":45823600},{\"date\":\"2025-11-21\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":59030800},{\"date\":\"2025-11-24\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":65585800},{\"date\":\"2025-11-25\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":46914200},{\"date\":\"2025-11-26\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":33431400},{\"date\":\"2025-11-28\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":20135600},{\"date\":\"2025-12-01\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":46587700},{\"date\":\"2025-12-02\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":53669500},{\"date\":\"2025-12-03\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":43538700},{\"date\":\"2025-12-04\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":43989100},{\"date\":\"2025-12-05\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":47265800},{\"date\":\"2025-12-08\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":38211800},{\"date\":\"2025-12-09\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":32193300},{\"date\":\"2025-12-10\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":33038300},{\"date\":\"2025-12-11\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":33248000},{\"date\":\"2025-12-12\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":39532900},{\"date\":\"2025-12-15\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":50409100},{\"date\":\"2025-12-16\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":37648600},{\"date\":\"2025-12-17\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":50138700},{\"date\":\"2025-12-18\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":51630700},{\"date\":\"2025-12-19\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":144632000},{\"date\":\"2025-12-22\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":36571800},{\"date\":\"2025-12-23\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":29642000},{\"date\":\"2025-12-24\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":17910600},{\"date\":\"2025-12-26\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":21521800},{\"date\":\"2025-12-29\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":23715200},{\"date\":\"2025-12-30\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":22139600},{\"date\":\"2025-12-31\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":27293600},{\"date\":\"2026-01-02\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":37838100},{\"date\":\"2026-01-05\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":45647200},{\"date\":\"2026-01-06\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":52352100},{\"date\":\"2026-01-07\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":48309800},{\"date\":\"2026-01-08\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":50419300},{\"date\":\"2026-01-09\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":39997000},{\"date\":\"2026-01-12\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":45263800},{\"date\":\"2026-01-13\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":45730800},{\"date\":\"2026-01-14\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":40019400},{\"date\":\"2026-01-15\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":39388600},{\"date\":\"2026-01-16\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":72142800},{\"date\":\"2026-01-20\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":80267500},{\"date\":\"2026-01-21\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":54641700},{\"date\":\"2026-01-22\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":39708300},{\"date\":\"2026-01-23\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":41689000},{\"date\":\"2026-01-26\",\"symbol\":\"AAPL\",\"metric\":\"volume\",\"value\":55857900},{\"date\":\"2025-07-31\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":104357300},{\"date\":\"2025-08-01\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":122258800},{\"date\":\"2025-08-04\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":77890100},{\"date\":\"2025-08-05\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":51505100},{\"date\":\"2025-08-06\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":54823000},{\"date\":\"2025-08-07\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":40603500},{\"date\":\"2025-08-08\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":32970500},{\"date\":\"2025-08-11\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":31646200},{\"date\":\"2025-08-12\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":37185800},{\"date\":\"2025-08-13\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":36508300},{\"date\":\"2025-08-14\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":61545800},{\"date\":\"2025-08-15\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":39649200},{\"date\":\"2025-08-18\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":25248900},{\"date\":\"2025-08-19\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":29891000},{\"date\":\"2025-08-20\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":36604300},{\"date\":\"2025-08-21\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":32140500},{\"date\":\"2025-08-22\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":37315300},{\"date\":\"2025-08-25\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":22633700},{\"date\":\"2025-08-26\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":26105400},{\"date\":\"2025-08-27\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":21254500},{\"date\":\"2025-08-28\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":33679600},{\"date\":\"2025-08-29\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":26199200},{\"date\":\"2025-09-02\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":38843900},{\"date\":\"2025-09-03\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":29223100},{\"date\":\"2025-09-04\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":59391800},{\"date\":\"2025-09-05\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":36721800},{\"date\":\"2025-09-08\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":33947100},{\"date\":\"2025-09-09\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":27033800},{\"date\":\"2025-09-10\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":60907700},{\"date\":\"2025-09-11\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":37485600},{\"date\":\"2025-09-12\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":38496200},{\"date\":\"2025-09-15\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":33243300},{\"date\":\"2025-09-16\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":38203900},{\"date\":\"2025-09-17\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":42815200},{\"date\":\"2025-09-18\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":37931700},{\"date\":\"2025-09-19\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":97943200},{\"date\":\"2025-09-22\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":45914500},{\"date\":\"2025-09-23\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":70956200},{\"date\":\"2025-09-24\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":49509000},{\"date\":\"2025-09-25\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":52226300},{\"date\":\"2025-09-26\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":41650100},{\"date\":\"2025-09-29\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":44259200},{\"date\":\"2025-09-30\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":48396400},{\"date\":\"2025-10-01\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":43933800},{\"date\":\"2025-10-02\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":41258600},{\"date\":\"2025-10-03\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":43639000},{\"date\":\"2025-10-06\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":43690900},{\"date\":\"2025-10-07\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":31194700},{\"date\":\"2025-10-08\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":46686000},{\"date\":\"2025-10-09\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":46412100},{\"date\":\"2025-10-10\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":72367500},{\"date\":\"2025-10-13\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":37809700},{\"date\":\"2025-10-14\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":45665600},{\"date\":\"2025-10-15\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":45909500},{\"date\":\"2025-10-16\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":42414600},{\"date\":\"2025-10-17\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":45986900},{\"date\":\"2025-10-20\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":38882800},{\"date\":\"2025-10-21\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":50494600},{\"date\":\"2025-10-22\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":44308500},{\"date\":\"2025-10-23\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":31540000},{\"date\":\"2025-10-24\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":38685100},{\"date\":\"2025-10-27\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":38267000},{\"date\":\"2025-10-28\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":47100000},{\"date\":\"2025-10-29\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":52036200},{\"date\":\"2025-10-30\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":102252900},{\"date\":\"2025-10-31\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":166340800},{\"date\":\"2025-11-03\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":95997800},{\"date\":\"2025-11-04\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":51546300},{\"date\":\"2025-11-05\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":40610700},{\"date\":\"2025-11-06\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":46004200},{\"date\":\"2025-11-07\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":46374300},{\"date\":\"2025-11-10\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":36476500},{\"date\":\"2025-11-11\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":23564100},{\"date\":\"2025-11-12\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":31190100},{\"date\":\"2025-11-13\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":41401700},{\"date\":\"2025-11-14\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":38956700},{\"date\":\"2025-11-17\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":59919000},{\"date\":\"2025-11-18\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":60608400},{\"date\":\"2025-11-19\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":58335600},{\"date\":\"2025-11-20\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":50309000},{\"date\":\"2025-11-21\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":68490500},{\"date\":\"2025-11-24\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":54318400},{\"date\":\"2025-11-25\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":39379300},{\"date\":\"2025-11-26\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":38497900},{\"date\":\"2025-11-28\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":20292300},{\"date\":\"2025-12-01\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":42904000},{\"date\":\"2025-12-02\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":45785400},{\"date\":\"2025-12-03\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":35495100},{\"date\":\"2025-12-04\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":45683200},{\"date\":\"2025-12-05\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":33117400},{\"date\":\"2025-12-08\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":35019200},{\"date\":\"2025-12-09\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":25841700},{\"date\":\"2025-12-10\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":38790700},{\"date\":\"2025-12-11\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":28249600},{\"date\":\"2025-12-12\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":35639100},{\"date\":\"2025-12-15\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":47286100},{\"date\":\"2025-12-16\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":39298900},{\"date\":\"2025-12-17\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":44034400},{\"date\":\"2025-12-18\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":50272400},{\"date\":\"2025-12-19\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":85544400},{\"date\":\"2025-12-22\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":32261300},{\"date\":\"2025-12-23\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":29230200},{\"date\":\"2025-12-24\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":11420500},{\"date\":\"2025-12-26\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":15994700},{\"date\":\"2025-12-29\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":19797900},{\"date\":\"2025-12-30\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":21910500},{\"date\":\"2025-12-31\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":24383700},{\"date\":\"2026-01-02\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":51456200},{\"date\":\"2026-01-05\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":49733300},{\"date\":\"2026-01-06\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":53764700},{\"date\":\"2026-01-07\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":42236500},{\"date\":\"2026-01-08\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":39509800},{\"date\":\"2026-01-09\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":34560000},{\"date\":\"2026-01-12\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":35867800},{\"date\":\"2026-01-13\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":38371800},{\"date\":\"2026-01-14\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":41410600},{\"date\":\"2026-01-15\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":43003600},{\"date\":\"2026-01-16\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":45888300},{\"date\":\"2026-01-20\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":47737900},{\"date\":\"2026-01-21\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":47276100},{\"date\":\"2026-01-22\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":31913300},{\"date\":\"2026-01-23\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":33778500},{\"date\":\"2026-01-26\",\"symbol\":\"AMZN\",\"metric\":\"volume\",\"value\":32764700},{\"date\":\"2025-07-31\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":51329200},{\"date\":\"2025-08-01\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":34832200},{\"date\":\"2025-08-04\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":31547400},{\"date\":\"2025-08-05\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":31602300},{\"date\":\"2025-08-06\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":21562900},{\"date\":\"2025-08-07\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":26321800},{\"date\":\"2025-08-08\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":39161800},{\"date\":\"2025-08-11\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":25832400},{\"date\":\"2025-08-12\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":30397900},{\"date\":\"2025-08-13\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":28342900},{\"date\":\"2025-08-14\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":25230400},{\"date\":\"2025-08-15\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":34931400},{\"date\":\"2025-08-18\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":18526600},{\"date\":\"2025-08-19\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":24240200},{\"date\":\"2025-08-20\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":28955500},{\"date\":\"2025-08-21\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":19774600},{\"date\":\"2025-08-22\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":42827000},{\"date\":\"2025-08-25\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":29928900},{\"date\":\"2025-08-26\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":28464100},{\"date\":\"2025-08-27\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":23022900},{\"date\":\"2025-08-28\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":32339300},{\"date\":\"2025-08-29\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":39728400},{\"date\":\"2025-09-02\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":47523000},{\"date\":\"2025-09-03\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":103336100},{\"date\":\"2025-09-04\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":51684200},{\"date\":\"2025-09-05\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":46588900},{\"date\":\"2025-09-08\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":32474700},{\"date\":\"2025-09-09\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":38061000},{\"date\":\"2025-09-10\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":35141100},{\"date\":\"2025-09-11\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":30599300},{\"date\":\"2025-09-12\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":26771600},{\"date\":\"2025-09-15\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":58383800},{\"date\":\"2025-09-16\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":34109700},{\"date\":\"2025-09-17\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":34108000},{\"date\":\"2025-09-18\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":31239500},{\"date\":\"2025-09-19\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":55571400},{\"date\":\"2025-09-22\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":32290500},{\"date\":\"2025-09-23\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":26628000},{\"date\":\"2025-09-24\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":28201000},{\"date\":\"2025-09-25\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":31020400},{\"date\":\"2025-09-26\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":18503200},{\"date\":\"2025-09-29\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":32505800},{\"date\":\"2025-09-30\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":34724300},{\"date\":\"2025-10-01\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":31658200},{\"date\":\"2025-10-02\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":25483300},{\"date\":\"2025-10-03\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":30249600},{\"date\":\"2025-10-06\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":28894700},{\"date\":\"2025-10-07\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":23181300},{\"date\":\"2025-10-08\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":21307100},{\"date\":\"2025-10-09\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":27892100},{\"date\":\"2025-10-10\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":33180300},{\"date\":\"2025-10-13\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":24995000},{\"date\":\"2025-10-14\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":22111600},{\"date\":\"2025-10-15\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":27007700},{\"date\":\"2025-10-16\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":27997200},{\"date\":\"2025-10-17\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":29671600},{\"date\":\"2025-10-20\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":22350200},{\"date\":\"2025-10-21\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":47312100},{\"date\":\"2025-10-22\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":35029400},{\"date\":\"2025-10-23\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":19901400},{\"date\":\"2025-10-24\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":28655100},{\"date\":\"2025-10-27\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":35235200},{\"date\":\"2025-10-28\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":29738600},{\"date\":\"2025-10-29\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":43580300},{\"date\":\"2025-10-30\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":74876000},{\"date\":\"2025-10-31\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":39267900},{\"date\":\"2025-11-03\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":29786000},{\"date\":\"2025-11-04\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":30078400},{\"date\":\"2025-11-05\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":31010300},{\"date\":\"2025-11-06\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":37173600},{\"date\":\"2025-11-07\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":34479600},{\"date\":\"2025-11-10\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":29557300},{\"date\":\"2025-11-11\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":19842100},{\"date\":\"2025-11-12\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":24829900},{\"date\":\"2025-11-13\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":29494000},{\"date\":\"2025-11-14\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":31647200},{\"date\":\"2025-11-17\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":52670200},{\"date\":\"2025-11-18\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":49158700},{\"date\":\"2025-11-19\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":68198900},{\"date\":\"2025-11-20\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":62025200},{\"date\":\"2025-11-21\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":74137700},{\"date\":\"2025-11-24\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":85165100},{\"date\":\"2025-11-25\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":88632100},{\"date\":\"2025-11-26\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":51373400},{\"date\":\"2025-11-28\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":26018600},{\"date\":\"2025-12-01\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":41183000},{\"date\":\"2025-12-02\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":35854700},{\"date\":\"2025-12-03\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":41838300},{\"date\":\"2025-12-04\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":31240900},{\"date\":\"2025-12-05\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":28851700},{\"date\":\"2025-12-08\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":33909400},{\"date\":\"2025-12-09\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":30194000},{\"date\":\"2025-12-10\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":33428900},{\"date\":\"2025-12-11\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":42353700},{\"date\":\"2025-12-12\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":35940200},{\"date\":\"2025-12-15\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":29151900},{\"date\":\"2025-12-16\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":30585000},{\"date\":\"2025-12-17\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":43930400},{\"date\":\"2025-12-18\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":33518000},{\"date\":\"2025-12-19\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":59943200},{\"date\":\"2025-12-22\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":26429900},{\"date\":\"2025-12-23\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":25478700},{\"date\":\"2025-12-24\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":10097400},{\"date\":\"2025-12-26\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":10899000},{\"date\":\"2025-12-29\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":19621800},{\"date\":\"2025-12-30\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":17380900},{\"date\":\"2025-12-31\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":16377700},{\"date\":\"2026-01-02\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":32009400},{\"date\":\"2026-01-05\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":30195600},{\"date\":\"2026-01-06\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":31212100},{\"date\":\"2026-01-07\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":35104400},{\"date\":\"2026-01-08\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":31896100},{\"date\":\"2026-01-09\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":26214200},{\"date\":\"2026-01-12\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":33923900},{\"date\":\"2026-01-13\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":33517600},{\"date\":\"2026-01-14\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":28525600},{\"date\":\"2026-01-15\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":28442400},{\"date\":\"2026-01-16\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":40341600},{\"date\":\"2026-01-20\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":35361000},{\"date\":\"2026-01-21\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":35386600},{\"date\":\"2026-01-22\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":26253600},{\"date\":\"2026-01-23\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":27280000},{\"date\":\"2026-01-26\",\"symbol\":\"GOOGL\",\"metric\":\"volume\",\"value\":26011100},{\"date\":\"2025-07-31\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":38831100},{\"date\":\"2025-08-01\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":19028700},{\"date\":\"2025-08-04\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":15801700},{\"date\":\"2025-08-05\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11640300},{\"date\":\"2025-08-06\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9733900},{\"date\":\"2025-08-07\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9019700},{\"date\":\"2025-08-08\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":7320800},{\"date\":\"2025-08-11\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":7612000},{\"date\":\"2025-08-12\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":14563100},{\"date\":\"2025-08-13\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":8811800},{\"date\":\"2025-08-14\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":8116200},{\"date\":\"2025-08-15\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":13375400},{\"date\":\"2025-08-18\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":16513700},{\"date\":\"2025-08-19\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":12286700},{\"date\":\"2025-08-20\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11898200},{\"date\":\"2025-08-21\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":8876300},{\"date\":\"2025-08-22\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":10612700},{\"date\":\"2025-08-25\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":6861200},{\"date\":\"2025-08-26\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":7601800},{\"date\":\"2025-08-27\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":8315400},{\"date\":\"2025-08-28\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":7468000},{\"date\":\"2025-08-29\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9070500},{\"date\":\"2025-09-02\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9350900},{\"date\":\"2025-09-03\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":7699300},{\"date\":\"2025-09-04\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11439100},{\"date\":\"2025-09-05\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9663400},{\"date\":\"2025-09-08\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":13087800},{\"date\":\"2025-09-09\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":10999000},{\"date\":\"2025-09-10\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":12478300},{\"date\":\"2025-09-11\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":7923300},{\"date\":\"2025-09-12\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":8248600},{\"date\":\"2025-09-15\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":10533800},{\"date\":\"2025-09-16\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11782500},{\"date\":\"2025-09-17\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9400900},{\"date\":\"2025-09-18\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":10955000},{\"date\":\"2025-09-19\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":23696800},{\"date\":\"2025-09-22\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11706900},{\"date\":\"2025-09-23\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":10872600},{\"date\":\"2025-09-24\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":8828200},{\"date\":\"2025-09-25\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":10591100},{\"date\":\"2025-09-26\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9696300},{\"date\":\"2025-09-29\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9246800},{\"date\":\"2025-09-30\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":16226800},{\"date\":\"2025-10-01\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":20419600},{\"date\":\"2025-10-02\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11415300},{\"date\":\"2025-10-03\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":16154300},{\"date\":\"2025-10-06\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":21654700},{\"date\":\"2025-10-07\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":12062900},{\"date\":\"2025-10-08\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":10790600},{\"date\":\"2025-10-09\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":12717200},{\"date\":\"2025-10-10\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":16980100},{\"date\":\"2025-10-13\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9251800},{\"date\":\"2025-10-14\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":8829800},{\"date\":\"2025-10-15\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":10246800},{\"date\":\"2025-10-16\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9017000},{\"date\":\"2025-10-17\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":12232400},{\"date\":\"2025-10-20\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":8900200},{\"date\":\"2025-10-21\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":7647300},{\"date\":\"2025-10-22\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":8734500},{\"date\":\"2025-10-23\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9856000},{\"date\":\"2025-10-24\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9151300},{\"date\":\"2025-10-27\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11321100},{\"date\":\"2025-10-28\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":12193800},{\"date\":\"2025-10-29\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":26818600},{\"date\":\"2025-10-30\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":88440100},{\"date\":\"2025-10-31\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":56953200},{\"date\":\"2025-11-03\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":33003600},{\"date\":\"2025-11-04\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":27356600},{\"date\":\"2025-11-05\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":20219900},{\"date\":\"2025-11-06\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":23628800},{\"date\":\"2025-11-07\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":29946800},{\"date\":\"2025-11-10\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":19245000},{\"date\":\"2025-11-11\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":13302200},{\"date\":\"2025-11-12\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":24493300},{\"date\":\"2025-11-13\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":20973800},{\"date\":\"2025-11-14\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":20724100},{\"date\":\"2025-11-17\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":16501300},{\"date\":\"2025-11-18\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":25500600},{\"date\":\"2025-11-19\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":24744700},{\"date\":\"2025-11-20\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":20603000},{\"date\":\"2025-11-21\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":21052600},{\"date\":\"2025-11-24\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":23554900},{\"date\":\"2025-11-25\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":25213000},{\"date\":\"2025-11-26\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":15209500},{\"date\":\"2025-11-28\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11033200},{\"date\":\"2025-12-01\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":13029900},{\"date\":\"2025-12-02\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11640900},{\"date\":\"2025-12-03\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11134300},{\"date\":\"2025-12-04\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":29874600},{\"date\":\"2025-12-05\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":21207900},{\"date\":\"2025-12-08\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":13161000},{\"date\":\"2025-12-09\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":12997100},{\"date\":\"2025-12-10\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":16910900},{\"date\":\"2025-12-11\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":13056700},{\"date\":\"2025-12-12\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":14016900},{\"date\":\"2025-12-15\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":15549100},{\"date\":\"2025-12-16\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":14309100},{\"date\":\"2025-12-17\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":15598500},{\"date\":\"2025-12-18\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":20260300},{\"date\":\"2025-12-19\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":49977100},{\"date\":\"2025-12-22\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":15659400},{\"date\":\"2025-12-23\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":8486800},{\"date\":\"2025-12-24\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":5627500},{\"date\":\"2025-12-26\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":7133800},{\"date\":\"2025-12-29\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":8506500},{\"date\":\"2025-12-30\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":9187500},{\"date\":\"2025-12-31\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":7940400},{\"date\":\"2026-01-02\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":13726500},{\"date\":\"2026-01-05\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":12213700},{\"date\":\"2026-01-06\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11074400},{\"date\":\"2026-01-07\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":12846300},{\"date\":\"2026-01-08\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11921700},{\"date\":\"2026-01-09\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":11634900},{\"date\":\"2026-01-12\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":14797200},{\"date\":\"2026-01-13\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":18030400},{\"date\":\"2026-01-14\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":15527900},{\"date\":\"2026-01-15\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":13076100},{\"date\":\"2026-01-16\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":17012500},{\"date\":\"2026-01-20\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":15169600},{\"date\":\"2026-01-21\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":14494700},{\"date\":\"2026-01-22\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":21394700},{\"date\":\"2026-01-23\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":22797700},{\"date\":\"2026-01-26\",\"symbol\":\"META\",\"metric\":\"volume\",\"value\":16293000},{\"date\":\"2025-07-31\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":51617300},{\"date\":\"2025-08-01\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":28977600},{\"date\":\"2025-08-04\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":25349000},{\"date\":\"2025-08-05\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":19171600},{\"date\":\"2025-08-06\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":21355700},{\"date\":\"2025-08-07\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":16079100},{\"date\":\"2025-08-08\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":15531000},{\"date\":\"2025-08-11\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":20194400},{\"date\":\"2025-08-12\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":18667000},{\"date\":\"2025-08-13\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":19619200},{\"date\":\"2025-08-14\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":20269100},{\"date\":\"2025-08-15\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":25213300},{\"date\":\"2025-08-18\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":23760600},{\"date\":\"2025-08-19\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":21481000},{\"date\":\"2025-08-20\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":27723000},{\"date\":\"2025-08-21\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":18443300},{\"date\":\"2025-08-22\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":24324200},{\"date\":\"2025-08-25\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":21638600},{\"date\":\"2025-08-26\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":30835700},{\"date\":\"2025-08-27\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":17277900},{\"date\":\"2025-08-28\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":18015600},{\"date\":\"2025-08-29\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":20961600},{\"date\":\"2025-09-02\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":18128000},{\"date\":\"2025-09-03\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":16345100},{\"date\":\"2025-09-04\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":15509500},{\"date\":\"2025-09-05\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":31994800},{\"date\":\"2025-09-08\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":16771000},{\"date\":\"2025-09-09\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":14410500},{\"date\":\"2025-09-10\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":21611800},{\"date\":\"2025-09-11\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":18881600},{\"date\":\"2025-09-12\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":23624900},{\"date\":\"2025-09-15\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":17143800},{\"date\":\"2025-09-16\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":19711900},{\"date\":\"2025-09-17\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":15816600},{\"date\":\"2025-09-18\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":18913700},{\"date\":\"2025-09-19\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":52474100},{\"date\":\"2025-09-22\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":20009300},{\"date\":\"2025-09-23\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":19799600},{\"date\":\"2025-09-24\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":13533700},{\"date\":\"2025-09-25\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":15786500},{\"date\":\"2025-09-26\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":16213100},{\"date\":\"2025-09-29\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":17617800},{\"date\":\"2025-09-30\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":19728200},{\"date\":\"2025-10-01\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":22632300},{\"date\":\"2025-10-02\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":21222900},{\"date\":\"2025-10-03\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":15112300},{\"date\":\"2025-10-06\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":21388600},{\"date\":\"2025-10-07\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":14615200},{\"date\":\"2025-10-08\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":13363400},{\"date\":\"2025-10-09\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":18343600},{\"date\":\"2025-10-10\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":24133800},{\"date\":\"2025-10-13\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":14284200},{\"date\":\"2025-10-14\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":14684300},{\"date\":\"2025-10-15\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":14694700},{\"date\":\"2025-10-16\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":15559600},{\"date\":\"2025-10-17\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":19867800},{\"date\":\"2025-10-20\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":14665600},{\"date\":\"2025-10-21\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":15586200},{\"date\":\"2025-10-22\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":18962700},{\"date\":\"2025-10-23\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":14023500},{\"date\":\"2025-10-24\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":15532400},{\"date\":\"2025-10-27\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":18734700},{\"date\":\"2025-10-28\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":29986700},{\"date\":\"2025-10-29\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":36023000},{\"date\":\"2025-10-30\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":41023100},{\"date\":\"2025-10-31\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":34006400},{\"date\":\"2025-11-03\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":22374700},{\"date\":\"2025-11-04\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":20958700},{\"date\":\"2025-11-05\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":23024300},{\"date\":\"2025-11-06\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":27406500},{\"date\":\"2025-11-07\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":24019800},{\"date\":\"2025-11-10\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":26101500},{\"date\":\"2025-11-11\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":17980000},{\"date\":\"2025-11-12\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":26574900},{\"date\":\"2025-11-13\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":25273100},{\"date\":\"2025-11-14\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":28505700},{\"date\":\"2025-11-17\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":19092800},{\"date\":\"2025-11-18\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":33815100},{\"date\":\"2025-11-19\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":23245300},{\"date\":\"2025-11-20\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":26802500},{\"date\":\"2025-11-21\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":31769200},{\"date\":\"2025-11-24\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":34421000},{\"date\":\"2025-11-25\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":28019800},{\"date\":\"2025-11-26\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":25709100},{\"date\":\"2025-11-28\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":14386700},{\"date\":\"2025-12-01\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":23964000},{\"date\":\"2025-12-02\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":19562700},{\"date\":\"2025-12-03\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":34615100},{\"date\":\"2025-12-04\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":22318200},{\"date\":\"2025-12-05\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":22608700},{\"date\":\"2025-12-08\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":21965900},{\"date\":\"2025-12-09\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":14696100},{\"date\":\"2025-12-10\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":35756200},{\"date\":\"2025-12-11\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":24669200},{\"date\":\"2025-12-12\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":21248100},{\"date\":\"2025-12-15\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":23727700},{\"date\":\"2025-12-16\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":20705600},{\"date\":\"2025-12-17\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":24527200},{\"date\":\"2025-12-18\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":28573500},{\"date\":\"2025-12-19\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":70836100},{\"date\":\"2025-12-22\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":16963000},{\"date\":\"2025-12-23\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":14683600},{\"date\":\"2025-12-24\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":5855900},{\"date\":\"2025-12-26\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":8842200},{\"date\":\"2025-12-29\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":10893400},{\"date\":\"2025-12-30\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":13944500},{\"date\":\"2025-12-31\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":15601600},{\"date\":\"2026-01-02\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":25571600},{\"date\":\"2026-01-05\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":25250300},{\"date\":\"2026-01-06\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":23037700},{\"date\":\"2026-01-07\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":25564200},{\"date\":\"2026-01-08\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":18162600},{\"date\":\"2026-01-09\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":18491000},{\"date\":\"2026-01-12\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":23519900},{\"date\":\"2026-01-13\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":28545800},{\"date\":\"2026-01-14\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":28184300},{\"date\":\"2026-01-15\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":23225800},{\"date\":\"2026-01-16\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":34246700},{\"date\":\"2026-01-20\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":26130000},{\"date\":\"2026-01-21\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":37980500},{\"date\":\"2026-01-22\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":25349400},{\"date\":\"2026-01-23\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":38000200},{\"date\":\"2026-01-26\",\"symbol\":\"MSFT\",\"metric\":\"volume\",\"value\":29247100},{\"date\":\"2025-07-31\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":221685400},{\"date\":\"2025-08-01\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":204529000},{\"date\":\"2025-08-04\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":148174600},{\"date\":\"2025-08-05\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":156407600},{\"date\":\"2025-08-06\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":137192300},{\"date\":\"2025-08-07\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":151878400},{\"date\":\"2025-08-08\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":123396700},{\"date\":\"2025-08-11\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":138323200},{\"date\":\"2025-08-12\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":145485700},{\"date\":\"2025-08-13\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":179871700},{\"date\":\"2025-08-14\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":129554000},{\"date\":\"2025-08-15\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":156602200},{\"date\":\"2025-08-18\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":132008000},{\"date\":\"2025-08-19\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":185229200},{\"date\":\"2025-08-20\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":215142700},{\"date\":\"2025-08-21\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":140040900},{\"date\":\"2025-08-22\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":172789400},{\"date\":\"2025-08-25\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":163012800},{\"date\":\"2025-08-26\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":168688200},{\"date\":\"2025-08-27\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":235518900},{\"date\":\"2025-08-28\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":281787800},{\"date\":\"2025-08-29\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":243257900},{\"date\":\"2025-09-02\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":231164900},{\"date\":\"2025-09-03\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":164424900},{\"date\":\"2025-09-04\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":141670100},{\"date\":\"2025-09-05\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":224441400},{\"date\":\"2025-09-08\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":163769100},{\"date\":\"2025-09-09\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":157548400},{\"date\":\"2025-09-10\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":226852000},{\"date\":\"2025-09-11\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":151159300},{\"date\":\"2025-09-12\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":124911000},{\"date\":\"2025-09-15\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":147061600},{\"date\":\"2025-09-16\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":140737800},{\"date\":\"2025-09-17\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":211843800},{\"date\":\"2025-09-18\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":191763300},{\"date\":\"2025-09-19\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":237182100},{\"date\":\"2025-09-22\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":269637000},{\"date\":\"2025-09-23\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":192559600},{\"date\":\"2025-09-24\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":143564100},{\"date\":\"2025-09-25\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":191586700},{\"date\":\"2025-09-26\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":148573700},{\"date\":\"2025-09-29\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":193063500},{\"date\":\"2025-09-30\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":236981000},{\"date\":\"2025-10-01\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":173844900},{\"date\":\"2025-10-02\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":136805800},{\"date\":\"2025-10-03\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":137596900},{\"date\":\"2025-10-06\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":157678100},{\"date\":\"2025-10-07\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":140088000},{\"date\":\"2025-10-08\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":130168900},{\"date\":\"2025-10-09\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":182997200},{\"date\":\"2025-10-10\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":268774400},{\"date\":\"2025-10-13\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":153482800},{\"date\":\"2025-10-14\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":205641400},{\"date\":\"2025-10-15\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":214450500},{\"date\":\"2025-10-16\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":179723300},{\"date\":\"2025-10-17\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":173135200},{\"date\":\"2025-10-20\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":128544700},{\"date\":\"2025-10-21\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":124240200},{\"date\":\"2025-10-22\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":162249600},{\"date\":\"2025-10-23\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":111363700},{\"date\":\"2025-10-24\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":131296700},{\"date\":\"2025-10-27\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":153452700},{\"date\":\"2025-10-28\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":297986200},{\"date\":\"2025-10-29\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":308829600},{\"date\":\"2025-10-30\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":178864400},{\"date\":\"2025-10-31\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":179802200},{\"date\":\"2025-11-03\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":180267300},{\"date\":\"2025-11-04\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":188919300},{\"date\":\"2025-11-05\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":171350300},{\"date\":\"2025-11-06\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":223029800},{\"date\":\"2025-11-07\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":264942300},{\"date\":\"2025-11-10\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":198897100},{\"date\":\"2025-11-11\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":176483300},{\"date\":\"2025-11-12\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":154935300},{\"date\":\"2025-11-13\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":207423100},{\"date\":\"2025-11-14\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":186591900},{\"date\":\"2025-11-17\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":173628900},{\"date\":\"2025-11-18\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":213598900},{\"date\":\"2025-11-19\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":247246400},{\"date\":\"2025-11-20\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":343504800},{\"date\":\"2025-11-21\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":346926200},{\"date\":\"2025-11-24\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":256618300},{\"date\":\"2025-11-25\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":320600300},{\"date\":\"2025-11-26\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":183852000},{\"date\":\"2025-11-28\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":121332800},{\"date\":\"2025-12-01\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":188131000},{\"date\":\"2025-12-02\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":182632200},{\"date\":\"2025-12-03\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":165138000},{\"date\":\"2025-12-04\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":167364900},{\"date\":\"2025-12-05\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":143971100},{\"date\":\"2025-12-08\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":204378100},{\"date\":\"2025-12-09\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":144719700},{\"date\":\"2025-12-10\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":162785400},{\"date\":\"2025-12-11\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":182136600},{\"date\":\"2025-12-12\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":204274900},{\"date\":\"2025-12-15\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":164775600},{\"date\":\"2025-12-16\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":148588100},{\"date\":\"2025-12-17\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":222775500},{\"date\":\"2025-12-18\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":176096000},{\"date\":\"2025-12-19\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":324925900},{\"date\":\"2025-12-22\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":129064400},{\"date\":\"2025-12-23\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":174873600},{\"date\":\"2025-12-24\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":65528500},{\"date\":\"2025-12-26\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":139740300},{\"date\":\"2025-12-29\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":120006100},{\"date\":\"2025-12-30\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":97687300},{\"date\":\"2025-12-31\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":120100500},{\"date\":\"2026-01-02\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":148240500},{\"date\":\"2026-01-05\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":183529700},{\"date\":\"2026-01-06\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":176862600},{\"date\":\"2026-01-07\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":153543200},{\"date\":\"2026-01-08\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":172457000},{\"date\":\"2026-01-09\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":131327500},{\"date\":\"2026-01-12\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":137968500},{\"date\":\"2026-01-13\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":160128900},{\"date\":\"2026-01-14\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":159586100},{\"date\":\"2026-01-15\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":206188600},{\"date\":\"2026-01-16\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":187967200},{\"date\":\"2026-01-20\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":223345300},{\"date\":\"2026-01-21\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":200381000},{\"date\":\"2026-01-22\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":139636600},{\"date\":\"2026-01-23\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":142748100},{\"date\":\"2026-01-26\",\"symbol\":\"NVDA\",\"metric\":\"volume\",\"value\":124489200}],\"metadata\":{\"date\":{\"type\":\"date\",\"semanticType\":\"Date\"},\"symbol\":{\"type\":\"string\",\"semanticType\":\"String\"},\"metric\":{\"type\":\"string\",\"semanticType\":\"String\"},\"value\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Keep only necessary columns\\n    cols = [c for c in [\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"volume\\\"] if c in df_history.columns]\\n    df = df_history[cols].copy()\\n\\n    # Normalize date to string YYYY-MM-DD\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for time-series operations\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"]).reset_index(drop=True)\\n\\n    # Compute daily returns as pct_change of close within each symbol\\n    df[\\\"return\\\"] = df.groupby(\\\"symbol\\\")[\\\"close\\\"].pct_change()\\n\\n    # Compute 20-day rolling volatility (std of returns) within each symbol\\n    df[\\\"vol20\\\"] = (\\n        df.groupby(\\\"symbol\\\")[\\\"return\\\"]\\n          .transform(lambda s: s.rolling(window=20, min_periods=1).std())\\n    )\\n\\n    # Reshape to long format: metrics = return, vol20, volume\\n    df_long = df.melt(\\n        id_vars=[\\\"date\\\", \\\"symbol\\\"],\\n        value_vars=[\\\"return\\\", \\\"vol20\\\", \\\"volume\\\"],\\n        var_name=\\\"metric\\\",\\n        value_name=\\\"value\\\",\\n    )\\n\\n    # Final tidy output\\n    transformed_df = df_long[[\\\"date\\\", \\\"symbol\\\", \\\"metric\\\", \\\"value\\\"]].reset_index(drop=True)\\n    return transformed_df\\n\",\"source\":[\"history\"],\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"input_tables\\\": [...] // string[], describe names of the input tables that will be used in the transformation.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\", 'boxplot'. \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - determine \\\"input_tables\\\", the names of a subset of input tables from [CONTEXT] section that will be used to achieve the user's goal.\\n        - **IMPORTANT** Note that the Table 1 in [CONTEXT] section is the table the user is currently viewing, it should take precedence if the user refers to insights about the \\\"current table\\\".\\n        - At the same time, leverage table information to determine which tables are relevant to the user's goal and should be used.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\", \\\"boxplot\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n            - boxplot: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n            - (boxplot) Box plots: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical (optional for creating grouped boxplots), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the boxplot will be grouped automatically (items with the same x values will be grouped).\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE]. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n# from sklearn import ... # import from sklearn if you need it.\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- decide the function signature based on the number of tables you decided in the previous step \\\"input_tables\\\":\\n    - if you decide there will only be one input table, then function signature should be `def transform_data(df1)`\\n    - if you decided there will be k input tables, then function signature should be `def transform_data(df_1, df_2, ..., df_k)`.\\n    - instead of using generic names like df1, df2, ..., try to use intuitive table names for function arguments, for example, if you have input_tables: [\\\"City\\\", \\\"Weather\\\"]`, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes.\\n    - **VERY IMPORTANT** the number of arguments in the function signature must be the same as the number of tables provided in \\\"input_tables\\\", and the order of arguments must match the order of tables provided in \\\"input_tables\\\".\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\n## Table 1: history (738 rows × 8 columns)\\n\\n### Schema (8 fields)\\n  - symbol -- type: object, values: AAPL, AMZN, GOOGL, META, MSFT, NVDA\\n  - date -- type: object, values: 2025-07-30, 2025-07-31, 2025-08-01, ..., 2026-01-20, 2026-01-21, 2026-01-22, 2026-01-23\\n  - open -- type: float64, values: 167.53, 168.01, 169.07, ..., 781.21, 782.98, 785.25, 789.97\\n  - high -- type: float64, values: 169.01, 170.94, 170.96, ..., 789.62, 792.49, 794.28, 795.06\\n  - low -- type: float64, values: 164.05, 166.72, 167.2, ..., 771.36, 772.21, 777.07, 779.66\\n  - close -- type: float64, values: 167.0, 168.29, 170.28, ..., 779.09, 780.97, 784.06, 788.82\\n  - volume -- type: int64, values: 5627500, 5855900, 6861200, ..., 320600300, 324925900, 343504800, 346926200\\n  - fetched_at -- type: object, values: 2026-01-26T23:46:42.347312Z\\n\\n### Sample Data (first 5 rows)\\n```\\n  symbol        date    open    high     low   close     volume                   fetched_at\\n0   AAPL  2025-07-30  211.45  211.94  207.28  208.61   45512500  2026-01-26T23:46:42.347312Z\\n1   AAPL  2025-07-31  208.05  209.40  206.72  207.13   80698400  2026-01-26T23:46:42.347312Z\\n2   AAPL  2025-08-01  210.43  213.13  201.08  201.95  104434500  2026-01-26T23:46:42.347312Z\\n3   AAPL  2025-08-04  204.08  207.44  201.26  202.92   75109300  2026-01-26T23:46:42.347312Z\\n4   AAPL  2025-08-05  202.97  204.91  201.74  202.49   44155100  2026-01-26T23:46:42.347312Z\\n```\\n\\n\\n[GOAL]\\n\\n1) First, plot the overall **closing price** trends for each **symbol** over **time** on a single line chart to compare their broad trajectories and volatility.\"},{\"role\":\"assistant\",\"content\":\"{\\n  \\\"mode\\\": \\\"infer\\\",\\n  \\\"recap\\\": \\\"Compare overall closing price trends and volatility over time for each stock symbol on a single line chart.\\\",\\n  \\\"display_instruction\\\": \\\"Visualize **closing price** trends by **symbol** over **date**\\\",\\n  \\\"recommendation\\\": \\\"A line chart with time on the x-axis and closing price on the y-axis, colored by symbol, best shows comparative trajectories and volatility over time. The data only needs column selection, date normalization, and sorting to be visualization-ready.\\\",\\n  \\\"input_tables\\\": [\\\"history\\\"],\\n  \\\"output_fields\\\": [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"],\\n  \\\"chart_type\\\": \\\"line\\\",\\n  \\\"chart_encodings\\\": {\\n    \\\"x\\\": \\\"date\\\",\\n    \\\"y\\\": \\\"close\\\",\\n    \\\"color\\\": \\\"symbol\\\",\\n    \\\"size\\\": \\\"\\\",\\n    \\\"opacity\\\": \\\"\\\",\\n    \\\"facet\\\": \\\"\\\"\\n  }\\n}\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Select only needed columns\\n    cols = [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"]\\n    df = df_history[cols].copy()\\n\\n    # Ensure date is a string in YYYY-MM-DD format (no datetime objects)\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper line plotting\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"]).reset_index(drop=True)\\n\\n    transformed_df = df\\n    return transformed_df\\n```\"},{\"role\":\"user\",\"content\":\"This is the result from the latest python code:\\n\\n         date symbol   close\\n0  2025-07-30   AAPL  208.61\\n1  2025-07-31   AAPL  207.13\\n2  2025-08-01   AAPL  201.95\\n3  2025-08-04   AAPL  202.92\\n4  2025-08-05   AAPL  202.49\\n5  2025-08-06   AAPL  212.80\\n6  2025-08-07   AAPL  219.57\\n7  2025-08-08   AAPL  228.87\\n8  2025-08-11   AAPL  226.96\\n9  2025-08-12   AAPL  229.43\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n2) For each symbol, compute 20-day and 60-day rolling averages of close price (columns: date, symbol, value, ma_window with values 20 or 60) and plot them over time alongside the actual close to compare short- vs long-term trends and reversals.\"},{\"role\":\"assistant\",\"content\":\"{\\n  \\\"mode\\\": \\\"infer\\\",\\n  \\\"recap\\\": \\\"Compute 20-day and 60-day rolling averages of closing prices for each symbol in tidy format for plotting alongside actual closes over time.\\\",\\n  \\\"display_instruction\\\": \\\"Add **20/60-day moving averages** of **close** by **symbol** over **date**\\\",\\n  \\\"recommendation\\\": \\\"To compare short- and long-term trends per symbol, compute 20- and 60-day rolling means of close, reshape them into a long format with one row per date-symbol-window, and keep the original close for plotting alongside the moving averages.\\\",\\n  \\\"input_tables\\\": [\\\"history\\\"],\\n  \\\"output_fields\\\": [\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"value\\\", \\\"ma_window\\\"],\\n  \\\"chart_type\\\": \\\"line\\\",\\n  \\\"chart_encodings\\\": {\\n    \\\"x\\\": \\\"date\\\",\\n    \\\"y\\\": \\\"value\\\",\\n    \\\"color\\\": \\\"ma_window\\\",\\n    \\\"size\\\": \\\"\\\",\\n    \\\"opacity\\\": \\\"\\\",\\n    \\\"facet\\\": \\\"symbol\\\"\\n  }\\n}\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Work on a copy\\n    df = df_history.copy()\\n\\n    # Normalize date to string YYYY-MM-DD\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper rolling computation\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"])\\n\\n    # Group by symbol and compute rolling means on close\\n    group = df.groupby(\\\"symbol\\\", group_keys=False)[\\\"close\\\"]\\n    df[\\\"ma_20\\\"] = group.rolling(20, min_periods=1).mean()\\n    df[\\\"ma_60\\\"] = group.rolling(60, min_periods=1).mean()\\n\\n    # Reshape to long format for the moving averages\\n    df_long = df.melt(\\n        id_vars=[\\\"date\\\", \\\"symbol\\\", \\\"close\\\"],\\n        value_vars=[\\\"ma_20\\\", \\\"ma_60\\\"],\\n        var_name=\\\"ma_window\\\",\\n        value_name=\\\"value\\\",\\n    )\\n\\n    # Map ma_window to numeric window size (20 or 60)\\n    window_map = {\\\"ma_20\\\": 20, \\\"ma_60\\\": 60}\\n    df_long[\\\"ma_window\\\"] = df_long[\\\"ma_window\\\"].map(window_map)\\n\\n    # Ensure correct column order and types\\n    df_long[\\\"ma_window\\\"] = df_long[\\\"ma_window\\\"].astype(int)\\n\\n    transformed_df = df_long[[\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"value\\\", \\\"ma_window\\\"]].reset_index(drop=True)\\n    return transformed_df\\n```\"},{\"role\":\"user\",\"content\":\"This is the result from the latest python code:\\n\\nEmpty DataFrame\\nColumns: []\\nIndex: []\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\nWe run into the following problem executing the code, please fix it:\\n\\nError: TypeError - incompatible index of inserted column with frame index\\n\\nPlease think step by step, reflect why the error happens and fix the code so that no more errors would occur.\"},{\"role\":\"assistant\",\"content\":\"{\\n  \\\"mode\\\": \\\"infer\\\",\\n  \\\"recap\\\": \\\"Compute 20-day and 60-day rolling averages of closing prices for each symbol in tidy format for plotting alongside actual closes over time.\\\",\\n  \\\"display_instruction\\\": \\\"Compute **20/60-day moving averages** of **close** by **symbol** over **date**\\\",\\n  \\\"recommendation\\\": \\\"The previous implementation used groupby().rolling() and assigned the result directly to new columns, which can create an index mismatch and raise a TypeError. Using groupby().transform(...) with an inner rolling mean keeps the index aligned with the original DataFrame, avoiding incompatible index issues. After computing the moving averages, reshape to long format for visualization.\\\",\\n  \\\"input_tables\\\": [\\\"history\\\"],\\n  \\\"output_fields\\\": [\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"value\\\", \\\"ma_window\\\"],\\n  \\\"chart_type\\\": \\\"line\\\",\\n  \\\"chart_encodings\\\": {\\n    \\\"x\\\": \\\"date\\\",\\n    \\\"y\\\": \\\"value\\\",\\n    \\\"color\\\": \\\"ma_window\\\",\\n    \\\"size\\\": \\\"\\\",\\n    \\\"opacity\\\": \\\"\\\",\\n    \\\"facet\\\": \\\"symbol\\\"\\n  }\\n}\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Work on a copy and keep only needed columns if present\\n    base_cols = [c for c in [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"] if c in df_history.columns]\\n    df = df_history[base_cols].copy()\\n\\n    # Normalize date to string YYYY-MM-DD\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper rolling computation\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"])\\n\\n    # Ensure we have a clean, simple index to avoid alignment issues\\n    df = df.reset_index(drop=True)\\n\\n    # Compute rolling means using transform to preserve index alignment\\n    df[\\\"ma_20\\\"] = (\\n        df.groupby(\\\"symbol\\\")[\\\"close\\\"]\\n          .transform(lambda s: s.rolling(window=20, min_periods=1).mean())\\n    )\\n    df[\\\"ma_60\\\"] = (\\n        df.groupby(\\\"symbol\\\")[\\\"close\\\"]\\n          .transform(lambda s: s.rolling(window=60, min_periods=1).mean())\\n    )\\n\\n    # Reshape to long format for the moving averages\\n    df_long = df.melt(\\n        id_vars=[\\\"date\\\", \\\"symbol\\\", \\\"close\\\"],\\n        value_vars=[\\\"ma_20\\\", \\\"ma_60\\\"],\\n        var_name=\\\"ma_window\\\",\\n        value_name=\\\"value\\\",\\n    )\\n\\n    # Map ma_window to numeric window size (20 or 60)\\n    window_map = {\\\"ma_20\\\": 20, \\\"ma_60\\\": 60}\\n    df_long[\\\"ma_window\\\"] = df_long[\\\"ma_window\\\"].map(window_map).astype(int)\\n\\n    # Final tidy output\\n    transformed_df = df_long[[\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"value\\\", \\\"ma_window\\\"]].reset_index(drop=True)\\n    return transformed_df\\n```\"},{\"role\":\"user\",\"content\":\"This is the result from the latest python code:\\n\\n         date symbol   close       value  ma_window\\n0  2025-07-30   AAPL  208.61  208.610000         20\\n1  2025-07-31   AAPL  207.13  207.870000         20\\n2  2025-08-01   AAPL  201.95  205.896667         20\\n3  2025-08-04   AAPL  202.92  205.152500         20\\n4  2025-08-05   AAPL  202.49  204.620000         20\\n5  2025-08-06   AAPL  212.80  205.983333         20\\n6  2025-08-07   AAPL  219.57  207.924286         20\\n7  2025-08-08   AAPL  228.87  210.542500         20\\n8  2025-08-11   AAPL  226.96  212.366667         20\\n9  2025-08-12   AAPL  229.43  214.073000         20\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n3) For each symbol, compute daily returns as pct_change of close, then 20-day rolling volatility as the rolling std of these returns; keep volume. Reshape to long format with columns [date, symbol, metric, value], where metric ∈ {\\\"return\\\", \\\"vol20\\\", \\\"volume\\\"}, and visualize over time (e.g., faceted by symbol with separate lines for each metric) to highlight periods of strong trends with elevated volatility or volume.\"},{\"role\":\"assistant\",\"content\":\"{\\n  \\\"mode\\\": \\\"infer\\\",\\n  \\\"recap\\\": \\\"Compute daily returns and 20-day rolling volatility for each symbol, keep volume, and reshape to a long format for multi-metric time-series visualization.\\\",\\n  \\\"display_instruction\\\": \\\"Show **daily return**, **20-day volatility**, and **volume** by **symbol** over **date**\\\",\\n  \\\"recommendation\\\": \\\"To highlight periods of strong trends with elevated volatility or volume, compute per-symbol daily returns as pct_change of close and 20-day rolling volatility as the rolling standard deviation of those returns. Keep volume, then reshape into a long table with one metric per row so time-series lines for return, volatility, and volume can be plotted and compared per symbol.\\\",\\n  \\\"input_tables\\\": [\\\"history\\\"],\\n  \\\"output_fields\\\": [\\\"date\\\", \\\"symbol\\\", \\\"metric\\\", \\\"value\\\"],\\n  \\\"chart_type\\\": \\\"line\\\",\\n  \\\"chart_encodings\\\": {\\n    \\\"x\\\": \\\"date\\\",\\n    \\\"y\\\": \\\"value\\\",\\n    \\\"color\\\": \\\"metric\\\",\\n    \\\"size\\\": \\\"\\\",\\n    \\\"opacity\\\": \\\"\\\",\\n    \\\"facet\\\": \\\"symbol\\\"\\n  }\\n}\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Keep only necessary columns\\n    cols = [c for c in [\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"volume\\\"] if c in df_history.columns]\\n    df = df_history[cols].copy()\\n\\n    # Normalize date to string YYYY-MM-DD\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for time-series operations\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"]).reset_index(drop=True)\\n\\n    # Compute daily returns as pct_change of close within each symbol\\n    df[\\\"return\\\"] = df.groupby(\\\"symbol\\\")[\\\"close\\\"].pct_change()\\n\\n    # Compute 20-day rolling volatility (std of returns) within each symbol\\n    df[\\\"vol20\\\"] = (\\n        df.groupby(\\\"symbol\\\")[\\\"return\\\"]\\n          .transform(lambda s: s.rolling(window=20, min_periods=1).std())\\n    )\\n\\n    # Reshape to long format: metrics = return, vol20, volume\\n    df_long = df.melt(\\n        id_vars=[\\\"date\\\", \\\"symbol\\\"],\\n        value_vars=[\\\"return\\\", \\\"vol20\\\", \\\"volume\\\"],\\n        var_name=\\\"metric\\\",\\n        value_name=\\\"value\\\",\\n    )\\n\\n    # Final tidy output\\n    transformed_df = df_long[[\\\"date\\\", \\\"symbol\\\", \\\"metric\\\", \\\"value\\\"]].reset_index(drop=True)\\n    return transformed_df\\n```\"}],\"trigger\":{\"tableId\":\"table-265247\",\"sourceTableIds\":[\"history\"],\"instruction\":\"3) For each symbol, compute daily returns as pct_change of close, then 20-day rolling volatility as the rolling std of these returns; keep volume. Reshape to long format with columns [date, symbol, metric, value], where metric ∈ {\\\"return\\\", \\\"vol20\\\", \\\"volume\\\"}, and visualize over time (e.g., faceted by symbol with separate lines for each metric) to highlight periods of strong trends with elevated volatility or volume.\",\"displayInstruction\":\"Show **daily return**, **20-day volatility**, and **volume** by **symbol** over **date**\",\"chart\":{\"id\":\"chart-1769471280073\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"history\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-277926\"},\"explanation\":{\"status\":\"ok\",\"concepts\":[{\"field\":\"return\",\"explanation\":\"Daily return measures how much the closing price changes in percentage terms from one trading day to the next for the same symbol. For day t, return_t = (Close_t - Close_{t-1}) / Close_{t-1}.\"},{\"field\":\"vol20\",\"explanation\":\"20-day rolling volatility is a short-term risk measure that summarizes how much the daily returns have fluctuated over roughly the past month. For each date, vol20 is the standard deviation of the last up-to-20 'return' values for that symbol; higher vol20 indicates more unstable (more volatile) recent price movements.\"},{\"field\":\"metric, value\",\"explanation\":\"These two fields reorganize different measures into a single tidy structure: 'metric' tells you which quantity is being reported (return, vol20, or volume), and 'value' stores the corresponding number. This makes it easy to filter and compare different metrics in the same table.\"},{\"field\":\"Statistical Analysis\",\"explanation\":\"The transformation introduces two statistical concepts: (1) daily returns, which quantify relative price changes over time, and (2) rolling volatility, which applies a moving standard deviation to recent returns to estimate short-term risk. The model is implicit: for each symbol, returns are treated as a time series, and volatility is computed over a 20-day rolling window. Other possible analyses on this data could include moving averages of price or volume, exponential moving volatility, correlation between different symbols' returns, or time-series models such as ARIMA or GARCH to forecast returns and volatility.\"}],\"code\":\"- **Selects** only the key fields from the original data: **\\\"date\\\"**, **\\\"symbol\\\"**, **\\\"close\\\"**, and **\\\"volume\\\"**.\\n- **Standardizes** the **\\\"date\\\"** format to **\\\"YYYY-MM-DD\\\"** so all dates are consistent.\\n- **Sorts** the data by **\\\"symbol\\\"** and then by **\\\"date\\\"** to put each stock’s prices in correct time order.\\n- For each **symbol**, **calculates daily price change**:\\n  - Adds a new field **\\\"return\\\"** = the **percentage change of the closing price** from the previous trading day for that same symbol.\\n- For each **symbol**, **measures recent risk/variability**:\\n  - Adds a new field **\\\"vol20\\\"** = the **20‑day rolling volatility**, i.e., the **standard deviation of the last up-to-20 daily returns** (a larger value means the stock has been more volatile recently).\\n- **Restructures** the data into a “long” tidy format:\\n  - Keeps **\\\"date\\\"** and **\\\"symbol\\\"**.\\n  - Converts the three measures **\\\"return\\\"**, **\\\"vol20\\\"**, and **\\\"volume\\\"** into rows under a single **\\\"metric\\\"** column, with their numbers stored in a **\\\"value\\\"** column.\\n- **Outputs** a clean table with columns **\\\"date\\\"**, **\\\"symbol\\\"**, **\\\"metric\\\"**, and **\\\"value\\\"**, where each row represents **one metric for one stock on one date**.\",\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\n## Table 1: history (738 rows × 8 columns)\\n\\n### Schema (8 fields)\\n  - symbol -- type: object, values: AAPL, AMZN, GOOGL, META, MSFT, NVDA\\n  - date -- type: object, values: 2025-07-30, 2025-07-31, 2025-08-01, ..., 2026-01-20, 2026-01-21, 2026-01-22, 2026-01-23\\n  - open -- type: float64, values: 167.53, 168.01, 169.07, ..., 781.21, 782.98, 785.25, 789.97\\n  - high -- type: float64, values: 169.01, 170.94, 170.96, ..., 789.62, 792.49, 794.28, 795.06\\n  - low -- type: float64, values: 164.05, 166.72, 167.2, ..., 771.36, 772.21, 777.07, 779.66\\n  - close -- type: float64, values: 167.0, 168.29, 170.28, ..., 779.09, 780.97, 784.06, 788.82\\n  - volume -- type: int64, values: 5627500, 5855900, 6861200, ..., 320600300, 324925900, 343504800, 346926200\\n  - fetched_at -- type: object, values: 2026-01-26T23:46:42.347312Z\\n\\n### Sample Data (first 5 rows)\\n```\\n  symbol        date    open    high     low   close     volume                   fetched_at\\n0   AAPL  2025-07-30  211.45  211.94  207.28  208.61   45512500  2026-01-26T23:46:42.347312Z\\n1   AAPL  2025-07-31  208.05  209.40  206.72  207.13   80698400  2026-01-26T23:46:42.347312Z\\n2   AAPL  2025-08-01  210.43  213.13  201.08  201.95  104434500  2026-01-26T23:46:42.347312Z\\n3   AAPL  2025-08-04  204.08  207.44  201.26  202.92   75109300  2026-01-26T23:46:42.347312Z\\n4   AAPL  2025-08-05  202.97  204.91  201.74  202.49   44155100  2026-01-26T23:46:42.347312Z\\n```\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Keep only necessary columns\\n    cols = [c for c in [\\\"date\\\", \\\"symbol\\\", \\\"close\\\", \\\"volume\\\"] if c in df_history.columns]\\n    df = df_history[cols].copy()\\n\\n    # Normalize date to string YYYY-MM-DD\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for time-series operations\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"]).reset_index(drop=True)\\n\\n    # Compute daily returns as pct_change of close within each symbol\\n    df[\\\"return\\\"] = df.groupby(\\\"symbol\\\")[\\\"close\\\"].pct_change()\\n\\n    # Compute 20-day rolling volatility (std of returns) within each symbol\\n    df[\\\"vol20\\\"] = (\\n        df.groupby(\\\"symbol\\\")[\\\"return\\\"]\\n          .transform(lambda s: s.rolling(window=20, min_periods=1).std())\\n    )\\n\\n    # Reshape to long format: metrics = return, vol20, volume\\n    df_long = df.melt(\\n        id_vars=[\\\"date\\\", \\\"symbol\\\"],\\n        value_vars=[\\\"return\\\", \\\"vol20\\\", \\\"volume\\\"],\\n        var_name=\\\"metric\\\",\\n        value_name=\\\"value\\\",\\n    )\\n\\n    # Final tidy output\\n    transformed_df = df_long[[\\\"date\\\", \\\"symbol\\\", \\\"metric\\\", \\\"value\\\"]].reset_index(drop=True)\\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\"},{\"role\":\"assistant\",\"content\":\"[CODE EXPLANATION]\\n\\n- **Selects** only the key fields from the original data: **\\\"date\\\"**, **\\\"symbol\\\"**, **\\\"close\\\"**, and **\\\"volume\\\"**.\\n- **Standardizes** the **\\\"date\\\"** format to **\\\"YYYY-MM-DD\\\"** so all dates are consistent.\\n- **Sorts** the data by **\\\"symbol\\\"** and then by **\\\"date\\\"** to put each stock’s prices in correct time order.\\n- For each **symbol**, **calculates daily price change**:\\n  - Adds a new field **\\\"return\\\"** = the **percentage change of the closing price** from the previous trading day for that same symbol.\\n- For each **symbol**, **measures recent risk/variability**:\\n  - Adds a new field **\\\"vol20\\\"** = the **20‑day rolling volatility**, i.e., the **standard deviation of the last up-to-20 daily returns** (a larger value means the stock has been more volatile recently).\\n- **Restructures** the data into a “long” tidy format:\\n  - Keeps **\\\"date\\\"** and **\\\"symbol\\\"**.\\n  - Converts the three measures **\\\"return\\\"**, **\\\"vol20\\\"**, and **\\\"volume\\\"** into rows under a single **\\\"metric\\\"** column, with their numbers stored in a **\\\"value\\\"** column.\\n- **Outputs** a clean table with columns **\\\"date\\\"**, **\\\"symbol\\\"**, **\\\"metric\\\"**, and **\\\"value\\\"**, where each row represents **one metric for one stock on one date**.\\n\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n  {\\n    \\\"field\\\": \\\"return\\\",\\n    \\\"explanation\\\": \\\"Daily return measures how much the closing price changes in percentage terms from one trading day to the next for the same symbol. For day t, return_t = (Close_t - Close_{t-1}) / Close_{t-1}.\\\"\\n  },\\n  {\\n    \\\"field\\\": \\\"vol20\\\",\\n    \\\"explanation\\\": \\\"20-day rolling volatility is a short-term risk measure that summarizes how much the daily returns have fluctuated over roughly the past month. For each date, vol20 is the standard deviation of the last up-to-20 'return' values for that symbol; higher vol20 indicates more unstable (more volatile) recent price movements.\\\"\\n  },\\n  {\\n    \\\"field\\\": \\\"metric, value\\\",\\n    \\\"explanation\\\": \\\"These two fields reorganize different measures into a single tidy structure: 'metric' tells you which quantity is being reported (return, vol20, or volume), and 'value' stores the corresponding number. This makes it easy to filter and compare different metrics in the same table.\\\"\\n  },\\n  {\\n    \\\"field\\\": \\\"Statistical Analysis\\\",\\n    \\\"explanation\\\": \\\"The transformation introduces two statistical concepts: (1) daily returns, which quantify relative price changes over time, and (2) rolling volatility, which applies a moving standard deviation to recent returns to estimate short-term risk. The model is implicit: for each symbol, returns are treated as a time series, and volatility is computed over a 20-day rolling window. Other possible analyses on this data could include moving averages of price or volume, exponential moving volatility, correlation between different symbols' returns, or time-series models such as ARIMA or GARCH to forecast returns and volatility.\\\"\\n  }\\n]\\n```\"}],\"agent\":\"CodeExplanationAgent\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\",\"contentHash\":\"d0e7201e\"},{\"id\":\"table-457008\",\"displayId\":\"stock-close1\",\"names\":[\"date\",\"symbol\",\"close\"],\"rows\":[{\"date\":\"2025-07-31\",\"symbol\":\"GOOGL\",\"close\":191.6},{\"date\":\"2025-08-01\",\"symbol\":\"GOOGL\",\"close\":188.84},{\"date\":\"2025-08-04\",\"symbol\":\"GOOGL\",\"close\":194.74},{\"date\":\"2025-08-05\",\"symbol\":\"GOOGL\",\"close\":194.37},{\"date\":\"2025-08-06\",\"symbol\":\"GOOGL\",\"close\":195.79},{\"date\":\"2025-08-07\",\"symbol\":\"GOOGL\",\"close\":196.22},{\"date\":\"2025-08-08\",\"symbol\":\"GOOGL\",\"close\":201.11},{\"date\":\"2025-08-11\",\"symbol\":\"GOOGL\",\"close\":200.69},{\"date\":\"2025-08-12\",\"symbol\":\"GOOGL\",\"close\":203.03},{\"date\":\"2025-08-13\",\"symbol\":\"GOOGL\",\"close\":201.65},{\"date\":\"2025-08-14\",\"symbol\":\"GOOGL\",\"close\":202.63},{\"date\":\"2025-08-15\",\"symbol\":\"GOOGL\",\"close\":203.58},{\"date\":\"2025-08-18\",\"symbol\":\"GOOGL\",\"close\":203.19},{\"date\":\"2025-08-19\",\"symbol\":\"GOOGL\",\"close\":201.26},{\"date\":\"2025-08-20\",\"symbol\":\"GOOGL\",\"close\":199.01},{\"date\":\"2025-08-21\",\"symbol\":\"GOOGL\",\"close\":199.44},{\"date\":\"2025-08-22\",\"symbol\":\"GOOGL\",\"close\":205.77},{\"date\":\"2025-08-25\",\"symbol\":\"GOOGL\",\"close\":208.17},{\"date\":\"2025-08-26\",\"symbol\":\"GOOGL\",\"close\":206.82},{\"date\":\"2025-08-27\",\"symbol\":\"GOOGL\",\"close\":207.16},{\"date\":\"2025-08-28\",\"symbol\":\"GOOGL\",\"close\":211.31},{\"date\":\"2025-08-29\",\"symbol\":\"GOOGL\",\"close\":212.58},{\"date\":\"2025-09-02\",\"symbol\":\"GOOGL\",\"close\":211.02},{\"date\":\"2025-09-03\",\"symbol\":\"GOOGL\",\"close\":230.3},{\"date\":\"2025-09-04\",\"symbol\":\"GOOGL\",\"close\":231.94},{\"date\":\"2025-09-05\",\"symbol\":\"GOOGL\",\"close\":234.64},{\"date\":\"2025-09-08\",\"symbol\":\"GOOGL\",\"close\":233.89},{\"date\":\"2025-09-09\",\"symbol\":\"GOOGL\",\"close\":239.47},{\"date\":\"2025-09-10\",\"symbol\":\"GOOGL\",\"close\":239.01},{\"date\":\"2025-09-11\",\"symbol\":\"GOOGL\",\"close\":240.21},{\"date\":\"2025-09-12\",\"symbol\":\"GOOGL\",\"close\":240.64},{\"date\":\"2025-09-15\",\"symbol\":\"GOOGL\",\"close\":251.45},{\"date\":\"2025-09-16\",\"symbol\":\"GOOGL\",\"close\":251},{\"date\":\"2025-09-17\",\"symbol\":\"GOOGL\",\"close\":249.37},{\"date\":\"2025-09-18\",\"symbol\":\"GOOGL\",\"close\":251.87},{\"date\":\"2025-09-19\",\"symbol\":\"GOOGL\",\"close\":254.55},{\"date\":\"2025-09-22\",\"symbol\":\"GOOGL\",\"close\":252.36},{\"date\":\"2025-09-23\",\"symbol\":\"GOOGL\",\"close\":251.5},{\"date\":\"2025-09-24\",\"symbol\":\"GOOGL\",\"close\":246.98},{\"date\":\"2025-09-25\",\"symbol\":\"GOOGL\",\"close\":245.63},{\"date\":\"2025-09-26\",\"symbol\":\"GOOGL\",\"close\":246.38},{\"date\":\"2025-09-29\",\"symbol\":\"GOOGL\",\"close\":243.89},{\"date\":\"2025-09-30\",\"symbol\":\"GOOGL\",\"close\":242.94},{\"date\":\"2025-10-01\",\"symbol\":\"GOOGL\",\"close\":244.74},{\"date\":\"2025-10-02\",\"symbol\":\"GOOGL\",\"close\":245.53},{\"date\":\"2025-10-03\",\"symbol\":\"GOOGL\",\"close\":245.19},{\"date\":\"2025-10-06\",\"symbol\":\"GOOGL\",\"close\":250.27},{\"date\":\"2025-10-07\",\"symbol\":\"GOOGL\",\"close\":245.6},{\"date\":\"2025-10-08\",\"symbol\":\"GOOGL\",\"close\":244.46},{\"date\":\"2025-10-09\",\"symbol\":\"GOOGL\",\"close\":241.37},{\"date\":\"2025-10-10\",\"symbol\":\"GOOGL\",\"close\":236.42},{\"date\":\"2025-10-13\",\"symbol\":\"GOOGL\",\"close\":243.99},{\"date\":\"2025-10-14\",\"symbol\":\"GOOGL\",\"close\":245.29},{\"date\":\"2025-10-15\",\"symbol\":\"GOOGL\",\"close\":250.87},{\"date\":\"2025-10-16\",\"symbol\":\"GOOGL\",\"close\":251.3},{\"date\":\"2025-10-17\",\"symbol\":\"GOOGL\",\"close\":253.13},{\"date\":\"2025-10-20\",\"symbol\":\"GOOGL\",\"close\":256.38},{\"date\":\"2025-10-21\",\"symbol\":\"GOOGL\",\"close\":250.3},{\"date\":\"2025-10-22\",\"symbol\":\"GOOGL\",\"close\":251.53},{\"date\":\"2025-10-23\",\"symbol\":\"GOOGL\",\"close\":252.91},{\"date\":\"2025-10-24\",\"symbol\":\"GOOGL\",\"close\":259.75},{\"date\":\"2025-10-27\",\"symbol\":\"GOOGL\",\"close\":269.09},{\"date\":\"2025-10-28\",\"symbol\":\"GOOGL\",\"close\":267.3},{\"date\":\"2025-10-29\",\"symbol\":\"GOOGL\",\"close\":274.39},{\"date\":\"2025-10-30\",\"symbol\":\"GOOGL\",\"close\":281.3},{\"date\":\"2025-10-31\",\"symbol\":\"GOOGL\",\"close\":281.01},{\"date\":\"2025-11-03\",\"symbol\":\"GOOGL\",\"close\":283.53},{\"date\":\"2025-11-04\",\"symbol\":\"GOOGL\",\"close\":277.36},{\"date\":\"2025-11-05\",\"symbol\":\"GOOGL\",\"close\":284.12},{\"date\":\"2025-11-06\",\"symbol\":\"GOOGL\",\"close\":284.56},{\"date\":\"2025-11-07\",\"symbol\":\"GOOGL\",\"close\":278.65},{\"date\":\"2025-11-10\",\"symbol\":\"GOOGL\",\"close\":289.91},{\"date\":\"2025-11-11\",\"symbol\":\"GOOGL\",\"close\":291.12},{\"date\":\"2025-11-12\",\"symbol\":\"GOOGL\",\"close\":286.52},{\"date\":\"2025-11-13\",\"symbol\":\"GOOGL\",\"close\":278.39},{\"date\":\"2025-11-14\",\"symbol\":\"GOOGL\",\"close\":276.23},{\"date\":\"2025-11-17\",\"symbol\":\"GOOGL\",\"close\":284.83},{\"date\":\"2025-11-18\",\"symbol\":\"GOOGL\",\"close\":284.09},{\"date\":\"2025-11-19\",\"symbol\":\"GOOGL\",\"close\":292.62},{\"date\":\"2025-11-20\",\"symbol\":\"GOOGL\",\"close\":289.26},{\"date\":\"2025-11-21\",\"symbol\":\"GOOGL\",\"close\":299.46},{\"date\":\"2025-11-24\",\"symbol\":\"GOOGL\",\"close\":318.37},{\"date\":\"2025-11-25\",\"symbol\":\"GOOGL\",\"close\":323.23},{\"date\":\"2025-11-26\",\"symbol\":\"GOOGL\",\"close\":319.74},{\"date\":\"2025-11-28\",\"symbol\":\"GOOGL\",\"close\":319.97},{\"date\":\"2025-12-01\",\"symbol\":\"GOOGL\",\"close\":314.68},{\"date\":\"2025-12-02\",\"symbol\":\"GOOGL\",\"close\":315.6},{\"date\":\"2025-12-03\",\"symbol\":\"GOOGL\",\"close\":319.42},{\"date\":\"2025-12-04\",\"symbol\":\"GOOGL\",\"close\":317.41},{\"date\":\"2025-12-05\",\"symbol\":\"GOOGL\",\"close\":321.06},{\"date\":\"2025-12-08\",\"symbol\":\"GOOGL\",\"close\":313.72},{\"date\":\"2025-12-09\",\"symbol\":\"GOOGL\",\"close\":317.08},{\"date\":\"2025-12-10\",\"symbol\":\"GOOGL\",\"close\":320.21},{\"date\":\"2025-12-11\",\"symbol\":\"GOOGL\",\"close\":312.43},{\"date\":\"2025-12-12\",\"symbol\":\"GOOGL\",\"close\":309.29},{\"date\":\"2025-12-15\",\"symbol\":\"GOOGL\",\"close\":308.22},{\"date\":\"2025-12-16\",\"symbol\":\"GOOGL\",\"close\":306.57},{\"date\":\"2025-12-17\",\"symbol\":\"GOOGL\",\"close\":296.72},{\"date\":\"2025-12-18\",\"symbol\":\"GOOGL\",\"close\":302.46},{\"date\":\"2025-12-19\",\"symbol\":\"GOOGL\",\"close\":307.16},{\"date\":\"2025-12-22\",\"symbol\":\"GOOGL\",\"close\":309.78},{\"date\":\"2025-12-23\",\"symbol\":\"GOOGL\",\"close\":314.35},{\"date\":\"2025-12-24\",\"symbol\":\"GOOGL\",\"close\":314.09},{\"date\":\"2025-12-26\",\"symbol\":\"GOOGL\",\"close\":313.51},{\"date\":\"2025-12-29\",\"symbol\":\"GOOGL\",\"close\":313.56},{\"date\":\"2025-12-30\",\"symbol\":\"GOOGL\",\"close\":313.85},{\"date\":\"2025-12-31\",\"symbol\":\"GOOGL\",\"close\":313},{\"date\":\"2026-01-02\",\"symbol\":\"GOOGL\",\"close\":315.15},{\"date\":\"2026-01-05\",\"symbol\":\"GOOGL\",\"close\":316.54},{\"date\":\"2026-01-06\",\"symbol\":\"GOOGL\",\"close\":314.34},{\"date\":\"2026-01-07\",\"symbol\":\"GOOGL\",\"close\":321.98},{\"date\":\"2026-01-08\",\"symbol\":\"GOOGL\",\"close\":325.44},{\"date\":\"2026-01-09\",\"symbol\":\"GOOGL\",\"close\":328.57},{\"date\":\"2026-01-12\",\"symbol\":\"GOOGL\",\"close\":331.86},{\"date\":\"2026-01-13\",\"symbol\":\"GOOGL\",\"close\":335.97},{\"date\":\"2026-01-14\",\"symbol\":\"GOOGL\",\"close\":335.84},{\"date\":\"2026-01-15\",\"symbol\":\"GOOGL\",\"close\":332.78},{\"date\":\"2026-01-16\",\"symbol\":\"GOOGL\",\"close\":330},{\"date\":\"2026-01-20\",\"symbol\":\"GOOGL\",\"close\":322},{\"date\":\"2026-01-21\",\"symbol\":\"GOOGL\",\"close\":328.38},{\"date\":\"2026-01-22\",\"symbol\":\"GOOGL\",\"close\":330.54},{\"date\":\"2026-01-23\",\"symbol\":\"GOOGL\",\"close\":327.93},{\"date\":\"2026-01-26\",\"symbol\":\"GOOGL\",\"close\":333.26},{\"date\":\"2025-07-31\",\"symbol\":\"MSFT\",\"close\":531.63},{\"date\":\"2025-08-01\",\"symbol\":\"MSFT\",\"close\":522.27},{\"date\":\"2025-08-04\",\"symbol\":\"MSFT\",\"close\":533.76},{\"date\":\"2025-08-05\",\"symbol\":\"MSFT\",\"close\":525.9},{\"date\":\"2025-08-06\",\"symbol\":\"MSFT\",\"close\":523.1},{\"date\":\"2025-08-07\",\"symbol\":\"MSFT\",\"close\":519.01},{\"date\":\"2025-08-08\",\"symbol\":\"MSFT\",\"close\":520.21},{\"date\":\"2025-08-11\",\"symbol\":\"MSFT\",\"close\":519.94},{\"date\":\"2025-08-12\",\"symbol\":\"MSFT\",\"close\":527.38},{\"date\":\"2025-08-13\",\"symbol\":\"MSFT\",\"close\":518.75},{\"date\":\"2025-08-14\",\"symbol\":\"MSFT\",\"close\":520.65},{\"date\":\"2025-08-15\",\"symbol\":\"MSFT\",\"close\":518.35},{\"date\":\"2025-08-18\",\"symbol\":\"MSFT\",\"close\":515.29},{\"date\":\"2025-08-19\",\"symbol\":\"MSFT\",\"close\":507.98},{\"date\":\"2025-08-20\",\"symbol\":\"MSFT\",\"close\":503.95},{\"date\":\"2025-08-21\",\"symbol\":\"MSFT\",\"close\":503.3},{\"date\":\"2025-08-22\",\"symbol\":\"MSFT\",\"close\":506.28},{\"date\":\"2025-08-25\",\"symbol\":\"MSFT\",\"close\":503.32},{\"date\":\"2025-08-26\",\"symbol\":\"MSFT\",\"close\":501.1},{\"date\":\"2025-08-27\",\"symbol\":\"MSFT\",\"close\":505.79},{\"date\":\"2025-08-28\",\"symbol\":\"MSFT\",\"close\":508.69},{\"date\":\"2025-08-29\",\"symbol\":\"MSFT\",\"close\":505.74},{\"date\":\"2025-09-02\",\"symbol\":\"MSFT\",\"close\":504.18},{\"date\":\"2025-09-03\",\"symbol\":\"MSFT\",\"close\":504.41},{\"date\":\"2025-09-04\",\"symbol\":\"MSFT\",\"close\":507.02},{\"date\":\"2025-09-05\",\"symbol\":\"MSFT\",\"close\":494.08},{\"date\":\"2025-09-08\",\"symbol\":\"MSFT\",\"close\":497.27},{\"date\":\"2025-09-09\",\"symbol\":\"MSFT\",\"close\":497.48},{\"date\":\"2025-09-10\",\"symbol\":\"MSFT\",\"close\":499.44},{\"date\":\"2025-09-11\",\"symbol\":\"MSFT\",\"close\":500.07},{\"date\":\"2025-09-12\",\"symbol\":\"MSFT\",\"close\":508.95},{\"date\":\"2025-09-15\",\"symbol\":\"MSFT\",\"close\":514.4},{\"date\":\"2025-09-16\",\"symbol\":\"MSFT\",\"close\":508.09},{\"date\":\"2025-09-17\",\"symbol\":\"MSFT\",\"close\":509.07},{\"date\":\"2025-09-18\",\"symbol\":\"MSFT\",\"close\":507.5},{\"date\":\"2025-09-19\",\"symbol\":\"MSFT\",\"close\":516.96},{\"date\":\"2025-09-22\",\"symbol\":\"MSFT\",\"close\":513.49},{\"date\":\"2025-09-23\",\"symbol\":\"MSFT\",\"close\":508.28},{\"date\":\"2025-09-24\",\"symbol\":\"MSFT\",\"close\":509.2},{\"date\":\"2025-09-25\",\"symbol\":\"MSFT\",\"close\":506.08},{\"date\":\"2025-09-26\",\"symbol\":\"MSFT\",\"close\":510.5},{\"date\":\"2025-09-29\",\"symbol\":\"MSFT\",\"close\":513.64},{\"date\":\"2025-09-30\",\"symbol\":\"MSFT\",\"close\":516.98},{\"date\":\"2025-10-01\",\"symbol\":\"MSFT\",\"close\":518.74},{\"date\":\"2025-10-02\",\"symbol\":\"MSFT\",\"close\":514.78},{\"date\":\"2025-10-03\",\"symbol\":\"MSFT\",\"close\":516.38},{\"date\":\"2025-10-06\",\"symbol\":\"MSFT\",\"close\":527.58},{\"date\":\"2025-10-07\",\"symbol\":\"MSFT\",\"close\":523},{\"date\":\"2025-10-08\",\"symbol\":\"MSFT\",\"close\":523.87},{\"date\":\"2025-10-09\",\"symbol\":\"MSFT\",\"close\":521.42},{\"date\":\"2025-10-10\",\"symbol\":\"MSFT\",\"close\":510.01},{\"date\":\"2025-10-13\",\"symbol\":\"MSFT\",\"close\":513.09},{\"date\":\"2025-10-14\",\"symbol\":\"MSFT\",\"close\":512.61},{\"date\":\"2025-10-15\",\"symbol\":\"MSFT\",\"close\":512.47},{\"date\":\"2025-10-16\",\"symbol\":\"MSFT\",\"close\":510.65},{\"date\":\"2025-10-17\",\"symbol\":\"MSFT\",\"close\":512.62},{\"date\":\"2025-10-20\",\"symbol\":\"MSFT\",\"close\":515.82},{\"date\":\"2025-10-21\",\"symbol\":\"MSFT\",\"close\":516.69},{\"date\":\"2025-10-22\",\"symbol\":\"MSFT\",\"close\":519.57},{\"date\":\"2025-10-23\",\"symbol\":\"MSFT\",\"close\":519.59},{\"date\":\"2025-10-24\",\"symbol\":\"MSFT\",\"close\":522.63},{\"date\":\"2025-10-27\",\"symbol\":\"MSFT\",\"close\":530.53},{\"date\":\"2025-10-28\",\"symbol\":\"MSFT\",\"close\":541.06},{\"date\":\"2025-10-29\",\"symbol\":\"MSFT\",\"close\":540.54},{\"date\":\"2025-10-30\",\"symbol\":\"MSFT\",\"close\":524.78},{\"date\":\"2025-10-31\",\"symbol\":\"MSFT\",\"close\":516.84},{\"date\":\"2025-11-03\",\"symbol\":\"MSFT\",\"close\":516.06},{\"date\":\"2025-11-04\",\"symbol\":\"MSFT\",\"close\":513.37},{\"date\":\"2025-11-05\",\"symbol\":\"MSFT\",\"close\":506.21},{\"date\":\"2025-11-06\",\"symbol\":\"MSFT\",\"close\":496.17},{\"date\":\"2025-11-07\",\"symbol\":\"MSFT\",\"close\":495.89},{\"date\":\"2025-11-10\",\"symbol\":\"MSFT\",\"close\":505.05},{\"date\":\"2025-11-11\",\"symbol\":\"MSFT\",\"close\":507.73},{\"date\":\"2025-11-12\",\"symbol\":\"MSFT\",\"close\":510.19},{\"date\":\"2025-11-13\",\"symbol\":\"MSFT\",\"close\":502.35},{\"date\":\"2025-11-14\",\"symbol\":\"MSFT\",\"close\":509.23},{\"date\":\"2025-11-17\",\"symbol\":\"MSFT\",\"close\":506.54},{\"date\":\"2025-11-18\",\"symbol\":\"MSFT\",\"close\":492.87},{\"date\":\"2025-11-19\",\"symbol\":\"MSFT\",\"close\":486.21},{\"date\":\"2025-11-20\",\"symbol\":\"MSFT\",\"close\":478.43},{\"date\":\"2025-11-21\",\"symbol\":\"MSFT\",\"close\":472.12},{\"date\":\"2025-11-24\",\"symbol\":\"MSFT\",\"close\":474},{\"date\":\"2025-11-25\",\"symbol\":\"MSFT\",\"close\":476.99},{\"date\":\"2025-11-26\",\"symbol\":\"MSFT\",\"close\":485.5},{\"date\":\"2025-11-28\",\"symbol\":\"MSFT\",\"close\":492.01},{\"date\":\"2025-12-01\",\"symbol\":\"MSFT\",\"close\":486.74},{\"date\":\"2025-12-02\",\"symbol\":\"MSFT\",\"close\":490},{\"date\":\"2025-12-03\",\"symbol\":\"MSFT\",\"close\":477.73},{\"date\":\"2025-12-04\",\"symbol\":\"MSFT\",\"close\":480.84},{\"date\":\"2025-12-05\",\"symbol\":\"MSFT\",\"close\":483.16},{\"date\":\"2025-12-08\",\"symbol\":\"MSFT\",\"close\":491.02},{\"date\":\"2025-12-09\",\"symbol\":\"MSFT\",\"close\":492.02},{\"date\":\"2025-12-10\",\"symbol\":\"MSFT\",\"close\":478.56},{\"date\":\"2025-12-11\",\"symbol\":\"MSFT\",\"close\":483.47},{\"date\":\"2025-12-12\",\"symbol\":\"MSFT\",\"close\":478.53},{\"date\":\"2025-12-15\",\"symbol\":\"MSFT\",\"close\":474.82},{\"date\":\"2025-12-16\",\"symbol\":\"MSFT\",\"close\":476.39},{\"date\":\"2025-12-17\",\"symbol\":\"MSFT\",\"close\":476.12},{\"date\":\"2025-12-18\",\"symbol\":\"MSFT\",\"close\":483.98},{\"date\":\"2025-12-19\",\"symbol\":\"MSFT\",\"close\":485.92},{\"date\":\"2025-12-22\",\"symbol\":\"MSFT\",\"close\":484.92},{\"date\":\"2025-12-23\",\"symbol\":\"MSFT\",\"close\":486.85},{\"date\":\"2025-12-24\",\"symbol\":\"MSFT\",\"close\":488.02},{\"date\":\"2025-12-26\",\"symbol\":\"MSFT\",\"close\":487.71},{\"date\":\"2025-12-29\",\"symbol\":\"MSFT\",\"close\":487.1},{\"date\":\"2025-12-30\",\"symbol\":\"MSFT\",\"close\":487.48},{\"date\":\"2025-12-31\",\"symbol\":\"MSFT\",\"close\":483.62},{\"date\":\"2026-01-02\",\"symbol\":\"MSFT\",\"close\":472.94},{\"date\":\"2026-01-05\",\"symbol\":\"MSFT\",\"close\":472.85},{\"date\":\"2026-01-06\",\"symbol\":\"MSFT\",\"close\":478.51},{\"date\":\"2026-01-07\",\"symbol\":\"MSFT\",\"close\":483.47},{\"date\":\"2026-01-08\",\"symbol\":\"MSFT\",\"close\":478.11},{\"date\":\"2026-01-09\",\"symbol\":\"MSFT\",\"close\":479.28},{\"date\":\"2026-01-12\",\"symbol\":\"MSFT\",\"close\":477.18},{\"date\":\"2026-01-13\",\"symbol\":\"MSFT\",\"close\":470.67},{\"date\":\"2026-01-14\",\"symbol\":\"MSFT\",\"close\":459.38},{\"date\":\"2026-01-15\",\"symbol\":\"MSFT\",\"close\":456.66},{\"date\":\"2026-01-16\",\"symbol\":\"MSFT\",\"close\":459.86},{\"date\":\"2026-01-20\",\"symbol\":\"MSFT\",\"close\":454.52},{\"date\":\"2026-01-21\",\"symbol\":\"MSFT\",\"close\":444.11},{\"date\":\"2026-01-22\",\"symbol\":\"MSFT\",\"close\":451.14},{\"date\":\"2026-01-23\",\"symbol\":\"MSFT\",\"close\":465.95},{\"date\":\"2026-01-26\",\"symbol\":\"MSFT\",\"close\":470.28}],\"metadata\":{\"date\":{\"type\":\"date\",\"semanticType\":\"Date\",\"levels\":[]},\"symbol\":{\"type\":\"string\",\"semanticType\":\"String\"},\"close\":{\"type\":\"number\",\"semanticType\":\"Number\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Select only needed columns\\n    cols = [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"]\\n    df = df_history[cols].copy()\\n\\n    # Filter for Microsoft (MSFT) and Google (GOOGL)\\n    target_symbols = [\\\"MSFT\\\", \\\"GOOGL\\\"]\\n    df = df[df[\\\"symbol\\\"].isin(target_symbols)].copy()\\n\\n    # Ensure date is a string in YYYY-MM-DD format (no datetime objects)\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper line plotting\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"]).reset_index(drop=True)\\n\\n    transformed_df = df\\n    return transformed_df\\n\",\"source\":[\"history\"],\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"input_tables\\\", the names of a subset of input tables from [CONTEXT] section that will be used to achieve the user's goal.\\n            - **IMPORTANT** Note that the Table 1 in [CONTEXT] section is the table the user is currently viewing, it should take precedence if the user refers to insights about the \\\"current table\\\".\\n            - At the same time, leverage table information to determine which tables are relevant to the user's goal and should be used.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, latitude, longitude, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n            - if the user provides latitude and longitude as visual channels, use \\\"latitude\\\" and \\\"longitude\\\" as visual channels in \\\"chart_encodings\\\" as opposed to \\\"x\\\" and \\\"y\\\".\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\".\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"input_tables\\\": [...] // string[], describe names of the input tables that will be used in the transformation.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables described in \\\"input_tables\\\") and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], only import libraries allowed in the template, do not modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n# from sklearn import ... # import from sklearn if you need it.\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- decide the function signature based on the number of tables you decided in the previous step \\\"input_tables\\\":\\n    - if you decide there will only be one input table, then function signature should be `def transform_data(df1)`\\n    - if you decided there will be k input tables, then function signature should be `def transform_data(df_1, df_2, ..., df_k)`.\\n    - instead of using generic names like df1, df2, ..., try to use intuitive table names for function arguments, for example, if you have input_tables: [\\\"City\\\", \\\"Weather\\\"]`, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes.\\n    - **VERY IMPORTANT** the number of arguments in the function signature must be the same as the number of tables provided in \\\"input_tables\\\", and the order of arguments must match the order of tables provided in \\\"input_tables\\\".\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\n## Table 1: history (738 rows × 8 columns)\\n\\n### Schema (8 fields)\\n  - symbol -- type: object, values: AAPL, AMZN, GOOGL, META, MSFT, NVDA\\n  - date -- type: object, values: 2025-07-30, 2025-07-31, 2025-08-01, ..., 2026-01-20, 2026-01-21, 2026-01-22, 2026-01-23\\n  - open -- type: float64, values: 167.53, 168.01, 169.07, ..., 781.21, 782.98, 785.25, 789.97\\n  - high -- type: float64, values: 169.01, 170.94, 170.96, ..., 789.62, 792.49, 794.28, 795.06\\n  - low -- type: float64, values: 164.05, 166.72, 167.2, ..., 771.36, 772.21, 777.07, 779.66\\n  - close -- type: float64, values: 167.0, 168.29, 170.28, ..., 779.09, 780.97, 784.06, 788.82\\n  - volume -- type: int64, values: 5627500, 5855900, 6861200, ..., 320600300, 324925900, 343504800, 346926200\\n  - fetched_at -- type: object, values: 2026-01-26T23:46:42.347312Z\\n\\n### Sample Data (first 5 rows)\\n```\\n  symbol        date    open    high     low   close     volume                   fetched_at\\n0   AAPL  2025-07-30  211.45  211.94  207.28  208.61   45512500  2026-01-26T23:46:42.347312Z\\n1   AAPL  2025-07-31  208.05  209.40  206.72  207.13   80698400  2026-01-26T23:46:42.347312Z\\n2   AAPL  2025-08-01  210.43  213.13  201.08  201.95  104434500  2026-01-26T23:46:42.347312Z\\n3   AAPL  2025-08-04  204.08  207.44  201.26  202.92   75109300  2026-01-26T23:46:42.347312Z\\n4   AAPL  2025-08-05  202.97  204.91  201.74  202.49   44155100  2026-01-26T23:46:42.347312Z\\n```\\n\\n\\n[GOAL]\\n\\n1) First, plot the overall **closing price** trends for each **symbol** over **time** on a single line chart to compare their broad trajectories and volatility.\"},{\"role\":\"assistant\",\"content\":\"{\\n  \\\"mode\\\": \\\"infer\\\",\\n  \\\"recap\\\": \\\"Compare overall closing price trends and volatility over time for each stock symbol on a single line chart.\\\",\\n  \\\"display_instruction\\\": \\\"Visualize **closing price** trends by **symbol** over **date**\\\",\\n  \\\"recommendation\\\": \\\"A line chart with time on the x-axis and closing price on the y-axis, colored by symbol, best shows comparative trajectories and volatility over time. The data only needs column selection, date normalization, and sorting to be visualization-ready.\\\",\\n  \\\"input_tables\\\": [\\\"history\\\"],\\n  \\\"output_fields\\\": [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"],\\n  \\\"chart_type\\\": \\\"line\\\",\\n  \\\"chart_encodings\\\": {\\n    \\\"x\\\": \\\"date\\\",\\n    \\\"y\\\": \\\"close\\\",\\n    \\\"color\\\": \\\"symbol\\\",\\n    \\\"size\\\": \\\"\\\",\\n    \\\"opacity\\\": \\\"\\\",\\n    \\\"facet\\\": \\\"\\\"\\n  }\\n}\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Select only needed columns\\n    cols = [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"]\\n    df = df_history[cols].copy()\\n\\n    # Ensure date is a string in YYYY-MM-DD format (no datetime objects)\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper line plotting\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"]).reset_index(drop=True)\\n\\n    transformed_df = df\\n    return transformed_df\\n```\"},{\"role\":\"user\",\"content\":\"This is the result from the latest python code:\\n\\n         date symbol   close\\n0  2025-07-30   AAPL  208.61\\n1  2025-07-31   AAPL  207.13\\n2  2025-08-01   AAPL  201.95\\n3  2025-08-04   AAPL  202.92\\n4  2025-08-05   AAPL  202.49\\n5  2025-08-06   AAPL  212.80\\n6  2025-08-07   AAPL  219.57\\n7  2025-08-08   AAPL  228.87\\n8  2025-08-11   AAPL  226.96\\n9  2025-08-12   AAPL  229.43\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"compare microsoft and google\\\",\\n    \\\"chart_type\\\": \\\"\\\",\\n    \\\"chart_encodings\\\": {}\\n}\"},{\"role\":\"assistant\",\"content\":\"{\\n  \\\"detailed_instruction\\\": \\\"Filter the historical price data to only include Microsoft (MSFT) and Google (GOOGL) and prepare it for a line chart that compares their closing price trends over time on the same plot.\\\",\\n  \\\"display_instruction\\\": \\\"Compare **closing price** trends of **MSFT** and **GOOGL** over **date**\\\",\\n  \\\"input_tables\\\": [\\\"history\\\"],\\n  \\\"output_fields\\\": [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"],\\n  \\\"chart_encodings\\\": {\\n    \\\"x\\\": \\\"date\\\",\\n    \\\"y\\\": \\\"close\\\",\\n    \\\"color\\\": \\\"symbol\\\",\\n    \\\"size\\\": \\\"\\\",\\n    \\\"opacity\\\": \\\"\\\",\\n    \\\"facet\\\": \\\"\\\"\\n  },\\n  \\\"reason\\\": \\\"The follow-up focuses the existing trend comparison on only Microsoft and Google. This requires filtering the original prepared data to those two symbols while keeping the same line chart structure: date on x, close on y, and symbol as the color encoding.\\\"\\n}\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Select only needed columns\\n    cols = [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"]\\n    df = df_history[cols].copy()\\n\\n    # Filter for Microsoft (MSFT) and Google (GOOGL)\\n    target_symbols = [\\\"MSFT\\\", \\\"GOOGL\\\"]\\n    df = df[df[\\\"symbol\\\"].isin(target_symbols)].copy()\\n\\n    # Ensure date is a string in YYYY-MM-DD format (no datetime objects)\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper line plotting\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"]).reset_index(drop=True)\\n\\n    transformed_df = df\\n    return transformed_df\\n```\"}],\"trigger\":{\"tableId\":\"table-233476\",\"sourceTableIds\":[\"history\"],\"instruction\":\"compare microsoft and google\",\"displayInstruction\":\"Compare **closing price** trends of **MSFT** and **GOOGL** over **date**\",\"chart\":{\"id\":\"chart-1769471462237\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"table-233476\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-457008\"},\"explanation\":{\"status\":\"ok\",\"concepts\":[],\"code\":\"- **Keep only** the **`date`**, **`symbol`**, and **`close`** price columns from the original data, discarding all others.\\n- **Filter rows** to include **only** the two companies: **`MSFT` (Microsoft)** and **`GOOGL` (Google)**.\\n- **Standardize the date format** by converting **`date`** into a **string** formatted as **`YYYY-MM-DD`** (year-month-day).\\n- **Sort the data** by **`symbol`** and then by **`date`** so that each company’s prices are in **chronological order**, making it ready for **line plotting over time**.\\n- **Return** this cleaned and filtered dataset as the final result.\",\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\n## Table 1: history (738 rows × 8 columns)\\n\\n### Schema (8 fields)\\n  - symbol -- type: object, values: AAPL, AMZN, GOOGL, META, MSFT, NVDA\\n  - date -- type: object, values: 2025-07-30, 2025-07-31, 2025-08-01, ..., 2026-01-20, 2026-01-21, 2026-01-22, 2026-01-23\\n  - open -- type: float64, values: 167.53, 168.01, 169.07, ..., 781.21, 782.98, 785.25, 789.97\\n  - high -- type: float64, values: 169.01, 170.94, 170.96, ..., 789.62, 792.49, 794.28, 795.06\\n  - low -- type: float64, values: 164.05, 166.72, 167.2, ..., 771.36, 772.21, 777.07, 779.66\\n  - close -- type: float64, values: 167.0, 168.29, 170.28, ..., 779.09, 780.97, 784.06, 788.82\\n  - volume -- type: int64, values: 5627500, 5855900, 6861200, ..., 320600300, 324925900, 343504800, 346926200\\n  - fetched_at -- type: object, values: 2026-01-26T23:46:42.347312Z\\n\\n### Sample Data (first 5 rows)\\n```\\n  symbol        date    open    high     low   close     volume                   fetched_at\\n0   AAPL  2025-07-30  211.45  211.94  207.28  208.61   45512500  2026-01-26T23:46:42.347312Z\\n1   AAPL  2025-07-31  208.05  209.40  206.72  207.13   80698400  2026-01-26T23:46:42.347312Z\\n2   AAPL  2025-08-01  210.43  213.13  201.08  201.95  104434500  2026-01-26T23:46:42.347312Z\\n3   AAPL  2025-08-04  204.08  207.44  201.26  202.92   75109300  2026-01-26T23:46:42.347312Z\\n4   AAPL  2025-08-05  202.97  204.91  201.74  202.49   44155100  2026-01-26T23:46:42.347312Z\\n```\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_history: pd.DataFrame) -> pd.DataFrame:\\n    # Select only needed columns\\n    cols = [\\\"date\\\", \\\"symbol\\\", \\\"close\\\"]\\n    df = df_history[cols].copy()\\n\\n    # Filter for Microsoft (MSFT) and Google (GOOGL)\\n    target_symbols = [\\\"MSFT\\\", \\\"GOOGL\\\"]\\n    df = df[df[\\\"symbol\\\"].isin(target_symbols)].copy()\\n\\n    # Ensure date is a string in YYYY-MM-DD format (no datetime objects)\\n    df[\\\"date\\\"] = pd.to_datetime(df[\\\"date\\\"]).dt.strftime(\\\"%Y-%m-%d\\\")\\n\\n    # Sort for proper line plotting\\n    df = df.sort_values([\\\"symbol\\\", \\\"date\\\"]).reset_index(drop=True)\\n\\n    transformed_df = df\\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\"},{\"role\":\"assistant\",\"content\":\"[CODE EXPLANATION]\\n\\n- **Keep only** the **`date`**, **`symbol`**, and **`close`** price columns from the original data, discarding all others.\\n- **Filter rows** to include **only** the two companies: **`MSFT` (Microsoft)** and **`GOOGL` (Google)**.\\n- **Standardize the date format** by converting **`date`** into a **string** formatted as **`YYYY-MM-DD`** (year-month-day).\\n- **Sort the data** by **`symbol`** and then by **`date`** so that each company’s prices are in **chronological order**, making it ready for **line plotting over time**.\\n- **Return** this cleaned and filtered dataset as the final result.\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n]\\n```\"}],\"agent\":\"CodeExplanationAgent\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\",\"contentHash\":\"903aa346\"}],\"charts\":[{\"id\":\"chart-1769471461230\",\"chartType\":\"Scatter Plot\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--history--date\"},\"y\":{\"fieldID\":\"original--history--close\"},\"color\":{\"fieldID\":\"original--history--symbol\"},\"size\":{\"channel\":\"size\",\"bin\":false},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-457008\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1769471279744\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--history--date\"},\"y\":{\"fieldID\":\"concept-value-1769471267162-0.9509557182892663\"},\"color\":{\"fieldID\":\"original--history--symbol\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"fieldID\":\"concept-metric-1769471284653-0.6683773975324122\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-277926\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1769471263442\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--history--date\"},\"y\":{\"fieldID\":\"concept-value-1769471267162-0.9509557182892663\"},\"color\":{\"fieldID\":\"original--history--symbol\"},\"opacity\":{},\"column\":{\"fieldID\":\"concept-ma_window-1769471267162-0.4410018093789688\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-265247\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1769471233467\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--history--date\"},\"y\":{\"fieldID\":\"original--history--close\"},\"color\":{\"fieldID\":\"original--history--symbol\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-233476\",\"saved\":false,\"source\":\"user\",\"unread\":false}],\"conceptShelfItems\":[{\"id\":\"concept-phase-1769471302041-0.7083067598600609\",\"name\":\"phase\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-metric-1769471284653-0.6683773975324122\",\"name\":\"metric\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-value-1769471267162-0.9509557182892663\",\"name\":\"value\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-ma_window-1769471267162-0.4410018093789688\",\"name\":\"ma_window\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"original--history--symbol\",\"name\":\"symbol\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"history\"},{\"id\":\"original--history--date\",\"name\":\"date\",\"type\":\"date\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"history\"},{\"id\":\"original--history--open\",\"name\":\"open\",\"type\":\"number\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"history\"},{\"id\":\"original--history--high\",\"name\":\"high\",\"type\":\"number\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"history\"},{\"id\":\"original--history--low\",\"name\":\"low\",\"type\":\"number\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"history\"},{\"id\":\"original--history--close\",\"name\":\"close\",\"type\":\"number\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"history\"},{\"id\":\"original--history--volume\",\"name\":\"volume\",\"type\":\"integer\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"history\"},{\"id\":\"original--history--fetched_at\",\"name\":\"fetched_at\",\"type\":\"date\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"history\"}],\"messages\":[{\"timestamp\":1769535027918,\"type\":\"success\",\"component\":\"data formulator\",\"value\":\"Successfully loaded Stock Prices (Live)\"},{\"timestamp\":1769535028897,\"component\":\"Data Refresh\",\"type\":\"info\",\"value\":\"Table \\\"stock-hist\\\" data refreshed (738 rows)\"},{\"timestamp\":1769535029034,\"component\":\"Data Refresh\",\"type\":\"info\",\"value\":\"Table \\\"stock-hist\\\" data refreshed (738 rows)\"},{\"timestamp\":1769535029121,\"component\":\"Data Refresh\",\"type\":\"info\",\"value\":\"Derived table \\\"stock-close\\\" refreshed (738 rows)\"},{\"timestamp\":1769535041128,\"component\":\"Data Refresh\",\"type\":\"info\",\"value\":\"Table \\\"stock-hist\\\" data refreshed (738 rows)\"},{\"timestamp\":1769535041339,\"component\":\"Data Refresh\",\"type\":\"info\",\"value\":\"Table \\\"stock-hist\\\" data refreshed (738 rows)\"},{\"timestamp\":1769535041452,\"component\":\"Data Refresh\",\"type\":\"info\",\"value\":\"Derived table \\\"stock-close\\\" refreshed (738 rows)\"},{\"timestamp\":1769535048535,\"component\":\"DB manager\",\"type\":\"success\",\"value\":\"Deleted 1 unreferenced derived views: view_ushx\"}],\"displayedMessageIdx\":8,\"focusedTableId\":\"table-233476\",\"focusedChartId\":\"chart-1769471233467\",\"viewMode\":\"editor\",\"chartSynthesisInProgress\":[],\"config\":{\"formulateTimeoutSeconds\":60,\"maxRepairAttempts\":1,\"defaultChartWidth\":300,\"defaultChartHeight\":300},\"agentActions\":[{\"actionId\":\"exploreDataFromNL_1769471236248\",\"tableId\":\"table-294972\",\"description\":\"- Compared raw close-price trajectories across six mega-cap stocks.\\n- Analyzed 20/60-day moving averages plus returns, volatility, and volume.\\n- Summarized phase (quarterly) performance: avg/cumulative returns and volatility by symbol.\",\"status\":\"completed\",\"hidden\":false,\"lastUpdate\":1769471309407}],\"dataCleanBlocks\":[],\"cleanInProgress\":false,\"generatedReports\":[{\"id\":\"report-1769471498009-9657\",\"content\":\"# Monitoring Mega-Cap Tech: Price, Trends, and Risk at a Glance\\n\\nThis live report is built to help you track six large tech stocks (AAPL, AMZN, GOOGL, META, MSFT, NVDA) across price, trends, and risk. Each chart updates as new rows are added to the `history` table.\\n\\n[IMAGE(chart-1769471233467)]\\n\\nThe first chart shows daily closing prices over time for all six symbols. Use it to spot broad moves, compare relative price levels, and see when one stock starts to diverge from the group.\\n\\n[IMAGE(chart-1769471263442)]\\n\\nThe second chart adds 20‑day and 60‑day moving averages. Watch how actual prices relate to these smoother trend lines: crossovers, sustained gaps, or trend flattening can signal shifting momentum.\\n\\n[IMAGE(chart-1769471279744)]\\n\\nThe third set of panels tracks three risk and activity metrics: daily returns, 20‑day return volatility, and trading volume. Look for periods where volatility or volume spikes, or where returns cluster on one side.\\n\\n[IMAGE(chart-1769471461230)]\\n\\nThe final chart zooms in on GOOGL and MSFT closing prices, making it easier to compare their day‑to‑day paths without the distraction of other symbols.\\n\\n**In summary**, use these views together: price levels and trends, plus returns, volatility, and volume, to monitor how each stock is behaving and how relationships between them evolve over time. Possible follow‑ups: add alerts for threshold moves, overlay events (earnings, macro news), or include benchmark indices for context.\",\"style\":\"live report\",\"selectedChartIds\":[\"chart-1769471279744\",\"chart-1769471233467\",\"chart-1769471461230\",\"chart-1769471263442\"],\"createdAt\":1769471511269}],\"_persist\":{\"version\":-1,\"rehydrated\":true}}"
  },
  {
    "path": "public/df_unemployment.json",
    "content": "{\"tables\":[{\"id\":\"unemployment-across-industries\",\"displayId\":\"unemp-by-ind\",\"names\":[\"series\",\"year\",\"month\",\"count\",\"rate\",\"date\"],\"metadata\":{\"series\":{\"type\":\"string\",\"semanticType\":\"String\"},\"year\":{\"type\":\"number\",\"semanticType\":\"Year\"},\"month\":{\"type\":\"number\",\"semanticType\":\"Month\"},\"count\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"rate\":{\"type\":\"number\",\"semanticType\":\"Percentage\"},\"date\":{\"type\":\"date\",\"semanticType\":\"DateTime\"}},\"rows\":[{\"series\":\"Government\",\"year\":2000,\"month\":1,\"count\":430,\"rate\":2.1,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":2,\"count\":409,\"rate\":2,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":3,\"count\":311,\"rate\":1.5,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":4,\"count\":269,\"rate\":1.3,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":5,\"count\":370,\"rate\":1.9,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":6,\"count\":603,\"rate\":3.1,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":7,\"count\":545,\"rate\":2.9,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":8,\"count\":583,\"rate\":3.1,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":9,\"count\":408,\"rate\":2.1,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":10,\"count\":391,\"rate\":2,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":11,\"count\":384,\"rate\":1.9,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":12,\"count\":365,\"rate\":1.8,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":1,\"count\":463,\"rate\":2.3,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":2,\"count\":298,\"rate\":1.5,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":3,\"count\":355,\"rate\":1.8,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":4,\"count\":369,\"rate\":1.9,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":5,\"count\":361,\"rate\":1.8,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":6,\"count\":525,\"rate\":2.7,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":7,\"count\":548,\"rate\":2.8,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":8,\"count\":540,\"rate\":2.8,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":9,\"count\":438,\"rate\":2.2,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":10,\"count\":429,\"rate\":2.2,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":11,\"count\":420,\"rate\":2.1,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":12,\"count\":419,\"rate\":2.1,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2002,\"month\":1,\"count\":486,\"rate\":2.4,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2002,\"month\":2,\"count\":508,\"rate\":2.5,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2002,\"month\":3,\"count\":477,\"rate\":2.4,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2002,\"month\":4,\"count\":447,\"rate\":2.2,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2002,\"month\":5,\"count\":484,\"rate\":2.3,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2002,\"month\":6,\"count\":561,\"rate\":2.8,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2002,\"month\":7,\"count\":645,\"rate\":3.2,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2002,\"month\":8,\"count\":596,\"rate\":3,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2002,\"month\":9,\"count\":530,\"rate\":2.6,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2002,\"month\":10,\"count\":499,\"rate\":2.5,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2002,\"month\":11,\"count\":468,\"rate\":2.3,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2002,\"month\":12,\"count\":446,\"rate\":2.2,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2003,\"month\":1,\"count\":571,\"rate\":2.8,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2003,\"month\":2,\"count\":483,\"rate\":2.4,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2003,\"month\":3,\"count\":526,\"rate\":2.6,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2003,\"month\":4,\"count\":440,\"rate\":2.2,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2003,\"month\":5,\"count\":478,\"rate\":2.4,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2003,\"month\":6,\"count\":704,\"rate\":3.5,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2003,\"month\":7,\"count\":749,\"rate\":3.8,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2003,\"month\":8,\"count\":745,\"rate\":3.7,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2003,\"month\":9,\"count\":556,\"rate\":2.7,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2003,\"month\":10,\"count\":500,\"rate\":2.4,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2003,\"month\":11,\"count\":542,\"rate\":2.7,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2003,\"month\":12,\"count\":516,\"rate\":2.5,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2004,\"month\":1,\"count\":511,\"rate\":2.5,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2004,\"month\":2,\"count\":490,\"rate\":2.4,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2004,\"month\":3,\"count\":530,\"rate\":2.6,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2004,\"month\":4,\"count\":433,\"rate\":2.1,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2004,\"month\":5,\"count\":468,\"rate\":2.3,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2004,\"month\":6,\"count\":580,\"rate\":2.8,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2004,\"month\":7,\"count\":741,\"rate\":3.7,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2004,\"month\":8,\"count\":676,\"rate\":3.3,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2004,\"month\":9,\"count\":568,\"rate\":2.7,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2004,\"month\":10,\"count\":561,\"rate\":2.7,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2004,\"month\":11,\"count\":514,\"rate\":2.4,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2004,\"month\":12,\"count\":499,\"rate\":2.4,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2005,\"month\":1,\"count\":555,\"rate\":2.6,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2005,\"month\":2,\"count\":472,\"rate\":2.3,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2005,\"month\":3,\"count\":468,\"rate\":2.2,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2005,\"month\":4,\"count\":478,\"rate\":2.3,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2005,\"month\":5,\"count\":453,\"rate\":2.1,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2005,\"month\":6,\"count\":681,\"rate\":3.2,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2005,\"month\":7,\"count\":683,\"rate\":3.3,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2005,\"month\":8,\"count\":664,\"rate\":3.2,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2005,\"month\":9,\"count\":568,\"rate\":2.7,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2005,\"month\":10,\"count\":502,\"rate\":2.4,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2005,\"month\":11,\"count\":494,\"rate\":2.4,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2005,\"month\":12,\"count\":393,\"rate\":1.9,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2006,\"month\":1,\"count\":457,\"rate\":2.2,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2006,\"month\":2,\"count\":472,\"rate\":2.3,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2006,\"month\":3,\"count\":461,\"rate\":2.2,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2006,\"month\":4,\"count\":414,\"rate\":2,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2006,\"month\":5,\"count\":429,\"rate\":2.1,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2006,\"month\":6,\"count\":578,\"rate\":2.8,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2006,\"month\":7,\"count\":659,\"rate\":3.2,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2006,\"month\":8,\"count\":595,\"rate\":2.9,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2006,\"month\":9,\"count\":396,\"rate\":1.9,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2006,\"month\":10,\"count\":424,\"rate\":2,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2006,\"month\":11,\"count\":400,\"rate\":1.9,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2006,\"month\":12,\"count\":395,\"rate\":1.9,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2007,\"month\":1,\"count\":476,\"rate\":2.2,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2007,\"month\":2,\"count\":405,\"rate\":1.9,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2007,\"month\":3,\"count\":419,\"rate\":1.9,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2007,\"month\":4,\"count\":408,\"rate\":1.9,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2007,\"month\":5,\"count\":428,\"rate\":1.9,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2007,\"month\":6,\"count\":572,\"rate\":2.7,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2007,\"month\":7,\"count\":704,\"rate\":3.3,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2007,\"month\":8,\"count\":695,\"rate\":3.2,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2007,\"month\":9,\"count\":525,\"rate\":2.4,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2007,\"month\":10,\"count\":492,\"rate\":2.3,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2007,\"month\":11,\"count\":482,\"rate\":2.2,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2007,\"month\":12,\"count\":451,\"rate\":2.1,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2008,\"month\":1,\"count\":471,\"rate\":2.2,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2008,\"month\":2,\"count\":372,\"rate\":1.7,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2008,\"month\":3,\"count\":425,\"rate\":1.9,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2008,\"month\":4,\"count\":373,\"rate\":1.7,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2008,\"month\":5,\"count\":461,\"rate\":2.1,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2008,\"month\":6,\"count\":654,\"rate\":3,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2008,\"month\":7,\"count\":770,\"rate\":3.6,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2008,\"month\":8,\"count\":721,\"rate\":3.3,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2008,\"month\":9,\"count\":573,\"rate\":2.6,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2008,\"month\":10,\"count\":552,\"rate\":2.5,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2008,\"month\":11,\"count\":527,\"rate\":2.4,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2008,\"month\":12,\"count\":511,\"rate\":2.3,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2009,\"month\":1,\"count\":652,\"rate\":3,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2009,\"month\":2,\"count\":563,\"rate\":2.6,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2009,\"month\":3,\"count\":598,\"rate\":2.8,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2009,\"month\":4,\"count\":575,\"rate\":2.6,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2009,\"month\":5,\"count\":702,\"rate\":3.1,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2009,\"month\":6,\"count\":991,\"rate\":4.4,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2009,\"month\":7,\"count\":1129,\"rate\":5.1,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2009,\"month\":8,\"count\":1118,\"rate\":5.1,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2009,\"month\":9,\"count\":928,\"rate\":4.2,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2009,\"month\":10,\"count\":785,\"rate\":3.5,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2009,\"month\":11,\"count\":748,\"rate\":3.4,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2009,\"month\":12,\"count\":797,\"rate\":3.6,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2010,\"month\":1,\"count\":948,\"rate\":4.3,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2010,\"month\":2,\"count\":880,\"rate\":4,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2000,\"month\":1,\"count\":19,\"rate\":3.9,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2000,\"month\":2,\"count\":25,\"rate\":5.5,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2000,\"month\":3,\"count\":17,\"rate\":3.7,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2000,\"month\":4,\"count\":20,\"rate\":4.1,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2000,\"month\":5,\"count\":27,\"rate\":5.3,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2000,\"month\":6,\"count\":13,\"rate\":2.6,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2000,\"month\":7,\"count\":16,\"rate\":3.6,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2000,\"month\":8,\"count\":23,\"rate\":5.1,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2000,\"month\":9,\"count\":25,\"rate\":5.8,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2000,\"month\":10,\"count\":39,\"rate\":7.8,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2000,\"month\":11,\"count\":11,\"rate\":2,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2000,\"month\":12,\"count\":20,\"rate\":3.8,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2001,\"month\":1,\"count\":11,\"rate\":2.3,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2001,\"month\":2,\"count\":27,\"rate\":5.3,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2001,\"month\":3,\"count\":14,\"rate\":3,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2001,\"month\":4,\"count\":24,\"rate\":4.7,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2001,\"month\":5,\"count\":34,\"rate\":5.9,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2001,\"month\":6,\"count\":26,\"rate\":4.7,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2001,\"month\":7,\"count\":17,\"rate\":3.1,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2001,\"month\":8,\"count\":18,\"rate\":3.3,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2001,\"month\":9,\"count\":23,\"rate\":4.2,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2001,\"month\":10,\"count\":32,\"rate\":5.4,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2001,\"month\":11,\"count\":20,\"rate\":3.6,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2001,\"month\":12,\"count\":27,\"rate\":5.3,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2002,\"month\":1,\"count\":33,\"rate\":7,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2002,\"month\":2,\"count\":35,\"rate\":7.5,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2002,\"month\":3,\"count\":28,\"rate\":5.3,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2002,\"month\":4,\"count\":33,\"rate\":6.1,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2002,\"month\":5,\"count\":25,\"rate\":4.9,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2002,\"month\":6,\"count\":35,\"rate\":7.1,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2002,\"month\":7,\"count\":19,\"rate\":3.9,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2002,\"month\":8,\"count\":32,\"rate\":6.3,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2002,\"month\":9,\"count\":42,\"rate\":7.9,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2002,\"month\":10,\"count\":36,\"rate\":6.4,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2002,\"month\":11,\"count\":32,\"rate\":5.4,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2002,\"month\":12,\"count\":45,\"rate\":7.8,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2003,\"month\":1,\"count\":54,\"rate\":9,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2003,\"month\":2,\"count\":41,\"rate\":7.1,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2003,\"month\":3,\"count\":46,\"rate\":8.2,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2003,\"month\":4,\"count\":41,\"rate\":7.7,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2003,\"month\":5,\"count\":40,\"rate\":7.5,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2003,\"month\":6,\"count\":36,\"rate\":6.8,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2003,\"month\":7,\"count\":43,\"rate\":7.9,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2003,\"month\":8,\"count\":20,\"rate\":3.8,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2003,\"month\":9,\"count\":25,\"rate\":4.6,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2003,\"month\":10,\"count\":31,\"rate\":5.6,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2003,\"month\":11,\"count\":34,\"rate\":5.9,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2003,\"month\":12,\"count\":32,\"rate\":5.6,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2004,\"month\":1,\"count\":31,\"rate\":5.8,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2004,\"month\":2,\"count\":24,\"rate\":5,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2004,\"month\":3,\"count\":22,\"rate\":4.4,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2004,\"month\":4,\"count\":34,\"rate\":6.4,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2004,\"month\":5,\"count\":22,\"rate\":4.3,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2004,\"month\":6,\"count\":27,\"rate\":5,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2004,\"month\":7,\"count\":28,\"rate\":5.4,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2004,\"month\":8,\"count\":10,\"rate\":1.9,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2004,\"month\":9,\"count\":8,\"rate\":1.5,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2004,\"month\":10,\"count\":15,\"rate\":2.6,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2004,\"month\":11,\"count\":20,\"rate\":3.3,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2004,\"month\":12,\"count\":16,\"rate\":2.5,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2005,\"month\":1,\"count\":29,\"rate\":4.9,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2005,\"month\":2,\"count\":25,\"rate\":4,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2005,\"month\":3,\"count\":32,\"rate\":5.2,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2005,\"month\":4,\"count\":19,\"rate\":2.9,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2005,\"month\":5,\"count\":16,\"rate\":2.4,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2005,\"month\":6,\"count\":25,\"rate\":4,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2005,\"month\":7,\"count\":22,\"rate\":3.7,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2005,\"month\":8,\"count\":12,\"rate\":2,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2005,\"month\":9,\"count\":12,\"rate\":2,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2005,\"month\":10,\"count\":2,\"rate\":0.3,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2005,\"month\":11,\"count\":18,\"rate\":2.9,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2005,\"month\":12,\"count\":23,\"rate\":3.5,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2006,\"month\":1,\"count\":26,\"rate\":3.9,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2006,\"month\":2,\"count\":25,\"rate\":3.8,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2006,\"month\":3,\"count\":14,\"rate\":2.1,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2006,\"month\":4,\"count\":17,\"rate\":2.5,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2006,\"month\":5,\"count\":20,\"rate\":2.8,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2006,\"month\":6,\"count\":31,\"rate\":4.3,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2006,\"month\":7,\"count\":25,\"rate\":3.5,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2006,\"month\":8,\"count\":32,\"rate\":4.3,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2006,\"month\":9,\"count\":14,\"rate\":2.1,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2006,\"month\":10,\"count\":15,\"rate\":2.2,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2006,\"month\":11,\"count\":22,\"rate\":2.9,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2006,\"month\":12,\"count\":25,\"rate\":3.4,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2007,\"month\":1,\"count\":35,\"rate\":4.7,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2007,\"month\":2,\"count\":33,\"rate\":4.5,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2007,\"month\":3,\"count\":24,\"rate\":3.2,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2007,\"month\":4,\"count\":17,\"rate\":2.3,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2007,\"month\":5,\"count\":22,\"rate\":3,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2007,\"month\":6,\"count\":33,\"rate\":4.3,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2007,\"month\":7,\"count\":33,\"rate\":4.3,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2007,\"month\":8,\"count\":33,\"rate\":4.6,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2007,\"month\":9,\"count\":25,\"rate\":3.2,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2007,\"month\":10,\"count\":9,\"rate\":1.3,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2007,\"month\":11,\"count\":16,\"rate\":2.3,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2007,\"month\":12,\"count\":24,\"rate\":3.4,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2008,\"month\":1,\"count\":28,\"rate\":4,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2008,\"month\":2,\"count\":16,\"rate\":2.2,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2008,\"month\":3,\"count\":28,\"rate\":3.7,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2008,\"month\":4,\"count\":28,\"rate\":3.6,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2008,\"month\":5,\"count\":28,\"rate\":3.4,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2008,\"month\":6,\"count\":28,\"rate\":3.3,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2008,\"month\":7,\"count\":13,\"rate\":1.5,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2008,\"month\":8,\"count\":17,\"rate\":1.9,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2008,\"month\":9,\"count\":25,\"rate\":2.8,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2008,\"month\":10,\"count\":15,\"rate\":1.7,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2008,\"month\":11,\"count\":32,\"rate\":3.7,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2008,\"month\":12,\"count\":46,\"rate\":5.2,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2009,\"month\":1,\"count\":59,\"rate\":7,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2009,\"month\":2,\"count\":63,\"rate\":7.6,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2009,\"month\":3,\"count\":105,\"rate\":12.6,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2009,\"month\":4,\"count\":125,\"rate\":16.1,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2009,\"month\":5,\"count\":98,\"rate\":13.3,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2009,\"month\":6,\"count\":100,\"rate\":13.6,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2009,\"month\":7,\"count\":95,\"rate\":12.6,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2009,\"month\":8,\"count\":93,\"rate\":11.8,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2009,\"month\":9,\"count\":76,\"rate\":10.7,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2009,\"month\":10,\"count\":84,\"rate\":10.8,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2009,\"month\":11,\"count\":96,\"rate\":12,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2009,\"month\":12,\"count\":89,\"rate\":11.8,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2010,\"month\":1,\"count\":68,\"rate\":9.1,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Mining and Extraction\",\"year\":2010,\"month\":2,\"count\":79,\"rate\":10.7,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2000,\"month\":1,\"count\":745,\"rate\":9.7,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2000,\"month\":2,\"count\":812,\"rate\":10.6,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2000,\"month\":3,\"count\":669,\"rate\":8.7,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2000,\"month\":4,\"count\":447,\"rate\":5.8,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2000,\"month\":5,\"count\":397,\"rate\":5,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2000,\"month\":6,\"count\":389,\"rate\":4.6,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2000,\"month\":7,\"count\":384,\"rate\":4.4,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2000,\"month\":8,\"count\":446,\"rate\":5.1,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2000,\"month\":9,\"count\":386,\"rate\":4.6,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2000,\"month\":10,\"count\":417,\"rate\":4.9,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2000,\"month\":11,\"count\":482,\"rate\":5.7,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2000,\"month\":12,\"count\":580,\"rate\":6.8,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2001,\"month\":1,\"count\":836,\"rate\":9.8,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2001,\"month\":2,\"count\":826,\"rate\":9.9,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2001,\"month\":3,\"count\":683,\"rate\":8.4,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2001,\"month\":4,\"count\":596,\"rate\":7.1,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2001,\"month\":5,\"count\":478,\"rate\":5.6,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2001,\"month\":6,\"count\":443,\"rate\":5.1,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2001,\"month\":7,\"count\":447,\"rate\":4.9,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2001,\"month\":8,\"count\":522,\"rate\":5.8,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2001,\"month\":9,\"count\":489,\"rate\":5.5,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2001,\"month\":10,\"count\":535,\"rate\":6.1,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2001,\"month\":11,\"count\":670,\"rate\":7.6,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2001,\"month\":12,\"count\":785,\"rate\":9,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2002,\"month\":1,\"count\":1211,\"rate\":13.6,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2002,\"month\":2,\"count\":1060,\"rate\":12.2,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2002,\"month\":3,\"count\":1009,\"rate\":11.8,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2002,\"month\":4,\"count\":855,\"rate\":10.1,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2002,\"month\":5,\"count\":626,\"rate\":7.4,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2002,\"month\":6,\"count\":593,\"rate\":6.9,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2002,\"month\":7,\"count\":594,\"rate\":6.9,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2002,\"month\":8,\"count\":654,\"rate\":7.4,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2002,\"month\":9,\"count\":615,\"rate\":7,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2002,\"month\":10,\"count\":680,\"rate\":7.7,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2002,\"month\":11,\"count\":758,\"rate\":8.5,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2002,\"month\":12,\"count\":941,\"rate\":10.9,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2003,\"month\":1,\"count\":1196,\"rate\":14,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2003,\"month\":2,\"count\":1173,\"rate\":14,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2003,\"month\":3,\"count\":987,\"rate\":11.8,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2003,\"month\":4,\"count\":772,\"rate\":9.3,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2003,\"month\":5,\"count\":715,\"rate\":8.4,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2003,\"month\":6,\"count\":710,\"rate\":7.9,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2003,\"month\":7,\"count\":677,\"rate\":7.5,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2003,\"month\":8,\"count\":650,\"rate\":7.1,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2003,\"month\":9,\"count\":681,\"rate\":7.6,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2003,\"month\":10,\"count\":651,\"rate\":7.4,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2003,\"month\":11,\"count\":690,\"rate\":7.8,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2003,\"month\":12,\"count\":813,\"rate\":9.3,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2004,\"month\":1,\"count\":994,\"rate\":11.3,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2004,\"month\":2,\"count\":1039,\"rate\":11.6,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2004,\"month\":3,\"count\":1011,\"rate\":11.3,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2004,\"month\":4,\"count\":849,\"rate\":9.5,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2004,\"month\":5,\"count\":665,\"rate\":7.4,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2004,\"month\":6,\"count\":668,\"rate\":7,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2004,\"month\":7,\"count\":610,\"rate\":6.4,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2004,\"month\":8,\"count\":563,\"rate\":6,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2004,\"month\":9,\"count\":629,\"rate\":6.8,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2004,\"month\":10,\"count\":635,\"rate\":6.9,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2004,\"month\":11,\"count\":695,\"rate\":7.4,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2004,\"month\":12,\"count\":870,\"rate\":9.5,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2005,\"month\":1,\"count\":1079,\"rate\":11.8,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2005,\"month\":2,\"count\":1150,\"rate\":12.3,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2005,\"month\":3,\"count\":961,\"rate\":10.3,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2005,\"month\":4,\"count\":693,\"rate\":7.4,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2005,\"month\":5,\"count\":567,\"rate\":6.1,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2005,\"month\":6,\"count\":559,\"rate\":5.7,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2005,\"month\":7,\"count\":509,\"rate\":5.2,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2005,\"month\":8,\"count\":561,\"rate\":5.7,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2005,\"month\":9,\"count\":572,\"rate\":5.7,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2005,\"month\":10,\"count\":519,\"rate\":5.3,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2005,\"month\":11,\"count\":564,\"rate\":5.7,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2005,\"month\":12,\"count\":813,\"rate\":8.2,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2006,\"month\":1,\"count\":868,\"rate\":9,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2006,\"month\":2,\"count\":836,\"rate\":8.6,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2006,\"month\":3,\"count\":820,\"rate\":8.5,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2006,\"month\":4,\"count\":674,\"rate\":6.9,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2006,\"month\":5,\"count\":647,\"rate\":6.6,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2006,\"month\":6,\"count\":569,\"rate\":5.6,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2006,\"month\":7,\"count\":633,\"rate\":6.1,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2006,\"month\":8,\"count\":618,\"rate\":5.9,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2006,\"month\":9,\"count\":586,\"rate\":5.6,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2006,\"month\":10,\"count\":456,\"rate\":4.5,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2006,\"month\":11,\"count\":618,\"rate\":6,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2006,\"month\":12,\"count\":725,\"rate\":6.9,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2007,\"month\":1,\"count\":922,\"rate\":8.9,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2007,\"month\":2,\"count\":1086,\"rate\":10.5,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2007,\"month\":3,\"count\":924,\"rate\":9,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2007,\"month\":4,\"count\":853,\"rate\":8.6,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2007,\"month\":5,\"count\":676,\"rate\":6.9,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2007,\"month\":6,\"count\":600,\"rate\":5.9,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2007,\"month\":7,\"count\":617,\"rate\":5.9,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2007,\"month\":8,\"count\":558,\"rate\":5.3,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2007,\"month\":9,\"count\":596,\"rate\":5.8,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2007,\"month\":10,\"count\":641,\"rate\":6.1,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2007,\"month\":11,\"count\":645,\"rate\":6.2,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2007,\"month\":12,\"count\":968,\"rate\":9.4,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2008,\"month\":1,\"count\":1099,\"rate\":11,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2008,\"month\":2,\"count\":1118,\"rate\":11.4,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2008,\"month\":3,\"count\":1170,\"rate\":12,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2008,\"month\":4,\"count\":1057,\"rate\":11.1,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2008,\"month\":5,\"count\":809,\"rate\":8.6,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2008,\"month\":6,\"count\":785,\"rate\":8.2,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2008,\"month\":7,\"count\":783,\"rate\":8,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2008,\"month\":8,\"count\":814,\"rate\":8.2,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2008,\"month\":9,\"count\":970,\"rate\":9.9,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2008,\"month\":10,\"count\":1078,\"rate\":10.8,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2008,\"month\":11,\"count\":1237,\"rate\":12.7,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2008,\"month\":12,\"count\":1438,\"rate\":15.3,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2009,\"month\":1,\"count\":1744,\"rate\":18.2,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2009,\"month\":2,\"count\":2025,\"rate\":21.4,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2009,\"month\":3,\"count\":1979,\"rate\":21.1,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2009,\"month\":4,\"count\":1737,\"rate\":18.7,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2009,\"month\":5,\"count\":1768,\"rate\":19.2,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2009,\"month\":6,\"count\":1601,\"rate\":17.4,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2009,\"month\":7,\"count\":1687,\"rate\":18.2,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2009,\"month\":8,\"count\":1542,\"rate\":16.5,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2009,\"month\":9,\"count\":1594,\"rate\":17.1,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2009,\"month\":10,\"count\":1744,\"rate\":18.7,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2009,\"month\":11,\"count\":1780,\"rate\":19.4,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2009,\"month\":12,\"count\":2044,\"rate\":22.7,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2010,\"month\":1,\"count\":2194,\"rate\":24.7,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Construction\",\"year\":2010,\"month\":2,\"count\":2440,\"rate\":27.1,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2000,\"month\":1,\"count\":734,\"rate\":3.6,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2000,\"month\":2,\"count\":694,\"rate\":3.4,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2000,\"month\":3,\"count\":739,\"rate\":3.6,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2000,\"month\":4,\"count\":736,\"rate\":3.7,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2000,\"month\":5,\"count\":685,\"rate\":3.4,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2000,\"month\":6,\"count\":621,\"rate\":3.1,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2000,\"month\":7,\"count\":708,\"rate\":3.6,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2000,\"month\":8,\"count\":685,\"rate\":3.4,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2000,\"month\":9,\"count\":667,\"rate\":3.4,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2000,\"month\":10,\"count\":693,\"rate\":3.6,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2000,\"month\":11,\"count\":672,\"rate\":3.4,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2000,\"month\":12,\"count\":653,\"rate\":3.3,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2001,\"month\":1,\"count\":911,\"rate\":4.6,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2001,\"month\":2,\"count\":902,\"rate\":4.6,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2001,\"month\":3,\"count\":954,\"rate\":4.9,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2001,\"month\":4,\"count\":855,\"rate\":4.4,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2001,\"month\":5,\"count\":903,\"rate\":4.7,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2001,\"month\":6,\"count\":956,\"rate\":5,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2001,\"month\":7,\"count\":1054,\"rate\":5.6,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2001,\"month\":8,\"count\":1023,\"rate\":5.5,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2001,\"month\":9,\"count\":996,\"rate\":5.4,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2001,\"month\":10,\"count\":1065,\"rate\":5.8,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2001,\"month\":11,\"count\":1108,\"rate\":6,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2001,\"month\":12,\"count\":1172,\"rate\":6.3,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2002,\"month\":1,\"count\":1377,\"rate\":7.4,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2002,\"month\":2,\"count\":1296,\"rate\":7,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2002,\"month\":3,\"count\":1367,\"rate\":7.3,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2002,\"month\":4,\"count\":1322,\"rate\":7.2,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2002,\"month\":5,\"count\":1194,\"rate\":6.6,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2002,\"month\":6,\"count\":1187,\"rate\":6.6,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2002,\"month\":7,\"count\":1185,\"rate\":6.6,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2002,\"month\":8,\"count\":1108,\"rate\":6.2,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2002,\"month\":9,\"count\":1076,\"rate\":6.1,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2002,\"month\":10,\"count\":1046,\"rate\":5.9,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2002,\"month\":11,\"count\":1115,\"rate\":6.3,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2002,\"month\":12,\"count\":1188,\"rate\":6.6,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2003,\"month\":1,\"count\":1302,\"rate\":7.2,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2003,\"month\":2,\"count\":1229,\"rate\":6.7,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2003,\"month\":3,\"count\":1222,\"rate\":6.8,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2003,\"month\":4,\"count\":1199,\"rate\":6.7,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2003,\"month\":5,\"count\":1150,\"rate\":6.5,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2003,\"month\":6,\"count\":1232,\"rate\":7,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2003,\"month\":7,\"count\":1193,\"rate\":6.9,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2003,\"month\":8,\"count\":1186,\"rate\":6.7,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2003,\"month\":9,\"count\":1175,\"rate\":6.8,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2003,\"month\":10,\"count\":1041,\"rate\":6,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2003,\"month\":11,\"count\":1034,\"rate\":5.9,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2003,\"month\":12,\"count\":1025,\"rate\":5.9,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2004,\"month\":1,\"count\":1110,\"rate\":6.4,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2004,\"month\":2,\"count\":1094,\"rate\":6.3,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2004,\"month\":3,\"count\":1083,\"rate\":6.3,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2004,\"month\":4,\"count\":1004,\"rate\":5.8,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2004,\"month\":5,\"count\":966,\"rate\":5.6,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2004,\"month\":6,\"count\":957,\"rate\":5.6,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2004,\"month\":7,\"count\":1019,\"rate\":6,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2004,\"month\":8,\"count\":840,\"rate\":4.9,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2004,\"month\":9,\"count\":852,\"rate\":5,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2004,\"month\":10,\"count\":884,\"rate\":5.3,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2004,\"month\":11,\"count\":905,\"rate\":5.4,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2004,\"month\":12,\"count\":872,\"rate\":5.1,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2005,\"month\":1,\"count\":889,\"rate\":5.3,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2005,\"month\":2,\"count\":889,\"rate\":5.3,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2005,\"month\":3,\"count\":879,\"rate\":5.3,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2005,\"month\":4,\"count\":793,\"rate\":4.8,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2005,\"month\":5,\"count\":743,\"rate\":4.5,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2005,\"month\":6,\"count\":743,\"rate\":4.4,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2005,\"month\":7,\"count\":883,\"rate\":5.3,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2005,\"month\":8,\"count\":767,\"rate\":4.7,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2005,\"month\":9,\"count\":775,\"rate\":4.7,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2005,\"month\":10,\"count\":800,\"rate\":4.8,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2005,\"month\":11,\"count\":823,\"rate\":4.9,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2005,\"month\":12,\"count\":757,\"rate\":4.5,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2006,\"month\":1,\"count\":778,\"rate\":4.6,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2006,\"month\":2,\"count\":821,\"rate\":4.9,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2006,\"month\":3,\"count\":701,\"rate\":4.1,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2006,\"month\":4,\"count\":745,\"rate\":4.5,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2006,\"month\":5,\"count\":680,\"rate\":4.1,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2006,\"month\":6,\"count\":635,\"rate\":3.8,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2006,\"month\":7,\"count\":736,\"rate\":4.4,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2006,\"month\":8,\"count\":680,\"rate\":4.1,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2006,\"month\":9,\"count\":632,\"rate\":3.8,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2006,\"month\":10,\"count\":618,\"rate\":3.7,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2006,\"month\":11,\"count\":702,\"rate\":4.3,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2006,\"month\":12,\"count\":660,\"rate\":4,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2007,\"month\":1,\"count\":752,\"rate\":4.6,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2007,\"month\":2,\"count\":774,\"rate\":4.7,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2007,\"month\":3,\"count\":742,\"rate\":4.5,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2007,\"month\":4,\"count\":749,\"rate\":4.6,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2007,\"month\":5,\"count\":651,\"rate\":3.9,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2007,\"month\":6,\"count\":653,\"rate\":4,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2007,\"month\":7,\"count\":621,\"rate\":3.7,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2007,\"month\":8,\"count\":596,\"rate\":3.6,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2007,\"month\":9,\"count\":673,\"rate\":4.1,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2007,\"month\":10,\"count\":729,\"rate\":4.3,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2007,\"month\":11,\"count\":762,\"rate\":4.5,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2007,\"month\":12,\"count\":772,\"rate\":4.6,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2008,\"month\":1,\"count\":837,\"rate\":5.1,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2008,\"month\":2,\"count\":820,\"rate\":5,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2008,\"month\":3,\"count\":831,\"rate\":5,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2008,\"month\":4,\"count\":796,\"rate\":4.8,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2008,\"month\":5,\"count\":879,\"rate\":5.3,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2008,\"month\":6,\"count\":862,\"rate\":5.2,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2008,\"month\":7,\"count\":908,\"rate\":5.5,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2008,\"month\":8,\"count\":960,\"rate\":5.7,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2008,\"month\":9,\"count\":984,\"rate\":6,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2008,\"month\":10,\"count\":1007,\"rate\":6.2,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2008,\"month\":11,\"count\":1144,\"rate\":7,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2008,\"month\":12,\"count\":1315,\"rate\":8.3,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2009,\"month\":1,\"count\":1711,\"rate\":10.9,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2009,\"month\":2,\"count\":1822,\"rate\":11.5,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2009,\"month\":3,\"count\":1912,\"rate\":12.2,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2009,\"month\":4,\"count\":1968,\"rate\":12.4,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2009,\"month\":5,\"count\":2010,\"rate\":12.6,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2009,\"month\":6,\"count\":2010,\"rate\":12.6,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2009,\"month\":7,\"count\":1988,\"rate\":12.4,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2009,\"month\":8,\"count\":1866,\"rate\":11.8,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2009,\"month\":9,\"count\":1876,\"rate\":11.9,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2009,\"month\":10,\"count\":1884,\"rate\":12.2,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2009,\"month\":11,\"count\":1882,\"rate\":12.5,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2009,\"month\":12,\"count\":1747,\"rate\":11.9,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2010,\"month\":1,\"count\":1918,\"rate\":13,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Manufacturing\",\"year\":2010,\"month\":2,\"count\":1814,\"rate\":12.1,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2000,\"month\":1,\"count\":1000,\"rate\":5,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2000,\"month\":2,\"count\":1023,\"rate\":5.2,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2000,\"month\":3,\"count\":983,\"rate\":5.1,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2000,\"month\":4,\"count\":793,\"rate\":4.1,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2000,\"month\":5,\"count\":821,\"rate\":4.3,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2000,\"month\":6,\"count\":837,\"rate\":4.4,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2000,\"month\":7,\"count\":792,\"rate\":4.1,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2000,\"month\":8,\"count\":853,\"rate\":4.3,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2000,\"month\":9,\"count\":791,\"rate\":4.1,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2000,\"month\":10,\"count\":739,\"rate\":3.7,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2000,\"month\":11,\"count\":701,\"rate\":3.6,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2000,\"month\":12,\"count\":715,\"rate\":3.7,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2001,\"month\":1,\"count\":908,\"rate\":4.7,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2001,\"month\":2,\"count\":990,\"rate\":5.2,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2001,\"month\":3,\"count\":1037,\"rate\":5.4,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2001,\"month\":4,\"count\":820,\"rate\":4.3,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2001,\"month\":5,\"count\":875,\"rate\":4.5,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2001,\"month\":6,\"count\":955,\"rate\":4.9,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2001,\"month\":7,\"count\":833,\"rate\":4.3,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2001,\"month\":8,\"count\":928,\"rate\":4.8,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2001,\"month\":9,\"count\":936,\"rate\":4.8,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2001,\"month\":10,\"count\":941,\"rate\":4.8,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2001,\"month\":11,\"count\":1046,\"rate\":5.3,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2001,\"month\":12,\"count\":1074,\"rate\":5.4,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2002,\"month\":1,\"count\":1212,\"rate\":6.3,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2002,\"month\":2,\"count\":1264,\"rate\":6.6,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2002,\"month\":3,\"count\":1269,\"rate\":6.6,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2002,\"month\":4,\"count\":1222,\"rate\":6.4,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2002,\"month\":5,\"count\":1138,\"rate\":5.8,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2002,\"month\":6,\"count\":1240,\"rate\":6.2,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2002,\"month\":7,\"count\":1132,\"rate\":5.6,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2002,\"month\":8,\"count\":1170,\"rate\":5.8,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2002,\"month\":9,\"count\":1171,\"rate\":5.9,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2002,\"month\":10,\"count\":1212,\"rate\":6.1,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2002,\"month\":11,\"count\":1242,\"rate\":6.2,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2002,\"month\":12,\"count\":1150,\"rate\":5.7,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2003,\"month\":1,\"count\":1342,\"rate\":6.7,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2003,\"month\":2,\"count\":1238,\"rate\":6.1,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2003,\"month\":3,\"count\":1179,\"rate\":5.9,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2003,\"month\":4,\"count\":1201,\"rate\":6,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2003,\"month\":5,\"count\":1247,\"rate\":6.2,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2003,\"month\":6,\"count\":1434,\"rate\":6.9,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2003,\"month\":7,\"count\":1387,\"rate\":6.6,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2003,\"month\":8,\"count\":1161,\"rate\":5.6,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2003,\"month\":9,\"count\":1229,\"rate\":5.9,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2003,\"month\":10,\"count\":1189,\"rate\":5.7,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2003,\"month\":11,\"count\":1156,\"rate\":5.4,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2003,\"month\":12,\"count\":1081,\"rate\":5,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2004,\"month\":1,\"count\":1389,\"rate\":6.5,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2004,\"month\":2,\"count\":1369,\"rate\":6.5,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2004,\"month\":3,\"count\":1386,\"rate\":6.8,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2004,\"month\":4,\"count\":1248,\"rate\":6.1,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2004,\"month\":5,\"count\":1183,\"rate\":5.8,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2004,\"month\":6,\"count\":1182,\"rate\":5.8,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2004,\"month\":7,\"count\":1163,\"rate\":5.5,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2004,\"month\":8,\"count\":1079,\"rate\":5.1,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2004,\"month\":9,\"count\":1127,\"rate\":5.5,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2004,\"month\":10,\"count\":1138,\"rate\":5.4,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2004,\"month\":11,\"count\":1045,\"rate\":5,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2004,\"month\":12,\"count\":1058,\"rate\":5,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2005,\"month\":1,\"count\":1302,\"rate\":6.3,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2005,\"month\":2,\"count\":1301,\"rate\":6.2,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2005,\"month\":3,\"count\":1173,\"rate\":5.6,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2005,\"month\":4,\"count\":1131,\"rate\":5.4,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2005,\"month\":5,\"count\":1145,\"rate\":5.4,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2005,\"month\":6,\"count\":1197,\"rate\":5.7,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2005,\"month\":7,\"count\":1194,\"rate\":5.6,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2005,\"month\":8,\"count\":1130,\"rate\":5.3,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2005,\"month\":9,\"count\":1038,\"rate\":4.9,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2005,\"month\":10,\"count\":1050,\"rate\":4.9,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2005,\"month\":11,\"count\":1013,\"rate\":4.7,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2005,\"month\":12,\"count\":968,\"rate\":4.5,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2006,\"month\":1,\"count\":1203,\"rate\":5.7,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2006,\"month\":2,\"count\":1141,\"rate\":5.4,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2006,\"month\":3,\"count\":1022,\"rate\":4.9,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2006,\"month\":4,\"count\":972,\"rate\":4.6,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2006,\"month\":5,\"count\":1025,\"rate\":4.8,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2006,\"month\":6,\"count\":1085,\"rate\":5.1,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2006,\"month\":7,\"count\":1083,\"rate\":5.1,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2006,\"month\":8,\"count\":977,\"rate\":4.7,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2006,\"month\":9,\"count\":1008,\"rate\":4.9,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2006,\"month\":10,\"count\":972,\"rate\":4.7,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2006,\"month\":11,\"count\":1018,\"rate\":4.8,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2006,\"month\":12,\"count\":965,\"rate\":4.5,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2007,\"month\":1,\"count\":1166,\"rate\":5.5,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2007,\"month\":2,\"count\":1045,\"rate\":5.1,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2007,\"month\":3,\"count\":896,\"rate\":4.4,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2007,\"month\":4,\"count\":872,\"rate\":4.2,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2007,\"month\":5,\"count\":795,\"rate\":3.9,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2007,\"month\":6,\"count\":979,\"rate\":4.6,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2007,\"month\":7,\"count\":1089,\"rate\":5.2,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2007,\"month\":8,\"count\":1028,\"rate\":5.1,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2007,\"month\":9,\"count\":1027,\"rate\":5.1,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2007,\"month\":10,\"count\":907,\"rate\":4.4,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2007,\"month\":11,\"count\":893,\"rate\":4.3,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2007,\"month\":12,\"count\":1009,\"rate\":4.8,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2008,\"month\":1,\"count\":1120,\"rate\":5.4,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2008,\"month\":2,\"count\":1007,\"rate\":4.9,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2008,\"month\":3,\"count\":992,\"rate\":4.9,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2008,\"month\":4,\"count\":919,\"rate\":4.5,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2008,\"month\":5,\"count\":1049,\"rate\":5.2,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2008,\"month\":6,\"count\":1160,\"rate\":5.7,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2008,\"month\":7,\"count\":1329,\"rate\":6.5,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2008,\"month\":8,\"count\":1366,\"rate\":6.6,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2008,\"month\":9,\"count\":1277,\"rate\":6.2,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2008,\"month\":10,\"count\":1313,\"rate\":6.3,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2008,\"month\":11,\"count\":1397,\"rate\":6.7,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2008,\"month\":12,\"count\":1535,\"rate\":7.2,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2009,\"month\":1,\"count\":1794,\"rate\":8.7,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2009,\"month\":2,\"count\":1847,\"rate\":8.9,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2009,\"month\":3,\"count\":1852,\"rate\":9,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2009,\"month\":4,\"count\":1833,\"rate\":9,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2009,\"month\":5,\"count\":1835,\"rate\":9,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2009,\"month\":6,\"count\":1863,\"rate\":9.1,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2009,\"month\":7,\"count\":1854,\"rate\":9,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2009,\"month\":8,\"count\":1794,\"rate\":8.8,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2009,\"month\":9,\"count\":1809,\"rate\":9,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2009,\"month\":10,\"count\":1919,\"rate\":9.6,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2009,\"month\":11,\"count\":1879,\"rate\":9.2,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2009,\"month\":12,\"count\":1851,\"rate\":9.1,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2010,\"month\":1,\"count\":2154,\"rate\":10.5,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Wholesale and Retail Trade\",\"year\":2010,\"month\":2,\"count\":2071,\"rate\":10,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2000,\"month\":1,\"count\":236,\"rate\":4.3,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2000,\"month\":2,\"count\":223,\"rate\":4,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2000,\"month\":3,\"count\":192,\"rate\":3.5,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2000,\"month\":4,\"count\":191,\"rate\":3.4,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2000,\"month\":5,\"count\":190,\"rate\":3.4,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2000,\"month\":6,\"count\":183,\"rate\":3.2,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2000,\"month\":7,\"count\":228,\"rate\":3.9,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2000,\"month\":8,\"count\":198,\"rate\":3.4,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2000,\"month\":9,\"count\":231,\"rate\":4,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2000,\"month\":10,\"count\":153,\"rate\":2.8,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2000,\"month\":11,\"count\":129,\"rate\":2.3,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2000,\"month\":12,\"count\":168,\"rate\":3.1,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2001,\"month\":1,\"count\":194,\"rate\":3.6,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2001,\"month\":2,\"count\":189,\"rate\":3.4,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2001,\"month\":3,\"count\":193,\"rate\":3.5,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2001,\"month\":4,\"count\":232,\"rate\":4.2,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2001,\"month\":5,\"count\":178,\"rate\":3.1,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2001,\"month\":6,\"count\":242,\"rate\":4.3,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2001,\"month\":7,\"count\":236,\"rate\":4.2,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2001,\"month\":8,\"count\":226,\"rate\":3.9,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2001,\"month\":9,\"count\":214,\"rate\":3.9,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2001,\"month\":10,\"count\":321,\"rate\":5.8,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2001,\"month\":11,\"count\":302,\"rate\":5.4,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2001,\"month\":12,\"count\":310,\"rate\":5.6,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2002,\"month\":1,\"count\":368,\"rate\":6.6,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2002,\"month\":2,\"count\":331,\"rate\":5.7,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2002,\"month\":3,\"count\":313,\"rate\":5.6,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2002,\"month\":4,\"count\":280,\"rate\":5,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2002,\"month\":5,\"count\":257,\"rate\":4.5,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2002,\"month\":6,\"count\":274,\"rate\":4.9,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2002,\"month\":7,\"count\":270,\"rate\":4.9,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2002,\"month\":8,\"count\":221,\"rate\":3.9,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2002,\"month\":9,\"count\":235,\"rate\":4.2,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2002,\"month\":10,\"count\":262,\"rate\":4.7,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2002,\"month\":11,\"count\":233,\"rate\":4.2,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2002,\"month\":12,\"count\":243,\"rate\":4.6,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2003,\"month\":1,\"count\":331,\"rate\":6.3,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2003,\"month\":2,\"count\":316,\"rate\":5.8,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2003,\"month\":3,\"count\":319,\"rate\":5.9,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2003,\"month\":4,\"count\":274,\"rate\":5,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2003,\"month\":5,\"count\":260,\"rate\":4.9,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2003,\"month\":6,\"count\":300,\"rate\":5.5,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2003,\"month\":7,\"count\":289,\"rate\":5.4,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2003,\"month\":8,\"count\":255,\"rate\":4.8,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2003,\"month\":9,\"count\":255,\"rate\":4.7,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2003,\"month\":10,\"count\":260,\"rate\":4.8,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2003,\"month\":11,\"count\":275,\"rate\":5.1,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2003,\"month\":12,\"count\":267,\"rate\":5,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2004,\"month\":1,\"count\":243,\"rate\":4.6,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2004,\"month\":2,\"count\":291,\"rate\":5.5,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2004,\"month\":3,\"count\":284,\"rate\":5.4,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2004,\"month\":4,\"count\":239,\"rate\":4.5,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2004,\"month\":5,\"count\":230,\"rate\":4.4,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2004,\"month\":6,\"count\":227,\"rate\":4.3,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2004,\"month\":7,\"count\":231,\"rate\":4.3,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2004,\"month\":8,\"count\":236,\"rate\":4.4,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2004,\"month\":9,\"count\":208,\"rate\":3.9,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2004,\"month\":10,\"count\":219,\"rate\":4,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2004,\"month\":11,\"count\":217,\"rate\":4,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2004,\"month\":12,\"count\":204,\"rate\":3.8,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2005,\"month\":1,\"count\":276,\"rate\":5,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2005,\"month\":2,\"count\":245,\"rate\":4.4,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2005,\"month\":3,\"count\":267,\"rate\":4.8,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2005,\"month\":4,\"count\":257,\"rate\":4.7,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2005,\"month\":5,\"count\":223,\"rate\":4.1,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2005,\"month\":6,\"count\":247,\"rate\":4.5,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2005,\"month\":7,\"count\":222,\"rate\":3.9,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2005,\"month\":8,\"count\":187,\"rate\":3.3,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2005,\"month\":9,\"count\":211,\"rate\":3.7,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2005,\"month\":10,\"count\":251,\"rate\":4.4,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2005,\"month\":11,\"count\":199,\"rate\":3.5,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2005,\"month\":12,\"count\":202,\"rate\":3.6,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2006,\"month\":1,\"count\":287,\"rate\":5,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2006,\"month\":2,\"count\":260,\"rate\":4.6,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2006,\"month\":3,\"count\":263,\"rate\":4.7,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2006,\"month\":4,\"count\":272,\"rate\":4.8,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2006,\"month\":5,\"count\":226,\"rate\":4,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2006,\"month\":6,\"count\":225,\"rate\":3.9,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2006,\"month\":7,\"count\":237,\"rate\":4.2,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2006,\"month\":8,\"count\":217,\"rate\":3.7,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2006,\"month\":9,\"count\":183,\"rate\":3.1,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2006,\"month\":10,\"count\":206,\"rate\":3.6,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2006,\"month\":11,\"count\":183,\"rate\":3.1,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2006,\"month\":12,\"count\":190,\"rate\":3.2,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2007,\"month\":1,\"count\":248,\"rate\":4.2,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2007,\"month\":2,\"count\":251,\"rate\":4.2,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2007,\"month\":3,\"count\":249,\"rate\":4.3,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2007,\"month\":4,\"count\":188,\"rate\":3.3,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2007,\"month\":5,\"count\":216,\"rate\":3.8,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2007,\"month\":6,\"count\":242,\"rate\":4.1,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2007,\"month\":7,\"count\":309,\"rate\":5.1,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2007,\"month\":8,\"count\":205,\"rate\":3.4,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2007,\"month\":9,\"count\":224,\"rate\":3.7,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2007,\"month\":10,\"count\":218,\"rate\":3.6,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2007,\"month\":11,\"count\":242,\"rate\":3.9,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2007,\"month\":12,\"count\":210,\"rate\":3.4,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2008,\"month\":1,\"count\":271,\"rate\":4.4,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2008,\"month\":2,\"count\":289,\"rate\":4.6,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2008,\"month\":3,\"count\":267,\"rate\":4.3,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2008,\"month\":4,\"count\":245,\"rate\":4,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2008,\"month\":5,\"count\":269,\"rate\":4.3,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2008,\"month\":6,\"count\":329,\"rate\":5.1,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2008,\"month\":7,\"count\":359,\"rate\":5.7,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2008,\"month\":8,\"count\":309,\"rate\":5.2,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2008,\"month\":9,\"count\":337,\"rate\":5.8,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2008,\"month\":10,\"count\":316,\"rate\":5.7,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2008,\"month\":11,\"count\":331,\"rate\":5.8,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2008,\"month\":12,\"count\":421,\"rate\":6.7,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2009,\"month\":1,\"count\":522,\"rate\":8.4,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2009,\"month\":2,\"count\":563,\"rate\":9.1,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2009,\"month\":3,\"count\":558,\"rate\":9,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2009,\"month\":4,\"count\":541,\"rate\":9,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2009,\"month\":5,\"count\":506,\"rate\":8.5,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2009,\"month\":6,\"count\":499,\"rate\":8.4,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2009,\"month\":7,\"count\":511,\"rate\":8.8,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2009,\"month\":8,\"count\":547,\"rate\":9.8,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2009,\"month\":9,\"count\":538,\"rate\":9.5,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2009,\"month\":10,\"count\":480,\"rate\":8.6,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2009,\"month\":11,\"count\":493,\"rate\":8.5,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2009,\"month\":12,\"count\":539,\"rate\":9,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2010,\"month\":1,\"count\":657,\"rate\":11.3,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Transportation and Utilities\",\"year\":2010,\"month\":2,\"count\":591,\"rate\":10.5,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2000,\"month\":1,\"count\":125,\"rate\":3.4,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2000,\"month\":2,\"count\":112,\"rate\":2.9,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2000,\"month\":3,\"count\":140,\"rate\":3.6,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2000,\"month\":4,\"count\":95,\"rate\":2.4,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2000,\"month\":5,\"count\":131,\"rate\":3.5,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2000,\"month\":6,\"count\":102,\"rate\":2.6,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2000,\"month\":7,\"count\":144,\"rate\":3.6,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2000,\"month\":8,\"count\":143,\"rate\":3.7,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2000,\"month\":9,\"count\":130,\"rate\":3.3,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2000,\"month\":10,\"count\":96,\"rate\":2.4,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2000,\"month\":11,\"count\":117,\"rate\":3,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2000,\"month\":12,\"count\":151,\"rate\":4,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2001,\"month\":1,\"count\":161,\"rate\":4.1,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2001,\"month\":2,\"count\":109,\"rate\":2.9,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2001,\"month\":3,\"count\":148,\"rate\":3.8,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2001,\"month\":4,\"count\":148,\"rate\":3.7,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2001,\"month\":5,\"count\":164,\"rate\":4.2,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2001,\"month\":6,\"count\":163,\"rate\":4.1,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2001,\"month\":7,\"count\":206,\"rate\":5.2,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2001,\"month\":8,\"count\":210,\"rate\":5.4,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2001,\"month\":9,\"count\":219,\"rate\":5.6,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2001,\"month\":10,\"count\":233,\"rate\":6,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2001,\"month\":11,\"count\":241,\"rate\":6.2,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2001,\"month\":12,\"count\":275,\"rate\":7.4,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2002,\"month\":1,\"count\":263,\"rate\":7.1,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2002,\"month\":2,\"count\":279,\"rate\":7.6,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2002,\"month\":3,\"count\":266,\"rate\":7.2,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2002,\"month\":4,\"count\":257,\"rate\":6.9,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2002,\"month\":5,\"count\":260,\"rate\":7.2,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2002,\"month\":6,\"count\":255,\"rate\":6.9,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2002,\"month\":7,\"count\":264,\"rate\":7.1,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2002,\"month\":8,\"count\":270,\"rate\":7.1,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2002,\"month\":9,\"count\":231,\"rate\":6.3,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2002,\"month\":10,\"count\":211,\"rate\":6,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2002,\"month\":11,\"count\":220,\"rate\":6.5,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2002,\"month\":12,\"count\":255,\"rate\":7.2,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2003,\"month\":1,\"count\":243,\"rate\":6.7,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2003,\"month\":2,\"count\":321,\"rate\":8.6,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2003,\"month\":3,\"count\":267,\"rate\":7.4,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2003,\"month\":4,\"count\":268,\"rate\":7.3,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2003,\"month\":5,\"count\":251,\"rate\":6.9,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2003,\"month\":6,\"count\":239,\"rate\":6.4,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2003,\"month\":7,\"count\":224,\"rate\":5.9,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2003,\"month\":8,\"count\":224,\"rate\":6.1,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2003,\"month\":9,\"count\":248,\"rate\":7,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2003,\"month\":10,\"count\":182,\"rate\":5.4,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2003,\"month\":11,\"count\":257,\"rate\":7.6,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2003,\"month\":12,\"count\":224,\"rate\":6.5,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2004,\"month\":1,\"count\":236,\"rate\":7,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2004,\"month\":2,\"count\":194,\"rate\":5.8,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2004,\"month\":3,\"count\":216,\"rate\":6.3,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2004,\"month\":4,\"count\":168,\"rate\":5,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2004,\"month\":5,\"count\":190,\"rate\":5.7,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2004,\"month\":6,\"count\":172,\"rate\":5,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2004,\"month\":7,\"count\":174,\"rate\":5.2,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2004,\"month\":8,\"count\":191,\"rate\":5.7,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2004,\"month\":9,\"count\":178,\"rate\":5.4,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2004,\"month\":10,\"count\":185,\"rate\":5.6,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2004,\"month\":11,\"count\":187,\"rate\":5.6,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2004,\"month\":12,\"count\":173,\"rate\":5.7,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2005,\"month\":1,\"count\":168,\"rate\":5.4,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2005,\"month\":2,\"count\":204,\"rate\":6.5,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2005,\"month\":3,\"count\":177,\"rate\":6,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2005,\"month\":4,\"count\":178,\"rate\":5.9,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2005,\"month\":5,\"count\":145,\"rate\":4.7,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2005,\"month\":6,\"count\":160,\"rate\":5,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2005,\"month\":7,\"count\":142,\"rate\":4.2,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2005,\"month\":8,\"count\":156,\"rate\":4.6,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2005,\"month\":9,\"count\":168,\"rate\":4.9,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2005,\"month\":10,\"count\":162,\"rate\":4.8,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2005,\"month\":11,\"count\":172,\"rate\":5.1,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2005,\"month\":12,\"count\":128,\"rate\":3.7,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2006,\"month\":1,\"count\":105,\"rate\":3.3,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2006,\"month\":2,\"count\":119,\"rate\":3.7,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2006,\"month\":3,\"count\":116,\"rate\":3.5,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2006,\"month\":4,\"count\":132,\"rate\":4.2,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2006,\"month\":5,\"count\":158,\"rate\":4.8,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2006,\"month\":6,\"count\":114,\"rate\":3.4,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2006,\"month\":7,\"count\":103,\"rate\":3,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2006,\"month\":8,\"count\":132,\"rate\":3.9,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2006,\"month\":9,\"count\":170,\"rate\":4.9,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2006,\"month\":10,\"count\":116,\"rate\":3.4,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2006,\"month\":11,\"count\":137,\"rate\":3.9,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2006,\"month\":12,\"count\":108,\"rate\":2.9,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2007,\"month\":1,\"count\":143,\"rate\":4,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2007,\"month\":2,\"count\":139,\"rate\":4,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2007,\"month\":3,\"count\":109,\"rate\":3.2,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2007,\"month\":4,\"count\":77,\"rate\":2.4,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2007,\"month\":5,\"count\":110,\"rate\":3.3,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2007,\"month\":6,\"count\":114,\"rate\":3.4,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2007,\"month\":7,\"count\":112,\"rate\":3.4,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2007,\"month\":8,\"count\":140,\"rate\":4.1,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2007,\"month\":9,\"count\":124,\"rate\":3.7,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2007,\"month\":10,\"count\":120,\"rate\":3.7,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2007,\"month\":11,\"count\":132,\"rate\":4,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2007,\"month\":12,\"count\":125,\"rate\":3.7,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2008,\"month\":1,\"count\":169,\"rate\":5.1,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2008,\"month\":2,\"count\":193,\"rate\":5.8,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2008,\"month\":3,\"count\":155,\"rate\":4.8,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2008,\"month\":4,\"count\":143,\"rate\":4.4,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2008,\"month\":5,\"count\":170,\"rate\":5,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2008,\"month\":6,\"count\":157,\"rate\":4.7,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2008,\"month\":7,\"count\":141,\"rate\":4.1,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2008,\"month\":8,\"count\":144,\"rate\":4.2,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2008,\"month\":9,\"count\":166,\"rate\":5,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2008,\"month\":10,\"count\":168,\"rate\":5,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2008,\"month\":11,\"count\":173,\"rate\":5.2,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2008,\"month\":12,\"count\":219,\"rate\":6.9,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2009,\"month\":1,\"count\":232,\"rate\":7.4,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2009,\"month\":2,\"count\":224,\"rate\":7.1,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2009,\"month\":3,\"count\":252,\"rate\":7.8,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2009,\"month\":4,\"count\":320,\"rate\":10.1,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2009,\"month\":5,\"count\":303,\"rate\":9.5,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2009,\"month\":6,\"count\":347,\"rate\":11.1,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2009,\"month\":7,\"count\":373,\"rate\":11.5,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2009,\"month\":8,\"count\":358,\"rate\":10.7,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2009,\"month\":9,\"count\":362,\"rate\":11.2,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2009,\"month\":10,\"count\":261,\"rate\":8.2,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2009,\"month\":11,\"count\":243,\"rate\":7.6,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Information\",\"year\":2009,\"month\":12,\"count\":256,\"rate\":8.5,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2010,\"month\":1,\"count\":313,\"rate\":10,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Information\",\"year\":2010,\"month\":2,\"count\":300,\"rate\":10,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2000,\"month\":1,\"count\":228,\"rate\":2.7,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2000,\"month\":2,\"count\":240,\"rate\":2.8,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2000,\"month\":3,\"count\":226,\"rate\":2.6,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2000,\"month\":4,\"count\":197,\"rate\":2.3,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2000,\"month\":5,\"count\":195,\"rate\":2.2,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2000,\"month\":6,\"count\":216,\"rate\":2.5,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2000,\"month\":7,\"count\":190,\"rate\":2.2,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2000,\"month\":8,\"count\":213,\"rate\":2.5,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2000,\"month\":9,\"count\":187,\"rate\":2.2,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2000,\"month\":10,\"count\":224,\"rate\":2.6,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2000,\"month\":11,\"count\":184,\"rate\":2.1,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2000,\"month\":12,\"count\":200,\"rate\":2.3,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2001,\"month\":1,\"count\":232,\"rate\":2.6,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2001,\"month\":2,\"count\":235,\"rate\":2.6,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2001,\"month\":3,\"count\":211,\"rate\":2.4,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2001,\"month\":4,\"count\":232,\"rate\":2.6,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2001,\"month\":5,\"count\":191,\"rate\":2.2,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2001,\"month\":6,\"count\":249,\"rate\":2.8,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2001,\"month\":7,\"count\":289,\"rate\":3.3,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2001,\"month\":8,\"count\":256,\"rate\":2.9,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2001,\"month\":9,\"count\":268,\"rate\":3.1,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2001,\"month\":10,\"count\":281,\"rate\":3.3,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2001,\"month\":11,\"count\":320,\"rate\":3.6,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2001,\"month\":12,\"count\":258,\"rate\":3,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2002,\"month\":1,\"count\":267,\"rate\":3,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2002,\"month\":2,\"count\":318,\"rate\":3.5,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2002,\"month\":3,\"count\":287,\"rate\":3.2,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2002,\"month\":4,\"count\":292,\"rate\":3.3,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2002,\"month\":5,\"count\":340,\"rate\":3.8,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2002,\"month\":6,\"count\":373,\"rate\":4.1,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2002,\"month\":7,\"count\":345,\"rate\":3.8,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2002,\"month\":8,\"count\":343,\"rate\":3.8,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2002,\"month\":9,\"count\":299,\"rate\":3.3,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2002,\"month\":10,\"count\":312,\"rate\":3.5,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2002,\"month\":11,\"count\":337,\"rate\":3.7,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2002,\"month\":12,\"count\":322,\"rate\":3.6,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2003,\"month\":1,\"count\":327,\"rate\":3.6,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2003,\"month\":2,\"count\":310,\"rate\":3.4,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2003,\"month\":3,\"count\":357,\"rate\":4,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2003,\"month\":4,\"count\":323,\"rate\":3.6,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2003,\"month\":5,\"count\":320,\"rate\":3.6,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2003,\"month\":6,\"count\":358,\"rate\":4,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2003,\"month\":7,\"count\":284,\"rate\":3.1,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2003,\"month\":8,\"count\":342,\"rate\":3.7,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2003,\"month\":9,\"count\":305,\"rate\":3.3,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2003,\"month\":10,\"count\":303,\"rate\":3.3,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2003,\"month\":11,\"count\":311,\"rate\":3.3,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2003,\"month\":12,\"count\":283,\"rate\":3,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2004,\"month\":1,\"count\":403,\"rate\":4.3,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2004,\"month\":2,\"count\":363,\"rate\":3.8,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2004,\"month\":3,\"count\":343,\"rate\":3.7,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2004,\"month\":4,\"count\":312,\"rate\":3.4,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2004,\"month\":5,\"count\":302,\"rate\":3.3,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2004,\"month\":6,\"count\":335,\"rate\":3.6,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2004,\"month\":7,\"count\":307,\"rate\":3.3,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2004,\"month\":8,\"count\":312,\"rate\":3.4,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2004,\"month\":9,\"count\":374,\"rate\":4,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2004,\"month\":10,\"count\":358,\"rate\":3.8,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2004,\"month\":11,\"count\":290,\"rate\":3.1,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2004,\"month\":12,\"count\":290,\"rate\":3.1,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2005,\"month\":1,\"count\":252,\"rate\":2.7,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2005,\"month\":2,\"count\":301,\"rate\":3.2,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2005,\"month\":3,\"count\":261,\"rate\":2.7,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2005,\"month\":4,\"count\":255,\"rate\":2.7,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2005,\"month\":5,\"count\":288,\"rate\":3.1,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2005,\"month\":6,\"count\":307,\"rate\":3.3,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2005,\"month\":7,\"count\":309,\"rate\":3.3,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2005,\"month\":8,\"count\":300,\"rate\":3.2,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2005,\"month\":9,\"count\":260,\"rate\":2.7,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2005,\"month\":10,\"count\":255,\"rate\":2.7,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2005,\"month\":11,\"count\":268,\"rate\":2.8,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2005,\"month\":12,\"count\":204,\"rate\":2.1,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2006,\"month\":1,\"count\":233,\"rate\":2.4,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2006,\"month\":2,\"count\":268,\"rate\":2.8,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2006,\"month\":3,\"count\":298,\"rate\":3.1,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2006,\"month\":4,\"count\":293,\"rate\":3.1,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2006,\"month\":5,\"count\":289,\"rate\":3,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2006,\"month\":6,\"count\":299,\"rate\":3.1,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2006,\"month\":7,\"count\":329,\"rate\":3.4,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2006,\"month\":8,\"count\":263,\"rate\":2.7,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2006,\"month\":9,\"count\":235,\"rate\":2.4,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2006,\"month\":10,\"count\":211,\"rate\":2.1,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2006,\"month\":11,\"count\":229,\"rate\":2.3,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2006,\"month\":12,\"count\":227,\"rate\":2.3,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2007,\"month\":1,\"count\":233,\"rate\":2.4,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2007,\"month\":2,\"count\":295,\"rate\":3.1,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2007,\"month\":3,\"count\":252,\"rate\":2.6,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2007,\"month\":4,\"count\":231,\"rate\":2.4,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2007,\"month\":5,\"count\":281,\"rate\":2.9,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2007,\"month\":6,\"count\":303,\"rate\":3.1,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2007,\"month\":7,\"count\":307,\"rate\":3.1,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2007,\"month\":8,\"count\":371,\"rate\":3.7,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2007,\"month\":9,\"count\":316,\"rate\":3.3,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2007,\"month\":10,\"count\":307,\"rate\":3.2,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2007,\"month\":11,\"count\":261,\"rate\":2.7,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2007,\"month\":12,\"count\":315,\"rate\":3.2,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2008,\"month\":1,\"count\":285,\"rate\":3,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2008,\"month\":2,\"count\":323,\"rate\":3.4,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2008,\"month\":3,\"count\":323,\"rate\":3.4,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2008,\"month\":4,\"count\":324,\"rate\":3.4,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2008,\"month\":5,\"count\":361,\"rate\":3.7,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2008,\"month\":6,\"count\":337,\"rate\":3.4,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2008,\"month\":7,\"count\":350,\"rate\":3.6,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2008,\"month\":8,\"count\":409,\"rate\":4.2,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2008,\"month\":9,\"count\":380,\"rate\":4,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2008,\"month\":10,\"count\":434,\"rate\":4.5,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2008,\"month\":11,\"count\":494,\"rate\":5.2,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2008,\"month\":12,\"count\":540,\"rate\":5.6,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2009,\"month\":1,\"count\":571,\"rate\":6,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2009,\"month\":2,\"count\":637,\"rate\":6.7,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2009,\"month\":3,\"count\":639,\"rate\":6.8,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2009,\"month\":4,\"count\":561,\"rate\":6,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2009,\"month\":5,\"count\":536,\"rate\":5.7,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2009,\"month\":6,\"count\":513,\"rate\":5.5,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2009,\"month\":7,\"count\":570,\"rate\":6.1,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2009,\"month\":8,\"count\":566,\"rate\":6,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2009,\"month\":9,\"count\":657,\"rate\":7.1,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2009,\"month\":10,\"count\":646,\"rate\":7,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2009,\"month\":11,\"count\":619,\"rate\":6.7,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2009,\"month\":12,\"count\":665,\"rate\":7.2,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2010,\"month\":1,\"count\":623,\"rate\":6.6,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Finance\",\"year\":2010,\"month\":2,\"count\":708,\"rate\":7.5,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2000,\"month\":1,\"count\":655,\"rate\":5.7,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2000,\"month\":2,\"count\":587,\"rate\":5.2,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2000,\"month\":3,\"count\":623,\"rate\":5.4,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2000,\"month\":4,\"count\":517,\"rate\":4.5,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2000,\"month\":5,\"count\":561,\"rate\":4.7,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2000,\"month\":6,\"count\":545,\"rate\":4.4,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2000,\"month\":7,\"count\":636,\"rate\":5.1,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2000,\"month\":8,\"count\":584,\"rate\":4.8,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2000,\"month\":9,\"count\":559,\"rate\":4.6,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2000,\"month\":10,\"count\":504,\"rate\":4.1,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2000,\"month\":11,\"count\":547,\"rate\":4.4,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2000,\"month\":12,\"count\":564,\"rate\":4.5,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2001,\"month\":1,\"count\":734,\"rate\":5.8,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2001,\"month\":2,\"count\":724,\"rate\":5.9,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2001,\"month\":3,\"count\":652,\"rate\":5.3,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2001,\"month\":4,\"count\":655,\"rate\":5.3,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2001,\"month\":5,\"count\":652,\"rate\":5.3,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2001,\"month\":6,\"count\":694,\"rate\":5.4,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2001,\"month\":7,\"count\":731,\"rate\":5.7,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2001,\"month\":8,\"count\":790,\"rate\":6.2,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2001,\"month\":9,\"count\":810,\"rate\":6.4,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2001,\"month\":10,\"count\":910,\"rate\":7.2,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2001,\"month\":11,\"count\":946,\"rate\":7.6,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2001,\"month\":12,\"count\":921,\"rate\":7.4,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2002,\"month\":1,\"count\":1120,\"rate\":8.9,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2002,\"month\":2,\"count\":973,\"rate\":7.7,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2002,\"month\":3,\"count\":964,\"rate\":7.5,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2002,\"month\":4,\"count\":951,\"rate\":7.3,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2002,\"month\":5,\"count\":983,\"rate\":7.7,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2002,\"month\":6,\"count\":1079,\"rate\":8.2,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2002,\"month\":7,\"count\":1075,\"rate\":8.2,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2002,\"month\":8,\"count\":926,\"rate\":7.2,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2002,\"month\":9,\"count\":1007,\"rate\":7.8,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2002,\"month\":10,\"count\":962,\"rate\":7.5,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2002,\"month\":11,\"count\":1029,\"rate\":8.2,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2002,\"month\":12,\"count\":1038,\"rate\":8.3,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2003,\"month\":1,\"count\":1112,\"rate\":8.9,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2003,\"month\":2,\"count\":1140,\"rate\":8.9,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2003,\"month\":3,\"count\":1190,\"rate\":9.1,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2003,\"month\":4,\"count\":1076,\"rate\":8.3,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2003,\"month\":5,\"count\":1105,\"rate\":8.4,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2003,\"month\":6,\"count\":1092,\"rate\":8.5,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2003,\"month\":7,\"count\":1021,\"rate\":8.2,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2003,\"month\":8,\"count\":881,\"rate\":7.2,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2003,\"month\":9,\"count\":975,\"rate\":8,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2003,\"month\":10,\"count\":1014,\"rate\":8.1,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2003,\"month\":11,\"count\":948,\"rate\":7.7,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2003,\"month\":12,\"count\":948,\"rate\":7.6,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2004,\"month\":1,\"count\":1070,\"rate\":8.7,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2004,\"month\":2,\"count\":964,\"rate\":7.7,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2004,\"month\":3,\"count\":999,\"rate\":7.9,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2004,\"month\":4,\"count\":752,\"rate\":6,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2004,\"month\":5,\"count\":819,\"rate\":6.5,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2004,\"month\":6,\"count\":814,\"rate\":6.5,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2004,\"month\":7,\"count\":790,\"rate\":6.2,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2004,\"month\":8,\"count\":845,\"rate\":6.7,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2004,\"month\":9,\"count\":750,\"rate\":5.9,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2004,\"month\":10,\"count\":781,\"rate\":6.2,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2004,\"month\":11,\"count\":872,\"rate\":6.8,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2004,\"month\":12,\"count\":875,\"rate\":6.9,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2005,\"month\":1,\"count\":958,\"rate\":7.6,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2005,\"month\":2,\"count\":916,\"rate\":7.2,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2005,\"month\":3,\"count\":807,\"rate\":6.5,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2005,\"month\":4,\"count\":714,\"rate\":5.7,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2005,\"month\":5,\"count\":730,\"rate\":5.9,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2005,\"month\":6,\"count\":743,\"rate\":5.8,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2005,\"month\":7,\"count\":804,\"rate\":6.3,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2005,\"month\":8,\"count\":728,\"rate\":5.7,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2005,\"month\":9,\"count\":862,\"rate\":6.7,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2005,\"month\":10,\"count\":748,\"rate\":5.8,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2005,\"month\":11,\"count\":711,\"rate\":5.5,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2005,\"month\":12,\"count\":788,\"rate\":6.1,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2006,\"month\":1,\"count\":825,\"rate\":6.5,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2006,\"month\":2,\"count\":841,\"rate\":6.5,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2006,\"month\":3,\"count\":824,\"rate\":6.3,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2006,\"month\":4,\"count\":644,\"rate\":4.9,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2006,\"month\":5,\"count\":695,\"rate\":5.3,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2006,\"month\":6,\"count\":753,\"rate\":5.7,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2006,\"month\":7,\"count\":735,\"rate\":5.5,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2006,\"month\":8,\"count\":681,\"rate\":5.1,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2006,\"month\":9,\"count\":736,\"rate\":5.6,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2006,\"month\":10,\"count\":768,\"rate\":5.6,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2006,\"month\":11,\"count\":658,\"rate\":4.9,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2006,\"month\":12,\"count\":791,\"rate\":5.9,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2007,\"month\":1,\"count\":885,\"rate\":6.5,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2007,\"month\":2,\"count\":825,\"rate\":6,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2007,\"month\":3,\"count\":775,\"rate\":5.7,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2007,\"month\":4,\"count\":689,\"rate\":5,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2007,\"month\":5,\"count\":743,\"rate\":5.4,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2007,\"month\":6,\"count\":722,\"rate\":5.2,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2007,\"month\":7,\"count\":743,\"rate\":5.2,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2007,\"month\":8,\"count\":683,\"rate\":4.9,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2007,\"month\":9,\"count\":655,\"rate\":4.7,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2007,\"month\":10,\"count\":675,\"rate\":4.8,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2007,\"month\":11,\"count\":679,\"rate\":4.8,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2007,\"month\":12,\"count\":803,\"rate\":5.7,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2008,\"month\":1,\"count\":893,\"rate\":6.4,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2008,\"month\":2,\"count\":866,\"rate\":6.2,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2008,\"month\":3,\"count\":876,\"rate\":6.2,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2008,\"month\":4,\"count\":736,\"rate\":5.3,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2008,\"month\":5,\"count\":829,\"rate\":5.9,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2008,\"month\":6,\"count\":890,\"rate\":6.2,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2008,\"month\":7,\"count\":866,\"rate\":6.1,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2008,\"month\":8,\"count\":961,\"rate\":6.9,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2008,\"month\":9,\"count\":951,\"rate\":6.9,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2008,\"month\":10,\"count\":1052,\"rate\":7.5,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2008,\"month\":11,\"count\":992,\"rate\":7,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2008,\"month\":12,\"count\":1147,\"rate\":8.1,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2009,\"month\":1,\"count\":1445,\"rate\":10.4,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2009,\"month\":2,\"count\":1512,\"rate\":10.8,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2009,\"month\":3,\"count\":1597,\"rate\":11.4,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2009,\"month\":4,\"count\":1448,\"rate\":10.4,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2009,\"month\":5,\"count\":1514,\"rate\":10.9,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2009,\"month\":6,\"count\":1580,\"rate\":11.3,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2009,\"month\":7,\"count\":1531,\"rate\":10.9,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2009,\"month\":8,\"count\":1560,\"rate\":11,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2009,\"month\":9,\"count\":1596,\"rate\":11.3,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2009,\"month\":10,\"count\":1488,\"rate\":10.3,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2009,\"month\":11,\"count\":1514,\"rate\":10.6,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2009,\"month\":12,\"count\":1486,\"rate\":10.3,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2010,\"month\":1,\"count\":1614,\"rate\":11.1,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Business services\",\"year\":2010,\"month\":2,\"count\":1740,\"rate\":12,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2000,\"month\":1,\"count\":353,\"rate\":2.3,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2000,\"month\":2,\"count\":349,\"rate\":2.2,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2000,\"month\":3,\"count\":381,\"rate\":2.5,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2000,\"month\":4,\"count\":329,\"rate\":2.1,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2000,\"month\":5,\"count\":423,\"rate\":2.7,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2000,\"month\":6,\"count\":452,\"rate\":2.9,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2000,\"month\":7,\"count\":478,\"rate\":3.1,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2000,\"month\":8,\"count\":450,\"rate\":2.9,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2000,\"month\":9,\"count\":398,\"rate\":2.6,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2000,\"month\":10,\"count\":339,\"rate\":2.1,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2000,\"month\":11,\"count\":351,\"rate\":2.2,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2000,\"month\":12,\"count\":293,\"rate\":1.8,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2001,\"month\":1,\"count\":428,\"rate\":2.6,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2001,\"month\":2,\"count\":423,\"rate\":2.6,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2001,\"month\":3,\"count\":456,\"rate\":2.8,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2001,\"month\":4,\"count\":341,\"rate\":2.1,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2001,\"month\":5,\"count\":390,\"rate\":2.4,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2001,\"month\":6,\"count\":476,\"rate\":3,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2001,\"month\":7,\"count\":513,\"rate\":3.1,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2001,\"month\":8,\"count\":595,\"rate\":3.7,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2001,\"month\":9,\"count\":455,\"rate\":2.8,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2001,\"month\":10,\"count\":486,\"rate\":2.9,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2001,\"month\":11,\"count\":516,\"rate\":3.1,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2001,\"month\":12,\"count\":483,\"rate\":2.9,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2002,\"month\":1,\"count\":586,\"rate\":3.5,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2002,\"month\":2,\"count\":590,\"rate\":3.5,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2002,\"month\":3,\"count\":540,\"rate\":3.2,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2002,\"month\":4,\"count\":493,\"rate\":2.9,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2002,\"month\":5,\"count\":533,\"rate\":3.2,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2002,\"month\":6,\"count\":638,\"rate\":3.9,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2002,\"month\":7,\"count\":671,\"rate\":4,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2002,\"month\":8,\"count\":660,\"rate\":3.9,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2002,\"month\":9,\"count\":562,\"rate\":3.2,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2002,\"month\":10,\"count\":517,\"rate\":3,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2002,\"month\":11,\"count\":493,\"rate\":2.8,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2002,\"month\":12,\"count\":558,\"rate\":3.2,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2003,\"month\":1,\"count\":559,\"rate\":3.2,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2003,\"month\":2,\"count\":576,\"rate\":3.2,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2003,\"month\":3,\"count\":518,\"rate\":2.9,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2003,\"month\":4,\"count\":611,\"rate\":3.4,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2003,\"month\":5,\"count\":618,\"rate\":3.5,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2003,\"month\":6,\"count\":769,\"rate\":4.4,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2003,\"month\":7,\"count\":697,\"rate\":4,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2003,\"month\":8,\"count\":760,\"rate\":4.3,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2003,\"month\":9,\"count\":649,\"rate\":3.7,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2003,\"month\":10,\"count\":639,\"rate\":3.6,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2003,\"month\":11,\"count\":662,\"rate\":3.8,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2003,\"month\":12,\"count\":620,\"rate\":3.5,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2004,\"month\":1,\"count\":662,\"rate\":3.7,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2004,\"month\":2,\"count\":608,\"rate\":3.4,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2004,\"month\":3,\"count\":584,\"rate\":3.2,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2004,\"month\":4,\"count\":589,\"rate\":3.3,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2004,\"month\":5,\"count\":570,\"rate\":3.2,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2004,\"month\":6,\"count\":769,\"rate\":4.2,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2004,\"month\":7,\"count\":725,\"rate\":4,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2004,\"month\":8,\"count\":647,\"rate\":3.7,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2004,\"month\":9,\"count\":593,\"rate\":3.3,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2004,\"month\":10,\"count\":526,\"rate\":2.9,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2004,\"month\":11,\"count\":570,\"rate\":3.2,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2004,\"month\":12,\"count\":562,\"rate\":3.1,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2005,\"month\":1,\"count\":613,\"rate\":3.4,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2005,\"month\":2,\"count\":619,\"rate\":3.4,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2005,\"month\":3,\"count\":614,\"rate\":3.4,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2005,\"month\":4,\"count\":591,\"rate\":3.3,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2005,\"month\":5,\"count\":648,\"rate\":3.6,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2005,\"month\":6,\"count\":667,\"rate\":3.6,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2005,\"month\":7,\"count\":635,\"rate\":3.5,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2005,\"month\":8,\"count\":644,\"rate\":3.5,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2005,\"month\":9,\"count\":658,\"rate\":3.5,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2005,\"month\":10,\"count\":628,\"rate\":3.4,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2005,\"month\":11,\"count\":677,\"rate\":3.6,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2005,\"month\":12,\"count\":529,\"rate\":2.8,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2006,\"month\":1,\"count\":593,\"rate\":3.2,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2006,\"month\":2,\"count\":528,\"rate\":2.8,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2006,\"month\":3,\"count\":563,\"rate\":3,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2006,\"month\":4,\"count\":558,\"rate\":3,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2006,\"month\":5,\"count\":543,\"rate\":2.9,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2006,\"month\":6,\"count\":617,\"rate\":3.3,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2006,\"month\":7,\"count\":659,\"rate\":3.5,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2006,\"month\":8,\"count\":611,\"rate\":3.2,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2006,\"month\":9,\"count\":576,\"rate\":3,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2006,\"month\":10,\"count\":531,\"rate\":2.8,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2006,\"month\":11,\"count\":536,\"rate\":2.8,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2006,\"month\":12,\"count\":502,\"rate\":2.6,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2007,\"month\":1,\"count\":563,\"rate\":2.9,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2007,\"month\":2,\"count\":489,\"rate\":2.5,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2007,\"month\":3,\"count\":495,\"rate\":2.5,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2007,\"month\":4,\"count\":555,\"rate\":2.9,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2007,\"month\":5,\"count\":622,\"rate\":3.3,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2007,\"month\":6,\"count\":653,\"rate\":3.4,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2007,\"month\":7,\"count\":665,\"rate\":3.5,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2007,\"month\":8,\"count\":648,\"rate\":3.4,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2007,\"month\":9,\"count\":630,\"rate\":3.2,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2007,\"month\":10,\"count\":534,\"rate\":2.7,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2007,\"month\":11,\"count\":526,\"rate\":2.7,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2007,\"month\":12,\"count\":521,\"rate\":2.6,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2008,\"month\":1,\"count\":576,\"rate\":2.9,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2008,\"month\":2,\"count\":562,\"rate\":2.9,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2008,\"month\":3,\"count\":609,\"rate\":3.1,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2008,\"month\":4,\"count\":551,\"rate\":2.8,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2008,\"month\":5,\"count\":619,\"rate\":3.2,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2008,\"month\":6,\"count\":669,\"rate\":3.4,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2008,\"month\":7,\"count\":776,\"rate\":3.9,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2008,\"month\":8,\"count\":844,\"rate\":4.3,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2008,\"month\":9,\"count\":835,\"rate\":4.1,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2008,\"month\":10,\"count\":797,\"rate\":3.9,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2008,\"month\":11,\"count\":748,\"rate\":3.6,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2008,\"month\":12,\"count\":791,\"rate\":3.8,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2009,\"month\":1,\"count\":792,\"rate\":3.8,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2009,\"month\":2,\"count\":847,\"rate\":4.1,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2009,\"month\":3,\"count\":931,\"rate\":4.5,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2009,\"month\":4,\"count\":964,\"rate\":4.6,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2009,\"month\":5,\"count\":1005,\"rate\":4.9,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2009,\"month\":6,\"count\":1267,\"rate\":6.1,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2009,\"month\":7,\"count\":1269,\"rate\":6.1,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2009,\"month\":8,\"count\":1239,\"rate\":6,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2009,\"month\":9,\"count\":1257,\"rate\":6,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2009,\"month\":10,\"count\":1280,\"rate\":6,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2009,\"month\":11,\"count\":1168,\"rate\":5.5,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2009,\"month\":12,\"count\":1183,\"rate\":5.6,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2010,\"month\":1,\"count\":1175,\"rate\":5.5,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Education and Health\",\"year\":2010,\"month\":2,\"count\":1200,\"rate\":5.6,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2000,\"month\":1,\"count\":782,\"rate\":7.5,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2000,\"month\":2,\"count\":779,\"rate\":7.5,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2000,\"month\":3,\"count\":789,\"rate\":7.4,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2000,\"month\":4,\"count\":658,\"rate\":6.1,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2000,\"month\":5,\"count\":675,\"rate\":6.2,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2000,\"month\":6,\"count\":833,\"rate\":7.3,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2000,\"month\":7,\"count\":786,\"rate\":6.8,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2000,\"month\":8,\"count\":675,\"rate\":6,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2000,\"month\":9,\"count\":636,\"rate\":5.9,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2000,\"month\":10,\"count\":691,\"rate\":6.5,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2000,\"month\":11,\"count\":694,\"rate\":6.5,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2000,\"month\":12,\"count\":639,\"rate\":5.9,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2001,\"month\":1,\"count\":806,\"rate\":7.7,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2001,\"month\":2,\"count\":821,\"rate\":7.5,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2001,\"month\":3,\"count\":817,\"rate\":7.4,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2001,\"month\":4,\"count\":744,\"rate\":6.8,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2001,\"month\":5,\"count\":731,\"rate\":6.7,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2001,\"month\":6,\"count\":821,\"rate\":7,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2001,\"month\":7,\"count\":813,\"rate\":6.8,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2001,\"month\":8,\"count\":767,\"rate\":6.8,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2001,\"month\":9,\"count\":900,\"rate\":8,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2001,\"month\":10,\"count\":903,\"rate\":8.3,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2001,\"month\":11,\"count\":935,\"rate\":8.5,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2001,\"month\":12,\"count\":938,\"rate\":8.5,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2002,\"month\":1,\"count\":947,\"rate\":8.6,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2002,\"month\":2,\"count\":973,\"rate\":8.7,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2002,\"month\":3,\"count\":976,\"rate\":8.5,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2002,\"month\":4,\"count\":953,\"rate\":8.4,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2002,\"month\":5,\"count\":1022,\"rate\":8.6,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2002,\"month\":6,\"count\":1034,\"rate\":8.5,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2002,\"month\":7,\"count\":999,\"rate\":8.2,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2002,\"month\":8,\"count\":884,\"rate\":7.5,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2002,\"month\":9,\"count\":885,\"rate\":7.9,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2002,\"month\":10,\"count\":956,\"rate\":8.5,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2002,\"month\":11,\"count\":978,\"rate\":8.9,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2002,\"month\":12,\"count\":922,\"rate\":8.2,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2003,\"month\":1,\"count\":1049,\"rate\":9.3,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2003,\"month\":2,\"count\":1145,\"rate\":10,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2003,\"month\":3,\"count\":1035,\"rate\":8.9,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2003,\"month\":4,\"count\":986,\"rate\":8.5,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2003,\"month\":5,\"count\":955,\"rate\":7.9,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2003,\"month\":6,\"count\":1048,\"rate\":8.6,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2003,\"month\":7,\"count\":1020,\"rate\":8.4,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2003,\"month\":8,\"count\":1050,\"rate\":9,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2003,\"month\":9,\"count\":978,\"rate\":8.8,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2003,\"month\":10,\"count\":933,\"rate\":8.3,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2003,\"month\":11,\"count\":990,\"rate\":9,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2003,\"month\":12,\"count\":885,\"rate\":8.2,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2004,\"month\":1,\"count\":1097,\"rate\":10,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2004,\"month\":2,\"count\":987,\"rate\":8.9,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2004,\"month\":3,\"count\":1039,\"rate\":9,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2004,\"month\":4,\"count\":925,\"rate\":7.9,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2004,\"month\":5,\"count\":977,\"rate\":8.1,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2004,\"month\":6,\"count\":1189,\"rate\":9.6,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2004,\"month\":7,\"count\":965,\"rate\":7.8,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2004,\"month\":8,\"count\":1010,\"rate\":8.4,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2004,\"month\":9,\"count\":854,\"rate\":7.5,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2004,\"month\":10,\"count\":853,\"rate\":7.3,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2004,\"month\":11,\"count\":916,\"rate\":7.9,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2004,\"month\":12,\"count\":850,\"rate\":7.4,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2005,\"month\":1,\"count\":993,\"rate\":8.7,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2005,\"month\":2,\"count\":1008,\"rate\":8.8,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2005,\"month\":3,\"count\":967,\"rate\":8.3,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2005,\"month\":4,\"count\":882,\"rate\":7.7,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2005,\"month\":5,\"count\":944,\"rate\":7.7,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2005,\"month\":6,\"count\":950,\"rate\":7.6,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2005,\"month\":7,\"count\":929,\"rate\":7.4,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2005,\"month\":8,\"count\":844,\"rate\":6.8,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2005,\"month\":9,\"count\":842,\"rate\":7.3,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2005,\"month\":10,\"count\":796,\"rate\":6.8,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2005,\"month\":11,\"count\":966,\"rate\":8.1,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2005,\"month\":12,\"count\":930,\"rate\":7.9,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2006,\"month\":1,\"count\":910,\"rate\":8.1,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2006,\"month\":2,\"count\":1040,\"rate\":9.1,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2006,\"month\":3,\"count\":917,\"rate\":8,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2006,\"month\":4,\"count\":882,\"rate\":7.6,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2006,\"month\":5,\"count\":830,\"rate\":7,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2006,\"month\":6,\"count\":942,\"rate\":7.4,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2006,\"month\":7,\"count\":867,\"rate\":6.8,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2006,\"month\":8,\"count\":855,\"rate\":6.9,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2006,\"month\":9,\"count\":810,\"rate\":6.9,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2006,\"month\":10,\"count\":795,\"rate\":6.6,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2006,\"month\":11,\"count\":836,\"rate\":7.1,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2006,\"month\":12,\"count\":701,\"rate\":5.9,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2007,\"month\":1,\"count\":911,\"rate\":7.8,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2007,\"month\":2,\"count\":879,\"rate\":7.4,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2007,\"month\":3,\"count\":845,\"rate\":7,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2007,\"month\":4,\"count\":822,\"rate\":6.9,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2007,\"month\":5,\"count\":831,\"rate\":6.8,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2007,\"month\":6,\"count\":917,\"rate\":7.2,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2007,\"month\":7,\"count\":920,\"rate\":7.3,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2007,\"month\":8,\"count\":877,\"rate\":7.1,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2007,\"month\":9,\"count\":892,\"rate\":7.4,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2007,\"month\":10,\"count\":911,\"rate\":7.5,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2007,\"month\":11,\"count\":986,\"rate\":8.1,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2007,\"month\":12,\"count\":961,\"rate\":7.9,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2008,\"month\":1,\"count\":1176,\"rate\":9.4,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2008,\"month\":2,\"count\":1056,\"rate\":8.5,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2008,\"month\":3,\"count\":944,\"rate\":7.6,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2008,\"month\":4,\"count\":874,\"rate\":6.9,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2008,\"month\":5,\"count\":1074,\"rate\":8.4,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2008,\"month\":6,\"count\":1154,\"rate\":8.9,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2008,\"month\":7,\"count\":1172,\"rate\":8.8,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2008,\"month\":8,\"count\":1122,\"rate\":8.7,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2008,\"month\":9,\"count\":1029,\"rate\":8.2,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2008,\"month\":10,\"count\":1126,\"rate\":8.9,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2008,\"month\":11,\"count\":1283,\"rate\":9.9,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2008,\"month\":12,\"count\":1210,\"rate\":9.5,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2009,\"month\":1,\"count\":1487,\"rate\":11.5,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2009,\"month\":2,\"count\":1477,\"rate\":11.4,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2009,\"month\":3,\"count\":1484,\"rate\":11.6,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2009,\"month\":4,\"count\":1322,\"rate\":10.2,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2009,\"month\":5,\"count\":1599,\"rate\":11.9,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2009,\"month\":6,\"count\":1688,\"rate\":12.1,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2009,\"month\":7,\"count\":1600,\"rate\":11.2,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2009,\"month\":8,\"count\":1636,\"rate\":12,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2009,\"month\":9,\"count\":1469,\"rate\":11.4,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2009,\"month\":10,\"count\":1604,\"rate\":12.4,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2009,\"month\":11,\"count\":1524,\"rate\":11.9,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2009,\"month\":12,\"count\":1624,\"rate\":12.6,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2010,\"month\":1,\"count\":1804,\"rate\":14.2,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Leisure and hospitality\",\"year\":2010,\"month\":2,\"count\":1597,\"rate\":12.7,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2000,\"month\":1,\"count\":274,\"rate\":4.9,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2000,\"month\":2,\"count\":232,\"rate\":4.1,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2000,\"month\":3,\"count\":247,\"rate\":4.3,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2000,\"month\":4,\"count\":240,\"rate\":4.2,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2000,\"month\":5,\"count\":254,\"rate\":4.5,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2000,\"month\":6,\"count\":225,\"rate\":3.9,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2000,\"month\":7,\"count\":202,\"rate\":3.7,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2000,\"month\":8,\"count\":187,\"rate\":3.5,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2000,\"month\":9,\"count\":220,\"rate\":4,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2000,\"month\":10,\"count\":161,\"rate\":2.9,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2000,\"month\":11,\"count\":217,\"rate\":3.8,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2000,\"month\":12,\"count\":167,\"rate\":2.9,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2001,\"month\":1,\"count\":197,\"rate\":3.4,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2001,\"month\":2,\"count\":243,\"rate\":4.2,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2001,\"month\":3,\"count\":200,\"rate\":3.4,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2001,\"month\":4,\"count\":220,\"rate\":3.8,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2001,\"month\":5,\"count\":172,\"rate\":3.2,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2001,\"month\":6,\"count\":246,\"rate\":4.6,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2001,\"month\":7,\"count\":228,\"rate\":4.1,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2001,\"month\":8,\"count\":241,\"rate\":4.5,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2001,\"month\":9,\"count\":225,\"rate\":4,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2001,\"month\":10,\"count\":239,\"rate\":4.1,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2001,\"month\":11,\"count\":256,\"rate\":4.2,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2001,\"month\":12,\"count\":277,\"rate\":4.5,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2002,\"month\":1,\"count\":304,\"rate\":5.1,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2002,\"month\":2,\"count\":339,\"rate\":5.6,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2002,\"month\":3,\"count\":314,\"rate\":5.5,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2002,\"month\":4,\"count\":268,\"rate\":4.6,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2002,\"month\":5,\"count\":264,\"rate\":4.6,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2002,\"month\":6,\"count\":335,\"rate\":5.5,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2002,\"month\":7,\"count\":356,\"rate\":5.8,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2002,\"month\":8,\"count\":353,\"rate\":6,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2002,\"month\":9,\"count\":281,\"rate\":4.8,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2002,\"month\":10,\"count\":272,\"rate\":4.6,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2002,\"month\":11,\"count\":284,\"rate\":4.9,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2002,\"month\":12,\"count\":241,\"rate\":4.2,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2003,\"month\":1,\"count\":304,\"rate\":5.3,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2003,\"month\":2,\"count\":331,\"rate\":5.7,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2003,\"month\":3,\"count\":370,\"rate\":6.1,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2003,\"month\":4,\"count\":331,\"rate\":5.5,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2003,\"month\":5,\"count\":339,\"rate\":5.7,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2003,\"month\":6,\"count\":359,\"rate\":5.9,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2003,\"month\":7,\"count\":405,\"rate\":6.6,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2003,\"month\":8,\"count\":373,\"rate\":6.1,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2003,\"month\":9,\"count\":338,\"rate\":5.5,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2003,\"month\":10,\"count\":378,\"rate\":6.1,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2003,\"month\":11,\"count\":357,\"rate\":5.8,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2003,\"month\":12,\"count\":278,\"rate\":4.5,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2004,\"month\":1,\"count\":322,\"rate\":5.3,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2004,\"month\":2,\"count\":366,\"rate\":5.9,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2004,\"month\":3,\"count\":366,\"rate\":5.9,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2004,\"month\":4,\"count\":347,\"rate\":5.6,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2004,\"month\":5,\"count\":310,\"rate\":5.1,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2004,\"month\":6,\"count\":326,\"rate\":5.4,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2004,\"month\":7,\"count\":346,\"rate\":5.6,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2004,\"month\":8,\"count\":341,\"rate\":5.6,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2004,\"month\":9,\"count\":301,\"rate\":4.9,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2004,\"month\":10,\"count\":300,\"rate\":4.8,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2004,\"month\":11,\"count\":294,\"rate\":4.8,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2004,\"month\":12,\"count\":276,\"rate\":4.3,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2005,\"month\":1,\"count\":290,\"rate\":4.7,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2005,\"month\":2,\"count\":325,\"rate\":5.3,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2005,\"month\":3,\"count\":308,\"rate\":5,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2005,\"month\":4,\"count\":306,\"rate\":4.9,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2005,\"month\":5,\"count\":314,\"rate\":5,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2005,\"month\":6,\"count\":291,\"rate\":4.6,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2005,\"month\":7,\"count\":274,\"rate\":4.2,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2005,\"month\":8,\"count\":306,\"rate\":4.8,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2005,\"month\":9,\"count\":307,\"rate\":4.9,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2005,\"month\":10,\"count\":319,\"rate\":5,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2005,\"month\":11,\"count\":300,\"rate\":4.9,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2005,\"month\":12,\"count\":269,\"rate\":4.3,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2006,\"month\":1,\"count\":308,\"rate\":4.9,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2006,\"month\":2,\"count\":281,\"rate\":4.4,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2006,\"month\":3,\"count\":292,\"rate\":4.6,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2006,\"month\":4,\"count\":266,\"rate\":4.1,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2006,\"month\":5,\"count\":265,\"rate\":4.2,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2006,\"month\":6,\"count\":265,\"rate\":4.3,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2006,\"month\":7,\"count\":305,\"rate\":4.7,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2006,\"month\":8,\"count\":341,\"rate\":5.3,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2006,\"month\":9,\"count\":310,\"rate\":5,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2006,\"month\":10,\"count\":268,\"rate\":4.4,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2006,\"month\":11,\"count\":306,\"rate\":5,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2006,\"month\":12,\"count\":306,\"rate\":5.2,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2007,\"month\":1,\"count\":275,\"rate\":4.7,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2007,\"month\":2,\"count\":257,\"rate\":4.3,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2007,\"month\":3,\"count\":222,\"rate\":3.7,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2007,\"month\":4,\"count\":224,\"rate\":3.6,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2007,\"month\":5,\"count\":242,\"rate\":3.9,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2007,\"month\":6,\"count\":256,\"rate\":4,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2007,\"month\":7,\"count\":243,\"rate\":3.8,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2007,\"month\":8,\"count\":239,\"rate\":3.8,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2007,\"month\":9,\"count\":257,\"rate\":4.2,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2007,\"month\":10,\"count\":182,\"rate\":3,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2007,\"month\":11,\"count\":255,\"rate\":4.1,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2007,\"month\":12,\"count\":235,\"rate\":3.9,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2008,\"month\":1,\"count\":264,\"rate\":4.4,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2008,\"month\":2,\"count\":313,\"rate\":5.1,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2008,\"month\":3,\"count\":283,\"rate\":4.6,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2008,\"month\":4,\"count\":251,\"rate\":4,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2008,\"month\":5,\"count\":275,\"rate\":4.4,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2008,\"month\":6,\"count\":322,\"rate\":5,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2008,\"month\":7,\"count\":352,\"rate\":5.2,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2008,\"month\":8,\"count\":412,\"rate\":6.3,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2008,\"month\":9,\"count\":374,\"rate\":5.8,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2008,\"month\":10,\"count\":334,\"rate\":5.3,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2008,\"month\":11,\"count\":434,\"rate\":7,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2008,\"month\":12,\"count\":367,\"rate\":6.1,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2009,\"month\":1,\"count\":431,\"rate\":7.1,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2009,\"month\":2,\"count\":453,\"rate\":7.3,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2009,\"month\":3,\"count\":377,\"rate\":6,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2009,\"month\":4,\"count\":403,\"rate\":6.4,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2009,\"month\":5,\"count\":476,\"rate\":7.5,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2009,\"month\":6,\"count\":557,\"rate\":8.4,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2009,\"month\":7,\"count\":490,\"rate\":7.4,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2009,\"month\":8,\"count\":528,\"rate\":8.2,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2009,\"month\":9,\"count\":462,\"rate\":7.1,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2009,\"month\":10,\"count\":541,\"rate\":8.5,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2009,\"month\":11,\"count\":491,\"rate\":8,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Other\",\"year\":2009,\"month\":12,\"count\":513,\"rate\":8.2,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2010,\"month\":1,\"count\":609,\"rate\":10,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Other\",\"year\":2010,\"month\":2,\"count\":603,\"rate\":9.9,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2000,\"month\":1,\"count\":154,\"rate\":10.3,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2000,\"month\":2,\"count\":173,\"rate\":11.5,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2000,\"month\":3,\"count\":152,\"rate\":10.4,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2000,\"month\":4,\"count\":135,\"rate\":8.9,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2000,\"month\":5,\"count\":73,\"rate\":5.1,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2000,\"month\":6,\"count\":109,\"rate\":6.7,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2000,\"month\":7,\"count\":77,\"rate\":5,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2000,\"month\":8,\"count\":110,\"rate\":7,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2000,\"month\":9,\"count\":124,\"rate\":8.2,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2000,\"month\":10,\"count\":113,\"rate\":8,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2000,\"month\":11,\"count\":192,\"rate\":13.3,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2000,\"month\":12,\"count\":196,\"rate\":13.9,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2001,\"month\":1,\"count\":188,\"rate\":13.8,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2001,\"month\":2,\"count\":193,\"rate\":15.1,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2001,\"month\":3,\"count\":267,\"rate\":19.2,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2001,\"month\":4,\"count\":140,\"rate\":10.4,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2001,\"month\":5,\"count\":109,\"rate\":7.7,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2001,\"month\":6,\"count\":130,\"rate\":9.7,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2001,\"month\":7,\"count\":113,\"rate\":7.6,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2001,\"month\":8,\"count\":141,\"rate\":9.3,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2001,\"month\":9,\"count\":101,\"rate\":7.2,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2001,\"month\":10,\"count\":118,\"rate\":8.7,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2001,\"month\":11,\"count\":145,\"rate\":11.6,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2001,\"month\":12,\"count\":192,\"rate\":15.1,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2002,\"month\":1,\"count\":195,\"rate\":14.8,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2002,\"month\":2,\"count\":187,\"rate\":14.8,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2002,\"month\":3,\"count\":269,\"rate\":19.6,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2002,\"month\":4,\"count\":151,\"rate\":10.8,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2002,\"month\":5,\"count\":89,\"rate\":6.8,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2002,\"month\":6,\"count\":89,\"rate\":6.3,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2002,\"month\":7,\"count\":114,\"rate\":7.3,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2002,\"month\":8,\"count\":125,\"rate\":9,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2002,\"month\":9,\"count\":92,\"rate\":6.3,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2002,\"month\":10,\"count\":97,\"rate\":6.6,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2002,\"month\":11,\"count\":137,\"rate\":11.1,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2002,\"month\":12,\"count\":120,\"rate\":9.8,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2003,\"month\":1,\"count\":159,\"rate\":13.2,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2003,\"month\":2,\"count\":172,\"rate\":14.7,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2003,\"month\":3,\"count\":161,\"rate\":12.9,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2003,\"month\":4,\"count\":154,\"rate\":12,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2003,\"month\":5,\"count\":133,\"rate\":10.2,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2003,\"month\":6,\"count\":94,\"rate\":6.9,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2003,\"month\":7,\"count\":113,\"rate\":8.2,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2003,\"month\":8,\"count\":173,\"rate\":10.7,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2003,\"month\":9,\"count\":98,\"rate\":6.2,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2003,\"month\":10,\"count\":136,\"rate\":8.5,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2003,\"month\":11,\"count\":148,\"rate\":10.3,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2003,\"month\":12,\"count\":137,\"rate\":10.9,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2004,\"month\":1,\"count\":184,\"rate\":15.1,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2004,\"month\":2,\"count\":168,\"rate\":14.2,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2004,\"month\":3,\"count\":153,\"rate\":12.7,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2004,\"month\":4,\"count\":107,\"rate\":8.3,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2004,\"month\":5,\"count\":99,\"rate\":7.4,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2004,\"month\":6,\"count\":106,\"rate\":7.6,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2004,\"month\":7,\"count\":140,\"rate\":10,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2004,\"month\":8,\"count\":103,\"rate\":7,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2004,\"month\":9,\"count\":88,\"rate\":6.4,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2004,\"month\":10,\"count\":102,\"rate\":7.7,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2004,\"month\":11,\"count\":131,\"rate\":10.5,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2004,\"month\":12,\"count\":165,\"rate\":14,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2005,\"month\":1,\"count\":153,\"rate\":13.2,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2005,\"month\":2,\"count\":107,\"rate\":9.9,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2005,\"month\":3,\"count\":139,\"rate\":11.8,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2005,\"month\":4,\"count\":84,\"rate\":6.9,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2005,\"month\":5,\"count\":66,\"rate\":5.3,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2005,\"month\":6,\"count\":76,\"rate\":5.2,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2005,\"month\":7,\"count\":69,\"rate\":4.7,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2005,\"month\":8,\"count\":100,\"rate\":7.1,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2005,\"month\":9,\"count\":127,\"rate\":9.5,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2005,\"month\":10,\"count\":85,\"rate\":6.7,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2005,\"month\":11,\"count\":118,\"rate\":9.6,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2005,\"month\":12,\"count\":127,\"rate\":11.1,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2006,\"month\":1,\"count\":140,\"rate\":11.5,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2006,\"month\":2,\"count\":139,\"rate\":11.8,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2006,\"month\":3,\"count\":117,\"rate\":9.8,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2006,\"month\":4,\"count\":81,\"rate\":6.2,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2006,\"month\":5,\"count\":79,\"rate\":6,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2006,\"month\":6,\"count\":35,\"rate\":2.4,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2006,\"month\":7,\"count\":55,\"rate\":3.6,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2006,\"month\":8,\"count\":76,\"rate\":5.3,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2006,\"month\":9,\"count\":78,\"rate\":5.9,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2006,\"month\":10,\"count\":77,\"rate\":5.8,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2006,\"month\":11,\"count\":125,\"rate\":9.6,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2006,\"month\":12,\"count\":139,\"rate\":10.4,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2007,\"month\":1,\"count\":128,\"rate\":10,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2007,\"month\":2,\"count\":127,\"rate\":9.6,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2007,\"month\":3,\"count\":123,\"rate\":9.7,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2007,\"month\":4,\"count\":67,\"rate\":5.7,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2007,\"month\":5,\"count\":64,\"rate\":5.1,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2007,\"month\":6,\"count\":59,\"rate\":4.5,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2007,\"month\":7,\"count\":40,\"rate\":3.1,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2007,\"month\":8,\"count\":54,\"rate\":4.7,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2007,\"month\":9,\"count\":53,\"rate\":4.3,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2007,\"month\":10,\"count\":47,\"rate\":4,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2007,\"month\":11,\"count\":80,\"rate\":6.6,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2007,\"month\":12,\"count\":96,\"rate\":7.5,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2008,\"month\":1,\"count\":113,\"rate\":9.5,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2008,\"month\":2,\"count\":135,\"rate\":10.9,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2008,\"month\":3,\"count\":175,\"rate\":13.2,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2008,\"month\":4,\"count\":108,\"rate\":8.6,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2008,\"month\":5,\"count\":94,\"rate\":7.4,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2008,\"month\":6,\"count\":86,\"rate\":6.1,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2008,\"month\":7,\"count\":125,\"rate\":8.5,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2008,\"month\":8,\"count\":111,\"rate\":7.6,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2008,\"month\":9,\"count\":84,\"rate\":5.8,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2008,\"month\":10,\"count\":97,\"rate\":7.1,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2008,\"month\":11,\"count\":119,\"rate\":9.5,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2008,\"month\":12,\"count\":229,\"rate\":17,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2009,\"month\":1,\"count\":245,\"rate\":18.7,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2009,\"month\":2,\"count\":251,\"rate\":18.8,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2009,\"month\":3,\"count\":241,\"rate\":19,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2009,\"month\":4,\"count\":176,\"rate\":13.5,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2009,\"month\":5,\"count\":136,\"rate\":10,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2009,\"month\":6,\"count\":182,\"rate\":12.3,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2009,\"month\":7,\"count\":180,\"rate\":12.1,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2009,\"month\":8,\"count\":195,\"rate\":13.1,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2009,\"month\":9,\"count\":150,\"rate\":11.1,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2009,\"month\":10,\"count\":166,\"rate\":11.8,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2009,\"month\":11,\"count\":180,\"rate\":12.6,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2009,\"month\":12,\"count\":292,\"rate\":19.7,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2010,\"month\":1,\"count\":318,\"rate\":21.3,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Agriculture\",\"year\":2010,\"month\":2,\"count\":285,\"rate\":18.8,\"date\":\"2010-02-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2000,\"month\":1,\"count\":239,\"rate\":2.3,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2000,\"month\":2,\"count\":262,\"rate\":2.5,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2000,\"month\":3,\"count\":213,\"rate\":2,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2000,\"month\":4,\"count\":218,\"rate\":2,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2000,\"month\":5,\"count\":206,\"rate\":1.9,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2000,\"month\":6,\"count\":188,\"rate\":1.8,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2000,\"month\":7,\"count\":222,\"rate\":2.1,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2000,\"month\":8,\"count\":186,\"rate\":1.7,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2000,\"month\":9,\"count\":213,\"rate\":2,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2000,\"month\":10,\"count\":226,\"rate\":2.2,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2000,\"month\":11,\"count\":273,\"rate\":2.7,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2000,\"month\":12,\"count\":178,\"rate\":1.8,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2001,\"month\":1,\"count\":194,\"rate\":1.9,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2001,\"month\":2,\"count\":209,\"rate\":2,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2001,\"month\":3,\"count\":181,\"rate\":1.7,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2001,\"month\":4,\"count\":216,\"rate\":2.1,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2001,\"month\":5,\"count\":206,\"rate\":2,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2001,\"month\":6,\"count\":187,\"rate\":1.7,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2001,\"month\":7,\"count\":191,\"rate\":1.8,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2001,\"month\":8,\"count\":243,\"rate\":2.3,\"date\":\"2001-08-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2001,\"month\":9,\"count\":256,\"rate\":2.4,\"date\":\"2001-09-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2001,\"month\":10,\"count\":247,\"rate\":2.3,\"date\":\"2001-10-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2001,\"month\":11,\"count\":234,\"rate\":2.3,\"date\":\"2001-11-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2001,\"month\":12,\"count\":249,\"rate\":2.5,\"date\":\"2001-12-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2002,\"month\":1,\"count\":263,\"rate\":2.7,\"date\":\"2002-01-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2002,\"month\":2,\"count\":250,\"rate\":2.6,\"date\":\"2002-02-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2002,\"month\":3,\"count\":217,\"rate\":2.2,\"date\":\"2002-03-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2002,\"month\":4,\"count\":255,\"rate\":2.5,\"date\":\"2002-04-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2002,\"month\":5,\"count\":264,\"rate\":2.6,\"date\":\"2002-05-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2002,\"month\":6,\"count\":246,\"rate\":2.4,\"date\":\"2002-06-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2002,\"month\":7,\"count\":249,\"rate\":2.4,\"date\":\"2002-07-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2002,\"month\":8,\"count\":271,\"rate\":2.6,\"date\":\"2002-08-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2002,\"month\":9,\"count\":266,\"rate\":2.5,\"date\":\"2002-09-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2002,\"month\":10,\"count\":275,\"rate\":2.6,\"date\":\"2002-10-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2002,\"month\":11,\"count\":297,\"rate\":2.8,\"date\":\"2002-11-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2002,\"month\":12,\"count\":327,\"rate\":3.1,\"date\":\"2002-12-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2003,\"month\":1,\"count\":324,\"rate\":3,\"date\":\"2003-01-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2003,\"month\":2,\"count\":304,\"rate\":3,\"date\":\"2003-02-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2003,\"month\":3,\"count\":279,\"rate\":2.7,\"date\":\"2003-03-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2003,\"month\":4,\"count\":248,\"rate\":2.4,\"date\":\"2003-04-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2003,\"month\":5,\"count\":271,\"rate\":2.6,\"date\":\"2003-05-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2003,\"month\":6,\"count\":295,\"rate\":2.7,\"date\":\"2003-06-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2003,\"month\":7,\"count\":270,\"rate\":2.5,\"date\":\"2003-07-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2003,\"month\":8,\"count\":302,\"rate\":2.7,\"date\":\"2003-08-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2003,\"month\":9,\"count\":287,\"rate\":2.6,\"date\":\"2003-09-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2003,\"month\":10,\"count\":338,\"rate\":3.1,\"date\":\"2003-10-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2003,\"month\":11,\"count\":308,\"rate\":2.8,\"date\":\"2003-11-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2003,\"month\":12,\"count\":299,\"rate\":2.8,\"date\":\"2003-12-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2004,\"month\":1,\"count\":302,\"rate\":2.8,\"date\":\"2004-01-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2004,\"month\":2,\"count\":260,\"rate\":2.5,\"date\":\"2004-02-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2004,\"month\":3,\"count\":260,\"rate\":2.5,\"date\":\"2004-03-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2004,\"month\":4,\"count\":242,\"rate\":2.3,\"date\":\"2004-04-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2004,\"month\":5,\"count\":287,\"rate\":2.7,\"date\":\"2004-05-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2004,\"month\":6,\"count\":306,\"rate\":2.8,\"date\":\"2004-06-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2004,\"month\":7,\"count\":291,\"rate\":2.6,\"date\":\"2004-07-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2004,\"month\":8,\"count\":324,\"rate\":2.9,\"date\":\"2004-08-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2004,\"month\":9,\"count\":362,\"rate\":3.3,\"date\":\"2004-09-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2004,\"month\":10,\"count\":301,\"rate\":2.7,\"date\":\"2004-10-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2004,\"month\":11,\"count\":353,\"rate\":3.2,\"date\":\"2004-11-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2004,\"month\":12,\"count\":341,\"rate\":3.2,\"date\":\"2004-12-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2005,\"month\":1,\"count\":346,\"rate\":3.2,\"date\":\"2005-01-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2005,\"month\":2,\"count\":363,\"rate\":3.4,\"date\":\"2005-02-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2005,\"month\":3,\"count\":312,\"rate\":2.9,\"date\":\"2005-03-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2005,\"month\":4,\"count\":273,\"rate\":2.4,\"date\":\"2005-04-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2005,\"month\":5,\"count\":299,\"rate\":2.7,\"date\":\"2005-05-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2005,\"month\":6,\"count\":268,\"rate\":2.4,\"date\":\"2005-06-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2005,\"month\":7,\"count\":282,\"rate\":2.5,\"date\":\"2005-07-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2005,\"month\":8,\"count\":249,\"rate\":2.3,\"date\":\"2005-08-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2005,\"month\":9,\"count\":282,\"rate\":2.6,\"date\":\"2005-09-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2005,\"month\":10,\"count\":255,\"rate\":2.3,\"date\":\"2005-10-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2005,\"month\":11,\"count\":319,\"rate\":3,\"date\":\"2005-11-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2005,\"month\":12,\"count\":327,\"rate\":3.1,\"date\":\"2005-12-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2006,\"month\":1,\"count\":341,\"rate\":3.2,\"date\":\"2006-01-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2006,\"month\":2,\"count\":332,\"rate\":3.1,\"date\":\"2006-02-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2006,\"month\":3,\"count\":300,\"rate\":2.8,\"date\":\"2006-03-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2006,\"month\":4,\"count\":334,\"rate\":3.1,\"date\":\"2006-04-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2006,\"month\":5,\"count\":251,\"rate\":2.3,\"date\":\"2006-05-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2006,\"month\":6,\"count\":245,\"rate\":2.2,\"date\":\"2006-06-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2006,\"month\":7,\"count\":291,\"rate\":2.6,\"date\":\"2006-07-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2006,\"month\":8,\"count\":306,\"rate\":2.7,\"date\":\"2006-08-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2006,\"month\":9,\"count\":299,\"rate\":2.7,\"date\":\"2006-09-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2006,\"month\":10,\"count\":275,\"rate\":2.5,\"date\":\"2006-10-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2006,\"month\":11,\"count\":257,\"rate\":2.3,\"date\":\"2006-11-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2006,\"month\":12,\"count\":287,\"rate\":2.6,\"date\":\"2006-12-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2007,\"month\":1,\"count\":376,\"rate\":3.5,\"date\":\"2007-01-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2007,\"month\":2,\"count\":300,\"rate\":2.8,\"date\":\"2007-02-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2007,\"month\":3,\"count\":311,\"rate\":2.8,\"date\":\"2007-03-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2007,\"month\":4,\"count\":240,\"rate\":2.2,\"date\":\"2007-04-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2007,\"month\":5,\"count\":276,\"rate\":2.5,\"date\":\"2007-05-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2007,\"month\":6,\"count\":258,\"rate\":2.3,\"date\":\"2007-06-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2007,\"month\":7,\"count\":324,\"rate\":2.9,\"date\":\"2007-07-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2007,\"month\":8,\"count\":315,\"rate\":2.9,\"date\":\"2007-08-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2007,\"month\":9,\"count\":304,\"rate\":2.8,\"date\":\"2007-09-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2007,\"month\":10,\"count\":338,\"rate\":3.1,\"date\":\"2007-10-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2007,\"month\":11,\"count\":336,\"rate\":3.2,\"date\":\"2007-11-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2007,\"month\":12,\"count\":326,\"rate\":3.2,\"date\":\"2007-12-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2008,\"month\":1,\"count\":338,\"rate\":3.3,\"date\":\"2008-01-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2008,\"month\":2,\"count\":340,\"rate\":3.2,\"date\":\"2008-02-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2008,\"month\":3,\"count\":346,\"rate\":3.3,\"date\":\"2008-03-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2008,\"month\":4,\"count\":338,\"rate\":3.2,\"date\":\"2008-04-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2008,\"month\":5,\"count\":366,\"rate\":3.4,\"date\":\"2008-05-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2008,\"month\":6,\"count\":364,\"rate\":3.3,\"date\":\"2008-06-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2008,\"month\":7,\"count\":345,\"rate\":3.1,\"date\":\"2008-07-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2008,\"month\":8,\"count\":378,\"rate\":3.5,\"date\":\"2008-08-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2008,\"month\":9,\"count\":414,\"rate\":3.9,\"date\":\"2008-09-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2008,\"month\":10,\"count\":396,\"rate\":3.9,\"date\":\"2008-10-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2008,\"month\":11,\"count\":411,\"rate\":4.1,\"date\":\"2008-11-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2008,\"month\":12,\"count\":559,\"rate\":5.5,\"date\":\"2008-12-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2009,\"month\":1,\"count\":659,\"rate\":6.5,\"date\":\"2009-01-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2009,\"month\":2,\"count\":586,\"rate\":5.7,\"date\":\"2009-02-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2009,\"month\":3,\"count\":625,\"rate\":5.9,\"date\":\"2009-03-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2009,\"month\":4,\"count\":488,\"rate\":4.6,\"date\":\"2009-04-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2009,\"month\":5,\"count\":530,\"rate\":5,\"date\":\"2009-05-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2009,\"month\":6,\"count\":472,\"rate\":4.4,\"date\":\"2009-06-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2009,\"month\":7,\"count\":552,\"rate\":5.2,\"date\":\"2009-07-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2009,\"month\":8,\"count\":569,\"rate\":5.3,\"date\":\"2009-08-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2009,\"month\":9,\"count\":636,\"rate\":5.9,\"date\":\"2009-09-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2009,\"month\":10,\"count\":610,\"rate\":5.9,\"date\":\"2009-10-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2009,\"month\":11,\"count\":592,\"rate\":5.7,\"date\":\"2009-11-01T07:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2009,\"month\":12,\"count\":609,\"rate\":5.9,\"date\":\"2009-12-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2010,\"month\":1,\"count\":730,\"rate\":7.2,\"date\":\"2010-01-01T08:00:00.000Z\"},{\"series\":\"Self-employed\",\"year\":2010,\"month\":2,\"count\":680,\"rate\":6.5,\"date\":\"2010-02-01T08:00:00.000Z\"}],\"anchored\":true,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-544555\",\"displayId\":\"unemp-rate-ind\",\"names\":[\"date\",\"series\",\"rate\"],\"rows\":[{\"date\":\"2000-01-01\",\"series\":\"Government\",\"rate\":2.1},{\"date\":\"2000-02-01\",\"series\":\"Government\",\"rate\":2},{\"date\":\"2000-03-01\",\"series\":\"Government\",\"rate\":1.5},{\"date\":\"2000-04-01\",\"series\":\"Government\",\"rate\":1.3},{\"date\":\"2000-05-01\",\"series\":\"Government\",\"rate\":1.9},{\"date\":\"2000-06-01\",\"series\":\"Government\",\"rate\":3.1},{\"date\":\"2000-07-01\",\"series\":\"Government\",\"rate\":2.9},{\"date\":\"2000-08-01\",\"series\":\"Government\",\"rate\":3.1},{\"date\":\"2000-09-01\",\"series\":\"Government\",\"rate\":2.1},{\"date\":\"2000-10-01\",\"series\":\"Government\",\"rate\":2},{\"date\":\"2000-11-01\",\"series\":\"Government\",\"rate\":1.9},{\"date\":\"2000-12-01\",\"series\":\"Government\",\"rate\":1.8},{\"date\":\"2001-01-01\",\"series\":\"Government\",\"rate\":2.3},{\"date\":\"2001-02-01\",\"series\":\"Government\",\"rate\":1.5},{\"date\":\"2001-03-01\",\"series\":\"Government\",\"rate\":1.8},{\"date\":\"2001-04-01\",\"series\":\"Government\",\"rate\":1.9},{\"date\":\"2001-05-01\",\"series\":\"Government\",\"rate\":1.8},{\"date\":\"2001-06-01\",\"series\":\"Government\",\"rate\":2.7},{\"date\":\"2001-07-01\",\"series\":\"Government\",\"rate\":2.8},{\"date\":\"2001-08-01\",\"series\":\"Government\",\"rate\":2.8},{\"date\":\"2001-09-01\",\"series\":\"Government\",\"rate\":2.2},{\"date\":\"2001-10-01\",\"series\":\"Government\",\"rate\":2.2},{\"date\":\"2001-11-01\",\"series\":\"Government\",\"rate\":2.1},{\"date\":\"2001-12-01\",\"series\":\"Government\",\"rate\":2.1},{\"date\":\"2002-01-01\",\"series\":\"Government\",\"rate\":2.4},{\"date\":\"2002-02-01\",\"series\":\"Government\",\"rate\":2.5},{\"date\":\"2002-03-01\",\"series\":\"Government\",\"rate\":2.4},{\"date\":\"2002-04-01\",\"series\":\"Government\",\"rate\":2.2},{\"date\":\"2002-05-01\",\"series\":\"Government\",\"rate\":2.3},{\"date\":\"2002-06-01\",\"series\":\"Government\",\"rate\":2.8},{\"date\":\"2002-07-01\",\"series\":\"Government\",\"rate\":3.2},{\"date\":\"2002-08-01\",\"series\":\"Government\",\"rate\":3},{\"date\":\"2002-09-01\",\"series\":\"Government\",\"rate\":2.6},{\"date\":\"2002-10-01\",\"series\":\"Government\",\"rate\":2.5},{\"date\":\"2002-11-01\",\"series\":\"Government\",\"rate\":2.3},{\"date\":\"2002-12-01\",\"series\":\"Government\",\"rate\":2.2},{\"date\":\"2003-01-01\",\"series\":\"Government\",\"rate\":2.8},{\"date\":\"2003-02-01\",\"series\":\"Government\",\"rate\":2.4},{\"date\":\"2003-03-01\",\"series\":\"Government\",\"rate\":2.6},{\"date\":\"2003-04-01\",\"series\":\"Government\",\"rate\":2.2},{\"date\":\"2003-05-01\",\"series\":\"Government\",\"rate\":2.4},{\"date\":\"2003-06-01\",\"series\":\"Government\",\"rate\":3.5},{\"date\":\"2003-07-01\",\"series\":\"Government\",\"rate\":3.8},{\"date\":\"2003-08-01\",\"series\":\"Government\",\"rate\":3.7},{\"date\":\"2003-09-01\",\"series\":\"Government\",\"rate\":2.7},{\"date\":\"2003-10-01\",\"series\":\"Government\",\"rate\":2.4},{\"date\":\"2003-11-01\",\"series\":\"Government\",\"rate\":2.7},{\"date\":\"2003-12-01\",\"series\":\"Government\",\"rate\":2.5},{\"date\":\"2004-01-01\",\"series\":\"Government\",\"rate\":2.5},{\"date\":\"2004-02-01\",\"series\":\"Government\",\"rate\":2.4},{\"date\":\"2004-03-01\",\"series\":\"Government\",\"rate\":2.6},{\"date\":\"2004-04-01\",\"series\":\"Government\",\"rate\":2.1},{\"date\":\"2004-05-01\",\"series\":\"Government\",\"rate\":2.3},{\"date\":\"2004-06-01\",\"series\":\"Government\",\"rate\":2.8},{\"date\":\"2004-07-01\",\"series\":\"Government\",\"rate\":3.7},{\"date\":\"2004-08-01\",\"series\":\"Government\",\"rate\":3.3},{\"date\":\"2004-09-01\",\"series\":\"Government\",\"rate\":2.7},{\"date\":\"2004-10-01\",\"series\":\"Government\",\"rate\":2.7},{\"date\":\"2004-11-01\",\"series\":\"Government\",\"rate\":2.4},{\"date\":\"2004-12-01\",\"series\":\"Government\",\"rate\":2.4},{\"date\":\"2005-01-01\",\"series\":\"Government\",\"rate\":2.6},{\"date\":\"2005-02-01\",\"series\":\"Government\",\"rate\":2.3},{\"date\":\"2005-03-01\",\"series\":\"Government\",\"rate\":2.2},{\"date\":\"2005-04-01\",\"series\":\"Government\",\"rate\":2.3},{\"date\":\"2005-05-01\",\"series\":\"Government\",\"rate\":2.1},{\"date\":\"2005-06-01\",\"series\":\"Government\",\"rate\":3.2},{\"date\":\"2005-07-01\",\"series\":\"Government\",\"rate\":3.3},{\"date\":\"2005-08-01\",\"series\":\"Government\",\"rate\":3.2},{\"date\":\"2005-09-01\",\"series\":\"Government\",\"rate\":2.7},{\"date\":\"2005-10-01\",\"series\":\"Government\",\"rate\":2.4},{\"date\":\"2005-11-01\",\"series\":\"Government\",\"rate\":2.4},{\"date\":\"2005-12-01\",\"series\":\"Government\",\"rate\":1.9},{\"date\":\"2006-01-01\",\"series\":\"Government\",\"rate\":2.2},{\"date\":\"2006-02-01\",\"series\":\"Government\",\"rate\":2.3},{\"date\":\"2006-03-01\",\"series\":\"Government\",\"rate\":2.2},{\"date\":\"2006-04-01\",\"series\":\"Government\",\"rate\":2},{\"date\":\"2006-05-01\",\"series\":\"Government\",\"rate\":2.1},{\"date\":\"2006-06-01\",\"series\":\"Government\",\"rate\":2.8},{\"date\":\"2006-07-01\",\"series\":\"Government\",\"rate\":3.2},{\"date\":\"2006-08-01\",\"series\":\"Government\",\"rate\":2.9},{\"date\":\"2006-09-01\",\"series\":\"Government\",\"rate\":1.9},{\"date\":\"2006-10-01\",\"series\":\"Government\",\"rate\":2},{\"date\":\"2006-11-01\",\"series\":\"Government\",\"rate\":1.9},{\"date\":\"2006-12-01\",\"series\":\"Government\",\"rate\":1.9},{\"date\":\"2007-01-01\",\"series\":\"Government\",\"rate\":2.2},{\"date\":\"2007-02-01\",\"series\":\"Government\",\"rate\":1.9},{\"date\":\"2007-03-01\",\"series\":\"Government\",\"rate\":1.9},{\"date\":\"2007-04-01\",\"series\":\"Government\",\"rate\":1.9},{\"date\":\"2007-05-01\",\"series\":\"Government\",\"rate\":1.9},{\"date\":\"2007-06-01\",\"series\":\"Government\",\"rate\":2.7},{\"date\":\"2007-07-01\",\"series\":\"Government\",\"rate\":3.3},{\"date\":\"2007-08-01\",\"series\":\"Government\",\"rate\":3.2},{\"date\":\"2007-09-01\",\"series\":\"Government\",\"rate\":2.4},{\"date\":\"2007-10-01\",\"series\":\"Government\",\"rate\":2.3},{\"date\":\"2007-11-01\",\"series\":\"Government\",\"rate\":2.2},{\"date\":\"2007-12-01\",\"series\":\"Government\",\"rate\":2.1},{\"date\":\"2008-01-01\",\"series\":\"Government\",\"rate\":2.2},{\"date\":\"2008-02-01\",\"series\":\"Government\",\"rate\":1.7},{\"date\":\"2008-03-01\",\"series\":\"Government\",\"rate\":1.9},{\"date\":\"2008-04-01\",\"series\":\"Government\",\"rate\":1.7},{\"date\":\"2008-05-01\",\"series\":\"Government\",\"rate\":2.1},{\"date\":\"2008-06-01\",\"series\":\"Government\",\"rate\":3},{\"date\":\"2008-07-01\",\"series\":\"Government\",\"rate\":3.6},{\"date\":\"2008-08-01\",\"series\":\"Government\",\"rate\":3.3},{\"date\":\"2008-09-01\",\"series\":\"Government\",\"rate\":2.6},{\"date\":\"2008-10-01\",\"series\":\"Government\",\"rate\":2.5},{\"date\":\"2008-11-01\",\"series\":\"Government\",\"rate\":2.4},{\"date\":\"2008-12-01\",\"series\":\"Government\",\"rate\":2.3},{\"date\":\"2009-01-01\",\"series\":\"Government\",\"rate\":3},{\"date\":\"2009-02-01\",\"series\":\"Government\",\"rate\":2.6},{\"date\":\"2009-03-01\",\"series\":\"Government\",\"rate\":2.8},{\"date\":\"2009-04-01\",\"series\":\"Government\",\"rate\":2.6},{\"date\":\"2009-05-01\",\"series\":\"Government\",\"rate\":3.1},{\"date\":\"2009-06-01\",\"series\":\"Government\",\"rate\":4.4},{\"date\":\"2009-07-01\",\"series\":\"Government\",\"rate\":5.1},{\"date\":\"2009-08-01\",\"series\":\"Government\",\"rate\":5.1},{\"date\":\"2009-09-01\",\"series\":\"Government\",\"rate\":4.2},{\"date\":\"2009-10-01\",\"series\":\"Government\",\"rate\":3.5},{\"date\":\"2009-11-01\",\"series\":\"Government\",\"rate\":3.4},{\"date\":\"2009-12-01\",\"series\":\"Government\",\"rate\":3.6},{\"date\":\"2010-01-01\",\"series\":\"Government\",\"rate\":4.3},{\"date\":\"2010-02-01\",\"series\":\"Government\",\"rate\":4},{\"date\":\"2000-01-01\",\"series\":\"Mining and Extraction\",\"rate\":3.9},{\"date\":\"2000-02-01\",\"series\":\"Mining and Extraction\",\"rate\":5.5},{\"date\":\"2000-03-01\",\"series\":\"Mining and Extraction\",\"rate\":3.7},{\"date\":\"2000-04-01\",\"series\":\"Mining and Extraction\",\"rate\":4.1},{\"date\":\"2000-05-01\",\"series\":\"Mining and Extraction\",\"rate\":5.3},{\"date\":\"2000-06-01\",\"series\":\"Mining and Extraction\",\"rate\":2.6},{\"date\":\"2000-07-01\",\"series\":\"Mining and Extraction\",\"rate\":3.6},{\"date\":\"2000-08-01\",\"series\":\"Mining and Extraction\",\"rate\":5.1},{\"date\":\"2000-09-01\",\"series\":\"Mining and Extraction\",\"rate\":5.8},{\"date\":\"2000-10-01\",\"series\":\"Mining and Extraction\",\"rate\":7.8},{\"date\":\"2000-11-01\",\"series\":\"Mining and Extraction\",\"rate\":2},{\"date\":\"2000-12-01\",\"series\":\"Mining and Extraction\",\"rate\":3.8},{\"date\":\"2001-01-01\",\"series\":\"Mining and Extraction\",\"rate\":2.3},{\"date\":\"2001-02-01\",\"series\":\"Mining and Extraction\",\"rate\":5.3},{\"date\":\"2001-03-01\",\"series\":\"Mining and Extraction\",\"rate\":3},{\"date\":\"2001-04-01\",\"series\":\"Mining and Extraction\",\"rate\":4.7},{\"date\":\"2001-05-01\",\"series\":\"Mining and Extraction\",\"rate\":5.9},{\"date\":\"2001-06-01\",\"series\":\"Mining and Extraction\",\"rate\":4.7},{\"date\":\"2001-07-01\",\"series\":\"Mining and Extraction\",\"rate\":3.1},{\"date\":\"2001-08-01\",\"series\":\"Mining and Extraction\",\"rate\":3.3},{\"date\":\"2001-09-01\",\"series\":\"Mining and Extraction\",\"rate\":4.2},{\"date\":\"2001-10-01\",\"series\":\"Mining and Extraction\",\"rate\":5.4},{\"date\":\"2001-11-01\",\"series\":\"Mining and Extraction\",\"rate\":3.6},{\"date\":\"2001-12-01\",\"series\":\"Mining and Extraction\",\"rate\":5.3},{\"date\":\"2002-01-01\",\"series\":\"Mining and Extraction\",\"rate\":7},{\"date\":\"2002-02-01\",\"series\":\"Mining and Extraction\",\"rate\":7.5},{\"date\":\"2002-03-01\",\"series\":\"Mining and Extraction\",\"rate\":5.3},{\"date\":\"2002-04-01\",\"series\":\"Mining and Extraction\",\"rate\":6.1},{\"date\":\"2002-05-01\",\"series\":\"Mining and Extraction\",\"rate\":4.9},{\"date\":\"2002-06-01\",\"series\":\"Mining and Extraction\",\"rate\":7.1},{\"date\":\"2002-07-01\",\"series\":\"Mining and Extraction\",\"rate\":3.9},{\"date\":\"2002-08-01\",\"series\":\"Mining and Extraction\",\"rate\":6.3},{\"date\":\"2002-09-01\",\"series\":\"Mining and Extraction\",\"rate\":7.9},{\"date\":\"2002-10-01\",\"series\":\"Mining and Extraction\",\"rate\":6.4},{\"date\":\"2002-11-01\",\"series\":\"Mining and Extraction\",\"rate\":5.4},{\"date\":\"2002-12-01\",\"series\":\"Mining and Extraction\",\"rate\":7.8},{\"date\":\"2003-01-01\",\"series\":\"Mining and Extraction\",\"rate\":9},{\"date\":\"2003-02-01\",\"series\":\"Mining and Extraction\",\"rate\":7.1},{\"date\":\"2003-03-01\",\"series\":\"Mining and Extraction\",\"rate\":8.2},{\"date\":\"2003-04-01\",\"series\":\"Mining and Extraction\",\"rate\":7.7},{\"date\":\"2003-05-01\",\"series\":\"Mining and Extraction\",\"rate\":7.5},{\"date\":\"2003-06-01\",\"series\":\"Mining and Extraction\",\"rate\":6.8},{\"date\":\"2003-07-01\",\"series\":\"Mining and Extraction\",\"rate\":7.9},{\"date\":\"2003-08-01\",\"series\":\"Mining and Extraction\",\"rate\":3.8},{\"date\":\"2003-09-01\",\"series\":\"Mining and Extraction\",\"rate\":4.6},{\"date\":\"2003-10-01\",\"series\":\"Mining and Extraction\",\"rate\":5.6},{\"date\":\"2003-11-01\",\"series\":\"Mining and Extraction\",\"rate\":5.9},{\"date\":\"2003-12-01\",\"series\":\"Mining and Extraction\",\"rate\":5.6},{\"date\":\"2004-01-01\",\"series\":\"Mining and Extraction\",\"rate\":5.8},{\"date\":\"2004-02-01\",\"series\":\"Mining and Extraction\",\"rate\":5},{\"date\":\"2004-03-01\",\"series\":\"Mining and Extraction\",\"rate\":4.4},{\"date\":\"2004-04-01\",\"series\":\"Mining and Extraction\",\"rate\":6.4},{\"date\":\"2004-05-01\",\"series\":\"Mining and Extraction\",\"rate\":4.3},{\"date\":\"2004-06-01\",\"series\":\"Mining and Extraction\",\"rate\":5},{\"date\":\"2004-07-01\",\"series\":\"Mining and Extraction\",\"rate\":5.4},{\"date\":\"2004-08-01\",\"series\":\"Mining and Extraction\",\"rate\":1.9},{\"date\":\"2004-09-01\",\"series\":\"Mining and Extraction\",\"rate\":1.5},{\"date\":\"2004-10-01\",\"series\":\"Mining and Extraction\",\"rate\":2.6},{\"date\":\"2004-11-01\",\"series\":\"Mining and Extraction\",\"rate\":3.3},{\"date\":\"2004-12-01\",\"series\":\"Mining and Extraction\",\"rate\":2.5},{\"date\":\"2005-01-01\",\"series\":\"Mining and Extraction\",\"rate\":4.9},{\"date\":\"2005-02-01\",\"series\":\"Mining and Extraction\",\"rate\":4},{\"date\":\"2005-03-01\",\"series\":\"Mining and Extraction\",\"rate\":5.2},{\"date\":\"2005-04-01\",\"series\":\"Mining and Extraction\",\"rate\":2.9},{\"date\":\"2005-05-01\",\"series\":\"Mining and Extraction\",\"rate\":2.4},{\"date\":\"2005-06-01\",\"series\":\"Mining and Extraction\",\"rate\":4},{\"date\":\"2005-07-01\",\"series\":\"Mining and Extraction\",\"rate\":3.7},{\"date\":\"2005-08-01\",\"series\":\"Mining and Extraction\",\"rate\":2},{\"date\":\"2005-09-01\",\"series\":\"Mining and Extraction\",\"rate\":2},{\"date\":\"2005-10-01\",\"series\":\"Mining and Extraction\",\"rate\":0.3},{\"date\":\"2005-11-01\",\"series\":\"Mining and Extraction\",\"rate\":2.9},{\"date\":\"2005-12-01\",\"series\":\"Mining and Extraction\",\"rate\":3.5},{\"date\":\"2006-01-01\",\"series\":\"Mining and Extraction\",\"rate\":3.9},{\"date\":\"2006-02-01\",\"series\":\"Mining and Extraction\",\"rate\":3.8},{\"date\":\"2006-03-01\",\"series\":\"Mining and Extraction\",\"rate\":2.1},{\"date\":\"2006-04-01\",\"series\":\"Mining and Extraction\",\"rate\":2.5},{\"date\":\"2006-05-01\",\"series\":\"Mining and Extraction\",\"rate\":2.8},{\"date\":\"2006-06-01\",\"series\":\"Mining and Extraction\",\"rate\":4.3},{\"date\":\"2006-07-01\",\"series\":\"Mining and Extraction\",\"rate\":3.5},{\"date\":\"2006-08-01\",\"series\":\"Mining and Extraction\",\"rate\":4.3},{\"date\":\"2006-09-01\",\"series\":\"Mining and Extraction\",\"rate\":2.1},{\"date\":\"2006-10-01\",\"series\":\"Mining and Extraction\",\"rate\":2.2},{\"date\":\"2006-11-01\",\"series\":\"Mining and Extraction\",\"rate\":2.9},{\"date\":\"2006-12-01\",\"series\":\"Mining and Extraction\",\"rate\":3.4},{\"date\":\"2007-01-01\",\"series\":\"Mining and Extraction\",\"rate\":4.7},{\"date\":\"2007-02-01\",\"series\":\"Mining and Extraction\",\"rate\":4.5},{\"date\":\"2007-03-01\",\"series\":\"Mining and Extraction\",\"rate\":3.2},{\"date\":\"2007-04-01\",\"series\":\"Mining and Extraction\",\"rate\":2.3},{\"date\":\"2007-05-01\",\"series\":\"Mining and Extraction\",\"rate\":3},{\"date\":\"2007-06-01\",\"series\":\"Mining and Extraction\",\"rate\":4.3},{\"date\":\"2007-07-01\",\"series\":\"Mining and Extraction\",\"rate\":4.3},{\"date\":\"2007-08-01\",\"series\":\"Mining and Extraction\",\"rate\":4.6},{\"date\":\"2007-09-01\",\"series\":\"Mining and Extraction\",\"rate\":3.2},{\"date\":\"2007-10-01\",\"series\":\"Mining and Extraction\",\"rate\":1.3},{\"date\":\"2007-11-01\",\"series\":\"Mining and Extraction\",\"rate\":2.3},{\"date\":\"2007-12-01\",\"series\":\"Mining and Extraction\",\"rate\":3.4},{\"date\":\"2008-01-01\",\"series\":\"Mining and Extraction\",\"rate\":4},{\"date\":\"2008-02-01\",\"series\":\"Mining and Extraction\",\"rate\":2.2},{\"date\":\"2008-03-01\",\"series\":\"Mining and Extraction\",\"rate\":3.7},{\"date\":\"2008-04-01\",\"series\":\"Mining and Extraction\",\"rate\":3.6},{\"date\":\"2008-05-01\",\"series\":\"Mining and Extraction\",\"rate\":3.4},{\"date\":\"2008-06-01\",\"series\":\"Mining and Extraction\",\"rate\":3.3},{\"date\":\"2008-07-01\",\"series\":\"Mining and Extraction\",\"rate\":1.5},{\"date\":\"2008-08-01\",\"series\":\"Mining and Extraction\",\"rate\":1.9},{\"date\":\"2008-09-01\",\"series\":\"Mining and Extraction\",\"rate\":2.8},{\"date\":\"2008-10-01\",\"series\":\"Mining and Extraction\",\"rate\":1.7},{\"date\":\"2008-11-01\",\"series\":\"Mining and Extraction\",\"rate\":3.7},{\"date\":\"2008-12-01\",\"series\":\"Mining and Extraction\",\"rate\":5.2},{\"date\":\"2009-01-01\",\"series\":\"Mining and Extraction\",\"rate\":7},{\"date\":\"2009-02-01\",\"series\":\"Mining and Extraction\",\"rate\":7.6},{\"date\":\"2009-03-01\",\"series\":\"Mining and Extraction\",\"rate\":12.6},{\"date\":\"2009-04-01\",\"series\":\"Mining and Extraction\",\"rate\":16.1},{\"date\":\"2009-05-01\",\"series\":\"Mining and Extraction\",\"rate\":13.3},{\"date\":\"2009-06-01\",\"series\":\"Mining and Extraction\",\"rate\":13.6},{\"date\":\"2009-07-01\",\"series\":\"Mining and Extraction\",\"rate\":12.6},{\"date\":\"2009-08-01\",\"series\":\"Mining and Extraction\",\"rate\":11.8},{\"date\":\"2009-09-01\",\"series\":\"Mining and Extraction\",\"rate\":10.7},{\"date\":\"2009-10-01\",\"series\":\"Mining and Extraction\",\"rate\":10.8},{\"date\":\"2009-11-01\",\"series\":\"Mining and Extraction\",\"rate\":12},{\"date\":\"2009-12-01\",\"series\":\"Mining and Extraction\",\"rate\":11.8},{\"date\":\"2010-01-01\",\"series\":\"Mining and Extraction\",\"rate\":9.1},{\"date\":\"2010-02-01\",\"series\":\"Mining and Extraction\",\"rate\":10.7},{\"date\":\"2000-01-01\",\"series\":\"Construction\",\"rate\":9.7},{\"date\":\"2000-02-01\",\"series\":\"Construction\",\"rate\":10.6},{\"date\":\"2000-03-01\",\"series\":\"Construction\",\"rate\":8.7},{\"date\":\"2000-04-01\",\"series\":\"Construction\",\"rate\":5.8},{\"date\":\"2000-05-01\",\"series\":\"Construction\",\"rate\":5},{\"date\":\"2000-06-01\",\"series\":\"Construction\",\"rate\":4.6},{\"date\":\"2000-07-01\",\"series\":\"Construction\",\"rate\":4.4},{\"date\":\"2000-08-01\",\"series\":\"Construction\",\"rate\":5.1},{\"date\":\"2000-09-01\",\"series\":\"Construction\",\"rate\":4.6},{\"date\":\"2000-10-01\",\"series\":\"Construction\",\"rate\":4.9},{\"date\":\"2000-11-01\",\"series\":\"Construction\",\"rate\":5.7},{\"date\":\"2000-12-01\",\"series\":\"Construction\",\"rate\":6.8},{\"date\":\"2001-01-01\",\"series\":\"Construction\",\"rate\":9.8},{\"date\":\"2001-02-01\",\"series\":\"Construction\",\"rate\":9.9},{\"date\":\"2001-03-01\",\"series\":\"Construction\",\"rate\":8.4},{\"date\":\"2001-04-01\",\"series\":\"Construction\",\"rate\":7.1},{\"date\":\"2001-05-01\",\"series\":\"Construction\",\"rate\":5.6},{\"date\":\"2001-06-01\",\"series\":\"Construction\",\"rate\":5.1},{\"date\":\"2001-07-01\",\"series\":\"Construction\",\"rate\":4.9},{\"date\":\"2001-08-01\",\"series\":\"Construction\",\"rate\":5.8},{\"date\":\"2001-09-01\",\"series\":\"Construction\",\"rate\":5.5},{\"date\":\"2001-10-01\",\"series\":\"Construction\",\"rate\":6.1},{\"date\":\"2001-11-01\",\"series\":\"Construction\",\"rate\":7.6},{\"date\":\"2001-12-01\",\"series\":\"Construction\",\"rate\":9},{\"date\":\"2002-01-01\",\"series\":\"Construction\",\"rate\":13.6},{\"date\":\"2002-02-01\",\"series\":\"Construction\",\"rate\":12.2},{\"date\":\"2002-03-01\",\"series\":\"Construction\",\"rate\":11.8},{\"date\":\"2002-04-01\",\"series\":\"Construction\",\"rate\":10.1},{\"date\":\"2002-05-01\",\"series\":\"Construction\",\"rate\":7.4},{\"date\":\"2002-06-01\",\"series\":\"Construction\",\"rate\":6.9},{\"date\":\"2002-07-01\",\"series\":\"Construction\",\"rate\":6.9},{\"date\":\"2002-08-01\",\"series\":\"Construction\",\"rate\":7.4},{\"date\":\"2002-09-01\",\"series\":\"Construction\",\"rate\":7},{\"date\":\"2002-10-01\",\"series\":\"Construction\",\"rate\":7.7},{\"date\":\"2002-11-01\",\"series\":\"Construction\",\"rate\":8.5},{\"date\":\"2002-12-01\",\"series\":\"Construction\",\"rate\":10.9},{\"date\":\"2003-01-01\",\"series\":\"Construction\",\"rate\":14},{\"date\":\"2003-02-01\",\"series\":\"Construction\",\"rate\":14},{\"date\":\"2003-03-01\",\"series\":\"Construction\",\"rate\":11.8},{\"date\":\"2003-04-01\",\"series\":\"Construction\",\"rate\":9.3},{\"date\":\"2003-05-01\",\"series\":\"Construction\",\"rate\":8.4},{\"date\":\"2003-06-01\",\"series\":\"Construction\",\"rate\":7.9},{\"date\":\"2003-07-01\",\"series\":\"Construction\",\"rate\":7.5},{\"date\":\"2003-08-01\",\"series\":\"Construction\",\"rate\":7.1},{\"date\":\"2003-09-01\",\"series\":\"Construction\",\"rate\":7.6},{\"date\":\"2003-10-01\",\"series\":\"Construction\",\"rate\":7.4},{\"date\":\"2003-11-01\",\"series\":\"Construction\",\"rate\":7.8},{\"date\":\"2003-12-01\",\"series\":\"Construction\",\"rate\":9.3},{\"date\":\"2004-01-01\",\"series\":\"Construction\",\"rate\":11.3},{\"date\":\"2004-02-01\",\"series\":\"Construction\",\"rate\":11.6},{\"date\":\"2004-03-01\",\"series\":\"Construction\",\"rate\":11.3},{\"date\":\"2004-04-01\",\"series\":\"Construction\",\"rate\":9.5},{\"date\":\"2004-05-01\",\"series\":\"Construction\",\"rate\":7.4},{\"date\":\"2004-06-01\",\"series\":\"Construction\",\"rate\":7},{\"date\":\"2004-07-01\",\"series\":\"Construction\",\"rate\":6.4},{\"date\":\"2004-08-01\",\"series\":\"Construction\",\"rate\":6},{\"date\":\"2004-09-01\",\"series\":\"Construction\",\"rate\":6.8},{\"date\":\"2004-10-01\",\"series\":\"Construction\",\"rate\":6.9},{\"date\":\"2004-11-01\",\"series\":\"Construction\",\"rate\":7.4},{\"date\":\"2004-12-01\",\"series\":\"Construction\",\"rate\":9.5},{\"date\":\"2005-01-01\",\"series\":\"Construction\",\"rate\":11.8},{\"date\":\"2005-02-01\",\"series\":\"Construction\",\"rate\":12.3},{\"date\":\"2005-03-01\",\"series\":\"Construction\",\"rate\":10.3},{\"date\":\"2005-04-01\",\"series\":\"Construction\",\"rate\":7.4},{\"date\":\"2005-05-01\",\"series\":\"Construction\",\"rate\":6.1},{\"date\":\"2005-06-01\",\"series\":\"Construction\",\"rate\":5.7},{\"date\":\"2005-07-01\",\"series\":\"Construction\",\"rate\":5.2},{\"date\":\"2005-08-01\",\"series\":\"Construction\",\"rate\":5.7},{\"date\":\"2005-09-01\",\"series\":\"Construction\",\"rate\":5.7},{\"date\":\"2005-10-01\",\"series\":\"Construction\",\"rate\":5.3},{\"date\":\"2005-11-01\",\"series\":\"Construction\",\"rate\":5.7},{\"date\":\"2005-12-01\",\"series\":\"Construction\",\"rate\":8.2},{\"date\":\"2006-01-01\",\"series\":\"Construction\",\"rate\":9},{\"date\":\"2006-02-01\",\"series\":\"Construction\",\"rate\":8.6},{\"date\":\"2006-03-01\",\"series\":\"Construction\",\"rate\":8.5},{\"date\":\"2006-04-01\",\"series\":\"Construction\",\"rate\":6.9},{\"date\":\"2006-05-01\",\"series\":\"Construction\",\"rate\":6.6},{\"date\":\"2006-06-01\",\"series\":\"Construction\",\"rate\":5.6},{\"date\":\"2006-07-01\",\"series\":\"Construction\",\"rate\":6.1},{\"date\":\"2006-08-01\",\"series\":\"Construction\",\"rate\":5.9},{\"date\":\"2006-09-01\",\"series\":\"Construction\",\"rate\":5.6},{\"date\":\"2006-10-01\",\"series\":\"Construction\",\"rate\":4.5},{\"date\":\"2006-11-01\",\"series\":\"Construction\",\"rate\":6},{\"date\":\"2006-12-01\",\"series\":\"Construction\",\"rate\":6.9},{\"date\":\"2007-01-01\",\"series\":\"Construction\",\"rate\":8.9},{\"date\":\"2007-02-01\",\"series\":\"Construction\",\"rate\":10.5},{\"date\":\"2007-03-01\",\"series\":\"Construction\",\"rate\":9},{\"date\":\"2007-04-01\",\"series\":\"Construction\",\"rate\":8.6},{\"date\":\"2007-05-01\",\"series\":\"Construction\",\"rate\":6.9},{\"date\":\"2007-06-01\",\"series\":\"Construction\",\"rate\":5.9},{\"date\":\"2007-07-01\",\"series\":\"Construction\",\"rate\":5.9},{\"date\":\"2007-08-01\",\"series\":\"Construction\",\"rate\":5.3},{\"date\":\"2007-09-01\",\"series\":\"Construction\",\"rate\":5.8},{\"date\":\"2007-10-01\",\"series\":\"Construction\",\"rate\":6.1},{\"date\":\"2007-11-01\",\"series\":\"Construction\",\"rate\":6.2},{\"date\":\"2007-12-01\",\"series\":\"Construction\",\"rate\":9.4},{\"date\":\"2008-01-01\",\"series\":\"Construction\",\"rate\":11},{\"date\":\"2008-02-01\",\"series\":\"Construction\",\"rate\":11.4},{\"date\":\"2008-03-01\",\"series\":\"Construction\",\"rate\":12},{\"date\":\"2008-04-01\",\"series\":\"Construction\",\"rate\":11.1},{\"date\":\"2008-05-01\",\"series\":\"Construction\",\"rate\":8.6},{\"date\":\"2008-06-01\",\"series\":\"Construction\",\"rate\":8.2},{\"date\":\"2008-07-01\",\"series\":\"Construction\",\"rate\":8},{\"date\":\"2008-08-01\",\"series\":\"Construction\",\"rate\":8.2},{\"date\":\"2008-09-01\",\"series\":\"Construction\",\"rate\":9.9},{\"date\":\"2008-10-01\",\"series\":\"Construction\",\"rate\":10.8},{\"date\":\"2008-11-01\",\"series\":\"Construction\",\"rate\":12.7},{\"date\":\"2008-12-01\",\"series\":\"Construction\",\"rate\":15.3},{\"date\":\"2009-01-01\",\"series\":\"Construction\",\"rate\":18.2},{\"date\":\"2009-02-01\",\"series\":\"Construction\",\"rate\":21.4},{\"date\":\"2009-03-01\",\"series\":\"Construction\",\"rate\":21.1},{\"date\":\"2009-04-01\",\"series\":\"Construction\",\"rate\":18.7},{\"date\":\"2009-05-01\",\"series\":\"Construction\",\"rate\":19.2},{\"date\":\"2009-06-01\",\"series\":\"Construction\",\"rate\":17.4},{\"date\":\"2009-07-01\",\"series\":\"Construction\",\"rate\":18.2},{\"date\":\"2009-08-01\",\"series\":\"Construction\",\"rate\":16.5},{\"date\":\"2009-09-01\",\"series\":\"Construction\",\"rate\":17.1},{\"date\":\"2009-10-01\",\"series\":\"Construction\",\"rate\":18.7},{\"date\":\"2009-11-01\",\"series\":\"Construction\",\"rate\":19.4},{\"date\":\"2009-12-01\",\"series\":\"Construction\",\"rate\":22.7},{\"date\":\"2010-01-01\",\"series\":\"Construction\",\"rate\":24.7},{\"date\":\"2010-02-01\",\"series\":\"Construction\",\"rate\":27.1},{\"date\":\"2000-01-01\",\"series\":\"Manufacturing\",\"rate\":3.6},{\"date\":\"2000-02-01\",\"series\":\"Manufacturing\",\"rate\":3.4},{\"date\":\"2000-03-01\",\"series\":\"Manufacturing\",\"rate\":3.6},{\"date\":\"2000-04-01\",\"series\":\"Manufacturing\",\"rate\":3.7},{\"date\":\"2000-05-01\",\"series\":\"Manufacturing\",\"rate\":3.4},{\"date\":\"2000-06-01\",\"series\":\"Manufacturing\",\"rate\":3.1},{\"date\":\"2000-07-01\",\"series\":\"Manufacturing\",\"rate\":3.6},{\"date\":\"2000-08-01\",\"series\":\"Manufacturing\",\"rate\":3.4},{\"date\":\"2000-09-01\",\"series\":\"Manufacturing\",\"rate\":3.4},{\"date\":\"2000-10-01\",\"series\":\"Manufacturing\",\"rate\":3.6},{\"date\":\"2000-11-01\",\"series\":\"Manufacturing\",\"rate\":3.4},{\"date\":\"2000-12-01\",\"series\":\"Manufacturing\",\"rate\":3.3},{\"date\":\"2001-01-01\",\"series\":\"Manufacturing\",\"rate\":4.6},{\"date\":\"2001-02-01\",\"series\":\"Manufacturing\",\"rate\":4.6},{\"date\":\"2001-03-01\",\"series\":\"Manufacturing\",\"rate\":4.9},{\"date\":\"2001-04-01\",\"series\":\"Manufacturing\",\"rate\":4.4},{\"date\":\"2001-05-01\",\"series\":\"Manufacturing\",\"rate\":4.7},{\"date\":\"2001-06-01\",\"series\":\"Manufacturing\",\"rate\":5},{\"date\":\"2001-07-01\",\"series\":\"Manufacturing\",\"rate\":5.6},{\"date\":\"2001-08-01\",\"series\":\"Manufacturing\",\"rate\":5.5},{\"date\":\"2001-09-01\",\"series\":\"Manufacturing\",\"rate\":5.4},{\"date\":\"2001-10-01\",\"series\":\"Manufacturing\",\"rate\":5.8},{\"date\":\"2001-11-01\",\"series\":\"Manufacturing\",\"rate\":6},{\"date\":\"2001-12-01\",\"series\":\"Manufacturing\",\"rate\":6.3},{\"date\":\"2002-01-01\",\"series\":\"Manufacturing\",\"rate\":7.4},{\"date\":\"2002-02-01\",\"series\":\"Manufacturing\",\"rate\":7},{\"date\":\"2002-03-01\",\"series\":\"Manufacturing\",\"rate\":7.3},{\"date\":\"2002-04-01\",\"series\":\"Manufacturing\",\"rate\":7.2},{\"date\":\"2002-05-01\",\"series\":\"Manufacturing\",\"rate\":6.6},{\"date\":\"2002-06-01\",\"series\":\"Manufacturing\",\"rate\":6.6},{\"date\":\"2002-07-01\",\"series\":\"Manufacturing\",\"rate\":6.6},{\"date\":\"2002-08-01\",\"series\":\"Manufacturing\",\"rate\":6.2},{\"date\":\"2002-09-01\",\"series\":\"Manufacturing\",\"rate\":6.1},{\"date\":\"2002-10-01\",\"series\":\"Manufacturing\",\"rate\":5.9},{\"date\":\"2002-11-01\",\"series\":\"Manufacturing\",\"rate\":6.3},{\"date\":\"2002-12-01\",\"series\":\"Manufacturing\",\"rate\":6.6},{\"date\":\"2003-01-01\",\"series\":\"Manufacturing\",\"rate\":7.2},{\"date\":\"2003-02-01\",\"series\":\"Manufacturing\",\"rate\":6.7},{\"date\":\"2003-03-01\",\"series\":\"Manufacturing\",\"rate\":6.8},{\"date\":\"2003-04-01\",\"series\":\"Manufacturing\",\"rate\":6.7},{\"date\":\"2003-05-01\",\"series\":\"Manufacturing\",\"rate\":6.5},{\"date\":\"2003-06-01\",\"series\":\"Manufacturing\",\"rate\":7},{\"date\":\"2003-07-01\",\"series\":\"Manufacturing\",\"rate\":6.9},{\"date\":\"2003-08-01\",\"series\":\"Manufacturing\",\"rate\":6.7},{\"date\":\"2003-09-01\",\"series\":\"Manufacturing\",\"rate\":6.8},{\"date\":\"2003-10-01\",\"series\":\"Manufacturing\",\"rate\":6},{\"date\":\"2003-11-01\",\"series\":\"Manufacturing\",\"rate\":5.9},{\"date\":\"2003-12-01\",\"series\":\"Manufacturing\",\"rate\":5.9},{\"date\":\"2004-01-01\",\"series\":\"Manufacturing\",\"rate\":6.4},{\"date\":\"2004-02-01\",\"series\":\"Manufacturing\",\"rate\":6.3},{\"date\":\"2004-03-01\",\"series\":\"Manufacturing\",\"rate\":6.3},{\"date\":\"2004-04-01\",\"series\":\"Manufacturing\",\"rate\":5.8},{\"date\":\"2004-05-01\",\"series\":\"Manufacturing\",\"rate\":5.6},{\"date\":\"2004-06-01\",\"series\":\"Manufacturing\",\"rate\":5.6},{\"date\":\"2004-07-01\",\"series\":\"Manufacturing\",\"rate\":6},{\"date\":\"2004-08-01\",\"series\":\"Manufacturing\",\"rate\":4.9},{\"date\":\"2004-09-01\",\"series\":\"Manufacturing\",\"rate\":5},{\"date\":\"2004-10-01\",\"series\":\"Manufacturing\",\"rate\":5.3},{\"date\":\"2004-11-01\",\"series\":\"Manufacturing\",\"rate\":5.4},{\"date\":\"2004-12-01\",\"series\":\"Manufacturing\",\"rate\":5.1},{\"date\":\"2005-01-01\",\"series\":\"Manufacturing\",\"rate\":5.3},{\"date\":\"2005-02-01\",\"series\":\"Manufacturing\",\"rate\":5.3},{\"date\":\"2005-03-01\",\"series\":\"Manufacturing\",\"rate\":5.3},{\"date\":\"2005-04-01\",\"series\":\"Manufacturing\",\"rate\":4.8},{\"date\":\"2005-05-01\",\"series\":\"Manufacturing\",\"rate\":4.5},{\"date\":\"2005-06-01\",\"series\":\"Manufacturing\",\"rate\":4.4},{\"date\":\"2005-07-01\",\"series\":\"Manufacturing\",\"rate\":5.3},{\"date\":\"2005-08-01\",\"series\":\"Manufacturing\",\"rate\":4.7},{\"date\":\"2005-09-01\",\"series\":\"Manufacturing\",\"rate\":4.7},{\"date\":\"2005-10-01\",\"series\":\"Manufacturing\",\"rate\":4.8},{\"date\":\"2005-11-01\",\"series\":\"Manufacturing\",\"rate\":4.9},{\"date\":\"2005-12-01\",\"series\":\"Manufacturing\",\"rate\":4.5},{\"date\":\"2006-01-01\",\"series\":\"Manufacturing\",\"rate\":4.6},{\"date\":\"2006-02-01\",\"series\":\"Manufacturing\",\"rate\":4.9},{\"date\":\"2006-03-01\",\"series\":\"Manufacturing\",\"rate\":4.1},{\"date\":\"2006-04-01\",\"series\":\"Manufacturing\",\"rate\":4.5},{\"date\":\"2006-05-01\",\"series\":\"Manufacturing\",\"rate\":4.1},{\"date\":\"2006-06-01\",\"series\":\"Manufacturing\",\"rate\":3.8},{\"date\":\"2006-07-01\",\"series\":\"Manufacturing\",\"rate\":4.4},{\"date\":\"2006-08-01\",\"series\":\"Manufacturing\",\"rate\":4.1},{\"date\":\"2006-09-01\",\"series\":\"Manufacturing\",\"rate\":3.8},{\"date\":\"2006-10-01\",\"series\":\"Manufacturing\",\"rate\":3.7},{\"date\":\"2006-11-01\",\"series\":\"Manufacturing\",\"rate\":4.3},{\"date\":\"2006-12-01\",\"series\":\"Manufacturing\",\"rate\":4},{\"date\":\"2007-01-01\",\"series\":\"Manufacturing\",\"rate\":4.6},{\"date\":\"2007-02-01\",\"series\":\"Manufacturing\",\"rate\":4.7},{\"date\":\"2007-03-01\",\"series\":\"Manufacturing\",\"rate\":4.5},{\"date\":\"2007-04-01\",\"series\":\"Manufacturing\",\"rate\":4.6},{\"date\":\"2007-05-01\",\"series\":\"Manufacturing\",\"rate\":3.9},{\"date\":\"2007-06-01\",\"series\":\"Manufacturing\",\"rate\":4},{\"date\":\"2007-07-01\",\"series\":\"Manufacturing\",\"rate\":3.7},{\"date\":\"2007-08-01\",\"series\":\"Manufacturing\",\"rate\":3.6},{\"date\":\"2007-09-01\",\"series\":\"Manufacturing\",\"rate\":4.1},{\"date\":\"2007-10-01\",\"series\":\"Manufacturing\",\"rate\":4.3},{\"date\":\"2007-11-01\",\"series\":\"Manufacturing\",\"rate\":4.5},{\"date\":\"2007-12-01\",\"series\":\"Manufacturing\",\"rate\":4.6},{\"date\":\"2008-01-01\",\"series\":\"Manufacturing\",\"rate\":5.1},{\"date\":\"2008-02-01\",\"series\":\"Manufacturing\",\"rate\":5},{\"date\":\"2008-03-01\",\"series\":\"Manufacturing\",\"rate\":5},{\"date\":\"2008-04-01\",\"series\":\"Manufacturing\",\"rate\":4.8},{\"date\":\"2008-05-01\",\"series\":\"Manufacturing\",\"rate\":5.3},{\"date\":\"2008-06-01\",\"series\":\"Manufacturing\",\"rate\":5.2},{\"date\":\"2008-07-01\",\"series\":\"Manufacturing\",\"rate\":5.5},{\"date\":\"2008-08-01\",\"series\":\"Manufacturing\",\"rate\":5.7},{\"date\":\"2008-09-01\",\"series\":\"Manufacturing\",\"rate\":6},{\"date\":\"2008-10-01\",\"series\":\"Manufacturing\",\"rate\":6.2},{\"date\":\"2008-11-01\",\"series\":\"Manufacturing\",\"rate\":7},{\"date\":\"2008-12-01\",\"series\":\"Manufacturing\",\"rate\":8.3},{\"date\":\"2009-01-01\",\"series\":\"Manufacturing\",\"rate\":10.9},{\"date\":\"2009-02-01\",\"series\":\"Manufacturing\",\"rate\":11.5},{\"date\":\"2009-03-01\",\"series\":\"Manufacturing\",\"rate\":12.2},{\"date\":\"2009-04-01\",\"series\":\"Manufacturing\",\"rate\":12.4},{\"date\":\"2009-05-01\",\"series\":\"Manufacturing\",\"rate\":12.6},{\"date\":\"2009-06-01\",\"series\":\"Manufacturing\",\"rate\":12.6},{\"date\":\"2009-07-01\",\"series\":\"Manufacturing\",\"rate\":12.4},{\"date\":\"2009-08-01\",\"series\":\"Manufacturing\",\"rate\":11.8},{\"date\":\"2009-09-01\",\"series\":\"Manufacturing\",\"rate\":11.9},{\"date\":\"2009-10-01\",\"series\":\"Manufacturing\",\"rate\":12.2},{\"date\":\"2009-11-01\",\"series\":\"Manufacturing\",\"rate\":12.5},{\"date\":\"2009-12-01\",\"series\":\"Manufacturing\",\"rate\":11.9},{\"date\":\"2010-01-01\",\"series\":\"Manufacturing\",\"rate\":13},{\"date\":\"2010-02-01\",\"series\":\"Manufacturing\",\"rate\":12.1},{\"date\":\"2000-01-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5},{\"date\":\"2000-02-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.2},{\"date\":\"2000-03-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.1},{\"date\":\"2000-04-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.1},{\"date\":\"2000-05-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.3},{\"date\":\"2000-06-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.4},{\"date\":\"2000-07-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.1},{\"date\":\"2000-08-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.3},{\"date\":\"2000-09-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.1},{\"date\":\"2000-10-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":3.7},{\"date\":\"2000-11-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":3.6},{\"date\":\"2000-12-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":3.7},{\"date\":\"2001-01-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.7},{\"date\":\"2001-02-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.2},{\"date\":\"2001-03-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.4},{\"date\":\"2001-04-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.3},{\"date\":\"2001-05-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.5},{\"date\":\"2001-06-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.9},{\"date\":\"2001-07-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.3},{\"date\":\"2001-08-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.8},{\"date\":\"2001-09-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.8},{\"date\":\"2001-10-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.8},{\"date\":\"2001-11-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.3},{\"date\":\"2001-12-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.4},{\"date\":\"2002-01-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.3},{\"date\":\"2002-02-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.6},{\"date\":\"2002-03-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.6},{\"date\":\"2002-04-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.4},{\"date\":\"2002-05-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.8},{\"date\":\"2002-06-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.2},{\"date\":\"2002-07-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.6},{\"date\":\"2002-08-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.8},{\"date\":\"2002-09-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.9},{\"date\":\"2002-10-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.1},{\"date\":\"2002-11-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.2},{\"date\":\"2002-12-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.7},{\"date\":\"2003-01-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.7},{\"date\":\"2003-02-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.1},{\"date\":\"2003-03-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.9},{\"date\":\"2003-04-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6},{\"date\":\"2003-05-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.2},{\"date\":\"2003-06-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.9},{\"date\":\"2003-07-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.6},{\"date\":\"2003-08-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.6},{\"date\":\"2003-09-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.9},{\"date\":\"2003-10-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.7},{\"date\":\"2003-11-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.4},{\"date\":\"2003-12-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5},{\"date\":\"2004-01-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.5},{\"date\":\"2004-02-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.5},{\"date\":\"2004-03-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.8},{\"date\":\"2004-04-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.1},{\"date\":\"2004-05-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.8},{\"date\":\"2004-06-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.8},{\"date\":\"2004-07-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.5},{\"date\":\"2004-08-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.1},{\"date\":\"2004-09-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.5},{\"date\":\"2004-10-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.4},{\"date\":\"2004-11-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5},{\"date\":\"2004-12-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5},{\"date\":\"2005-01-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.3},{\"date\":\"2005-02-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.2},{\"date\":\"2005-03-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.6},{\"date\":\"2005-04-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.4},{\"date\":\"2005-05-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.4},{\"date\":\"2005-06-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.7},{\"date\":\"2005-07-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.6},{\"date\":\"2005-08-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.3},{\"date\":\"2005-09-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.9},{\"date\":\"2005-10-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.9},{\"date\":\"2005-11-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.7},{\"date\":\"2005-12-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.5},{\"date\":\"2006-01-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.7},{\"date\":\"2006-02-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.4},{\"date\":\"2006-03-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.9},{\"date\":\"2006-04-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.6},{\"date\":\"2006-05-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.8},{\"date\":\"2006-06-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.1},{\"date\":\"2006-07-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.1},{\"date\":\"2006-08-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.7},{\"date\":\"2006-09-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.9},{\"date\":\"2006-10-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.7},{\"date\":\"2006-11-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.8},{\"date\":\"2006-12-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.5},{\"date\":\"2007-01-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.5},{\"date\":\"2007-02-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.1},{\"date\":\"2007-03-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.4},{\"date\":\"2007-04-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.2},{\"date\":\"2007-05-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":3.9},{\"date\":\"2007-06-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.6},{\"date\":\"2007-07-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.2},{\"date\":\"2007-08-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.1},{\"date\":\"2007-09-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.1},{\"date\":\"2007-10-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.4},{\"date\":\"2007-11-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.3},{\"date\":\"2007-12-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.8},{\"date\":\"2008-01-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.4},{\"date\":\"2008-02-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.9},{\"date\":\"2008-03-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.9},{\"date\":\"2008-04-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":4.5},{\"date\":\"2008-05-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.2},{\"date\":\"2008-06-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":5.7},{\"date\":\"2008-07-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.5},{\"date\":\"2008-08-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.6},{\"date\":\"2008-09-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.2},{\"date\":\"2008-10-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.3},{\"date\":\"2008-11-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":6.7},{\"date\":\"2008-12-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":7.2},{\"date\":\"2009-01-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":8.7},{\"date\":\"2009-02-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":8.9},{\"date\":\"2009-03-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":9},{\"date\":\"2009-04-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":9},{\"date\":\"2009-05-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":9},{\"date\":\"2009-06-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":9.1},{\"date\":\"2009-07-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":9},{\"date\":\"2009-08-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":8.8},{\"date\":\"2009-09-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":9},{\"date\":\"2009-10-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":9.6},{\"date\":\"2009-11-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":9.2},{\"date\":\"2009-12-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":9.1},{\"date\":\"2010-01-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":10.5},{\"date\":\"2010-02-01\",\"series\":\"Wholesale and Retail Trade\",\"rate\":10},{\"date\":\"2000-01-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.3},{\"date\":\"2000-02-01\",\"series\":\"Transportation and Utilities\",\"rate\":4},{\"date\":\"2000-03-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.5},{\"date\":\"2000-04-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.4},{\"date\":\"2000-05-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.4},{\"date\":\"2000-06-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.2},{\"date\":\"2000-07-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.9},{\"date\":\"2000-08-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.4},{\"date\":\"2000-09-01\",\"series\":\"Transportation and Utilities\",\"rate\":4},{\"date\":\"2000-10-01\",\"series\":\"Transportation and Utilities\",\"rate\":2.8},{\"date\":\"2000-11-01\",\"series\":\"Transportation and Utilities\",\"rate\":2.3},{\"date\":\"2000-12-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.1},{\"date\":\"2001-01-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.6},{\"date\":\"2001-02-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.4},{\"date\":\"2001-03-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.5},{\"date\":\"2001-04-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.2},{\"date\":\"2001-05-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.1},{\"date\":\"2001-06-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.3},{\"date\":\"2001-07-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.2},{\"date\":\"2001-08-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.9},{\"date\":\"2001-09-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.9},{\"date\":\"2001-10-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.8},{\"date\":\"2001-11-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.4},{\"date\":\"2001-12-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.6},{\"date\":\"2002-01-01\",\"series\":\"Transportation and Utilities\",\"rate\":6.6},{\"date\":\"2002-02-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.7},{\"date\":\"2002-03-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.6},{\"date\":\"2002-04-01\",\"series\":\"Transportation and Utilities\",\"rate\":5},{\"date\":\"2002-05-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.5},{\"date\":\"2002-06-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.9},{\"date\":\"2002-07-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.9},{\"date\":\"2002-08-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.9},{\"date\":\"2002-09-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.2},{\"date\":\"2002-10-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.7},{\"date\":\"2002-11-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.2},{\"date\":\"2002-12-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.6},{\"date\":\"2003-01-01\",\"series\":\"Transportation and Utilities\",\"rate\":6.3},{\"date\":\"2003-02-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.8},{\"date\":\"2003-03-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.9},{\"date\":\"2003-04-01\",\"series\":\"Transportation and Utilities\",\"rate\":5},{\"date\":\"2003-05-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.9},{\"date\":\"2003-06-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.5},{\"date\":\"2003-07-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.4},{\"date\":\"2003-08-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.8},{\"date\":\"2003-09-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.7},{\"date\":\"2003-10-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.8},{\"date\":\"2003-11-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.1},{\"date\":\"2003-12-01\",\"series\":\"Transportation and Utilities\",\"rate\":5},{\"date\":\"2004-01-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.6},{\"date\":\"2004-02-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.5},{\"date\":\"2004-03-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.4},{\"date\":\"2004-04-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.5},{\"date\":\"2004-05-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.4},{\"date\":\"2004-06-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.3},{\"date\":\"2004-07-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.3},{\"date\":\"2004-08-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.4},{\"date\":\"2004-09-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.9},{\"date\":\"2004-10-01\",\"series\":\"Transportation and Utilities\",\"rate\":4},{\"date\":\"2004-11-01\",\"series\":\"Transportation and Utilities\",\"rate\":4},{\"date\":\"2004-12-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.8},{\"date\":\"2005-01-01\",\"series\":\"Transportation and Utilities\",\"rate\":5},{\"date\":\"2005-02-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.4},{\"date\":\"2005-03-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.8},{\"date\":\"2005-04-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.7},{\"date\":\"2005-05-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.1},{\"date\":\"2005-06-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.5},{\"date\":\"2005-07-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.9},{\"date\":\"2005-08-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.3},{\"date\":\"2005-09-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.7},{\"date\":\"2005-10-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.4},{\"date\":\"2005-11-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.5},{\"date\":\"2005-12-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.6},{\"date\":\"2006-01-01\",\"series\":\"Transportation and Utilities\",\"rate\":5},{\"date\":\"2006-02-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.6},{\"date\":\"2006-03-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.7},{\"date\":\"2006-04-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.8},{\"date\":\"2006-05-01\",\"series\":\"Transportation and Utilities\",\"rate\":4},{\"date\":\"2006-06-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.9},{\"date\":\"2006-07-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.2},{\"date\":\"2006-08-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.7},{\"date\":\"2006-09-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.1},{\"date\":\"2006-10-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.6},{\"date\":\"2006-11-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.1},{\"date\":\"2006-12-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.2},{\"date\":\"2007-01-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.2},{\"date\":\"2007-02-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.2},{\"date\":\"2007-03-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.3},{\"date\":\"2007-04-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.3},{\"date\":\"2007-05-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.8},{\"date\":\"2007-06-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.1},{\"date\":\"2007-07-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.1},{\"date\":\"2007-08-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.4},{\"date\":\"2007-09-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.7},{\"date\":\"2007-10-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.6},{\"date\":\"2007-11-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.9},{\"date\":\"2007-12-01\",\"series\":\"Transportation and Utilities\",\"rate\":3.4},{\"date\":\"2008-01-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.4},{\"date\":\"2008-02-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.6},{\"date\":\"2008-03-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.3},{\"date\":\"2008-04-01\",\"series\":\"Transportation and Utilities\",\"rate\":4},{\"date\":\"2008-05-01\",\"series\":\"Transportation and Utilities\",\"rate\":4.3},{\"date\":\"2008-06-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.1},{\"date\":\"2008-07-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.7},{\"date\":\"2008-08-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.2},{\"date\":\"2008-09-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.8},{\"date\":\"2008-10-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.7},{\"date\":\"2008-11-01\",\"series\":\"Transportation and Utilities\",\"rate\":5.8},{\"date\":\"2008-12-01\",\"series\":\"Transportation and Utilities\",\"rate\":6.7},{\"date\":\"2009-01-01\",\"series\":\"Transportation and Utilities\",\"rate\":8.4},{\"date\":\"2009-02-01\",\"series\":\"Transportation and Utilities\",\"rate\":9.1},{\"date\":\"2009-03-01\",\"series\":\"Transportation and Utilities\",\"rate\":9},{\"date\":\"2009-04-01\",\"series\":\"Transportation and Utilities\",\"rate\":9},{\"date\":\"2009-05-01\",\"series\":\"Transportation and Utilities\",\"rate\":8.5},{\"date\":\"2009-06-01\",\"series\":\"Transportation and Utilities\",\"rate\":8.4},{\"date\":\"2009-07-01\",\"series\":\"Transportation and Utilities\",\"rate\":8.8},{\"date\":\"2009-08-01\",\"series\":\"Transportation and Utilities\",\"rate\":9.8},{\"date\":\"2009-09-01\",\"series\":\"Transportation and Utilities\",\"rate\":9.5},{\"date\":\"2009-10-01\",\"series\":\"Transportation and Utilities\",\"rate\":8.6},{\"date\":\"2009-11-01\",\"series\":\"Transportation and Utilities\",\"rate\":8.5},{\"date\":\"2009-12-01\",\"series\":\"Transportation and Utilities\",\"rate\":9},{\"date\":\"2010-01-01\",\"series\":\"Transportation and Utilities\",\"rate\":11.3},{\"date\":\"2010-02-01\",\"series\":\"Transportation and Utilities\",\"rate\":10.5},{\"date\":\"2000-01-01\",\"series\":\"Information\",\"rate\":3.4},{\"date\":\"2000-02-01\",\"series\":\"Information\",\"rate\":2.9},{\"date\":\"2000-03-01\",\"series\":\"Information\",\"rate\":3.6},{\"date\":\"2000-04-01\",\"series\":\"Information\",\"rate\":2.4},{\"date\":\"2000-05-01\",\"series\":\"Information\",\"rate\":3.5},{\"date\":\"2000-06-01\",\"series\":\"Information\",\"rate\":2.6},{\"date\":\"2000-07-01\",\"series\":\"Information\",\"rate\":3.6},{\"date\":\"2000-08-01\",\"series\":\"Information\",\"rate\":3.7},{\"date\":\"2000-09-01\",\"series\":\"Information\",\"rate\":3.3},{\"date\":\"2000-10-01\",\"series\":\"Information\",\"rate\":2.4},{\"date\":\"2000-11-01\",\"series\":\"Information\",\"rate\":3},{\"date\":\"2000-12-01\",\"series\":\"Information\",\"rate\":4},{\"date\":\"2001-01-01\",\"series\":\"Information\",\"rate\":4.1},{\"date\":\"2001-02-01\",\"series\":\"Information\",\"rate\":2.9},{\"date\":\"2001-03-01\",\"series\":\"Information\",\"rate\":3.8},{\"date\":\"2001-04-01\",\"series\":\"Information\",\"rate\":3.7},{\"date\":\"2001-05-01\",\"series\":\"Information\",\"rate\":4.2},{\"date\":\"2001-06-01\",\"series\":\"Information\",\"rate\":4.1},{\"date\":\"2001-07-01\",\"series\":\"Information\",\"rate\":5.2},{\"date\":\"2001-08-01\",\"series\":\"Information\",\"rate\":5.4},{\"date\":\"2001-09-01\",\"series\":\"Information\",\"rate\":5.6},{\"date\":\"2001-10-01\",\"series\":\"Information\",\"rate\":6},{\"date\":\"2001-11-01\",\"series\":\"Information\",\"rate\":6.2},{\"date\":\"2001-12-01\",\"series\":\"Information\",\"rate\":7.4},{\"date\":\"2002-01-01\",\"series\":\"Information\",\"rate\":7.1},{\"date\":\"2002-02-01\",\"series\":\"Information\",\"rate\":7.6},{\"date\":\"2002-03-01\",\"series\":\"Information\",\"rate\":7.2},{\"date\":\"2002-04-01\",\"series\":\"Information\",\"rate\":6.9},{\"date\":\"2002-05-01\",\"series\":\"Information\",\"rate\":7.2},{\"date\":\"2002-06-01\",\"series\":\"Information\",\"rate\":6.9},{\"date\":\"2002-07-01\",\"series\":\"Information\",\"rate\":7.1},{\"date\":\"2002-08-01\",\"series\":\"Information\",\"rate\":7.1},{\"date\":\"2002-09-01\",\"series\":\"Information\",\"rate\":6.3},{\"date\":\"2002-10-01\",\"series\":\"Information\",\"rate\":6},{\"date\":\"2002-11-01\",\"series\":\"Information\",\"rate\":6.5},{\"date\":\"2002-12-01\",\"series\":\"Information\",\"rate\":7.2},{\"date\":\"2003-01-01\",\"series\":\"Information\",\"rate\":6.7},{\"date\":\"2003-02-01\",\"series\":\"Information\",\"rate\":8.6},{\"date\":\"2003-03-01\",\"series\":\"Information\",\"rate\":7.4},{\"date\":\"2003-04-01\",\"series\":\"Information\",\"rate\":7.3},{\"date\":\"2003-05-01\",\"series\":\"Information\",\"rate\":6.9},{\"date\":\"2003-06-01\",\"series\":\"Information\",\"rate\":6.4},{\"date\":\"2003-07-01\",\"series\":\"Information\",\"rate\":5.9},{\"date\":\"2003-08-01\",\"series\":\"Information\",\"rate\":6.1},{\"date\":\"2003-09-01\",\"series\":\"Information\",\"rate\":7},{\"date\":\"2003-10-01\",\"series\":\"Information\",\"rate\":5.4},{\"date\":\"2003-11-01\",\"series\":\"Information\",\"rate\":7.6},{\"date\":\"2003-12-01\",\"series\":\"Information\",\"rate\":6.5},{\"date\":\"2004-01-01\",\"series\":\"Information\",\"rate\":7},{\"date\":\"2004-02-01\",\"series\":\"Information\",\"rate\":5.8},{\"date\":\"2004-03-01\",\"series\":\"Information\",\"rate\":6.3},{\"date\":\"2004-04-01\",\"series\":\"Information\",\"rate\":5},{\"date\":\"2004-05-01\",\"series\":\"Information\",\"rate\":5.7},{\"date\":\"2004-06-01\",\"series\":\"Information\",\"rate\":5},{\"date\":\"2004-07-01\",\"series\":\"Information\",\"rate\":5.2},{\"date\":\"2004-08-01\",\"series\":\"Information\",\"rate\":5.7},{\"date\":\"2004-09-01\",\"series\":\"Information\",\"rate\":5.4},{\"date\":\"2004-10-01\",\"series\":\"Information\",\"rate\":5.6},{\"date\":\"2004-11-01\",\"series\":\"Information\",\"rate\":5.6},{\"date\":\"2004-12-01\",\"series\":\"Information\",\"rate\":5.7},{\"date\":\"2005-01-01\",\"series\":\"Information\",\"rate\":5.4},{\"date\":\"2005-02-01\",\"series\":\"Information\",\"rate\":6.5},{\"date\":\"2005-03-01\",\"series\":\"Information\",\"rate\":6},{\"date\":\"2005-04-01\",\"series\":\"Information\",\"rate\":5.9},{\"date\":\"2005-05-01\",\"series\":\"Information\",\"rate\":4.7},{\"date\":\"2005-06-01\",\"series\":\"Information\",\"rate\":5},{\"date\":\"2005-07-01\",\"series\":\"Information\",\"rate\":4.2},{\"date\":\"2005-08-01\",\"series\":\"Information\",\"rate\":4.6},{\"date\":\"2005-09-01\",\"series\":\"Information\",\"rate\":4.9},{\"date\":\"2005-10-01\",\"series\":\"Information\",\"rate\":4.8},{\"date\":\"2005-11-01\",\"series\":\"Information\",\"rate\":5.1},{\"date\":\"2005-12-01\",\"series\":\"Information\",\"rate\":3.7},{\"date\":\"2006-01-01\",\"series\":\"Information\",\"rate\":3.3},{\"date\":\"2006-02-01\",\"series\":\"Information\",\"rate\":3.7},{\"date\":\"2006-03-01\",\"series\":\"Information\",\"rate\":3.5},{\"date\":\"2006-04-01\",\"series\":\"Information\",\"rate\":4.2},{\"date\":\"2006-05-01\",\"series\":\"Information\",\"rate\":4.8},{\"date\":\"2006-06-01\",\"series\":\"Information\",\"rate\":3.4},{\"date\":\"2006-07-01\",\"series\":\"Information\",\"rate\":3},{\"date\":\"2006-08-01\",\"series\":\"Information\",\"rate\":3.9},{\"date\":\"2006-09-01\",\"series\":\"Information\",\"rate\":4.9},{\"date\":\"2006-10-01\",\"series\":\"Information\",\"rate\":3.4},{\"date\":\"2006-11-01\",\"series\":\"Information\",\"rate\":3.9},{\"date\":\"2006-12-01\",\"series\":\"Information\",\"rate\":2.9},{\"date\":\"2007-01-01\",\"series\":\"Information\",\"rate\":4},{\"date\":\"2007-02-01\",\"series\":\"Information\",\"rate\":4},{\"date\":\"2007-03-01\",\"series\":\"Information\",\"rate\":3.2},{\"date\":\"2007-04-01\",\"series\":\"Information\",\"rate\":2.4},{\"date\":\"2007-05-01\",\"series\":\"Information\",\"rate\":3.3},{\"date\":\"2007-06-01\",\"series\":\"Information\",\"rate\":3.4},{\"date\":\"2007-07-01\",\"series\":\"Information\",\"rate\":3.4},{\"date\":\"2007-08-01\",\"series\":\"Information\",\"rate\":4.1},{\"date\":\"2007-09-01\",\"series\":\"Information\",\"rate\":3.7},{\"date\":\"2007-10-01\",\"series\":\"Information\",\"rate\":3.7},{\"date\":\"2007-11-01\",\"series\":\"Information\",\"rate\":4},{\"date\":\"2007-12-01\",\"series\":\"Information\",\"rate\":3.7},{\"date\":\"2008-01-01\",\"series\":\"Information\",\"rate\":5.1},{\"date\":\"2008-02-01\",\"series\":\"Information\",\"rate\":5.8},{\"date\":\"2008-03-01\",\"series\":\"Information\",\"rate\":4.8},{\"date\":\"2008-04-01\",\"series\":\"Information\",\"rate\":4.4},{\"date\":\"2008-05-01\",\"series\":\"Information\",\"rate\":5},{\"date\":\"2008-06-01\",\"series\":\"Information\",\"rate\":4.7},{\"date\":\"2008-07-01\",\"series\":\"Information\",\"rate\":4.1},{\"date\":\"2008-08-01\",\"series\":\"Information\",\"rate\":4.2},{\"date\":\"2008-09-01\",\"series\":\"Information\",\"rate\":5},{\"date\":\"2008-10-01\",\"series\":\"Information\",\"rate\":5},{\"date\":\"2008-11-01\",\"series\":\"Information\",\"rate\":5.2},{\"date\":\"2008-12-01\",\"series\":\"Information\",\"rate\":6.9},{\"date\":\"2009-01-01\",\"series\":\"Information\",\"rate\":7.4},{\"date\":\"2009-02-01\",\"series\":\"Information\",\"rate\":7.1},{\"date\":\"2009-03-01\",\"series\":\"Information\",\"rate\":7.8},{\"date\":\"2009-04-01\",\"series\":\"Information\",\"rate\":10.1},{\"date\":\"2009-05-01\",\"series\":\"Information\",\"rate\":9.5},{\"date\":\"2009-06-01\",\"series\":\"Information\",\"rate\":11.1},{\"date\":\"2009-07-01\",\"series\":\"Information\",\"rate\":11.5},{\"date\":\"2009-08-01\",\"series\":\"Information\",\"rate\":10.7},{\"date\":\"2009-09-01\",\"series\":\"Information\",\"rate\":11.2},{\"date\":\"2009-10-01\",\"series\":\"Information\",\"rate\":8.2},{\"date\":\"2009-11-01\",\"series\":\"Information\",\"rate\":7.6},{\"date\":\"2009-12-01\",\"series\":\"Information\",\"rate\":8.5},{\"date\":\"2010-01-01\",\"series\":\"Information\",\"rate\":10},{\"date\":\"2010-02-01\",\"series\":\"Information\",\"rate\":10},{\"date\":\"2000-01-01\",\"series\":\"Finance\",\"rate\":2.7},{\"date\":\"2000-02-01\",\"series\":\"Finance\",\"rate\":2.8},{\"date\":\"2000-03-01\",\"series\":\"Finance\",\"rate\":2.6},{\"date\":\"2000-04-01\",\"series\":\"Finance\",\"rate\":2.3},{\"date\":\"2000-05-01\",\"series\":\"Finance\",\"rate\":2.2},{\"date\":\"2000-06-01\",\"series\":\"Finance\",\"rate\":2.5},{\"date\":\"2000-07-01\",\"series\":\"Finance\",\"rate\":2.2},{\"date\":\"2000-08-01\",\"series\":\"Finance\",\"rate\":2.5},{\"date\":\"2000-09-01\",\"series\":\"Finance\",\"rate\":2.2},{\"date\":\"2000-10-01\",\"series\":\"Finance\",\"rate\":2.6},{\"date\":\"2000-11-01\",\"series\":\"Finance\",\"rate\":2.1},{\"date\":\"2000-12-01\",\"series\":\"Finance\",\"rate\":2.3},{\"date\":\"2001-01-01\",\"series\":\"Finance\",\"rate\":2.6},{\"date\":\"2001-02-01\",\"series\":\"Finance\",\"rate\":2.6},{\"date\":\"2001-03-01\",\"series\":\"Finance\",\"rate\":2.4},{\"date\":\"2001-04-01\",\"series\":\"Finance\",\"rate\":2.6},{\"date\":\"2001-05-01\",\"series\":\"Finance\",\"rate\":2.2},{\"date\":\"2001-06-01\",\"series\":\"Finance\",\"rate\":2.8},{\"date\":\"2001-07-01\",\"series\":\"Finance\",\"rate\":3.3},{\"date\":\"2001-08-01\",\"series\":\"Finance\",\"rate\":2.9},{\"date\":\"2001-09-01\",\"series\":\"Finance\",\"rate\":3.1},{\"date\":\"2001-10-01\",\"series\":\"Finance\",\"rate\":3.3},{\"date\":\"2001-11-01\",\"series\":\"Finance\",\"rate\":3.6},{\"date\":\"2001-12-01\",\"series\":\"Finance\",\"rate\":3},{\"date\":\"2002-01-01\",\"series\":\"Finance\",\"rate\":3},{\"date\":\"2002-02-01\",\"series\":\"Finance\",\"rate\":3.5},{\"date\":\"2002-03-01\",\"series\":\"Finance\",\"rate\":3.2},{\"date\":\"2002-04-01\",\"series\":\"Finance\",\"rate\":3.3},{\"date\":\"2002-05-01\",\"series\":\"Finance\",\"rate\":3.8},{\"date\":\"2002-06-01\",\"series\":\"Finance\",\"rate\":4.1},{\"date\":\"2002-07-01\",\"series\":\"Finance\",\"rate\":3.8},{\"date\":\"2002-08-01\",\"series\":\"Finance\",\"rate\":3.8},{\"date\":\"2002-09-01\",\"series\":\"Finance\",\"rate\":3.3},{\"date\":\"2002-10-01\",\"series\":\"Finance\",\"rate\":3.5},{\"date\":\"2002-11-01\",\"series\":\"Finance\",\"rate\":3.7},{\"date\":\"2002-12-01\",\"series\":\"Finance\",\"rate\":3.6},{\"date\":\"2003-01-01\",\"series\":\"Finance\",\"rate\":3.6},{\"date\":\"2003-02-01\",\"series\":\"Finance\",\"rate\":3.4},{\"date\":\"2003-03-01\",\"series\":\"Finance\",\"rate\":4},{\"date\":\"2003-04-01\",\"series\":\"Finance\",\"rate\":3.6},{\"date\":\"2003-05-01\",\"series\":\"Finance\",\"rate\":3.6},{\"date\":\"2003-06-01\",\"series\":\"Finance\",\"rate\":4},{\"date\":\"2003-07-01\",\"series\":\"Finance\",\"rate\":3.1},{\"date\":\"2003-08-01\",\"series\":\"Finance\",\"rate\":3.7},{\"date\":\"2003-09-01\",\"series\":\"Finance\",\"rate\":3.3},{\"date\":\"2003-10-01\",\"series\":\"Finance\",\"rate\":3.3},{\"date\":\"2003-11-01\",\"series\":\"Finance\",\"rate\":3.3},{\"date\":\"2003-12-01\",\"series\":\"Finance\",\"rate\":3},{\"date\":\"2004-01-01\",\"series\":\"Finance\",\"rate\":4.3},{\"date\":\"2004-02-01\",\"series\":\"Finance\",\"rate\":3.8},{\"date\":\"2004-03-01\",\"series\":\"Finance\",\"rate\":3.7},{\"date\":\"2004-04-01\",\"series\":\"Finance\",\"rate\":3.4},{\"date\":\"2004-05-01\",\"series\":\"Finance\",\"rate\":3.3},{\"date\":\"2004-06-01\",\"series\":\"Finance\",\"rate\":3.6},{\"date\":\"2004-07-01\",\"series\":\"Finance\",\"rate\":3.3},{\"date\":\"2004-08-01\",\"series\":\"Finance\",\"rate\":3.4},{\"date\":\"2004-09-01\",\"series\":\"Finance\",\"rate\":4},{\"date\":\"2004-10-01\",\"series\":\"Finance\",\"rate\":3.8},{\"date\":\"2004-11-01\",\"series\":\"Finance\",\"rate\":3.1},{\"date\":\"2004-12-01\",\"series\":\"Finance\",\"rate\":3.1},{\"date\":\"2005-01-01\",\"series\":\"Finance\",\"rate\":2.7},{\"date\":\"2005-02-01\",\"series\":\"Finance\",\"rate\":3.2},{\"date\":\"2005-03-01\",\"series\":\"Finance\",\"rate\":2.7},{\"date\":\"2005-04-01\",\"series\":\"Finance\",\"rate\":2.7},{\"date\":\"2005-05-01\",\"series\":\"Finance\",\"rate\":3.1},{\"date\":\"2005-06-01\",\"series\":\"Finance\",\"rate\":3.3},{\"date\":\"2005-07-01\",\"series\":\"Finance\",\"rate\":3.3},{\"date\":\"2005-08-01\",\"series\":\"Finance\",\"rate\":3.2},{\"date\":\"2005-09-01\",\"series\":\"Finance\",\"rate\":2.7},{\"date\":\"2005-10-01\",\"series\":\"Finance\",\"rate\":2.7},{\"date\":\"2005-11-01\",\"series\":\"Finance\",\"rate\":2.8},{\"date\":\"2005-12-01\",\"series\":\"Finance\",\"rate\":2.1},{\"date\":\"2006-01-01\",\"series\":\"Finance\",\"rate\":2.4},{\"date\":\"2006-02-01\",\"series\":\"Finance\",\"rate\":2.8},{\"date\":\"2006-03-01\",\"series\":\"Finance\",\"rate\":3.1},{\"date\":\"2006-04-01\",\"series\":\"Finance\",\"rate\":3.1},{\"date\":\"2006-05-01\",\"series\":\"Finance\",\"rate\":3},{\"date\":\"2006-06-01\",\"series\":\"Finance\",\"rate\":3.1},{\"date\":\"2006-07-01\",\"series\":\"Finance\",\"rate\":3.4},{\"date\":\"2006-08-01\",\"series\":\"Finance\",\"rate\":2.7},{\"date\":\"2006-09-01\",\"series\":\"Finance\",\"rate\":2.4},{\"date\":\"2006-10-01\",\"series\":\"Finance\",\"rate\":2.1},{\"date\":\"2006-11-01\",\"series\":\"Finance\",\"rate\":2.3},{\"date\":\"2006-12-01\",\"series\":\"Finance\",\"rate\":2.3},{\"date\":\"2007-01-01\",\"series\":\"Finance\",\"rate\":2.4},{\"date\":\"2007-02-01\",\"series\":\"Finance\",\"rate\":3.1},{\"date\":\"2007-03-01\",\"series\":\"Finance\",\"rate\":2.6},{\"date\":\"2007-04-01\",\"series\":\"Finance\",\"rate\":2.4},{\"date\":\"2007-05-01\",\"series\":\"Finance\",\"rate\":2.9},{\"date\":\"2007-06-01\",\"series\":\"Finance\",\"rate\":3.1},{\"date\":\"2007-07-01\",\"series\":\"Finance\",\"rate\":3.1},{\"date\":\"2007-08-01\",\"series\":\"Finance\",\"rate\":3.7},{\"date\":\"2007-09-01\",\"series\":\"Finance\",\"rate\":3.3},{\"date\":\"2007-10-01\",\"series\":\"Finance\",\"rate\":3.2},{\"date\":\"2007-11-01\",\"series\":\"Finance\",\"rate\":2.7},{\"date\":\"2007-12-01\",\"series\":\"Finance\",\"rate\":3.2},{\"date\":\"2008-01-01\",\"series\":\"Finance\",\"rate\":3},{\"date\":\"2008-02-01\",\"series\":\"Finance\",\"rate\":3.4},{\"date\":\"2008-03-01\",\"series\":\"Finance\",\"rate\":3.4},{\"date\":\"2008-04-01\",\"series\":\"Finance\",\"rate\":3.4},{\"date\":\"2008-05-01\",\"series\":\"Finance\",\"rate\":3.7},{\"date\":\"2008-06-01\",\"series\":\"Finance\",\"rate\":3.4},{\"date\":\"2008-07-01\",\"series\":\"Finance\",\"rate\":3.6},{\"date\":\"2008-08-01\",\"series\":\"Finance\",\"rate\":4.2},{\"date\":\"2008-09-01\",\"series\":\"Finance\",\"rate\":4},{\"date\":\"2008-10-01\",\"series\":\"Finance\",\"rate\":4.5},{\"date\":\"2008-11-01\",\"series\":\"Finance\",\"rate\":5.2},{\"date\":\"2008-12-01\",\"series\":\"Finance\",\"rate\":5.6},{\"date\":\"2009-01-01\",\"series\":\"Finance\",\"rate\":6},{\"date\":\"2009-02-01\",\"series\":\"Finance\",\"rate\":6.7},{\"date\":\"2009-03-01\",\"series\":\"Finance\",\"rate\":6.8},{\"date\":\"2009-04-01\",\"series\":\"Finance\",\"rate\":6},{\"date\":\"2009-05-01\",\"series\":\"Finance\",\"rate\":5.7},{\"date\":\"2009-06-01\",\"series\":\"Finance\",\"rate\":5.5},{\"date\":\"2009-07-01\",\"series\":\"Finance\",\"rate\":6.1},{\"date\":\"2009-08-01\",\"series\":\"Finance\",\"rate\":6},{\"date\":\"2009-09-01\",\"series\":\"Finance\",\"rate\":7.1},{\"date\":\"2009-10-01\",\"series\":\"Finance\",\"rate\":7},{\"date\":\"2009-11-01\",\"series\":\"Finance\",\"rate\":6.7},{\"date\":\"2009-12-01\",\"series\":\"Finance\",\"rate\":7.2},{\"date\":\"2010-01-01\",\"series\":\"Finance\",\"rate\":6.6},{\"date\":\"2010-02-01\",\"series\":\"Finance\",\"rate\":7.5},{\"date\":\"2000-01-01\",\"series\":\"Business services\",\"rate\":5.7},{\"date\":\"2000-02-01\",\"series\":\"Business services\",\"rate\":5.2},{\"date\":\"2000-03-01\",\"series\":\"Business services\",\"rate\":5.4},{\"date\":\"2000-04-01\",\"series\":\"Business services\",\"rate\":4.5},{\"date\":\"2000-05-01\",\"series\":\"Business services\",\"rate\":4.7},{\"date\":\"2000-06-01\",\"series\":\"Business services\",\"rate\":4.4},{\"date\":\"2000-07-01\",\"series\":\"Business services\",\"rate\":5.1},{\"date\":\"2000-08-01\",\"series\":\"Business services\",\"rate\":4.8},{\"date\":\"2000-09-01\",\"series\":\"Business services\",\"rate\":4.6},{\"date\":\"2000-10-01\",\"series\":\"Business services\",\"rate\":4.1},{\"date\":\"2000-11-01\",\"series\":\"Business services\",\"rate\":4.4},{\"date\":\"2000-12-01\",\"series\":\"Business services\",\"rate\":4.5},{\"date\":\"2001-01-01\",\"series\":\"Business services\",\"rate\":5.8},{\"date\":\"2001-02-01\",\"series\":\"Business services\",\"rate\":5.9},{\"date\":\"2001-03-01\",\"series\":\"Business services\",\"rate\":5.3},{\"date\":\"2001-04-01\",\"series\":\"Business services\",\"rate\":5.3},{\"date\":\"2001-05-01\",\"series\":\"Business services\",\"rate\":5.3},{\"date\":\"2001-06-01\",\"series\":\"Business services\",\"rate\":5.4},{\"date\":\"2001-07-01\",\"series\":\"Business services\",\"rate\":5.7},{\"date\":\"2001-08-01\",\"series\":\"Business services\",\"rate\":6.2},{\"date\":\"2001-09-01\",\"series\":\"Business services\",\"rate\":6.4},{\"date\":\"2001-10-01\",\"series\":\"Business services\",\"rate\":7.2},{\"date\":\"2001-11-01\",\"series\":\"Business services\",\"rate\":7.6},{\"date\":\"2001-12-01\",\"series\":\"Business services\",\"rate\":7.4},{\"date\":\"2002-01-01\",\"series\":\"Business services\",\"rate\":8.9},{\"date\":\"2002-02-01\",\"series\":\"Business services\",\"rate\":7.7},{\"date\":\"2002-03-01\",\"series\":\"Business services\",\"rate\":7.5},{\"date\":\"2002-04-01\",\"series\":\"Business services\",\"rate\":7.3},{\"date\":\"2002-05-01\",\"series\":\"Business services\",\"rate\":7.7},{\"date\":\"2002-06-01\",\"series\":\"Business services\",\"rate\":8.2},{\"date\":\"2002-07-01\",\"series\":\"Business services\",\"rate\":8.2},{\"date\":\"2002-08-01\",\"series\":\"Business services\",\"rate\":7.2},{\"date\":\"2002-09-01\",\"series\":\"Business services\",\"rate\":7.8},{\"date\":\"2002-10-01\",\"series\":\"Business services\",\"rate\":7.5},{\"date\":\"2002-11-01\",\"series\":\"Business services\",\"rate\":8.2},{\"date\":\"2002-12-01\",\"series\":\"Business services\",\"rate\":8.3},{\"date\":\"2003-01-01\",\"series\":\"Business services\",\"rate\":8.9},{\"date\":\"2003-02-01\",\"series\":\"Business services\",\"rate\":8.9},{\"date\":\"2003-03-01\",\"series\":\"Business services\",\"rate\":9.1},{\"date\":\"2003-04-01\",\"series\":\"Business services\",\"rate\":8.3},{\"date\":\"2003-05-01\",\"series\":\"Business services\",\"rate\":8.4},{\"date\":\"2003-06-01\",\"series\":\"Business services\",\"rate\":8.5},{\"date\":\"2003-07-01\",\"series\":\"Business services\",\"rate\":8.2},{\"date\":\"2003-08-01\",\"series\":\"Business services\",\"rate\":7.2},{\"date\":\"2003-09-01\",\"series\":\"Business services\",\"rate\":8},{\"date\":\"2003-10-01\",\"series\":\"Business services\",\"rate\":8.1},{\"date\":\"2003-11-01\",\"series\":\"Business services\",\"rate\":7.7},{\"date\":\"2003-12-01\",\"series\":\"Business services\",\"rate\":7.6},{\"date\":\"2004-01-01\",\"series\":\"Business services\",\"rate\":8.7},{\"date\":\"2004-02-01\",\"series\":\"Business services\",\"rate\":7.7},{\"date\":\"2004-03-01\",\"series\":\"Business services\",\"rate\":7.9},{\"date\":\"2004-04-01\",\"series\":\"Business services\",\"rate\":6},{\"date\":\"2004-05-01\",\"series\":\"Business services\",\"rate\":6.5},{\"date\":\"2004-06-01\",\"series\":\"Business services\",\"rate\":6.5},{\"date\":\"2004-07-01\",\"series\":\"Business services\",\"rate\":6.2},{\"date\":\"2004-08-01\",\"series\":\"Business services\",\"rate\":6.7},{\"date\":\"2004-09-01\",\"series\":\"Business services\",\"rate\":5.9},{\"date\":\"2004-10-01\",\"series\":\"Business services\",\"rate\":6.2},{\"date\":\"2004-11-01\",\"series\":\"Business services\",\"rate\":6.8},{\"date\":\"2004-12-01\",\"series\":\"Business services\",\"rate\":6.9},{\"date\":\"2005-01-01\",\"series\":\"Business services\",\"rate\":7.6},{\"date\":\"2005-02-01\",\"series\":\"Business services\",\"rate\":7.2},{\"date\":\"2005-03-01\",\"series\":\"Business services\",\"rate\":6.5},{\"date\":\"2005-04-01\",\"series\":\"Business services\",\"rate\":5.7},{\"date\":\"2005-05-01\",\"series\":\"Business services\",\"rate\":5.9},{\"date\":\"2005-06-01\",\"series\":\"Business services\",\"rate\":5.8},{\"date\":\"2005-07-01\",\"series\":\"Business services\",\"rate\":6.3},{\"date\":\"2005-08-01\",\"series\":\"Business services\",\"rate\":5.7},{\"date\":\"2005-09-01\",\"series\":\"Business services\",\"rate\":6.7},{\"date\":\"2005-10-01\",\"series\":\"Business services\",\"rate\":5.8},{\"date\":\"2005-11-01\",\"series\":\"Business services\",\"rate\":5.5},{\"date\":\"2005-12-01\",\"series\":\"Business services\",\"rate\":6.1},{\"date\":\"2006-01-01\",\"series\":\"Business services\",\"rate\":6.5},{\"date\":\"2006-02-01\",\"series\":\"Business services\",\"rate\":6.5},{\"date\":\"2006-03-01\",\"series\":\"Business services\",\"rate\":6.3},{\"date\":\"2006-04-01\",\"series\":\"Business services\",\"rate\":4.9},{\"date\":\"2006-05-01\",\"series\":\"Business services\",\"rate\":5.3},{\"date\":\"2006-06-01\",\"series\":\"Business services\",\"rate\":5.7},{\"date\":\"2006-07-01\",\"series\":\"Business services\",\"rate\":5.5},{\"date\":\"2006-08-01\",\"series\":\"Business services\",\"rate\":5.1},{\"date\":\"2006-09-01\",\"series\":\"Business services\",\"rate\":5.6},{\"date\":\"2006-10-01\",\"series\":\"Business services\",\"rate\":5.6},{\"date\":\"2006-11-01\",\"series\":\"Business services\",\"rate\":4.9},{\"date\":\"2006-12-01\",\"series\":\"Business services\",\"rate\":5.9},{\"date\":\"2007-01-01\",\"series\":\"Business services\",\"rate\":6.5},{\"date\":\"2007-02-01\",\"series\":\"Business services\",\"rate\":6},{\"date\":\"2007-03-01\",\"series\":\"Business services\",\"rate\":5.7},{\"date\":\"2007-04-01\",\"series\":\"Business services\",\"rate\":5},{\"date\":\"2007-05-01\",\"series\":\"Business services\",\"rate\":5.4},{\"date\":\"2007-06-01\",\"series\":\"Business services\",\"rate\":5.2},{\"date\":\"2007-07-01\",\"series\":\"Business services\",\"rate\":5.2},{\"date\":\"2007-08-01\",\"series\":\"Business services\",\"rate\":4.9},{\"date\":\"2007-09-01\",\"series\":\"Business services\",\"rate\":4.7},{\"date\":\"2007-10-01\",\"series\":\"Business services\",\"rate\":4.8},{\"date\":\"2007-11-01\",\"series\":\"Business services\",\"rate\":4.8},{\"date\":\"2007-12-01\",\"series\":\"Business services\",\"rate\":5.7},{\"date\":\"2008-01-01\",\"series\":\"Business services\",\"rate\":6.4},{\"date\":\"2008-02-01\",\"series\":\"Business services\",\"rate\":6.2},{\"date\":\"2008-03-01\",\"series\":\"Business services\",\"rate\":6.2},{\"date\":\"2008-04-01\",\"series\":\"Business services\",\"rate\":5.3},{\"date\":\"2008-05-01\",\"series\":\"Business services\",\"rate\":5.9},{\"date\":\"2008-06-01\",\"series\":\"Business services\",\"rate\":6.2},{\"date\":\"2008-07-01\",\"series\":\"Business services\",\"rate\":6.1},{\"date\":\"2008-08-01\",\"series\":\"Business services\",\"rate\":6.9},{\"date\":\"2008-09-01\",\"series\":\"Business services\",\"rate\":6.9},{\"date\":\"2008-10-01\",\"series\":\"Business services\",\"rate\":7.5},{\"date\":\"2008-11-01\",\"series\":\"Business services\",\"rate\":7},{\"date\":\"2008-12-01\",\"series\":\"Business services\",\"rate\":8.1},{\"date\":\"2009-01-01\",\"series\":\"Business services\",\"rate\":10.4},{\"date\":\"2009-02-01\",\"series\":\"Business services\",\"rate\":10.8},{\"date\":\"2009-03-01\",\"series\":\"Business services\",\"rate\":11.4},{\"date\":\"2009-04-01\",\"series\":\"Business services\",\"rate\":10.4},{\"date\":\"2009-05-01\",\"series\":\"Business services\",\"rate\":10.9},{\"date\":\"2009-06-01\",\"series\":\"Business services\",\"rate\":11.3},{\"date\":\"2009-07-01\",\"series\":\"Business services\",\"rate\":10.9},{\"date\":\"2009-08-01\",\"series\":\"Business services\",\"rate\":11},{\"date\":\"2009-09-01\",\"series\":\"Business services\",\"rate\":11.3},{\"date\":\"2009-10-01\",\"series\":\"Business services\",\"rate\":10.3},{\"date\":\"2009-11-01\",\"series\":\"Business services\",\"rate\":10.6},{\"date\":\"2009-12-01\",\"series\":\"Business services\",\"rate\":10.3},{\"date\":\"2010-01-01\",\"series\":\"Business services\",\"rate\":11.1},{\"date\":\"2010-02-01\",\"series\":\"Business services\",\"rate\":12},{\"date\":\"2000-01-01\",\"series\":\"Education and Health\",\"rate\":2.3},{\"date\":\"2000-02-01\",\"series\":\"Education and Health\",\"rate\":2.2},{\"date\":\"2000-03-01\",\"series\":\"Education and Health\",\"rate\":2.5},{\"date\":\"2000-04-01\",\"series\":\"Education and Health\",\"rate\":2.1},{\"date\":\"2000-05-01\",\"series\":\"Education and Health\",\"rate\":2.7},{\"date\":\"2000-06-01\",\"series\":\"Education and Health\",\"rate\":2.9},{\"date\":\"2000-07-01\",\"series\":\"Education and Health\",\"rate\":3.1},{\"date\":\"2000-08-01\",\"series\":\"Education and Health\",\"rate\":2.9},{\"date\":\"2000-09-01\",\"series\":\"Education and Health\",\"rate\":2.6},{\"date\":\"2000-10-01\",\"series\":\"Education and Health\",\"rate\":2.1},{\"date\":\"2000-11-01\",\"series\":\"Education and Health\",\"rate\":2.2},{\"date\":\"2000-12-01\",\"series\":\"Education and Health\",\"rate\":1.8},{\"date\":\"2001-01-01\",\"series\":\"Education and Health\",\"rate\":2.6},{\"date\":\"2001-02-01\",\"series\":\"Education and Health\",\"rate\":2.6},{\"date\":\"2001-03-01\",\"series\":\"Education and Health\",\"rate\":2.8},{\"date\":\"2001-04-01\",\"series\":\"Education and Health\",\"rate\":2.1},{\"date\":\"2001-05-01\",\"series\":\"Education and Health\",\"rate\":2.4},{\"date\":\"2001-06-01\",\"series\":\"Education and Health\",\"rate\":3},{\"date\":\"2001-07-01\",\"series\":\"Education and Health\",\"rate\":3.1},{\"date\":\"2001-08-01\",\"series\":\"Education and Health\",\"rate\":3.7},{\"date\":\"2001-09-01\",\"series\":\"Education and Health\",\"rate\":2.8},{\"date\":\"2001-10-01\",\"series\":\"Education and Health\",\"rate\":2.9},{\"date\":\"2001-11-01\",\"series\":\"Education and Health\",\"rate\":3.1},{\"date\":\"2001-12-01\",\"series\":\"Education and Health\",\"rate\":2.9},{\"date\":\"2002-01-01\",\"series\":\"Education and Health\",\"rate\":3.5},{\"date\":\"2002-02-01\",\"series\":\"Education and Health\",\"rate\":3.5},{\"date\":\"2002-03-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2002-04-01\",\"series\":\"Education and Health\",\"rate\":2.9},{\"date\":\"2002-05-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2002-06-01\",\"series\":\"Education and Health\",\"rate\":3.9},{\"date\":\"2002-07-01\",\"series\":\"Education and Health\",\"rate\":4},{\"date\":\"2002-08-01\",\"series\":\"Education and Health\",\"rate\":3.9},{\"date\":\"2002-09-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2002-10-01\",\"series\":\"Education and Health\",\"rate\":3},{\"date\":\"2002-11-01\",\"series\":\"Education and Health\",\"rate\":2.8},{\"date\":\"2002-12-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2003-01-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2003-02-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2003-03-01\",\"series\":\"Education and Health\",\"rate\":2.9},{\"date\":\"2003-04-01\",\"series\":\"Education and Health\",\"rate\":3.4},{\"date\":\"2003-05-01\",\"series\":\"Education and Health\",\"rate\":3.5},{\"date\":\"2003-06-01\",\"series\":\"Education and Health\",\"rate\":4.4},{\"date\":\"2003-07-01\",\"series\":\"Education and Health\",\"rate\":4},{\"date\":\"2003-08-01\",\"series\":\"Education and Health\",\"rate\":4.3},{\"date\":\"2003-09-01\",\"series\":\"Education and Health\",\"rate\":3.7},{\"date\":\"2003-10-01\",\"series\":\"Education and Health\",\"rate\":3.6},{\"date\":\"2003-11-01\",\"series\":\"Education and Health\",\"rate\":3.8},{\"date\":\"2003-12-01\",\"series\":\"Education and Health\",\"rate\":3.5},{\"date\":\"2004-01-01\",\"series\":\"Education and Health\",\"rate\":3.7},{\"date\":\"2004-02-01\",\"series\":\"Education and Health\",\"rate\":3.4},{\"date\":\"2004-03-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2004-04-01\",\"series\":\"Education and Health\",\"rate\":3.3},{\"date\":\"2004-05-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2004-06-01\",\"series\":\"Education and Health\",\"rate\":4.2},{\"date\":\"2004-07-01\",\"series\":\"Education and Health\",\"rate\":4},{\"date\":\"2004-08-01\",\"series\":\"Education and Health\",\"rate\":3.7},{\"date\":\"2004-09-01\",\"series\":\"Education and Health\",\"rate\":3.3},{\"date\":\"2004-10-01\",\"series\":\"Education and Health\",\"rate\":2.9},{\"date\":\"2004-11-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2004-12-01\",\"series\":\"Education and Health\",\"rate\":3.1},{\"date\":\"2005-01-01\",\"series\":\"Education and Health\",\"rate\":3.4},{\"date\":\"2005-02-01\",\"series\":\"Education and Health\",\"rate\":3.4},{\"date\":\"2005-03-01\",\"series\":\"Education and Health\",\"rate\":3.4},{\"date\":\"2005-04-01\",\"series\":\"Education and Health\",\"rate\":3.3},{\"date\":\"2005-05-01\",\"series\":\"Education and Health\",\"rate\":3.6},{\"date\":\"2005-06-01\",\"series\":\"Education and Health\",\"rate\":3.6},{\"date\":\"2005-07-01\",\"series\":\"Education and Health\",\"rate\":3.5},{\"date\":\"2005-08-01\",\"series\":\"Education and Health\",\"rate\":3.5},{\"date\":\"2005-09-01\",\"series\":\"Education and Health\",\"rate\":3.5},{\"date\":\"2005-10-01\",\"series\":\"Education and Health\",\"rate\":3.4},{\"date\":\"2005-11-01\",\"series\":\"Education and Health\",\"rate\":3.6},{\"date\":\"2005-12-01\",\"series\":\"Education and Health\",\"rate\":2.8},{\"date\":\"2006-01-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2006-02-01\",\"series\":\"Education and Health\",\"rate\":2.8},{\"date\":\"2006-03-01\",\"series\":\"Education and Health\",\"rate\":3},{\"date\":\"2006-04-01\",\"series\":\"Education and Health\",\"rate\":3},{\"date\":\"2006-05-01\",\"series\":\"Education and Health\",\"rate\":2.9},{\"date\":\"2006-06-01\",\"series\":\"Education and Health\",\"rate\":3.3},{\"date\":\"2006-07-01\",\"series\":\"Education and Health\",\"rate\":3.5},{\"date\":\"2006-08-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2006-09-01\",\"series\":\"Education and Health\",\"rate\":3},{\"date\":\"2006-10-01\",\"series\":\"Education and Health\",\"rate\":2.8},{\"date\":\"2006-11-01\",\"series\":\"Education and Health\",\"rate\":2.8},{\"date\":\"2006-12-01\",\"series\":\"Education and Health\",\"rate\":2.6},{\"date\":\"2007-01-01\",\"series\":\"Education and Health\",\"rate\":2.9},{\"date\":\"2007-02-01\",\"series\":\"Education and Health\",\"rate\":2.5},{\"date\":\"2007-03-01\",\"series\":\"Education and Health\",\"rate\":2.5},{\"date\":\"2007-04-01\",\"series\":\"Education and Health\",\"rate\":2.9},{\"date\":\"2007-05-01\",\"series\":\"Education and Health\",\"rate\":3.3},{\"date\":\"2007-06-01\",\"series\":\"Education and Health\",\"rate\":3.4},{\"date\":\"2007-07-01\",\"series\":\"Education and Health\",\"rate\":3.5},{\"date\":\"2007-08-01\",\"series\":\"Education and Health\",\"rate\":3.4},{\"date\":\"2007-09-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2007-10-01\",\"series\":\"Education and Health\",\"rate\":2.7},{\"date\":\"2007-11-01\",\"series\":\"Education and Health\",\"rate\":2.7},{\"date\":\"2007-12-01\",\"series\":\"Education and Health\",\"rate\":2.6},{\"date\":\"2008-01-01\",\"series\":\"Education and Health\",\"rate\":2.9},{\"date\":\"2008-02-01\",\"series\":\"Education and Health\",\"rate\":2.9},{\"date\":\"2008-03-01\",\"series\":\"Education and Health\",\"rate\":3.1},{\"date\":\"2008-04-01\",\"series\":\"Education and Health\",\"rate\":2.8},{\"date\":\"2008-05-01\",\"series\":\"Education and Health\",\"rate\":3.2},{\"date\":\"2008-06-01\",\"series\":\"Education and Health\",\"rate\":3.4},{\"date\":\"2008-07-01\",\"series\":\"Education and Health\",\"rate\":3.9},{\"date\":\"2008-08-01\",\"series\":\"Education and Health\",\"rate\":4.3},{\"date\":\"2008-09-01\",\"series\":\"Education and Health\",\"rate\":4.1},{\"date\":\"2008-10-01\",\"series\":\"Education and Health\",\"rate\":3.9},{\"date\":\"2008-11-01\",\"series\":\"Education and Health\",\"rate\":3.6},{\"date\":\"2008-12-01\",\"series\":\"Education and Health\",\"rate\":3.8},{\"date\":\"2009-01-01\",\"series\":\"Education and Health\",\"rate\":3.8},{\"date\":\"2009-02-01\",\"series\":\"Education and Health\",\"rate\":4.1},{\"date\":\"2009-03-01\",\"series\":\"Education and Health\",\"rate\":4.5},{\"date\":\"2009-04-01\",\"series\":\"Education and Health\",\"rate\":4.6},{\"date\":\"2009-05-01\",\"series\":\"Education and Health\",\"rate\":4.9},{\"date\":\"2009-06-01\",\"series\":\"Education and Health\",\"rate\":6.1},{\"date\":\"2009-07-01\",\"series\":\"Education and Health\",\"rate\":6.1},{\"date\":\"2009-08-01\",\"series\":\"Education and Health\",\"rate\":6},{\"date\":\"2009-09-01\",\"series\":\"Education and Health\",\"rate\":6},{\"date\":\"2009-10-01\",\"series\":\"Education and Health\",\"rate\":6},{\"date\":\"2009-11-01\",\"series\":\"Education and Health\",\"rate\":5.5},{\"date\":\"2009-12-01\",\"series\":\"Education and Health\",\"rate\":5.6},{\"date\":\"2010-01-01\",\"series\":\"Education and Health\",\"rate\":5.5},{\"date\":\"2010-02-01\",\"series\":\"Education and Health\",\"rate\":5.6},{\"date\":\"2000-01-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.5},{\"date\":\"2000-02-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.5},{\"date\":\"2000-03-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.4},{\"date\":\"2000-04-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.1},{\"date\":\"2000-05-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.2},{\"date\":\"2000-06-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.3},{\"date\":\"2000-07-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.8},{\"date\":\"2000-08-01\",\"series\":\"Leisure and hospitality\",\"rate\":6},{\"date\":\"2000-09-01\",\"series\":\"Leisure and hospitality\",\"rate\":5.9},{\"date\":\"2000-10-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.5},{\"date\":\"2000-11-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.5},{\"date\":\"2000-12-01\",\"series\":\"Leisure and hospitality\",\"rate\":5.9},{\"date\":\"2001-01-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.7},{\"date\":\"2001-02-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.5},{\"date\":\"2001-03-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.4},{\"date\":\"2001-04-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.8},{\"date\":\"2001-05-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.7},{\"date\":\"2001-06-01\",\"series\":\"Leisure and hospitality\",\"rate\":7},{\"date\":\"2001-07-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.8},{\"date\":\"2001-08-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.8},{\"date\":\"2001-09-01\",\"series\":\"Leisure and hospitality\",\"rate\":8},{\"date\":\"2001-10-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.3},{\"date\":\"2001-11-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.5},{\"date\":\"2001-12-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.5},{\"date\":\"2002-01-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.6},{\"date\":\"2002-02-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.7},{\"date\":\"2002-03-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.5},{\"date\":\"2002-04-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.4},{\"date\":\"2002-05-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.6},{\"date\":\"2002-06-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.5},{\"date\":\"2002-07-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.2},{\"date\":\"2002-08-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.5},{\"date\":\"2002-09-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.9},{\"date\":\"2002-10-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.5},{\"date\":\"2002-11-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.9},{\"date\":\"2002-12-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.2},{\"date\":\"2003-01-01\",\"series\":\"Leisure and hospitality\",\"rate\":9.3},{\"date\":\"2003-02-01\",\"series\":\"Leisure and hospitality\",\"rate\":10},{\"date\":\"2003-03-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.9},{\"date\":\"2003-04-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.5},{\"date\":\"2003-05-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.9},{\"date\":\"2003-06-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.6},{\"date\":\"2003-07-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.4},{\"date\":\"2003-08-01\",\"series\":\"Leisure and hospitality\",\"rate\":9},{\"date\":\"2003-09-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.8},{\"date\":\"2003-10-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.3},{\"date\":\"2003-11-01\",\"series\":\"Leisure and hospitality\",\"rate\":9},{\"date\":\"2003-12-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.2},{\"date\":\"2004-01-01\",\"series\":\"Leisure and hospitality\",\"rate\":10},{\"date\":\"2004-02-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.9},{\"date\":\"2004-03-01\",\"series\":\"Leisure and hospitality\",\"rate\":9},{\"date\":\"2004-04-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.9},{\"date\":\"2004-05-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.1},{\"date\":\"2004-06-01\",\"series\":\"Leisure and hospitality\",\"rate\":9.6},{\"date\":\"2004-07-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.8},{\"date\":\"2004-08-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.4},{\"date\":\"2004-09-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.5},{\"date\":\"2004-10-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.3},{\"date\":\"2004-11-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.9},{\"date\":\"2004-12-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.4},{\"date\":\"2005-01-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.7},{\"date\":\"2005-02-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.8},{\"date\":\"2005-03-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.3},{\"date\":\"2005-04-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.7},{\"date\":\"2005-05-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.7},{\"date\":\"2005-06-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.6},{\"date\":\"2005-07-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.4},{\"date\":\"2005-08-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.8},{\"date\":\"2005-09-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.3},{\"date\":\"2005-10-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.8},{\"date\":\"2005-11-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.1},{\"date\":\"2005-12-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.9},{\"date\":\"2006-01-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.1},{\"date\":\"2006-02-01\",\"series\":\"Leisure and hospitality\",\"rate\":9.1},{\"date\":\"2006-03-01\",\"series\":\"Leisure and hospitality\",\"rate\":8},{\"date\":\"2006-04-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.6},{\"date\":\"2006-05-01\",\"series\":\"Leisure and hospitality\",\"rate\":7},{\"date\":\"2006-06-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.4},{\"date\":\"2006-07-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.8},{\"date\":\"2006-08-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.9},{\"date\":\"2006-09-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.9},{\"date\":\"2006-10-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.6},{\"date\":\"2006-11-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.1},{\"date\":\"2006-12-01\",\"series\":\"Leisure and hospitality\",\"rate\":5.9},{\"date\":\"2007-01-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.8},{\"date\":\"2007-02-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.4},{\"date\":\"2007-03-01\",\"series\":\"Leisure and hospitality\",\"rate\":7},{\"date\":\"2007-04-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.9},{\"date\":\"2007-05-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.8},{\"date\":\"2007-06-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.2},{\"date\":\"2007-07-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.3},{\"date\":\"2007-08-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.1},{\"date\":\"2007-09-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.4},{\"date\":\"2007-10-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.5},{\"date\":\"2007-11-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.1},{\"date\":\"2007-12-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.9},{\"date\":\"2008-01-01\",\"series\":\"Leisure and hospitality\",\"rate\":9.4},{\"date\":\"2008-02-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.5},{\"date\":\"2008-03-01\",\"series\":\"Leisure and hospitality\",\"rate\":7.6},{\"date\":\"2008-04-01\",\"series\":\"Leisure and hospitality\",\"rate\":6.9},{\"date\":\"2008-05-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.4},{\"date\":\"2008-06-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.9},{\"date\":\"2008-07-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.8},{\"date\":\"2008-08-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.7},{\"date\":\"2008-09-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.2},{\"date\":\"2008-10-01\",\"series\":\"Leisure and hospitality\",\"rate\":8.9},{\"date\":\"2008-11-01\",\"series\":\"Leisure and hospitality\",\"rate\":9.9},{\"date\":\"2008-12-01\",\"series\":\"Leisure and hospitality\",\"rate\":9.5},{\"date\":\"2009-01-01\",\"series\":\"Leisure and hospitality\",\"rate\":11.5},{\"date\":\"2009-02-01\",\"series\":\"Leisure and hospitality\",\"rate\":11.4},{\"date\":\"2009-03-01\",\"series\":\"Leisure and hospitality\",\"rate\":11.6},{\"date\":\"2009-04-01\",\"series\":\"Leisure and hospitality\",\"rate\":10.2},{\"date\":\"2009-05-01\",\"series\":\"Leisure and hospitality\",\"rate\":11.9},{\"date\":\"2009-06-01\",\"series\":\"Leisure and hospitality\",\"rate\":12.1},{\"date\":\"2009-07-01\",\"series\":\"Leisure and hospitality\",\"rate\":11.2},{\"date\":\"2009-08-01\",\"series\":\"Leisure and hospitality\",\"rate\":12},{\"date\":\"2009-09-01\",\"series\":\"Leisure and hospitality\",\"rate\":11.4},{\"date\":\"2009-10-01\",\"series\":\"Leisure and hospitality\",\"rate\":12.4},{\"date\":\"2009-11-01\",\"series\":\"Leisure and hospitality\",\"rate\":11.9},{\"date\":\"2009-12-01\",\"series\":\"Leisure and hospitality\",\"rate\":12.6},{\"date\":\"2010-01-01\",\"series\":\"Leisure and hospitality\",\"rate\":14.2},{\"date\":\"2010-02-01\",\"series\":\"Leisure and hospitality\",\"rate\":12.7},{\"date\":\"2000-01-01\",\"series\":\"Other\",\"rate\":4.9},{\"date\":\"2000-02-01\",\"series\":\"Other\",\"rate\":4.1},{\"date\":\"2000-03-01\",\"series\":\"Other\",\"rate\":4.3},{\"date\":\"2000-04-01\",\"series\":\"Other\",\"rate\":4.2},{\"date\":\"2000-05-01\",\"series\":\"Other\",\"rate\":4.5},{\"date\":\"2000-06-01\",\"series\":\"Other\",\"rate\":3.9},{\"date\":\"2000-07-01\",\"series\":\"Other\",\"rate\":3.7},{\"date\":\"2000-08-01\",\"series\":\"Other\",\"rate\":3.5},{\"date\":\"2000-09-01\",\"series\":\"Other\",\"rate\":4},{\"date\":\"2000-10-01\",\"series\":\"Other\",\"rate\":2.9},{\"date\":\"2000-11-01\",\"series\":\"Other\",\"rate\":3.8},{\"date\":\"2000-12-01\",\"series\":\"Other\",\"rate\":2.9},{\"date\":\"2001-01-01\",\"series\":\"Other\",\"rate\":3.4},{\"date\":\"2001-02-01\",\"series\":\"Other\",\"rate\":4.2},{\"date\":\"2001-03-01\",\"series\":\"Other\",\"rate\":3.4},{\"date\":\"2001-04-01\",\"series\":\"Other\",\"rate\":3.8},{\"date\":\"2001-05-01\",\"series\":\"Other\",\"rate\":3.2},{\"date\":\"2001-06-01\",\"series\":\"Other\",\"rate\":4.6},{\"date\":\"2001-07-01\",\"series\":\"Other\",\"rate\":4.1},{\"date\":\"2001-08-01\",\"series\":\"Other\",\"rate\":4.5},{\"date\":\"2001-09-01\",\"series\":\"Other\",\"rate\":4},{\"date\":\"2001-10-01\",\"series\":\"Other\",\"rate\":4.1},{\"date\":\"2001-11-01\",\"series\":\"Other\",\"rate\":4.2},{\"date\":\"2001-12-01\",\"series\":\"Other\",\"rate\":4.5},{\"date\":\"2002-01-01\",\"series\":\"Other\",\"rate\":5.1},{\"date\":\"2002-02-01\",\"series\":\"Other\",\"rate\":5.6},{\"date\":\"2002-03-01\",\"series\":\"Other\",\"rate\":5.5},{\"date\":\"2002-04-01\",\"series\":\"Other\",\"rate\":4.6},{\"date\":\"2002-05-01\",\"series\":\"Other\",\"rate\":4.6},{\"date\":\"2002-06-01\",\"series\":\"Other\",\"rate\":5.5},{\"date\":\"2002-07-01\",\"series\":\"Other\",\"rate\":5.8},{\"date\":\"2002-08-01\",\"series\":\"Other\",\"rate\":6},{\"date\":\"2002-09-01\",\"series\":\"Other\",\"rate\":4.8},{\"date\":\"2002-10-01\",\"series\":\"Other\",\"rate\":4.6},{\"date\":\"2002-11-01\",\"series\":\"Other\",\"rate\":4.9},{\"date\":\"2002-12-01\",\"series\":\"Other\",\"rate\":4.2},{\"date\":\"2003-01-01\",\"series\":\"Other\",\"rate\":5.3},{\"date\":\"2003-02-01\",\"series\":\"Other\",\"rate\":5.7},{\"date\":\"2003-03-01\",\"series\":\"Other\",\"rate\":6.1},{\"date\":\"2003-04-01\",\"series\":\"Other\",\"rate\":5.5},{\"date\":\"2003-05-01\",\"series\":\"Other\",\"rate\":5.7},{\"date\":\"2003-06-01\",\"series\":\"Other\",\"rate\":5.9},{\"date\":\"2003-07-01\",\"series\":\"Other\",\"rate\":6.6},{\"date\":\"2003-08-01\",\"series\":\"Other\",\"rate\":6.1},{\"date\":\"2003-09-01\",\"series\":\"Other\",\"rate\":5.5},{\"date\":\"2003-10-01\",\"series\":\"Other\",\"rate\":6.1},{\"date\":\"2003-11-01\",\"series\":\"Other\",\"rate\":5.8},{\"date\":\"2003-12-01\",\"series\":\"Other\",\"rate\":4.5},{\"date\":\"2004-01-01\",\"series\":\"Other\",\"rate\":5.3},{\"date\":\"2004-02-01\",\"series\":\"Other\",\"rate\":5.9},{\"date\":\"2004-03-01\",\"series\":\"Other\",\"rate\":5.9},{\"date\":\"2004-04-01\",\"series\":\"Other\",\"rate\":5.6},{\"date\":\"2004-05-01\",\"series\":\"Other\",\"rate\":5.1},{\"date\":\"2004-06-01\",\"series\":\"Other\",\"rate\":5.4},{\"date\":\"2004-07-01\",\"series\":\"Other\",\"rate\":5.6},{\"date\":\"2004-08-01\",\"series\":\"Other\",\"rate\":5.6},{\"date\":\"2004-09-01\",\"series\":\"Other\",\"rate\":4.9},{\"date\":\"2004-10-01\",\"series\":\"Other\",\"rate\":4.8},{\"date\":\"2004-11-01\",\"series\":\"Other\",\"rate\":4.8},{\"date\":\"2004-12-01\",\"series\":\"Other\",\"rate\":4.3},{\"date\":\"2005-01-01\",\"series\":\"Other\",\"rate\":4.7},{\"date\":\"2005-02-01\",\"series\":\"Other\",\"rate\":5.3},{\"date\":\"2005-03-01\",\"series\":\"Other\",\"rate\":5},{\"date\":\"2005-04-01\",\"series\":\"Other\",\"rate\":4.9},{\"date\":\"2005-05-01\",\"series\":\"Other\",\"rate\":5},{\"date\":\"2005-06-01\",\"series\":\"Other\",\"rate\":4.6},{\"date\":\"2005-07-01\",\"series\":\"Other\",\"rate\":4.2},{\"date\":\"2005-08-01\",\"series\":\"Other\",\"rate\":4.8},{\"date\":\"2005-09-01\",\"series\":\"Other\",\"rate\":4.9},{\"date\":\"2005-10-01\",\"series\":\"Other\",\"rate\":5},{\"date\":\"2005-11-01\",\"series\":\"Other\",\"rate\":4.9},{\"date\":\"2005-12-01\",\"series\":\"Other\",\"rate\":4.3},{\"date\":\"2006-01-01\",\"series\":\"Other\",\"rate\":4.9},{\"date\":\"2006-02-01\",\"series\":\"Other\",\"rate\":4.4},{\"date\":\"2006-03-01\",\"series\":\"Other\",\"rate\":4.6},{\"date\":\"2006-04-01\",\"series\":\"Other\",\"rate\":4.1},{\"date\":\"2006-05-01\",\"series\":\"Other\",\"rate\":4.2},{\"date\":\"2006-06-01\",\"series\":\"Other\",\"rate\":4.3},{\"date\":\"2006-07-01\",\"series\":\"Other\",\"rate\":4.7},{\"date\":\"2006-08-01\",\"series\":\"Other\",\"rate\":5.3},{\"date\":\"2006-09-01\",\"series\":\"Other\",\"rate\":5},{\"date\":\"2006-10-01\",\"series\":\"Other\",\"rate\":4.4},{\"date\":\"2006-11-01\",\"series\":\"Other\",\"rate\":5},{\"date\":\"2006-12-01\",\"series\":\"Other\",\"rate\":5.2},{\"date\":\"2007-01-01\",\"series\":\"Other\",\"rate\":4.7},{\"date\":\"2007-02-01\",\"series\":\"Other\",\"rate\":4.3},{\"date\":\"2007-03-01\",\"series\":\"Other\",\"rate\":3.7},{\"date\":\"2007-04-01\",\"series\":\"Other\",\"rate\":3.6},{\"date\":\"2007-05-01\",\"series\":\"Other\",\"rate\":3.9},{\"date\":\"2007-06-01\",\"series\":\"Other\",\"rate\":4},{\"date\":\"2007-07-01\",\"series\":\"Other\",\"rate\":3.8},{\"date\":\"2007-08-01\",\"series\":\"Other\",\"rate\":3.8},{\"date\":\"2007-09-01\",\"series\":\"Other\",\"rate\":4.2},{\"date\":\"2007-10-01\",\"series\":\"Other\",\"rate\":3},{\"date\":\"2007-11-01\",\"series\":\"Other\",\"rate\":4.1},{\"date\":\"2007-12-01\",\"series\":\"Other\",\"rate\":3.9},{\"date\":\"2008-01-01\",\"series\":\"Other\",\"rate\":4.4},{\"date\":\"2008-02-01\",\"series\":\"Other\",\"rate\":5.1},{\"date\":\"2008-03-01\",\"series\":\"Other\",\"rate\":4.6},{\"date\":\"2008-04-01\",\"series\":\"Other\",\"rate\":4},{\"date\":\"2008-05-01\",\"series\":\"Other\",\"rate\":4.4},{\"date\":\"2008-06-01\",\"series\":\"Other\",\"rate\":5},{\"date\":\"2008-07-01\",\"series\":\"Other\",\"rate\":5.2},{\"date\":\"2008-08-01\",\"series\":\"Other\",\"rate\":6.3},{\"date\":\"2008-09-01\",\"series\":\"Other\",\"rate\":5.8},{\"date\":\"2008-10-01\",\"series\":\"Other\",\"rate\":5.3},{\"date\":\"2008-11-01\",\"series\":\"Other\",\"rate\":7},{\"date\":\"2008-12-01\",\"series\":\"Other\",\"rate\":6.1},{\"date\":\"2009-01-01\",\"series\":\"Other\",\"rate\":7.1},{\"date\":\"2009-02-01\",\"series\":\"Other\",\"rate\":7.3},{\"date\":\"2009-03-01\",\"series\":\"Other\",\"rate\":6},{\"date\":\"2009-04-01\",\"series\":\"Other\",\"rate\":6.4},{\"date\":\"2009-05-01\",\"series\":\"Other\",\"rate\":7.5},{\"date\":\"2009-06-01\",\"series\":\"Other\",\"rate\":8.4},{\"date\":\"2009-07-01\",\"series\":\"Other\",\"rate\":7.4},{\"date\":\"2009-08-01\",\"series\":\"Other\",\"rate\":8.2},{\"date\":\"2009-09-01\",\"series\":\"Other\",\"rate\":7.1},{\"date\":\"2009-10-01\",\"series\":\"Other\",\"rate\":8.5},{\"date\":\"2009-11-01\",\"series\":\"Other\",\"rate\":8},{\"date\":\"2009-12-01\",\"series\":\"Other\",\"rate\":8.2},{\"date\":\"2010-01-01\",\"series\":\"Other\",\"rate\":10},{\"date\":\"2010-02-01\",\"series\":\"Other\",\"rate\":9.9},{\"date\":\"2000-01-01\",\"series\":\"Agriculture\",\"rate\":10.3},{\"date\":\"2000-02-01\",\"series\":\"Agriculture\",\"rate\":11.5},{\"date\":\"2000-03-01\",\"series\":\"Agriculture\",\"rate\":10.4},{\"date\":\"2000-04-01\",\"series\":\"Agriculture\",\"rate\":8.9},{\"date\":\"2000-05-01\",\"series\":\"Agriculture\",\"rate\":5.1},{\"date\":\"2000-06-01\",\"series\":\"Agriculture\",\"rate\":6.7},{\"date\":\"2000-07-01\",\"series\":\"Agriculture\",\"rate\":5},{\"date\":\"2000-08-01\",\"series\":\"Agriculture\",\"rate\":7},{\"date\":\"2000-09-01\",\"series\":\"Agriculture\",\"rate\":8.2},{\"date\":\"2000-10-01\",\"series\":\"Agriculture\",\"rate\":8},{\"date\":\"2000-11-01\",\"series\":\"Agriculture\",\"rate\":13.3},{\"date\":\"2000-12-01\",\"series\":\"Agriculture\",\"rate\":13.9},{\"date\":\"2001-01-01\",\"series\":\"Agriculture\",\"rate\":13.8},{\"date\":\"2001-02-01\",\"series\":\"Agriculture\",\"rate\":15.1},{\"date\":\"2001-03-01\",\"series\":\"Agriculture\",\"rate\":19.2},{\"date\":\"2001-04-01\",\"series\":\"Agriculture\",\"rate\":10.4},{\"date\":\"2001-05-01\",\"series\":\"Agriculture\",\"rate\":7.7},{\"date\":\"2001-06-01\",\"series\":\"Agriculture\",\"rate\":9.7},{\"date\":\"2001-07-01\",\"series\":\"Agriculture\",\"rate\":7.6},{\"date\":\"2001-08-01\",\"series\":\"Agriculture\",\"rate\":9.3},{\"date\":\"2001-09-01\",\"series\":\"Agriculture\",\"rate\":7.2},{\"date\":\"2001-10-01\",\"series\":\"Agriculture\",\"rate\":8.7},{\"date\":\"2001-11-01\",\"series\":\"Agriculture\",\"rate\":11.6},{\"date\":\"2001-12-01\",\"series\":\"Agriculture\",\"rate\":15.1},{\"date\":\"2002-01-01\",\"series\":\"Agriculture\",\"rate\":14.8},{\"date\":\"2002-02-01\",\"series\":\"Agriculture\",\"rate\":14.8},{\"date\":\"2002-03-01\",\"series\":\"Agriculture\",\"rate\":19.6},{\"date\":\"2002-04-01\",\"series\":\"Agriculture\",\"rate\":10.8},{\"date\":\"2002-05-01\",\"series\":\"Agriculture\",\"rate\":6.8},{\"date\":\"2002-06-01\",\"series\":\"Agriculture\",\"rate\":6.3},{\"date\":\"2002-07-01\",\"series\":\"Agriculture\",\"rate\":7.3},{\"date\":\"2002-08-01\",\"series\":\"Agriculture\",\"rate\":9},{\"date\":\"2002-09-01\",\"series\":\"Agriculture\",\"rate\":6.3},{\"date\":\"2002-10-01\",\"series\":\"Agriculture\",\"rate\":6.6},{\"date\":\"2002-11-01\",\"series\":\"Agriculture\",\"rate\":11.1},{\"date\":\"2002-12-01\",\"series\":\"Agriculture\",\"rate\":9.8},{\"date\":\"2003-01-01\",\"series\":\"Agriculture\",\"rate\":13.2},{\"date\":\"2003-02-01\",\"series\":\"Agriculture\",\"rate\":14.7},{\"date\":\"2003-03-01\",\"series\":\"Agriculture\",\"rate\":12.9},{\"date\":\"2003-04-01\",\"series\":\"Agriculture\",\"rate\":12},{\"date\":\"2003-05-01\",\"series\":\"Agriculture\",\"rate\":10.2},{\"date\":\"2003-06-01\",\"series\":\"Agriculture\",\"rate\":6.9},{\"date\":\"2003-07-01\",\"series\":\"Agriculture\",\"rate\":8.2},{\"date\":\"2003-08-01\",\"series\":\"Agriculture\",\"rate\":10.7},{\"date\":\"2003-09-01\",\"series\":\"Agriculture\",\"rate\":6.2},{\"date\":\"2003-10-01\",\"series\":\"Agriculture\",\"rate\":8.5},{\"date\":\"2003-11-01\",\"series\":\"Agriculture\",\"rate\":10.3},{\"date\":\"2003-12-01\",\"series\":\"Agriculture\",\"rate\":10.9},{\"date\":\"2004-01-01\",\"series\":\"Agriculture\",\"rate\":15.1},{\"date\":\"2004-02-01\",\"series\":\"Agriculture\",\"rate\":14.2},{\"date\":\"2004-03-01\",\"series\":\"Agriculture\",\"rate\":12.7},{\"date\":\"2004-04-01\",\"series\":\"Agriculture\",\"rate\":8.3},{\"date\":\"2004-05-01\",\"series\":\"Agriculture\",\"rate\":7.4},{\"date\":\"2004-06-01\",\"series\":\"Agriculture\",\"rate\":7.6},{\"date\":\"2004-07-01\",\"series\":\"Agriculture\",\"rate\":10},{\"date\":\"2004-08-01\",\"series\":\"Agriculture\",\"rate\":7},{\"date\":\"2004-09-01\",\"series\":\"Agriculture\",\"rate\":6.4},{\"date\":\"2004-10-01\",\"series\":\"Agriculture\",\"rate\":7.7},{\"date\":\"2004-11-01\",\"series\":\"Agriculture\",\"rate\":10.5},{\"date\":\"2004-12-01\",\"series\":\"Agriculture\",\"rate\":14},{\"date\":\"2005-01-01\",\"series\":\"Agriculture\",\"rate\":13.2},{\"date\":\"2005-02-01\",\"series\":\"Agriculture\",\"rate\":9.9},{\"date\":\"2005-03-01\",\"series\":\"Agriculture\",\"rate\":11.8},{\"date\":\"2005-04-01\",\"series\":\"Agriculture\",\"rate\":6.9},{\"date\":\"2005-05-01\",\"series\":\"Agriculture\",\"rate\":5.3},{\"date\":\"2005-06-01\",\"series\":\"Agriculture\",\"rate\":5.2},{\"date\":\"2005-07-01\",\"series\":\"Agriculture\",\"rate\":4.7},{\"date\":\"2005-08-01\",\"series\":\"Agriculture\",\"rate\":7.1},{\"date\":\"2005-09-01\",\"series\":\"Agriculture\",\"rate\":9.5},{\"date\":\"2005-10-01\",\"series\":\"Agriculture\",\"rate\":6.7},{\"date\":\"2005-11-01\",\"series\":\"Agriculture\",\"rate\":9.6},{\"date\":\"2005-12-01\",\"series\":\"Agriculture\",\"rate\":11.1},{\"date\":\"2006-01-01\",\"series\":\"Agriculture\",\"rate\":11.5},{\"date\":\"2006-02-01\",\"series\":\"Agriculture\",\"rate\":11.8},{\"date\":\"2006-03-01\",\"series\":\"Agriculture\",\"rate\":9.8},{\"date\":\"2006-04-01\",\"series\":\"Agriculture\",\"rate\":6.2},{\"date\":\"2006-05-01\",\"series\":\"Agriculture\",\"rate\":6},{\"date\":\"2006-06-01\",\"series\":\"Agriculture\",\"rate\":2.4},{\"date\":\"2006-07-01\",\"series\":\"Agriculture\",\"rate\":3.6},{\"date\":\"2006-08-01\",\"series\":\"Agriculture\",\"rate\":5.3},{\"date\":\"2006-09-01\",\"series\":\"Agriculture\",\"rate\":5.9},{\"date\":\"2006-10-01\",\"series\":\"Agriculture\",\"rate\":5.8},{\"date\":\"2006-11-01\",\"series\":\"Agriculture\",\"rate\":9.6},{\"date\":\"2006-12-01\",\"series\":\"Agriculture\",\"rate\":10.4},{\"date\":\"2007-01-01\",\"series\":\"Agriculture\",\"rate\":10},{\"date\":\"2007-02-01\",\"series\":\"Agriculture\",\"rate\":9.6},{\"date\":\"2007-03-01\",\"series\":\"Agriculture\",\"rate\":9.7},{\"date\":\"2007-04-01\",\"series\":\"Agriculture\",\"rate\":5.7},{\"date\":\"2007-05-01\",\"series\":\"Agriculture\",\"rate\":5.1},{\"date\":\"2007-06-01\",\"series\":\"Agriculture\",\"rate\":4.5},{\"date\":\"2007-07-01\",\"series\":\"Agriculture\",\"rate\":3.1},{\"date\":\"2007-08-01\",\"series\":\"Agriculture\",\"rate\":4.7},{\"date\":\"2007-09-01\",\"series\":\"Agriculture\",\"rate\":4.3},{\"date\":\"2007-10-01\",\"series\":\"Agriculture\",\"rate\":4},{\"date\":\"2007-11-01\",\"series\":\"Agriculture\",\"rate\":6.6},{\"date\":\"2007-12-01\",\"series\":\"Agriculture\",\"rate\":7.5},{\"date\":\"2008-01-01\",\"series\":\"Agriculture\",\"rate\":9.5},{\"date\":\"2008-02-01\",\"series\":\"Agriculture\",\"rate\":10.9},{\"date\":\"2008-03-01\",\"series\":\"Agriculture\",\"rate\":13.2},{\"date\":\"2008-04-01\",\"series\":\"Agriculture\",\"rate\":8.6},{\"date\":\"2008-05-01\",\"series\":\"Agriculture\",\"rate\":7.4},{\"date\":\"2008-06-01\",\"series\":\"Agriculture\",\"rate\":6.1},{\"date\":\"2008-07-01\",\"series\":\"Agriculture\",\"rate\":8.5},{\"date\":\"2008-08-01\",\"series\":\"Agriculture\",\"rate\":7.6},{\"date\":\"2008-09-01\",\"series\":\"Agriculture\",\"rate\":5.8},{\"date\":\"2008-10-01\",\"series\":\"Agriculture\",\"rate\":7.1},{\"date\":\"2008-11-01\",\"series\":\"Agriculture\",\"rate\":9.5},{\"date\":\"2008-12-01\",\"series\":\"Agriculture\",\"rate\":17},{\"date\":\"2009-01-01\",\"series\":\"Agriculture\",\"rate\":18.7},{\"date\":\"2009-02-01\",\"series\":\"Agriculture\",\"rate\":18.8},{\"date\":\"2009-03-01\",\"series\":\"Agriculture\",\"rate\":19},{\"date\":\"2009-04-01\",\"series\":\"Agriculture\",\"rate\":13.5},{\"date\":\"2009-05-01\",\"series\":\"Agriculture\",\"rate\":10},{\"date\":\"2009-06-01\",\"series\":\"Agriculture\",\"rate\":12.3},{\"date\":\"2009-07-01\",\"series\":\"Agriculture\",\"rate\":12.1},{\"date\":\"2009-08-01\",\"series\":\"Agriculture\",\"rate\":13.1},{\"date\":\"2009-09-01\",\"series\":\"Agriculture\",\"rate\":11.1},{\"date\":\"2009-10-01\",\"series\":\"Agriculture\",\"rate\":11.8},{\"date\":\"2009-11-01\",\"series\":\"Agriculture\",\"rate\":12.6},{\"date\":\"2009-12-01\",\"series\":\"Agriculture\",\"rate\":19.7},{\"date\":\"2010-01-01\",\"series\":\"Agriculture\",\"rate\":21.3},{\"date\":\"2010-02-01\",\"series\":\"Agriculture\",\"rate\":18.8},{\"date\":\"2000-01-01\",\"series\":\"Self-employed\",\"rate\":2.3},{\"date\":\"2000-02-01\",\"series\":\"Self-employed\",\"rate\":2.5},{\"date\":\"2000-03-01\",\"series\":\"Self-employed\",\"rate\":2},{\"date\":\"2000-04-01\",\"series\":\"Self-employed\",\"rate\":2},{\"date\":\"2000-05-01\",\"series\":\"Self-employed\",\"rate\":1.9},{\"date\":\"2000-06-01\",\"series\":\"Self-employed\",\"rate\":1.8},{\"date\":\"2000-07-01\",\"series\":\"Self-employed\",\"rate\":2.1},{\"date\":\"2000-08-01\",\"series\":\"Self-employed\",\"rate\":1.7},{\"date\":\"2000-09-01\",\"series\":\"Self-employed\",\"rate\":2},{\"date\":\"2000-10-01\",\"series\":\"Self-employed\",\"rate\":2.2},{\"date\":\"2000-11-01\",\"series\":\"Self-employed\",\"rate\":2.7},{\"date\":\"2000-12-01\",\"series\":\"Self-employed\",\"rate\":1.8},{\"date\":\"2001-01-01\",\"series\":\"Self-employed\",\"rate\":1.9},{\"date\":\"2001-02-01\",\"series\":\"Self-employed\",\"rate\":2},{\"date\":\"2001-03-01\",\"series\":\"Self-employed\",\"rate\":1.7},{\"date\":\"2001-04-01\",\"series\":\"Self-employed\",\"rate\":2.1},{\"date\":\"2001-05-01\",\"series\":\"Self-employed\",\"rate\":2},{\"date\":\"2001-06-01\",\"series\":\"Self-employed\",\"rate\":1.7},{\"date\":\"2001-07-01\",\"series\":\"Self-employed\",\"rate\":1.8},{\"date\":\"2001-08-01\",\"series\":\"Self-employed\",\"rate\":2.3},{\"date\":\"2001-09-01\",\"series\":\"Self-employed\",\"rate\":2.4},{\"date\":\"2001-10-01\",\"series\":\"Self-employed\",\"rate\":2.3},{\"date\":\"2001-11-01\",\"series\":\"Self-employed\",\"rate\":2.3},{\"date\":\"2001-12-01\",\"series\":\"Self-employed\",\"rate\":2.5},{\"date\":\"2002-01-01\",\"series\":\"Self-employed\",\"rate\":2.7},{\"date\":\"2002-02-01\",\"series\":\"Self-employed\",\"rate\":2.6},{\"date\":\"2002-03-01\",\"series\":\"Self-employed\",\"rate\":2.2},{\"date\":\"2002-04-01\",\"series\":\"Self-employed\",\"rate\":2.5},{\"date\":\"2002-05-01\",\"series\":\"Self-employed\",\"rate\":2.6},{\"date\":\"2002-06-01\",\"series\":\"Self-employed\",\"rate\":2.4},{\"date\":\"2002-07-01\",\"series\":\"Self-employed\",\"rate\":2.4},{\"date\":\"2002-08-01\",\"series\":\"Self-employed\",\"rate\":2.6},{\"date\":\"2002-09-01\",\"series\":\"Self-employed\",\"rate\":2.5},{\"date\":\"2002-10-01\",\"series\":\"Self-employed\",\"rate\":2.6},{\"date\":\"2002-11-01\",\"series\":\"Self-employed\",\"rate\":2.8},{\"date\":\"2002-12-01\",\"series\":\"Self-employed\",\"rate\":3.1},{\"date\":\"2003-01-01\",\"series\":\"Self-employed\",\"rate\":3},{\"date\":\"2003-02-01\",\"series\":\"Self-employed\",\"rate\":3},{\"date\":\"2003-03-01\",\"series\":\"Self-employed\",\"rate\":2.7},{\"date\":\"2003-04-01\",\"series\":\"Self-employed\",\"rate\":2.4},{\"date\":\"2003-05-01\",\"series\":\"Self-employed\",\"rate\":2.6},{\"date\":\"2003-06-01\",\"series\":\"Self-employed\",\"rate\":2.7},{\"date\":\"2003-07-01\",\"series\":\"Self-employed\",\"rate\":2.5},{\"date\":\"2003-08-01\",\"series\":\"Self-employed\",\"rate\":2.7},{\"date\":\"2003-09-01\",\"series\":\"Self-employed\",\"rate\":2.6},{\"date\":\"2003-10-01\",\"series\":\"Self-employed\",\"rate\":3.1},{\"date\":\"2003-11-01\",\"series\":\"Self-employed\",\"rate\":2.8},{\"date\":\"2003-12-01\",\"series\":\"Self-employed\",\"rate\":2.8},{\"date\":\"2004-01-01\",\"series\":\"Self-employed\",\"rate\":2.8},{\"date\":\"2004-02-01\",\"series\":\"Self-employed\",\"rate\":2.5},{\"date\":\"2004-03-01\",\"series\":\"Self-employed\",\"rate\":2.5},{\"date\":\"2004-04-01\",\"series\":\"Self-employed\",\"rate\":2.3},{\"date\":\"2004-05-01\",\"series\":\"Self-employed\",\"rate\":2.7},{\"date\":\"2004-06-01\",\"series\":\"Self-employed\",\"rate\":2.8},{\"date\":\"2004-07-01\",\"series\":\"Self-employed\",\"rate\":2.6},{\"date\":\"2004-08-01\",\"series\":\"Self-employed\",\"rate\":2.9},{\"date\":\"2004-09-01\",\"series\":\"Self-employed\",\"rate\":3.3},{\"date\":\"2004-10-01\",\"series\":\"Self-employed\",\"rate\":2.7},{\"date\":\"2004-11-01\",\"series\":\"Self-employed\",\"rate\":3.2},{\"date\":\"2004-12-01\",\"series\":\"Self-employed\",\"rate\":3.2},{\"date\":\"2005-01-01\",\"series\":\"Self-employed\",\"rate\":3.2},{\"date\":\"2005-02-01\",\"series\":\"Self-employed\",\"rate\":3.4},{\"date\":\"2005-03-01\",\"series\":\"Self-employed\",\"rate\":2.9},{\"date\":\"2005-04-01\",\"series\":\"Self-employed\",\"rate\":2.4},{\"date\":\"2005-05-01\",\"series\":\"Self-employed\",\"rate\":2.7},{\"date\":\"2005-06-01\",\"series\":\"Self-employed\",\"rate\":2.4},{\"date\":\"2005-07-01\",\"series\":\"Self-employed\",\"rate\":2.5},{\"date\":\"2005-08-01\",\"series\":\"Self-employed\",\"rate\":2.3},{\"date\":\"2005-09-01\",\"series\":\"Self-employed\",\"rate\":2.6},{\"date\":\"2005-10-01\",\"series\":\"Self-employed\",\"rate\":2.3},{\"date\":\"2005-11-01\",\"series\":\"Self-employed\",\"rate\":3},{\"date\":\"2005-12-01\",\"series\":\"Self-employed\",\"rate\":3.1},{\"date\":\"2006-01-01\",\"series\":\"Self-employed\",\"rate\":3.2},{\"date\":\"2006-02-01\",\"series\":\"Self-employed\",\"rate\":3.1},{\"date\":\"2006-03-01\",\"series\":\"Self-employed\",\"rate\":2.8},{\"date\":\"2006-04-01\",\"series\":\"Self-employed\",\"rate\":3.1},{\"date\":\"2006-05-01\",\"series\":\"Self-employed\",\"rate\":2.3},{\"date\":\"2006-06-01\",\"series\":\"Self-employed\",\"rate\":2.2},{\"date\":\"2006-07-01\",\"series\":\"Self-employed\",\"rate\":2.6},{\"date\":\"2006-08-01\",\"series\":\"Self-employed\",\"rate\":2.7},{\"date\":\"2006-09-01\",\"series\":\"Self-employed\",\"rate\":2.7},{\"date\":\"2006-10-01\",\"series\":\"Self-employed\",\"rate\":2.5},{\"date\":\"2006-11-01\",\"series\":\"Self-employed\",\"rate\":2.3},{\"date\":\"2006-12-01\",\"series\":\"Self-employed\",\"rate\":2.6},{\"date\":\"2007-01-01\",\"series\":\"Self-employed\",\"rate\":3.5},{\"date\":\"2007-02-01\",\"series\":\"Self-employed\",\"rate\":2.8},{\"date\":\"2007-03-01\",\"series\":\"Self-employed\",\"rate\":2.8},{\"date\":\"2007-04-01\",\"series\":\"Self-employed\",\"rate\":2.2},{\"date\":\"2007-05-01\",\"series\":\"Self-employed\",\"rate\":2.5},{\"date\":\"2007-06-01\",\"series\":\"Self-employed\",\"rate\":2.3},{\"date\":\"2007-07-01\",\"series\":\"Self-employed\",\"rate\":2.9},{\"date\":\"2007-08-01\",\"series\":\"Self-employed\",\"rate\":2.9},{\"date\":\"2007-09-01\",\"series\":\"Self-employed\",\"rate\":2.8},{\"date\":\"2007-10-01\",\"series\":\"Self-employed\",\"rate\":3.1},{\"date\":\"2007-11-01\",\"series\":\"Self-employed\",\"rate\":3.2},{\"date\":\"2007-12-01\",\"series\":\"Self-employed\",\"rate\":3.2},{\"date\":\"2008-01-01\",\"series\":\"Self-employed\",\"rate\":3.3},{\"date\":\"2008-02-01\",\"series\":\"Self-employed\",\"rate\":3.2},{\"date\":\"2008-03-01\",\"series\":\"Self-employed\",\"rate\":3.3},{\"date\":\"2008-04-01\",\"series\":\"Self-employed\",\"rate\":3.2},{\"date\":\"2008-05-01\",\"series\":\"Self-employed\",\"rate\":3.4},{\"date\":\"2008-06-01\",\"series\":\"Self-employed\",\"rate\":3.3},{\"date\":\"2008-07-01\",\"series\":\"Self-employed\",\"rate\":3.1},{\"date\":\"2008-08-01\",\"series\":\"Self-employed\",\"rate\":3.5},{\"date\":\"2008-09-01\",\"series\":\"Self-employed\",\"rate\":3.9},{\"date\":\"2008-10-01\",\"series\":\"Self-employed\",\"rate\":3.9},{\"date\":\"2008-11-01\",\"series\":\"Self-employed\",\"rate\":4.1},{\"date\":\"2008-12-01\",\"series\":\"Self-employed\",\"rate\":5.5},{\"date\":\"2009-01-01\",\"series\":\"Self-employed\",\"rate\":6.5},{\"date\":\"2009-02-01\",\"series\":\"Self-employed\",\"rate\":5.7},{\"date\":\"2009-03-01\",\"series\":\"Self-employed\",\"rate\":5.9},{\"date\":\"2009-04-01\",\"series\":\"Self-employed\",\"rate\":4.6},{\"date\":\"2009-05-01\",\"series\":\"Self-employed\",\"rate\":5},{\"date\":\"2009-06-01\",\"series\":\"Self-employed\",\"rate\":4.4},{\"date\":\"2009-07-01\",\"series\":\"Self-employed\",\"rate\":5.2},{\"date\":\"2009-08-01\",\"series\":\"Self-employed\",\"rate\":5.3},{\"date\":\"2009-09-01\",\"series\":\"Self-employed\",\"rate\":5.9},{\"date\":\"2009-10-01\",\"series\":\"Self-employed\",\"rate\":5.9},{\"date\":\"2009-11-01\",\"series\":\"Self-employed\",\"rate\":5.7},{\"date\":\"2009-12-01\",\"series\":\"Self-employed\",\"rate\":5.9},{\"date\":\"2010-01-01\",\"series\":\"Self-employed\",\"rate\":7.2},{\"date\":\"2010-02-01\",\"series\":\"Self-employed\",\"rate\":6.5}],\"metadata\":{\"date\":{\"type\":\"date\",\"semanticType\":\"YearMonth\"},\"series\":{\"type\":\"string\",\"semanticType\":\"String\"},\"rate\":{\"type\":\"number\",\"semanticType\":\"Percentage\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_unemployment):\\n    # Convert date string to datetime and then to string format for visualization\\n    df_unemployment['date'] = pd.to_datetime(df_unemployment['date']).dt.strftime('%Y-%m-%d')\\n    \\n    # Select only the necessary columns for visualization\\n    transformed_df = df_unemployment[['date', 'series', 'rate']].copy()\\n    \\n    return transformed_df\\n\",\"source\":[\"unemployment-across-industries\"],\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\". \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- you can use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (unemployment_across_industries)\\n\\n## fields\\n\\t*series -- type: object, values: Agriculture, Business services, Construction, ..., Other, Self-employed, Transportation and Utilities, Wholesale and Retail Trade\\n\\t*year -- type: int64, values: 2000, 2001, 2002, ..., 2007, 2008, 2009, 2010\\n\\t*month -- type: int64, values: 1, 2, 3, ..., 9, 10, 11, 12\\n\\t*count -- type: int64, values: 2, 8, 9, ..., 2071, 2154, 2194, 2440\\n\\t*rate -- type: float64, values: 0.3, 1.3, 1.5, ..., 21.4, 22.7, 24.7, 27.1\\n\\t*date -- type: object, values: 2000-01-01T08:00:00.000Z, 2000-02-01T08:00:00.000Z, 2000-03-01T08:00:00.000Z, ..., 2009-11-01T07:00:00.000Z, 2009-12-01T08:00:00.000Z, 2010-01-01T08:00:00.000Z, 2010-02-01T08:00:00.000Z\\n\\n## sample\\n       series  year  month  count  rate                      date\\n0  Government  2000      1    430   2.1  2000-01-01T08:00:00.000Z\\n1  Government  2000      2    409   2.0  2000-02-01T08:00:00.000Z\\n2  Government  2000      3    311   1.5  2000-03-01T08:00:00.000Z\\n3  Government  2000      4    269   1.3  2000-04-01T08:00:00.000Z\\n4  Government  2000      5    370   1.9  2000-05-01T07:00:00.000Z\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nCompare **unemployment trends** across all industries from 2000-2010\"},{\"role\":\"assistant\",\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to compare unemployment trends across all industries from 2000-2010 to understand how different sectors were affected over time.\\\",\\n    \\\"display_instruction\\\": \\\"Compare **unemployment rates** across **industries** over time\\\",\\n    \\\"recommendation\\\": \\\"A line chart with time on x-axis and unemployment rate on y-axis, with different colored lines for each industry series, will effectively show the trends and allow comparison of how unemployment evolved across different sectors during this period.\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"series\\\", \\\"rate\\\"],\\n    \\\"chart_type\\\": \\\"line\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"rate\\\",\\n        \\\"color\\\": \\\"series\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_unemployment):\\n    # Convert date string to datetime and then to string format for visualization\\n    df_unemployment['date'] = pd.to_datetime(df_unemployment['date']).dt.strftime('%Y-%m-%d')\\n    \\n    # Select only the necessary columns for visualization\\n    transformed_df = df_unemployment[['date', 'series', 'rate']].copy()\\n    \\n    return transformed_df\\n```\"}],\"trigger\":{\"tableId\":\"unemployment-across-industries\",\"sourceTableIds\":[\"unemployment-across-industries\"],\"instruction\":\"Compare **unemployment trends** across all industries from 2000-2010\",\"displayInstruction\":\"Compare **unemployment rates** across **industries** over time\",\"chart\":{\"id\":\"chart-1760745546913\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"unemployment-across-industries\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-544555\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"- Convert the **date** field from timestamp format to a standardized string format (`YYYY-MM-DD`) for cleaner visualization\\n- Select and retain only three key fields: **date**, **series** (industry name), and **rate** (unemployment rate percentage)\\n- Return a simplified dataset focused on tracking unemployment rates across different industries over time\",\"concepts\":[],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (unemployment_across_industries)\\n\\n## fields\\n\\t*series -- type: object, values: Agriculture, Business services, Construction, ..., Other, Self-employed, Transportation and Utilities, Wholesale and Retail Trade\\n\\t*year -- type: int64, values: 2000, 2001, 2002, ..., 2007, 2008, 2009, 2010\\n\\t*month -- type: int64, values: 1, 2, 3, ..., 9, 10, 11, 12\\n\\t*count -- type: int64, values: 2, 8, 9, ..., 2071, 2154, 2194, 2440\\n\\t*rate -- type: float64, values: 0.3, 1.3, 1.5, ..., 21.4, 22.7, 24.7, 27.1\\n\\t*date -- type: object, values: 2000-01-01T08:00:00.000Z, 2000-02-01T08:00:00.000Z, 2000-03-01T08:00:00.000Z, ..., 2009-11-01T07:00:00.000Z, 2009-12-01T08:00:00.000Z, 2010-01-01T08:00:00.000Z, 2010-02-01T08:00:00.000Z\\n\\n## sample\\n       series  year  month  count  rate                      date\\n0  Government  2000      1    430   2.1  2000-01-01T08:00:00.000Z\\n1  Government  2000      2    409   2.0  2000-02-01T08:00:00.000Z\\n2  Government  2000      3    311   1.5  2000-03-01T08:00:00.000Z\\n3  Government  2000      4    269   1.3  2000-04-01T08:00:00.000Z\\n4  Government  2000      5    370   1.9  2000-05-01T07:00:00.000Z\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_unemployment):\\n    # Convert date string to datetime and then to string format for visualization\\n    df_unemployment['date'] = pd.to_datetime(df_unemployment['date']).dt.strftime('%Y-%m-%d')\\n    \\n    # Select only the necessary columns for visualization\\n    transformed_df = df_unemployment[['date', 'series', 'rate']].copy()\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\n- Convert the **date** field from timestamp format to a standardized string format (`YYYY-MM-DD`) for cleaner visualization\\n- Select and retain only three key fields: **date**, **series** (industry name), and **rate** (unemployment rate percentage)\\n- Return a simplified dataset focused on tracking unemployment rates across different industries over time\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-540763\",\"displayId\":\"unemployment-rate\",\"names\":[\"avg_rate\",\"month\",\"month_name\",\"series\"],\"rows\":[{\"avg_rate\":13.7636363636,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Agriculture\"},{\"avg_rate\":13.6454545455,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Agriculture\"},{\"avg_rate\":13.83,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Agriculture\"},{\"avg_rate\":9.13,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Agriculture\"},{\"avg_rate\":7.1,\"month\":5,\"month_name\":\"May\",\"series\":\"Agriculture\"},{\"avg_rate\":6.77,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Agriculture\"},{\"avg_rate\":7.01,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Agriculture\"},{\"avg_rate\":8.08,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Agriculture\"},{\"avg_rate\":7.09,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Agriculture\"},{\"avg_rate\":7.49,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Agriculture\"},{\"avg_rate\":10.47,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Agriculture\"},{\"avg_rate\":12.94,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Agriculture\"},{\"avg_rate\":7.8636363636,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Business services\"},{\"avg_rate\":7.6454545455,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Business services\"},{\"avg_rate\":7.13,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Business services\"},{\"avg_rate\":6.27,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Business services\"},{\"avg_rate\":6.6,\"month\":5,\"month_name\":\"May\",\"series\":\"Business services\"},{\"avg_rate\":6.72,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Business services\"},{\"avg_rate\":6.74,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Business services\"},{\"avg_rate\":6.57,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Business services\"},{\"avg_rate\":6.79,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Business services\"},{\"avg_rate\":6.71,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Business services\"},{\"avg_rate\":6.75,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Business services\"},{\"avg_rate\":7.08,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Business services\"},{\"avg_rate\":12.9090909091,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Construction\"},{\"avg_rate\":13.6,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Construction\"},{\"avg_rate\":11.29,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Construction\"},{\"avg_rate\":9.45,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Construction\"},{\"avg_rate\":8.12,\"month\":5,\"month_name\":\"May\",\"series\":\"Construction\"},{\"avg_rate\":7.43,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Construction\"},{\"avg_rate\":7.35,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Construction\"},{\"avg_rate\":7.3,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Construction\"},{\"avg_rate\":7.56,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Construction\"},{\"avg_rate\":7.84,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Construction\"},{\"avg_rate\":8.7,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Construction\"},{\"avg_rate\":10.8,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Construction\"},{\"avg_rate\":3.3636363636,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Education and Health\"},{\"avg_rate\":3.2909090909,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Education and Health\"},{\"avg_rate\":3.11,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Education and Health\"},{\"avg_rate\":3.04,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Education and Health\"},{\"avg_rate\":3.29,\"month\":5,\"month_name\":\"May\",\"series\":\"Education and Health\"},{\"avg_rate\":3.82,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Education and Health\"},{\"avg_rate\":3.87,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Education and Health\"},{\"avg_rate\":3.89,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Education and Health\"},{\"avg_rate\":3.54,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Education and Health\"},{\"avg_rate\":3.33,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Education and Health\"},{\"avg_rate\":3.33,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Education and Health\"},{\"avg_rate\":3.19,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Education and Health\"},{\"avg_rate\":3.5727272727,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Finance\"},{\"avg_rate\":3.8909090909,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Finance\"},{\"avg_rate\":3.45,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Finance\"},{\"avg_rate\":3.28,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Finance\"},{\"avg_rate\":3.35,\"month\":5,\"month_name\":\"May\",\"series\":\"Finance\"},{\"avg_rate\":3.54,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Finance\"},{\"avg_rate\":3.52,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Finance\"},{\"avg_rate\":3.61,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Finance\"},{\"avg_rate\":3.54,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Finance\"},{\"avg_rate\":3.6,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Finance\"},{\"avg_rate\":3.55,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Finance\"},{\"avg_rate\":3.54,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Finance\"},{\"avg_rate\":2.6,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Government\"},{\"avg_rate\":2.3272727273,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Government\"},{\"avg_rate\":2.19,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Government\"},{\"avg_rate\":2.02,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Government\"},{\"avg_rate\":2.2,\"month\":5,\"month_name\":\"May\",\"series\":\"Government\"},{\"avg_rate\":3.1,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Government\"},{\"avg_rate\":3.49,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Government\"},{\"avg_rate\":3.36,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Government\"},{\"avg_rate\":2.61,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Government\"},{\"avg_rate\":2.45,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Government\"},{\"avg_rate\":2.37,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Government\"},{\"avg_rate\":2.28,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Government\"},{\"avg_rate\":5.7727272727,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Information\"},{\"avg_rate\":5.9,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Information\"},{\"avg_rate\":5.36,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Information\"},{\"avg_rate\":5.23,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Information\"},{\"avg_rate\":5.48,\"month\":5,\"month_name\":\"May\",\"series\":\"Information\"},{\"avg_rate\":5.26,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Information\"},{\"avg_rate\":5.32,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Information\"},{\"avg_rate\":5.55,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Information\"},{\"avg_rate\":5.73,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Information\"},{\"avg_rate\":5.05,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Information\"},{\"avg_rate\":5.47,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Information\"},{\"avg_rate\":5.65,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Information\"},{\"avg_rate\":9.3454545455,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Leisure and hospitality\"},{\"avg_rate\":9.1363636364,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Leisure and hospitality\"},{\"avg_rate\":8.37,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Leisure and hospitality\"},{\"avg_rate\":7.7,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Leisure and hospitality\"},{\"avg_rate\":7.93,\"month\":5,\"month_name\":\"May\",\"series\":\"Leisure and hospitality\"},{\"avg_rate\":8.42,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Leisure and hospitality\"},{\"avg_rate\":7.95,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Leisure and hospitality\"},{\"avg_rate\":7.92,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Leisure and hospitality\"},{\"avg_rate\":7.93,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Leisure and hospitality\"},{\"avg_rate\":8.11,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Leisure and hospitality\"},{\"avg_rate\":8.59,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Leisure and hospitality\"},{\"avg_rate\":8.2,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Leisure and hospitality\"},{\"avg_rate\":6.6090909091,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Manufacturing\"},{\"avg_rate\":6.5,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Manufacturing\"},{\"avg_rate\":6,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Manufacturing\"},{\"avg_rate\":5.89,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Manufacturing\"},{\"avg_rate\":5.72,\"month\":5,\"month_name\":\"May\",\"series\":\"Manufacturing\"},{\"avg_rate\":5.73,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Manufacturing\"},{\"avg_rate\":6,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Manufacturing\"},{\"avg_rate\":5.66,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Manufacturing\"},{\"avg_rate\":5.72,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Manufacturing\"},{\"avg_rate\":5.78,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Manufacturing\"},{\"avg_rate\":6.02,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Manufacturing\"},{\"avg_rate\":6.05,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Manufacturing\"},{\"avg_rate\":5.6,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Mining and Extraction\"},{\"avg_rate\":5.7454545455,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Mining and Extraction\"},{\"avg_rate\":5.14,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Mining and Extraction\"},{\"avg_rate\":5.64,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Mining and Extraction\"},{\"avg_rate\":5.28,\"month\":5,\"month_name\":\"May\",\"series\":\"Mining and Extraction\"},{\"avg_rate\":5.57,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Mining and Extraction\"},{\"avg_rate\":4.95,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Mining and Extraction\"},{\"avg_rate\":4.5,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Mining and Extraction\"},{\"avg_rate\":4.48,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Mining and Extraction\"},{\"avg_rate\":4.41,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Mining and Extraction\"},{\"avg_rate\":4.4,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Mining and Extraction\"},{\"avg_rate\":5.23,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Mining and Extraction\"},{\"avg_rate\":5.4363636364,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Other\"},{\"avg_rate\":5.6181818182,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Other\"},{\"avg_rate\":4.91,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Other\"},{\"avg_rate\":4.67,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Other\"},{\"avg_rate\":4.81,\"month\":5,\"month_name\":\"May\",\"series\":\"Other\"},{\"avg_rate\":5.16,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Other\"},{\"avg_rate\":5.11,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Other\"},{\"avg_rate\":5.41,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Other\"},{\"avg_rate\":5.02,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Other\"},{\"avg_rate\":4.87,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Other\"},{\"avg_rate\":5.25,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Other\"},{\"avg_rate\":4.81,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Other\"},{\"avg_rate\":3.6,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Self-employed\"},{\"avg_rate\":3.3909090909,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Self-employed\"},{\"avg_rate\":2.88,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Self-employed\"},{\"avg_rate\":2.68,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Self-employed\"},{\"avg_rate\":2.77,\"month\":5,\"month_name\":\"May\",\"series\":\"Self-employed\"},{\"avg_rate\":2.6,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Self-employed\"},{\"avg_rate\":2.77,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Self-employed\"},{\"avg_rate\":2.89,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Self-employed\"},{\"avg_rate\":3.07,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Self-employed\"},{\"avg_rate\":3.06,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Self-employed\"},{\"avg_rate\":3.21,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Self-employed\"},{\"avg_rate\":3.37,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Self-employed\"},{\"avg_rate\":5.7909090909,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Transportation and Utilities\"},{\"avg_rate\":5.6181818182,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Transportation and Utilities\"},{\"avg_rate\":5.1,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Transportation and Utilities\"},{\"avg_rate\":4.79,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Transportation and Utilities\"},{\"avg_rate\":4.5,\"month\":5,\"month_name\":\"May\",\"series\":\"Transportation and Utilities\"},{\"avg_rate\":4.82,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Transportation and Utilities\"},{\"avg_rate\":5.04,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Transportation and Utilities\"},{\"avg_rate\":4.58,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Transportation and Utilities\"},{\"avg_rate\":4.65,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Transportation and Utilities\"},{\"avg_rate\":4.8,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Transportation and Utilities\"},{\"avg_rate\":4.58,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Transportation and Utilities\"},{\"avg_rate\":4.8,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Transportation and Utilities\"},{\"avg_rate\":6.4818181818,\"month\":1,\"month_name\":\"Jan\",\"series\":\"Wholesale and Retail Trade\"},{\"avg_rate\":6.3727272727,\"month\":2,\"month_name\":\"Feb\",\"series\":\"Wholesale and Retail Trade\"},{\"avg_rate\":5.86,\"month\":3,\"month_name\":\"Mar\",\"series\":\"Wholesale and Retail Trade\"},{\"avg_rate\":5.46,\"month\":4,\"month_name\":\"Apr\",\"series\":\"Wholesale and Retail Trade\"},{\"avg_rate\":5.49,\"month\":5,\"month_name\":\"May\",\"series\":\"Wholesale and Retail Trade\"},{\"avg_rate\":5.84,\"month\":6,\"month_name\":\"Jun\",\"series\":\"Wholesale and Retail Trade\"},{\"avg_rate\":5.75,\"month\":7,\"month_name\":\"Jul\",\"series\":\"Wholesale and Retail Trade\"},{\"avg_rate\":5.61,\"month\":8,\"month_name\":\"Aug\",\"series\":\"Wholesale and Retail Trade\"},{\"avg_rate\":5.63,\"month\":9,\"month_name\":\"Sep\",\"series\":\"Wholesale and Retail Trade\"},{\"avg_rate\":5.56,\"month\":10,\"month_name\":\"Oct\",\"series\":\"Wholesale and Retail Trade\"},{\"avg_rate\":5.52,\"month\":11,\"month_name\":\"Nov\",\"series\":\"Wholesale and Retail Trade\"},{\"avg_rate\":5.49,\"month\":12,\"month_name\":\"Dec\",\"series\":\"Wholesale and Retail Trade\"}],\"metadata\":{\"avg_rate\":{\"type\":\"number\",\"semanticType\":\"Percentage\"},\"month\":{\"type\":\"number\",\"semanticType\":\"Month\"},\"month_name\":{\"type\":\"string\",\"semanticType\":\"Month\",\"levels\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]},\"series\":{\"type\":\"string\",\"semanticType\":\"String\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df1):\\n    # Calculate average unemployment rate by month and series (industry)\\n    transformed_df = df1.groupby(['series', 'month'], as_index=False).agg({\\n        'rate': 'mean'\\n    }).rename(columns={'rate': 'avg_rate'})\\n    \\n    # Add month name for better readability\\n    month_names = {\\n        1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun',\\n        7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'\\n    }\\n    transformed_df['month_name'] = transformed_df['month'].map(month_names)\\n    \\n    return transformed_df\\n\",\"source\":[\"unemployment-across-industries\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\". \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- you can use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (unemployment_across_industries)\\n\\n## fields\\n\\t*series -- type: object, values: Agriculture, Business services, Construction, ..., Other, Self-employed, Transportation and Utilities, Wholesale and Retail Trade\\n\\t*year -- type: int64, values: 2000, 2001, 2002, ..., 2007, 2008, 2009, 2010\\n\\t*month -- type: int64, values: 1, 2, 3, ..., 9, 10, 11, 12\\n\\t*count -- type: int64, values: 2, 8, 9, ..., 2071, 2154, 2194, 2440\\n\\t*rate -- type: float64, values: 0.3, 1.3, 1.5, ..., 21.4, 22.7, 24.7, 27.1\\n\\t*date -- type: object, values: 2000-01-01T08:00:00.000Z, 2000-02-01T08:00:00.000Z, 2000-03-01T08:00:00.000Z, ..., 2009-11-01T07:00:00.000Z, 2009-12-01T08:00:00.000Z, 2010-01-01T08:00:00.000Z, 2010-02-01T08:00:00.000Z\\n\\n## sample\\n       series  year  month  count  rate                      date\\n0  Government  2000      1    430   2.1  2000-01-01T08:00:00.000Z\\n1  Government  2000      2    409   2.0  2000-02-01T08:00:00.000Z\\n2  Government  2000      3    311   1.5  2000-03-01T08:00:00.000Z\\n3  Government  2000      4    269   1.3  2000-04-01T08:00:00.000Z\\n4  Government  2000      5    370   1.9  2000-05-01T07:00:00.000Z\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nHow does **seasonal variation** in unemployment differ across **industries**?\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"Analyze how seasonal variation in unemployment differs across industries by examining the cyclical patterns in unemployment rates throughout the year for different industry sectors.\\\",\\n    \\\"display_instruction\\\": \\\"Compare seasonal unemployment patterns across **industries**\\\",\\n    \\\"recommendation\\\": \\\"To visualize seasonal variation across industries, we should calculate average unemployment rates by month for each industry series. This will reveal the typical seasonal patterns and allow comparison of how different industries experience seasonal fluctuations in unemployment throughout the year.\\\",\\n    \\\"output_fields\\\": [\\\"series\\\", \\\"month\\\", \\\"avg_rate\\\", \\\"month_name\\\"],\\n    \\\"chart_type\\\": \\\"line\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"month\\\",\\n        \\\"y\\\": \\\"avg_rate\\\",\\n        \\\"color\\\": \\\"series\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df1):\\n    # Calculate average unemployment rate by month and series (industry)\\n    transformed_df = df1.groupby(['series', 'month'], as_index=False).agg({\\n        'rate': 'mean'\\n    }).rename(columns={'rate': 'avg_rate'})\\n    \\n    # Add month name for better readability\\n    month_names = {\\n        1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun',\\n        7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'\\n    }\\n    transformed_df['month_name'] = transformed_df['month'].map(month_names)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"unemployment-across-industries\",\"sourceTableIds\":[\"unemployment-across-industries\"],\"instruction\":\"How does **seasonal variation** in unemployment differ across **industries**?\",\"displayInstruction\":\"Compare seasonal unemployment patterns across **industries**\",\"chart\":{\"id\":\"chart-1760745541760\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"unemployment-across-industries\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-540763\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"- Group the unemployment data by **series** (industry) and **month**\\n- Calculate the **mean** of the **rate** field for each industry-month combination, creating a new field **avg_rate**\\n- Map numeric **month** values (1-12) to their abbreviated names (**Jan**, **Feb**, **Mar**, etc.) and store in **month_name** field for improved readability\\n- Return the aggregated dataset containing average unemployment rates per industry per month across all years in the data\",\"concepts\":[],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (unemployment_across_industries)\\n\\n## fields\\n\\t*series -- type: object, values: Agriculture, Business services, Construction, ..., Other, Self-employed, Transportation and Utilities, Wholesale and Retail Trade\\n\\t*year -- type: int64, values: 2000, 2001, 2002, ..., 2007, 2008, 2009, 2010\\n\\t*month -- type: int64, values: 1, 2, 3, ..., 9, 10, 11, 12\\n\\t*count -- type: int64, values: 2, 8, 9, ..., 2071, 2154, 2194, 2440\\n\\t*rate -- type: float64, values: 0.3, 1.3, 1.5, ..., 21.4, 22.7, 24.7, 27.1\\n\\t*date -- type: object, values: 2000-01-01T08:00:00.000Z, 2000-02-01T08:00:00.000Z, 2000-03-01T08:00:00.000Z, ..., 2009-11-01T07:00:00.000Z, 2009-12-01T08:00:00.000Z, 2010-01-01T08:00:00.000Z, 2010-02-01T08:00:00.000Z\\n\\n## sample\\n       series  year  month  count  rate                      date\\n0  Government  2000      1    430   2.1  2000-01-01T08:00:00.000Z\\n1  Government  2000      2    409   2.0  2000-02-01T08:00:00.000Z\\n2  Government  2000      3    311   1.5  2000-03-01T08:00:00.000Z\\n3  Government  2000      4    269   1.3  2000-04-01T08:00:00.000Z\\n4  Government  2000      5    370   1.9  2000-05-01T07:00:00.000Z\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df1):\\n    # Calculate average unemployment rate by month and series (industry)\\n    transformed_df = df1.groupby(['series', 'month'], as_index=False).agg({\\n        'rate': 'mean'\\n    }).rename(columns={'rate': 'avg_rate'})\\n    \\n    # Add month name for better readability\\n    month_names = {\\n        1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun',\\n        7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'\\n    }\\n    transformed_df['month_name'] = transformed_df['month'].map(month_names)\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\n- Group the unemployment data by **series** (industry) and **month**\\n- Calculate the **mean** of the **rate** field for each industry-month combination, creating a new field **avg_rate**\\n- Map numeric **month** values (1-12) to their abbreviated names (**Jan**, **Feb**, **Mar**, etc.) and store in **month_name** field for improved readability\\n- Return the aggregated dataset containing average unemployment rates per industry per month across all years in the data\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-552276\",\"displayId\":\"unemp-by-sector\",\"names\":[\"series\",\"rate_2008\",\"rate_2009\",\"rate_increase\"],\"rows\":[{\"series\":\"Mining and Extraction\",\"rate_2008\":3.0833333333,\"rate_2009\":11.6583333333,\"rate_increase\":8.575},{\"series\":\"Construction\",\"rate_2008\":10.6,\"rate_2009\":19.05,\"rate_increase\":8.45},{\"series\":\"Manufacturing\",\"rate_2008\":5.7583333333,\"rate_2009\":12.075,\"rate_increase\":6.3166666667},{\"series\":\"Agriculture\",\"rate_2008\":9.2666666667,\"rate_2009\":14.3916666667,\"rate_increase\":5.125},{\"series\":\"Business services\",\"rate_2008\":6.5583333333,\"rate_2009\":10.8,\"rate_increase\":4.2416666667},{\"series\":\"Information\",\"rate_2008\":5.0166666667,\"rate_2009\":9.225,\"rate_increase\":4.2083333333},{\"series\":\"Transportation and Utilities\",\"rate_2008\":5.1333333333,\"rate_2009\":8.8833333333,\"rate_increase\":3.75},{\"series\":\"Wholesale and Retail Trade\",\"rate_2008\":5.8416666667,\"rate_2009\":9.0333333333,\"rate_increase\":3.1916666667},{\"series\":\"Leisure and hospitality\",\"rate_2008\":8.6416666667,\"rate_2009\":11.6833333333,\"rate_increase\":3.0416666667},{\"series\":\"Finance\",\"rate_2008\":3.95,\"rate_2009\":6.4,\"rate_increase\":2.45},{\"series\":\"Other\",\"rate_2008\":5.2666666667,\"rate_2009\":7.5083333333,\"rate_increase\":2.2416666667},{\"series\":\"Self-employed\",\"rate_2008\":3.6416666667,\"rate_2009\":5.5,\"rate_increase\":1.8583333333},{\"series\":\"Education and Health\",\"rate_2008\":3.4916666667,\"rate_2009\":5.2666666667,\"rate_increase\":1.775},{\"series\":\"Government\",\"rate_2008\":2.4416666667,\"rate_2009\":3.6166666667,\"rate_increase\":1.175}],\"metadata\":{\"series\":{\"type\":\"string\",\"semanticType\":\"String\"},\"rate_2008\":{\"type\":\"number\",\"semanticType\":\"Percentage\"},\"rate_2009\":{\"type\":\"number\",\"semanticType\":\"Percentage\"},\"rate_increase\":{\"type\":\"number\",\"semanticType\":\"Percentage\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_unemployment):\\n    # Convert date string to datetime\\n    df_unemployment['date'] = pd.to_datetime(df_unemployment['date'])\\n    \\n    # Filter data for years 2008 and 2009\\n    df_2008_2009 = df_unemployment[df_unemployment['year'].isin([2008, 2009])].copy()\\n    \\n    # Calculate average rate for each industry in 2008 and 2009\\n    df_2008 = df_2008_2009[df_2008_2009['year'] == 2008].groupby('series')['rate'].mean().reset_index()\\n    df_2008.columns = ['series', 'rate_2008']\\n    \\n    df_2009 = df_2008_2009[df_2008_2009['year'] == 2009].groupby('series')['rate'].mean().reset_index()\\n    df_2009.columns = ['series', 'rate_2009']\\n    \\n    # Merge and calculate the increase\\n    transformed_df = df_2008.merge(df_2009, on='series')\\n    transformed_df['rate_increase'] = transformed_df['rate_2009'] - transformed_df['rate_2008']\\n    \\n    # Sort by rate increase in descending order\\n    transformed_df = transformed_df.sort_values('rate_increase', ascending=False).reset_index(drop=True)\\n    \\n    return transformed_df\\n\",\"source\":[\"unemployment-across-industries\"],\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\". \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- you can use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (unemployment_across_industries)\\n\\n## fields\\n\\t*series -- type: object, values: Agriculture, Business services, Construction, ..., Other, Self-employed, Transportation and Utilities, Wholesale and Retail Trade\\n\\t*year -- type: int64, values: 2000, 2001, 2002, ..., 2007, 2008, 2009, 2010\\n\\t*month -- type: int64, values: 1, 2, 3, ..., 9, 10, 11, 12\\n\\t*count -- type: int64, values: 2, 8, 9, ..., 2071, 2154, 2194, 2440\\n\\t*rate -- type: float64, values: 0.3, 1.3, 1.5, ..., 21.4, 22.7, 24.7, 27.1\\n\\t*date -- type: object, values: 2000-01-01T08:00:00.000Z, 2000-02-01T08:00:00.000Z, 2000-03-01T08:00:00.000Z, ..., 2009-11-01T07:00:00.000Z, 2009-12-01T08:00:00.000Z, 2010-01-01T08:00:00.000Z, 2010-02-01T08:00:00.000Z\\n\\n## sample\\n       series  year  month  count  rate                      date\\n0  Government  2000      1    430   2.1  2000-01-01T08:00:00.000Z\\n1  Government  2000      2    409   2.0  2000-02-01T08:00:00.000Z\\n2  Government  2000      3    311   1.5  2000-03-01T08:00:00.000Z\\n3  Government  2000      4    269   1.3  2000-04-01T08:00:00.000Z\\n4  Government  2000      5    370   1.9  2000-05-01T07:00:00.000Z\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nCompare **unemployment trends** across all industries from 2000-2010\"},{\"role\":\"assistant\",\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to compare unemployment trends across all industries from 2000-2010 to understand how different sectors were affected over time.\\\",\\n    \\\"display_instruction\\\": \\\"Compare **unemployment rates** across **industries** over time\\\",\\n    \\\"recommendation\\\": \\\"A line chart with time on x-axis and unemployment rate on y-axis, with different colored lines for each industry series, will effectively show the trends and allow comparison of how unemployment evolved across different sectors during this period.\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"series\\\", \\\"rate\\\"],\\n    \\\"chart_type\\\": \\\"line\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"rate\\\",\\n        \\\"color\\\": \\\"series\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_unemployment):\\n    # Convert date string to datetime and then to string format for visualization\\n    df_unemployment['date'] = pd.to_datetime(df_unemployment['date']).dt.strftime('%Y-%m-%d')\\n    \\n    # Select only the necessary columns for visualization\\n    transformed_df = df_unemployment[['date', 'series', 'rate']].copy()\\n    \\n    return transformed_df\\n```\"},{\"role\":\"user\",\"content\":\"This is the result from the latest python code:\\n\\n         date      series  rate\\n0  2000-01-01  Government   2.1\\n1  2000-02-01  Government   2.0\\n2  2000-03-01  Government   1.5\\n3  2000-04-01  Government   1.3\\n4  2000-05-01  Government   1.9\\n5  2000-06-01  Government   3.1\\n6  2000-07-01  Government   2.9\\n7  2000-08-01  Government   3.1\\n8  2000-09-01  Government   2.1\\n9  2000-10-01  Government   2.0\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\nWhich industries showed the **sharpest increases** in unemployment during **2008-2009**?\"},{\"role\":\"assistant\",\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to identify which industries experienced the sharpest increases in unemployment rates during the 2008-2009 financial crisis period by calculating the change in unemployment rate for each industry.\\\",\\n    \\\"display_instruction\\\": \\\"Identify industries with **sharpest unemployment rate increases** during **2008-2009**\\\",\\n    \\\"recommendation\\\": \\\"A bar chart showing the change in unemployment rate from 2008 to 2009 for each industry will clearly visualize which sectors were hit hardest during the financial crisis. The industries should be sorted by the magnitude of increase to make comparison easier.\\\",\\n    \\\"output_fields\\\": [\\\"series\\\", \\\"rate_2008\\\", \\\"rate_2009\\\", \\\"rate_increase\\\"],\\n    \\\"chart_type\\\": \\\"bar\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"series\\\",\\n        \\\"y\\\": \\\"rate_increase\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_unemployment):\\n    # Convert date string to datetime\\n    df_unemployment['date'] = pd.to_datetime(df_unemployment['date'])\\n    \\n    # Filter data for years 2008 and 2009\\n    df_2008_2009 = df_unemployment[df_unemployment['year'].isin([2008, 2009])].copy()\\n    \\n    # Calculate average rate for each industry in 2008 and 2009\\n    df_2008 = df_2008_2009[df_2008_2009['year'] == 2008].groupby('series')['rate'].mean().reset_index()\\n    df_2008.columns = ['series', 'rate_2008']\\n    \\n    df_2009 = df_2008_2009[df_2008_2009['year'] == 2009].groupby('series')['rate'].mean().reset_index()\\n    df_2009.columns = ['series', 'rate_2009']\\n    \\n    # Merge and calculate the increase\\n    transformed_df = df_2008.merge(df_2009, on='series')\\n    transformed_df['rate_increase'] = transformed_df['rate_2009'] - transformed_df['rate_2008']\\n    \\n    # Sort by rate increase in descending order\\n    transformed_df = transformed_df.sort_values('rate_increase', ascending=False).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\"}],\"trigger\":{\"tableId\":\"table-544555\",\"sourceTableIds\":[\"unemployment-across-industries\"],\"instruction\":\"Which industries showed the **sharpest increases** in unemployment during **2008-2009**?\",\"displayInstruction\":\"Identify industries with **sharpest unemployment rate increases** during **2008-2009**\",\"chart\":{\"id\":\"chart-1760745556114\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"unemployment-across-industries\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-552276\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"- Convert the **date** field to datetime format for proper date handling\\n- Filter the dataset to include only records from **2008** and **2009**\\n- Calculate the **average unemployment rate** for each **industry (series)** in **2008**\\n- Calculate the **average unemployment rate** for each **industry (series)** in **2009**\\n- Merge the two yearly averages and compute the **rate increase** from 2008 to 2009\\n- Sort industries by **rate_increase** in descending order to identify which industries experienced the largest growth in unemployment\",\"concepts\":[{\"explanation\":\"The difference in average unemployment rate between 2009 and 2008 for each industry, calculated as \\\\( \\\\text{rate\\\\_increase} = \\\\text{rate\\\\_2009} - \\\\text{rate\\\\_2008} \\\\). This metric indicates how much unemployment worsened (positive values) or improved (negative values) during the financial crisis period.\",\"field\":\"rate_increase\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (unemployment_across_industries)\\n\\n## fields\\n\\t*series -- type: object, values: Agriculture, Business services, Construction, ..., Other, Self-employed, Transportation and Utilities, Wholesale and Retail Trade\\n\\t*year -- type: int64, values: 2000, 2001, 2002, ..., 2007, 2008, 2009, 2010\\n\\t*month -- type: int64, values: 1, 2, 3, ..., 9, 10, 11, 12\\n\\t*count -- type: int64, values: 2, 8, 9, ..., 2071, 2154, 2194, 2440\\n\\t*rate -- type: float64, values: 0.3, 1.3, 1.5, ..., 21.4, 22.7, 24.7, 27.1\\n\\t*date -- type: object, values: 2000-01-01T08:00:00.000Z, 2000-02-01T08:00:00.000Z, 2000-03-01T08:00:00.000Z, ..., 2009-11-01T07:00:00.000Z, 2009-12-01T08:00:00.000Z, 2010-01-01T08:00:00.000Z, 2010-02-01T08:00:00.000Z\\n\\n## sample\\n       series  year  month  count  rate                      date\\n0  Government  2000      1    430   2.1  2000-01-01T08:00:00.000Z\\n1  Government  2000      2    409   2.0  2000-02-01T08:00:00.000Z\\n2  Government  2000      3    311   1.5  2000-03-01T08:00:00.000Z\\n3  Government  2000      4    269   1.3  2000-04-01T08:00:00.000Z\\n4  Government  2000      5    370   1.9  2000-05-01T07:00:00.000Z\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_unemployment):\\n    # Convert date string to datetime\\n    df_unemployment['date'] = pd.to_datetime(df_unemployment['date'])\\n    \\n    # Filter data for years 2008 and 2009\\n    df_2008_2009 = df_unemployment[df_unemployment['year'].isin([2008, 2009])].copy()\\n    \\n    # Calculate average rate for each industry in 2008 and 2009\\n    df_2008 = df_2008_2009[df_2008_2009['year'] == 2008].groupby('series')['rate'].mean().reset_index()\\n    df_2008.columns = ['series', 'rate_2008']\\n    \\n    df_2009 = df_2008_2009[df_2008_2009['year'] == 2009].groupby('series')['rate'].mean().reset_index()\\n    df_2009.columns = ['series', 'rate_2009']\\n    \\n    # Merge and calculate the increase\\n    transformed_df = df_2008.merge(df_2009, on='series')\\n    transformed_df['rate_increase'] = transformed_df['rate_2009'] - transformed_df['rate_2008']\\n    \\n    # Sort by rate increase in descending order\\n    transformed_df = transformed_df.sort_values('rate_increase', ascending=False).reset_index(drop=True)\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\n- Convert the **date** field to datetime format for proper date handling\\n- Filter the dataset to include only records from **2008** and **2009**\\n- Calculate the **average unemployment rate** for each **industry (series)** in **2008**\\n- Calculate the **average unemployment rate** for each **industry (series)** in **2009**\\n- Merge the two yearly averages and compute the **rate increase** from 2008 to 2009\\n- Sort industries by **rate_increase** in descending order to identify which industries experienced the largest growth in unemployment\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"rate_increase\\\",\\n        \\\"explanation\\\": \\\"The difference in average unemployment rate between 2009 and 2008 for each industry, calculated as \\\\\\\\( \\\\\\\\text{rate\\\\\\\\_increase} = \\\\\\\\text{rate\\\\\\\\_2009} - \\\\\\\\text{rate\\\\\\\\_2008} \\\\\\\\). This metric indicates how much unemployment worsened (positive values) or improved (negative values) during the financial crisis period.\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-570117\",\"displayId\":\"unemp-rate-ind1\",\"names\":[\"date\",\"series\",\"rate\"],\"rows\":[{\"date\":\"2008-01-01\",\"series\":\"Construction\",\"rate\":11},{\"date\":\"2008-02-01\",\"series\":\"Construction\",\"rate\":11.4},{\"date\":\"2008-03-01\",\"series\":\"Construction\",\"rate\":12},{\"date\":\"2008-04-01\",\"series\":\"Construction\",\"rate\":11.1},{\"date\":\"2008-05-01\",\"series\":\"Construction\",\"rate\":8.6},{\"date\":\"2008-06-01\",\"series\":\"Construction\",\"rate\":8.2},{\"date\":\"2008-07-01\",\"series\":\"Construction\",\"rate\":8},{\"date\":\"2008-08-01\",\"series\":\"Construction\",\"rate\":8.2},{\"date\":\"2008-09-01\",\"series\":\"Construction\",\"rate\":9.9},{\"date\":\"2008-10-01\",\"series\":\"Construction\",\"rate\":10.8},{\"date\":\"2008-11-01\",\"series\":\"Construction\",\"rate\":12.7},{\"date\":\"2008-12-01\",\"series\":\"Construction\",\"rate\":15.3},{\"date\":\"2009-01-01\",\"series\":\"Construction\",\"rate\":18.2},{\"date\":\"2009-02-01\",\"series\":\"Construction\",\"rate\":21.4},{\"date\":\"2009-03-01\",\"series\":\"Construction\",\"rate\":21.1},{\"date\":\"2009-04-01\",\"series\":\"Construction\",\"rate\":18.7},{\"date\":\"2009-05-01\",\"series\":\"Construction\",\"rate\":19.2},{\"date\":\"2009-06-01\",\"series\":\"Construction\",\"rate\":17.4},{\"date\":\"2009-07-01\",\"series\":\"Construction\",\"rate\":18.2},{\"date\":\"2009-08-01\",\"series\":\"Construction\",\"rate\":16.5},{\"date\":\"2009-09-01\",\"series\":\"Construction\",\"rate\":17.1},{\"date\":\"2009-10-01\",\"series\":\"Construction\",\"rate\":18.7},{\"date\":\"2009-11-01\",\"series\":\"Construction\",\"rate\":19.4},{\"date\":\"2009-12-01\",\"series\":\"Construction\",\"rate\":22.7},{\"date\":\"2010-01-01\",\"series\":\"Construction\",\"rate\":24.7},{\"date\":\"2010-02-01\",\"series\":\"Construction\",\"rate\":27.1},{\"date\":\"2008-01-01\",\"series\":\"Manufacturing\",\"rate\":5.1},{\"date\":\"2008-02-01\",\"series\":\"Manufacturing\",\"rate\":5},{\"date\":\"2008-03-01\",\"series\":\"Manufacturing\",\"rate\":5},{\"date\":\"2008-04-01\",\"series\":\"Manufacturing\",\"rate\":4.8},{\"date\":\"2008-05-01\",\"series\":\"Manufacturing\",\"rate\":5.3},{\"date\":\"2008-06-01\",\"series\":\"Manufacturing\",\"rate\":5.2},{\"date\":\"2008-07-01\",\"series\":\"Manufacturing\",\"rate\":5.5},{\"date\":\"2008-08-01\",\"series\":\"Manufacturing\",\"rate\":5.7},{\"date\":\"2008-09-01\",\"series\":\"Manufacturing\",\"rate\":6},{\"date\":\"2008-10-01\",\"series\":\"Manufacturing\",\"rate\":6.2},{\"date\":\"2008-11-01\",\"series\":\"Manufacturing\",\"rate\":7},{\"date\":\"2008-12-01\",\"series\":\"Manufacturing\",\"rate\":8.3},{\"date\":\"2009-01-01\",\"series\":\"Manufacturing\",\"rate\":10.9},{\"date\":\"2009-02-01\",\"series\":\"Manufacturing\",\"rate\":11.5},{\"date\":\"2009-03-01\",\"series\":\"Manufacturing\",\"rate\":12.2},{\"date\":\"2009-04-01\",\"series\":\"Manufacturing\",\"rate\":12.4},{\"date\":\"2009-05-01\",\"series\":\"Manufacturing\",\"rate\":12.6},{\"date\":\"2009-06-01\",\"series\":\"Manufacturing\",\"rate\":12.6},{\"date\":\"2009-07-01\",\"series\":\"Manufacturing\",\"rate\":12.4},{\"date\":\"2009-08-01\",\"series\":\"Manufacturing\",\"rate\":11.8},{\"date\":\"2009-09-01\",\"series\":\"Manufacturing\",\"rate\":11.9},{\"date\":\"2009-10-01\",\"series\":\"Manufacturing\",\"rate\":12.2},{\"date\":\"2009-11-01\",\"series\":\"Manufacturing\",\"rate\":12.5},{\"date\":\"2009-12-01\",\"series\":\"Manufacturing\",\"rate\":11.9},{\"date\":\"2010-01-01\",\"series\":\"Manufacturing\",\"rate\":13},{\"date\":\"2010-02-01\",\"series\":\"Manufacturing\",\"rate\":12.1},{\"date\":\"2008-01-01\",\"series\":\"Mining and Extraction\",\"rate\":4},{\"date\":\"2008-02-01\",\"series\":\"Mining and Extraction\",\"rate\":2.2},{\"date\":\"2008-03-01\",\"series\":\"Mining and Extraction\",\"rate\":3.7},{\"date\":\"2008-04-01\",\"series\":\"Mining and Extraction\",\"rate\":3.6},{\"date\":\"2008-05-01\",\"series\":\"Mining and Extraction\",\"rate\":3.4},{\"date\":\"2008-06-01\",\"series\":\"Mining and Extraction\",\"rate\":3.3},{\"date\":\"2008-07-01\",\"series\":\"Mining and Extraction\",\"rate\":1.5},{\"date\":\"2008-08-01\",\"series\":\"Mining and Extraction\",\"rate\":1.9},{\"date\":\"2008-09-01\",\"series\":\"Mining and Extraction\",\"rate\":2.8},{\"date\":\"2008-10-01\",\"series\":\"Mining and Extraction\",\"rate\":1.7},{\"date\":\"2008-11-01\",\"series\":\"Mining and Extraction\",\"rate\":3.7},{\"date\":\"2008-12-01\",\"series\":\"Mining and Extraction\",\"rate\":5.2},{\"date\":\"2009-01-01\",\"series\":\"Mining and Extraction\",\"rate\":7},{\"date\":\"2009-02-01\",\"series\":\"Mining and Extraction\",\"rate\":7.6},{\"date\":\"2009-03-01\",\"series\":\"Mining and Extraction\",\"rate\":12.6},{\"date\":\"2009-04-01\",\"series\":\"Mining and Extraction\",\"rate\":16.1},{\"date\":\"2009-05-01\",\"series\":\"Mining and Extraction\",\"rate\":13.3},{\"date\":\"2009-06-01\",\"series\":\"Mining and Extraction\",\"rate\":13.6},{\"date\":\"2009-07-01\",\"series\":\"Mining and Extraction\",\"rate\":12.6},{\"date\":\"2009-08-01\",\"series\":\"Mining and Extraction\",\"rate\":11.8},{\"date\":\"2009-09-01\",\"series\":\"Mining and Extraction\",\"rate\":10.7},{\"date\":\"2009-10-01\",\"series\":\"Mining and Extraction\",\"rate\":10.8},{\"date\":\"2009-11-01\",\"series\":\"Mining and Extraction\",\"rate\":12},{\"date\":\"2009-12-01\",\"series\":\"Mining and Extraction\",\"rate\":11.8},{\"date\":\"2010-01-01\",\"series\":\"Mining and Extraction\",\"rate\":9.1},{\"date\":\"2010-02-01\",\"series\":\"Mining and Extraction\",\"rate\":10.7}],\"metadata\":{\"date\":{\"type\":\"date\",\"semanticType\":\"YearMonth\"},\"series\":{\"type\":\"string\",\"semanticType\":\"String\"},\"rate\":{\"type\":\"number\",\"semanticType\":\"Percentage\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_unemployment):\\n    # Convert date string to datetime and then to string format for visualization\\n    df_unemployment['date'] = pd.to_datetime(df_unemployment['date'])\\n    \\n    # Filter for years 2008-2010\\n    df_filtered = df_unemployment[df_unemployment['year'].isin([2008, 2009, 2010])].copy()\\n    \\n    # Filter for top 3 most affected industries\\n    top_3_industries = ['Mining and Extraction', 'Construction', 'Manufacturing']\\n    df_filtered = df_filtered[df_filtered['series'].isin(top_3_industries)].copy()\\n    \\n    # Convert date to string format for visualization\\n    df_filtered['date'] = df_filtered['date'].dt.strftime('%Y-%m-%d')\\n    \\n    # Select only the necessary columns\\n    transformed_df = df_filtered[['date', 'series', 'rate']].copy()\\n    \\n    # Sort by date for proper line chart rendering\\n    transformed_df = transformed_df.sort_values(['series', 'date']).reset_index(drop=True)\\n    \\n    return transformed_df\\n\",\"source\":[\"unemployment-across-industries\"],\"dialog\":[{\"role\":\"system\",\"content\":\"You are a data scientist to help user to recommend data that will be used for visualization.\\nThe user will provide you information about what visualization they would like to create, and your job is to recommend a transformed data that can be used to create the visualization and write a python function to transform the data.\\nThe recommendation and transformation function should be based on the [CONTEXT] and [GOAL] provided by the user. \\nThe [CONTEXT] shows what the current dataset is, and the [GOAL] describes what the user wants the data for.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should infer the appropriate data and create in the output section a python function based off the [CONTEXT] and [GOAL] in two steps:\\n\\n1. First, based on users' [GOAL]. Create a json object that represents the inferred user intent. The json object should have the following format:\\n\\n{\\n    \\\"mode\\\": \\\"\\\" // string, one of \\\"infer\\\", \\\"overview\\\", \\\"distribution\\\", \\\"summary\\\", \\\"forecast\\\"\\n    \\\"recap\\\": \\\"...\\\" // string, a short summary of the user's goal.\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the even shorter verb phrase describing the users' goal.\\n    \\\"recommendation\\\": \\\"...\\\" // string, explain why this recommendation is made\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have (i.e., the goal of transformed data), it's a good idea to preseve intermediate fields here\\n    \\\"chart_type\\\": \\\"\\\" // string, one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\". \\\"chart_type\\\" should either be inferred from user instruction, or recommend if the user didn't specify any.\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of output fields, appropriate visual channels for different chart types are defined below.\\n}\\n\\nConcretely:\\n    - recap what the user's goal is in a short summary in \\\"recap\\\".\\n    - If the user's [GOAL] is clear already, simply infer what the user mean. Set \\\"mode\\\" as \\\"infer\\\" and create \\\"output_fields\\\" and \\\"chart_encodings\\\" based off user description.\\n    - If the user's [GOAL] is not clear, make recommendations to the user:\\n        - choose one of \\\"distribution\\\", \\\"overview\\\", \\\"summary\\\", \\\"forecast\\\" in \\\"mode\\\":\\n            * if it is \\\"overview\\\" and the data is in wide format, reshape it into long format.\\n            * if it is \\\"distribution\\\", select a few fields that would be interesting to visualize together.\\n            * if it is \\\"summary\\\", calculate some aggregated statistics to show intresting facts of the data.\\n            * if it is \\\"forecast\\\", concretize the x,y fields that will be used for forecasting and decide if it is about regression or forecasting.\\n        - describe the recommendation reason in \\\"recommendation\\\"\\n        - based on the recommendation, determine what is an ideal output data. Note, the output data must be in tidy format.\\n        - then suggest recommendations of chart encoding that should be used to create the visualization.\\n    - \\\"display_instruction\\\" should be a short verb phrase describing the users' goal, it should be even shorter than \\\"recap\\\". \\n        - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n        - generate based on \\\"recap\\\" and the suggested visualization, but don't need to mention the visualization details.\\n        - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n        - if the user instruction builds up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n        - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n        - if you mention column names from the input or the output data, highlight the text in **bold**.\\n            * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n            * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n    - \\\"chart_type\\\" must be one of \\\"point\\\", \\\"bar\\\", \\\"line\\\", \\\"area\\\", \\\"heatmap\\\", \\\"group_bar\\\"\\n    - \\\"chart_encodings\\\" should specify which fields should be used to create the visualization\\n        - decide which visual channels should be used to create the visualization appropriate for the chart type.\\n            - point: x, y, color, size, facet\\n            - histogram: x, color, facet\\n            - bar: x, y, color, facet\\n            - line: x, y, color, facet\\n            - area: x, y, color, facet\\n            - heatmap: x, y, color, facet\\n            - group_bar: x, y, color, facet\\n        - note that all fields used in \\\"chart_encodings\\\" should be included in \\\"output_fields\\\".\\n            - all fields you need for visualizations should be transformed into the output fields!\\n            - \\\"output_fields\\\" should include important intermediate fields that are not used in visualization but are used for data transformation.\\n        - typically only 2-3 fields should be used to create the visualization (x, y, color/size), facet use be added if it's a faceted visualization (totally 4 fields used).\\n    - Guidelines for choosing chart type and visualization fields:\\n        - Consider chart types as follows:\\n            - (point) Scatter Plots: x,y: Quantitative/Categorical, color: Categorical (optional), size: Quantitative (optional for creating bubble chart), \\n                - best for: Relationships, correlations, distributions, forecasting, regression analysis\\n                - scatter plots are good default way to visualize data when other chart types are not applicable.\\n                - use color to visualize points from different categories.\\n                - use size to visualize data points with an additional quantitative dimension of the data points.\\n            - (histogram) Histograms: x: Quantitative/Categorical, color: Categorical (optional for creating grouped histogram), \\n                - best for: Distribution of a quantitative field\\n                - use x values directly if x values are categorical, and transform the data into bins if the field values are quantitative.\\n                - when color is specified, the histogram will be grouped automatically (items with the same x values will be grouped).\\n            - (bar) Bar Charts: x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical/Quantitative (for stacked bar chart / showing additional quantitative dimension), \\n                - best for: Comparisons across categories\\n                - use (bar) for simple bar chart or stacked bar chart (when it makes sense to add up Y values for each category with the same X value), \\n                    - when color is specified, the bar will be stacked automatically (items with the same x values will be stacked).\\n                    - note that when there are multiple rows in the data with same x values, the bar will be stacked automatically.\\n                        - 1. consider to use an aggregated field for y values if the value is not suitable for stacking.\\n                        - 2. consider to introduce facets so that each group is visualized in a separate bar.\\n            - (group_bar) for grouped bar chart, x: Categorical (nominal/ordinal), y: Quantitative, color: Categorical\\n                - when color is specifed, bars from different groups will be grouped automatically.\\n                - only use facet if the cardinality of color field is small (less than 5).\\n            - (line) Line Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating multiple lines), \\n                - best for: Trends over time, continuous data, forecasting, regression analysis\\n                - note that when there are multiple rows in the data belong to the same group (same x and color values) but different y values, the line will not look correct.\\n                - consider to use an aggregated field for y values, or introduce facets so that each group is visualized in a separate line.\\n            - (area) Area Charts: x: Temporal (preferred) or ordinal, y: Quantitative, color: Categorical (optional for creating stacked areas), \\n                - best for: Trends over time, continuous data\\n            - (heatmap) Heatmaps: x,y: Categorical (you need to convert quantitative to nominal), color: Quantitative intensity, \\n                - best for: Pattern discovery in matrix data\\n        - facet channel is available for all chart types, it supports a categorical field with small cardinality to visualize the data in different facets.\\n        - if you really need additional legend fields:\\n            - you can use opacity for legend (support Quantitative and Categorical).\\n    - visualization fields require tidy data. \\n        - similar to VegaLite and ggplot2 so that each field is mapped to a visualization axis or legend. \\n        - consider data transformations if you want to visualize multiple fields together:\\n            - exapmle 1: suggest reshaping the data into long format in data transformation description (if these fields are all of the same type, e.g., they are all about sales, price, two columns about min/max-values, etc. don't mix different types of fields in reshaping) so we can visualize multiple fields as categories or in different facets.\\n            - exapmle 2: calculate some derived fields from these fields(e.g., correlation, difference, profit etc.) in data transformation description to visualize them in one visualization.\\n            - example 3: create a visualization only with a subset of the fields, you don't have to visualize all of them in one chart, you can later create a visualization with the rest of the fields. With the subset of charts, you can also consider reshaping or calculate some derived value.\\n            - again, it does not make sense to have five fields like [item, A, B, C, D, E] in visualization fields, you should consider data transformation to reduce the number of fields.\\n            - when reshaping data to long format, only fields of the same semantic type should be rehaped into the same column.\\n    - guide on statistical analysis:\\n        - when the user asks for forecasting or regression analysis, you should consider the following:\\n            - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n            - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n            - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n            - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n                - put is_predicted field in 'opacity' channel to distinguish them.\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n            \\n    2. Then, write a python function based on the inferred goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\n\\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined user intent in the json object.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable. \\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- you can use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n    \\n    3. The output must only contain a json object representing inferred user intent and a python code block representing the transformation code, do not add any extra text explanation.\\n\"},{\"role\":\"user\",\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (unemployment_across_industries)\\n\\n## fields\\n\\t*series -- type: object, values: Agriculture, Business services, Construction, ..., Other, Self-employed, Transportation and Utilities, Wholesale and Retail Trade\\n\\t*year -- type: int64, values: 2000, 2001, 2002, ..., 2007, 2008, 2009, 2010\\n\\t*month -- type: int64, values: 1, 2, 3, ..., 9, 10, 11, 12\\n\\t*count -- type: int64, values: 2, 8, 9, ..., 2071, 2154, 2194, 2440\\n\\t*rate -- type: float64, values: 0.3, 1.3, 1.5, ..., 21.4, 22.7, 24.7, 27.1\\n\\t*date -- type: object, values: 2000-01-01T08:00:00.000Z, 2000-02-01T08:00:00.000Z, 2000-03-01T08:00:00.000Z, ..., 2009-11-01T07:00:00.000Z, 2009-12-01T08:00:00.000Z, 2010-01-01T08:00:00.000Z, 2010-02-01T08:00:00.000Z\\n\\n## sample\\n       series  year  month  count  rate                      date\\n0  Government  2000      1    430   2.1  2000-01-01T08:00:00.000Z\\n1  Government  2000      2    409   2.0  2000-02-01T08:00:00.000Z\\n2  Government  2000      3    311   1.5  2000-03-01T08:00:00.000Z\\n3  Government  2000      4    269   1.3  2000-04-01T08:00:00.000Z\\n4  Government  2000      5    370   1.9  2000-05-01T07:00:00.000Z\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nCompare **unemployment trends** across all industries from 2000-2010\"},{\"role\":\"assistant\",\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to compare unemployment trends across all industries from 2000-2010 to understand how different sectors were affected over time.\\\",\\n    \\\"display_instruction\\\": \\\"Compare **unemployment rates** across **industries** over time\\\",\\n    \\\"recommendation\\\": \\\"A line chart with time on x-axis and unemployment rate on y-axis, with different colored lines for each industry series, will effectively show the trends and allow comparison of how unemployment evolved across different sectors during this period.\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"series\\\", \\\"rate\\\"],\\n    \\\"chart_type\\\": \\\"line\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"rate\\\",\\n        \\\"color\\\": \\\"series\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_unemployment):\\n    # Convert date string to datetime and then to string format for visualization\\n    df_unemployment['date'] = pd.to_datetime(df_unemployment['date']).dt.strftime('%Y-%m-%d')\\n    \\n    # Select only the necessary columns for visualization\\n    transformed_df = df_unemployment[['date', 'series', 'rate']].copy()\\n    \\n    return transformed_df\\n```\"},{\"role\":\"user\",\"content\":\"This is the result from the latest python code:\\n\\n         date      series  rate\\n0  2000-01-01  Government   2.1\\n1  2000-02-01  Government   2.0\\n2  2000-03-01  Government   1.5\\n3  2000-04-01  Government   1.3\\n4  2000-05-01  Government   1.9\\n5  2000-06-01  Government   3.1\\n6  2000-07-01  Government   2.9\\n7  2000-08-01  Government   3.1\\n8  2000-09-01  Government   2.1\\n9  2000-10-01  Government   2.0\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\nWhich industries showed the **sharpest increases** in unemployment during **2008-2009**?\"},{\"role\":\"assistant\",\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to identify which industries experienced the sharpest increases in unemployment rates during the 2008-2009 financial crisis period by calculating the change in unemployment rate for each industry.\\\",\\n    \\\"display_instruction\\\": \\\"Identify industries with **sharpest unemployment rate increases** during **2008-2009**\\\",\\n    \\\"recommendation\\\": \\\"A bar chart showing the change in unemployment rate from 2008 to 2009 for each industry will clearly visualize which sectors were hit hardest during the financial crisis. The industries should be sorted by the magnitude of increase to make comparison easier.\\\",\\n    \\\"output_fields\\\": [\\\"series\\\", \\\"rate_2008\\\", \\\"rate_2009\\\", \\\"rate_increase\\\"],\\n    \\\"chart_type\\\": \\\"bar\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"series\\\",\\n        \\\"y\\\": \\\"rate_increase\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_unemployment):\\n    # Convert date string to datetime\\n    df_unemployment['date'] = pd.to_datetime(df_unemployment['date'])\\n    \\n    # Filter data for years 2008 and 2009\\n    df_2008_2009 = df_unemployment[df_unemployment['year'].isin([2008, 2009])].copy()\\n    \\n    # Calculate average rate for each industry in 2008 and 2009\\n    df_2008 = df_2008_2009[df_2008_2009['year'] == 2008].groupby('series')['rate'].mean().reset_index()\\n    df_2008.columns = ['series', 'rate_2008']\\n    \\n    df_2009 = df_2008_2009[df_2008_2009['year'] == 2009].groupby('series')['rate'].mean().reset_index()\\n    df_2009.columns = ['series', 'rate_2009']\\n    \\n    # Merge and calculate the increase\\n    transformed_df = df_2008.merge(df_2009, on='series')\\n    transformed_df['rate_increase'] = transformed_df['rate_2009'] - transformed_df['rate_2008']\\n    \\n    # Sort by rate increase in descending order\\n    transformed_df = transformed_df.sort_values('rate_increase', ascending=False).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\"},{\"role\":\"user\",\"content\":\"This is the result from the latest python code:\\n\\n                         series  rate_2008  rate_2009  rate_increase\\n0         Mining and Extraction   3.083333  11.658333       8.575000\\n1                  Construction  10.600000  19.050000       8.450000\\n2                 Manufacturing   5.758333  12.075000       6.316667\\n3                   Agriculture   9.266667  14.391667       5.125000\\n4             Business services   6.558333  10.800000       4.241667\\n5                   Information   5.016667   9.225000       4.208333\\n6  Transportation and Utilities   5.133333   8.883333       3.750000\\n7    Wholesale and Retail Trade   5.841667   9.033333       3.191667\\n8       Leisure and hospitality   8.641667  11.683333       3.041667\\n9                       Finance   3.950000   6.400000       2.450000\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\nFor the **top 3 most affected industries** (Mining and Extraction, Construction, Manufacturing), compare their **monthly unemployment rate trends** during the **2008-2010 period** to analyze how quickly each industry recovered after the 2009 peak\"},{\"role\":\"assistant\",\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"User wants to analyze the monthly unemployment rate trends for the top 3 most affected industries (Mining and Extraction, Construction, Manufacturing) during 2008-2010 to understand their recovery patterns after the 2009 peak.\\\",\\n    \\\"display_instruction\\\": \\\"Compare **monthly unemployment trends** for **top 3 affected industries** during **2008-2010 recovery period**\\\",\\n    \\\"recommendation\\\": \\\"A line chart with time on x-axis and unemployment rate on y-axis, with different colored lines for the three most affected industries, will effectively show how each industry's unemployment rate evolved during and after the crisis, revealing their different recovery trajectories.\\\",\\n    \\\"output_fields\\\": [\\\"date\\\", \\\"series\\\", \\\"rate\\\"],\\n    \\\"chart_type\\\": \\\"line\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"date\\\",\\n        \\\"y\\\": \\\"rate\\\",\\n        \\\"color\\\": \\\"series\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_unemployment):\\n    # Convert date string to datetime and then to string format for visualization\\n    df_unemployment['date'] = pd.to_datetime(df_unemployment['date'])\\n    \\n    # Filter for years 2008-2010\\n    df_filtered = df_unemployment[df_unemployment['year'].isin([2008, 2009, 2010])].copy()\\n    \\n    # Filter for top 3 most affected industries\\n    top_3_industries = ['Mining and Extraction', 'Construction', 'Manufacturing']\\n    df_filtered = df_filtered[df_filtered['series'].isin(top_3_industries)].copy()\\n    \\n    # Convert date to string format for visualization\\n    df_filtered['date'] = df_filtered['date'].dt.strftime('%Y-%m-%d')\\n    \\n    # Select only the necessary columns\\n    transformed_df = df_filtered[['date', 'series', 'rate']].copy()\\n    \\n    # Sort by date for proper line chart rendering\\n    transformed_df = transformed_df.sort_values(['series', 'date']).reset_index(drop=True)\\n    \\n    return transformed_df\\n```\"}],\"trigger\":{\"tableId\":\"table-552276\",\"sourceTableIds\":[\"unemployment-across-industries\"],\"instruction\":\"For the **top 3 most affected industries** (Mining and Extraction, Construction, Manufacturing), compare their **monthly unemployment rate trends** during the **2008-2010 period** to analyze how quickly each industry recovered after the 2009 peak\",\"displayInstruction\":\"Compare **monthly unemployment trends** for **top 3 affected industries** during **2008-2010 recovery period**\",\"chart\":{\"id\":\"chart-1760745567484\",\"chartType\":\"Auto\",\"encodingMap\":{},\"tableRef\":\"unemployment-across-industries\",\"saved\":false,\"source\":\"trigger\",\"unread\":true},\"resultTableId\":\"table-570117\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"- Convert the **date** field from string to datetime format, then back to a standardized string format (`YYYY-MM-DD`)\\n- **Filter** the data to include only the years **2008**, **2009**, and **2010** (the period around the financial crisis)\\n- **Select** the top 3 most affected industries: **Mining and Extraction**, **Construction**, and **Manufacturing**\\n- **Extract** only the essential columns: **date**, **series** (industry name), and **rate** (unemployment rate)\\n- **Sort** the data by **series** and **date** to ensure proper chronological ordering for time series visualization\",\"concepts\":[],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (unemployment_across_industries)\\n\\n## fields\\n\\t*series -- type: object, values: Agriculture, Business services, Construction, ..., Other, Self-employed, Transportation and Utilities, Wholesale and Retail Trade\\n\\t*year -- type: int64, values: 2000, 2001, 2002, ..., 2007, 2008, 2009, 2010\\n\\t*month -- type: int64, values: 1, 2, 3, ..., 9, 10, 11, 12\\n\\t*count -- type: int64, values: 2, 8, 9, ..., 2071, 2154, 2194, 2440\\n\\t*rate -- type: float64, values: 0.3, 1.3, 1.5, ..., 21.4, 22.7, 24.7, 27.1\\n\\t*date -- type: object, values: 2000-01-01T08:00:00.000Z, 2000-02-01T08:00:00.000Z, 2000-03-01T08:00:00.000Z, ..., 2009-11-01T07:00:00.000Z, 2009-12-01T08:00:00.000Z, 2010-01-01T08:00:00.000Z, 2010-02-01T08:00:00.000Z\\n\\n## sample\\n       series  year  month  count  rate                      date\\n0  Government  2000      1    430   2.1  2000-01-01T08:00:00.000Z\\n1  Government  2000      2    409   2.0  2000-02-01T08:00:00.000Z\\n2  Government  2000      3    311   1.5  2000-03-01T08:00:00.000Z\\n3  Government  2000      4    269   1.3  2000-04-01T08:00:00.000Z\\n4  Government  2000      5    370   1.9  2000-05-01T07:00:00.000Z\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df_unemployment):\\n    # Convert date string to datetime and then to string format for visualization\\n    df_unemployment['date'] = pd.to_datetime(df_unemployment['date'])\\n    \\n    # Filter for years 2008-2010\\n    df_filtered = df_unemployment[df_unemployment['year'].isin([2008, 2009, 2010])].copy()\\n    \\n    # Filter for top 3 most affected industries\\n    top_3_industries = ['Mining and Extraction', 'Construction', 'Manufacturing']\\n    df_filtered = df_filtered[df_filtered['series'].isin(top_3_industries)].copy()\\n    \\n    # Convert date to string format for visualization\\n    df_filtered['date'] = df_filtered['date'].dt.strftime('%Y-%m-%d')\\n    \\n    # Select only the necessary columns\\n    transformed_df = df_filtered[['date', 'series', 'rate']].copy()\\n    \\n    # Sort by date for proper line chart rendering\\n    transformed_df = transformed_df.sort_values(['series', 'date']).reset_index(drop=True)\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\n- Convert the **date** field from string to datetime format, then back to a standardized string format (`YYYY-MM-DD`)\\n- **Filter** the data to include only the years **2008**, **2009**, and **2010** (the period around the financial crisis)\\n- **Select** the top 3 most affected industries: **Mining and Extraction**, **Construction**, and **Manufacturing**\\n- **Extract** only the essential columns: **date**, **series** (industry name), and **rate** (unemployment rate)\\n- **Sort** the data by **series** and **date** to ensure proper chronological ordering for time series visualization\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"},{\"id\":\"table-53\",\"displayId\":\"industry-rates\",\"names\":[\"avg_rate\",\"month\",\"series\",\"year\"],\"rows\":[{\"avg_rate\":10.3,\"month\":1,\"series\":\"Agriculture\",\"year\":\"2000\"},{\"avg_rate\":11.5,\"month\":2,\"series\":\"Agriculture\",\"year\":\"2000\"},{\"avg_rate\":10.4,\"month\":3,\"series\":\"Agriculture\",\"year\":\"2000\"},{\"avg_rate\":8.9,\"month\":4,\"series\":\"Agriculture\",\"year\":\"2000\"},{\"avg_rate\":5.1,\"month\":5,\"series\":\"Agriculture\",\"year\":\"2000\"},{\"avg_rate\":6.7,\"month\":6,\"series\":\"Agriculture\",\"year\":\"2000\"},{\"avg_rate\":5,\"month\":7,\"series\":\"Agriculture\",\"year\":\"2000\"},{\"avg_rate\":7,\"month\":8,\"series\":\"Agriculture\",\"year\":\"2000\"},{\"avg_rate\":8.2,\"month\":9,\"series\":\"Agriculture\",\"year\":\"2000\"},{\"avg_rate\":8,\"month\":10,\"series\":\"Agriculture\",\"year\":\"2000\"},{\"avg_rate\":13.3,\"month\":11,\"series\":\"Agriculture\",\"year\":\"2000\"},{\"avg_rate\":13.9,\"month\":12,\"series\":\"Agriculture\",\"year\":\"2000\"},{\"avg_rate\":13.8,\"month\":1,\"series\":\"Agriculture\",\"year\":\"2001\"},{\"avg_rate\":15.1,\"month\":2,\"series\":\"Agriculture\",\"year\":\"2001\"},{\"avg_rate\":19.2,\"month\":3,\"series\":\"Agriculture\",\"year\":\"2001\"},{\"avg_rate\":10.4,\"month\":4,\"series\":\"Agriculture\",\"year\":\"2001\"},{\"avg_rate\":7.7,\"month\":5,\"series\":\"Agriculture\",\"year\":\"2001\"},{\"avg_rate\":9.7,\"month\":6,\"series\":\"Agriculture\",\"year\":\"2001\"},{\"avg_rate\":7.6,\"month\":7,\"series\":\"Agriculture\",\"year\":\"2001\"},{\"avg_rate\":9.3,\"month\":8,\"series\":\"Agriculture\",\"year\":\"2001\"},{\"avg_rate\":7.2,\"month\":9,\"series\":\"Agriculture\",\"year\":\"2001\"},{\"avg_rate\":8.7,\"month\":10,\"series\":\"Agriculture\",\"year\":\"2001\"},{\"avg_rate\":11.6,\"month\":11,\"series\":\"Agriculture\",\"year\":\"2001\"},{\"avg_rate\":15.1,\"month\":12,\"series\":\"Agriculture\",\"year\":\"2001\"},{\"avg_rate\":14.8,\"month\":1,\"series\":\"Agriculture\",\"year\":\"2002\"},{\"avg_rate\":14.8,\"month\":2,\"series\":\"Agriculture\",\"year\":\"2002\"},{\"avg_rate\":19.6,\"month\":3,\"series\":\"Agriculture\",\"year\":\"2002\"},{\"avg_rate\":10.8,\"month\":4,\"series\":\"Agriculture\",\"year\":\"2002\"},{\"avg_rate\":6.8,\"month\":5,\"series\":\"Agriculture\",\"year\":\"2002\"},{\"avg_rate\":6.3,\"month\":6,\"series\":\"Agriculture\",\"year\":\"2002\"},{\"avg_rate\":7.3,\"month\":7,\"series\":\"Agriculture\",\"year\":\"2002\"},{\"avg_rate\":9,\"month\":8,\"series\":\"Agriculture\",\"year\":\"2002\"},{\"avg_rate\":6.3,\"month\":9,\"series\":\"Agriculture\",\"year\":\"2002\"},{\"avg_rate\":6.6,\"month\":10,\"series\":\"Agriculture\",\"year\":\"2002\"},{\"avg_rate\":11.1,\"month\":11,\"series\":\"Agriculture\",\"year\":\"2002\"},{\"avg_rate\":9.8,\"month\":12,\"series\":\"Agriculture\",\"year\":\"2002\"},{\"avg_rate\":13.2,\"month\":1,\"series\":\"Agriculture\",\"year\":\"2003\"},{\"avg_rate\":14.7,\"month\":2,\"series\":\"Agriculture\",\"year\":\"2003\"},{\"avg_rate\":12.9,\"month\":3,\"series\":\"Agriculture\",\"year\":\"2003\"},{\"avg_rate\":12,\"month\":4,\"series\":\"Agriculture\",\"year\":\"2003\"},{\"avg_rate\":10.2,\"month\":5,\"series\":\"Agriculture\",\"year\":\"2003\"},{\"avg_rate\":6.9,\"month\":6,\"series\":\"Agriculture\",\"year\":\"2003\"},{\"avg_rate\":8.2,\"month\":7,\"series\":\"Agriculture\",\"year\":\"2003\"},{\"avg_rate\":10.7,\"month\":8,\"series\":\"Agriculture\",\"year\":\"2003\"},{\"avg_rate\":6.2,\"month\":9,\"series\":\"Agriculture\",\"year\":\"2003\"},{\"avg_rate\":8.5,\"month\":10,\"series\":\"Agriculture\",\"year\":\"2003\"},{\"avg_rate\":10.3,\"month\":11,\"series\":\"Agriculture\",\"year\":\"2003\"},{\"avg_rate\":10.9,\"month\":12,\"series\":\"Agriculture\",\"year\":\"2003\"},{\"avg_rate\":15.1,\"month\":1,\"series\":\"Agriculture\",\"year\":\"2004\"},{\"avg_rate\":14.2,\"month\":2,\"series\":\"Agriculture\",\"year\":\"2004\"},{\"avg_rate\":12.7,\"month\":3,\"series\":\"Agriculture\",\"year\":\"2004\"},{\"avg_rate\":8.3,\"month\":4,\"series\":\"Agriculture\",\"year\":\"2004\"},{\"avg_rate\":7.4,\"month\":5,\"series\":\"Agriculture\",\"year\":\"2004\"},{\"avg_rate\":7.6,\"month\":6,\"series\":\"Agriculture\",\"year\":\"2004\"},{\"avg_rate\":10,\"month\":7,\"series\":\"Agriculture\",\"year\":\"2004\"},{\"avg_rate\":7,\"month\":8,\"series\":\"Agriculture\",\"year\":\"2004\"},{\"avg_rate\":6.4,\"month\":9,\"series\":\"Agriculture\",\"year\":\"2004\"},{\"avg_rate\":7.7,\"month\":10,\"series\":\"Agriculture\",\"year\":\"2004\"},{\"avg_rate\":10.5,\"month\":11,\"series\":\"Agriculture\",\"year\":\"2004\"},{\"avg_rate\":14,\"month\":12,\"series\":\"Agriculture\",\"year\":\"2004\"},{\"avg_rate\":13.2,\"month\":1,\"series\":\"Agriculture\",\"year\":\"2005\"},{\"avg_rate\":9.9,\"month\":2,\"series\":\"Agriculture\",\"year\":\"2005\"},{\"avg_rate\":11.8,\"month\":3,\"series\":\"Agriculture\",\"year\":\"2005\"},{\"avg_rate\":6.9,\"month\":4,\"series\":\"Agriculture\",\"year\":\"2005\"},{\"avg_rate\":5.3,\"month\":5,\"series\":\"Agriculture\",\"year\":\"2005\"},{\"avg_rate\":5.2,\"month\":6,\"series\":\"Agriculture\",\"year\":\"2005\"},{\"avg_rate\":4.7,\"month\":7,\"series\":\"Agriculture\",\"year\":\"2005\"},{\"avg_rate\":7.1,\"month\":8,\"series\":\"Agriculture\",\"year\":\"2005\"},{\"avg_rate\":9.5,\"month\":9,\"series\":\"Agriculture\",\"year\":\"2005\"},{\"avg_rate\":6.7,\"month\":10,\"series\":\"Agriculture\",\"year\":\"2005\"},{\"avg_rate\":9.6,\"month\":11,\"series\":\"Agriculture\",\"year\":\"2005\"},{\"avg_rate\":11.1,\"month\":12,\"series\":\"Agriculture\",\"year\":\"2005\"},{\"avg_rate\":11.5,\"month\":1,\"series\":\"Agriculture\",\"year\":\"2006\"},{\"avg_rate\":11.8,\"month\":2,\"series\":\"Agriculture\",\"year\":\"2006\"},{\"avg_rate\":9.8,\"month\":3,\"series\":\"Agriculture\",\"year\":\"2006\"},{\"avg_rate\":6.2,\"month\":4,\"series\":\"Agriculture\",\"year\":\"2006\"},{\"avg_rate\":6,\"month\":5,\"series\":\"Agriculture\",\"year\":\"2006\"},{\"avg_rate\":2.4,\"month\":6,\"series\":\"Agriculture\",\"year\":\"2006\"},{\"avg_rate\":3.6,\"month\":7,\"series\":\"Agriculture\",\"year\":\"2006\"},{\"avg_rate\":5.3,\"month\":8,\"series\":\"Agriculture\",\"year\":\"2006\"},{\"avg_rate\":5.9,\"month\":9,\"series\":\"Agriculture\",\"year\":\"2006\"},{\"avg_rate\":5.8,\"month\":10,\"series\":\"Agriculture\",\"year\":\"2006\"},{\"avg_rate\":9.6,\"month\":11,\"series\":\"Agriculture\",\"year\":\"2006\"},{\"avg_rate\":10.4,\"month\":12,\"series\":\"Agriculture\",\"year\":\"2006\"},{\"avg_rate\":10,\"month\":1,\"series\":\"Agriculture\",\"year\":\"2007\"},{\"avg_rate\":9.6,\"month\":2,\"series\":\"Agriculture\",\"year\":\"2007\"},{\"avg_rate\":9.7,\"month\":3,\"series\":\"Agriculture\",\"year\":\"2007\"},{\"avg_rate\":5.7,\"month\":4,\"series\":\"Agriculture\",\"year\":\"2007\"},{\"avg_rate\":5.1,\"month\":5,\"series\":\"Agriculture\",\"year\":\"2007\"},{\"avg_rate\":4.5,\"month\":6,\"series\":\"Agriculture\",\"year\":\"2007\"},{\"avg_rate\":3.1,\"month\":7,\"series\":\"Agriculture\",\"year\":\"2007\"},{\"avg_rate\":4.7,\"month\":8,\"series\":\"Agriculture\",\"year\":\"2007\"},{\"avg_rate\":4.3,\"month\":9,\"series\":\"Agriculture\",\"year\":\"2007\"},{\"avg_rate\":4,\"month\":10,\"series\":\"Agriculture\",\"year\":\"2007\"},{\"avg_rate\":6.6,\"month\":11,\"series\":\"Agriculture\",\"year\":\"2007\"},{\"avg_rate\":7.5,\"month\":12,\"series\":\"Agriculture\",\"year\":\"2007\"},{\"avg_rate\":9.5,\"month\":1,\"series\":\"Agriculture\",\"year\":\"2008\"},{\"avg_rate\":10.9,\"month\":2,\"series\":\"Agriculture\",\"year\":\"2008\"},{\"avg_rate\":13.2,\"month\":3,\"series\":\"Agriculture\",\"year\":\"2008\"},{\"avg_rate\":8.6,\"month\":4,\"series\":\"Agriculture\",\"year\":\"2008\"},{\"avg_rate\":7.4,\"month\":5,\"series\":\"Agriculture\",\"year\":\"2008\"},{\"avg_rate\":6.1,\"month\":6,\"series\":\"Agriculture\",\"year\":\"2008\"},{\"avg_rate\":8.5,\"month\":7,\"series\":\"Agriculture\",\"year\":\"2008\"},{\"avg_rate\":7.6,\"month\":8,\"series\":\"Agriculture\",\"year\":\"2008\"},{\"avg_rate\":5.8,\"month\":9,\"series\":\"Agriculture\",\"year\":\"2008\"},{\"avg_rate\":7.1,\"month\":10,\"series\":\"Agriculture\",\"year\":\"2008\"},{\"avg_rate\":9.5,\"month\":11,\"series\":\"Agriculture\",\"year\":\"2008\"},{\"avg_rate\":17,\"month\":12,\"series\":\"Agriculture\",\"year\":\"2008\"},{\"avg_rate\":18.7,\"month\":1,\"series\":\"Agriculture\",\"year\":\"2009\"},{\"avg_rate\":18.8,\"month\":2,\"series\":\"Agriculture\",\"year\":\"2009\"},{\"avg_rate\":19,\"month\":3,\"series\":\"Agriculture\",\"year\":\"2009\"},{\"avg_rate\":13.5,\"month\":4,\"series\":\"Agriculture\",\"year\":\"2009\"},{\"avg_rate\":10,\"month\":5,\"series\":\"Agriculture\",\"year\":\"2009\"},{\"avg_rate\":12.3,\"month\":6,\"series\":\"Agriculture\",\"year\":\"2009\"},{\"avg_rate\":12.1,\"month\":7,\"series\":\"Agriculture\",\"year\":\"2009\"},{\"avg_rate\":13.1,\"month\":8,\"series\":\"Agriculture\",\"year\":\"2009\"},{\"avg_rate\":11.1,\"month\":9,\"series\":\"Agriculture\",\"year\":\"2009\"},{\"avg_rate\":11.8,\"month\":10,\"series\":\"Agriculture\",\"year\":\"2009\"},{\"avg_rate\":12.6,\"month\":11,\"series\":\"Agriculture\",\"year\":\"2009\"},{\"avg_rate\":19.7,\"month\":12,\"series\":\"Agriculture\",\"year\":\"2009\"},{\"avg_rate\":21.3,\"month\":1,\"series\":\"Agriculture\",\"year\":\"2010\"},{\"avg_rate\":18.8,\"month\":2,\"series\":\"Agriculture\",\"year\":\"2010\"},{\"avg_rate\":9.7,\"month\":1,\"series\":\"Construction\",\"year\":\"2000\"},{\"avg_rate\":10.6,\"month\":2,\"series\":\"Construction\",\"year\":\"2000\"},{\"avg_rate\":8.7,\"month\":3,\"series\":\"Construction\",\"year\":\"2000\"},{\"avg_rate\":5.8,\"month\":4,\"series\":\"Construction\",\"year\":\"2000\"},{\"avg_rate\":5,\"month\":5,\"series\":\"Construction\",\"year\":\"2000\"},{\"avg_rate\":4.6,\"month\":6,\"series\":\"Construction\",\"year\":\"2000\"},{\"avg_rate\":4.4,\"month\":7,\"series\":\"Construction\",\"year\":\"2000\"},{\"avg_rate\":5.1,\"month\":8,\"series\":\"Construction\",\"year\":\"2000\"},{\"avg_rate\":4.6,\"month\":9,\"series\":\"Construction\",\"year\":\"2000\"},{\"avg_rate\":4.9,\"month\":10,\"series\":\"Construction\",\"year\":\"2000\"},{\"avg_rate\":5.7,\"month\":11,\"series\":\"Construction\",\"year\":\"2000\"},{\"avg_rate\":6.8,\"month\":12,\"series\":\"Construction\",\"year\":\"2000\"},{\"avg_rate\":9.8,\"month\":1,\"series\":\"Construction\",\"year\":\"2001\"},{\"avg_rate\":9.9,\"month\":2,\"series\":\"Construction\",\"year\":\"2001\"},{\"avg_rate\":8.4,\"month\":3,\"series\":\"Construction\",\"year\":\"2001\"},{\"avg_rate\":7.1,\"month\":4,\"series\":\"Construction\",\"year\":\"2001\"},{\"avg_rate\":5.6,\"month\":5,\"series\":\"Construction\",\"year\":\"2001\"},{\"avg_rate\":5.1,\"month\":6,\"series\":\"Construction\",\"year\":\"2001\"},{\"avg_rate\":4.9,\"month\":7,\"series\":\"Construction\",\"year\":\"2001\"},{\"avg_rate\":5.8,\"month\":8,\"series\":\"Construction\",\"year\":\"2001\"},{\"avg_rate\":5.5,\"month\":9,\"series\":\"Construction\",\"year\":\"2001\"},{\"avg_rate\":6.1,\"month\":10,\"series\":\"Construction\",\"year\":\"2001\"},{\"avg_rate\":7.6,\"month\":11,\"series\":\"Construction\",\"year\":\"2001\"},{\"avg_rate\":9,\"month\":12,\"series\":\"Construction\",\"year\":\"2001\"},{\"avg_rate\":13.6,\"month\":1,\"series\":\"Construction\",\"year\":\"2002\"},{\"avg_rate\":12.2,\"month\":2,\"series\":\"Construction\",\"year\":\"2002\"},{\"avg_rate\":11.8,\"month\":3,\"series\":\"Construction\",\"year\":\"2002\"},{\"avg_rate\":10.1,\"month\":4,\"series\":\"Construction\",\"year\":\"2002\"},{\"avg_rate\":7.4,\"month\":5,\"series\":\"Construction\",\"year\":\"2002\"},{\"avg_rate\":6.9,\"month\":6,\"series\":\"Construction\",\"year\":\"2002\"},{\"avg_rate\":6.9,\"month\":7,\"series\":\"Construction\",\"year\":\"2002\"},{\"avg_rate\":7.4,\"month\":8,\"series\":\"Construction\",\"year\":\"2002\"},{\"avg_rate\":7,\"month\":9,\"series\":\"Construction\",\"year\":\"2002\"},{\"avg_rate\":7.7,\"month\":10,\"series\":\"Construction\",\"year\":\"2002\"},{\"avg_rate\":8.5,\"month\":11,\"series\":\"Construction\",\"year\":\"2002\"},{\"avg_rate\":10.9,\"month\":12,\"series\":\"Construction\",\"year\":\"2002\"},{\"avg_rate\":14,\"month\":1,\"series\":\"Construction\",\"year\":\"2003\"},{\"avg_rate\":14,\"month\":2,\"series\":\"Construction\",\"year\":\"2003\"},{\"avg_rate\":11.8,\"month\":3,\"series\":\"Construction\",\"year\":\"2003\"},{\"avg_rate\":9.3,\"month\":4,\"series\":\"Construction\",\"year\":\"2003\"},{\"avg_rate\":8.4,\"month\":5,\"series\":\"Construction\",\"year\":\"2003\"},{\"avg_rate\":7.9,\"month\":6,\"series\":\"Construction\",\"year\":\"2003\"},{\"avg_rate\":7.5,\"month\":7,\"series\":\"Construction\",\"year\":\"2003\"},{\"avg_rate\":7.1,\"month\":8,\"series\":\"Construction\",\"year\":\"2003\"},{\"avg_rate\":7.6,\"month\":9,\"series\":\"Construction\",\"year\":\"2003\"},{\"avg_rate\":7.4,\"month\":10,\"series\":\"Construction\",\"year\":\"2003\"},{\"avg_rate\":7.8,\"month\":11,\"series\":\"Construction\",\"year\":\"2003\"},{\"avg_rate\":9.3,\"month\":12,\"series\":\"Construction\",\"year\":\"2003\"},{\"avg_rate\":11.3,\"month\":1,\"series\":\"Construction\",\"year\":\"2004\"},{\"avg_rate\":11.6,\"month\":2,\"series\":\"Construction\",\"year\":\"2004\"},{\"avg_rate\":11.3,\"month\":3,\"series\":\"Construction\",\"year\":\"2004\"},{\"avg_rate\":9.5,\"month\":4,\"series\":\"Construction\",\"year\":\"2004\"},{\"avg_rate\":7.4,\"month\":5,\"series\":\"Construction\",\"year\":\"2004\"},{\"avg_rate\":7,\"month\":6,\"series\":\"Construction\",\"year\":\"2004\"},{\"avg_rate\":6.4,\"month\":7,\"series\":\"Construction\",\"year\":\"2004\"},{\"avg_rate\":6,\"month\":8,\"series\":\"Construction\",\"year\":\"2004\"},{\"avg_rate\":6.8,\"month\":9,\"series\":\"Construction\",\"year\":\"2004\"},{\"avg_rate\":6.9,\"month\":10,\"series\":\"Construction\",\"year\":\"2004\"},{\"avg_rate\":7.4,\"month\":11,\"series\":\"Construction\",\"year\":\"2004\"},{\"avg_rate\":9.5,\"month\":12,\"series\":\"Construction\",\"year\":\"2004\"},{\"avg_rate\":11.8,\"month\":1,\"series\":\"Construction\",\"year\":\"2005\"},{\"avg_rate\":12.3,\"month\":2,\"series\":\"Construction\",\"year\":\"2005\"},{\"avg_rate\":10.3,\"month\":3,\"series\":\"Construction\",\"year\":\"2005\"},{\"avg_rate\":7.4,\"month\":4,\"series\":\"Construction\",\"year\":\"2005\"},{\"avg_rate\":6.1,\"month\":5,\"series\":\"Construction\",\"year\":\"2005\"},{\"avg_rate\":5.7,\"month\":6,\"series\":\"Construction\",\"year\":\"2005\"},{\"avg_rate\":5.2,\"month\":7,\"series\":\"Construction\",\"year\":\"2005\"},{\"avg_rate\":5.7,\"month\":8,\"series\":\"Construction\",\"year\":\"2005\"},{\"avg_rate\":5.7,\"month\":9,\"series\":\"Construction\",\"year\":\"2005\"},{\"avg_rate\":5.3,\"month\":10,\"series\":\"Construction\",\"year\":\"2005\"},{\"avg_rate\":5.7,\"month\":11,\"series\":\"Construction\",\"year\":\"2005\"},{\"avg_rate\":8.2,\"month\":12,\"series\":\"Construction\",\"year\":\"2005\"},{\"avg_rate\":9,\"month\":1,\"series\":\"Construction\",\"year\":\"2006\"},{\"avg_rate\":8.6,\"month\":2,\"series\":\"Construction\",\"year\":\"2006\"},{\"avg_rate\":8.5,\"month\":3,\"series\":\"Construction\",\"year\":\"2006\"},{\"avg_rate\":6.9,\"month\":4,\"series\":\"Construction\",\"year\":\"2006\"},{\"avg_rate\":6.6,\"month\":5,\"series\":\"Construction\",\"year\":\"2006\"},{\"avg_rate\":5.6,\"month\":6,\"series\":\"Construction\",\"year\":\"2006\"},{\"avg_rate\":6.1,\"month\":7,\"series\":\"Construction\",\"year\":\"2006\"},{\"avg_rate\":5.9,\"month\":8,\"series\":\"Construction\",\"year\":\"2006\"},{\"avg_rate\":5.6,\"month\":9,\"series\":\"Construction\",\"year\":\"2006\"},{\"avg_rate\":4.5,\"month\":10,\"series\":\"Construction\",\"year\":\"2006\"},{\"avg_rate\":6,\"month\":11,\"series\":\"Construction\",\"year\":\"2006\"},{\"avg_rate\":6.9,\"month\":12,\"series\":\"Construction\",\"year\":\"2006\"},{\"avg_rate\":8.9,\"month\":1,\"series\":\"Construction\",\"year\":\"2007\"},{\"avg_rate\":10.5,\"month\":2,\"series\":\"Construction\",\"year\":\"2007\"},{\"avg_rate\":9,\"month\":3,\"series\":\"Construction\",\"year\":\"2007\"},{\"avg_rate\":8.6,\"month\":4,\"series\":\"Construction\",\"year\":\"2007\"},{\"avg_rate\":6.9,\"month\":5,\"series\":\"Construction\",\"year\":\"2007\"},{\"avg_rate\":5.9,\"month\":6,\"series\":\"Construction\",\"year\":\"2007\"},{\"avg_rate\":5.9,\"month\":7,\"series\":\"Construction\",\"year\":\"2007\"},{\"avg_rate\":5.3,\"month\":8,\"series\":\"Construction\",\"year\":\"2007\"},{\"avg_rate\":5.8,\"month\":9,\"series\":\"Construction\",\"year\":\"2007\"},{\"avg_rate\":6.1,\"month\":10,\"series\":\"Construction\",\"year\":\"2007\"},{\"avg_rate\":6.2,\"month\":11,\"series\":\"Construction\",\"year\":\"2007\"},{\"avg_rate\":9.4,\"month\":12,\"series\":\"Construction\",\"year\":\"2007\"},{\"avg_rate\":11,\"month\":1,\"series\":\"Construction\",\"year\":\"2008\"},{\"avg_rate\":11.4,\"month\":2,\"series\":\"Construction\",\"year\":\"2008\"},{\"avg_rate\":12,\"month\":3,\"series\":\"Construction\",\"year\":\"2008\"},{\"avg_rate\":11.1,\"month\":4,\"series\":\"Construction\",\"year\":\"2008\"},{\"avg_rate\":8.6,\"month\":5,\"series\":\"Construction\",\"year\":\"2008\"},{\"avg_rate\":8.2,\"month\":6,\"series\":\"Construction\",\"year\":\"2008\"},{\"avg_rate\":8,\"month\":7,\"series\":\"Construction\",\"year\":\"2008\"},{\"avg_rate\":8.2,\"month\":8,\"series\":\"Construction\",\"year\":\"2008\"},{\"avg_rate\":9.9,\"month\":9,\"series\":\"Construction\",\"year\":\"2008\"},{\"avg_rate\":10.8,\"month\":10,\"series\":\"Construction\",\"year\":\"2008\"},{\"avg_rate\":12.7,\"month\":11,\"series\":\"Construction\",\"year\":\"2008\"},{\"avg_rate\":15.3,\"month\":12,\"series\":\"Construction\",\"year\":\"2008\"},{\"avg_rate\":18.2,\"month\":1,\"series\":\"Construction\",\"year\":\"2009\"},{\"avg_rate\":21.4,\"month\":2,\"series\":\"Construction\",\"year\":\"2009\"},{\"avg_rate\":21.1,\"month\":3,\"series\":\"Construction\",\"year\":\"2009\"},{\"avg_rate\":18.7,\"month\":4,\"series\":\"Construction\",\"year\":\"2009\"},{\"avg_rate\":19.2,\"month\":5,\"series\":\"Construction\",\"year\":\"2009\"},{\"avg_rate\":17.4,\"month\":6,\"series\":\"Construction\",\"year\":\"2009\"},{\"avg_rate\":18.2,\"month\":7,\"series\":\"Construction\",\"year\":\"2009\"},{\"avg_rate\":16.5,\"month\":8,\"series\":\"Construction\",\"year\":\"2009\"},{\"avg_rate\":17.1,\"month\":9,\"series\":\"Construction\",\"year\":\"2009\"},{\"avg_rate\":18.7,\"month\":10,\"series\":\"Construction\",\"year\":\"2009\"},{\"avg_rate\":19.4,\"month\":11,\"series\":\"Construction\",\"year\":\"2009\"},{\"avg_rate\":22.7,\"month\":12,\"series\":\"Construction\",\"year\":\"2009\"},{\"avg_rate\":24.7,\"month\":1,\"series\":\"Construction\",\"year\":\"2010\"},{\"avg_rate\":27.1,\"month\":2,\"series\":\"Construction\",\"year\":\"2010\"},{\"avg_rate\":3.9,\"month\":1,\"series\":\"Mining and Extraction\",\"year\":\"2000\"},{\"avg_rate\":5.5,\"month\":2,\"series\":\"Mining and Extraction\",\"year\":\"2000\"},{\"avg_rate\":3.7,\"month\":3,\"series\":\"Mining and Extraction\",\"year\":\"2000\"},{\"avg_rate\":4.1,\"month\":4,\"series\":\"Mining and Extraction\",\"year\":\"2000\"},{\"avg_rate\":5.3,\"month\":5,\"series\":\"Mining and Extraction\",\"year\":\"2000\"},{\"avg_rate\":2.6,\"month\":6,\"series\":\"Mining and Extraction\",\"year\":\"2000\"},{\"avg_rate\":3.6,\"month\":7,\"series\":\"Mining and Extraction\",\"year\":\"2000\"},{\"avg_rate\":5.1,\"month\":8,\"series\":\"Mining and Extraction\",\"year\":\"2000\"},{\"avg_rate\":5.8,\"month\":9,\"series\":\"Mining and Extraction\",\"year\":\"2000\"},{\"avg_rate\":7.8,\"month\":10,\"series\":\"Mining and Extraction\",\"year\":\"2000\"},{\"avg_rate\":2,\"month\":11,\"series\":\"Mining and Extraction\",\"year\":\"2000\"},{\"avg_rate\":3.8,\"month\":12,\"series\":\"Mining and Extraction\",\"year\":\"2000\"},{\"avg_rate\":2.3,\"month\":1,\"series\":\"Mining and Extraction\",\"year\":\"2001\"},{\"avg_rate\":5.3,\"month\":2,\"series\":\"Mining and Extraction\",\"year\":\"2001\"},{\"avg_rate\":3,\"month\":3,\"series\":\"Mining and Extraction\",\"year\":\"2001\"},{\"avg_rate\":4.7,\"month\":4,\"series\":\"Mining and Extraction\",\"year\":\"2001\"},{\"avg_rate\":5.9,\"month\":5,\"series\":\"Mining and Extraction\",\"year\":\"2001\"},{\"avg_rate\":4.7,\"month\":6,\"series\":\"Mining and Extraction\",\"year\":\"2001\"},{\"avg_rate\":3.1,\"month\":7,\"series\":\"Mining and Extraction\",\"year\":\"2001\"},{\"avg_rate\":3.3,\"month\":8,\"series\":\"Mining and Extraction\",\"year\":\"2001\"},{\"avg_rate\":4.2,\"month\":9,\"series\":\"Mining and Extraction\",\"year\":\"2001\"},{\"avg_rate\":5.4,\"month\":10,\"series\":\"Mining and Extraction\",\"year\":\"2001\"},{\"avg_rate\":3.6,\"month\":11,\"series\":\"Mining and Extraction\",\"year\":\"2001\"},{\"avg_rate\":5.3,\"month\":12,\"series\":\"Mining and Extraction\",\"year\":\"2001\"},{\"avg_rate\":7,\"month\":1,\"series\":\"Mining and Extraction\",\"year\":\"2002\"},{\"avg_rate\":7.5,\"month\":2,\"series\":\"Mining and Extraction\",\"year\":\"2002\"},{\"avg_rate\":5.3,\"month\":3,\"series\":\"Mining and Extraction\",\"year\":\"2002\"},{\"avg_rate\":6.1,\"month\":4,\"series\":\"Mining and Extraction\",\"year\":\"2002\"},{\"avg_rate\":4.9,\"month\":5,\"series\":\"Mining and Extraction\",\"year\":\"2002\"},{\"avg_rate\":7.1,\"month\":6,\"series\":\"Mining and Extraction\",\"year\":\"2002\"},{\"avg_rate\":3.9,\"month\":7,\"series\":\"Mining and Extraction\",\"year\":\"2002\"},{\"avg_rate\":6.3,\"month\":8,\"series\":\"Mining and Extraction\",\"year\":\"2002\"},{\"avg_rate\":7.9,\"month\":9,\"series\":\"Mining and Extraction\",\"year\":\"2002\"},{\"avg_rate\":6.4,\"month\":10,\"series\":\"Mining and Extraction\",\"year\":\"2002\"},{\"avg_rate\":5.4,\"month\":11,\"series\":\"Mining and Extraction\",\"year\":\"2002\"},{\"avg_rate\":7.8,\"month\":12,\"series\":\"Mining and Extraction\",\"year\":\"2002\"},{\"avg_rate\":9,\"month\":1,\"series\":\"Mining and Extraction\",\"year\":\"2003\"},{\"avg_rate\":7.1,\"month\":2,\"series\":\"Mining and Extraction\",\"year\":\"2003\"},{\"avg_rate\":8.2,\"month\":3,\"series\":\"Mining and Extraction\",\"year\":\"2003\"},{\"avg_rate\":7.7,\"month\":4,\"series\":\"Mining and Extraction\",\"year\":\"2003\"},{\"avg_rate\":7.5,\"month\":5,\"series\":\"Mining and Extraction\",\"year\":\"2003\"},{\"avg_rate\":6.8,\"month\":6,\"series\":\"Mining and Extraction\",\"year\":\"2003\"},{\"avg_rate\":7.9,\"month\":7,\"series\":\"Mining and Extraction\",\"year\":\"2003\"},{\"avg_rate\":3.8,\"month\":8,\"series\":\"Mining and Extraction\",\"year\":\"2003\"},{\"avg_rate\":4.6,\"month\":9,\"series\":\"Mining and Extraction\",\"year\":\"2003\"},{\"avg_rate\":5.6,\"month\":10,\"series\":\"Mining and Extraction\",\"year\":\"2003\"},{\"avg_rate\":5.9,\"month\":11,\"series\":\"Mining and Extraction\",\"year\":\"2003\"},{\"avg_rate\":5.6,\"month\":12,\"series\":\"Mining and Extraction\",\"year\":\"2003\"},{\"avg_rate\":5.8,\"month\":1,\"series\":\"Mining and Extraction\",\"year\":\"2004\"},{\"avg_rate\":5,\"month\":2,\"series\":\"Mining and Extraction\",\"year\":\"2004\"},{\"avg_rate\":4.4,\"month\":3,\"series\":\"Mining and Extraction\",\"year\":\"2004\"},{\"avg_rate\":6.4,\"month\":4,\"series\":\"Mining and Extraction\",\"year\":\"2004\"},{\"avg_rate\":4.3,\"month\":5,\"series\":\"Mining and Extraction\",\"year\":\"2004\"},{\"avg_rate\":5,\"month\":6,\"series\":\"Mining and Extraction\",\"year\":\"2004\"},{\"avg_rate\":5.4,\"month\":7,\"series\":\"Mining and Extraction\",\"year\":\"2004\"},{\"avg_rate\":1.9,\"month\":8,\"series\":\"Mining and Extraction\",\"year\":\"2004\"},{\"avg_rate\":1.5,\"month\":9,\"series\":\"Mining and Extraction\",\"year\":\"2004\"},{\"avg_rate\":2.6,\"month\":10,\"series\":\"Mining and Extraction\",\"year\":\"2004\"},{\"avg_rate\":3.3,\"month\":11,\"series\":\"Mining and Extraction\",\"year\":\"2004\"},{\"avg_rate\":2.5,\"month\":12,\"series\":\"Mining and Extraction\",\"year\":\"2004\"},{\"avg_rate\":4.9,\"month\":1,\"series\":\"Mining and Extraction\",\"year\":\"2005\"},{\"avg_rate\":4,\"month\":2,\"series\":\"Mining and Extraction\",\"year\":\"2005\"},{\"avg_rate\":5.2,\"month\":3,\"series\":\"Mining and Extraction\",\"year\":\"2005\"},{\"avg_rate\":2.9,\"month\":4,\"series\":\"Mining and Extraction\",\"year\":\"2005\"},{\"avg_rate\":2.4,\"month\":5,\"series\":\"Mining and Extraction\",\"year\":\"2005\"},{\"avg_rate\":4,\"month\":6,\"series\":\"Mining and Extraction\",\"year\":\"2005\"},{\"avg_rate\":3.7,\"month\":7,\"series\":\"Mining and Extraction\",\"year\":\"2005\"},{\"avg_rate\":2,\"month\":8,\"series\":\"Mining and Extraction\",\"year\":\"2005\"},{\"avg_rate\":2,\"month\":9,\"series\":\"Mining and Extraction\",\"year\":\"2005\"},{\"avg_rate\":0.3,\"month\":10,\"series\":\"Mining and Extraction\",\"year\":\"2005\"},{\"avg_rate\":2.9,\"month\":11,\"series\":\"Mining and Extraction\",\"year\":\"2005\"},{\"avg_rate\":3.5,\"month\":12,\"series\":\"Mining and Extraction\",\"year\":\"2005\"},{\"avg_rate\":3.9,\"month\":1,\"series\":\"Mining and Extraction\",\"year\":\"2006\"},{\"avg_rate\":3.8,\"month\":2,\"series\":\"Mining and Extraction\",\"year\":\"2006\"},{\"avg_rate\":2.1,\"month\":3,\"series\":\"Mining and Extraction\",\"year\":\"2006\"},{\"avg_rate\":2.5,\"month\":4,\"series\":\"Mining and Extraction\",\"year\":\"2006\"},{\"avg_rate\":2.8,\"month\":5,\"series\":\"Mining and Extraction\",\"year\":\"2006\"},{\"avg_rate\":4.3,\"month\":6,\"series\":\"Mining and Extraction\",\"year\":\"2006\"},{\"avg_rate\":3.5,\"month\":7,\"series\":\"Mining and Extraction\",\"year\":\"2006\"},{\"avg_rate\":4.3,\"month\":8,\"series\":\"Mining and Extraction\",\"year\":\"2006\"},{\"avg_rate\":2.1,\"month\":9,\"series\":\"Mining and Extraction\",\"year\":\"2006\"},{\"avg_rate\":2.2,\"month\":10,\"series\":\"Mining and Extraction\",\"year\":\"2006\"},{\"avg_rate\":2.9,\"month\":11,\"series\":\"Mining and Extraction\",\"year\":\"2006\"},{\"avg_rate\":3.4,\"month\":12,\"series\":\"Mining and Extraction\",\"year\":\"2006\"},{\"avg_rate\":4.7,\"month\":1,\"series\":\"Mining and Extraction\",\"year\":\"2007\"},{\"avg_rate\":4.5,\"month\":2,\"series\":\"Mining and Extraction\",\"year\":\"2007\"},{\"avg_rate\":3.2,\"month\":3,\"series\":\"Mining and Extraction\",\"year\":\"2007\"},{\"avg_rate\":2.3,\"month\":4,\"series\":\"Mining and Extraction\",\"year\":\"2007\"},{\"avg_rate\":3,\"month\":5,\"series\":\"Mining and Extraction\",\"year\":\"2007\"},{\"avg_rate\":4.3,\"month\":6,\"series\":\"Mining and Extraction\",\"year\":\"2007\"},{\"avg_rate\":4.3,\"month\":7,\"series\":\"Mining and Extraction\",\"year\":\"2007\"},{\"avg_rate\":4.6,\"month\":8,\"series\":\"Mining and Extraction\",\"year\":\"2007\"},{\"avg_rate\":3.2,\"month\":9,\"series\":\"Mining and Extraction\",\"year\":\"2007\"},{\"avg_rate\":1.3,\"month\":10,\"series\":\"Mining and Extraction\",\"year\":\"2007\"},{\"avg_rate\":2.3,\"month\":11,\"series\":\"Mining and Extraction\",\"year\":\"2007\"},{\"avg_rate\":3.4,\"month\":12,\"series\":\"Mining and Extraction\",\"year\":\"2007\"},{\"avg_rate\":4,\"month\":1,\"series\":\"Mining and Extraction\",\"year\":\"2008\"},{\"avg_rate\":2.2,\"month\":2,\"series\":\"Mining and Extraction\",\"year\":\"2008\"},{\"avg_rate\":3.7,\"month\":3,\"series\":\"Mining and Extraction\",\"year\":\"2008\"},{\"avg_rate\":3.6,\"month\":4,\"series\":\"Mining and Extraction\",\"year\":\"2008\"},{\"avg_rate\":3.4,\"month\":5,\"series\":\"Mining and Extraction\",\"year\":\"2008\"},{\"avg_rate\":3.3,\"month\":6,\"series\":\"Mining and Extraction\",\"year\":\"2008\"},{\"avg_rate\":1.5,\"month\":7,\"series\":\"Mining and Extraction\",\"year\":\"2008\"},{\"avg_rate\":1.9,\"month\":8,\"series\":\"Mining and Extraction\",\"year\":\"2008\"},{\"avg_rate\":2.8,\"month\":9,\"series\":\"Mining and Extraction\",\"year\":\"2008\"},{\"avg_rate\":1.7,\"month\":10,\"series\":\"Mining and Extraction\",\"year\":\"2008\"},{\"avg_rate\":3.7,\"month\":11,\"series\":\"Mining and Extraction\",\"year\":\"2008\"},{\"avg_rate\":5.2,\"month\":12,\"series\":\"Mining and Extraction\",\"year\":\"2008\"},{\"avg_rate\":7,\"month\":1,\"series\":\"Mining and Extraction\",\"year\":\"2009\"},{\"avg_rate\":7.6,\"month\":2,\"series\":\"Mining and Extraction\",\"year\":\"2009\"},{\"avg_rate\":12.6,\"month\":3,\"series\":\"Mining and Extraction\",\"year\":\"2009\"},{\"avg_rate\":16.1,\"month\":4,\"series\":\"Mining and Extraction\",\"year\":\"2009\"},{\"avg_rate\":13.3,\"month\":5,\"series\":\"Mining and Extraction\",\"year\":\"2009\"},{\"avg_rate\":13.6,\"month\":6,\"series\":\"Mining and Extraction\",\"year\":\"2009\"},{\"avg_rate\":12.6,\"month\":7,\"series\":\"Mining and Extraction\",\"year\":\"2009\"},{\"avg_rate\":11.8,\"month\":8,\"series\":\"Mining and Extraction\",\"year\":\"2009\"},{\"avg_rate\":10.7,\"month\":9,\"series\":\"Mining and Extraction\",\"year\":\"2009\"},{\"avg_rate\":10.8,\"month\":10,\"series\":\"Mining and Extraction\",\"year\":\"2009\"},{\"avg_rate\":12,\"month\":11,\"series\":\"Mining and Extraction\",\"year\":\"2009\"},{\"avg_rate\":11.8,\"month\":12,\"series\":\"Mining and Extraction\",\"year\":\"2009\"},{\"avg_rate\":9.1,\"month\":1,\"series\":\"Mining and Extraction\",\"year\":\"2010\"},{\"avg_rate\":10.7,\"month\":2,\"series\":\"Mining and Extraction\",\"year\":\"2010\"}],\"metadata\":{\"avg_rate\":{\"type\":\"number\",\"semanticType\":\"Number\"},\"month\":{\"type\":\"number\",\"semanticType\":\"Month\"},\"series\":{\"type\":\"string\",\"semanticType\":\"String\"},\"year\":{\"type\":\"number\",\"semanticType\":\"Year\"}},\"derive\":{\"code\":\"\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df1):\\n    # Calculate average unemployment rate by month and series\\n    monthly_avg = df1.groupby(['series', 'month'], as_index=False).agg({\\n        'rate': 'mean'\\n    }).rename(columns={'rate': 'avg_rate'})\\n    \\n    # Calculate seasonal variation (standard deviation across months) for each series\\n    seasonal_variation = monthly_avg.groupby('series')['avg_rate'].std().reset_index()\\n    seasonal_variation.columns = ['series', 'seasonal_std']\\n    \\n    # Get top 3 most seasonal industries\\n    top_3_seasonal = seasonal_variation.nlargest(3, 'seasonal_std')['series'].tolist()\\n    \\n    # Filter original data for top 3 industries and aggregate by year, month, series\\n    transformed_df = df1[df1['series'].isin(top_3_seasonal)].groupby(\\n        ['series', 'year', 'month'], as_index=False\\n    ).agg({\\n        'rate': 'mean'\\n    }).rename(columns={'rate': 'avg_rate'})\\n    \\n    # Convert year to string for color encoding\\n    transformed_df['year'] = transformed_df['year'].astype(str)\\n    \\n    return transformed_df\\n\",\"source\":[\"unemployment-across-industries\"],\"dialog\":[{\"content\":\"You are a data scientist to help user to transform data that will be used for visualization.\\nThe user will provide you information about what data would be needed, and your job is to create a python function based on the input data summary, transformation instruction and expected fields.\\nThe users' instruction includes \\\"chart_type\\\" and \\\"chart_encodings\\\" that describe the visualization they want, and natural language instructions \\\"goal\\\" that describe what data is needed.\\n\\n**Important:**\\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\\n- If above issue occurs, generate columns with np.nan.\\n\\nConcretely, you should first refine users' goal and then create a python function in the output section based off the [CONTEXT] and [GOAL]:\\n\\n    1. First, refine users' [GOAL]. The main objective in this step is to check if \\\"chart_type\\\" and \\\"chart_encodings\\\" provided by the user are sufficient to achieve their \\\"goal\\\". Concretely:\\n        - based on the user's \\\"goal\\\" and \\\"chart_type\\\" and \\\"chart_encodings\\\", elaborate the goal into a \\\"detailed_instruction\\\".\\n        - \\\"display_instruction\\\" is a short verb phrase describing the users' goal. \\n            - it would be a short verbal description of user intent as a verb phrase (<12 words).\\n            - generate it based on detailed_instruction and the suggested chart_type and chart_encodings, but don't need to mention the chart details.\\n            - should capture key computation ideas: by reading the display, the user can understand the purpose and what's derived from the data.\\n            - if the user specification follows up the previous instruction, the 'display_instruction' should only describe how it builds up the previous instruction without repeating information from previous steps.\\n            - the phrase can be presented in different styles, e.g., question (what's xxx), instruction (show xxx), description, etc.\\n            - if you mention column names from the input or the output data, highlight the text in **bold**.\\n                * the column can either be a column in the input data, or a new column that will be computed in the output data.\\n                * the mention don't have to be exact match, it can be semantically matching, e.g., if you mentioned \\\"average score\\\" in the text while the column to be computed is \\\"Avg_Score\\\", you should still highlight \\\"**average score**\\\" in the text.\\n        - determine \\\"output_fields\\\", the desired fields that the output data should have to achieve the user's goal, it's a good idea to include intermediate fields here.\\n        - then decide \\\"chart_encodings\\\", which maps visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized, \\n            - the \\\"chart_encodings\\\" should be created to support the user's \\\"chart_type\\\".\\n            - first, determine whether the user has provided sufficient fields in \\\"chart_encodings\\\" that are needed to achieve their goal:\\n                - if the user's \\\"chart_encodings\\\" are sufficient, simply copy it.\\n                - if the user didn't provide sufficient fields in \\\"chart_encodings\\\", add missing fields in \\\"chart_encodings\\\" (ordered them based on whether the field will be used in x,y axes or legends);\\n                    - \\\"chart_encodings\\\" should only include fields that will be visualized (do not include other intermediate fields from \\\"output_fields\\\")  \\n                    - when adding new fields to \\\"chart_encodings\\\", be efficient and add only a minimal number of fields that are needed to achive the user's goal. \\n                    - generally, the total number of fields in \\\"chart_encodings\\\" should be no more than 3 for x,y,legend.\\n                - if the user's \\\"chart_encodings\\\" is sufficient but can be optimized, you can reorder encodings to visualize the data more effectively.\\n            - sometimes, user may provide instruction to update visualizations fields they provided. You should leverage the user's goal to resolve the conflict and decide the final \\\"chart_encodings\\\"\\n                - e.g., they may mention \\\"use B metric instead\\\" while A metric is in provided fields, in this case, you should update \\\"chart_encodings\\\" to update A metric with B metric.\\n        - guide on statistical analysis:\\n            - when the user asks for forecasting or regression analysis, you should consider the following:\\n                - the output should be a long format table where actual x, y pairs and predicted x, y pairs are included in the X, Y columns, they are differentiated with a third column \\\"is_predicted\\\" that is a boolean field.\\n                - i.e., if the user ask for forecasting based on two columns T and Y, the output should be three columns: T, Y, is_predicted, where\\n                    - T, Y columns contain BOTH original values from the data and predicted values from the data.\\n                    - is_predicted is a boolean field to indicate whether the x, y pairs are original values from the data or predicted / regression values from the data.\\n                - the recommended chart should be line chart (time series) or scatter plot (quantitative x, y)\\n                - if the user asks for forecasting, it's good to include predicted x, y pairs for both x in the original data and future x values (i.e., combine regression and forecasting results)\\n                    - in this case, is_predicted should be of three values 'original', 'regression', 'forecasting'\\n        - when the user asks for clustering:\\n            - the output should be a long format table where actual x, y pairs with a third column \\\"cluster_id\\\" that indicates the cluster id of the data point.\\n            - the recommended chart should be scatter plot (quantitative x, y)\\n    \\n    Prepare the result in the following json format:\\n\\n```\\n{\\n    \\\"detailed_instruction\\\": \\\"...\\\" // string, elaborate user instruction with details if the user\\n    \\\"display_instruction\\\": \\\"...\\\" // string, the short verb phrase describing the users' goal.\\n    \\\"output_fields\\\": [...] // string[], describe the desired output fields that the output data should have based on the user's goal, it's a good idea to preserve intermediate fields here (i.e., the goal of transformed data)\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"\\\",\\n        \\\"y\\\": \\\"\\\",\\n        \\\"color\\\": \\\"\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\",\\n        ... // other visualization channels user used\\n    } // object: map visualization channels (x, y, color, size, opacity, facet, etc.) to a subset of \\\"output_fields\\\" that will be visualized.\\n    \\\"reason\\\": \\\"...\\\" // string, explain why this refinement is made\\n}\\n```\\n\\n    2. Then, write a python function based on the refined goal, the function input is a dataframe \\\"df\\\" (or multiple dataframes based on tables presented in the [CONTEXT] section) and the output is the transformed dataframe \\\"transformed_df\\\". \\\"transformed_df\\\" should contain all \\\"output_fields\\\" from the refined goal.\\nThe python function must follow the template provided in [TEMPLATE], do not import any other libraries or modify function name. The function should be as simple as possible and easily readable.\\nIf there is no data transformation needed based on \\\"output_fields\\\", the transformation function can simply \\\"return df\\\".\\n\\n[TEMPLATE]\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\nfrom sklearn import ... # import necessary libraries from sklearn if needed\\n\\ndef transform_data(df1, df2, ...): \\n    # complete the template here\\n    return transformed_df\\n```\\n\\nnote: \\n- if the user provided one table, then it should be `def transform_data(df1)`, if the user provided multiple tables, then it should be `def transform_data(df1, df2, ...)` and you should consider the join between tables to derive the output.\\n- **VERY IMPORTANT** the number of arguments in the function must match the number of tables provided, and the order of arguments must match the order of tables provided.\\n- try to use intuitive table names to refer to the input dataframes, for example, if the user provided two tables city and weather, you can use `transform_data(df_city, df_weather)` to refer to the two dataframes, as long as the number and order of the arguments match the number and order of the tables provided.\\n- datetime objects handling:\\n    - if the output field is year, convert it to number, if it is year-month / year-month-day, convert it to string object (e.g., \\\"2020-01\\\" / \\\"2020-01-01\\\").\\n    - if the output is time only: convert hour to number if it's just the hour (e.g., 10), but convert hour:min or h:m:s to string object (e.g., \\\"10:30\\\", \\\"10:30:45\\\")\\n    - never return datetime object directly, convert it to either number (if it only contains year) or string so it's readable.\\n\\n    3. The output must only contain a json object representing the refined goal and a python code block representing the transformation code, do not add any extra text explanation.\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (unemployment_across_industries)\\n\\n## fields\\n\\t*series -- type: object, values: Agriculture, Business services, Construction, ..., Other, Self-employed, Transportation and Utilities, Wholesale and Retail Trade\\n\\t*year -- type: int64, values: 2000, 2001, 2002, ..., 2007, 2008, 2009, 2010\\n\\t*month -- type: int64, values: 1, 2, 3, ..., 9, 10, 11, 12\\n\\t*count -- type: int64, values: 2, 8, 9, ..., 2071, 2154, 2194, 2440\\n\\t*rate -- type: float64, values: 0.3, 1.3, 1.5, ..., 21.4, 22.7, 24.7, 27.1\\n\\t*date -- type: object, values: 2000-01-01T08:00:00.000Z, 2000-02-01T08:00:00.000Z, 2000-03-01T08:00:00.000Z, ..., 2009-11-01T07:00:00.000Z, 2009-12-01T08:00:00.000Z, 2010-01-01T08:00:00.000Z, 2010-02-01T08:00:00.000Z\\n\\n## sample\\n       series  year  month  count  rate                      date\\n0  Government  2000      1    430   2.1  2000-01-01T08:00:00.000Z\\n1  Government  2000      2    409   2.0  2000-02-01T08:00:00.000Z\\n2  Government  2000      3    311   1.5  2000-03-01T08:00:00.000Z\\n3  Government  2000      4    269   1.3  2000-04-01T08:00:00.000Z\\n4  Government  2000      5    370   1.9  2000-05-01T07:00:00.000Z\\n......\\n\\n\\n\\n\\n[GOAL]\\n\\nHow does **seasonal variation** in unemployment differ across **industries**?\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"mode\\\": \\\"infer\\\",\\n    \\\"recap\\\": \\\"Analyze how seasonal variation in unemployment differs across industries by examining the cyclical patterns in unemployment rates throughout the year for different industry sectors.\\\",\\n    \\\"display_instruction\\\": \\\"Compare seasonal unemployment patterns across **industries**\\\",\\n    \\\"recommendation\\\": \\\"To visualize seasonal variation across industries, we should calculate average unemployment rates by month for each industry series. This will reveal the typical seasonal patterns and allow comparison of how different industries experience seasonal fluctuations in unemployment throughout the year.\\\",\\n    \\\"output_fields\\\": [\\\"series\\\", \\\"month\\\", \\\"avg_rate\\\", \\\"month_name\\\"],\\n    \\\"chart_type\\\": \\\"line\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"month\\\",\\n        \\\"y\\\": \\\"avg_rate\\\",\\n        \\\"color\\\": \\\"series\\\",\\n        \\\"size\\\": \\\"\\\",\\n        \\\"opacity\\\": \\\"\\\",\\n        \\\"facet\\\": \\\"\\\"\\n    }\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df1):\\n    # Calculate average unemployment rate by month and series (industry)\\n    transformed_df = df1.groupby(['series', 'month'], as_index=False).agg({\\n        'rate': 'mean'\\n    }).rename(columns={'rate': 'avg_rate'})\\n    \\n    # Add month name for better readability\\n    month_names = {\\n        1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun',\\n        7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'\\n    }\\n    transformed_df['month_name'] = transformed_df['month'].map(month_names)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"},{\"content\":\"This is the result from the latest python code:\\n\\n    avg_rate  month month_name       series\\n0  13.763636      1        Jan  Agriculture\\n1  13.645455      2        Feb  Agriculture\\n2  13.830000      3        Mar  Agriculture\\n3   9.130000      4        Apr  Agriculture\\n4   7.100000      5        May  Agriculture\\n5   6.770000      6        Jun  Agriculture\\n6   7.010000      7        Jul  Agriculture\\n7   8.080000      8        Aug  Agriculture\\n8   7.090000      9        Sep  Agriculture\\n9   7.490000     10        Oct  Agriculture\\n......\\n\\nUpdate the code above based on the following instruction:\\n\\n{\\n    \\\"followup_instruction\\\": \\\"show the seasonal trends for top 3 industries that are most seaonal\\\",\\n    \\\"chart_type\\\": \\\"Custom Area\\\",\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"month\\\",\\n        \\\"y\\\": \\\"avg_rate\\\",\\n        \\\"color\\\": \\\"year\\\",\\n        \\\"column\\\": \\\"series\\\"\\n    }\\n}\",\"role\":\"user\"},{\"content\":\"```json\\n{\\n    \\\"detailed_instruction\\\": \\\"Identify the top 3 industries with the highest seasonal variation in unemployment rates, then show their seasonal trends over time with monthly unemployment rates for each year, faceted by industry.\\\",\\n    \\\"display_instruction\\\": \\\"Show seasonal trends for top 3 most seasonal **industries** over **years**\\\",\\n    \\\"output_fields\\\": [\\\"series\\\", \\\"year\\\", \\\"month\\\", \\\"avg_rate\\\"],\\n    \\\"chart_encodings\\\": {\\n        \\\"x\\\": \\\"month\\\",\\n        \\\"y\\\": \\\"avg_rate\\\",\\n        \\\"color\\\": \\\"year\\\",\\n        \\\"facet\\\": \\\"series\\\"\\n    },\\n    \\\"reason\\\": \\\"To identify the most seasonal industries, we need to calculate the seasonal variation (e.g., standard deviation or range of monthly rates) for each industry. Then select the top 3 industries with highest variation. The output should include year-month-series level data to show trends over time, with faceting by the top 3 most seasonal industries.\\\"\\n}\\n```\\n\\n```python\\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df1):\\n    # Calculate average unemployment rate by month and series\\n    monthly_avg = df1.groupby(['series', 'month'], as_index=False).agg({\\n        'rate': 'mean'\\n    }).rename(columns={'rate': 'avg_rate'})\\n    \\n    # Calculate seasonal variation (standard deviation across months) for each series\\n    seasonal_variation = monthly_avg.groupby('series')['avg_rate'].std().reset_index()\\n    seasonal_variation.columns = ['series', 'seasonal_std']\\n    \\n    # Get top 3 most seasonal industries\\n    top_3_seasonal = seasonal_variation.nlargest(3, 'seasonal_std')['series'].tolist()\\n    \\n    # Filter original data for top 3 industries and aggregate by year, month, series\\n    transformed_df = df1[df1['series'].isin(top_3_seasonal)].groupby(\\n        ['series', 'year', 'month'], as_index=False\\n    ).agg({\\n        'rate': 'mean'\\n    }).rename(columns={'rate': 'avg_rate'})\\n    \\n    # Convert year to string for color encoding\\n    transformed_df['year'] = transformed_df['year'].astype(str)\\n    \\n    return transformed_df\\n```\",\"role\":\"assistant\"}],\"trigger\":{\"tableId\":\"table-540763\",\"sourceTableIds\":[\"unemployment-across-industries\"],\"instruction\":\"show the seasonal trends for top 3 industries that are most seaonal\",\"displayInstruction\":\"Show seasonal trends for top 3 most seasonal **industries** over **years**\",\"chart\":{\"id\":\"chart-1760745840104\",\"chartType\":\"Custom Area\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--unemployment-across-industries--month\"},\"y\":{\"fieldID\":\"concept-avg_rate-1760745549715\"},\"x2\":{},\"y2\":{},\"color\":{\"fieldID\":\"original--unemployment-across-industries--year\"},\"column\":{\"fieldID\":\"original--unemployment-across-industries--series\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-540763\",\"saved\":false,\"source\":\"trigger\",\"unread\":false},\"resultTableId\":\"table-53\"},\"explanation\":{\"agent\":\"CodeExplanationAgent\",\"code\":\"- Calculate the **average unemployment rate** (`avg_rate`) for each combination of **series** (industry) and **month** across all years\\n- Compute the **seasonal variation** for each **series** by calculating the standard deviation of `avg_rate` across the 12 months\\n- Identify the **top 3 industries** with the highest `seasonal_std` (most seasonal unemployment patterns)\\n- Filter the original data to include only these **top 3 most seasonal industries**\\n- Aggregate the filtered data by **series**, **year**, and **month**, computing the mean unemployment **rate** as `avg_rate`\\n- Convert **year** to string format for categorical visualization purposes\",\"concepts\":[{\"explanation\":\"Standard deviation of average monthly unemployment rates across the 12 months for each industry. This metric quantifies the degree of seasonal variation in unemployment - higher values indicate stronger seasonal patterns (e.g., construction might have higher unemployment in winter months), while lower values indicate more stable year-round employment patterns. Mathematically: \\\\( \\\\text{seasonal\\\\_std} = \\\\sigma(\\\\text{avg\\\\_rate}_{\\\\text{month}=1..12}) \\\\)\",\"field\":\"seasonal_std\"}],\"dialog\":[{\"content\":\"You are a data scientist to help user explain code, \\nso that a non-code can clearly understand what the code is doing, you are provided with a summary of the input data, and the transformation code.\\n\\nYour goal:\\n1. You should generate a good itemized explanation of the code so that the reader can understand high-level steps of what the data transformation is doing.\\n    - Be very concise, and stay at a high-level. The reader doesn't understand code and does not want to learn exactly what the code is doing. They just want to learn what have been done from a logical level.\\n    - The explanation should be a markdown string that is a list of bullet points (with new lines), highlight constants, data fields, and important verbs.\\n2. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\\n    - *DO NOT* explain trivial new fields like \\\"Decade\\\" or \\\"Avg_Rating\\\", \\\"US_Sales\\\" that are self-explanatory.\\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\\n        - Inline math: `\\\\( ... \\\\)` for formulas within text\\n        - Block math: `\\\\[ ... \\\\]` for standalone formulas\\n        - Examples: `\\\\( \\\\frac{\\\\text{Revenue}}{\\\\text{Cost}} \\\\)` for ratios, `\\\\[ \\\\text{Score} = \\\\text{Rating} \\\\times \\\\text{Worldwide\\\\_Gross} \\\\]` for formulas\\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\\\_`\\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \\n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\\n3. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\\n    - in \\\"field\\\", you can provide a list of fields in format of \\\"field1, field2, ...\\\"\\n    - in \\\"explanation\\\", you can provide a single explanation for the computation of the fields.\\n    - for example, if you have fields like \\\"Norm_Rating\\\", \\\"Norm_Gross\\\", \\\"Critical_Commercial_Score\\\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\\n4. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \\\"Statistical Analysis\\\" in the [CONCEPTS EXPLANATION] section.\\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\\n    \\nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \\\"return\\\", \\\"load data\\\" etc. \\n\\nProvide the result in the following two sections:\\n    - first section is the code explanation that should be a markdown block explaining the code, in the [CODE EXPLANATION] section.\\n        - remember to highlight constants, data fields, and important verbs in the code explanation.\\n    - second section is the concepts explanation that should be a json block (start with ```json) in the [CONCEPTS EXPLANATION] section.\\n\\n[CODE EXPLANATION]\\n\\n...(explanation of the code)\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"...\\\",\\n        \\\"explanation\\\": \\\"...\\\"\\n    }\\n]\\n\\n```\\n\",\"role\":\"system\"},{\"content\":\"[CONTEXT]\\n\\nHere are our datasets, here are their summaries and samples:\\n\\n# table1 (unemployment_across_industries)\\n\\n## fields\\n\\t*series -- type: object, values: Agriculture, Business services, Construction, ..., Other, Self-employed, Transportation and Utilities, Wholesale and Retail Trade\\n\\t*year -- type: int64, values: 2000, 2001, 2002, ..., 2007, 2008, 2009, 2010\\n\\t*month -- type: int64, values: 1, 2, 3, ..., 9, 10, 11, 12\\n\\t*count -- type: int64, values: 2, 8, 9, ..., 2071, 2154, 2194, 2440\\n\\t*rate -- type: float64, values: 0.3, 1.3, 1.5, ..., 21.4, 22.7, 24.7, 27.1\\n\\t*date -- type: object, values: 2000-01-01T08:00:00.000Z, 2000-02-01T08:00:00.000Z, 2000-03-01T08:00:00.000Z, ..., 2009-11-01T07:00:00.000Z, 2009-12-01T08:00:00.000Z, 2010-01-01T08:00:00.000Z, 2010-02-01T08:00:00.000Z\\n\\n## sample\\n       series  year  month  count  rate                      date\\n0  Government  2000      1    430   2.1  2000-01-01T08:00:00.000Z\\n1  Government  2000      2    409   2.0  2000-02-01T08:00:00.000Z\\n2  Government  2000      3    311   1.5  2000-03-01T08:00:00.000Z\\n3  Government  2000      4    269   1.3  2000-04-01T08:00:00.000Z\\n4  Government  2000      5    370   1.9  2000-05-01T07:00:00.000Z\\n......\\n\\n\\n\\n\\n[CODE]\\n\\nhere is the transformation code: \\nimport pandas as pd\\nimport collections\\nimport numpy as np\\n\\ndef transform_data(df1):\\n    # Calculate average unemployment rate by month and series\\n    monthly_avg = df1.groupby(['series', 'month'], as_index=False).agg({\\n        'rate': 'mean'\\n    }).rename(columns={'rate': 'avg_rate'})\\n    \\n    # Calculate seasonal variation (standard deviation across months) for each series\\n    seasonal_variation = monthly_avg.groupby('series')['avg_rate'].std().reset_index()\\n    seasonal_variation.columns = ['series', 'seasonal_std']\\n    \\n    # Get top 3 most seasonal industries\\n    top_3_seasonal = seasonal_variation.nlargest(3, 'seasonal_std')['series'].tolist()\\n    \\n    # Filter original data for top 3 industries and aggregate by year, month, series\\n    transformed_df = df1[df1['series'].isin(top_3_seasonal)].groupby(\\n        ['series', 'year', 'month'], as_index=False\\n    ).agg({\\n        'rate': 'mean'\\n    }).rename(columns={'rate': 'avg_rate'})\\n    \\n    # Convert year to string for color encoding\\n    transformed_df['year'] = transformed_df['year'].astype(str)\\n    \\n    return transformed_df\\n\\n\\n[EXPLANATION]\\n\",\"role\":\"user\"},{\"content\":\"[CODE EXPLANATION]\\n\\n- Calculate the **average unemployment rate** (`avg_rate`) for each combination of **series** (industry) and **month** across all years\\n- Compute the **seasonal variation** for each **series** by calculating the standard deviation of `avg_rate` across the 12 months\\n- Identify the **top 3 industries** with the highest `seasonal_std` (most seasonal unemployment patterns)\\n- Filter the original data to include only these **top 3 most seasonal industries**\\n- Aggregate the filtered data by **series**, **year**, and **month**, computing the mean unemployment **rate** as `avg_rate`\\n- Convert **year** to string format for categorical visualization purposes\\n\\n[CONCEPTS EXPLANATION]\\n\\n```json\\n[\\n    {\\n        \\\"field\\\": \\\"seasonal_std\\\",\\n        \\\"explanation\\\": \\\"Standard deviation of average monthly unemployment rates across the 12 months for each industry. This metric quantifies the degree of seasonal variation in unemployment - higher values indicate stronger seasonal patterns (e.g., construction might have higher unemployment in winter months), while lower values indicate more stable year-round employment patterns. Mathematically: \\\\\\\\( \\\\\\\\text{seasonal\\\\\\\\_std} = \\\\\\\\sigma(\\\\\\\\text{avg\\\\\\\\_rate}_{\\\\\\\\text{month}=1..12}) \\\\\\\\)\\\"\\n    }\\n]\\n```\",\"role\":\"assistant\"}],\"status\":\"ok\"}},\"anchored\":false,\"createdBy\":\"user\",\"attachedMetadata\":\"\"}],\"charts\":[{\"id\":\"chart-1760745839180\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--unemployment-across-industries--month\"},\"y\":{\"fieldID\":\"concept-avg_rate-1760745549715\"},\"color\":{\"fieldID\":\"original--unemployment-across-industries--year\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"fieldID\":\"original--unemployment-across-industries--series\"},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-53\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760745566172\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--unemployment-across-industries--date\"},\"y\":{\"fieldID\":\"original--unemployment-across-industries--rate\"},\"color\":{\"fieldID\":\"original--unemployment-across-industries--series\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-570117\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760745556213\",\"chartType\":\"Bar Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--unemployment-across-industries--series\"},\"y\":{\"fieldID\":\"concept-rate_increase-1760745562128-0.39751734782017045\"},\"color\":{\"channel\":\"color\",\"bin\":false},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-552276\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760745546664\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--unemployment-across-industries--month\"},\"y\":{\"fieldID\":\"concept-avg_rate-1760745549715\"},\"color\":{\"fieldID\":\"original--unemployment-across-industries--series\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-540763\",\"saved\":false,\"source\":\"user\",\"unread\":false},{\"id\":\"chart-1760745539559\",\"chartType\":\"Line Chart\",\"encodingMap\":{\"x\":{\"fieldID\":\"original--unemployment-across-industries--date\"},\"y\":{\"fieldID\":\"original--unemployment-across-industries--rate\"},\"color\":{\"fieldID\":\"original--unemployment-across-industries--series\"},\"opacity\":{\"channel\":\"opacity\",\"bin\":false},\"column\":{\"channel\":\"column\",\"bin\":false},\"row\":{\"channel\":\"row\",\"bin\":false}},\"tableRef\":\"table-544555\",\"saved\":false,\"source\":\"user\",\"unread\":false}],\"conceptShelfItems\":[{\"id\":\"concept-rate_2008-1760745562128-0.09504269144469069\",\"name\":\"rate_2008\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-rate_2009-1760745562128-0.28775545107582257\",\"name\":\"rate_2009\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-rate_increase-1760745562128-0.39751734782017045\",\"name\":\"rate_increase\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-avg_rate-1760745549715\",\"name\":\"avg_rate\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"concept-month_name-1760745549715\",\"name\":\"month_name\",\"type\":\"auto\",\"description\":\"\",\"source\":\"custom\",\"tableRef\":\"custom\",\"temporary\":true},{\"id\":\"original--unemployment-across-industries--series\",\"name\":\"series\",\"type\":\"string\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"unemployment-across-industries\"},{\"id\":\"original--unemployment-across-industries--year\",\"name\":\"year\",\"type\":\"integer\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"unemployment-across-industries\"},{\"id\":\"original--unemployment-across-industries--month\",\"name\":\"month\",\"type\":\"integer\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"unemployment-across-industries\"},{\"id\":\"original--unemployment-across-industries--count\",\"name\":\"count\",\"type\":\"integer\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"unemployment-across-industries\"},{\"id\":\"original--unemployment-across-industries--rate\",\"name\":\"rate\",\"type\":\"number\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"unemployment-across-industries\"},{\"id\":\"original--unemployment-across-industries--date\",\"name\":\"date\",\"type\":\"date\",\"source\":\"original\",\"description\":\"\",\"tableRef\":\"unemployment-across-industries\"}],\"messages\":[{\"timestamp\":1760831348951,\"type\":\"success\",\"component\":\"data formulator\",\"value\":\"Successfully loaded Unemployment\"}],\"displayedMessageIdx\":0,\"focusedTableId\":\"table-544555\",\"focusedChartId\":\"chart-1760745539559\",\"viewMode\":\"report\",\"chartSynthesisInProgress\":[],\"config\":{\"formulateTimeoutSeconds\":60,\"maxRepairAttempts\":1,\"defaultChartWidth\":300,\"defaultChartHeight\":300},\"agentActions\":[{\"actionId\":\"exploreDataFromNL_1760745540005\",\"tableId\":\"table-570117\",\"description\":\"• All industries showed rising unemployment trends from 2008-2010, with Mining and Extraction (8.6%), Construction (8.5%), and Manufacturing (6.3%) experiencing the sharpest increases during 2008-2009.\\n• Construction unemployment doubled from ~11% in early 2008 to peak at ~27% by early 2010, showing continued deterioration with no recovery by Feb 2010.\\n• Manufacturing and Mining stabilized around 12-13% by late 2009, while Construction's unemployment continued climbing, indicating sector-specific recovery patterns with Construction facing the most prolonged crisis.\",\"status\":\"completed\",\"hidden\":false,\"lastUpdate\":1760745581829}],\"dataCleanBlocks\":[],\"cleanInProgress\":false,\"generatedReports\":[{\"id\":\"report-1760831469874-4137\",\"content\":\"# The 2008-2010 Recession Hit Construction Hardest\\n\\nDuring the 2008-2010 financial crisis, unemployment surged dramatically across key industries. Construction workers bore the brunt, with unemployment rates skyrocketing from 11% to a staggering 27% by early 2010—nearly tripling in just two years.\\n\\n[IMAGE(chart-1760745566172)]\\n\\nManufacturing and Mining sectors also suffered significant job losses, though less severe than Construction. Manufacturing unemployment doubled from 5% to 13%, while Mining spiked from under 4% to 16% before showing signs of recovery by 2010.\\n\\n**In summary**, the recession's impact was far from uniform: Construction faced catastrophic job losses, suggesting the housing market collapse disproportionately affected building trades. What factors enabled Mining's earlier recovery? How can vulnerable sectors build resilience against future economic shocks?\",\"style\":\"short note\",\"selectedChartIds\":[\"chart-1760745566172\"],\"createdAt\":1760831476855},{\"id\":\"report-1760831405296-2186\",\"content\":\"# Seasonal Employment Patterns Reveal Industry Vulnerabilities Across Economic Cycles\\n\\nThe unemployment landscape across U.S. industries from 2000-2010 reveals striking seasonal patterns and differential impacts during economic downturns. Analysis of 14 industry sectors demonstrates that certain industries face predictable cyclical challenges while others maintain relative stability throughout the year.\\n\\n[IMAGE(chart-1760745546664)]\\n\\n**Cross-industry seasonal dynamics** show distinct unemployment patterns throughout the calendar year. Key findings include:\\n\\n- **Agriculture** experiences the most dramatic seasonal swings, with unemployment rates peaking above 13% in winter months (January-March) and dropping to approximately 7% during summer harvest seasons\\n- **Construction** exhibits similar seasonality, with rates near 13% in January declining to 7-8% during peak building months (May-September)\\n- **Government and Finance** sectors demonstrate remarkable stability, maintaining unemployment rates between 2-4% year-round, suggesting these sectors are largely insulated from seasonal fluctuations\\n\\n[IMAGE(chart-1760745839180)]\\n\\n**Year-over-year trends for the most seasonal industries** reveal how economic conditions compound seasonal effects. The 2008-2009 recession created unprecedented spikes:\\n\\n- Construction unemployment surged from typical winter peaks of 10-13% to over 25% by early 2010\\n- Agriculture showed dramatic year-to-year variation, with 2009-2010 winter unemployment reaching 19-21%, nearly double the levels seen in 2000\\n- Mining and Extraction maintained lower overall rates (2-7%) but still exhibited seasonal patterns, with late-year increases across most periods\\n\\n**In summary**, industries reliant on weather-dependent operations face significant seasonal unemployment challenges, which are dramatically amplified during economic recessions. While sectors like Government and Finance maintain stable employment year-round, Agriculture and Construction workers experience predictable winter unemployment that can more than double during economic downturns. These patterns suggest the need for targeted workforce development and social safety net programs that account for both seasonal and cyclical employment disruptions. Further investigation should examine whether these patterns have evolved post-2010 and assess the effectiveness of countercyclical policies in stabilizing employment in vulnerable sectors.\",\"style\":\"executive summary\",\"selectedChartIds\":[\"chart-1760745546664\",\"chart-1760745839180\"],\"createdAt\":1760831421331},{\"id\":\"report-1760831364867-9457\",\"content\":\"# Unemployment Surge Across Industries: The 2008-2009 Economic Crisis Impact\\n\\nThe decade from 2000 to 2010 witnessed significant volatility in unemployment rates across major industry sectors, with a dramatic escalation during the 2008-2009 financial crisis that fundamentally reshaped the American labor market.\\n\\n[IMAGE(chart-1760745539559)]\\n\\nThe longitudinal analysis reveals that while most industries maintained relatively stable unemployment rates between 2000 and 2007—typically fluctuating between 2% and 8%—the landscape changed dramatically beginning in late 2008. **Construction** emerged as the most severely impacted sector, with unemployment rates soaring to approximately **27% by early 2010**. Similarly, **Agriculture** experienced unprecedented spikes reaching above **22%**, demonstrating the crisis's far-reaching effects beyond traditional white-collar sectors. Even traditionally stable sectors like Government and Finance, which historically maintained rates below 3%, saw significant increases, reaching 5-7% during the peak crisis period.\\n\\n[IMAGE(chart-1760745556213)]\\n\\nExamining the year-over-year impact between 2008 and 2009 reveals the crisis's differential industry effects:\\n\\n- **Mining and Extraction** and **Construction** led all sectors with unemployment rate increases exceeding **8.5 percentage points**\\n- **Manufacturing** and **Agriculture** followed with increases above **5 percentage points**\\n- **Business services** and **Information** sectors experienced moderate increases of approximately **4 percentage points**\\n- **Government** showed the smallest increase at just **1.2 percentage points**, demonstrating relative stability during economic turbulence\\n\\n**In summary**, the 2008-2009 financial crisis created an unprecedented unemployment shock across American industries, with resource extraction, construction, and manufacturing bearing the heaviest burden. The data reveals that sectors tied to physical production and cyclical economic activity experienced the most severe dislocations, while government employment remained comparatively insulated. Key follow-up questions include: What were the long-term recovery trajectories for these industries post-2010? Did the workers displaced from heavily impacted sectors successfully transition to more stable industries? How did policy interventions differentially affect recovery across these sectors?\",\"style\":\"executive summary\",\"selectedChartIds\":[\"chart-1760745556213\",\"chart-1760745539559\"],\"createdAt\":1760831379076}],\"currentReport\":{\"id\":\"report-1760750575650-2619\",\"content\":\"# Hollywood's Billion-Dollar Hitmakers\\n\\n*Avatar* stands alone—earning over $2.5B in profit, dwarfing all competition. Action and Adventure films dominate the most profitable titles, with franchises like *Jurassic Park*, *The Dark Knight*, and *Lord of the Rings* proving blockbuster formulas work.\\n\\n<img src=\\\"blob:http://localhost:5173/de49db0f-5fad-4c15-b1b9-cda87ef53107\\\" alt=\\\"Chart\\\" width=\\\"3384\\\" height=\\\"1728\\\" />\\n\\nSteven Spielberg leads all directors with $7.2B in total profit across his career, showcasing remarkable consistency with hits spanning decades—from *Jurassic Park* to *E.T.* His nearest competitors trail by billions, underlining his unmatched commercial impact.\\n\\n<img src=\\\"blob:http://localhost:5173/d7a91ff7-1d87-4299-bcd7-f9b69558cac7\\\" alt=\\\"Chart\\\" width=\\\"2764\\\" height=\\\"1712\\\" />\\n\\n**In summary**, mega-budget Action and Adventure films generate extraordinary returns when they succeed, and a handful of elite directors—led by Spielberg—have mastered the formula for sustained box office dominance.\",\"style\":\"short note\",\"selectedChartIds\":[\"chart-1760743347871\",\"chart-1760743768741\"],\"chartImages\":{},\"createdAt\":1760750584189,\"title\":\"Report - 10/17/2025\"},\"activeChallenges\":[],\"agentWorkInProgress\":[],\"_persist\":{\"version\":-1,\"rehydrated\":true}}"
  },
  {
    "path": "public/manifest.json",
    "content": "{\n  \"short_name\": \"Data Formulator\",\n  \"name\": \"Data Formulator\",\n  \"icons\": [\n    {\n      \"src\": \"data-formulator-logo-128.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"128x128\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "py-src/data_formulator/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\ndef run_app():\n    \"\"\"Launch the Data Formulator Flask application.\"\"\"\n    # Import app only when actually running to avoid heavy imports at package load\n    from data_formulator.app import run_app as _run_app\n    return _run_app()\n\n__all__ = [\n    \"run_app\",\n]"
  },
  {
    "path": "py-src/data_formulator/__main__.py",
    "content": "from .app import run_app\n\nif __name__ == \"__main__\":\n    run_app()"
  },
  {
    "path": "py-src/data_formulator/agent_routes.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport argparse\nimport random\nimport sys\nimport os\nimport mimetypes\nimport re\nimport traceback\nmimetypes.add_type('application/javascript', '.js')\nmimetypes.add_type('application/javascript', '.mjs')\n\nimport flask\nfrom flask import request, jsonify, Blueprint, current_app, Response, stream_with_context\nimport logging\n\nimport json\nimport html\nimport pandas as pd\n\nfrom data_formulator.agents.agent_data_transform import DataTransformationAgent\nfrom data_formulator.agents.agent_data_rec import DataRecAgent\n\nfrom data_formulator.agents.agent_sort_data import SortDataAgent\nfrom data_formulator.auth import get_identity_id\nfrom data_formulator.code_signing import sign_result, verify_code, MAX_CODE_SIZE\nfrom data_formulator.datalake.workspace import Workspace, WorkspaceWithTempData\nfrom data_formulator.workspace_factory import get_workspace\nfrom data_formulator.agents.agent_data_load import DataLoadAgent\nfrom data_formulator.agents.agent_data_clean_stream import DataCleanAgentStream\nfrom data_formulator.agents.agent_code_explanation import CodeExplanationAgent\nfrom data_formulator.agents.agent_chart_insight import ChartInsightAgent\nfrom data_formulator.agents.agent_interactive_explore import InteractiveExploreAgent\nfrom data_formulator.agents.agent_report_gen import ReportGenAgent\nfrom data_formulator.agents.client_utils import Client\n\nfrom data_formulator.agents.data_agent import DataAgent\n\n# Get logger for this module (logging config done in app.py)\nlogger = logging.getLogger(__name__)\n\n\ndef get_temp_tables(workspace, input_tables: list[dict]) -> list[dict]:\n    \"\"\"\n    Determine which input tables are temp tables (not persisted in the workspace datalake).\n    \n    Args:\n        workspace: The user's workspace instance\n        input_tables: List of table dicts with 'name' and 'rows' keys\n        \n    Returns:\n        List of table dicts that don't exist in the workspace (temp tables)\n    \"\"\"\n    existing_tables = set(workspace.list_tables())\n    return [table for table in input_tables if table.get('name') not in existing_tables]\n\nagent_bp = Blueprint('agent', __name__, url_prefix='/api/agent')\n\n@agent_bp.errorhandler(Exception)\ndef handle_agent_error(e):\n    \"\"\"Catch-all error handler to ensure JSON responses instead of HTML error pages.\"\"\"\n    logger.error(f\"Unhandled error in agent route: {e}\")\n    logger.error(traceback.format_exc())\n    response = flask.jsonify({\n        \"status\": \"error\",\n        \"error_message\": sanitize_model_error(str(e)),\n        \"results\": [],\n        \"result\": []\n    })\n    response.headers.add('Access-Control-Allow-Origin', '*')\n    return response, 500\n\ndef get_client(model_config):\n    for key in model_config:\n        model_config[key] = model_config[key].strip()\n\n    client = Client(\n        model_config[\"endpoint\"],\n        model_config[\"model\"],\n        model_config[\"api_key\"] if \"api_key\" in model_config else None,\n        html.escape(model_config[\"api_base\"]) if \"api_base\" in model_config else None,\n        model_config[\"api_version\"] if \"api_version\" in model_config else None)\n\n    return client\n\n\n@agent_bp.route('/check-available-models', methods=['GET', 'POST'])\ndef check_available_models():\n    results = []\n    \n    # Define configurations for different providers\n    providers = ['openai', 'azure', 'anthropic', 'gemini', 'ollama']\n\n    for provider in providers:\n        # Skip if provider is not enabled\n        if not os.getenv(f\"{provider.upper()}_ENABLED\", \"\").lower() == \"true\":\n            continue\n        \n        api_key = os.getenv(f\"{provider.upper()}_API_KEY\", \"\")\n        api_base = os.getenv(f\"{provider.upper()}_API_BASE\", \"\")\n        api_version = os.getenv(f\"{provider.upper()}_API_VERSION\", \"\")\n        models = os.getenv(f\"{provider.upper()}_MODELS\", \"\")\n\n        if not (api_key or api_base):\n            continue\n\n        if not models:\n            continue\n\n        # Build config for each model\n        for model in models.split(\",\"):\n            model = model.strip()\n            if not model:\n                continue\n\n            model_config = {\n                \"id\": f\"{provider}-{model}-{api_key}-{api_base}-{api_version}\",\n                \"endpoint\": provider,\n                \"model\": model,\n                \"api_key\": api_key,\n                \"api_base\": api_base,\n                \"api_version\": api_version\n            }\n            \n            # Retry with backoff — DefaultAzureCredential and other providers\n            # may need a moment to initialize on cold start.\n            max_retries = 3\n            for attempt in range(max_retries):\n                try:\n                    client = get_client(model_config)\n                    response = client.get_completion(\n                        messages=[\n                            {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n                            {\"role\": \"user\", \"content\": \"Respond 'I can hear you.' if you can hear me.\"},\n                        ]\n                    )\n                    \n                    if \"I can hear you.\" in response.choices[0].message.content:\n                        results.append(model_config)\n                    break  # success or non-matching response — don't retry\n                except Exception as e:\n                    if attempt < max_retries - 1:\n                        import time\n                        wait = 2 ** attempt  # 1s, 2s\n                        logger.warning(f\"Retrying {provider}/{model} in {wait}s (attempt {attempt+1}/{max_retries}): {e}\")\n                        time.sleep(wait)\n                    else:\n                        logger.error(f\"Error testing {provider} model {model} after {max_retries} attempts: {e}\")\n                \n    return json.dumps(results)\n\ndef sanitize_model_error(error_message: str) -> str:\n    \"\"\"Sanitize model API error messages before sending to client.\"\"\"\n    # HTML escape the message\n    message = html.escape(error_message)\n    \n    # Remove any potential API keys that might be in the error\n    message = re.sub(r'(api[-_]?key|api[-_]?token)[=:]\\s*[^\\s&]+', r'\\1=<redacted>', message, flags=re.IGNORECASE)\n    \n    # Keep only the essential error info\n    if len(message) > 500:  # Truncate very long messages\n        message = message[:500] + \"...\"\n\n    return message\n\n@agent_bp.route('/test-model', methods=['GET', 'POST'])\ndef test_model():\n    if request.is_json:\n        logger.info(\"# test-model request\")\n        content = request.get_json()\n\n        # contains endpoint, key, model, api_base, api_version\n        logger.debug(\"content------------------------------\")\n        logger.debug(content)\n\n        client = get_client(content['model'])\n        \n        try:\n            response = client.get_completion(\n                messages=[\n                    {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n                    {\"role\": \"user\", \"content\": \"Respond 'I can hear you.' if you can hear me. Do not say anything other than 'I can hear you.'\"},\n                ]\n            )\n\n            logger.debug(f\"model: {content['model']}\")\n            logger.debug(f\"welcome message: {response.choices[0].message.content}\")\n\n            if \"I can hear you.\" in response.choices[0].message.content:\n                result = {\n                    \"model\": content['model'],\n                    \"status\": 'ok',\n                    \"message\": \"\"\n                }\n        except Exception as e:\n            print(f\"Error: {e}\")\n            logger.info(f\"Error: {e}\")\n            result = {\n                \"model\": content['model'],\n                \"status\": 'error',\n                \"message\": sanitize_model_error(str(e)),\n            }\n    else:\n        result = {'status': 'error'}\n    \n    return json.dumps(result)\n\n@agent_bp.route('/process-data-on-load', methods=['GET', 'POST'])\ndef process_data_on_load_request():\n\n    if request.is_json:\n        logger.info(\"# process-data-on-load request\")\n        content = request.get_json()\n        token = content[\"token\"]\n        input_data = content[\"input_data\"]\n\n        client = get_client(content['model'])\n\n        logger.debug(f\" model: {content['model']}\")\n\n        try:\n            # Get workspace (needed for both virtual and in-memory tables)\n            identity_id = get_identity_id()\n            workspace = get_workspace(identity_id)\n\n            # Check if input table is in workspace, if not add as temp data\n            input_tables = [{\"name\": input_data.get(\"name\"), \"rows\": input_data.get(\"rows\", [])}]\n            temp_data = get_temp_tables(workspace, input_tables)\n            \n            with WorkspaceWithTempData(workspace, temp_data) as workspace:\n                agent = DataLoadAgent(client=client, workspace=workspace)\n                candidates = agent.run(content[\"input_data\"])\n                candidates = [c['content'] for c in candidates if c['status'] == 'ok']\n\n            response = flask.jsonify({ \"status\": \"ok\", \"token\": token, \"result\": candidates })\n        except Exception as e:\n            logger.exception(e)\n            response = flask.jsonify({ \"token\": token, \"status\": \"error\", \"result\": [] })\n    else:\n        response = flask.jsonify({ \"token\": -1, \"status\": \"error\", \"result\": [] })\n\n    response.headers.add('Access-Control-Allow-Origin', '*')\n    return response\n\n\n@agent_bp.route('/clean-data-stream', methods=['GET', 'POST'])\ndef clean_data_stream_request():\n    def generate():\n        if request.is_json:\n            logger.info(\"# clean-data-stream request\")\n            content = request.get_json()\n            token = content[\"token\"]\n\n            client = get_client(content['model'])\n\n            logger.debug(f\" model: {content['model']}\")\n            \n            agent = DataCleanAgentStream(client=client)\n\n            try:\n                for chunk in agent.stream(content.get('prompt', ''), content.get('artifacts', []), content.get('dialog', [])):\n                    yield chunk\n            except Exception as e:\n                logger.error(e)\n                if 'unable to download html from url' in str(e):\n                    error_data = { \n                        \"token\": token, \n                        \"status\": \"error\", \n                        \"result\": 'this website doesn\\'t allow us to download html from url :(' \n                    }\n                else:\n                    error_data = { \n                        \"token\": token, \n                        \"status\": \"error\", \n                        \"result\": 'unable to process data clean request' \n                    }\n                yield '\\n' + json.dumps(error_data) + '\\n'\n        else:\n            error_data = { \n                \"token\": -1, \n                \"status\": \"error\", \n                \"result\": \"Invalid request format\" \n            }\n            yield '\\n' + json.dumps(error_data) + '\\n'\n\n    response = Response(\n        stream_with_context(generate()),\n        mimetype='application/json',\n        headers={\n            'Access-Control-Allow-Origin': '*',\n            'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',\n            'Access-Control-Allow-Headers': 'Content-Type'\n        }\n    )\n    return response\n\n\n@agent_bp.route('/sort-data', methods=['GET', 'POST'])\ndef sort_data_request():\n\n    if request.is_json:\n        logger.info(\"# sort-data request\")\n        content = request.get_json()\n        token = content[\"token\"]\n\n        try:\n            client = get_client(content['model'])\n\n            agent = SortDataAgent(client=client)\n            candidates = agent.run(content['field'], content['items'])\n\n            candidates = candidates if candidates != None else []\n            response = flask.jsonify({ \"status\": \"ok\", \"token\": token, \"result\": candidates })\n        except Exception as e:\n            logger.error(f\"Error in sort-data: {e}\")\n            logger.error(traceback.format_exc())\n            response = flask.jsonify({ \"token\": token, \"status\": \"error\", \"result\": [], \"error_message\": sanitize_model_error(str(e)) })\n    else:\n        response = flask.jsonify({ \"token\": -1, \"status\": \"error\", \"result\": [] })\n\n    response.headers.add('Access-Control-Allow-Origin', '*')\n    return response\n\n@agent_bp.route('/derive-data', methods=['GET', 'POST'])\ndef derive_data():\n\n    if request.is_json:\n        logger.info(\"# derive-data request\")\n        content = request.get_json()        \n        token = content[\"token\"]\n\n        client = get_client(content['model'])\n\n        # each table is a dict with {\"name\": xxx, \"rows\": [...]}\n        input_tables = content[\"input_tables\"]\n\n        instruction = content[\"extra_prompt\"]\n        \n        max_repair_attempts = content[\"max_repair_attempts\"] if \"max_repair_attempts\" in content else 1\n        agent_coding_rules = content.get(\"agent_coding_rules\", \"\")\n        current_visualization = content.get(\"current_visualization\", None)\n        expected_visualization = content.get(\"expected_visualization\", None)\n\n        if \"additional_messages\" in content:\n            prev_messages = content[\"additional_messages\"]\n        else:\n            prev_messages = []\n\n        logger.debug(\"== input tables ===>\")\n        for table in input_tables:\n            logger.debug(f\"===> Table: {table['name']} (first 5 rows)\")\n            logger.debug(table['rows'][:5])\n\n        logger.debug(\"== user spec ===\")\n        logger.debug(instruction)\n\n        # If user provided chart encodings (via visualization context), use transform mode; otherwise recommendation\n        mode = \"transform\" if current_visualization or expected_visualization else \"recommendation\"\n\n        try:\n            identity_id = get_identity_id()\n            workspace = get_workspace(identity_id)\n            temp_data = get_temp_tables(workspace, input_tables)\n            max_display_rows = current_app.config['CLI_ARGS']['max_display_rows']\n\n            with WorkspaceWithTempData(workspace, temp_data) as workspace:\n                if mode == \"recommendation\":\n                    # Use unified Python agent for recommendations\n                    agent = DataRecAgent(client=client, workspace=workspace, agent_coding_rules=agent_coding_rules, max_display_rows=max_display_rows)\n                    results = agent.run(input_tables, instruction, n=1, prev_messages=prev_messages)\n                else:\n                    # Use unified Python agent that generates Python scripts with DuckDB + pandas\n                    agent = DataTransformationAgent(client=client, workspace=workspace, agent_coding_rules=agent_coding_rules, max_display_rows=max_display_rows)\n                    results = agent.run(input_tables, instruction, prev_messages,\n                                        current_visualization=current_visualization, expected_visualization=expected_visualization)\n\n                repair_attempts = 0\n                while results[0]['status'] == 'error' and repair_attempts < max_repair_attempts:\n                    error_message = results[0]['content']\n                    logger.warning(f\"[derive-data] Code generation failed (attempt {repair_attempts + 1}/{max_repair_attempts}), mode={mode}. Error: {error_message}\")\n                    new_instruction = f\"We run into the following problem executing the code, please fix it:\\n\\n{error_message}\\n\\nPlease think step by step, reflect why the error happens and fix the code so that no more errors would occur.\"\n\n                    prev_dialog = results[0]['dialog']\n\n                    if mode == \"transform\":\n                        results = agent.followup(input_tables, prev_dialog, [], new_instruction, n=1)\n                    if mode == \"recommendation\":\n                        results = agent.followup(input_tables, prev_dialog, [], new_instruction, n=1)\n\n                    repair_attempts += 1\n                    logger.warning(f\"[derive-data] Repair attempt {repair_attempts}/{max_repair_attempts} result: {results[0]['status']}\")\n\n                if repair_attempts > 0:\n                    logger.warning(f\"[derive-data] Finished repair loop after {repair_attempts} attempt(s). Final status: {results[0]['status']}\")\n\n            # Sign code in each result so the frontend can send it back\n            # for re-execution during data refresh with proof of authenticity.\n            for r in results:\n                sign_result(r)\n\n            response = flask.jsonify({ \"token\": token, \"status\": \"ok\", \"results\": results })\n        except Exception as e:\n            logger.error(f\"Error in derive-data: {e}\")\n            logger.error(traceback.format_exc())\n            response = flask.jsonify({ \"token\": token, \"status\": \"error\", \"results\": [], \"error_message\": sanitize_model_error(str(e)) })\n    else:\n        response = flask.jsonify({ \"token\": \"\", \"status\": \"error\", \"results\": [] })\n\n    response.headers.add('Access-Control-Allow-Origin', '*')\n    return response\n\n@agent_bp.route('/data-agent-streaming', methods=['GET', 'POST'])\ndef data_agent_streaming():\n    \"\"\"Autonomous data exploration agent endpoint (SWE-agent style).\n\n    Accepts a user question, runs the DataAgent observe-think-act loop,\n    and streams events back as newline-delimited JSON.\n\n    To resume after a clarification, the client sends:\n        - trajectory: the trajectory list returned in the clarify event\n        - clarification_response: the user's answer (string)\n    The server appends the answer to the trajectory and continues the loop.\n    \"\"\"\n    def generate():\n        if request.is_json:\n            logger.setLevel(logging.INFO)\n            logger.info(\"# data-agent-streaming request\")\n\n            content = request.get_json()\n            token = content.get(\"token\", \"\")\n\n            input_tables = content[\"input_tables\"]\n            user_question = content.get(\"user_question\", \"\")\n            max_iterations = content.get(\"max_iterations\", 5)\n            max_repair_attempts = content.get(\"max_repair_attempts\", 1)\n            agent_exploration_rules = content.get(\"agent_exploration_rules\", \"\")\n            agent_coding_rules = content.get(\"agent_coding_rules\", \"\")\n            conversation_history = content.get(\"conversation_history\", None)\n\n            # Stateless resume: client sends back the trajectory + user answer\n            resume_trajectory = content.get(\"trajectory\", None)\n            clarification_response = content.get(\"clarification_response\", None)\n            completed_step_count = content.get(\"completed_step_count\", 0)\n\n            logger.debug(\"== input tables ===>\")\n            for table in input_tables:\n                logger.debug(f\"===> Table: {table['name']} (first 5 rows)\")\n                logger.debug(table['rows'][:5])\n\n            logger.debug(f\"== user question ===> {user_question}\")\n\n            client = get_client(content['model'])\n            identity_id = get_identity_id()\n\n            if not identity_id:\n                yield json.dumps({\n                    \"token\": token,\n                    \"status\": \"error\",\n                    \"result\": {\"type\": \"error\", \"error_message\": \"Identity ID required\"},\n                }) + '\\n'\n                return\n\n            workspace = get_workspace(identity_id)\n            temp_data = get_temp_tables(workspace, input_tables) if input_tables else None\n\n            try:\n                with WorkspaceWithTempData(workspace, temp_data) as ws:\n                    agent = DataAgent(\n                        client=client,\n                        workspace=ws,\n                        agent_exploration_rules=agent_exploration_rules,\n                        agent_coding_rules=agent_coding_rules,\n                        max_iterations=max_iterations,\n                        max_repair_attempts=max_repair_attempts,\n                    )\n\n                    # Build trajectory for resume or fresh start\n                    trajectory = None\n                    if resume_trajectory and clarification_response:\n                        # Append the user's clarification to the saved trajectory\n                        trajectory = list(resume_trajectory)\n                        trajectory.append({\n                            \"role\": \"user\",\n                            \"content\": f\"[USER CLARIFICATION]\\n\\n{clarification_response}\",\n                        })\n                        logger.debug(f\"== resuming with clarification ===> {clarification_response}\")\n\n                    for event in agent.run(\n                        input_tables=input_tables,\n                        user_question=user_question,\n                        conversation_history=conversation_history,\n                        trajectory=trajectory,\n                        completed_step_count=completed_step_count,\n                    ):\n                        yield json.dumps({\n                            \"token\": token,\n                            \"status\": \"ok\",\n                            \"result\": event,\n                        }) + '\\n'\n\n                        # Stop streaming after terminal events\n                        if event.get(\"type\") in (\"completion\", \"clarify\"):\n                            break\n\n            except Exception as e:\n                logger.error(f\"Error in data-agent-streaming: {e}\")\n                logger.error(traceback.format_exc())\n                yield json.dumps({\n                    \"token\": token,\n                    \"status\": \"error\",\n                    \"result\": None,\n                    \"error_message\": sanitize_model_error(str(e)),\n                }) + '\\n'\n\n            logger.setLevel(logging.WARNING)\n\n        else:\n            yield json.dumps({\n                \"token\": \"\",\n                \"status\": \"error\",\n                \"result\": None,\n                \"error_message\": \"Invalid request format\",\n            }) + '\\n'\n\n    response = Response(\n        stream_with_context(generate()),\n        mimetype='application/json',\n        headers={\n            'Access-Control-Allow-Origin': '*',\n            'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',\n            'Access-Control-Allow-Headers': 'Content-Type',\n        }\n    )\n    return response\n\n\n@agent_bp.route('/refine-data', methods=['GET', 'POST'])\ndef refine_data():\n\n    if request.is_json:\n        logger.info(\"# refine-data request\")\n        content = request.get_json()        \n        token = content[\"token\"]\n\n\n        client = get_client(content['model'])\n\n        # each table is a dict with {\"name\": xxx, \"rows\": [...]}\n        input_tables = content[\"input_tables\"]\n        dialog = content[\"dialog\"]\n\n        new_instruction = content[\"new_instruction\"]\n        latest_data_sample = content[\"latest_data_sample\"]\n        max_repair_attempts = content.get(\"max_repair_attempts\", 1)\n        agent_coding_rules = content.get(\"agent_coding_rules\", \"\")\n        current_visualization = content.get(\"current_visualization\", None)\n        expected_visualization = content.get(\"expected_visualization\", None)\n\n        logger.debug(\"== input tables ===>\")\n        for table in input_tables:\n            logger.debug(f\"===> Table: {table['name']} (first 5 rows)\")\n            logger.debug(table['rows'][:5])\n        \n        logger.debug(\"== user spec ===>\")\n        logger.debug(new_instruction)\n\n        try:\n            identity_id = get_identity_id()\n            workspace = get_workspace(identity_id)\n            temp_data = get_temp_tables(workspace, input_tables)\n            max_display_rows = current_app.config['CLI_ARGS']['max_display_rows']\n\n            with WorkspaceWithTempData(workspace, temp_data) as workspace:\n                # Use unified Python agent for followup transformations\n                agent = DataTransformationAgent(client=client, workspace=workspace, agent_coding_rules=agent_coding_rules, max_display_rows=max_display_rows)\n                results = agent.followup(input_tables, dialog, latest_data_sample, new_instruction, n=1,\n                                        current_visualization=current_visualization, expected_visualization=expected_visualization)\n\n                repair_attempts = 0\n                while results[0]['status'] == 'error' and repair_attempts < max_repair_attempts:\n                    error_message = results[0]['content']\n                    logger.info(f\"[refine-data] Code generation failed (attempt {repair_attempts + 1}/{max_repair_attempts}). Error: {error_message}\")\n                    new_instruction = f\"We run into the following problem executing the code, please fix it:\\n\\n{error_message}\\n\\nPlease think step by step, reflect why the error happens and fix the code so that no more errors would occur.\"\n                    prev_dialog = results[0]['dialog']\n\n                    results = agent.followup(input_tables, prev_dialog, [], new_instruction, n=1)\n                    repair_attempts += 1\n                    logger.info(f\"[refine-data] Repair attempt {repair_attempts}/{max_repair_attempts} result: {results[0]['status']}\")\n\n                if repair_attempts > 0:\n                    logger.info(f\"[refine-data] Finished repair loop after {repair_attempts} attempt(s). Final status: {results[0]['status']}\")\n\n            # Sign code in each result for secure refresh later.\n            for r in results:\n                sign_result(r)\n\n            response = flask.jsonify({ \"token\": token, \"status\": \"ok\", \"results\": results})\n        except Exception as e:\n            logger.error(f\"Error in refine-data: {e}\")\n            logger.error(traceback.format_exc())\n            response = flask.jsonify({ \"token\": token, \"status\": \"error\", \"results\": [], \"error_message\": sanitize_model_error(str(e)) })\n    else:\n        response = flask.jsonify({ \"token\": \"\", \"status\": \"error\", \"results\": []})\n\n    response.headers.add('Access-Control-Allow-Origin', '*')\n    return response\n\n@agent_bp.route('/code-expl', methods=['GET', 'POST'])\ndef request_code_expl():\n    if request.is_json:\n        logger.info(\"# code-expl request\")\n        content = request.get_json()\n        client = get_client(content['model'])\n\n        # each table is a dict with {\"name\": xxx, \"rows\": [...]}\n        input_tables = content[\"input_tables\"]\n        code = content[\"code\"]\n\n        # Get workspace and mount temp data\n        identity_id = get_identity_id()\n        workspace = get_workspace(identity_id)\n        temp_data = get_temp_tables(workspace, input_tables)\n\n        with WorkspaceWithTempData(workspace, temp_data) as workspace:\n            try:\n                code_expl_agent = CodeExplanationAgent(client=client, workspace=workspace)\n                candidates = code_expl_agent.run(input_tables, code)\n\n                # Return the first candidate's content as JSON\n                if candidates and len(candidates) > 0:\n                    result = candidates[0]\n                    if result['status'] == 'ok':\n                        return jsonify(result)\n                    else:\n                        return jsonify(result), 400\n                else:\n                    return jsonify({'error': 'No explanation generated'}), 400\n            except Exception as e:\n                logger.error(f\"Error in code-expl: {e}\")\n                logger.error(traceback.format_exc())\n                return jsonify({'error': sanitize_model_error(str(e))}), 400\n    else:\n        return jsonify({'error': 'Invalid request format'}), 400\n\n@agent_bp.route('/chart-insight', methods=['GET', 'POST'])\ndef request_chart_insight():\n    if request.is_json:\n        logger.info(\"# chart insight request\")\n        content = request.get_json()\n        client = get_client(content['model'])\n\n        chart_image = content.get(\"chart_image\", \"\")\n        chart_type = content.get(\"chart_type\", \"\")\n        field_names = content.get(\"field_names\", [])\n        input_tables = content.get(\"input_tables\", [])\n\n        # Get workspace\n        identity_id = get_identity_id()\n        workspace = get_workspace(identity_id)\n        temp_data = get_temp_tables(workspace, input_tables)\n\n        with WorkspaceWithTempData(workspace, temp_data) as workspace:\n            try:\n                agent = ChartInsightAgent(client=client, workspace=workspace)\n                candidates = agent.run(chart_image, chart_type, field_names, input_tables)\n\n                if candidates and len(candidates) > 0:\n                    result = candidates[0]\n                    if result['status'] == 'ok':\n                        return jsonify(result)\n                    else:\n                        return jsonify(result), 400\n                else:\n                    return jsonify({'error': 'No insight generated'}), 400\n            except Exception as e:\n                logger.error(f\"Error in chart-insight: {e}\")\n                logger.error(traceback.format_exc())\n                return jsonify({'error': sanitize_model_error(str(e))}), 400\n    else:\n        return jsonify({'error': 'Invalid request format'}), 400\n\n@agent_bp.route('/get-recommendation-questions', methods=['GET', 'POST'])\ndef get_recommendation_questions():\n    def generate():\n        if request.is_json:\n            logger.info(\"# get recommendation questions request\")\n            content = request.get_json()\n            token = content.get(\"token\", \"\")\n\n            client = get_client(content['model'])\n\n            input_tables = content.get(\"input_tables\", [])\n            identity_id = get_identity_id()\n            workspace = get_workspace(identity_id)\n\n            agent_exploration_rules = content.get(\"agent_exploration_rules\", \"\")\n            mode = content.get(\"mode\", \"interactive\")\n            start_question = content.get(\"start_question\", None)\n            exploration_thread = content.get(\"exploration_thread\", None)\n            current_chart = content.get(\"current_chart\", None)\n            current_data_sample = content.get(\"current_data_sample\", None)\n\n            # Collect all tables that need to be in workspace:\n            # both the input tables and any tables from the exploration thread\n            all_tables = list(input_tables)\n            if exploration_thread:\n                all_tables.extend(exploration_thread)\n            temp_data = get_temp_tables(workspace, all_tables) if all_tables else None\n\n            with WorkspaceWithTempData(workspace, temp_data) as workspace:\n                agent = InteractiveExploreAgent(client=client, workspace=workspace, agent_exploration_rules=agent_exploration_rules)\n                try:\n                    for chunk in agent.run(input_tables, start_question, exploration_thread, current_data_sample, current_chart, mode):\n                        yield chunk\n                except Exception as e:\n                    logger.error(e)\n                    error_data = { \n                        \"content\": \"unable to process recommendation questions request\" \n                    }\n                    yield 'error: ' + json.dumps(error_data) + '\\n'\n        else:\n            error_data = { \n                \"content\": \"Invalid request format\" \n            }\n            yield 'error: ' + json.dumps(error_data) + '\\n'\n\n    response = Response(\n        stream_with_context(generate()),\n        mimetype='application/json',\n        headers={ 'Access-Control-Allow-Origin': '*',  }\n    )\n    return response\n\n@agent_bp.route('/generate-report-stream', methods=['GET', 'POST'])\ndef generate_report_stream():\n    def generate():\n        if request.is_json:\n            logger.info(\"# generate report stream request\")\n            content = request.get_json()\n            token = content.get(\"token\", \"\")\n\n            client = get_client(content['model'])\n\n            input_tables = content.get(\"input_tables\", [])\n            charts = content.get(\"charts\", [])\n            style = content.get(\"style\", \"blog post\")\n            identity_id = get_identity_id()\n            workspace = get_workspace(identity_id)\n            temp_data = get_temp_tables(workspace, input_tables) if input_tables else None\n\n            with WorkspaceWithTempData(workspace, temp_data) as workspace:\n                agent = ReportGenAgent(client=client, workspace=workspace)\n                try:\n                    for chunk in agent.stream(input_tables, charts, style):\n                        yield chunk\n                except Exception as e:\n                    logger.error(e)\n                    error_data = { \n                        \"content\": \"unable to process report generation request\" \n                    }\n                    yield 'error: ' + json.dumps(error_data) + '\\n'\n        else:\n            error_data = { \n                \"content\": \"Invalid request format\" \n            }\n            yield 'error: ' + json.dumps(error_data) + '\\n'\n\n    response = Response(\n        stream_with_context(generate()),\n        mimetype='application/json',\n        headers={ 'Access-Control-Allow-Origin': '*',  }\n    )\n    return response\n\n\n@agent_bp.route('/refresh-derived-data', methods=['POST'])\ndef refresh_derived_data():\n    \"\"\"\n    Re-run Python transformation code with updated input data to refresh a derived table.\n    \n    Security: The code must have been previously signed by the server (via\n    ``code_signing.sign_result``) when it was first generated by an agent.\n    The frontend must send the original ``code_signature`` back alongside\n    the code.  This endpoint verifies the signature before executing,\n    preventing execution of tampered or injected code.\n    \n    This endpoint:\n    1. Verifies the code signature (HMAC-SHA256)\n    2. Gets input tables from workspace (extending with temp data if needed)\n    3. Re-runs the transformation code in workspace context\n    4. Updates the derived table in workspace if virtual flag is true\n    \n    Request body:\n    - input_tables: list of {name: string, rows: list} objects representing the parent tables\n    - code: the Python transformation code to execute\n    - code_signature: HMAC-SHA256 signature of the code (required)\n    - output_variable: the variable name containing the result DataFrame (required)\n    - output_table_name: the workspace table name to update with results (required if virtual=true)\n    - virtual: boolean flag indicating whether to save result to workspace\n    \n    Returns:\n    - status: 'ok' or 'error'\n    - rows: the resulting rows if successful (limited to max_display_rows)\n    - virtual: {table_name: string, row_count: number} if output was saved to workspace\n    - message: error message if failed\n    \"\"\"\n    try:\n        from data_formulator.sandbox import create_sandbox\n        from flask import current_app\n        \n        data = request.get_json()\n        input_tables = data.get('input_tables', [])\n        code = data.get('code', '')\n        code_signature = data.get('code_signature', '')\n        output_variable = data.get('output_variable')\n        output_table_name = data.get('output_table_name')\n        virtual = data.get('virtual', False)\n        \n        if not input_tables:\n            return jsonify({\n                \"status\": \"error\",\n                \"message\": \"No input tables provided\"\n            }), 400\n            \n        if not code:\n            return jsonify({\n                \"status\": \"error\", \n                \"message\": \"No transformation code provided\"\n            }), 400\n\n        # ---- Security: verify code signature --------------------------------\n        # The code must have been signed by the server when the agent first\n        # generated it.  Reject unsigned or tampered code.\n        if not code_signature:\n            logger.warning(\"[refresh-derived-data] Rejected request: missing code_signature\")\n            return jsonify({\n                \"status\": \"error\",\n                \"message\": \"Missing code_signature — code must be signed by the server\"\n            }), 403\n\n        if len(code) > MAX_CODE_SIZE:\n            logger.warning(f\"[refresh-derived-data] Rejected request: code too large ({len(code)} bytes)\")\n            return jsonify({\n                \"status\": \"error\",\n                \"message\": f\"Code exceeds maximum allowed size ({MAX_CODE_SIZE} bytes)\"\n            }), 400\n\n        if not verify_code(code, code_signature):\n            logger.warning(\"[refresh-derived-data] Rejected request: invalid code_signature (code may have been tampered with)\")\n            return jsonify({\n                \"status\": \"error\",\n                \"message\": \"Invalid code_signature — code may have been tampered with\"\n            }), 403\n\n        # ---- Input validation -----------------------------------------------\n        if len(input_tables) > 50:\n            return jsonify({\n                \"status\": \"error\",\n                \"message\": \"Too many input tables (max 50)\"\n            }), 400\n            \n        if not output_variable:\n            return jsonify({\n                \"status\": \"error\",\n                \"message\": \"No output_variable provided\"\n            }), 400\n\n        # output_variable is interpolated into generated Python code and used\n        # to construct file paths inside the sandbox.  Restrict it to valid\n        # Python identifiers to prevent code-injection and path-traversal.\n        if not output_variable.isidentifier():\n            return jsonify({\n                \"status\": \"error\",\n                \"message\": \"output_variable must be a valid Python identifier\"\n            }), 400\n            \n        if virtual and not output_table_name:\n            return jsonify({\n                \"status\": \"error\",\n                \"message\": \"output_table_name is required when virtual=true\"\n            }), 400\n        \n        # Get workspace and mount temp data for tables not in workspace\n        identity_id = get_identity_id()\n        workspace = get_workspace(identity_id)\n        temp_data = get_temp_tables(workspace, input_tables)\n        \n        # Get settings from app config\n        cli_args = current_app.config.get('CLI_ARGS', {})\n        max_display_rows = cli_args.get('max_display_rows', 5000)\n        \n        sandbox = create_sandbox(cli_args.get('sandbox', 'local'))\n        \n        with WorkspaceWithTempData(workspace, temp_data) as workspace:\n            # Run the transformation code in the sandbox\n            result = sandbox.run_python_code(\n                code=code,\n                workspace=workspace,\n                output_variable=output_variable,\n            )\n            \n            if result['status'] == 'ok':\n                result_df = result['content']\n                row_count = len(result_df)\n                \n                response_data = {\n                    \"status\": \"ok\",\n                    \"message\": \"Successfully refreshed derived data\",\n                    \"row_count\": row_count\n                }\n                \n                if virtual:\n                    # Virtual table: update workspace and return limited rows for display\n                    workspace.write_parquet(result_df, output_table_name)\n                    response_data[\"virtual\"] = {\n                        \"table_name\": output_table_name,\n                        \"row_count\": row_count\n                    }\n                    # Limit rows for response payload since full data is in workspace\n                    if row_count > max_display_rows:\n                        display_df = result_df.head(max_display_rows)\n                    else:\n                        display_df = result_df\n                    # Remove duplicate columns to avoid orient='records' error\n                    display_df = display_df.loc[:, ~display_df.columns.duplicated()]\n                    response_data[\"rows\"] = json.loads(display_df.to_json(orient='records', date_format='iso'))\n                else:\n                    # Temp table: return full data since there's no workspace storage\n                    # Remove duplicate columns to avoid orient='records' error\n                    result_df = result_df.loc[:, ~result_df.columns.duplicated()]\n                    response_data[\"rows\"] = json.loads(result_df.to_json(orient='records', date_format='iso'))\n                \n                return jsonify(response_data)\n            else:\n                return jsonify({\n                    \"status\": \"error\",\n                    \"message\": result.get('content', 'Unknown error during transformation')\n                }), 400\n            \n    except Exception as e:\n        logger.error(f\"Error refreshing derived data: {str(e)}\")\n        logger.error(traceback.format_exc())\n        return jsonify({\n            \"status\": \"error\",\n            \"message\": str(e)\n        }), 400\n"
  },
  {
    "path": "py-src/data_formulator/agents/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nfrom data_formulator.agents.agent_data_transform import DataTransformationAgent\nfrom data_formulator.agents.agent_data_rec import DataRecAgent\n\nfrom data_formulator.agents.agent_data_load import DataLoadAgent\nfrom data_formulator.agents.agent_sort_data import SortDataAgent\nfrom data_formulator.agents.agent_interactive_explore import InteractiveExploreAgent\nfrom data_formulator.agents.agent_chart_insight import ChartInsightAgent\n\n__all__ = [\n    \"DataTransformationAgent\",\n    \"DataRecAgent\",\n    \"DataLoadAgent\",\n    \"SortDataAgent\",\n    \"InteractiveExploreAgent\",\n    \"ChartInsightAgent\",\n]\n"
  },
  {
    "path": "py-src/data_formulator/agents/agent_chart_insight.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nfrom data_formulator.agents.agent_utils import generate_data_summary, extract_json_objects\n\nimport logging\n\nlogger = logging.getLogger(__name__)\n\n\nSYSTEM_PROMPT = r'''You are a data analyst helping users understand their visualizations.\nYou are given a chart image along with metadata about the chart type, data fields used, and a summary of the underlying data (including schema, value ranges, and sample rows).\n\nUse both the chart image and the data summary to produce:\n\n1. **title**: A short, descriptive title for the chart (5-10 words). It should summarize what the chart is about — the subject, the dimensions compared, and the scope. Do not include the chart type in the title. Write it in title case.\n\n2. **takeaways**: A list of 1-3 key findings or insights from the chart. Each takeaway should be one sentence. Highlight notable patterns, trends, outliers, or comparisons visible in the chart. Be specific — reference actual values, categories, or trends from the data when possible.\n\nRespond with a JSON object in exactly this format (no markdown fences):\n\n{\"title\": \"...\", \"takeaways\": [\"...\", \"...\"]}\n'''\n\n\nclass ChartInsightAgent(object):\n\n    def __init__(self, client, workspace=None):\n        self.client = client\n        self.workspace = workspace\n\n    def run(self, chart_image_base64, chart_type, field_names, input_tables=None, n=1):\n        \"\"\"\n        Generate insight for a chart.\n        \n        Args:\n            chart_image_base64: Base64-encoded PNG data URL of the chart\n            chart_type: The type of chart (e.g., \"Bar Chart\", \"Scatter Plot\")\n            field_names: List of field names used in the chart encodings\n            input_tables: Optional list of input table dicts for data context\n            n: Number of candidates to generate\n        \"\"\"\n\n        # Build context about the chart\n        context_parts = [f\"Chart type: {chart_type}\"]\n        context_parts.append(f\"Fields used: {', '.join(field_names)}\")\n\n        if input_tables and self.workspace:\n            data_summary = generate_data_summary(\n                input_tables, workspace=self.workspace,\n                include_data_samples=True, row_sample_size=3\n            )\n            context_parts.append(f\"\\nData summary:\\n{data_summary}\")\n\n        context = \"\\n\".join(context_parts)\n\n        # Build the message with image\n        user_content = [\n            {\n                \"type\": \"text\",\n                \"text\": f\"[CHART METADATA]\\n{context}\\n\\n[CHART IMAGE]\\nHere is the chart to analyze:\"\n            },\n            {\n                \"type\": \"image_url\",\n                \"image_url\": {\n                    \"url\": f\"data:image/png;base64,{chart_image_base64}\",\n                    \"detail\": \"low\"\n                }\n            }\n        ]\n\n        messages = [\n            {\"role\": \"system\", \"content\": SYSTEM_PROMPT},\n            {\"role\": \"user\", \"content\": user_content}\n        ]\n\n        logger.debug(f\"ChartInsightAgent: analyzing {chart_type} chart with fields {field_names}\")\n        logger.info(f\"[ChartInsightAgent] run start | chart_type={chart_type}\")\n\n        response = self.client.get_completion(messages=messages)\n\n        candidates = []\n        for choice in response.choices:\n            logger.debug(\"\\n=== Chart insight result ===>\\n\")\n            logger.debug(choice.message.content + \"\\n\")\n\n            response_content = choice.message.content\n            title = \"\"\n            takeaways = []\n\n            # Parse JSON response\n            json_blocks = extract_json_objects(response_content + \"\\n\")\n            for parsed in json_blocks:\n                title = parsed.get('title', '')\n                takeaways = parsed.get('takeaways', [])\n                if isinstance(takeaways, str):\n                    takeaways = [takeaways]\n                if title or takeaways:\n                    break\n\n            if title or takeaways:\n                result = {\n                    'status': 'ok',\n                    'title': title,\n                    'takeaways': takeaways,\n                }\n            else:\n                logger.error(f\"unable to parse insight from response: {response_content}\")\n                result = {\n                    'status': 'other error',\n                    'content': 'unable to generate chart insight'\n                }\n\n            result['dialog'] = [*messages, {\"role\": choice.message.role, \"content\": choice.message.content}]\n            result['agent'] = 'ChartInsightAgent'\n\n            candidates.append(result)\n\n        status = candidates[0].get('status', '?') if candidates else 'empty'\n        logger.info(f\"[ChartInsightAgent] run done | status={status}\")\n        return candidates\n"
  },
  {
    "path": "py-src/data_formulator/agents/agent_code_explanation.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\nfrom data_formulator.agents.agent_utils import generate_data_summary, extract_json_objects, extract_code_from_gpt_response\n\nimport logging\n\nlogger = logging.getLogger(__name__)\n\n\nSYSTEM_PROMPT = r'''You are a data scientist to help user explain derived data concepts, \nso that a non-coder can clearly understand what new fields mean. You are provided with a summary of the input data, and the transformation code.\n\nYour goal:\n1. Generate a list of explanations for new fields (fields not from the input data) that introduce metrics/concepts that are not obvious from the code.\n    - provide a declarative definition that explains the new field, use a mathematical notation if applicable.\n    - only include new fields explanation of new metrics that are involved in computation (e.g., ROI, commerical_success_score)\n    - *DO NOT* explain trivial new fields like \"Decade\" or \"Avg_Rating\", \"US_Sales\" that are self-explanatory.\n        - Avoid explaining fields that are simple aggregate of fields in the original data (min_score, avg_value, count, etc.)\n    - When a field involves mathematical computation, you can use LaTeX math notation in the explanation. Format mathematical expressions using:\n        - Inline math: `\\( ... \\)` for formulas within text\n        - Block math: `\\[ ... \\]` for standalone formulas\n        - Examples: `\\( \\frac{\\text{Revenue}}{\\text{Cost}} \\)` for ratios, `\\[ \\text{Score} = \\text{Rating} \\times \\text{Worldwide\\_Gross} \\]` for formulas\n        - note: when using underscores as part of the text, you need to escape them with a backslash, e.g., `\\_`\n    - Note: don't use math notation for fields whose computation is trivial (use plain english), it will likely be confusing to the reader. \n      Only use math notation for fields that can not be easilyexplained in plain english. Use it sparingly.\n2. If there are multiple fields that have the similar computation, you can explain them together in one explanation.\n    - in \"field\", you can provide a list of fields in format of \"field1, field2, ...\"\n    - in \"explanation\", you can provide a single explanation for the computation of the fields.\n    - for example, if you have fields like \"Norm_Rating\", \"Norm_Gross\", \"Critical_Commercial_Score\", you can explain Norm_Rating, Norm_Gross together in one explanation and explain Critical_Commercial_Score in another explanation.\n3. If the code is about statistical analysis, you should explain the statistical analysis in the explanation as a concept named \"Statistical Analysis\".\n    - explain how you model the data, which fields are used, how data processing is done, and what models are used.\n    - suggest some other modeling approaches that can be used to analyze the data in the explanation as well.\n    \nThe focus is to explain how new fields are computed, don't generate explanation for low-level actions like \"return\", \"load data\" etc.\nIf there are no non-trivial new fields/concepts, return an empty list.\n\nProvide the result as a JSON block (start with ```json) in the [CONCEPTS EXPLANATION] section.\n\n[CONCEPTS EXPLANATION]\n\n```json\n[\n    {\n        \"field\": \"...\",\n        \"explanation\": \"...\"\n    }\n]\n\n```\n'''\n\nEXAMPLE = '''\n[CONTEXT]\n\nHere are our datasets, here are their field summaries and samples:\n\ntable_0 (movies) fields:\n\tTitle -- type: object, values: The Phantom, Twilight, Amores Perros, ..., The Producers: The Movie Musical, Pride and Prejudice, Doomsday, The Perez Family\n\tUS_Gross -- type: float64, values: 0.0, 401.0, 1336.0, ..., 403706375.0, 533345358.0, 600788188.0, 760167650.0\n\tWorldwide_Gross -- type: float64, values: 0.0, 401.0, 423.0, ..., 937499905.0, 976457891.0, 1133027325.0, 1842879955.0\n\tUS_DVD_Sales -- type: float64, values: nan, 140689412.0, nan, ..., nan, nan, 46260220.0, 124058348.0\n\tProduction_Budget -- type: float64, values: 218.0, 1100.0, 23000.0, ..., 237000000.0, 250000000.0, 258000000.0, 300000000.0\n\tRelease_Date -- type: object, values: Apr 01 1965, Apr 01 1975, Apr 01 1986, ..., Sep 30 1983, Sep 30 1994, Sep 30 2005, Sep 30 2006\n\tMPAA_Rating -- type: object, values: G, NC-17, Not Rated, Open, PG, PG-13, R\n\tRunning_Time_min -- type: float64, values: nan, nan, nan, ..., nan, nan, nan, nan\n\tDistributor -- type: object, values: 20th Century Fox, 3D Entertainment, 8X Entertainment, ..., Women Make Movies, Yari Film Group Releasing, Yash Raj Films, Zeitgeist\n\tSource -- type: object, values: Based on Book/Short Story, Based on Comic/Graphic Novel, Based on Factual Book/Article, ..., Original Screenplay, Remake, Spin-Off, Traditional/Legend/Fairytale\n\tMajor_Genre -- type: object, values: Action, Adventure, Black Comedy, ..., Musical, Romantic Comedy, Thriller/Suspense, Western\n\tCreative_Type -- type: object, values: Contemporary Fiction, Dramatization, Factual, ..., Kids Fiction, Multiple Creative Types, Science Fiction, Super Hero\n\tDirector -- type: object, values: Abel Ferrara, Adam McKay, Adam Shankman, ..., Yimou Zhang, Zach Braff, Zack Snyder, Zak Penn\n\tRotten_Tomatoes_Rating -- type: float64, values: 1.0, 2.0, 3.0, ..., nan, nan, nan, nan\n\tIMDB_Rating -- type: float64, values: 1.5, 2.5, 3.0, ..., nan, nan, nan, nan\n\tIMDB_Votes -- type: float64, values: 24578.0, nan, 18.0, ..., 364077.0, 387438.0, 411088.0, 519541.0\n\n[CODE]\n\n```python\nimport pandas as pd\nimport collections\nimport numpy as np\n\ndef transform_data(df_movies):\n    # Calculate average rating (mean of Rotten Tomatoes and IMDB rating, normalized to 0-10)\n    rt = df_movies['Rotten_Tomatoes_Rating'] / 10.0  # Rotten Tomatoes is out of 100\n    imdb = df_movies['IMDB_Rating']\n    avg_rating = pd.concat([rt, imdb], axis=1).mean(axis=1, skipna=True)\n    \n    # Normalize avg_rating\n    norm_rating = (avg_rating - avg_rating.min()) / (avg_rating.max() - avg_rating.min())\n    \n    # Normalize Worldwide_Gross\n    gross = df_movies['Worldwide_Gross']\n    norm_gross = (gross - gross.min()) / (gross.max() - gross.min())\n    \n    # Calculate 'critical-commercial success' score\n    score = norm_rating * norm_gross\n    \n    # Extract decade from Release_Date\n    def extract_decade(date_str):\n        if pd.isnull(date_str):\n            return np.nan\n        try:\n            year = int(str(date_str)[-4:])\n            return f\"{year // 10 * 10}s\"\n        except:\n            return np.nan\n    \n    decade = df_movies['Release_Date'].apply(extract_decade)\n    \n    transformed_df = pd.DataFrame({\n        'Title': df_movies['Title'],\n        'Major_Genre': df_movies['Major_Genre'],\n        'Release_Date': df_movies['Release_Date'],\n        'Decade': decade,\n        'Avg_Rating': avg_rating,\n        'Norm_Rating': norm_rating,\n        'Worldwide_Gross': gross,\n        'Norm_Gross': norm_gross,\n        'Critical_Commercial_Score': score\n    })\n    return transformed_df\n```\n\n[CONCEPTS EXPLANATION]\n\n```json\n[\n    {  \n        \"field\": \"Norm_Rating, Norm_Gross\",  \n        \"explanation\": \"Normalized values that scale the original values between 0 and 1 using min-max normalization. Formula: -BSLASH-(-BSLASH-text{Normalized} = -BSLASH-frac{-BSLASH-text{Value} - -BSLASH-text{Min}}{-BSLASH-text{Max} - -BSLASH-text{Min}} -BSLASH-)\"  \n    },  \n    {  \n        \"field\": \"Critical_Commercial_Score\",  \n        \"explanation\": \"The critical-commercial success score combines **Norm_Rating** and **Norm_Gross** to represent a movie's critical acclaim and commercial performance. Formula: -BSLASH-(-BSLASH-text{Critical-BSLASH-_Commercial-BSLASH-_Score} = -BSLASH-text{Norm-BSLASH-_Rating} -BSLASH-times -BSLASH-text{Norm-BSLASH-_Gross} -BSLASH-)\"  \n    }\n]  \n'''\n\nclass CodeExplanationAgent(object):\n\n    def __init__(self, client, workspace):\n        self.client = client\n        self.workspace = workspace\n\n    def run(self, input_tables, code, n=1):\n\n        data_summary = generate_data_summary(input_tables, workspace=self.workspace, include_data_samples=True)\n\n        user_query = f\"[CONTEXT]\\n\\n{data_summary}\\n\\n[CODE]\\n\\nhere is the transformation code: {code}\\n\\n[EXPLANATION]\\n\"\n\n        logger.debug(user_query)\n        logger.info(f\"[CodeExplanationAgent] run start\")\n\n        messages = [{\"role\":\"system\", \"content\": SYSTEM_PROMPT},\n                    {\"role\":\"user\",\"content\": user_query}]\n        \n        response = self.client.get_completion(messages = messages)\n\n        candidates = []\n        for choice in response.choices:\n            \n            logger.debug(\"\\n=== Code explanation result ===>\\n\")\n            logger.debug(choice.message.content + \"\\n\")\n            \n            # Inline parsing of concepts section\n            response_content = choice.message.content\n            concepts = []\n\n            # Find CONCEPTS EXPLANATION section\n            concepts_start = response_content.find('[CONCEPTS EXPLANATION]')\n            if concepts_start != -1:\n                concepts_start += len('[CONCEPTS EXPLANATION]')\n                # Extract JSON from the concepts section\n                concepts_content = response_content[concepts_start:].strip()\n                try:\n                    raw_json_blocks = extract_code_from_gpt_response(concepts_content, \"json\")\n                    json_blocks = [json.loads(block) for block in raw_json_blocks]\n                except Exception as e:\n                    json_blocks = []\n\n                if json_blocks:\n                    concepts = json_blocks[0]\n            \n            # Build result\n            if concepts:\n                result = {\n                    'status': 'ok', \n                    'concepts': concepts,\n                }\n            else:\n                # No non-trivial concepts found — that's ok, return empty list\n                result = {'status': 'ok', 'concepts': []}\n            \n            # individual dialog for the agent\n            result['dialog'] = [*messages, {\"role\": choice.message.role, \"content\": choice.message.content}]\n            result['agent'] = 'CodeExplanationAgent'\n\n            candidates.append(result)\n\n        status = candidates[0].get('status', '?') if candidates else 'empty'\n        logger.info(f\"[CodeExplanationAgent] run done | status={status}\")\n        return candidates\n"
  },
  {
    "path": "py-src/data_formulator/agents/agent_data_clean_stream.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nfrom data_formulator.agents.agent_utils import extract_json_objects\nfrom data_formulator.agents.web_utils import download_html_content\n\nimport logging\nimport re\nimport json\nimport traceback\n\nlogger = logging.getLogger(__name__)\n\n\ndef parse_table_sections(text):\n    \"\"\"Parse [TABLE_START] to [TABLE_END] sections and extract metadata and content.\"\"\"\n    tables = []\n    \n    # Split by [TABLE_START] and process each section\n    sections = text.strip().split('[TABLE_START]')\n\n    print(sections)\n    \n    for i, section in enumerate(sections[1:], 1):  # Skip first empty section\n        \n        # Find the end of this table section\n        if '[TABLE_END]' not in section:\n            continue\n            \n        table_section = section.split('[TABLE_END]')[0]\n\n        metadata_index = table_section.find('[METADATA]')\n        content_index = table_section.find('[CONTENT]')\n        \n        # Extract metadata between [METADATA] and ```\n        if metadata_index != -1 and content_index != -1:\n            metadata_block = table_section[metadata_index + len('[METADATA]'):content_index]\n            metadata_json = extract_json_objects(metadata_block)[0]\n            \n        # Extract content between [CONTENT] and end\n        if content_index != -1:\n            content_block = table_section[content_index + len('[CONTENT]'):].strip()\n            \n            # Create table object\n            table = {\n                \"name\": metadata_json.get('name', 'unknown'),\n                \"context\": metadata_json.get('context', ''),\n                \"content\": {\n                    \"type\": metadata_json.get('type', 'csv'),\n                    \"value\": content_block\n                }\n            }\n            \n            tables.append(table)\n    \n    return tables\n\n\nSYSTEM_PROMPT = '''You are a data scientist to help user to generate, extract data from image, or clean a text input into a structured csv table. \n\nIf there are multiple tables in the raw data, you should extract them all.\nEach table can either be a csv block or a url (url of an image that you think contains data).\n- csv block: a string of csv content (if the content is already available from the input)\n- image url: link to an image that contains data\n\nBased on the raw data provided by the user, extract tables: \n- each extracted table should be wrapped in a section, its metadata is a json object describes its name and type in [METADATA] section.\n- if the table is a csv block, it should be wrapped in [CONTENT] tags. Do not wrap it in any other tags, just write plain csv content in the [CONTENT].\n- if the table is an image url, [CONTENT] should be the url.\n- when there are multiple tables, generate one table at a time.\n\nOutput only extract tables, no other text should be included. Format:\n\n[TABLE_START]\n\n[METADATA]\n\n```json\n{\n    \"name\": \"...\", // suggest a descriptive, meaningful but short name for this dataset, no more than 5 words, if there are duplicate names, add a suffix -1, -2, etc. (e.g., \"sales-2024\", \"us-customer-survey-2024\", \"seattle-weather-forecast\")\n    \"type\": \"csv\" | \"image_url\",\n    \"context\": \"...\" // a paragraph summarizing the original source document or image this table was extracted from. Include: what the document is about, its main topic, any relevant background, and what the table represents within that context. This summary will be used by downstream agents to understand the data, so be descriptive and informative. (around 50-100 words)\n}\n```\n\n[CONTENT]\n\n... // the csv block or image url, directly output the content, no other text should be included and don't wrap it in any other tags.\n\n[TABLE_END]\n\n**Important:**\n- NEVER make assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\n- NEVER create formulas that could be used to discriminate based on age. Ageism of any form (explicit and implicit) is strictly prohibited.\n\n**Multiple tables:**\n- if the raw data contains multiple tables, based on the user's instruction to decide which table to extract.\n- if the user doesn't specify which tables to extract, extract all tables.\n- if there are multiple tables yet they can be too large, only extract up to 200 rows for each table.\n\n**Instructions for creating csv blocks:**\n* the output should be a structured csv table: \n    - if the raw data is unstructured, structure it into a csv table. If the table is in other formats, transform it into a csv table.\n    - if the raw data contain other informations other than the table (e.g., title, subtitle, footer, summary, etc.), remove surrounding texts that does not belong to the table, so that the table conforms to csv format. \n    - if the raw data contains multiple levels of header, make it a flat table. It's ok to combine multiple levels of headers to form the new header to not lose information.\n    - the csv table should have the same number of cells for each line, according to the header. If there are some rows with missing values, patch them with empty values.\n    - if the header row misses some columns, add their corresponding column names. E.g., when the header doesn't have an index column, but every row has an index value, add the missing column header.\n* clean up messy column names:\n    - if the column name contains special characters like \"*\", \"?\", \"#\", \".\" remove them.\n* csv value format:\n    - if a column is number but some cells has annotations like \"*\" \"?\" or brackets, clean them up.\n    - if values of a column is all numbers but has units like ($, %, s), remove the unit in the value cells, convert them to number, note unit in the header of this column.\n    - you don't need to convert format of the cell.\n\n**Instructions for creating image url:**\n- based on the context provided in the prompt and raw input material, decide which url in the raw data may cotain the data we would like to extract (like an image contains structured data).\n\n**Instructions for generating synthetic data:**\n- NEVER generate data that has implicit bias as noted above, if that happens, neutralize the data.\n- If the user doesn't indicate how many rows to be generated, plan in generating a dataset with 20-30 rows depending on the content.\n\n**IMPORTANT:**\n- when the user provide an image and ask to extract data, you should extract data from the image into a csv block.\n- get all tables that contain structured data from the raw data, including the csv blocks and image urls.\n'''\n\n\nEXAMPLE = '''\nRank\tNOC\tGold\tSilver\tBronze\tTotal\n1\t South Korea\t5\t1\t1\t7\n2\t France*\t0\t1\t1\t2\n United States\t0\t1\t1\t2\n4\t China\t0\t1\t0\t1\n Germany\t0\t1\t0\t1\n6\t Mexico\t0\t0\t1\t1\n Turkey\t0\t0\t1\t1\nTotals (7 entries)\t5\t5\t5\t15\n'''\n\nclass DataCleanAgentStream(object):\n\n    def __init__(self, client):\n        self.client = client\n\n    def stream(self, prompt, artifacts=[], dialog=[]):\n        \"\"\"derive a new concept based on the raw input data\n        Args:\n            prompt (str): the prompt to the agent\n            artifacts (list): the artifacts to the agent of format \n            [{\"type\": \"image_url\", \"content\": ...}, {\"type\": \"web_url\", \"content\": ...}, ...]\n            dialog (list): the dialog history\n        Returns:\n            generator: the result of the agent\n        \"\"\"\n\n        content = []\n\n        for artifact in artifacts:\n            if artifact['type'] == 'image_url':\n                content.append({\n                    'type': 'image_url',\n                    'image_url': {\n                        \"url\": artifact['content'],\n                        \"detail\": \"high\"\n                    }\n                })\n            elif artifact['type'] == 'web_url':\n                try:\n                    content.append({\n                        'type': 'text',\n                        'text': f\"[HTML CONTENT]\\n\\n{download_html_content(artifact['content'])}\"\n                    })\n                except Exception as e:\n                    raise Exception('unable to download html from url ' + artifact['content'])\n        \n        content.append({\n            'type': 'text',\n            'text': f'''{prompt}'''\n        })\n\n        user_prompt = {\n            'role': 'user',\n            'content': content\n        }\n\n        logger.debug(user_prompt)\n        logger.info(f\"[DataCleanAgent] run start (streaming)\")\n\n        system_message = {\n            'role': 'system',\n            'content': [ {'type': 'text', 'text': SYSTEM_PROMPT}]\n        }\n\n        messages = [\n            system_message, \n            *[message for message in dialog if message['role'] != 'system'],\n            user_prompt\n        ]\n        \n        ###### the part that calls open_ai\n        stream = self.client.get_completion(messages = messages, stream=True)\n\n        accumulated_content = \"\"\n        \n        for part in stream:\n            if hasattr(part, 'choices') and len(part.choices) > 0:\n                delta = part.choices[0].delta\n                if hasattr(delta, 'content') and delta.content:\n                    accumulated_content += delta.content\n                    \n                    # Stream each character for real-time display as JSON\n                    yield delta.content\n        \n        # Parse the final content the same way as the non-streaming version\n        logger.debug(\"\\n=== Python Data Clean Agent Stream ===>\\n\")\n        logger.debug(accumulated_content + \"\\n\")\n\n        # Parse table sections from the accumulated content\n        tables = parse_table_sections(accumulated_content)\n\n        if len(tables) > 0:\n            # Use the same format as non-streaming version - return the parsed data directly\n            result = {\n                'status': 'ok', \n                'content': tables, \n            }\n        else:\n            result = {'status': 'other error', 'content': 'unable to extract tables from response'}\n\n        result['dialog'] = [*messages, {\"role\": \"assistant\", \"content\": accumulated_content}]\n        result['agent'] = 'DataCleanAgentStream'\n        logger.info(f\"[DataCleanAgent] run done | status={result.get('status', '?')}\")\n        \n        # add a newline to the beginning of the result to separate it from the previous result     \n        yield '\\n' + json.dumps(result) + '\\n'"
  },
  {
    "path": "py-src/data_formulator/agents/agent_data_load.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\n\nfrom data_formulator.agents.agent_utils import extract_json_objects, generate_data_summary\nfrom data_formulator.agents.semantic_types import (\n    generate_semantic_types_prompt,\n)\n\nimport logging\n\nlogger = logging.getLogger(__name__)\n\n\nSYSTEM_PROMPT = '''You are a data scientist to help user infer data types based off the table provided by the user.\nGiven a dataset provided by the user, \n1. suggest a descriptive name for the table if the table name is a generic name like table-6, the suggested name should best capture meaning of the table but also very concise.\n    - if the table already have a descriptive name provided in the bracket (...), use it; if the provided name is not descriptive, suggest a new name.\n    - format table name using '-' when it contains multiple words (e.g., \"income\", \"weather-seattle-atlanta\")\n    - the suggested table name should be similar to variable names that are very descriptive and concise, no more than 5 words.\n    - the suggested name should best be within 24 characters, be smart with abbreviations (yet still descriptive and follow common practices), when in doubt, use less words but less abbreviation.\n2. identify their type and semantic type\n3. provide a very short summary of the dataset.\n\nTypes to consider include: string, number, date\n\n''' + generate_semantic_types_prompt() + '''\n\nEnriched annotation fields (optional — provide when applicable):\n\n- \"intrinsic_domain\": [min, max] — the known scale bounds of the measurement instrument.\n    - Infer from data values and context: e.g., if a \"rating\" column has values 1-10, the domain is [1, 10]; if it's clearly a 5-star system, use [1, 5].\n    - For Percentage: [0, 100] if values are whole-number percentages, [0, 1] if fractional.\n    - For Correlation: always [-1, 1].\n    - Do NOT provide for open-ended measures like Revenue, Count, Quantity, Temperature, etc.\n    - Only provide when the scale bounds are clear from the data or domain knowledge.\n- \"unit\": a short unit string for physical/monetary quantities.\n    - Temperature: \"°C\", \"°F\", \"K\"\n    - Physical: \"kg\", \"km\", \"mph\", \"m²\", \"L\", etc.\n    - Currency: \"USD\", \"EUR\", \"¥\", etc.\n    - Duration: \"ms\", \"s\", \"min\", \"hr\"\n    - Only provide when the unit is clear from column name, data values, or context.\n\nSort order:\n\n- if the field is string type and is ordinal, provide the natural sort order of the fields here.\n    - examples: English month name, week name, range, etc.\n- when the natural sort order is alphabetical or there is not natural sort order, there is no need to generate sort_order, examples:\n    - Name, State, City, etc.\n\nCreate a json object function based off the [DATA] provided.\n\noutput should be in the format of:\n\n```json\n{\n    \"suggested_table_name\": ..., // the name of the table\n    \"fields\": {\n        \"field1\": {\"type\": ..., \"semantic_type\": ..., \"sort_order\": [...], \"intrinsic_domain\": [...], \"unit\": ...},\n        // replace field1 field2 with actual field names\n        // only include sort_order if the field is ordinal with inherent order\n        // only include intrinsic_domain if the field has a known bounded scale\n        // only include unit if the unit is clear from context\n        \"field2\": {\"type\": ..., \"semantic_type\": ...},\n        ...\n    },\n    \"data_summary\": ... // a short summary of the data (50-100 words), should capture the key characteristics of the data\n}\n```\n'''\n\nEXAMPLES = '''\n[DATA]\n\nHere are our datasets, here are their field summaries and samples:\n\ntable_0 (table_0) fields:\n\tname -- type: object, values: Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, District of Columbia, Florida, ..., South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia, Wisconsin, Wyoming\n\tregion -- type: object, values: midwest, northeast, other, south, west\n\tstate_id -- type: int64, values: 1, 2, 4, 5, 6, 8, 9, 10, 11, 12, ..., 47, 48, 49, 50, 51, 53, 54, 55, 56, 72\n\tpct -- type: float64, values: 0.006, 0.008, 0.02, 0.021, 0.022, 0.024, 0.025, 0.026000000000000002, 0.027, 0.028, ..., 0.192, 0.193, 0.194, 0.196, 0.197, 0.199, 0.2, 0.201, 0.213, 0.289\n\ttotal -- type: int64, values: 222679, 250875, 256563, 268015, 291468, 326086, 337245, 405504, 410347, 449296, ..., 3522934, 3721358, 3815532, 4551497, 4763457, 4945140, 7168502, 7214163, 8965352, 12581722\n\tgroup -- type: object, values: 10000 to 14999, 100000 to 149999, 15000 to 24999, 150000 to 199999, 200000+, 25000 to 34999, 35000 to 49999, 50000 to 74999, 75000 to 99999, <10000\n\ntable_0 (table_0) sample:\n\n```\n|name|region|state_id|pct|total|group\n0|Alabama|south|1|0.10200000000000001|1837292|<10000\n1|Alabama|south|1|0.07200000000000001|1837292|10000 to 14999\n2|Alabama|south|1|0.13|1837292|15000 to 24999\n3|Alabama|south|1|0.115|1837292|25000 to 34999\n4|Alabama|south|1|0.14300000000000002|1837292|35000 to 49999\n......\n```\n\n[OUTPUT]\n\n```json\n{\n    \"suggested_table_name\": \"income\",\n    \"fields\": {\n        \"name\": {\"type\": \"string\", \"semantic_type\": \"State\"},\n        \"region\": {\"type\": \"string\", \"semantic_type\": \"Region\", \"sort_order\": [\"northeast\", \"midwest\", \"south\", \"west\", \"other\"]},\n        \"state_id\": {\"type\": \"number\", \"semantic_type\": \"ID\"},\n        \"pct\": {\"type\": \"number\", \"semantic_type\": \"Percentage\", \"intrinsic_domain\": [0, 1]},\n        \"total\": {\"type\": \"number\", \"semantic_type\": \"Count\"},\n        \"group\": {\"type\": \"string\", \"semantic_type\": \"Range\", \"sort_order\": [\"<10000\", \"10000 to 14999\", \"15000 to 24999\", \"25000 to 34999\", \"35000 to 49999\", \"50000 to 74999\", \"75000 to 99999\", \"100000 to 149999\", \"150000 to 199999\", \"200000+\"]}\n    },\n    \"data_summary\": \"Income distribution across US states, with percentage and count by income bracket.\"\n}\n```\n\n[DATA]\n\nHere are our datasets, here are their field summaries and samples:\n\ntable_0 (weather_seattle_atlanta) fields:\n\tDate -- type: object, values: 1/1/2020, 1/10/2020, 1/11/2020, ..., 9/6/2020, 9/7/2020, 9/8/2020, 9/9/2020\n\tCity -- type: object, values: Atlanta, Seattle\n\tTemperature -- type: int64, values: 30, 31, 32, ..., 83, 84, 85, 86\n\ntable_0 (weather_seattle_atlanta) sample:\n```\n|Date|City|Temperature\n0|1/1/2020|Seattle|51\n1|1/1/2020|Atlanta|45\n2|1/2/2020|Seattle|45\n3|1/2/2020|Atlanta|47\n4|1/3/2020|Seattle|48\n......\n```\n\n[OUTPUT]\n\n```json\n{  \n    \"suggested_table_name\": \"weather\",\n    \"fields\": {  \n        \"Date\": {  \n            \"type\": \"string\",  \n            \"semantic_type\": \"Date\"  \n        },  \n        \"City\": {  \n            \"type\": \"string\",  \n            \"semantic_type\": \"City\"  \n        },  \n        \"Temperature\": {  \n            \"type\": \"number\",  \n            \"semantic_type\": \"Temperature\",  \n            \"unit\": \"°F\"  \n        }  \n    },  \n    \"data_summary\": \"Daily temperature data comparing Seattle and Atlanta throughout 2020, recording daily temperature measurements for each city from January to September.\"\n}\n```'''\n\nclass DataLoadAgent(object):\n\n    def __init__(self, client, workspace):\n        self.client = client\n        self.workspace = workspace\n\n    def run(self, input_data, n=1):\n\n        # Always use the unified generate_data_summary approach\n        # For virtual tables, workspace will find them; for in-memory tables, it uses rows\n        data_summary = generate_data_summary(\n            [input_data],\n            workspace=self.workspace,\n            include_data_samples=True,\n            field_sample_size=30\n        )\n\n        user_query = f\"[DATA]\\n\\n{data_summary}\\n\\n[OUTPUT]\"\n\n        logger.debug(user_query)\n        logger.info(f\"[DataLoadAgent] run start\")\n\n        messages = [{\"role\":\"system\", \"content\": SYSTEM_PROMPT},\n                    {\"role\":\"user\",\"content\": user_query}]\n        \n        response = self.client.get_completion(messages = messages)\n\n        candidates = []\n        for choice in response.choices:\n            \n            logger.debug(\"\\n=== Data load result ===>\\n\")\n            logger.debug(choice.message.content + \"\\n\")\n            \n            json_blocks = extract_json_objects(choice.message.content + \"\\n\")\n            logger.debug(json_blocks)\n            \n            if len(json_blocks) > 0:\n                result = {'status': 'ok', 'content': json_blocks[0]}\n            else:\n                try:\n                    json_block = json.loads(choice.message.content + \"\\n\")\n                    result = {'status': 'ok', 'content': json_block}\n                except:\n                    result = {'status': 'other error', 'content': 'unable to extract VegaLite script from response'}\n            \n            # individual dialog for the agent\n            result['dialog'] = [*messages, {\"role\": choice.message.role, \"content\": choice.message.content}]\n            result['agent'] = 'DataLoadAgent'\n\n            candidates.append(result)\n\n        status = candidates[0].get('status', '?') if candidates else 'empty'\n        logger.info(f\"[DataLoadAgent] run done | status={status}\")\n        return candidates"
  },
  {
    "path": "py-src/data_formulator/agents/agent_data_rec.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\nimport time\n\nfrom data_formulator.agents.agent_utils import extract_json_objects, extract_code_from_gpt_response, generate_data_summary\n\nimport traceback\nimport pandas as pd\n\nimport logging\n\nlogger = logging.getLogger(__name__)\n\n# =============================================================================\n# Shared prompt sections  (imported by DataTransformationAgent)\n# =============================================================================\n\nSHARED_ENVIRONMENT = '''**About the execution environment:**\n- You can use BOTH DuckDB SQL and pandas operations in the same script\n- The script will run in the workspace data directory (all data files are in the current directory)\n- Each table in [CONTEXT] has a **file path** (e.g., `student_exam.parquet`, `sales.csv`). Use EXACTLY that path to load data:\n    - `.parquet`: `pd.read_parquet('file.parquet')` or DuckDB `read_parquet('file.parquet')`\n    - `.csv`: `pd.read_csv('file.csv')` or DuckDB `read_csv_auto('file.csv')`\n    - `.json`: `pd.read_json('file.json')`\n    - `.xlsx`/`.xls`: `pd.read_excel('file.xlsx')`\n    - `.txt`: `pd.read_csv('file.txt', sep='\\\\t')`\n- **IMPORTANT:** Use the exact filename from the context — do NOT change the file extension or assume all files are parquet.\n- **Allowed libraries:** pandas, numpy, duckdb, math, datetime, json, statistics, collections, re, sklearn, scipy, random, itertools, functools, operator, time\n- **Not allowed:** matplotlib, plotly, seaborn, requests, subprocess, os, sys, io, or any other library not listed above.\n- File system access (open, write) and network access are also forbidden.\n\n**When to use DuckDB vs pandas:**\n- **Prefer plain pandas** for most tasks — it's simpler and more readable.\n- Only use DuckDB when the dataset is very large and you need efficient SQL aggregations, filtering, joins, or window functions.\n- You can combine both: DuckDB for initial loading/filtering on large files, then pandas for complex operations.\n\n**Code structure:** standalone script (no function wrapper), imports at top, assign final result to a variable (specified in JSON).'''\n\n\nSHARED_SEMANTIC_TYPE_REFERENCE = '''**[SEMANTIC TYPE REFERENCE]**\n\nChoose the most specific type that fits. Only annotate fields used in chart encodings.\n\n| Category | Types |\n|---|---|\n| Temporal | DateTime, Date, Time, Timestamp, Year, Quarter, Month, Week, Day, Hour, YearMonth, YearQuarter, YearWeek, Decade, Duration |\n| Monetary measures | Amount, Price, Revenue, Cost |\n| Physical measures | Quantity, Temperature |\n| Proportion | Percentage |\n| Signed/diverging | Profit, PercentageChange, Sentiment, Correlation |\n| Generic measures | Count, Number |\n| Discrete numeric | Rank, Score, Rating, Index |\n| Identifier | ID |\n| Geographic | Latitude, Longitude, Country, State, City, Region, Address, ZipCode |\n| Entity names | PersonName, Company, Product, Category, Name |\n| Coded categorical | Status, Type, Boolean, Direction |\n| Binned ranges | Range, AgeGroup |\n| Fallback | String, Unknown |\n\nKey guidelines:\n- Use **Revenue/Cost** for summed monetary totals, **Price** for per-unit prices, **Profit** for values that can be negative.\n- Use **Temperature** (not Quantity) for temperature — it has special diverging behavior.\n- Use **Year** (not Number) for columns like \"year\" with values 2020, 2021.'''\n\n\nSHARED_CHART_REFERENCE = '''**[CHART TYPE REFERENCE]**\n\n| chart_type | encodings | config |\n|---|---|---|\n| Scatter Plot | x, y, color, size, facet | opacity (0.1–1.0) |\n| Regression | x, y, color, size, facet | regressionMethod (\"linear\",\"log\",\"exp\",\"pow\",\"quad\",\"poly\"), polyOrder (2–10) |\n| Bar Chart | x, y, color, facet | — |\n| Grouped Bar Chart | x, y, group, facet | — |\n| Line Chart | x, y, color, strokeDash, facet | interpolate (\"linear\",\"monotone\",\"step\") |\n| Area Chart | x, y, color, facet | — |\n| Heatmap | x, y, color, facet | colorScheme (\"viridis\",\"blues\",\"reds\",\"oranges\",\"greens\",\"blueorange\",\"redblue\") |\n| Boxplot | x, y, color, facet | — |\n| Pie Chart | size, color, facet | innerRadius (0–100; 0=pie, >0=donut) |\n| Lollipop Chart | x, y, color, facet | — |\n| Waterfall Chart | x, y, color, facet | — |\n| Candlestick Chart | x, open, high, low, close, facet | — |\n| World Map | longitude, latitude, color, size | projection (\"mercator\",\"equalEarth\",\"naturalEarth1\",\"orthographic\"), projectionCenter ([lon,lat]) |\n| US Map | longitude, latitude, color, size | — (fixed albersUsa) |\n\n**Critical chart rules:**\n- **Scatter Plot**: good default for relationships/correlations. Use config opacity (0.1–1.0) for dense data instead of encoding opacity.\n- **Regression**: automatically overlays a trend line — do NOT compute regression in Python. Use color to get separate trend lines per group.\n- **Bar Chart**: x=categorical, y=quantitative (vertical bars). Swap x↔y for horizontal bars. For histograms/distributions, bin the data in the Python step. Same-x rows are auto-stacked.\n- **Grouped Bar Chart**: use the group channel (not color) for side-by-side bars.\n- **Line Chart**: use strokeDash to differentiate line styles (e.g. actual vs forecast).\n- **Pie Chart**: use \"size\" channel (not \"theta\") for the wedge values. Avoid when >7–8 categories.\n- **Lollipop Chart**: like bar but with dot+line — cleaner for ranked comparisons.\n- **Waterfall Chart**: cumulative gain/loss — each bar starts where the previous ended.\n- **Candlestick Chart**: OHLC financial data — requires open, high, low, close columns.\n- **World Map/US Map**: use \"longitude\"/\"latitude\" as channel names, not \"x\"/\"y\".\n- **facet**: available for all chart types; use a categorical field with small cardinality.\n- All fields in \"encodings\" must also appear in \"output_fields\". Typically use 2–3 channels (x, y, color/size).'''\n\n\nSHARED_STATISTICAL_ANALYSIS = '''**Statistical analysis guide:**\n- **Regression**: use chart_type \"Regression\" — the trend line is automatic, do NOT compute regression values in Python code. Configure method via `{\"regressionMethod\": \"linear\"}` (options: \"linear\", \"log\", \"exp\", \"pow\", \"quad\", \"poly\"; for poly add `{\"polyOrder\": 3}`).\n- **Forecasting**: compute predicted future values in Python. Use Line Chart with strokeDash to distinguish actual vs forecast, and color for series grouping.\n- **Clustering**: compute cluster assignments in Python. Output [x, y, cluster_id]. Use Scatter Plot with color → cluster_id.'''\n\n\nSHARED_DUCKDB_NOTES = '''**DuckDB notes:**\n- Escape single quotes with '' (not \\\\')\n- No Unicode escapes (\\\\u0400); use character ranges directly: [а-яА-Я]\n- Cast date columns explicitly: `CAST(col AS DATE)`, `CAST(col AS TIMESTAMP)`\n- For complex datetime operations, load data first then use pandas datetime functions'''\n\n\n# =============================================================================\n# DataRecAgent system prompt\n# =============================================================================\n\nSYSTEM_PROMPT = f'''You are a data scientist who recommends data and visualizations.\nGiven [CONTEXT] (dataset summaries) and [GOAL] (user intent), recommend a transformed dataset and visualization, then write a Python script to produce it.\n\n{SHARED_ENVIRONMENT}\n\nYou will produce two outputs: a JSON spec (```json```) and a Python script (```python```). No extra text.\n\n**Step 1: JSON spec** — infer user intent and recommend a visualization.\n\n```json\n{{{{\n    \"display_instruction\": \"\", // short verb phrase (<12 words) capturing computation intent. Bold **column names** (semantic matches count). For follow-ups, describe only the new part.\n    \"input_tables\": [...],   // table names from [CONTEXT] to use. Table 1 is the currently viewed table — prioritize it.\n    \"output_fields\": [...],  // desired output fields (include intermediate fields)\n    \"chart\": {{{{\n        \"chart_type\": \"\",    // from [CHART TYPE REFERENCE]\n        \"encodings\": {{{{}}}},   // visual channels → output field names\n        \"config\": {{{{}}}}       // optional styling\n    }}}},\n    \"field_metadata\": {{{{     // semantic type for each encoding field\n        \"<field>\": \"Type\"    // from [SEMANTIC TYPE REFERENCE]\n    }}}},\n    \"output_variable\": \"\"   // descriptive snake_case name (e.g. \"sales_by_region\"), not \"result_df\"\n}}}}\n```\n\n**Data format rules:**\n- Output must be tidy (one field per visual channel, like VegaLite/ggplot2).\n- For multiple similar columns: reshape to long format (only same semantic type in one column).\n- For derived metrics: compute new fields (correlation, difference, profit, etc.).\n- Keep encodings to 2–3 channels (x, y, color/size). Add facet only when needed.\n\n{SHARED_SEMANTIC_TYPE_REFERENCE}\n\n{SHARED_CHART_REFERENCE}\n\n{SHARED_STATISTICAL_ANALYSIS}\n\n**Step 2: Python script** — transform input data to produce a DataFrame with all \"output_fields\". Keep it simple and readable.\n\n**Datetime handling:**\n- Year → number. Year-month / year-month-day → string (\"2020-01\" / \"2020-01-01\").\n- Hour alone → number. Hour:min or h:m:s → string. Never return raw datetime objects.\n\n{SHARED_DUCKDB_NOTES}'''\n\n\nclass DataRecAgent(object):\n\n    def __init__(self, client, workspace, system_prompt=None, agent_coding_rules=\"\", max_display_rows=10000):\n        self.client = client\n        self.workspace = workspace\n        self.max_display_rows = max_display_rows\n\n        # Incorporate agent coding rules into system prompt if provided\n        if system_prompt is not None:\n            self.system_prompt = system_prompt\n        else:\n            base_prompt = SYSTEM_PROMPT\n            if agent_coding_rules and agent_coding_rules.strip():\n                self.system_prompt = base_prompt + \"\\n\\n[AGENT CODING RULES]\\nPlease follow these rules when generating code. Note: if the user instruction conflicts with these rules, you should prioritize user instructions.\\n\\n\" + agent_coding_rules.strip()\n            else:\n                self.system_prompt = base_prompt\n\n    def process_gpt_response(self, input_tables, messages, response, t_llm=None):\n        \"\"\"Process GPT response to handle Python code execution\"\"\"\n        t_start = time.time()\n        t_exec_total = 0.0\n\n        if isinstance(response, Exception):\n            result = {'status': 'other error', 'content': str(response.body)}\n            return [result]\n\n        candidates = []\n        for choice in response.choices:\n\n            logger.debug(\"\\n=== Data recommendation result ===>\\n\")\n            logger.debug(choice.message.content + \"\\n\")\n\n            json_blocks = extract_json_objects(choice.message.content + \"\\n\")\n            # Find the first JSON dict (skip any arrays the model may have emitted)\n            refined_goal = None\n            for jb in json_blocks:\n                if isinstance(jb, dict):\n                    refined_goal = jb\n                    break\n            if refined_goal is None:\n                refined_goal = {'output_fields': [], 'chart': {'chart_type': \"\", 'encodings': {}, 'config': {}}, 'output_variable': 'result_df'}\n            output_variable = refined_goal.get('output_variable', 'result_df')\n\n            code_blocks = extract_code_from_gpt_response(choice.message.content + \"\\n\", \"python\")\n\n            if len(code_blocks) > 0:\n                code = code_blocks[-1]\n\n                try:\n                    from data_formulator.sandbox import create_sandbox\n\n                    # Get sandbox setting (with fallback for non-Flask contexts like MCP server)\n                    try:\n                        from flask import current_app\n                        sandbox_mode = current_app.config.get('CLI_ARGS', {}).get('sandbox', 'local')\n                    except (ImportError, RuntimeError):\n                        sandbox_mode = 'local'\n\n                    # Execute the Python script in the appropriate sandbox\n                    t_exec_start = time.time()\n                    sandbox = create_sandbox(sandbox_mode)\n                    execution_result = sandbox.run_python_code(\n                        code=code,\n                        workspace=self.workspace,\n                        output_variable=output_variable,\n                    )\n                    t_exec_total += time.time() - t_exec_start\n\n                    if execution_result['status'] == 'ok':\n                        full_df = execution_result['content']\n                        row_count = len(full_df)\n\n                        # Generate unique table name for workspace storage\n                        output_table_name = self.workspace.get_fresh_name(f\"d-{output_variable}\")\n\n                        # Write full result to workspace as parquet\n                        self.workspace.write_parquet(full_df, output_table_name)\n\n                        # Limit rows for response payload\n                        if row_count > self.max_display_rows:\n                            query_output = full_df.head(self.max_display_rows)\n                        else:\n                            query_output = full_df\n\n                        # Remove duplicate columns to avoid orient='records' error\n                        query_output = query_output.loc[:, ~query_output.columns.duplicated()]\n\n                        result = {\n                            \"status\": \"ok\",\n                            \"code\": code,\n                            \"content\": {\n                                'rows': json.loads(query_output.to_json(orient='records')),\n                                'virtual': {\n                                    'table_name': output_table_name,\n                                    'row_count': row_count\n                                }\n                            },\n                        }\n                    else:\n                        # Execution error\n                        error_message = execution_result.get('content', execution_result.get('error_message', 'Unknown error'))\n                        result = {\n                            'status': 'error',\n                            'code': code,\n                            'content': error_message\n                        }\n\n                except Exception as e:\n                    logger.warning('Error occurred during code execution:')\n                    error_message = traceback.format_exc()\n                    logger.warning(error_message)\n                    result = {'status': 'other error', 'code': code, 'content': f\"Unexpected error: {error_message}\"}\n            else:\n                result = {'status': 'error', 'code': \"\", 'content': \"No code block found in the response. The model is unable to generate code to complete the task.\"}\n\n            result['dialog'] = [*messages, {\"role\": choice.message.role, \"content\": choice.message.content}]\n            result['agent'] = 'DataRecAgent'\n            result['refined_goal'] = refined_goal\n            candidates.append(result)\n\n        logger.debug(\"=== Recommendation Candidates ===>\")\n        for candidate in candidates:\n            for key, value in candidate.items():\n                if key in ['dialog', 'content']:\n                    logger.debug(f\"##{key}:\\n{str(value)[:1000]}...\")\n                else:\n                    logger.debug(f\"## {key}:\\n{value}\")\n\n        t_total = time.time() - t_start\n        t_llm_val = t_llm or 0.0\n        t_misc = t_total - t_exec_total\n        logger.info(f\"[DataRecAgent] timing: llm={t_llm_val:.3f}s, exec={t_exec_total:.3f}s, misc={t_misc:.3f}s, total={t_total + t_llm_val:.3f}s\")\n        return candidates\n\n\n    def run(self, input_tables, description, n=1, prev_messages: list[dict] = []):\n        \"\"\"\n        Args:\n            input_tables: list[dict], each dict contains 'name' (table name in workspace) and 'rows'\n            description: str, the description of what the user wants\n            n: int, the number of candidates\n            prev_messages: list[dict], the previous messages\n        \"\"\"\n        table_names = [t.get('name', '?') for t in input_tables]\n        logger.info(f\"[DataRecAgent] run start | tables={table_names}\")\n\n        # Generate data summary with file references\n        data_summary = generate_data_summary(input_tables, workspace=self.workspace)\n\n        user_query = f\"[CONTEXT]\\n\\n{data_summary}\\n\\n[GOAL]\\n\\n{description}\"\n        if len(prev_messages) > 0:\n            user_query = f\"The user wants a new recommendation based off the following updated context and goal:\\n\\n[CONTEXT]\\n\\n{data_summary}\\n\\n[GOAL]\\n\\n{description}\"\n\n        logger.debug(user_query)\n\n        # Filter out system messages from prev_messages\n        filtered_prev_messages = [msg for msg in prev_messages if msg.get(\"role\") != \"system\"]\n\n        messages = [{\"role\":\"system\", \"content\": self.system_prompt},\n                    *filtered_prev_messages,\n                    {\"role\":\"user\",\"content\": user_query}]\n\n        t_llm_start = time.time()\n        response = self.client.get_completion(messages = messages)\n        t_llm = time.time() - t_llm_start\n\n        candidates = self.process_gpt_response(input_tables, messages, response, t_llm=t_llm)\n        status = candidates[0].get('status', '?') if candidates else 'empty'\n        logger.info(f\"[DataRecAgent] run done | status={status}\")\n        return candidates\n\n\n    def followup(self, input_tables, dialog, latest_data_sample, new_instruction: str, n=1):\n        \"\"\"\n        Followup recommendation based on previous dialog and new instruction.\n\n        Args:\n            input_tables: list of input tables\n            dialog: previous conversation history\n            latest_data_sample: sample of the latest transformation result\n            new_instruction: new user instruction for followup\n            n: number of candidates\n        \"\"\"\n        logger.debug(f\"GOAL: \\n\\n{new_instruction}\")\n        logger.info(f\"[DataRecAgent] followup start\")\n\n        # Format sample data\n        sample_data_str = pd.DataFrame(latest_data_sample).head(10).to_string() + '\\n......'\n\n        # Replace the old system prompt with the current one so that\n        # conversations continued from older threads pick up prompt changes.\n        updated_dialog = [{\"role\": \"system\", \"content\": self.system_prompt}, *dialog[1:]]\n\n        messages = [*updated_dialog,\n                    {\"role\":\"user\",\n                    \"content\": f\"This is the result from the latest transformation:\\n\\n{sample_data_str}\\n\\nUpdate the Python script above based on the following instruction:\\n\\n{new_instruction}\"}]\n\n        t_llm_start = time.time()\n        response = self.client.get_completion(messages = messages)\n        t_llm = time.time() - t_llm_start\n\n        return self.process_gpt_response(input_tables, messages, response, t_llm=t_llm)\n"
  },
  {
    "path": "py-src/data_formulator/agents/agent_data_transform.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\nimport time\n\nfrom data_formulator.agents.agent_utils import extract_json_objects, extract_code_from_gpt_response\nfrom data_formulator.agents.agent_data_rec import (\n    SHARED_ENVIRONMENT,\n    SHARED_SEMANTIC_TYPE_REFERENCE,\n    SHARED_CHART_REFERENCE,\n    SHARED_STATISTICAL_ANALYSIS,\n    SHARED_DUCKDB_NOTES,\n\n)\nimport pandas as pd\n\nimport logging\n\nlogger = logging.getLogger(__name__)\n\nSYSTEM_PROMPT = f'''You are a data scientist who transforms data for visualization.\nGiven [CONTEXT] (dataset summaries) and [GOAL] (user intent + chart spec), refine the goal and write a Python script to produce the transformed data.\n\nThe user's [GOAL] includes a \"chart\" object (chart_type, encodings, config) describing the desired visualization and a natural language \"goal\".\n\n{SHARED_ENVIRONMENT}\n\nYou will produce two outputs: a JSON spec (```json```) and a Python script (```python```). No extra text.\n\n**Step 1: JSON spec** — refine the user's goal and finalize the chart.\n\nCheck if the user's \"chart\" (chart_type + encodings) is sufficient for their \"goal\":\n- If encodings are sufficient, copy them.\n- If encodings are missing fields, add minimal fields needed (aim for ≤3 channels: x, y, color/size).\n- If encodings can be optimized, reorder for better visualization.\n- If the user says \"use B instead of A\" while A is in encodings, update accordingly.\n- For lat/lon data, use \"latitude\"/\"longitude\" as channel names, not \"x\"/\"y\".\n- The user's chart_type may not be in [CHART TYPE REFERENCE] (e.g., \"Radar Chart\", \"Bump Chart\"). Preserve it as-is and infer valid encodings from channel names in the input.\n\n```json\n{{{{\n    \"input_tables\": [...],       // table names from [CONTEXT]. Table 1 = currently viewed — prioritize it.\n    \"detailed_instruction\": \"\",  // elaborated user instruction with details\n    \"display_instruction\": \"\", // short verb phrase (<12 words) capturing computation intent. Bold **column names** (semantic matches count). For follow-ups, describe only the new part.\n    \"output_fields\": [...],      // desired output fields (include intermediate fields)\n    \"chart\": {{{{\n        \"chart_type\": \"\",        // from [CHART TYPE REFERENCE], or keep the user's chart_type as-is if not listed\n        \"encodings\": {{{{}}}},       // visual channels → output field names\n        \"config\": {{{{}}}}           // optional styling\n    }}}},\n    \"field_metadata\": {{{{         // semantic type for each encoding field\n        \"<field>\": \"Type\"        // from [SEMANTIC TYPE REFERENCE]\n    }}}},\n    \"output_variable\": \"\",       // descriptive snake_case name (e.g. \"sales_by_region\"), not \"result_df\"\n    \"reason\": \"\"                 // why this refinement is made\n}}}}\n```\n\n{SHARED_SEMANTIC_TYPE_REFERENCE}\n\n{SHARED_CHART_REFERENCE}\n\n{SHARED_STATISTICAL_ANALYSIS}\n\n**Step 2: Python script** — transform input data to produce a DataFrame with all \"output_fields\". Keep it simple and readable.\n\n**Datetime handling:**\n- Year → number. Year-month / year-month-day → string (\"2020-01\" / \"2020-01-01\").\n- Hour alone → number. Hour:min or h:m:s → string. Never return raw datetime objects.\n\n{SHARED_DUCKDB_NOTES}'''\n\n\nclass DataTransformationAgent(object):\n\n    def __init__(self, client, workspace, system_prompt=None, agent_coding_rules=\"\", max_display_rows=10000):\n        self.client = client\n        self.workspace = workspace\n        self.max_display_rows = max_display_rows\n\n        # Incorporate agent coding rules into system prompt if provided\n        if system_prompt is not None:\n            self.system_prompt = system_prompt\n        else:\n            base_prompt = SYSTEM_PROMPT\n            if agent_coding_rules and agent_coding_rules.strip():\n                self.system_prompt = base_prompt + \"\\n\\n[AGENT CODING RULES]\\nPlease follow these rules when generating code. Note: if the user instruction conflicts with these rules, you should prioritize user instructions.\\n\\n\" + agent_coding_rules.strip()\n            else:\n                self.system_prompt = base_prompt\n\n\n    def process_gpt_response(self, response, messages, t_llm=None):\n        \"\"\"Process GPT response to handle Python code execution\"\"\"\n        t_start = time.time()\n        t_exec_total = 0.0\n\n        if isinstance(response, Exception):\n            result = {'status': 'other error', 'content': str(response.body)}\n            return [result]\n\n        candidates = []\n        for choice in response.choices:\n            logger.debug(\"=== Python script result ===>\")\n            logger.debug(choice.message.content + \"\\n\")\n\n            json_blocks = extract_json_objects(choice.message.content + \"\\n\")\n            # Find the first JSON dict (skip any arrays the model may have emitted)\n            refined_goal = None\n            for jb in json_blocks:\n                if isinstance(jb, dict):\n                    refined_goal = jb\n                    break\n            if refined_goal is None:\n                refined_goal = {'chart': {'chart_type': '', 'encodings': {}, 'config': {}}, 'instruction': '', 'reason': '', 'output_variable': 'result_df'}\n            output_variable = refined_goal.get('output_variable', 'result_df')\n\n            code_blocks = extract_code_from_gpt_response(choice.message.content + \"\\n\", \"python\")\n\n            if len(code_blocks) > 0:\n                code = code_blocks[-1]\n\n                try:\n                    from data_formulator.sandbox import create_sandbox\n\n                    # Get sandbox setting (with fallback for non-Flask contexts like MCP server)\n                    try:\n                        from flask import current_app\n                        sandbox_mode = current_app.config.get('CLI_ARGS', {}).get('sandbox', 'local')\n                    except (ImportError, RuntimeError):\n                        sandbox_mode = 'local'\n\n                    # Execute the Python script in the appropriate sandbox\n                    t_exec_start = time.time()\n                    sandbox = create_sandbox(sandbox_mode)\n                    execution_result = sandbox.run_python_code(\n                        code=code,\n                        workspace=self.workspace,\n                        output_variable=output_variable,\n                    )\n                    t_exec_total += time.time() - t_exec_start\n\n                    if execution_result['status'] == 'ok':\n                        full_df = execution_result['content']\n                        row_count = len(full_df)\n\n                        # Generate unique table name for workspace storage\n                        output_table_name = self.workspace.get_fresh_name(f\"d-{output_variable}\")\n\n                        # Write full result to workspace as parquet\n                        self.workspace.write_parquet(full_df, output_table_name)\n\n                        # Limit rows for response payload\n                        if row_count > self.max_display_rows:\n                            query_output = full_df.head(self.max_display_rows)\n                        else:\n                            query_output = full_df\n\n                        # Remove duplicate columns to avoid orient='records' error\n                        query_output = query_output.loc[:, ~query_output.columns.duplicated()]\n\n                        result = {\n                            \"status\": \"ok\",\n                            \"code\": code,\n                            \"content\": {\n                                'rows': json.loads(query_output.to_json(orient='records')),\n                                'virtual': {\n                                    'table_name': output_table_name,\n                                    'row_count': row_count\n                                }\n                            },\n                        }\n                    else:\n                        # Execution error\n                        result = {\n                            'status': 'error',\n                            'code': code,\n                            'content': execution_result['content']\n                        }\n\n                except Exception as e:\n                    logger.warning('Error occurred during code execution:')\n                    logger.warning(f\"Error type: {type(e).__name__}, message: {str(e)}\")\n                    error_message = f\"An error occurred during code execution. Error type: {type(e).__name__}, message: {str(e)}\"\n                    result = {'status': 'error', 'code': code, 'content': error_message}\n\n            else:\n                result = {'status': 'error', 'code': \"\", 'content': \"No code block found in the response. The model is unable to generate code to complete the task.\"}\n\n            result['dialog'] = [*messages, {\"role\": choice.message.role, \"content\": choice.message.content}]\n            result['agent'] = 'DataTransformationAgent'\n            result['refined_goal'] = refined_goal\n            candidates.append(result)\n\n        logger.debug(\"=== Transform Candidates ===>\")\n        for candidate in candidates:\n            for key, value in candidate.items():\n                if key in ['dialog', 'content']:\n                    logger.debug(f\"##{key}:\\n{str(value)[:1000]}...\")\n                else:\n                    logger.debug(f\"## {key}:\\n{value}\")\n\n        t_total = time.time() - t_start\n        t_llm_val = t_llm or 0.0\n        t_misc = t_total - t_exec_total\n        logger.info(f\"[DataTransformAgent] timing: llm={t_llm_val:.3f}s, exec={t_exec_total:.3f}s, misc={t_misc:.3f}s, total={t_total + t_llm_val:.3f}s\")\n        return candidates\n\n\n    def run(self, input_tables, description, prev_messages: list[dict] = [], n=1,\n             current_visualization=None, expected_visualization=None):\n        \"\"\"Args:\n            input_tables: list[dict], each dict contains 'name' (table name in workspace)\n            description: str, the description of the data transformation\n            prev_messages: list[dict], the previous messages\n            n: int, the number of candidates\n            current_visualization: dict or None, contains chart_spec and optional chart_image for complete charts\n            expected_visualization: dict or None, contains chart_spec for incomplete charts\n        \"\"\"\n        table_names = [t.get('name', '?') for t in input_tables]\n        logger.info(f\"[DataTransformAgent] run start | tables={table_names}\")\n\n        # Generate data summary with file references\n        from data_formulator.agents.agent_utils import generate_data_summary\n        data_summary = generate_data_summary(input_tables, workspace=self.workspace)\n\n        # Build visualization context section\n        vis_section = \"\"\n        if current_visualization:\n            vis_section = f\"\\n\\n[CURRENT VISUALIZATION] This is the current visualization the user has:\\n\\n{json.dumps(current_visualization.get('chart_spec', {}), indent=4)}\"\n        elif expected_visualization:\n            vis_section = f\"\\n\\n[EXPECTED VISUALIZATION] This is the visualization expected by the user:\\n\\n{json.dumps(expected_visualization.get('chart_spec', {}), indent=4)}\"\n\n        # Order: context → visualization → goal\n        if len(prev_messages) > 0:\n            user_query = f\"The user wants a new transformation based off the following updated context and goal:\\n\\n[CONTEXT]\\n\\n{data_summary}{vis_section}\\n\\n[GOAL]\\n\\n{description}\"\n        else:\n            user_query = f\"[CONTEXT]\\n\\n{data_summary}{vis_section}\\n\\n[GOAL]\\n\\n{description}\"\n\n        logger.debug(user_query)\n\n        # Filter out system messages from prev_messages\n        filtered_prev_messages = [msg for msg in prev_messages if msg.get(\"role\") != \"system\"]\n\n        # Build user message content: include chart image if available\n        chart_image = current_visualization.get('chart_image') if current_visualization else None\n        try:\n            if chart_image:\n                user_content = [\n                    {\"type\": \"text\", \"text\": user_query},\n                    {\"type\": \"image_url\", \"image_url\": {\"url\": chart_image, \"detail\": \"high\"}}\n                ]\n            else:\n                user_content = user_query\n\n            messages = [{\"role\":\"system\", \"content\": self.system_prompt},\n                        *filtered_prev_messages,\n                        {\"role\":\"user\",\"content\": user_content}]\n\n            t_llm_start = time.time()\n            response = self.client.get_completion(messages = messages)\n            t_llm = time.time() - t_llm_start\n        except Exception as e:\n            # Fallback to text-only if model doesn't support images\n            logger.warning(f\"Image-based completion failed, falling back to text-only: {e}\")\n            messages = [{\"role\":\"system\", \"content\": self.system_prompt},\n                        *filtered_prev_messages,\n                        {\"role\":\"user\",\"content\": user_query}]\n            t_llm_start = time.time()\n            response = self.client.get_completion(messages = messages)\n            t_llm = time.time() - t_llm_start\n\n        candidates = self.process_gpt_response(response, messages, t_llm=t_llm)\n        status = candidates[0].get('status', '?') if candidates else 'empty'\n        logger.info(f\"[DataTransformAgent] run done | status={status}\")\n        return candidates\n\n\n    def followup(self, input_tables, dialog, latest_data_sample, new_instruction: str, n=1,\n                 current_visualization=None, expected_visualization=None):\n        \"\"\"\n        Followup transformation based on previous dialog and new instruction.\n\n        Args:\n            input_tables: list of input tables\n            dialog: previous conversation history\n            latest_data_sample: sample of the latest transformation result\n            new_instruction: new user instruction for followup\n            n: number of candidates\n            current_visualization: dict or None, contains chart_spec and optional chart_image for complete charts\n            expected_visualization: dict or None, contains chart_spec for incomplete charts\n        \"\"\"\n        if not new_instruction or not new_instruction.strip():\n            new_instruction = \"Update the transformation based on the updated visualization context.\"\n\n        logger.debug(f\"GOAL: \\n\\n{new_instruction}\")\n        logger.info(f\"[DataTransformAgent] followup start\")\n\n        updated_dialog = [{\"role\":\"system\", \"content\": self.system_prompt}, *dialog[1:]]\n\n        # Format sample data\n        sample_data_str = pd.DataFrame(latest_data_sample).head(10).to_string() + '\\n......'\n\n        # Build visualization context section\n        vis_section = \"\"\n        if current_visualization:\n            vis_section = f\"\\n\\n[CURRENT VISUALIZATION] This is the current visualization the user has:\\n\\n{json.dumps(current_visualization.get('chart_spec', {}), indent=4)}\"\n        elif expected_visualization:\n            vis_section = f\"\\n\\n[EXPECTED VISUALIZATION] This is the visualization expected by the user:\\n\\n{json.dumps(expected_visualization.get('chart_spec', {}), indent=4)}\"\n\n        # Order: data sample → visualization → instruction\n        followup_text = f\"This is the result from the latest transformation:\\n\\n{sample_data_str}{vis_section}\\n\\nUpdate the Python script above based on the following instruction:\\n\\n{new_instruction}\"\n\n        logger.debug(followup_text)\n\n        # Build user message content: include chart image if available\n        chart_image = current_visualization.get('chart_image') if current_visualization else None\n        try:\n            if chart_image:\n                user_content = [\n                    {\"type\": \"text\", \"text\": followup_text},\n                    {\"type\": \"image_url\", \"image_url\": {\"url\": chart_image, \"detail\": \"high\"}}\n                ]\n            else:\n                user_content = followup_text\n\n            messages = [*updated_dialog, {\"role\":\"user\", \"content\": user_content}]\n\n            t_llm_start = time.time()\n            response = self.client.get_completion(messages = messages)\n            t_llm = time.time() - t_llm_start\n        except Exception as e:\n            # Fallback to text-only if model doesn't support images\n            logger.warning(f\"Image-based completion failed, falling back to text-only: {e}\")\n            messages = [*updated_dialog, {\"role\":\"user\", \"content\": followup_text}]\n            t_llm_start = time.time()\n            response = self.client.get_completion(messages = messages)\n            t_llm = time.time() - t_llm_start\n\n        candidates = self.process_gpt_response(response, messages, t_llm=t_llm)\n        status = candidates[0].get('status', 'unknown') if candidates else 'empty'\n        logger.info(f\"[DataTransformAgent] followup done | status={status}\")\n        return candidates\n"
  },
  {
    "path": "py-src/data_formulator/agents/agent_interactive_explore.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\nimport logging\nimport pandas as pd\n\nfrom data_formulator.agents.agent_utils import extract_json_objects, generate_data_summary\n\nlogger = logging.getLogger(__name__)\n\nSYSTEM_PROMPT = '''You are a data exploration expert who suggests interesting questions to help users explore their datasets.\n\nThis prompt contains the following sections:\n- [DATASETS] section: available datasets the user is working with.\n- [EXPLORATION THREAD] section (optional): sequence of datasets that have been explored in the order they were created, and what questions are asked to create them. These tables are all created from tables in the [DATASETS] section.\n- [CURRENT DATA] section (optional): latest data sample the user is viewing, and the visualization they are looking at at the moment.\n- [START QUESTION] section (optional): start question from previous exploration steps for context\n\nYour task is to suggest 4 exploration questions (unless the user explicitly asks for the number of questions), that users can follow to gain insights from their data.\nWhen the exploration context is provided, make your suggestion based on the context as well as the original datasets; otherwise leverage the original datasets to suggest questions.\n\nGuidelines for question suggestions:\n1. Suggest interesting analytical questions that can uncover new insights from the data.\n2. Use a diverse language style to display the questions (can be questions, statements etc).\n3. If there are multiple datasets in a thread, consider relationships between them.\n4. CONCISENESS: the questions should be concise and to the point\n5. QUESTION: the question should be a new question based on the exploration thread:\n    - if no exploration thread is provided, start with a high-level overview question that directly visualizes the data to give the user a sense of the data.\n    - either a followup question, or a new question that is related to the exploration thread\n        - if the current data is rich, you can ask a followup question to further explore the dataset;\n        - if the current data is already specialized to answer the previous question, you can ask a new question that is related to the thread but not related to the previous question in the thread, leverage earlier exploration data to ask questions that can expand the exploration horizon\n    - do not repeat questions that have already been explored in the thread\n    - do not suggest questions that are not related to the thread (e.g. questions that are completely unrelated to the exploration direction in the thread)\n    - do not naively follow up if the question is already too low-level when previous iterations have already come into a small subset of the data (suggest new related areas related to the metric / attributes etc)\n    - leverage other datasets in the [DATASETS] section to suggest questions that are related to the exploration thread.\n6. DIVERSITY: the questions should be diverse in difficulty (easy / medium / hard) and the four questions should cover different aspects of the data analysis to expand the user's horizon\n    - simple questions should be short -- single sentence exploratory questions\n    - medium questions can be 1-2 sentences exploratory questions\n    - hard questions should introduce some new analysis concept but still make it concise\n    - you should include both types of questions:\n        - questions that deepdive from the provided data to further refine the exploration (zoom-in).\n        - questions that branch out from the provided data to explore new related directions (zoom-out).\n    - if suitable, suggest a question about statistical analysis: forecasting, regression, or clustering.\n7. VISUALIZATION: each question should be visualizable with a chart.\n8. FORMATTING: for each question, include a 'goal' that concisely summarizes the essence of the question. \n    - The goal should all be a short single sentence (<10 words).\n    - It should capture the key computation and exploration direction of the question (do not omit any information that may lead to ambiguity), but also keep it concise.\n    - Meaning of the 'goal' should be clear that the user won't misunderstand the actual question descibed in 'text'.\n    - include the **bold** keywords for the attributes / metrics that are important to the question, especially when the goal mentions fields / metrics in the original dataset (don't have to be exact match)\n    - include 'difficulty' to indicate the difficulty of the question, it should be one of 'easy', 'medium', 'hard'\n    - include a 'tag' to describe the type of the question.\n    \nOutput should be a list of json objects in the following format, each line should be a json object representing a question, starting with 'data:':\n\nFormat:\n\ndata: {\"type\": \"question\", \"text\": ..., \"goal\": ..., \"difficulty\": ..., \"tag\": ...} \ndata: {\"type\": \"question\", \"text\": ..., \"goal\": ..., \"difficulty\": ..., \"tag\": ...} \n... // more questions\n'''\n\nSYSTEM_PROMPT_AGENT = '''You are a data exploration expert to help users explore their datasets.\n\nThis prompt contains the following sections:\n- [DATASETS] section: available datasets the user is working with.\n- [EXPLORATION THREAD] section (optional): sequence of datasets that have been explored in the order they were created, and what questions are asked to create them. These tables are all created from tables in the [DATASETS] section.\n- [CURRENT DATA] section (optional): latest data sample the user is viewing, and the visualization they are looking at at the moment.\n- [START QUESTION] section (optional): start question from previous exploration steps for context\n\nGiven a dataset (or a thread of datasets that have been explored), your task is to suggest 4 exploration questions (unless the user explicitly asks for the number of questions), that users can follow to gain insights from their data.\nWhen the exploration context is provided, make your suggestion based on the context as well as the original datasets; otherwise leverage the original datasets to suggest questions.\n\nGuidelines for question suggestions:\n1. Suggest a list of question_groups of interesting analytical questions that can uncover new insights from the data.\n2. Use a diverse language style to display the questions (can be questions, statements etc)\n3. If there are multiple datasets in a thread, consider relationships between them\n4. CONCISENESS: the questions should be concise and to the point\n5. QUESTION GROUP GENERATION: \n    - different questions groups should cover different aspects of the data analysis for user to choose from.\n    - each question_group is a sequence of 'questions' that builds on top of each other to answer the user's goal.\n    - each question group should have a difficulty level (easy / medium / hard),\n        - simple questions should be short -- single sentence exploratory questions\n        - medium questions can be 1-2 sentences exploratory questions\n        - hard questions should introduce some new analysis concept but still make it concise\n    - if suitable, include a group of questions that are related to statistical analysis: forecasting, regression, or clustering.\n6. QUESTIONS WITHIN A QUESTION GROUP:\n    - if the user doesn't provide an exploration thread, start with a high-level overview question that directly visualizes the data to give the user a sense of the data.\n    - raise new questions that are related to the user's goal, do not repeat questions that have already been explored in the context provided to you.\n    - if the user provides a start question, suggested questions should be related to the start question.\n    - the questions should progressively dive deeper into the data, building on top of the previous question.\n        - start of the question should provide an overview of the data in the direction going to be explored.\n        - followup questions should refine the previous question, introducing refined analysis to deep dive into the data (e.g., updated computation, filtering, different grouping, etc.)\n        - don't jump too far from the previous question so that readers can understand the flow of the questions.\n    - every question should be answerable with a visualization.\n7. FORMATTING: \n    - include \"questions\" in the question group:\n        - each question group should have 2-4 questions (or as directed by the user).\n    - For each question group, include a 'goal' that summarizes the goal of the question group. \n        - The goal should all be a short single sentence (<12 words).\n        - Meaning of the 'goal' should be clear that the user won't misunderstand the actual question descibed in 'text'.\n        - It should capture the key computation and exploration direction of the question (do not omit any information that may lead to ambiguity), but also keep it concise.\n        - include the **bold** keywords for the attributes / metrics that are important to the question, especially when the goal mentions fields / metrics in the original dataset (don't have to be exact match)\n    - include 'difficulty' to indicate the difficulty of the question, it should be one of 'easy', 'medium', 'hard'\n\nOutput should be a list of json objects in the following format, each line should be a json object representing a question group, starting with 'data: ':\n\nFormat:\n\ndata: {\"questions\": [...], \"goal\": ..., \"difficulty\": ...} \ndata: {\"questions\": [...], \"goal\": ..., \"difficulty\": ...} \n... // more question groups\n'''\n\nclass InteractiveExploreAgent(object):\n\n    def __init__(self, client, workspace, agent_exploration_rules=\"\"):\n        self.client = client\n        self.agent_exploration_rules = agent_exploration_rules\n        self.workspace = workspace  # when set (SQL/datalake mode), use parquet tables for summary\n\n    def run(self, input_tables, start_question=None, exploration_thread=None, \n                  current_data_sample=None, current_chart=None, mode='interactive'):\n        \"\"\"\n        Suggest exploration questions for a dataset or exploration thread.\n        \n        Args:\n            input_tables: List of dataset objects with name, rows, description\n            start_question: Optional start question from previous exploration steps for context\n            exploration_thread: Optional list of tables from previous exploration steps for context\n            current_data_sample: Optional data sample from previous exploration steps for context (it should be a json object)\n            current_chart: Optional chart object from previous exploration steps for context (it should be an image in data:image/png format)\n            mode: Optional mode of exploration question: 'interactive' or 'agent'\n        Returns:\n            List of candidate results with suggested exploration questions\n        \"\"\"\n        \n        # Generate data summary\n        data_summary = generate_data_summary(input_tables, self.workspace)\n        \n        # Build context including exploration thread if available\n        context = f\"[DATASETS] These are the datasets the user is working with:\\n\\n{data_summary}\"\n        \n        if exploration_thread:\n            thread_summary = generate_data_summary(\n                [{\n                    'name': table.get('name', f'Table {i}'), \n                    'rows': table.get('rows', []), \n                    'attached_metadata': table.get('description', ''),\n                } for i, table in enumerate(exploration_thread, 1)],\n                self.workspace,\n                table_name_prefix=\"Thread Table\"\n            )\n            context += f\"\\n\\n[EXPLORATION THREAD] These are the sequence of tables the user created in this exploration thread, in the order they were created, and what questions are asked to create them:\\n\\n{thread_summary}\"\n\n        if current_data_sample:\n            context += f\"\\n\\n[CURRENT DATA SAMPLE] This is the current data sample the user is viewing, and the visualization they are looking at at the moment is shown below:\\n\\n{pd.DataFrame(current_data_sample).head(10).to_string()}\"\n\n        if start_question:\n            context += f\"\\n\\n[START QUESTION]\\n\\n{start_question}\"\n\n        base_system_prompt = SYSTEM_PROMPT_AGENT if mode == 'agent' else SYSTEM_PROMPT\n        \n        # Incorporate agent exploration rules into system prompt if provided\n        if self.agent_exploration_rules and self.agent_exploration_rules.strip():\n            system_prompt = base_system_prompt + \"\\n\\n[AGENT EXPLORATION RULES]\\n\\n\" + self.agent_exploration_rules.strip() + \"\\n\\nPlease follow the above agent exploration rules when suggesting questions.\"\n        else:\n            system_prompt = base_system_prompt\n\n        logger.debug(f\"Interactive explore agent input: {context}\")\n        logger.info(f\"[InteractiveExploreAgent] run start\")\n        \n        try:\n            if current_chart:\n                messages = [\n                    {\"role\": \"system\", \"content\": system_prompt},\n                    {\"role\": \"user\", \"content\": [\n                        {\"type\": \"text\", \"text\": context},\n                        {\"type\": \"image_url\", \"image_url\": {\"url\": current_chart, \"detail\": \"high\"}}\n                    ]}\n                ]\n            else:\n                messages = [\n                    {\"role\": \"system\", \"content\": system_prompt},\n                    {\"role\": \"user\", \"content\": context}\n                ]\n            # Get completion from client\n            stream = self.client.get_completion(messages=messages, stream=True)\n        except Exception as e:\n            # if the model doesn't accept image, just use the text context\n            messages = [\n                {\"role\": \"system\", \"content\": system_prompt},\n                {\"role\": \"user\", \"content\": context}\n            ]\n            # Get completion from client\n            stream = self.client.get_completion(messages=messages, stream=True)\n\n        accumulated_content = \"\"\n        \n        for part in stream:\n            if hasattr(part, 'choices') and len(part.choices) > 0:\n                delta = part.choices[0].delta\n                if hasattr(delta, 'content') and delta.content:\n                    accumulated_content += delta.content\n                    \n                    # Stream each character for real-time display as JSON\n                    yield delta.content\n\n        logger.info(f\"[InteractiveExploreAgent] run done\")"
  },
  {
    "path": "py-src/data_formulator/agents/agent_report_gen.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\n\nfrom data_formulator.agents.agent_utils import extract_json_objects, generate_data_summary\n\nimport logging\n\nlogger = logging.getLogger(__name__)\n\n\nSYSTEM_PROMPT = '''You are a journalist to help the user generate a short blog post based off the data and visualization provided by the user.\nThe user will provide you:\n- the input data summary (the data analysis is based off) \n- and a list of visualizations (and their corresponding data) that the user wants to include in the report.\n- the report style they want the report to be written in.\nYour job is to generate a short blog post based off the data and visualizations provided by the user. It should be a few paragraphs long, and be easy to read.\n\nNote:\n- You should not make any assumptions or judgments about a person's gender, biological sex, sexuality, religion, race, nationality, ethnicity, political stance, socioeconomic status, mental health, invisible disabilities, medical conditions, personality type, social impressions, emotional state, and cognitive state.\n- If that happens, highlight the the data may include biases, and suggest the user to be careful when interpreting the data.\n\nThe report should have two components:\n1. A short title of the report\n2. Description of findings based on the charts and data.\n    - connect findings between different charts into a coherent story, write in a way that is easy to read and understand.\n    - include the image as part of the blog. Use a placeholder [IMAGE(chart_id)] to include the chart that will be replaced later.\n    - for each chart, write a bit about the what is the chart trying to answer and its findings (use its data as supporting evidence)\n    - descriptions should all be concise only show 2-3 most important findings for the chart.\n3. conclude the blog with a summary of the findings and follows up questions.\n\nWriting style rules:\n- The report should be easy to read and understand, the total reading time should be 1 minute for the user, use no more than 200 words.\n- The report should be concise and to the point.\n- The output should be in markdown format:\n    - title should be in `# <title>`\n    - the content should just be paragraphs without subsection headers\n    - put image reference [IMAGE(chart_id)] in its own line among the texts at appropriate places (replace the chart_id with the actual chart_id, keep the format of [IMAGE(...)]).\n    - be flexible about using markdown syntax like bullet points, italics, bold, code blocks, tables, etc. to make the report more readable.\n    - the summary should be in a paragraph start with \"**In summary**\".\n- Note that the reader won't be able to see sample data or code, and the report should be self-contained (referring to the charts).\n- The user may provide you a desired writing style, that means the overall language should follow the style (not that the post should still be within 1min reading time).\n    - \"blog post\": \"blog post\", -- a blogpost that is published on a blog platform\n    - \"social post\": \"social post\", -- a social post that is published on a social media platform (should be shorter than a blog post)\n    - \"executive summary\": \"executive summary\", -- a summary of the report for executives, with more formal language and more details, and more bullet points\n    - \"live report\": \"live report\", -- a live report is designed for user to monitor the data and visualization live (like a dashboard), thus, don't interpret the visualization as of now since data will change, instead describe what each chart is designed for and hint what the user should look for as data get updated.\nThe report should be lightweight, and respect facts in the data. Do not make up any facts or make judgements about the data.\nThe report should be based off the data and visualizations provided by the user, do not make up any facts or make judgements about the data.\nOutput markdown directly, do not need to include any other text.\n'''\n\nclass ReportGenAgent(object):\n\n    def __init__(self, client, workspace):\n        self.client = client\n        self.workspace = workspace\n\n    def get_data_summary(self, input_tables):\n        return generate_data_summary(input_tables, self.workspace)\n\n    def stream(self, input_tables, charts=[], style=\"blog post\"):\n        \"\"\"derive a new concept based on the raw input data\n        Args:\n            - input_tables (list): the input tables to the agent\n            - charts (list): the charts to the agent of format \n            [\n                { \n                    \"chart_id\": ..., // the id of the chart \n                    \"code\": ..., // the code that derived this table\n                    \"chart_data\": { \"name\": ..., \"rows\": ... }, \n                    \"chart_url\": ... // base64 encoded image\n                }\n            ]\n            - style (str): the style of the report, can be \"blog post\" or \"social post\" or \"executive summary\" or \"live report\"\n        Returns:\n            generator: the result of the agent\n        \"\"\"\n\n        data_summary = self.get_data_summary(input_tables)\n\n        content = []\n\n        content.append({\n            'type': 'text',\n            'text': f'''{data_summary}'''\n        })\n\n        for chart in charts:\n            chart_data = chart['chart_data']\n            chart_data_summary = self.get_data_summary([chart_data])\n            if chart['chart_url']:\n                content += [\n                    {\n                        'type': 'text',\n                        'text': f''' [CHART] - chart_id: {chart['chart_id']} \\n\\n - data summary:\\n\\n{chart_data_summary} \\n\\n - code:\\n\\n{chart['code']}'''\n                    },\n                    {\n                        'type': 'image_url',\n                        'image_url': {\n                            \"url\": chart['chart_url'],\n                            \"detail\": \"high\"\n                        }\n                    }\n                ]\n\n        user_prompt = {\n            'role': 'user',\n            'content': content + [{'type': 'text', 'text': 'Now based off the data and visualizations provided by the user, generate a report in markdown. The style of the report should be ' + style + '.'}]\n        }\n\n        system_message = {\n            'role': 'system',\n            'content': [ {'type': 'text', 'text': SYSTEM_PROMPT}]\n        }\n\n        messages = [\n            system_message, \n            user_prompt\n        ]\n        \n        ###### the part that calls open_ai\n        stream = self.client.get_completion(messages = messages, stream=True)\n\n        accumulated_content = \"\"\n        \n        for part in stream:\n            if hasattr(part, 'choices') and len(part.choices) > 0:\n                delta = part.choices[0].delta\n                if hasattr(delta, 'content') and delta.content:\n                    accumulated_content += delta.content\n                    \n                    # Stream each character for real-time display as JSON\n                    yield delta.content"
  },
  {
    "path": "py-src/data_formulator/agents/agent_sort_data.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\nfrom data_formulator.agents.agent_utils import extract_json_objects\n\nimport logging\n\nlogger = logging.getLogger(__name__)\n\n\nSYSTEM_PROMPT = '''You are a data scientist to help user to sort data.\nThe user will provide list of items in the form of a json object, and your goal is to sort the data in its natural order based on your knowledge.\nCreate an output json object with sorted data based off the [INPUT].\n\nFor example:\n\n[INPUT]\n\n{\n    \"name\": \"grades\",\n    \"values\": [\">=60\",\"10\", \"20\", \"30\", \"40\", \"50\"]\n}\n\n[OUTPUT]\n\n{\n    \"name\": \"grades\",\n    \"sorted_values\": [\"10\", \"20\", \"30\", \"40\", \"50\", \">=60\"],\n    \"reason\": \"sort scores in ascending order\"\n}\n\n[INPUT]\n\n{\n    \"name\": \"month\",\n    \"values\": [ \"April\", \"August\", \"December\", \"February\", \"January\", \"July\", \"June\", \"March\", \"May\", \"November\", \"October\", \"September\" ]\n}\n\n[OUTPUT]\n\n{\n    \"name\": \"month\",\n    \"sorted_values\": [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    \"reason\": \"sort months by their natural order\"\n}\n\n[INPUT]\n\n{\n    \"name\": \"month\",\n    \"values\": [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\n}\n\n[OUTPUT]\n\n{\n    \"name\": \"month\",\n    \"sorted_values\": [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    \"reason\": \"the input list is already ordered months naturally\"\n}\n'''\n\n\n\nclass SortDataAgent(object):\n\n    def __init__(self, client):\n        self.client = client\n\n    def run(self, name, values, n=1):\n\n        input_obj = {\n            'name': name,\n            'value': values\n        }\n\n        user_query = f\"[INPUT]\\n\\n{json.dumps(input_obj)}\\n\\n[OUTPUT]\"\n\n        logger.debug(user_query)\n        logger.info(f\"[SortDataAgent] run start\")\n\n        messages = [{\"role\":\"system\", \"content\": SYSTEM_PROMPT},\n                    {\"role\":\"user\",\"content\": user_query}]\n        \n        ###### the part that calls open_ai\n        response = self.client.get_completion(messages = messages)\n\n        #log = {'messages': messages, 'response': response.model_dump(mode='json')}\n\n        candidates = []\n        for choice in response.choices:\n            \n            logger.debug(\"\\n=== Sort data agent ===>\\n\")\n            logger.debug(choice.message.content + \"\\n\")\n            \n            json_blocks = extract_json_objects(choice.message.content + \"\\n\")\n            \n            if len(json_blocks) > 0:\n                result = {'status': 'ok', 'content': json_blocks[0]}\n            else:\n                try:\n                    json_block = json.loads(choice.message.content + \"\\n\")\n                    result = {'status': 'ok', 'content': json_block}\n                except:\n                    result = {'status': 'other error', 'content': 'unable to extract VegaLite script from response'}\n            \n            # individual dialog for the agent\n            result['dialog'] = [*messages, {\"role\": choice.message.role, \"content\": choice.message.content}]\n            result['agent'] = 'SortDataAgent'\n\n            candidates.append(result)\n\n        status = candidates[0].get('status', '?') if candidates else 'empty'\n        logger.info(f\"[SortDataAgent] run done | status={status}\")\n        return candidates"
  },
  {
    "path": "py-src/data_formulator/agents/agent_utils.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport json\nimport keyword\nimport numpy as np\nimport re\n\ndef string_to_py_varname(var_str): \n    var_name = re.sub(r'\\W|^(?=\\d)', '_', var_str)\n    if keyword.iskeyword(var_name):\n        var_name = f\"__{var_name}\"\n    return var_name\n\ndef field_name_to_ts_variable_name(field_name):\n    if field_name.strip() == \"\":\n        return \"inp\"\n    clean_name = re.sub('[^A-Za-z0-9]+', ' ', field_name)\n    clean_name = re.sub(' +', ' ', clean_name)\n    var_name = ''.join(x for x in clean_name.title() if not x.isspace())\n    var_name = var_name[0].lower() + var_name[1:]\n    return var_name\n\ndef infer_ts_datatype(df, name):\n    if name not in df.columns:\n        return \"any\"\n        \n    dtype = df[name].dtype\n    if dtype == \"object\":  \n        return \"string\"  \n    elif dtype == \"int64\" or dtype == \"float64\":  \n        return \"number\"  \n    elif dtype == \"bool\":  \n        return \"boolean\"  \n    elif dtype == \"datetime64\":  \n        return \"Date\"  \n    else:  \n        return \"any\"  \n\ndef value_handling_func(val):\n    \"\"\"process values to make it comparable\"\"\"\n    if isinstance(val, (int,)):\n        return val\n    try:\n        val = float(val)\n        val = np.round(val, 5)\n    except:\n        pass\n\n    if isinstance(val, (list,)):\n        return str(val)\n\n    return val\n\ndef table_hash(table):\n    \"\"\"hash a table, mostly for the purpose of comparison\"\"\"\n    if len(table) == 0:\n        return hash(table)\n    schema = sorted(list(table[0].keys()))\n    frozen_table = tuple(sorted([tuple([hash(value_handling_func(r[key])) for key in schema]) for r in table]))\n    return hash(frozen_table)\n\n\ndef extract_code_from_gpt_response(code_raw, language):\n    \"\"\"search for matches and then look for pairs of ```...``` to extract code\"\"\"\n\n    prefix_pos = [m.span()[0] for m in re.compile(f\"```{language}\").finditer(code_raw)]\n    all_spans = [m.span() for m in re.compile(\"```\").finditer(code_raw)]\n\n    matches = []\n    for i in range(len(all_spans) - 1):\n        if all_spans[i][0] in prefix_pos and all_spans[i+1][0] not in prefix_pos:\n            matches.append([all_spans[i][0], all_spans[i+1][1]])    \n        \n    results = []\n    if len(matches) > 0:\n        match = matches[0]\n\n        for match in matches:\n            code = code_raw[match[0]: match[1]]\n            code = code[len(f\"```{language}\"): len(code) - len(\"```\")]\n            results.append(code)\n        \n    return results\n\n\ndef find_matching_bracket(text, start_index, bracket_type='curly'):  \n    \"\"\"Find the index of the matching closing bracket for JSON objects or arrays.\"\"\"  \n    if bracket_type == 'curly':  \n        open_bracket, close_bracket = '{', '}'  \n    elif bracket_type == 'square':  \n        open_bracket, close_bracket = '[', ']'  \n    else:  \n        raise ValueError(\"Invalid bracket_type. Use 'curly' or 'square'.\")  \n  \n    stack = []  \n    for index in range(start_index, len(text)):  \n        char = text[index]  \n        if char == open_bracket:  \n            stack.append(char)  \n        elif char == close_bracket:  \n            if not stack:  \n                return -1  \n            stack.pop()  \n            if not stack:  \n                return index  \n    return -1  \n  \ndef extract_json_objects(text):  \n    \"\"\"Extracts JSON objects and arrays from a text string.  \n    Returns a list of parsed JSON objects and arrays.  \n    \"\"\"  \n    json_objects = []  \n    start_index = 0  \n    while True:  \n        # Search for the start of a JSON object or array  \n        object_start = text.find('{', start_index)  \n        array_start = text.find('[', start_index)  \n          \n        # Find the earliest JSON structure start  \n        if object_start == -1 and array_start == -1:  \n            break  \n        elif object_start == -1:  \n            start_index = array_start  \n            bracket_type = 'square'  \n        elif array_start == -1:  \n            start_index = object_start  \n            bracket_type = 'curly'  \n        else:  \n            start_index = min(object_start, array_start)  \n            bracket_type = 'square' if start_index == array_start else 'curly'  \n          \n        # Find the matching closing bracket  \n        end_index = find_matching_bracket(text, start_index, bracket_type)  \n        if end_index == -1:  \n            break  \n          \n        json_str = text[start_index:end_index + 1]  \n        try:  \n            json_obj = json.loads(json_str)  \n            json_objects.append(json_obj)  \n        except ValueError:  \n            pass  \n  \n        start_index = end_index + 1  \n  \n    return json_objects  \n\n\ndef get_field_summary(field_name, df, field_sample_size, max_val_chars=100):\n    # Convert lists to strings to make them hashable\n    def make_hashable(val):\n        if val is None:\n            return None\n        if isinstance(val, list):\n            return str(val)\n        return val\n    \n    try:\n        values = sorted([make_hashable(x) for x in list(set([make_hashable(x) for x in df[field_name].values])) if x is not None])\n    except:\n        values = [make_hashable(x) for x in list(set([make_hashable(x) for x in df[field_name].values])) if x is not None]\n\n    val_sample = \"\"\n\n    sample_size = field_sample_size\n\n    if len(values) <= sample_size:\n        val_sample = values\n    else:\n        val_sample = values[:int(sample_size / 2)] + [\"...\"] + values[-(sample_size - int(sample_size / 2)):]\n\n    def sample_val_cap(val):\n        if len(str(val)) > max_val_chars:\n            s = str(val)[:max_val_chars] + \"...\"\n        else:\n            s = str(val)\n\n        if ',' in s:\n            s = f'\"{s}\"'\n\n        return s\n\n    val_str = ', '.join([sample_val_cap(str(s)) for s in val_sample])\n\n    return f\"{field_name} -- type: {df[field_name].dtype}, values: {val_str}\"\n\ndef generate_data_summary(\n    input_tables,\n    workspace,\n    include_data_samples=True,\n    field_sample_size=7,\n    row_sample_size=5,\n    max_val_chars=140,\n    table_name_prefix=\"Table\"\n):\n    \"\"\"\n    Generate a natural, well-organized summary of input tables by reading workspace parquet files.\n\n    All tables (including temp tables) should be in the workspace before calling this function.\n    Use WorkspaceWithTempData context manager to mount temp tables to workspace.\n\n    Organization approach:\n    - Each table is clearly separated with a header\n    - Information flows logically: Overview → Schema → Examples\n    - Consistent section ordering for better readability\n    - Shows filename for workspace tables\n\n    Args:\n        input_tables: list of dicts with 'name' key\n        workspace: Workspace instance with all tables mounted (including temp data)\n        include_data_samples: whether to include sample data\n        field_sample_size: number of example values per field\n        row_sample_size: number of sample rows to show\n        max_val_chars: max characters per value\n        table_name_prefix: prefix for table headers\n\n    Returns:\n        Formatted string summary of all tables\n    \"\"\"\n    def assemble_table_summary(table, idx):\n        table_name = table['name']\n        description = table.get(\"attached_metadata\", \"\")\n\n        # Read data into DataFrame (handles parquet, csv, excel, json, etc.)\n        df = workspace.read_data_as_df(table_name)\n\n        # Get filename for display (LLM uses this to generate read_parquet/read_csv calls)\n        data_file_path = workspace.get_relative_data_file_path(table_name)\n\n        num_rows = len(df)\n        num_cols = len(df.columns)\n\n        # Build sections in logical order: Overview → Description → Schema → Examples\n        sections = []\n\n        # 1. Table Header with basic stats\n        header = f\"## {table_name_prefix} {idx + 1}: {table_name}\"\n        if num_rows > 0:\n            header += f\" ({num_rows:,} rows × {num_cols} columns)\"\n        sections.append(header)\n        sections.append(f\"- **file path:** `{data_file_path}`\")\n        sections.append(\"\")  # Empty line for spacing\n\n        # 2. Description (if available) - provides context first\n        if description:\n            sections.append(f\"### Description\\n{description}\\n\")\n\n        # 3. Schema/Fields - core structure information\n        fields_summary = '\\n'.join([\n            '  - ' + get_field_summary(fname, df, field_sample_size, max_val_chars)\n            for fname in df.columns\n        ])\n        sections.append(f\"### Schema ({num_cols} fields)\\n{fields_summary}\\n\")\n\n        # 4. Sample data (if requested) - concrete examples last\n        if include_data_samples and num_rows > 0:\n            sample_df = df.head(row_sample_size)\n            sections.append(\n                f\"### Sample Data (first {min(row_sample_size, num_rows)} rows)\\n\"\n                f\"```\\n{sample_df.to_string()}\\n```\\n\"\n            )\n\n        return '\\n'.join(sections)\n\n    # Build summaries for all tables\n    table_summaries = [assemble_table_summary(table, i) for i, table in enumerate(input_tables)]\n\n    # Join with visual separators\n    separator = \"\\n\" + \"─\" * 60 + \"\\n\\n\"\n    return separator.join(table_summaries)\n\n\n"
  },
  {
    "path": "py-src/data_formulator/agents/agent_utils_sql.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nSQL-related utility functions for agents.\nThese functions are used across multiple agents for DuckDB operations and SQL data summaries.\n\"\"\"\n\nimport re\n\n\ndef sanitize_table_name(table_name: str) -> str:\n    \"\"\"Sanitize table name to be used in SQL queries\"\"\"\n    # Replace spaces with underscores\n    sanitized_name = table_name.replace(\" \", \"_\")\n    sanitized_name = sanitized_name.replace(\"-\", \"_\")\n    # Allow alphanumeric, underscore, dot, dash, and dollar sign\n    sanitized_name = re.sub(r'[^a-zA-Z0-9_\\.$]', '', sanitized_name)\n    return sanitized_name\n\n\ndef create_duckdb_conn_with_parquet_views(workspace, input_tables: list[dict]):\n    \"\"\"\n    Create an in-memory DuckDB connection with a view for each parquet table in the workspace.\n    Input tables are expected to be parquet-backed tables in the datalake (parquet-to-parquet).\n\n    Args:\n        workspace: Workspace instance\n        input_tables: list of dicts with 'name' key for the table name\n\n    Returns:\n        DuckDB connection with views created for all input tables\n    \"\"\"\n    import duckdb\n\n    conn = duckdb.connect(\":memory:\")\n    for table in input_tables:\n        name = table[\"name\"]\n        view_name = sanitize_table_name(name)\n        path = workspace.get_parquet_path(name)\n        path_escaped = str(path).replace(\"\\\\\", \"\\\\\\\\\").replace(\"'\", \"''\")\n        conn.execute(f'CREATE VIEW \"{view_name}\" AS SELECT * FROM read_parquet(\\'{path_escaped}\\')')\n    return conn\n"
  },
  {
    "path": "py-src/data_formulator/agents/client_utils.py",
    "content": "import litellm\nimport openai\nfrom azure.identity import DefaultAzureCredential, get_bearer_token_provider\n\n\nclass Client(object):\n    \"\"\"\n    Returns a LiteLLM client configured for the specified endpoint and model.\n    Supports OpenAI, Azure, Ollama, and other providers via LiteLLM.\n    \"\"\"\n    def __init__(self, endpoint, model, api_key=None,  api_base=None, api_version=None):\n        \n        self.endpoint = endpoint\n        self.model = model\n        self.params = {}\n\n        if api_key is not None and api_key != \"\":\n            self.params[\"api_key\"] = api_key\n        if api_base is not None and api_base != \"\":\n            self.params[\"api_base\"] = api_base\n        if api_version is not None and api_version != \"\":\n            self.params[\"api_version\"] = api_version\n\n        if self.endpoint == \"gemini\":\n            if model.startswith(\"gemini/\"):\n                self.model = model\n            else:\n                self.model = f\"gemini/{model}\"\n        elif self.endpoint == \"anthropic\":\n            if model.startswith(\"anthropic/\"):\n                self.model = model\n            else:\n                self.model = f\"anthropic/{model}\"\n        elif self.endpoint == \"azure\":\n            self.params[\"api_base\"] = api_base\n            self.params[\"api_version\"] = api_version if api_version else \"2025-04-01-preview\"\n            if api_key is None or api_key == \"\":\n                token_provider = get_bearer_token_provider(\n                    DefaultAzureCredential(), \"https://cognitiveservices.azure.com/.default\"\n                )\n                self.params[\"azure_ad_token_provider\"] = token_provider\n            self.params[\"custom_llm_provider\"] = \"azure\"\n        elif self.endpoint == \"ollama\":\n            self.params[\"api_base\"] = api_base if api_base else \"http://localhost:11434\"\n            self.params[\"max_tokens\"] = self.params[\"max_completion_tokens\"]\n            if model.startswith(\"ollama/\"):\n                self.model = model\n            else:\n                self.model = f\"ollama/{model}\"\n\n    @classmethod\n    def from_config(cls, model_config: dict[str, str]):\n        \"\"\"\n        Create a client instance from model configuration.\n        \n        Args:\n            model_config: Dictionary containing endpoint, model, api_key, api_base, api_version\n            \n        Returns:\n            Client instance for making API calls\n        \"\"\"\n        # Strip whitespace from all values\n        for key in model_config:\n            if isinstance(model_config[key], str):\n                model_config[key] = model_config[key].strip()\n\n        return cls(\n            model_config[\"endpoint\"],\n            model_config[\"model\"],\n            model_config.get(\"api_key\"),\n            model_config.get(\"api_base\"),\n            model_config.get(\"api_version\")\n        )\n\n    def get_completion(self, messages, stream=False):\n        \"\"\"\n        Returns a LiteLLM client configured for the specified endpoint and model.\n        Supports OpenAI, Azure, Ollama, and other providers via LiteLLM.\n        \"\"\"\n        # Configure LiteLLM \n\n        if self.endpoint == \"openai\":\n            client = openai.OpenAI(\n                base_url=self.params.get(\"api_base\", None),\n                api_key=self.params.get(\"api_key\", \"\"),\n                timeout=120\n            )\n\n            completion_params = {\n                \"model\": self.model,\n                \"messages\": messages,\n            }\n\n            if self.model.startswith(\"gpt-5\") or self.model.startswith(\"o1\") or self.model.startswith(\"o3\"):\n                completion_params[\"reasoning_effort\"] = \"low\"\n            \n            return client.chat.completions.create(**completion_params, stream=stream)\n        else:\n\n            params = self.params.copy()\n\n            if (self.model.startswith(\"gpt-5\") or self.model.startswith(\"o1\") or self.model.startswith(\"o3\")\n                or self.model.startswith(\"claude-sonnet-4-5\") or self.model.startswith(\"claude-opus-4\")):\n                params[\"reasoning_effort\"] = \"low\"\n\n            return litellm.completion(\n                model=self.model,\n                messages=messages,\n                drop_params=True,\n                stream=stream,\n                **params\n            )\n\n        \n    def get_response(self, messages: list[dict], tools: list | None = None):\n        \"\"\"\n        Returns a response using OpenAI's Response API approach.\n        \"\"\"\n        if self.endpoint == \"openai\":\n            client = openai.OpenAI(\n                base_url=self.params.get(\"api_base\", None),\n                api_key=self.params.get(\"api_key\", \"\"),\n                timeout=120\n            )\n            return client.responses.create(\n                model=self.model,\n                input=messages,\n                tools=tools,\n                **self.params\n            )\n        else:\n            return litellm.responses(\n                model=self.model,\n                input=messages,\n                tools=tools,\n                drop_params=True,\n                **self.params\n            )"
  },
  {
    "path": "py-src/data_formulator/agents/data_agent.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"Autonomous data exploration agent (SWE-agent style).\n\nThe agent receives a high-level user question, then enters an\nobserve → think → act loop where it picks one of three actions per turn:\n\n    visualize  – call DataRecAgent to transform data & create a chart\n    clarify    – ask the user a clarification question (pauses the loop)\n    present    – summarize findings and terminate the loop\n\nThe full trajectory (system prompt + observations) is maintained as a\nstandard message list and sent to the LLM on every turn so the model has\ncomplete context to make decisions.\n\"\"\"\n\nimport json\nimport logging\nimport time\nimport uuid\nfrom typing import Any, Generator\n\nfrom data_formulator.agents.agent_data_rec import DataRecAgent\nfrom data_formulator.agents.agent_utils import extract_json_objects, generate_data_summary\nfrom data_formulator.agents.client_utils import Client\nfrom data_formulator.code_signing import sign_result\nfrom data_formulator.workflows.create_vl_plots import (\n    assemble_vegailte_chart,\n    coerce_field_type,\n    resolve_field_type,\n    spec_to_base64,\n    field_metadata_to_semantic_types,\n)\n\nimport pandas as pd\n\nlogger = logging.getLogger(__name__)\n\n# ---------------------------------------------------------------------------\n# System prompt\n# ---------------------------------------------------------------------------\n\nSYSTEM_PROMPT = '''\\\nYou are an autonomous data exploration agent.\n\nYour goal is to help the user answer their question by creating one or more\ndata visualizations.  You operate in a loop: at every turn you MUST output\n**exactly one action** as a JSON object (nothing else).\n\n## Available actions\n\n### 1. `visualize`\nUse this when you want to create a visualization.  You provide a concise\nanalytical question that will be forwarded to a data-transformation agent\nwhich will write code, transform the data, and pick a chart type.\n\n```json\n{{\n    \"action\": \"visualize\",\n    \"thought\": \"<your reasoning about what to explore next>\",\n    \"question\": \"<concise analytical question / instruction for the chart>\"\n}}\n```\n\nGuidelines for the question:\n- It should be self-contained: mention which fields, aggregations, filters\n  or derived metrics to use.\n- Each question should target ONE chart.\n- Keep it concise but precise enough so the data transformation agent can\n  execute without ambiguity.\n\n### 2. `clarify`\nUse this when the user's question is ambiguous, there are multiple\nreasonable interpretations, or critical information is missing.\n\n```json\n{{\n    \"action\": \"clarify\",\n    \"thought\": \"<why you need clarification>\",\n    \"message\": \"<a polite, concise clarification question for the user>\"\n}}\n```\n\nGuidelines:\n- Only clarify when genuinely necessary; prefer making a reasonable\n  assumption and proceeding.\n- Ask at most one question per turn.\n\n### 3. `present`\nUse this when you believe you have sufficiently answered the user's\nquestion and can summarize findings.\n\n```json\n{{\n    \"action\": \"present\",\n    \"thought\": \"<why you are done>\",\n    \"summary\": \"<concise bullet-point summary of key findings>\"\n}}\n```\n\nGuidelines:\n- The summary should reference the visualizations you created.\n- Keep it to 3-5 bullet points, each ≤ 25 words.\n- Present after at most {max_iterations} visualization steps, even if\n  there is more to explore.\n\n## Decision guidelines\n\n- **Start** by understanding the user question and the data. If the\n  question is clear, go ahead and `visualize`. If it is ambiguous,\n  `clarify` first.\n- **After a visualization** is created, review the result (data sample +\n  chart image) and decide:\n  - `visualize` again if the question is not yet fully answered.\n  - `present` if the findings are sufficient or interesting enough.\n  - `clarify` if the result reveals that the original question needs\n    scoping.\n- **Never** output two actions in one turn.\n- **Never** repeat a visualization that already exists in the trajectory.\n- Always output valid JSON with one of the three action types.\n\n{agent_exploration_rules}\n'''\n\n# ---------------------------------------------------------------------------\n# Agent\n# ---------------------------------------------------------------------------\n\n\nclass DataAgent:\n    \"\"\"Autonomous data exploration agent with observe-think-act loop.\"\"\"\n\n    def __init__(\n        self,\n        client: Client,\n        workspace,\n        agent_exploration_rules: str = \"\",\n        agent_coding_rules: str = \"\",\n        max_iterations: int = 5,\n        max_repair_attempts: int = 1,\n    ):\n        self.client = client\n        self.workspace = workspace\n        self.agent_exploration_rules = agent_exploration_rules\n        self.agent_coding_rules = agent_coding_rules\n        self.max_iterations = max_iterations\n        self.max_repair_attempts = max_repair_attempts\n\n        # Sub-agent for data transformation + chart recommendation\n        self.rec_agent = DataRecAgent(\n            client=client,\n            workspace=workspace,\n            agent_coding_rules=agent_coding_rules,\n        )\n\n    # ------------------------------------------------------------------\n    # Public API\n    # ------------------------------------------------------------------\n\n    def run(\n        self,\n        input_tables: list[dict[str, Any]],\n        user_question: str,\n        conversation_history: list[dict[str, str]] | None = None,\n        trajectory: list[dict] | None = None,\n        completed_step_count: int = 0,\n    ) -> Generator[dict[str, Any], None, None]:\n        \"\"\"Run the autonomous exploration loop.\n\n        Yields event dicts with ``type`` in:\n            ``\"action\"``      – the agent's chosen action (for logging/UI)\n            ``\"result\"``      – a visualization result (data + chart)\n            ``\"clarify\"``     – a clarification question (loop pauses)\n            ``\"completion\"``  – final summary (loop terminates)\n            ``\"error\"``       – error information\n\n        To resume after a ``clarify`` event, call ``run()`` again with\n        the ``trajectory`` returned in the clarify payload (the caller\n        should have appended the user's clarification as a user message).\n        \"\"\"\n        if trajectory is None:\n            trajectory = self._build_initial_messages(\n                input_tables, user_question, conversation_history\n            )\n\n        completed_steps: list[dict[str, Any]] = []\n        # Track DataRecAgent dialog for follow-up calls\n        rec_dialog: list[dict] = []\n        rec_last_data: dict | list = []\n        iteration = completed_step_count\n\n        while iteration < self.max_iterations:\n            iteration += 1\n\n            # --- THINK: ask the LLM to pick an action -----------------\n            t_llm_start = time.time()\n            action = self._get_next_action(trajectory)\n            logger.info(f\"[DataAgent] timing: iteration {iteration} think llm={time.time() - t_llm_start:.3f}s\")\n\n            if action is None:\n                yield self._error_event(iteration, \"Failed to parse agent action from LLM response\")\n                break\n\n            action_type = action.get(\"action\")\n            logger.info(f\"[DataAgent] Iteration {iteration}: action={action_type}\")\n\n            # Append the agent's response to the trajectory\n            trajectory.append({\n                \"role\": \"assistant\",\n                \"content\": json.dumps(action, ensure_ascii=False),\n            })\n\n            # --- ACT --------------------------------------------------\n            if action_type == \"clarify\":\n                yield {\n                    \"type\": \"clarify\",\n                    \"iteration\": iteration,\n                    \"thought\": action.get(\"thought\", \"\"),\n                    \"message\": action.get(\"message\", \"\"),\n                    \"trajectory\": self._strip_images(trajectory),\n                    \"completed_step_count\": len(completed_steps),\n                }\n                # Loop pauses – caller resumes by calling run() again\n                # with the trajectory + user's clarification appended.\n                return\n\n            elif action_type == \"present\":\n                yield {\n                    \"type\": \"completion\",\n                    \"iteration\": iteration,\n                    \"status\": \"success\",\n                    \"content\": {\n                        \"thought\": action.get(\"thought\", \"\"),\n                        \"summary\": action.get(\"summary\", \"\"),\n                        \"total_steps\": len(completed_steps),\n                    },\n                }\n                return\n\n            elif action_type == \"visualize\":\n                question = action.get(\"question\", user_question)\n\n                # Yield action event so the UI can show what the agent is doing\n                yield {\n                    \"type\": \"action\",\n                    \"iteration\": iteration,\n                    \"action\": \"visualize\",\n                    \"thought\": action.get(\"thought\", \"\"),\n                    \"question\": question,\n                }\n\n                # Execute the visualize action\n                viz_result = self._execute_visualize(\n                    input_tables=input_tables,\n                    question=question,\n                    prev_dialog=rec_dialog,\n                    prev_data=rec_last_data,\n                )\n\n                if viz_result[\"status\"] != \"ok\":\n                    # Append error observation and let agent decide\n                    error_msg = viz_result.get(\"error_message\", \"Unknown error\")\n                    observation = f\"[OBSERVATION – Step {len(completed_steps) + 1} FAILED]\\n\\nError: {error_msg}\"\n                    trajectory.append({\"role\": \"user\", \"content\": observation})\n                    yield self._error_event(iteration, error_msg, question=question)\n                    continue\n\n                # Successful visualization\n                transform_result = viz_result[\"transform_result\"]\n                sign_result(transform_result)\n                chart_image = viz_result.get(\"chart_image\")\n                transformed_data = transform_result[\"content\"]\n                code = transform_result.get(\"code\", \"\")\n\n                # Update rec agent state for follow-ups\n                rec_dialog = transform_result.get(\"dialog\", [])\n                rec_last_data = transformed_data\n\n                # Build step record\n                step = {\n                    \"question\": question,\n                    \"code\": code,\n                    \"data\": {\n                        \"rows\": transformed_data[\"rows\"],\n                        \"name\": (\n                            transformed_data[\"virtual\"][\"table_name\"]\n                            if \"virtual\" in transformed_data\n                            else None\n                        ),\n                    },\n                    \"visualization\": chart_image,\n                }\n                completed_steps.append(step)\n\n                # Yield the result to the frontend\n                yield {\n                    \"type\": \"result\",\n                    \"iteration\": iteration,\n                    \"status\": \"success\",\n                    \"content\": {\n                        \"question\": question,\n                        \"result\": transform_result,\n                    },\n                }\n\n                # Append observation to trajectory for the next think step\n                observation_msg = self._format_observation(\n                    step_index=len(completed_steps),\n                    question=question,\n                    code=code,\n                    data=transformed_data,\n                    chart_image=chart_image,\n                )\n                trajectory.append(observation_msg)\n\n            else:\n                # Unrecognised action – let the LLM know\n                trajectory.append({\n                    \"role\": \"user\",\n                    \"content\": (\n                        f\"[ERROR] Unknown action '{action_type}'. \"\n                        \"Please choose one of: visualize, clarify, present.\"\n                    ),\n                })\n                yield self._error_event(\n                    iteration,\n                    f\"Unknown action: {action_type}\",\n                )\n\n        # Exhausted max iterations – force a completion yield\n        yield {\n            \"type\": \"completion\",\n            \"iteration\": iteration,\n            \"status\": \"max_iterations\",\n            \"content\": {\n                \"summary\": \"Reached the maximum number of exploration steps.\",\n                \"total_steps\": len(completed_steps),\n            },\n        }\n\n    # ------------------------------------------------------------------\n    # Message construction\n    # ------------------------------------------------------------------\n\n    def _build_system_prompt(self) -> str:\n        rules_block = \"\"\n        if self.agent_exploration_rules and self.agent_exploration_rules.strip():\n            rules_block = (\n                \"\\n## Additional exploration rules\\n\\n\"\n                + self.agent_exploration_rules.strip()\n                + \"\\n\\nPlease follow the above rules when exploring data.\"\n            )\n        return SYSTEM_PROMPT.format(\n            max_iterations=self.max_iterations,\n            agent_exploration_rules=rules_block,\n        )\n\n    def _build_initial_messages(\n        self,\n        input_tables: list[dict[str, Any]],\n        user_question: str,\n        conversation_history: list[dict[str, str]] | None = None,\n    ) -> list[dict]:\n        \"\"\"Build the initial trajectory with system prompt + data context + user question.\"\"\"\n        data_summary = generate_data_summary(input_tables, workspace=self.workspace)\n\n        # Optionally prepend conversation history\n        history_block = \"\"\n        if conversation_history:\n            lines = []\n            for msg in conversation_history:\n                role = \"User\" if msg.get(\"role\") == \"user\" else \"Assistant\"\n                lines.append(f\"{role}: {msg.get('content', '')}\")\n            history_block = (\n                \"[PREVIOUS CONVERSATION FOR REFERENCE]\\n\"\n                + \"\\n\".join(lines)\n                + \"\\n\\n\"\n            )\n\n        user_content = (\n            f\"{history_block}\"\n            f\"[DATASETS]\\n\\n{data_summary}\\n\\n\"\n            f\"[USER QUESTION]\\n\\n{user_question}\"\n        )\n\n        return [\n            {\"role\": \"system\", \"content\": self._build_system_prompt()},\n            {\"role\": \"user\", \"content\": user_content},\n        ]\n\n    # ------------------------------------------------------------------\n    # LLM interaction\n    # ------------------------------------------------------------------\n\n    def _get_next_action(self, trajectory: list[dict]) -> dict | None:\n        \"\"\"Call the LLM with the current trajectory and parse the action JSON.\"\"\"\n        response = self.client.get_completion(messages=trajectory)\n\n        if isinstance(response, Exception):\n            logger.error(f\"[DataAgent] LLM error: {response}\")\n            return None\n\n        if not response.choices:\n            return None\n\n        content = response.choices[0].message.content or \"\"\n        logger.debug(f\"[DataAgent] Raw LLM response:\\n{content}\")\n\n        json_blocks = extract_json_objects(content)\n        if not json_blocks:\n            # Try to salvage – the model might have wrapped in markdown\n            return None\n\n        return json_blocks[0]\n\n    # ------------------------------------------------------------------\n    # Visualize action execution\n    # ------------------------------------------------------------------\n\n    def _execute_visualize(\n        self,\n        input_tables: list[dict[str, Any]],\n        question: str,\n        prev_dialog: list[dict],\n        prev_data: dict | list,\n    ) -> dict[str, Any]:\n        \"\"\"Execute a visualize action via DataRecAgent, with repair retries.\n\n        Returns a dict with:\n            status: \"ok\" | \"error\"\n            transform_result: the DataRecAgent result (when ok)\n            chart_image: base64 chart image or None\n            error_message: str (when error)\n        \"\"\"\n        # Decide whether to follow-up or start fresh\n        if prev_dialog:\n            if isinstance(prev_data, dict) and \"rows\" in prev_data:\n                sample = prev_data[\"rows\"]\n            else:\n                sample = []\n            results = self.rec_agent.followup(\n                input_tables=input_tables,\n                new_instruction=question,\n                latest_data_sample=sample,\n                dialog=prev_dialog,\n            )\n        else:\n            results = self.rec_agent.run(\n                input_tables=input_tables,\n                description=question,\n            )\n\n        # Repair loop\n        attempt = 0\n        while results and results[0][\"status\"] != \"ok\" and attempt < self.max_repair_attempts:\n            attempt += 1\n            error_msg = results[0].get(\"content\", \"Unknown error\")\n            dialog = results[0].get(\"dialog\", [])\n            logger.warning(\n                f\"[DataAgent] Repair attempt {attempt}/{self.max_repair_attempts}: {error_msg}\"\n            )\n            repair_instruction = (\n                f\"We ran into the following problem executing the code, please fix it:\\n\\n\"\n                f\"{error_msg}\\n\\n\"\n                \"Please think step by step, reflect why the error happened and fix the code.\"\n            )\n            results = self.rec_agent.followup(\n                input_tables=input_tables,\n                new_instruction=repair_instruction,\n                latest_data_sample=[],\n                dialog=dialog,\n            )\n\n        if not results or results[0][\"status\"] != \"ok\":\n            return {\n                \"status\": \"error\",\n                \"error_message\": results[0][\"content\"] if results else \"No results from DataRecAgent\",\n            }\n\n        transform_result = results[0]\n        transformed_data = transform_result[\"content\"]\n\n        # Create chart\n        chart_image = self._create_chart(transformed_data, transform_result.get(\"refined_goal\", {}))\n\n        return {\n            \"status\": \"ok\",\n            \"transform_result\": transform_result,\n            \"chart_image\": chart_image,\n        }\n\n    def _create_chart(\n        self,\n        transformed_data: dict[str, Any],\n        refined_goal: dict[str, Any],\n    ) -> str | None:\n        \"\"\"Create a chart from transformed data and return a base64 PNG string.\"\"\"\n        chart_obj = refined_goal.get(\"chart\", {})\n        chart_type = chart_obj.get(\"chart_type\", \"Bar Chart\")\n        chart_encodings = chart_obj.get(\"encodings\", {})\n        chart_config = chart_obj.get(\"config\", {})\n\n        try:\n            df = pd.DataFrame(transformed_data[\"rows\"])\n            if df.empty:\n                return None\n\n            encodings = {}\n            for channel, field in chart_encodings.items():\n                if field and field in df.columns:\n                    field_type = resolve_field_type(df[field], field)\n                    field_type = coerce_field_type(chart_type, channel, field_type)\n                    encodings[channel] = {\"field\": field, \"type\": field_type}\n\n            spec = assemble_vegailte_chart(\n                df, chart_type, encodings, config=chart_config,\n                semantic_types=field_metadata_to_semantic_types(refined_goal.get(\"field_metadata\")),\n            )\n            return spec_to_base64(spec) if spec else None\n        except Exception as e:\n            logger.error(f\"[DataAgent] Chart creation error: {e}\")\n            return None\n\n    # ------------------------------------------------------------------\n    # Observation formatting\n    # ------------------------------------------------------------------\n\n    def _format_observation(\n        self,\n        step_index: int,\n        question: str,\n        code: str,\n        data: dict[str, Any],\n        chart_image: str | None,\n    ) -> dict:\n        \"\"\"Format a completed step as a user message for the trajectory.\"\"\"\n        # Build data summary\n        data_summary = generate_data_summary(\n            [{\"name\": data.get(\"virtual\", {}).get(\"table_name\", f\"step_{step_index}\"),\n              \"rows\": data[\"rows\"]}],\n            workspace=self.workspace,\n        )\n\n        text = (\n            f\"[OBSERVATION – Step {step_index}]\\n\\n\"\n            f\"**Question**: {question}\\n\\n\"\n            f\"**Code**:\\n```python\\n{code}\\n```\\n\\n\"\n            f\"**Transformed Data Sample**:\\n{data_summary}\"\n        )\n\n        if chart_image:\n            # Multimodal content with chart image\n            content: list[dict[str, Any]] = [\n                {\"type\": \"text\", \"text\": text + \"\\n\\n**Visualization**:\"},\n            ]\n            if chart_image.startswith(\"data:\") or chart_image.startswith(\"http\"):\n                content.append({\n                    \"type\": \"image_url\",\n                    \"image_url\": {\"url\": chart_image},\n                })\n            return {\"role\": \"user\", \"content\": content}\n\n        return {\"role\": \"user\", \"content\": text}\n\n    # ------------------------------------------------------------------\n    # Helpers\n    # ------------------------------------------------------------------\n\n    @staticmethod\n    def _error_event(iteration: int, error_message: str, **extra) -> dict[str, Any]:\n        return {\n            \"type\": \"error\",\n            \"iteration\": iteration,\n            \"status\": \"error\",\n            \"error_message\": error_message,\n            **extra,\n        }\n\n    @staticmethod\n    def _strip_images(trajectory: list[dict]) -> list[dict]:\n        \"\"\"Return a copy of the trajectory with image_url blocks removed.\n\n        This keeps the payload small when sending the trajectory back\n        to the client for stateless resumption.\n        \"\"\"\n        stripped: list[dict] = []\n        for msg in trajectory:\n            content = msg.get(\"content\")\n            if isinstance(content, list):\n                # Multimodal message – keep only text parts\n                text_parts = [p for p in content if p.get(\"type\") == \"text\"]\n                if text_parts:\n                    stripped.append({**msg, \"content\": text_parts})\n                else:\n                    stripped.append({**msg, \"content\": \"[image removed]\"})\n            else:\n                stripped.append(msg)\n        return stripped\n"
  },
  {
    "path": "py-src/data_formulator/agents/semantic_types.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\n=============================================================================\nSEMANTIC TYPE SYSTEM  (Python mirror of the TypeScript registry)\n=============================================================================\n\nThe **source of truth** for semantic types lives in the TypeScript library:\n    src/lib/agents-chart/core/type-registry.ts\n\nThis file mirrors the registered types and provides:\n  1. String constants for every type in the TS TYPE_REGISTRY\n  2. Classification sets (measures, temporal, categorical, etc.)\n  3. Prompt generation for the DataLoadAgent LLM call\n  4. VL-type mapping + name-heuristic inference for create_vl_plots.py\n  5. Legacy compatibility list\n\nWhen a type is added/removed in the TS registry, update this file to match.\n=============================================================================\n\"\"\"\n\nfrom typing import Dict, List, Optional, Set\n\n# ---------------------------------------------------------------------------\n# All Semantic Types  (must match TYPE_REGISTRY keys in type-registry.ts)\n# ---------------------------------------------------------------------------\n\n# TEMPORAL — DateTime\nDATETIME = \"DateTime\"       # Full date and time: \"2024-01-15T14:30:00\"\nDATE = \"Date\"               # Date only: \"2024-01-15\"\nTIME = \"Time\"               # Time only: \"14:30:00\"\nTIMESTAMP = \"Timestamp\"     # Unix timestamp (seconds or milliseconds since epoch)\n\n# TEMPORAL — DateGranule\nYEAR = \"Year\"               # \"2024\" (as a time unit, not a measure)\nQUARTER = \"Quarter\"         # \"Q1\", \"Q2\", \"2024-Q1\"\nMONTH = \"Month\"             # \"January\", \"Jan\", 1-12\nWEEK = \"Week\"               # \"Week 1\", 1-52\nDAY = \"Day\"                 # \"Monday\", \"Mon\", 1-31\nHOUR = \"Hour\"               # 0-23\nYEAR_MONTH = \"YearMonth\"    # \"2024-01\", \"Jan 2024\"\nYEAR_QUARTER = \"YearQuarter\"# \"2024-Q1\"\nYEAR_WEEK = \"YearWeek\"      # \"2024-W01\"\nDECADE = \"Decade\"           # \"1990s\", \"2000s\"\n\n# TEMPORAL — Duration\nDURATION = \"Duration\"       # Time span: \"2 hours\", \"3 days\", milliseconds\n\n# MEASURE — Amount\nAMOUNT = \"Amount\"           # Monetary or general amounts (additive)\nPRICE = \"Price\"             # Unit price (intensive — avg, not sum)\nREVENUE = \"Revenue\"         # Total revenue/sales (additive)\nCOST = \"Cost\"               # Expenses/costs (additive)\n\n# MEASURE — Physical\nQUANTITY = \"Quantity\"        # Generic continuous measure (additive)\nTEMPERATURE = \"Temperature\" # Degrees — conditional diverging, arbitrary zero\n\n# MEASURE — Proportion\nPERCENTAGE = \"Percentage\"   # 0-100% or 0-1 ratio (intensive, bounded)\n\n# MEASURE — SignedMeasure\nPROFIT = \"Profit\"                       # Signed additive, conditional diverging\nPERCENTAGE_CHANGE = \"PercentageChange\"  # Signed intensive, conditional diverging\nSENTIMENT = \"Sentiment\"                 # Signed intensive, inherent diverging\nCORRELATION = \"Correlation\"             # Signed intensive, inherent diverging, bounded [-1,1]\n\n# MEASURE — GenericMeasure\nCOUNT = \"Count\"             # Discrete count of items (additive)\nNUMBER = \"Number\"           # Generic number (measure fallback)\n\n# DISCRETE\nRANK = \"Rank\"               # Position in ordered list: 1st, 2nd, 3rd\nSCORE = \"Score\"             # Rating score: 1-5, 1-10, 0-100\nRATING = \"Rating\"           # Star rating, letter grade\nINDEX = \"Index\"             # Row number, sequence number\n\n# IDENTIFIER\nID = \"ID\"                   # Unique identifier (not for aggregation!)\n\n# GEOGRAPHIC — GeoCoordinate\nLATITUDE = \"Latitude\"       # -90 to 90\nLONGITUDE = \"Longitude\"     # -180 to 180\n\n# GEOGRAPHIC — GeoPlace\nCOUNTRY = \"Country\"         # Country name or code\nSTATE = \"State\"             # State/Province\nCITY = \"City\"               # City name\nREGION = \"Region\"           # Geographic region\nADDRESS = \"Address\"         # Street address\nZIP_CODE = \"ZipCode\"        # Postal code\n\n# CATEGORICAL — Entity\nPERSON_NAME = \"PersonName\"  # Full name, first/last name\nCOMPANY = \"Company\"         # Company/Organization name\nPRODUCT = \"Product\"         # Product name\nCATEGORY = \"Category\"       # Product/item category\nNAME = \"Name\"               # Generic named entity (fallback)\n\n# CATEGORICAL — Coded\nSTATUS = \"Status\"           # State: \"Active\", \"Pending\", \"Closed\"\nTYPE = \"Type\"               # Type classification\nBOOLEAN = \"Boolean\"         # True/False, Yes/No\nDIRECTION = \"Direction\"     # N, S, E, W — cyclic ordinal\n\n# CATEGORICAL — Binned\nRANGE = \"Range\"             # Numeric range: \"10000-20000\", \"<50\", \"50+\"\nAGE_GROUP = \"AgeGroup\"      # Age range: \"18-24\", \"25-34\"\n\n# FALLBACKS\nSTRING = \"String\"           # Generic string (categorical fallback)\nUNKNOWN = \"Unknown\"         # Cannot determine type\n\n\n# ---------------------------------------------------------------------------\n# All Semantic Types List  (matches TYPE_REGISTRY key order)\n# ---------------------------------------------------------------------------\n\nALL_SEMANTIC_TYPES: List[str] = [\n    # Temporal — DateTime\n    DATETIME, DATE, TIME, TIMESTAMP,\n    # Temporal — DateGranule\n    YEAR, QUARTER, MONTH, WEEK, DAY, HOUR,\n    YEAR_MONTH, YEAR_QUARTER, YEAR_WEEK, DECADE,\n    # Temporal — Duration\n    DURATION,\n    # Measure — Amount\n    AMOUNT, PRICE, REVENUE, COST,\n    # Measure — Physical\n    QUANTITY, TEMPERATURE,\n    # Measure — Proportion\n    PERCENTAGE,\n    # Measure — SignedMeasure\n    PROFIT, PERCENTAGE_CHANGE, SENTIMENT, CORRELATION,\n    # Measure — GenericMeasure\n    COUNT, NUMBER,\n    # Discrete\n    RANK, SCORE, RATING, INDEX,\n    # Identifier\n    ID,\n    # Geographic — GeoCoordinate\n    LATITUDE, LONGITUDE,\n    # Geographic — GeoPlace\n    COUNTRY, STATE, CITY, REGION, ADDRESS, ZIP_CODE,\n    # Categorical — Entity\n    PERSON_NAME, COMPANY, PRODUCT, CATEGORY, NAME,\n    # Categorical — Coded\n    STATUS, TYPE, BOOLEAN, DIRECTION,\n    # Categorical — Binned\n    RANGE, AGE_GROUP,\n    # Fallbacks\n    STRING, UNKNOWN,\n]\n\n\n# ---------------------------------------------------------------------------\n# Type Sets for Classification\n# ---------------------------------------------------------------------------\n\nTIMESERIES_X_TYPES: Set[str] = {\n    DATETIME, DATE, TIME, TIMESTAMP,\n    YEAR_MONTH, YEAR_QUARTER, YEAR_WEEK,\n    YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, DECADE,\n}\n\nMEASURE_TYPES: Set[str] = {\n    AMOUNT, PRICE, REVENUE, COST,\n    QUANTITY, TEMPERATURE,\n    PERCENTAGE,\n    PROFIT, PERCENTAGE_CHANGE, SENTIMENT, CORRELATION,\n    COUNT, NUMBER,\n    DURATION,\n}\n\nNON_MEASURE_NUMERIC_TYPES: Set[str] = {\n    RANK, INDEX, SCORE, RATING,\n    YEAR, MONTH, DAY, HOUR,\n    LATITUDE, LONGITUDE,\n}\n\nCATEGORICAL_TYPES: Set[str] = {\n    NAME, PERSON_NAME, COMPANY, PRODUCT, CATEGORY,\n    STATUS, TYPE, BOOLEAN, DIRECTION,\n    COUNTRY, STATE, CITY, REGION,\n    RANGE, AGE_GROUP,\n    STRING,\n}\n\nORDINAL_TYPES: Set[str] = {\n    YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, DECADE,\n    RANK, SCORE, RATING,\n    RANGE, AGE_GROUP,\n    DIRECTION,\n}\n\nGEO_TYPES: Set[str] = {\n    LATITUDE, LONGITUDE,\n    COUNTRY, STATE, CITY, REGION, ADDRESS, ZIP_CODE,\n}\n\nSIGNED_MEASURE_TYPES: Set[str] = {\n    PROFIT, PERCENTAGE_CHANGE, SENTIMENT, CORRELATION,\n}\n\n\n# ---------------------------------------------------------------------------\n# Grouped by Category  (for prompt generation)\n# ---------------------------------------------------------------------------\n\nSEMANTIC_TYPE_CATEGORIES: Dict[str, List[str]] = {\n    \"Temporal (point-in-time)\": [DATETIME, DATE, TIME, TIMESTAMP],\n    \"Temporal (granules)\": [YEAR, QUARTER, MONTH, WEEK, DAY, HOUR],\n    \"Temporal (combined)\": [YEAR_MONTH, YEAR_QUARTER, YEAR_WEEK, DECADE],\n    \"Temporal (duration)\": [DURATION],\n    \"Numeric measures (monetary)\": [AMOUNT, PRICE, REVENUE, COST],\n    \"Numeric measures (physical)\": [QUANTITY, TEMPERATURE],\n    \"Numeric measures (proportion)\": [PERCENTAGE],\n    \"Numeric measures (signed/diverging)\": [PROFIT, PERCENTAGE_CHANGE, SENTIMENT, CORRELATION],\n    \"Numeric measures (generic)\": [COUNT, NUMBER],\n    \"Numeric discrete\": [RANK, INDEX, SCORE, RATING],\n    \"Identifier\": [ID],\n    \"Geographic coordinates\": [LATITUDE, LONGITUDE],\n    \"Geographic locations\": [COUNTRY, STATE, CITY, REGION, ADDRESS, ZIP_CODE],\n    \"Entity names\": [PERSON_NAME, COMPANY, PRODUCT, CATEGORY, NAME],\n    \"Categorical codes\": [STATUS, TYPE, BOOLEAN, DIRECTION],\n    \"Binned ranges\": [RANGE, AGE_GROUP],\n    \"Fallback\": [STRING, UNKNOWN],\n}\n\n\n# ---------------------------------------------------------------------------\n# Helper Functions\n# ---------------------------------------------------------------------------\n\ndef is_measure_type(semantic_type: str) -> bool:\n    \"\"\"Check if a semantic type is a true measure (suitable for quantitative encoding).\"\"\"\n    return semantic_type in MEASURE_TYPES\n\n\ndef is_timeseries_type(semantic_type: str) -> bool:\n    \"\"\"Check if a semantic type is suitable for time-series X axis.\"\"\"\n    return semantic_type in TIMESERIES_X_TYPES\n\n\ndef is_categorical_type(semantic_type: str) -> bool:\n    \"\"\"Check if a semantic type is categorical (suitable for color/grouping).\"\"\"\n    return semantic_type in CATEGORICAL_TYPES\n\n\ndef is_ordinal_type(semantic_type: str) -> bool:\n    \"\"\"Check if a semantic type is ordinal (has inherent order).\"\"\"\n    return semantic_type in ORDINAL_TYPES\n\n\ndef is_geo_type(semantic_type: str) -> bool:\n    \"\"\"Check if a semantic type is geographic.\"\"\"\n    return semantic_type in GEO_TYPES\n\n\ndef is_non_measure_numeric(semantic_type: str) -> bool:\n    \"\"\"Check if a semantic type is numeric but should not be aggregated.\"\"\"\n    return semantic_type in NON_MEASURE_NUMERIC_TYPES\n\n\ndef is_signed_measure(semantic_type: str) -> bool:\n    \"\"\"Check if a semantic type is a signed measure (can go negative).\"\"\"\n    return semantic_type in SIGNED_MEASURE_TYPES\n\n\n# ---------------------------------------------------------------------------\n# Prompt Generation\n# ---------------------------------------------------------------------------\n\ndef generate_semantic_types_prompt() -> str:\n    \"\"\"Generate the semantic types section for the LLM prompt.\"\"\"\n\n    lines = [\"Semantic types to consider (grouped by category):\"]\n    lines.append(\"\")\n\n    for category, types in SEMANTIC_TYPE_CATEGORIES.items():\n        lines.append(f\"  {category}:\")\n        lines.append(f\"    {', '.join(types)}\")\n\n    lines.append(\"\")\n    lines.append(\"Guidelines for choosing semantic types:\")\n    lines.append(\"\")\n    lines.append(\"1. TEMPORAL types:\")\n    lines.append(\"   - Use DateTime/Date/Time for full timestamps or dates\")\n    lines.append(\"   - Use Timestamp for Unix timestamps (seconds or milliseconds since epoch)\")\n    lines.append(\"   - Use YearMonth, YearQuarter for combined temporal like '2024-01' or '2024-Q1'\")\n    lines.append(\"   - Use Year, Month, Day for discrete time units (even if stored as numbers)\")\n    lines.append(\"   - Use Duration for time spans (e.g., '2 hours', milliseconds)\")\n    lines.append(\"\")\n    lines.append(\"2. MONETARY MEASURE types:\")\n    lines.append(\"   - Use Amount for generic monetary values\")\n    lines.append(\"   - Use Price for per-unit prices (averaged, not summed)\")\n    lines.append(\"   - Use Revenue/Cost for totals (summed)\")\n    lines.append(\"   - Use Profit for values that can be negative (profit/loss)\")\n    lines.append(\"\")\n    lines.append(\"3. PHYSICAL / GENERIC MEASURE types:\")\n    lines.append(\"   - Use Quantity for generic continuous measures (weight, distance, area, volume, speed, etc.)\")\n    lines.append(\"   - Provide the 'unit' field for physical quantities (e.g., 'kg', 'km', '°C', 'mph')\")\n    lines.append(\"   - Use Temperature for temperature values (has special diverging color behavior)\")\n    lines.append(\"   - Use Count for discrete counts of items\")\n    lines.append(\"   - Use Number only when no more specific measure type applies\")\n    lines.append(\"\")\n    lines.append(\"4. PROPORTION & SIGNED MEASURE types:\")\n    lines.append(\"   - Use Percentage for 0-100% or 0-1 ratios\")\n    lines.append(\"   - Use PercentageChange for growth rates or % change (can be negative)\")\n    lines.append(\"   - Use Sentiment for sentiment scores (inherently diverging around 0)\")\n    lines.append(\"   - Use Correlation for correlation coefficients (bounded -1 to 1)\")\n    lines.append(\"\")\n    lines.append(\"5. NUMERIC DISCRETE types (should NOT be aggregated):\")\n    lines.append(\"   - Use Rank for positions (1st, 2nd, 3rd)\")\n    lines.append(\"   - Use ID for unique identifiers\")\n    lines.append(\"   - Use Score/Rating for evaluation scores (1-5, A-F)\")\n    lines.append(\"   - For Score/Rating, provide 'intrinsic_domain' as [min, max] inferred from the data (e.g., [1, 10] if values range 1-10)\")\n    lines.append(\"   - IMPORTANT: A column named 'year' with values like 2020, 2021 is Year, not Number!\")\n    lines.append(\"\")\n    lines.append(\"6. GEOGRAPHIC types:\")\n    lines.append(\"   - Use Latitude/Longitude for coordinates\")\n    lines.append(\"   - Use Country, State, City for named locations\")\n    lines.append(\"\")\n    lines.append(\"7. CATEGORICAL types:\")\n    lines.append(\"   - Use specific entity types (PersonName, Company, Product) when applicable\")\n    lines.append(\"   - Use Category for classification fields\")\n    lines.append(\"   - Use Status for state/status fields ('Active', 'Pending')\")\n    lines.append(\"   - Use Boolean for true/false, yes/no fields\")\n    lines.append(\"   - Use Direction for compass directions (N, S, E, W)\")\n    lines.append(\"\")\n    lines.append(\"8. RANGE types:\")\n    lines.append(\"   - Use Range for binned numeric values ('10000-20000', '<50', '50+')\")\n    lines.append(\"   - Use AgeGroup specifically for age ranges ('18-24', '25-34')\")\n    lines.append(\"\")\n    lines.append(\"9. FALLBACK types:\")\n    lines.append(\"   - Use String for generic text when no specific type applies\")\n    lines.append(\"   - Do NOT use generic names like 'Value', 'Data', etc. — pick the closest match above\")\n\n    return \"\\n\".join(lines)\n\n\n# For backward compatibility with existing code\nLEGACY_SEMANTIC_TYPES = [\n    \"Location\", \"Decade\", \"Year\", \"Month\", \"YearMonth\", \"Day\",\n    \"Date\", \"Time\", \"DateTime\", \"TimeRange\", \"Range\", \"Duration\",\n    \"Name\", \"Percentage\", \"String\", \"Number\"\n]\n\n\n# ---------------------------------------------------------------------------\n# Semantic Type → Vega-Lite Encoding Type\n# ---------------------------------------------------------------------------\n\nVL_TYPE_MAP: Dict[str, str] = {\n    # Temporal → temporal\n    \"DateTime\": \"temporal\", \"Date\": \"temporal\", \"Time\": \"temporal\", \"Timestamp\": \"temporal\",\n    \"YearMonth\": \"temporal\", \"YearQuarter\": \"temporal\", \"YearWeek\": \"temporal\",\n    \"Year\": \"temporal\",\n\n    # Temporal granules → ordinal\n    \"Quarter\": \"ordinal\", \"Month\": \"ordinal\",\n    \"Week\": \"ordinal\", \"Day\": \"ordinal\", \"Hour\": \"ordinal\", \"Decade\": \"ordinal\",\n\n    # Duration → quantitative\n    \"Duration\": \"quantitative\",\n\n    # Measures → quantitative\n    \"Amount\": \"quantitative\", \"Price\": \"quantitative\", \"Revenue\": \"quantitative\", \"Cost\": \"quantitative\",\n    \"Quantity\": \"quantitative\", \"Temperature\": \"quantitative\",\n    \"Percentage\": \"quantitative\",\n    \"Profit\": \"quantitative\", \"PercentageChange\": \"quantitative\",\n    \"Sentiment\": \"quantitative\", \"Correlation\": \"quantitative\",\n    \"Count\": \"quantitative\", \"Number\": \"quantitative\",\n\n    # Discrete numerics\n    \"Rank\": \"ordinal\", \"Index\": \"ordinal\",\n    \"Score\": \"quantitative\", \"Rating\": \"quantitative\",\n    \"ID\": \"nominal\",\n\n    # Geographic coordinates → quantitative\n    \"Latitude\": \"quantitative\", \"Longitude\": \"quantitative\",\n\n    # Geographic locations → nominal\n    \"Country\": \"nominal\", \"State\": \"nominal\", \"City\": \"nominal\",\n    \"Region\": \"nominal\", \"Address\": \"nominal\", \"ZipCode\": \"nominal\",\n\n    # Entity names → nominal\n    \"Name\": \"nominal\", \"PersonName\": \"nominal\",\n    \"Company\": \"nominal\", \"Product\": \"nominal\", \"Category\": \"nominal\",\n\n    # Coded → nominal (Direction can be ordinal but defaults nominal for VL)\n    \"Status\": \"nominal\", \"Type\": \"nominal\", \"Boolean\": \"nominal\",\n    \"Direction\": \"nominal\",\n\n    # Ranges → ordinal\n    \"Range\": \"ordinal\", \"AgeGroup\": \"ordinal\",\n\n    # Fallbacks\n    \"String\": \"nominal\", \"Unknown\": \"nominal\",\n}\n\n\ndef get_vl_type(semantic_type: str) -> Optional[str]:\n    \"\"\"\n    Get the Vega-Lite encoding type for a semantic type.\n    Returns 'quantitative', 'ordinal', 'nominal', or 'temporal', or None if unknown.\n    \"\"\"\n    return VL_TYPE_MAP.get(semantic_type)\n\n\n# ---------------------------------------------------------------------------\n# Name-based Heuristic Inference\n# ---------------------------------------------------------------------------\n#\n# For derived columns (from agent code) that lack frontend semantic type\n# metadata, infer a likely VL type from the column name.\n#\n# Pattern matching is intentionally conservative — only triggers when\n# the column name strongly suggests a specific meaning.\n# ---------------------------------------------------------------------------\n\nimport re as _re\n\n# Patterns that strongly indicate quantitative (measures)\n_QUANT_PATTERNS: list[_re.Pattern] = [\n    _re.compile(r'(?:^|_)(avg|mean|average|sum|total|count|num|min|max|median|std|stdev|var|variance)(?:_|$)', _re.I),\n    _re.compile(r'(?:^|_)(revenue|sales|profit|income|cost|expense|price|amount|quantity|volume|weight|distance|speed|temperature|rate|ratio|pct|percent|percentage|growth|change|diff|delta)(?:_|$)', _re.I),\n    _re.compile(r'(?:^|_)(lat|lon|latitude|longitude)(?:_|$)', _re.I),\n]\n\n# Patterns that indicate temporal\n_TEMPORAL_PATTERNS: list[_re.Pattern] = [\n    _re.compile(r'(?:^|_)(date|datetime|timestamp|time|created_at|updated_at|started_at|ended_at)(?:_|$)', _re.I),\n    _re.compile(r'^year$', _re.I),\n]\n\n# Patterns that indicate ordinal (time granules)\n_ORDINAL_PATTERNS: list[_re.Pattern] = [\n    _re.compile(r'^(month|quarter|week|day|hour|decade|year_month|year_quarter)$', _re.I),\n    _re.compile(r'(?:^|_)(rank|ranking|level|tier|grade|priority)(?:_|$)', _re.I),\n]\n\n# Patterns that indicate nominal (categorical)\n_NOMINAL_PATTERNS: list[_re.Pattern] = [\n    _re.compile(r'(?:^|_)(name|label|category|type|status|group|class|kind|tag|code|id|key)(?:_|$)', _re.I),\n    _re.compile(r'(?:^|_)(country|state|city|region|location|department|brand|company|product)(?:_|$)', _re.I),\n]\n\n\ndef infer_vl_type_from_name(column_name: str) -> Optional[str]:\n    \"\"\"\n    Infer a likely Vega-Lite type from a column name using pattern matching.\n    Returns 'quantitative', 'ordinal', 'nominal', 'temporal', or None if\n    no strong signal is found.\n    \"\"\"\n    # Check patterns in priority order\n    for pattern in _TEMPORAL_PATTERNS:\n        if pattern.search(column_name):\n            return 'temporal'\n\n    for pattern in _ORDINAL_PATTERNS:\n        if pattern.search(column_name):\n            return 'ordinal'\n\n    for pattern in _QUANT_PATTERNS:\n        if pattern.search(column_name):\n            return 'quantitative'\n\n    for pattern in _NOMINAL_PATTERNS:\n        if pattern.search(column_name):\n            return 'nominal'\n\n    return None\n"
  },
  {
    "path": "py-src/data_formulator/agents/web_utils.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport requests\nfrom bs4 import BeautifulSoup\nimport logging\nfrom urllib.parse import urlparse\nimport tempfile\nimport os\nimport socket\nimport ipaddress\n\nlogger = logging.getLogger(__name__)\n\n\ndef _is_private_ip(ip_str: str) -> bool:\n    \"\"\"\n    Check if an IP address is private, internal, or otherwise restricted.\n    \n    Args:\n        ip_str: IP address as a string\n        \n    Returns:\n        bool: True if IP is private/restricted, False if public\n    \"\"\"\n    try:\n        ip_obj = ipaddress.ip_address(ip_str)\n        \n        # Check if IP is private, loopback, link-local, multicast, reserved, or unspecified\n        if (\n            ip_obj.is_private or\n            ip_obj.is_loopback or\n            ip_obj.is_link_local or\n            ip_obj.is_multicast or\n            ip_obj.is_reserved or\n            ip_obj.is_unspecified\n        ):\n            return True\n        \n        # Explicitly block cloud metadata endpoints\n        # AWS/Azure/GCP metadata endpoint\n        if ip_str == \"169.254.169.254\":\n            return True\n            \n        # AWS IPv6 metadata endpoint\n        if ip_str.startswith(\"fd00:ec2::\"):\n            return True\n            \n        return False\n        \n    except ValueError:\n        # Not a valid IP address\n        return False\n\n\ndef _validate_url_for_ssrf(url: str) -> str:\n    \"\"\"\n    Validate a URL to prevent SSRF attacks.\n    \n    Performs the following checks:\n    1. Protocol validation (HTTP/HTTPS only)\n    2. Private IP blocking\n    \n    Args:\n        url: The URL to validate\n        \n    Returns:\n        str: The validated URL\n        \n    Raises:\n        ValueError: If the URL fails any security checks\n    \"\"\"\n    if not url:\n        raise ValueError(\"URL cannot be empty\")\n    \n    # Parse and validate URL format\n    parsed_url = urlparse(url)\n    if not parsed_url.scheme or not parsed_url.netloc:\n        raise ValueError(f\"Invalid URL format: {url}\")\n    \n    # Protection 1: Only allow HTTP/HTTPS schemes\n    if parsed_url.scheme.lower() not in (\"http\", \"https\"):\n        raise ValueError(\n            f\"Blocked: Unsupported URL scheme '{parsed_url.scheme}'. \"\n            f\"Only HTTP and HTTPS are allowed to prevent SSRF attacks.\"\n        )\n    \n    hostname = parsed_url.hostname\n    if not hostname:\n        raise ValueError(f\"Could not extract hostname from URL: {url}\")\n    \n    # Protection 2: Block requests to private/internal IP addresses\n    try:\n        # Resolve all addresses for the hostname (handles both IPv4 and IPv6)\n        addr_info = socket.getaddrinfo(hostname, None)\n        \n        for res in addr_info:\n            addr = res[4][0]\n            \n            # Check if this resolved IP is private/internal\n            if _is_private_ip(addr):\n                raise ValueError(\n                    f\"Blocked: URL '{url}' resolves to private/internal IP address {addr}. \"\n                    f\"Access to private networks is not allowed to prevent SSRF attacks.\"\n                )\n                \n    except socket.gaierror as e:\n        raise ValueError(f\"Could not resolve hostname '{hostname}': {str(e)}\") from e\n    \n    return url\n\n\ndef download_html_content(url: str, timeout: int = 30, headers: dict | None = None) -> str:\n    \"\"\"\n    Download HTML content from a given URL with SSRF protection.\n    \n    This function implements comprehensive SSRF protection:\n    1. Protocol validation (HTTP/HTTPS only)\n    2. Private IP blocking (before request)\n    3. Redirect validation (validates all redirect destinations)\n    4. Timeout limits (prevents slowloris attacks)\n    5. Logging of all accessed URLs (for security auditing)\n    \n    Args:\n        url (str): The URL to download HTML from\n        timeout (int): Request timeout in seconds (default: 30, max: 60)\n        headers (dict, optional): Custom headers for the request\n        \n    Returns:\n        str: The HTML content as a string\n        \n    Raises:\n        requests.RequestException: If the request fails\n        ValueError: If the URL is invalid or blocked by SSRF protection\n    \"\"\"\n    # Protection 5: Log all URL access attempts for security auditing\n    logger.info(f\"Attempting to download HTML from URL: {url}\")\n    \n    # Protection 1 & 2: Validate URL for SSRF (protocol and IP checks)\n    _validate_url_for_ssrf(url)\n    \n    # Protection 4: Enforce reasonable timeout limits (prevent slowloris)\n    if timeout <= 0:\n        timeout = 30\n    elif timeout > 60:\n        logger.warning(f\"Timeout of {timeout}s exceeds maximum, capping at 60s\")\n        timeout = 60\n    \n    # Set default headers if none provided\n    if headers is None:\n        headers = {\n            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',\n            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',\n            'Accept-Language': 'en-US,en;q=0.5',\n            'Accept-Encoding': 'gzip, deflate',\n            'Connection': 'keep-alive',\n            'Upgrade-Insecure-Requests': '1',\n        }\n    \n    try:\n        # Protection 3: Use a session to handle and validate redirects\n        with requests.Session() as session:\n            # Create a custom adapter to hook into redirect handling\n            class SSRFSafeHTTPAdapter(requests.adapters.HTTPAdapter):\n                def send(self, request, **kwargs):\n                    # Validate each request (including redirects)\n                    try:\n                        _validate_url_for_ssrf(request.url)\n                    except ValueError as e:\n                        # Log the blocked redirect attempt\n                        logger.error(f\"Blocked redirect to unsafe URL: {request.url} - {str(e)}\")\n                        raise\n                    return super().send(request, **kwargs)\n            \n            # Mount the adapter for both HTTP and HTTPS\n            adapter = SSRFSafeHTTPAdapter()\n            session.mount('http://', adapter)\n            session.mount('https://', adapter)\n            \n            # Make the request (redirects will be validated automatically)\n            response = session.get(\n                url, \n                timeout=timeout, \n                headers=headers,\n                allow_redirects=True  # Safe because we validate each redirect\n            )\n            response.raise_for_status()\n            \n            # Log successful access and any redirects that occurred\n            if response.history:\n                redirect_chain = \" -> \".join([r.url for r in response.history] + [response.url])\n                logger.info(f\"Successfully downloaded HTML with redirects: {redirect_chain}\")\n            else:\n                logger.info(f\"Successfully downloaded HTML from: {url}\")\n            \n            # Ensure we're getting HTML content\n            content_type = response.headers.get('content-type', '').lower()\n            if 'text/html' not in content_type and 'application/xhtml' not in content_type:\n                logger.warning(f\"Content-Type is {content_type}, but proceeding anyway\")\n            \n            return response.text\n        \n    except ValueError as e:\n        # SSRF protection blocked the request\n        logger.error(f\"SSRF protection blocked request to {url}: {str(e)}\")\n        raise\n    except requests.RequestException as e:\n        # Network or HTTP error\n        logger.error(f\"Failed to download HTML from {url}: {str(e)}\")\n        raise\n\n\ndef html_to_text(html_content: str, remove_scripts: bool = True, remove_styles: bool = True) -> str:\n    \"\"\"\n    Convert HTML content to readable text by extracting and cleaning the text content.\n    \n    Args:\n        html_content (str): HTML content as a string\n        remove_scripts (bool): Whether to remove script tags (default: True)\n        remove_styles (bool): Whether to remove style tags (default: True)\n        \n    Returns:\n        str: Clean, readable text content\n    \"\"\"\n    if not html_content or not html_content.strip():\n        return \"\"\n    \n    try:\n        # Parse HTML with BeautifulSoup\n        soup = BeautifulSoup(html_content, 'html.parser')\n        \n        # Remove script and style elements if requested\n        if remove_scripts:\n            for script in soup([\"script\", \"noscript\"]):\n                script.decompose()\n        \n        if remove_styles:\n            for style in soup([\"style\"]):\n                style.decompose()\n        \n        # Get text content\n        text = soup.get_text()\n        \n        # Clean up the text\n        lines = (line.strip() for line in text.splitlines())\n        chunks = (phrase.strip() for line in lines for phrase in line.split(\"  \"))\n        text = ' '.join(chunk for chunk in chunks if chunk)\n        \n        return text\n        \n    except Exception as e:\n        logger.error(f\"Failed to convert HTML to text: {str(e)}\")\n        # Fallback: return the raw content if parsing fails\n        return html_content\n\ndef get_html_title(html_content: str) -> str | None:\n    \"\"\"\n    Extract the title from HTML content.\n    \n    Args:\n        html_content (str): HTML content as a string\n        \n    Returns:\n        str or None: The title if found, None otherwise\n    \"\"\"\n    if not html_content:\n        return None\n    \n    try:\n        soup = BeautifulSoup(html_content, 'html.parser')\n        title_tag = soup.find('title')\n        return title_tag.get_text().strip() if title_tag else None\n    except Exception as e:\n        logger.error(f\"Failed to extract title from HTML: {str(e)}\")\n        return None\n\n\ndef get_html_meta_description(html_content: str) -> str | None:\n    \"\"\"\n    Extract the meta description from HTML content.\n    \n    Args:\n        html_content (str): HTML content as a string\n        \n    Returns:\n        str or None: The meta description if found, None otherwise\n    \"\"\"\n    if not html_content:\n        return None\n    \n    try:\n        soup = BeautifulSoup(html_content, 'html.parser')\n        meta_desc = soup.find('meta', attrs={'name': 'description'})\n        if meta_desc:\n            return meta_desc.get('content', '').strip()\n        \n        # Try Open Graph description\n        meta_og_desc = soup.find('meta', attrs={'property': 'og:description'})\n        if meta_og_desc:\n            return meta_og_desc.get('content', '').strip()\n        \n        return None\n    except Exception as e:\n        logger.error(f\"Failed to extract meta description from HTML: {str(e)}\")\n        return None\n"
  },
  {
    "path": "py-src/data_formulator/app.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport argparse\nimport sys\nimport os\nimport mimetypes\nmimetypes.add_type('application/javascript', '.js')\nmimetypes.add_type('application/javascript', '.mjs')\n\nimport flask\nfrom flask import Flask, request, send_from_directory\nfrom flask import stream_with_context, Response\n\nimport webbrowser\nimport threading\nimport numpy as np\nimport time\n\nimport logging\n\nimport json\nfrom pathlib import Path\n\nfrom dotenv import load_dotenv\nimport secrets\nimport base64\n\nAPP_ROOT = Path(Path(__file__).parent).absolute()\n\n# Create Flask app (lightweight, no heavy imports yet)\napp = Flask(__name__, static_url_path='', static_folder=os.path.join(APP_ROOT, \"dist\"))\napp.secret_key = secrets.token_hex(16)\napp.json.sort_keys = False\napp.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024  # 100 MB\n\nclass CustomJSONEncoder(json.JSONEncoder):\n    def default(self, obj):\n        if isinstance(obj, np.int64):\n            return int(obj)\n        if isinstance(obj, (bytes, bytearray)):\n            return base64.b64encode(obj).decode('ascii')\n        return super().default(obj)\n\napp.json_encoder = CustomJSONEncoder\n\n# Load env files early.\nload_dotenv(os.path.join(APP_ROOT, \"..\", \"..\", '.env'))\nload_dotenv(os.path.join(APP_ROOT, '.env'))\n\n# Default config from env (can be overridden by CLI args)\napp.config['CLI_ARGS'] = {\n    'sandbox': os.environ.get('SANDBOX', 'local'),\n    'disable_display_keys': os.environ.get('DISABLE_DISPLAY_KEYS', 'false').lower() == 'true',\n    'disable_database': os.environ.get('DISABLE_DATABASE', 'false').lower() == 'true',\n    'disable_file_upload': os.environ.get('DISABLE_FILE_UPLOAD', 'false').lower() == 'true',\n    'project_front_page': os.environ.get('PROJECT_FRONT_PAGE', 'false').lower() == 'true',\n    'max_display_rows': int(os.environ.get('MAX_DISPLAY_ROWS', '10000')),\n    'data_dir': os.environ.get('DATA_FORMULATOR_HOME', None),\n    'dev': os.environ.get('DEV_MODE', 'false').lower() == 'true',\n    'workspace_backend': os.environ.get('WORKSPACE_BACKEND', 'local'),\n    'azure_blob_connection_string': os.environ.get('AZURE_BLOB_CONNECTION_STRING', None),\n    'azure_blob_account_url': os.environ.get('AZURE_BLOB_ACCOUNT_URL', None),\n    'azure_blob_container': os.environ.get('AZURE_BLOB_CONTAINER', 'data-formulator'),\n}\n\n# Get logger for this module (logging config moved to run_app function)\nlogger = logging.getLogger(__name__)\n\ndef configure_logging():\n    \"\"\"Configure logging for the Flask application.\"\"\"\n    logging.basicConfig(\n        level=logging.ERROR,\n        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',\n        handlers=[logging.StreamHandler(sys.stdout)]\n    )\n    \n    # Enable INFO for agent modules so timing logs are visible\n    logging.getLogger('data_formulator.agents').setLevel(logging.INFO)\n\n    # Suppress verbose logging from third-party libraries\n    logging.getLogger('httpx').setLevel(logging.WARNING)\n    logging.getLogger('litellm').setLevel(logging.WARNING)\n    logging.getLogger('openai').setLevel(logging.WARNING)\n    \n    app.logger.handlers = []\n    for handler in logging.getLogger().handlers:\n        app.logger.addHandler(handler)\n\n\n_blueprints_registered = False\n\ndef _register_blueprints():\n    \"\"\"\n    Import and register blueprints. This is where heavy imports happen.\n    Called at module level (for gunicorn) and from run_app() (for CLI).\n    Guarded to prevent double registration.\n    \"\"\"\n    global _blueprints_registered\n    if _blueprints_registered:\n        return\n    _blueprints_registered = True\n    # Import tables routes (imports database connectors)\n    print(\"  Loading data connectors...\", flush=True)\n    from data_formulator.tables_routes import tables_bp\n    \n    # Import agent routes (imports AI/ML libraries: litellm, sklearn, etc.)\n    print(\"  Loading AI agents...\", flush=True)\n    from data_formulator.agent_routes import agent_bp\n    \n    # Import session routes\n    from data_formulator.session_routes import session_bp\n\n    # Import demo stream routes\n    from data_formulator.demo_stream_routes import demo_stream_bp, limiter as demo_stream_limiter, start_iss_collector\n    demo_stream_limiter.init_app(app)\n    \n    # Register blueprints\n    app.register_blueprint(tables_bp)\n    app.register_blueprint(agent_bp)\n    app.register_blueprint(session_bp)\n    app.register_blueprint(demo_stream_bp)\n    \n    # Start background ISS position collector\n    start_iss_collector()\n\n\n# Register blueprints at module level so WSGI servers (gunicorn) pick up all routes.\n# The guard inside _register_blueprints() prevents double registration when run via CLI.\n_register_blueprints()\n\n\n@app.route('/api/example-datasets')\ndef get_sample_datasets():\n    from data_formulator.example_datasets_config import EXAMPLE_DATASETS\n    return flask.jsonify(EXAMPLE_DATASETS)\n\n\n@app.route(\"/\", defaults={\"path\": \"\"})\ndef index_alt(path):\n    logger.info(app.static_folder)\n    return send_from_directory(app.static_folder, \"index.html\")\n\n@app.errorhandler(404)\ndef page_not_found(e):\n    logger.info(app.static_folder)\n    return send_from_directory(app.static_folder, \"index.html\")\n\n\n@app.route('/api/app-config', methods=['GET'])\ndef get_app_config():\n    \"\"\"Provide frontend configuration settings from CLI arguments\"\"\"\n    args = app.config['CLI_ARGS']\n    \n    config = {\n        \"SANDBOX\": args['sandbox'],\n        \"DISABLE_DISPLAY_KEYS\": args['disable_display_keys'],\n        \"DISABLE_DATABASE\": args['disable_database'],\n        \"DISABLE_FILE_UPLOAD\": args['disable_file_upload'],\n        \"PROJECT_FRONT_PAGE\": args['project_front_page'],\n        \"MAX_DISPLAY_ROWS\": args['max_display_rows'],\n        \"DEV_MODE\": args.get('dev', False),\n        \"WORKSPACE_BACKEND\": args.get('workspace_backend', 'local'),\n    }\n\n    if not args['disable_database']:\n        workspace_backend = args.get('workspace_backend', 'local')\n        if workspace_backend != 'azure_blob':\n            from data_formulator.datalake.workspace import get_data_formulator_home\n            config[\"DATA_FORMULATOR_HOME\"] = str(get_data_formulator_home())\n\n    return flask.jsonify(config)\n\n\ndef parse_args() -> argparse.Namespace:\n    parser = argparse.ArgumentParser(description=\"Data Formulator\")\n    parser.add_argument(\"-p\", \"--port\", type=int, default=5567, help=\"The port number you want to use\")\n    parser.add_argument(\"--sandbox\", type=str, default=os.environ.get('SANDBOX', 'local'),\n        choices=['local', 'docker'],\n        help=\"Python code execution backend: 'local' (default, isolated subprocess with audit hooks), \"\n             \"'docker' (maximum isolation, requires Docker)\")\n    parser.add_argument(\"--disable-display-keys\", action='store_true', default=False,\n        help=\"Whether disable displaying keys in the frontend UI, recommended to turn on if you host the app not just for yourself.\")\n    parser.add_argument(\"--disable-database\", action='store_true', default=False,\n        help=\"Disable server-side data persistence. Data loaders and table routes remain available but data is not saved to disk. \"\n             \"The frontend forces local-only mode (storeOnServer=false) so all table data lives in the browser.\")\n    parser.add_argument(\"--disable-file-upload\", action='store_true', default=False,\n        help=\"Disable file upload functionality. This prevents the app from uploading files to the server.\")\n    parser.add_argument(\"--project-front-page\", action='store_true', default=False,\n        help=\"Project the front page as the main page instead of the app.\")\n    parser.add_argument(\"--max-display-rows\", type=int,\n        default=int(os.environ.get('MAX_DISPLAY_ROWS', '10000')),\n        help=\"Maximum number of rows to send to the frontend for display (default: 10000)\")\n    parser.add_argument(\"--data-dir\", type=str, default=None,\n        help=\"Data Formulator home directory for workspaces and sessions (default: ~/.data_formulator)\")\n    parser.add_argument(\"--dev\", action='store_true', default=False,\n        help=\"Launch the app in development mode (prevents the app from opening the browser automatically)\")\n    parser.add_argument(\"--workspace-backend\", type=str,\n        default=os.environ.get('WORKSPACE_BACKEND', 'local'),\n        choices=['local', 'azure_blob'],\n        help=\"Workspace storage backend: 'local' (default, filesystem) or 'azure_blob' (Azure Blob Storage)\")\n    parser.add_argument(\"--azure-blob-connection-string\", type=str,\n        default=os.environ.get('AZURE_BLOB_CONNECTION_STRING'),\n        help=\"Azure Blob Storage connection string (mutually exclusive with --azure-blob-account-url)\")\n    parser.add_argument(\"--azure-blob-account-url\", type=str,\n        default=os.environ.get('AZURE_BLOB_ACCOUNT_URL'),\n        help=\"Azure Blob Storage account URL for Entra ID auth, e.g. https://<account>.blob.core.windows.net \"\n             \"(uses DefaultAzureCredential; mutually exclusive with --azure-blob-connection-string)\")\n    parser.add_argument(\"--azure-blob-container\", type=str,\n        default=os.environ.get('AZURE_BLOB_CONTAINER', 'data-formulator'),\n        help=\"Azure Blob Storage container name (default: data-formulator)\")\n    return parser.parse_args()\n\n\ndef run_app():\n    print(\"Starting Data Formulator...\", flush=True)\n    \n    configure_logging()\n    args = parse_args()\n    \n    # Override config from CLI args\n    app.config['CLI_ARGS'] = {\n        'sandbox': args.sandbox,\n        'disable_display_keys': args.disable_display_keys,\n        'disable_database': args.disable_database,\n        'disable_file_upload': args.disable_file_upload,\n        'project_front_page': args.project_front_page,\n        'max_display_rows': args.max_display_rows,\n        'data_dir': args.data_dir,\n        'dev': args.dev,\n        'workspace_backend': args.workspace_backend,\n        'azure_blob_connection_string': args.azure_blob_connection_string,\n        'azure_blob_account_url': args.azure_blob_account_url,\n        'azure_blob_container': args.azure_blob_container,\n    }\n    \n    # Register blueprints (this is where heavy imports happen)\n    _register_blueprints()\n\n    url = \"http://localhost:{0}\".format(args.port)\n    print(f\"Ready! Open {url} in your browser.\", flush=True)\n    \n    if not args.dev:\n        threading.Timer(1.5, lambda: webbrowser.open(url, new=2)).start()\n\n    debug_mode = args.dev\n    app.run(host='0.0.0.0', port=args.port, debug=debug_mode, use_reloader=debug_mode)\n\nif __name__ == '__main__':\n    run_app()\n"
  },
  {
    "path": "py-src/data_formulator/auth.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nAuthentication and identity management for Data Formulator.\n\nThis module provides a hybrid identity system that supports both anonymous\nbrowser-based users and authenticated users (via Azure App Service or JWT).\n\nSecurity Model:\n- Anonymous users: Browser UUID from X-Identity-Id header (prefixed with \"browser:\")\n- Authenticated users: Verified identity from Azure headers or JWT (prefixed with \"user:\")\n- Namespacing ensures authenticated user data cannot be accessed by spoofing headers\n\"\"\"\n\nimport logging\nimport re\nfrom flask import request, current_app\n\nlogger = logging.getLogger(__name__)\n\n# Maximum raw length for identity values (before namespacing).\n_MAX_IDENTITY_LENGTH = 256\n\n# Allowed characters: word chars, @, dot, dash (covers emails, UUIDs, etc.).\n_IDENTITY_RE = re.compile(r'^[\\w@.\\-]+$', re.ASCII)\n\n\ndef _validate_identity_value(value: str, source: str) -> str:\n    \"\"\"Validate and return a trimmed identity value.\n\n    Raises ``ValueError`` if the value is empty, too long, or contains\n    characters that should never appear in an identity string (e.g.\n    path separators, control characters, shell metacharacters).\n    \"\"\"\n    value = value.strip()\n    if not value:\n        raise ValueError(f\"Empty identity value from {source}\")\n    if len(value) > _MAX_IDENTITY_LENGTH:\n        raise ValueError(\n            f\"Identity value from {source} exceeds \"\n            f\"{_MAX_IDENTITY_LENGTH} characters\"\n        )\n    if not _IDENTITY_RE.match(value):\n        raise ValueError(\n            f\"Identity value from {source} contains disallowed characters\"\n        )\n    return value\n\n\ndef get_identity_id() -> str:\n    \"\"\"\n    Get identity ID with proper security priority:\n    \n    1. Verified user from Azure App Service auth headers (trusted, set by Azure)\n    2. Verified user from JWT bearer token (trusted, cryptographically verified)\n    3. Browser ID from X-Identity-Id header (untrusted, for anonymous users only)\n    \n    The key insight: for anonymous users, we trust X-Identity-Id because there's\n    no security risk (who cares if someone \"steals\" a random UUID?). For authenticated\n    users, we MUST extract identity from verified sources, not client-provided headers.\n    \n    Identity is namespaced as \"user:<id>\" or \"browser:<id>\" to ensure authenticated\n    user data is never accessible via anonymous browser identity spoofing.\n    \n    Returns:\n        str: The namespaced identity ID string (e.g., \"user:alice@...\" or \"browser:550e8400-...\")\n    \n    Raises:\n        ValueError: If no identity could be determined\n    \"\"\"\n    \n    # Priority 1: Azure App Service Authentication (EasyAuth)\n    # When deployed to Azure with authentication enabled, Azure injects these headers.\n    # These are SET BY AZURE (not the client) after verifying the user's identity.\n    azure_principal_id = request.headers.get('X-MS-CLIENT-PRINCIPAL-ID')\n    if azure_principal_id:\n        validated = _validate_identity_value(azure_principal_id, \"Azure principal\")\n        logger.debug(f\"Using Azure principal ID: {validated[:8]}...\")\n        return f\"user:{validated}\"\n    \n    # Priority 2: JWT Bearer Token (for custom auth implementations)\n    # If you implement your own auth, verify the JWT here and extract user ID.\n    # Example (uncomment and configure when implementing JWT auth):\n    # \n    # auth_header = request.headers.get('Authorization', '')\n    # if auth_header.startswith('Bearer '):\n    #     token = auth_header[7:]\n    #     try:\n    #         import jwt\n    #         payload = jwt.decode(token, current_app.config['JWT_SECRET'], algorithms=['HS256'])\n    #         user_id = payload.get('sub') or payload.get('user_id')\n    #         if user_id:\n    #             logger.debug(f\"Using JWT user ID: {user_id[:8]}...\")\n    #             return f\"user:{user_id}\"\n    #     except Exception as e:\n    #         logger.warning(f\"Invalid JWT token: {e}\")\n    #         # Fall through to browser identity\n    \n    # Priority 3: Anonymous browser identity (UNTRUSTED - from client header)\n    # SECURITY: We NEVER trust the namespace prefix from X-Identity-Id header.\n    # Even if client sends \"user:alice@...\", we force \"browser:\" prefix.\n    # Only verified auth (Azure headers, JWT) can result in \"user:\" prefix.\n    client_identity = request.headers.get('X-Identity-Id')\n    if client_identity:\n        # Extract the ID part, ignoring any client-provided prefix\n        # e.g., \"browser:550e8400-...\" → \"550e8400-...\"\n        # e.g., \"user:alice@...\" → \"alice@...\" (but forced to browser: namespace)\n        if ':' in client_identity:\n            # Strip the prefix - we don't trust client-provided namespaces\n            identity_value = client_identity.split(':', 1)[1]\n        else:\n            identity_value = client_identity\n        \n        validated = _validate_identity_value(identity_value, \"X-Identity-Id header\")\n        # Always use browser: prefix for client-provided identities\n        return f\"browser:{validated}\"\n    \n    raise ValueError(\"X-Identity-Id header is required. Please refresh the page.\")"
  },
  {
    "path": "py-src/data_formulator/code_signing.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"HMAC-based code signing for transformation code.\n\nWhen the agent generates Python transformation code and the server\nexecutes it successfully, the server signs the code with a secret key.\nThe signature is returned to the frontend alongside the code.\n\nWhen the frontend later sends the code back for re-execution (e.g.\nduring data refresh), the server verifies the signature before running\nthe code.  This prevents a tampered or injected script from being\nexecuted by the sandbox.\n\nSecret lifecycle\n~~~~~~~~~~~~~~~~\n- **Dev mode** (``--dev``): uses a fixed, deterministic key so that\n  signatures survive reloader restarts and hot-reloads during\n  development.  This is *not* secure for production.\n- **Production**: derives the key from Flask's ``app.secret_key``.\n  For multi-worker deploys (gunicorn) set the ``SECRET_KEY`` env-var\n  so all workers share the same Flask secret.\n- **Explicit override**: set ``DF_CODE_SIGNING_SECRET`` env-var — this\n  takes priority over everything (useful for multi-instance deploys\n  behind a load balancer).\n\"\"\"\n\nimport hashlib\nimport hmac\nimport logging\nimport os\n\nlogger = logging.getLogger(__name__)\n\n# ---------------------------------------------------------------------------\n# Server-side secret\n# ---------------------------------------------------------------------------\n\n# Explicit env-var takes highest priority (for multi-instance deploys).\n_EXPLICIT_SECRET: str | None = os.environ.get(\"DF_CODE_SIGNING_SECRET\") or None\n\n# Fixed key used in dev mode so reloader restarts don't invalidate\n# existing signatures.  NOT suitable for production.\n_DEV_SECRET = b\"data-formulator-dev-signing-key\"\n\n\ndef _is_dev_mode() -> bool:\n    \"\"\"Return True if the server was started with ``--dev``.\"\"\"\n    try:\n        from flask import current_app\n        return current_app.config.get(\"CLI_ARGS\", {}).get(\"dev\", False)\n    except (ImportError, RuntimeError):\n        return False\n\n\ndef _get_secret() -> bytes:\n    \"\"\"Return the signing secret.\n\n    Priority:\n    1. ``DF_CODE_SIGNING_SECRET`` env-var  (set once, works everywhere)\n    2. Dev mode → fixed deterministic key (survives reloader restarts)\n    3. Production → derived from Flask ``app.secret_key``\n    4. Fallback for tests / non-Flask callers\n    \"\"\"\n    if _EXPLICIT_SECRET:\n        return _EXPLICIT_SECRET.encode(\"utf-8\")\n\n    # In dev mode use a fixed key so the reloader doesn't break sigs.\n    if _is_dev_mode():\n        return _DEV_SECRET\n\n    # Production: derive from Flask's secret_key.\n    try:\n        from flask import current_app\n        flask_secret = current_app.secret_key\n        if flask_secret:\n            # Derive a separate key so changing Flask's secret_key for\n            # session purposes doesn't accidentally share material.\n            return hmac.new(\n                b\"df-code-signing\",\n                str(flask_secret).encode(\"utf-8\"),\n                hashlib.sha256,\n            ).digest()\n    except (ImportError, RuntimeError):\n        # No Flask app context (e.g. unit tests, CLI scripts).\n        pass\n\n    # Last resort — should only happen in tests.\n    logger.warning(\n        \"code_signing: no DF_CODE_SIGNING_SECRET and no Flask app context; \"\n        \"using fallback secret (signatures won't survive restarts)\"\n    )\n    return _DEV_SECRET\n\n\n# ---------------------------------------------------------------------------\n# Public API\n# ---------------------------------------------------------------------------\n\n# Maximum code size we are willing to sign / verify (256 KB).\nMAX_CODE_SIZE = 256 * 1024\n\n\ndef sign_code(code: str) -> str:\n    \"\"\"Compute an HMAC-SHA256 signature over *code*.\n\n    Returns the hex-encoded signature string.  The signature covers\n    the raw UTF-8 bytes of *code* — whitespace and encoding matter.\n    \"\"\"\n    if not code:\n        return \"\"\n    return hmac.new(\n        _get_secret(),\n        code.encode(\"utf-8\"),\n        hashlib.sha256,\n    ).hexdigest()\n\n\ndef verify_code(code: str, signature: str) -> bool:\n    \"\"\"Return ``True`` if *signature* is a valid HMAC for *code*.\n\n    Uses constant-time comparison to prevent timing attacks.\n    \"\"\"\n    if not code or not signature:\n        return False\n    expected = sign_code(code)\n    return hmac.compare_digest(expected, signature)\n\n\ndef sign_result(result: dict) -> dict:\n    \"\"\"Add ``code_signature`` to an agent result dict (in-place).\n\n    If the result contains a non-empty ``code`` key, a signature is\n    computed and stored under ``code_signature``.  The result dict is\n    returned for convenience.\n    \"\"\"\n    code = result.get(\"code\", \"\")\n    if code:\n        result[\"code_signature\"] = sign_code(code)\n    return result\n"
  },
  {
    "path": "py-src/data_formulator/data_loader/README.md",
    "content": "## Data Loader Module\n\nThis module provides a framework for loading data from various external sources into the **workspace** (parquet files). It follows an abstract base class pattern so all loaders behave consistently.\n\n### Design\n\n- **Storage**: Ingested data is written as **parquet** in the workspace. DuckDB is **not** used for storage; it is only the computation engine elsewhere in the application.\n- **Data flow**: **External source → PyArrow Table → Parquet (workspace)**.\n- **Format**: Loaders use **PyArrow** as the standard in-memory format for speed and interoperability. Database loaders (PostgreSQL, MySQL, MSSQL) use **connectorx** for Arrow-native reads where applicable.\n\n### Building a New Data Loader\n\nThe abstract class `ExternalDataLoader` defines the interface. Each concrete implementation (e.g., `MySQLDataLoader`, `S3DataLoader`) handles one data source.\n\nTo add a new data loader:\n\n1. Create a class that inherits from `ExternalDataLoader`.\n2. Implement the required pieces:\n   - **`list_params()`** (static): Connection parameters (names, types, defaults, descriptions).\n   - **`auth_instructions()`** (static): Short instructions for obtaining credentials/setup.\n   - **`__init__(self, params)`**: Validate params and establish or verify connection to the source. No `duck_db_conn`; storage is workspace-only.\n   - **`fetch_data_as_arrow(source_table, size=..., sort_columns=..., sort_order=...)`**: Fetch data from the source and return a `pyarrow.Table`. Only `source_table` (table/collection/file identifier) is supported; raw query strings are not accepted for security and dialect consistency.\n   - **`list_tables(table_filter=None)`**: Return a list of `{\"name\": ..., \"metadata\": {...}}` for tables/files the user can select. Metadata typically includes `row_count`, `columns`, and `sample_rows`.\n3. Register the new class in the package `__init__.py` so the front-end can discover it.\n\nThe base class provides **`ingest_to_workspace(workspace, ...)`**, which calls `fetch_data_as_arrow()` and writes the result to the workspace as parquet. You do not implement ingest logic in the loader.\n\nThe UI uses the same loaders for connection setup, table listing, and ingestion into the workspace.\n\n### Example Implementations\n\n- **`AthenaDataLoader`**: AWS Athena (SQL on S3 data lakes)\n- **`BigQueryDataLoader`**: Google BigQuery\n- **`KustoDataLoader`**: Azure Data Explorer (Kusto)\n- **`MySQLDataLoader`**: MySQL (connectorx)\n- **`PostgreSQLDataLoader`**: PostgreSQL (connectorx)\n- **`MSSQLDataLoader`**: Microsoft SQL Server (connectorx)\n- **`S3DataLoader`**: Amazon S3 files (CSV, Parquet, JSON) via PyArrow S3 filesystem\n- **`AzureBlobDataLoader`**: Azure Blob Storage via PyArrow\n- **`MongoDBDataLoader`**: MongoDB\n\n### Testing\n\nWhen implementing or changing a loader:\n\n- Handle connection and read errors clearly (e.g., raise `ValueError` with a clear message).\n- Sanitize or validate table/object names where appropriate.\n- Respect the `size` limit (and optional sort) in `fetch_data_as_arrow`.\n- Return the same metadata shape from `list_tables()` (e.g., `row_count`, `columns`, `sample_rows`) so the UI behaves consistently.\n\nTest via the front-end: configure the loader, list tables, and run an ingest into the workspace; then confirm parquet appears in the workspace and DuckDB (or other engines) can read it for computation.\n"
  },
  {
    "path": "py-src/data_formulator/data_loader/__init__.py",
    "content": "from data_formulator.data_loader.external_data_loader import ExternalDataLoader\nfrom data_formulator.data_loader.mysql_data_loader import MySQLDataLoader\nfrom data_formulator.data_loader.mssql_data_loader import MSSQLDataLoader\nfrom data_formulator.data_loader.kusto_data_loader import KustoDataLoader\nfrom data_formulator.data_loader.s3_data_loader import S3DataLoader\nfrom data_formulator.data_loader.azure_blob_data_loader import AzureBlobDataLoader\nfrom data_formulator.data_loader.postgresql_data_loader import PostgreSQLDataLoader\nfrom data_formulator.data_loader.mongodb_data_loader import MongoDBDataLoader\nfrom data_formulator.data_loader.bigquery_data_loader import BigQueryDataLoader\nfrom data_formulator.data_loader.athena_data_loader import AthenaDataLoader\n\nDATA_LOADERS = {\n    \"mysql\": MySQLDataLoader,\n    \"mssql\": MSSQLDataLoader,\n    \"kusto\": KustoDataLoader,\n    \"s3\": S3DataLoader,\n    \"azure_blob\": AzureBlobDataLoader,\n    \"postgresql\": PostgreSQLDataLoader,\n    \"mongodb\": MongoDBDataLoader,\n    \"bigquery\": BigQueryDataLoader,\n    \"athena\": AthenaDataLoader\n}\n\n__all__ = [\n    \"ExternalDataLoader\", \n    \"MySQLDataLoader\", \n    \"MSSQLDataLoader\", \n    \"KustoDataLoader\", \n    \"S3DataLoader\", \n    \"AzureBlobDataLoader\", \n    \"PostgreSQLDataLoader\", \n    \"MongoDBDataLoader\", \n    \"BigQueryDataLoader\",\n    \"AthenaDataLoader\", \n    \"DATA_LOADERS\"]"
  },
  {
    "path": "py-src/data_formulator/data_loader/athena_data_loader.py",
    "content": "import logging\nimport re\nimport time\nimport pyarrow as pa\nimport pyarrow.csv as pa_csv\nimport boto3\nimport botocore.exceptions\nfrom pyarrow import fs as pa_fs\n\nfrom data_formulator.data_loader.external_data_loader import ExternalDataLoader, sanitize_table_name\nfrom typing import Any\n\nlog = logging.getLogger(__name__)\n\n\n# Valid patterns for Athena identifiers (database.table or just table)\nATHENA_TABLE_PATTERN = re.compile(r'^[a-zA-Z_][a-zA-Z0-9_]*(\\.[a-zA-Z_][a-zA-Z0-9_]*)?$')\nATHENA_COLUMN_PATTERN = re.compile(r'^[a-zA-Z_][a-zA-Z0-9_]*$')\nS3_URL_PATTERN = re.compile(r'^s3://[a-zA-Z0-9][a-zA-Z0-9.\\-_]*[a-zA-Z0-9](/.*)?$')\n\n\ndef _validate_athena_table_name(table_name: str) -> None:\n    \"\"\"Validate that table_name is a safe Athena identifier (database.table format).\"\"\"\n    if not table_name:\n        raise ValueError(\"Table name cannot be empty\")\n    if not ATHENA_TABLE_PATTERN.match(table_name):\n        raise ValueError(\n            f\"Invalid table name format: '{table_name}'. \"\n            \"Expected format: 'database.table' or 'table' with alphanumeric characters and underscores only.\"\n        )\n\n\ndef _validate_column_name(column_name: str) -> None:\n    \"\"\"Validate that column_name is a safe identifier.\"\"\"\n    if not column_name:\n        raise ValueError(\"Column name cannot be empty\")\n    if not ATHENA_COLUMN_PATTERN.match(column_name):\n        raise ValueError(\n            f\"Invalid column name: '{column_name}'. \"\n            \"Only alphanumeric characters and underscores are allowed.\"\n        )\n\n\ndef _validate_s3_url(url: str) -> None:\n    \"\"\"Validate that URL is a proper S3 URL.\"\"\"\n    if not url:\n        raise ValueError(\"S3 URL cannot be empty\")\n    if not S3_URL_PATTERN.match(url):\n        raise ValueError(f\"Invalid S3 URL format: '{url}'. Expected format: 's3://bucket/path'\")\n\n\nclass AthenaDataLoader(ExternalDataLoader):\n    \"\"\"AWS Athena data loader implementation.\n\n    Executes SQL queries on Athena and reads results from S3 via PyArrow.\n    Output location is taken from the workgroup configuration or the output_location param.\n    Use ingest_to_workspace() to store results as parquet in the workspace.\n    \"\"\"\n\n    @staticmethod\n    def list_params() -> list[dict[str, Any]]:\n        params_list = [\n            {\"name\": \"aws_profile\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"AWS profile name from ~/.aws/credentials (if set, access key and secret are not required)\"},\n            {\"name\": \"aws_access_key_id\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"AWS access key ID (not required if using aws_profile)\"},\n            {\"name\": \"aws_secret_access_key\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"AWS secret access key (not required if using aws_profile)\"},\n            {\"name\": \"aws_session_token\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"AWS session token (required for temporary credentials)\"},\n            {\"name\": \"region_name\", \"type\": \"string\", \"required\": True, \"default\": \"us-east-1\", \"description\": \"AWS region name\"},\n            {\"name\": \"workgroup\", \"type\": \"string\", \"required\": False, \"default\": \"primary\", \"description\": \"Athena workgroup name (output location is fetched from workgroup configuration)\"},\n            {\"name\": \"output_location\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"S3 output location for query results (e.g., s3://bucket/path/). If empty, uses workgroup configuration.\"},\n            {\"name\": \"database\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"Default database/catalog to use for queries\"},\n            {\"name\": \"query_timeout\", \"type\": \"number\", \"required\": False, \"default\": 300, \"description\": \"Query execution timeout in seconds (default: 300 = 5 minutes)\"}\n        ]\n        return params_list\n\n    @staticmethod\n    def auth_instructions() -> str:\n        return \"\"\"**Example (profile):** aws_profile: `default` · region_name: `us-east-1` · workgroup: `primary` · database: `my_database`\n\n**Example (keys):** aws_access_key_id: `AKIA...` · aws_secret_access_key: `wJalr...` · region_name: `us-east-1`\n\n**Option 1 — AWS Profile (recommended):**\nSet `aws_profile` to a profile name from `~/.aws/credentials`. Set up with `aws configure --profile <name>`. No access key or secret needed.\n\n**Option 2 — Explicit Credentials:**\nEnter `aws_access_key_id` and `aws_secret_access_key` directly. Add `aws_session_token` for temporary credentials.\n\n**Required IAM permissions:** `athena:StartQueryExecution`, `athena:GetQueryExecution`, `athena:GetQueryResults`, `athena:GetWorkGroup`, `athena:ListDatabases`, `athena:ListTableMetadata`, plus S3 and Glue permissions on your data/results buckets.\"\"\"\n\n    def __init__(self, params: dict[str, Any]):\n        self.params = params\n\n        # Extract parameters\n        self.aws_profile = params.get(\"aws_profile\", \"\")\n        self.aws_access_key_id = params.get(\"aws_access_key_id\", \"\")\n        self.aws_secret_access_key = params.get(\"aws_secret_access_key\", \"\")\n        self.aws_session_token = params.get(\"aws_session_token\", \"\")\n        self.region_name = params.get(\"region_name\", \"us-east-1\")\n        self.workgroup = params.get(\"workgroup\", \"primary\")\n        self.output_location_param = params.get(\"output_location\", \"\")\n        self.database = params.get(\"database\", \"\")\n\n        # Normalize and validate query timeout\n        raw_timeout = params.get(\"query_timeout\", 300)\n        default_timeout = 300\n\n        if raw_timeout is None or (isinstance(raw_timeout, str) and not raw_timeout.strip()):\n            timeout_value = default_timeout\n        elif isinstance(raw_timeout, int):\n            timeout_value = raw_timeout\n        elif isinstance(raw_timeout, float):\n            timeout_value = int(raw_timeout)\n        elif isinstance(raw_timeout, str):\n            try:\n                # Allow values like \"300\" or \"300.0\"\n                timeout_value = int(float(raw_timeout.strip()))\n            except (ValueError, TypeError):\n                raise ValueError(\n                    f\"Invalid query_timeout value: {raw_timeout!r}. \"\n                    \"Expected a positive number (int or float-compatible string).\"\n                )\n        else:\n            raise ValueError(\n                f\"Invalid type for query_timeout: {type(raw_timeout).__name__}. \"\n                \"Expected int, float, str, or empty.\"\n            )\n\n        if timeout_value <= 0:\n            raise ValueError(\n                f\"query_timeout must be a positive integer number of seconds, got {timeout_value!r}.\"\n            )\n\n        self.query_timeout = timeout_value\n        # Initialize boto3 session and Athena client\n        if self.aws_profile:\n            # Use AWS profile from ~/.aws/credentials or ~/.aws/config (including SSO)\n            log.info(f\"Using AWS profile: {self.aws_profile}\")\n            try:\n                session = boto3.Session(profile_name=self.aws_profile, region_name=self.region_name)\n                self.athena_client = session.client('athena')\n\n                # Get credentials from profile for PyArrow S3 access\n                credentials = session.get_credentials()\n                if credentials is None:\n                    raise ValueError(\n                        f\"No credentials found for profile '{self.aws_profile}'. \"\n                        f\"If using SSO, run: aws sso login --profile {self.aws_profile}\"\n                    )\n\n                # get_frozen_credentials() can trigger SSO token refresh/validation\n                frozen_credentials = credentials.get_frozen_credentials()\n                self.aws_access_key_id = frozen_credentials.access_key\n                self.aws_secret_access_key = frozen_credentials.secret_key\n                self.aws_session_token = frozen_credentials.token or \"\"\n\n            except botocore.exceptions.SSOTokenLoadError as e:\n                raise ValueError(\n                    f\"SSO session expired or not logged in for profile '{self.aws_profile}'. \"\n                    f\"Please run: aws sso login --profile {self.aws_profile}\"\n                ) from e\n            except botocore.exceptions.UnauthorizedSSOTokenError as e:\n                raise ValueError(\n                    f\"SSO token is invalid or expired for profile '{self.aws_profile}'. \"\n                    f\"Please run: aws sso login --profile {self.aws_profile}\"\n                ) from e\n            except botocore.exceptions.TokenRetrievalError as e:\n                raise ValueError(\n                    f\"Failed to retrieve SSO token for profile '{self.aws_profile}'. \"\n                    f\"Please run: aws sso login --profile {self.aws_profile}\"\n                ) from e\n            except botocore.exceptions.NoCredentialsError as e:\n                raise ValueError(\n                    f\"No credentials found for profile '{self.aws_profile}'. \"\n                    f\"Check your ~/.aws/credentials or ~/.aws/config file. \"\n                    f\"If using SSO, run: aws sso login --profile {self.aws_profile}\"\n                ) from e\n            except botocore.exceptions.ProfileNotFound as e:\n                raise ValueError(\n                    f\"AWS profile '{self.aws_profile}' not found. \"\n                    f\"Check your ~/.aws/credentials or ~/.aws/config file. \"\n                    f\"Available profiles can be listed with: aws configure list-profiles\"\n                ) from e\n            except Exception as e:\n                # Catch any other credential-related errors\n                error_msg = str(e).lower()\n                if 'sso' in error_msg or 'token' in error_msg or 'expired' in error_msg:\n                    raise ValueError(\n                        f\"AWS credential error for profile '{self.aws_profile}'. \"\n                        f\"If using SSO, run: aws sso login --profile {self.aws_profile}\\n\"\n                        f\"Original error: {e}\"\n                    ) from e\n                raise\n        else:\n            # Use explicit credentials\n            if not self.aws_access_key_id or not self.aws_secret_access_key:\n                raise ValueError(\n                    \"Either 'aws_profile' or both 'aws_access_key_id' and 'aws_secret_access_key' must be provided.\"\n                )\n\n            session_kwargs = {\n                'aws_access_key_id': self.aws_access_key_id,\n                'aws_secret_access_key': self.aws_secret_access_key,\n                'region_name': self.region_name\n            }\n            if self.aws_session_token:\n                session_kwargs['aws_session_token'] = self.aws_session_token\n\n            self.athena_client = boto3.client('athena', **session_kwargs)\n\n        # Get output location: prefer user-provided, then try workgroup\n        self.output_location = self._get_output_location()\n\n        # Setup PyArrow S3 filesystem for reading results\n        self.s3_fs = pa_fs.S3FileSystem(\n            access_key=self.aws_access_key_id,\n            secret_key=self.aws_secret_access_key,\n            session_token=self.aws_session_token if self.aws_session_token else None,\n            region=self.region_name\n        )\n        log.info(\"Initialized PyArrow S3 filesystem for Athena results\")\n\n    def _get_output_location(self) -> str:\n        \"\"\"Get the output location for query results.\n\n        Priority: user-provided output_location > workgroup configuration.\n        \"\"\"\n        # If user provided an output location, validate and use it\n        if self.output_location_param:\n            _validate_s3_url(self.output_location_param)\n            # Normalize to ensure trailing slash for directory path\n            output_location = self.output_location_param.rstrip('/') + '/'\n            log.info(f\"Using user-provided output location: {output_location}\")\n            return output_location\n\n        # Try to get from workgroup configuration\n        try:\n            response = self.athena_client.get_work_group(WorkGroup=self.workgroup)\n            workgroup = response.get('WorkGroup', {})\n            workgroup_config = workgroup.get('Configuration', {})\n            result_config = workgroup_config.get('ResultConfiguration', {})\n            output_location = result_config.get('OutputLocation', '')\n\n            if output_location:\n                log.info(f\"Using output location from workgroup '{self.workgroup}': {output_location}\")\n                return output_location\n            else:\n                log.warning(\n                    f\"Workgroup '{self.workgroup}' has no output location configured. \"\n                    \"Note: Athena console 'Settings' are client-side only. \"\n                    \"Configure output location in Workgroups → Edit → Query result configuration.\"\n                )\n        except botocore.exceptions.ClientError as e:\n            log.error(f\"Failed to get workgroup configuration: {e}\")\n\n        raise ValueError(\n            f\"No output location available. Either:\\n\"\n            f\"1. Provide 'output_location' parameter (e.g., 's3://your-bucket/athena-results/'), or\\n\"\n            f\"2. Configure an S3 output location in Athena workgroup '{self.workgroup}' settings.\"\n        )\n\n    def _execute_query(self, query: str) -> str:\n        \"\"\"Execute an Athena query and wait for completion.\n\n        Returns the S3 path to the query results (CSV file).\n        \"\"\"\n        # Start query execution\n        start_params = {\n            'QueryString': query,\n            'WorkGroup': self.workgroup,\n            'ResultConfiguration': {\n                'OutputLocation': self.output_location\n            }\n        }\n\n        if self.database:\n            start_params['QueryExecutionContext'] = {'Database': self.database}\n\n        response = self.athena_client.start_query_execution(**start_params)\n        query_execution_id = response['QueryExecutionId']\n        log.info(f\"Started Athena query execution: {query_execution_id}\")\n\n        # Poll for query completion\n        start_time = time.time()\n        while True:\n            elapsed = time.time() - start_time\n            if elapsed > self.query_timeout:\n                # Try to cancel the query. This is a best-effort operation: failures are logged\n                # but do not prevent raising the timeout error for the caller.\n                try:\n                    self.athena_client.stop_query_execution(QueryExecutionId=query_execution_id)\n                except Exception:\n                    log.warning(\n                        \"Failed to cancel Athena query execution %s after timeout\",\n                        query_execution_id,\n                        exc_info=True,\n                    )\n                raise TimeoutError(\n                    f\"Query execution timed out after {self.query_timeout} seconds. \"\n                    \"Consider increasing the query_timeout parameter.\"\n                )\n\n            response = self.athena_client.get_query_execution(QueryExecutionId=query_execution_id)\n            state = response['QueryExecution']['Status']['State']\n\n            if state == 'SUCCEEDED':\n                output_location = response['QueryExecution']['ResultConfiguration']['OutputLocation']\n                log.info(f\"Query completed successfully. Results at: {output_location}\")\n                return output_location\n            elif state == 'FAILED':\n                reason = response['QueryExecution']['Status'].get('StateChangeReason', 'Unknown error')\n                raise RuntimeError(f\"Athena query failed: {reason}\")\n            elif state == 'CANCELLED':\n                raise RuntimeError(\"Athena query was cancelled\")\n\n            # Wait before polling again (exponential backoff with cap)\n            wait_time = min(2 ** (elapsed // 10), 10)\n            time.sleep(wait_time)\n\n    def fetch_data_as_arrow(\n        self,\n        source_table: str,\n        size: int = 1000000,\n        sort_columns: list[str] | None = None,\n        sort_order: str = 'asc'\n    ) -> pa.Table:\n        \"\"\"\n        Fetch data from Athena as a PyArrow Table.\n        \n        Executes the query on Athena and reads the CSV results from S3\n        using PyArrow's S3 filesystem.\n        \"\"\"\n        if not source_table:\n            raise ValueError(\"source_table must be provided\")\n        \n        _validate_athena_table_name(source_table)\n        base_query = f\"SELECT * FROM {source_table}\"\n        \n        # Add ORDER BY if sort columns specified\n        order_by_clause = \"\"\n        if sort_columns and len(sort_columns) > 0:\n            for col in sort_columns:\n                _validate_column_name(col)\n            order_direction = \"DESC\" if sort_order == 'desc' else \"ASC\"\n            sanitized_cols = [f'\"{col}\" {order_direction}' for col in sort_columns]\n            order_by_clause = f\" ORDER BY {', '.join(sanitized_cols)}\"\n        \n        query = f\"{base_query}{order_by_clause} LIMIT {size}\"\n        \n        log.info(f\"Executing Athena query: {query[:200]}...\")\n        \n        # Execute query and get result location\n        result_location = self._execute_query(query)\n        _validate_s3_url(result_location)\n        \n        log.info(f\"Reading Athena results from: {result_location}\")\n        \n        # Parse S3 URL: s3://bucket/key -> bucket/key\n        s3_path = result_location[5:] if result_location.startswith(\"s3://\") else result_location\n        \n        # Athena outputs CSV files\n        with self.s3_fs.open_input_file(s3_path) as f:\n            arrow_table = pa_csv.read_csv(f)\n        \n        log.info(f\"Fetched {arrow_table.num_rows} rows from Athena [Arrow-native]\")\n        \n        return arrow_table\n\n    def list_tables(self, table_filter: str | None = None) -> list[dict[str, Any]]:\n        \"\"\"List tables from Athena catalog (Glue Data Catalog).\"\"\"\n        results = []\n\n        try:\n            # List databases\n            databases_response = self.athena_client.list_databases(CatalogName='AwsDataCatalog')\n            databases = databases_response.get('DatabaseList', [])\n\n            # If a specific database is configured, filter to just that one\n            if self.database:\n                databases = [db for db in databases if db['Name'] == self.database]\n\n            for db in databases[:10]:  # Limit to 10 databases\n                db_name = db['Name']\n\n                try:\n                    # List tables in this database\n                    tables_response = self.athena_client.list_table_metadata(\n                        CatalogName='AwsDataCatalog',\n                        DatabaseName=db_name,\n                        MaxResults=50\n                    )\n\n                    for table in tables_response.get('TableMetadataList', []):\n                        table_name = table['Name']\n                        full_table_name = f\"{db_name}.{table_name}\"\n\n                        # Apply filter if provided\n                        if table_filter and table_filter.lower() not in full_table_name.lower():\n                            continue\n\n                        # Get column information\n                        columns = []\n                        for col in table.get('Columns', [])[:20]:  # Limit columns\n                            columns.append({\n                                'name': col['Name'],\n                                'type': col.get('Type', 'unknown')\n                            })\n\n                        # Add partition columns\n                        for col in table.get('PartitionKeys', []):\n                            columns.append({\n                                'name': col['Name'],\n                                'type': col.get('Type', 'unknown') + ' (partition)'\n                            })\n\n                        results.append({\n                            \"name\": full_table_name,\n                            \"metadata\": {\n                                \"row_count\": 0,  # Athena doesn't provide row counts directly\n                                \"columns\": columns,\n                                \"sample_rows\": [],  # Would require query execution\n                                \"table_type\": table.get('TableType', 'EXTERNAL_TABLE')\n                            }\n                        })\n\n                        if len(results) >= 100:\n                            log.info(\"Reached 100 table limit, stopping enumeration\")\n                            return results\n\n                except botocore.exceptions.ClientError as e:\n                    log.warning(f\"Error listing tables in database {db_name}: {e}\")\n                    continue\n\n        except botocore.exceptions.ClientError as e:\n            log.error(f\"Error listing Athena databases: {e}\")\n\n        log.info(f\"Returning {len(results)} tables\")\n        return results\n"
  },
  {
    "path": "py-src/data_formulator/data_loader/azure_blob_data_loader.py",
    "content": "import json\nimport logging\nimport pandas as pd\nimport pyarrow as pa\nimport pyarrow.parquet as pq\nimport pyarrow.csv as pa_csv\nfrom azure.storage.blob import BlobServiceClient\nfrom azure.identity import DefaultAzureCredential\nfrom pyarrow import fs as pa_fs\n\nfrom data_formulator.data_loader.external_data_loader import ExternalDataLoader, sanitize_table_name\nfrom typing import Any\n\nlogger = logging.getLogger(__name__)\n\nclass AzureBlobDataLoader(ExternalDataLoader):\n\n    @staticmethod\n    def list_params() -> list[dict[str, Any]]:\n        params_list = [\n            {\"name\": \"account_name\", \"type\": \"string\", \"required\": True, \"default\": \"\", \"description\": \"Azure storage account name\"},\n            {\"name\": \"container_name\", \"type\": \"string\", \"required\": True, \"default\": \"\", \"description\": \"Azure blob container name\"},\n            {\"name\": \"connection_string\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"Azure storage connection string (alternative to account_name + credentials)\"},\n            {\"name\": \"credential_chain\", \"type\": \"string\", \"required\": False, \"default\": \"cli;managed_identity;env\", \"description\": \"Ordered list of Azure credential providers (cli;managed_identity;env)\"},\n            {\"name\": \"account_key\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"Azure storage account key\"},\n            {\"name\": \"sas_token\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"Azure SAS token\"},\n            {\"name\": \"endpoint\", \"type\": \"string\", \"required\": False, \"default\": \"blob.core.windows.net\", \"description\": \"Azure endpoint override\"}\n        ]\n        return params_list\n    \n    @staticmethod\n    def auth_instructions() -> str:\n        return \"\"\"**Example (conn string):** connection_string: `DefaultEndpointsProtocol=https;AccountName=...` · container_name: `mydata`\n\n**Example (account key):** account_name: `mystorageacct` · container_name: `mydata` · account_key: `abc123...`\n\n**Option 1 — Connection String (simplest):**\nGet it from Azure Portal → Storage Account → Access keys. Enter in `connection_string`; `account_name` can be omitted.\n\n**Option 2 — Account Key:**\nFrom Azure Portal → Storage Account → Access keys. Use `account_name` + `account_key`.\n\n**Option 3 — SAS Token (recommended for limited access):**\nGenerate from Azure Portal → Storage Account → Shared access signature. Use `account_name` + `sas_token`. Can be time-limited and permission-scoped.\n\n**Option 4 — Azure CLI / Managed Identity (most secure):**\nJust provide `account_name` + `container_name`. Requires `az login` or Managed Identity.\n\n**Supported formats:** CSV, Parquet, JSON, JSONL\"\"\"\n\n    def __init__(self, params: dict[str, Any]):\n        self.params = params\n\n        # Extract parameters\n        self.account_name = params.get(\"account_name\", \"\")\n        self.container_name = params.get(\"container_name\", \"\")\n        self.connection_string = params.get(\"connection_string\", \"\")\n        self.credential_chain = params.get(\"credential_chain\", \"cli;managed_identity;env\")\n        self.account_key = params.get(\"account_key\", \"\")\n        self.sas_token = params.get(\"sas_token\", \"\")\n        self.endpoint = params.get(\"endpoint\", \"blob.core.windows.net\")\n        \n        # Setup PyArrow Azure filesystem\n        if self.account_key:\n            self.azure_fs = pa_fs.AzureFileSystem(\n                account_name=self.account_name,\n                account_key=self.account_key\n            )\n        elif self.connection_string:\n            self.azure_fs = pa_fs.AzureFileSystem.from_connection_string(self.connection_string)\n        else:\n            # Use default credential chain\n            self.azure_fs = pa_fs.AzureFileSystem(account_name=self.account_name)\n        \n        logger.info(f\"Initialized PyArrow Azure filesystem for account: {self.account_name}\")\n\n    def _azure_path(self, azure_url: str) -> str:\n        \"\"\"Convert Azure URL to path for PyArrow (container/blob).\"\"\"\n        if azure_url.startswith(\"az://\"):\n            parts = azure_url[5:].split(\"/\", 1)\n            return parts[1] if len(parts) > 1 else azure_url\n        return f\"{self.container_name}/{azure_url}\"\n\n    def _read_sample(self, azure_url: str, limit: int) -> pd.DataFrame:\n        \"\"\"Read sample rows from an Azure blob using PyArrow. Returns a pandas DataFrame.\"\"\"\n        azure_path = self._azure_path(azure_url)\n        if azure_url.lower().endswith('.parquet'):\n            table = pq.read_table(azure_path, filesystem=self.azure_fs)\n        elif azure_url.lower().endswith('.csv'):\n            with self.azure_fs.open_input_file(azure_path) as f:\n                table = pa_csv.read_csv(f)\n        elif azure_url.lower().endswith('.json') or azure_url.lower().endswith('.jsonl'):\n            import pyarrow.json as pa_json\n            with self.azure_fs.open_input_file(azure_path) as f:\n                table = pa_json.read_json(f)\n        else:\n            raise ValueError(f\"Unsupported file type: {azure_url}\")\n        if table.num_rows > limit:\n            table = table.slice(0, limit)\n        return table.to_pandas()\n\n    def fetch_data_as_arrow(\n        self,\n        source_table: str,\n        size: int = 1000000,\n        sort_columns: list[str] | None = None,\n        sort_order: str = 'asc'\n    ) -> pa.Table:\n        \"\"\"\n        Fetch data from Azure Blob as a PyArrow Table.\n        \n        For files (parquet, csv), reads directly using PyArrow's Azure filesystem.\n        \"\"\"\n        if not source_table:\n            raise ValueError(\"source_table (Azure blob URL) must be provided\")\n        \n        azure_url = source_table\n        azure_path = self._azure_path(azure_url)\n\n        logger.info(\"Reading Azure blob via PyArrow: %s\", azure_url)\n        \n        if azure_url.lower().endswith('.parquet'):\n            arrow_table = pq.read_table(azure_path, filesystem=self.azure_fs)\n        elif azure_url.lower().endswith('.csv'):\n            with self.azure_fs.open_input_file(azure_path) as f:\n                arrow_table = pa_csv.read_csv(f)\n        elif azure_url.lower().endswith('.json') or azure_url.lower().endswith('.jsonl'):\n            import pyarrow.json as pa_json\n            with self.azure_fs.open_input_file(azure_path) as f:\n                arrow_table = pa_json.read_json(f)\n        else:\n            raise ValueError(f\"Unsupported file type: {azure_url}\")\n        \n        # Apply sorting if specified\n        if sort_columns and len(sort_columns) > 0:\n            df = arrow_table.to_pandas()\n            ascending = sort_order != 'desc'\n            df = df.sort_values(by=sort_columns, ascending=ascending)\n            arrow_table = pa.Table.from_pandas(df, preserve_index=False)\n        \n        # Apply size limit\n        if arrow_table.num_rows > size:\n            arrow_table = arrow_table.slice(0, size)\n        \n        logger.info(f\"Fetched {arrow_table.num_rows} rows from Azure Blob [Arrow-native]\")\n        \n        return arrow_table\n\n    def list_tables(self, table_filter: str | None = None) -> list[dict[str, Any]]:\n        # Create blob service client based on authentication method\n        if self.connection_string:\n            blob_service_client = BlobServiceClient.from_connection_string(self.connection_string)\n        elif self.account_key:\n            blob_service_client = BlobServiceClient(\n                account_url=f\"https://{self.account_name}.{self.endpoint}\",\n                credential=self.account_key\n            )\n        elif self.sas_token:\n            blob_service_client = BlobServiceClient(\n                account_url=f\"https://{self.account_name}.{self.endpoint}\",\n                credential=self.sas_token\n            )\n        else:\n            # Use default credential chain\n            from azure.identity import DefaultAzureCredential\n            credential = DefaultAzureCredential()\n            blob_service_client = BlobServiceClient(\n                account_url=f\"https://{self.account_name}.{self.endpoint}\",\n                credential=credential\n            )\n        \n        container_client = blob_service_client.get_container_client(self.container_name)\n        \n        # List blobs in the container\n        blob_list = container_client.list_blobs()        \n        results = []\n        \n        for blob in blob_list:\n            blob_name = blob.name\n            \n            # Skip directories and non-data files\n            if blob_name.endswith('/') or not self._is_supported_file(blob_name):\n                continue\n            \n            # Apply table filter if provided\n            if table_filter and table_filter.lower() not in blob_name.lower():\n                continue\n            \n            # Create Azure blob URL\n            azure_url = f\"az://{self.account_name}.{self.endpoint}/{self.container_name}/{blob_name}\"\n            \n            try:\n                sample_df = self._read_sample(azure_url, 10)\n\n                columns = [{\n                    'name': col,\n                    'type': str(sample_df[col].dtype)\n                } for col in sample_df.columns]\n\n                sample_rows = json.loads(sample_df.to_json(orient=\"records\"))\n                row_count = self._estimate_row_count(azure_url, blob)\n\n                table_metadata = {\n                    \"row_count\": row_count,\n                    \"columns\": columns,\n                    \"sample_rows\": sample_rows\n                }\n\n                results.append({\n                    \"name\": azure_url,\n                    \"metadata\": table_metadata\n                })\n            except Exception as e:\n                logger.warning(\"Error reading %s: %s\", azure_url, e)\n                continue\n        \n        return results\n    \n    def _is_supported_file(self, blob_name: str) -> bool:\n        \"\"\"Check if the file type is supported (PyArrow can read it).\"\"\"\n        supported_extensions = ['.csv', '.parquet', '.json', '.jsonl']\n        return any(blob_name.lower().endswith(ext) for ext in supported_extensions)\n\n    def _estimate_row_count(self, azure_url: str, blob_properties=None) -> int:\n        \"\"\"Estimate the number of rows in a file.\"\"\"\n        try:\n            file_extension = azure_url.lower().split('.')[-1]\n\n            if file_extension == 'parquet':\n                try:\n                    azure_path = self._azure_path(azure_url)\n                    pf = pq.ParquetFile(azure_path, filesystem=self.azure_fs)\n                    return pf.metadata.num_rows\n                except Exception as e:\n                    logger.debug(\"Failed to get parquet row count for %s: %s\", azure_url, e)\n                    return 0\n\n            if file_extension in ['csv', 'json', 'jsonl']:\n                return self._estimate_rows_by_sampling(azure_url, blob_properties, file_extension)\n\n            return 0\n        except Exception as e:\n            logger.warning(\"Error estimating row count for %s: %s\", azure_url, e)\n            return 0\n\n    def _estimate_rows_by_sampling(self, azure_url: str, blob_properties, file_extension: str) -> int:\n        \"\"\"Estimate row count for text-based files using PyArrow sampling.\"\"\"\n        try:\n            file_size_bytes = None\n            if blob_properties and hasattr(blob_properties, 'size'):\n                file_size_bytes = blob_properties.size\n\n            if file_size_bytes is None:\n                return self._estimate_by_row_sampling(azure_url, file_extension)\n\n            sample_size = min(10000, max(1000, file_size_bytes // 100))\n            try:\n                sample_df = self._read_sample(azure_url, sample_size)\n                sample_rows = len(sample_df)\n                if sample_rows == 0:\n                    return 0\n                if sample_rows < sample_size:\n                    return sample_rows\n\n                min_bytes_per_row = 50 if file_extension == 'csv' else 100\n                estimated_total_rows = int(file_size_bytes / max(file_size_bytes / sample_rows, min_bytes_per_row))\n                estimated_total_rows = max(sample_rows, min(estimated_total_rows, file_size_bytes // 10))\n                return estimated_total_rows\n            except Exception as e:\n                logger.debug(\"Size-based estimation failed for %s: %s\", azure_url, e)\n                return self._estimate_by_row_sampling(azure_url, file_extension)\n        except Exception as e:\n            logger.warning(\"Error in sampling estimation for %s: %s\", azure_url, e)\n            return 0\n\n    def _estimate_by_row_sampling(self, azure_url: str, file_extension: str) -> int:\n        \"\"\"Estimate row count by reading a capped sample with PyArrow.\"\"\"\n        try:\n            test_limit = 50000\n            sample_df = self._read_sample(azure_url, test_limit)\n            return len(sample_df)\n        except Exception as e:\n            logger.debug(\"Row sampling failed for %s: %s\", azure_url, e)\n            return 0"
  },
  {
    "path": "py-src/data_formulator/data_loader/bigquery_data_loader.py",
    "content": "import logging\nimport re\nfrom typing import Any\nimport pyarrow as pa\n\nfrom data_formulator.data_loader.external_data_loader import ExternalDataLoader, sanitize_table_name\n\nfrom google.cloud import bigquery\nfrom google.oauth2 import service_account\n\nlog = logging.getLogger(__name__)\n\nclass BigQueryDataLoader(ExternalDataLoader):\n    \"\"\"BigQuery data loader implementation\"\"\"\n    \n    @staticmethod\n    def list_params() -> list[dict[str, Any]]:\n        return [\n            {\"name\": \"project_id\", \"type\": \"text\", \"required\": True, \"description\": \"Google Cloud Project ID\", \"default\": \"\"},\n            {\"name\": \"dataset_id\", \"type\": \"text\", \"required\": False, \"description\": \"Dataset ID(s) - leave empty for all, or specify one (e.g., 'billing') or multiple separated by commas (e.g., 'billing,enterprise_collected,ga_api')\", \"default\": \"\"},\n            {\"name\": \"credentials_path\", \"type\": \"text\", \"required\": False, \"description\": \"Path to service account JSON file (optional)\", \"default\": \"\"},\n            {\"name\": \"location\", \"type\": \"text\", \"required\": False, \"description\": \"BigQuery location (default: US)\", \"default\": \"US\"}\n        ]\n\n    @staticmethod\n    def auth_instructions() -> str:\n        return \"\"\"**Example:** project_id: `my-gcp-project` · dataset_id: `analytics` · credentials_path: `/path/to/key.json` · location: `US`\n\n**Option 1 — Application Default Credentials (recommended):**\nInstall [Google Cloud SDK](https://cloud.google.com/sdk/docs/install), then run `gcloud auth application-default login`. Leave `credentials_path` empty.\n\n**Option 2 — Service Account Key File:**\nCreate a service account in Google Cloud Console, download the JSON key, and enter the full path in `credentials_path`. Grant the account **BigQuery Data Viewer** and **BigQuery Job User** roles.\n\n**Option 3 — Environment Variable:**\nSet `GOOGLE_APPLICATION_CREDENTIALS` to your service account JSON file path. Leave `credentials_path` empty.\"\"\"\n\n    def __init__(self, params: dict[str, Any]):\n        self.params = params\n        self.project_id = params.get(\"project_id\")\n        self.dataset_ids = [d.strip() for d in params.get(\"dataset_id\", \"\").split(\",\") if d.strip()]\n        self.location = params.get(\"location\", \"US\")\n        \n        # Initialize BigQuery client\n        if params.get(\"credentials_path\"):\n            credentials = service_account.Credentials.from_service_account_file(params[\"credentials_path\"])\n            self.client = bigquery.Client(\n                project=self.project_id, \n                credentials=credentials, \n                location=self.location\n            )\n        else:\n            # Use default credentials (ADC)\n            self.client = bigquery.Client(\n                project=self.project_id, \n                location=self.location\n            )\n        \n        log.info(f\"Successfully connected to BigQuery project: {self.project_id}\")\n\n    def list_tables(self, table_filter: str | None = None) -> list[dict[str, Any]]:\n        \"\"\"List tables from BigQuery datasets\"\"\"\n        results = []\n        \n        try:\n            log.info(f\"Listing BigQuery datasets for project: {self.project_id}\")\n            \n            # List datasets with timeout\n            datasets = list(self.client.list_datasets(max_results=50))\n            log.info(f\"Found {len(datasets)} datasets\")\n            \n            # Limit to first 10 datasets if no specific dataset is specified\n            if not self.dataset_ids:\n                datasets = datasets[:10]\n            \n            for dataset in datasets:\n                dataset_id = dataset.dataset_id\n                \n                # Skip if we have specific datasets and this isn't one of them\n                if self.dataset_ids and dataset_id not in self.dataset_ids:\n                    continue\n                \n                try:\n                    log.info(f\"Processing dataset: {dataset_id}\")\n                    # List tables in dataset with limit\n                    tables = list(self.client.list_tables(dataset.reference, max_results=20))\n                    \n                    for table in tables:\n                        full_table_name = f\"{self.project_id}.{dataset_id}.{table.table_id}\"\n                        \n                        # Apply filter if provided\n                        if table_filter and table_filter.lower() not in table.table_id.lower():\n                            continue\n                        \n                        # Get basic table info without full schema for performance\n                        try:\n                            table_ref = self.client.get_table(table.reference)\n                            columns = [{\"name\": field.name, \"type\": field.field_type} for field in table_ref.schema[:10]]  # Limit columns shown\n                            \n                            results.append({\n                                \"name\": full_table_name,\n                                \"metadata\": {\n                                    \"row_count\": table_ref.num_rows or 0,\n                                    \"columns\": columns,\n                                    \"sample_rows\": []  # Empty for performance, can be populated later\n                                }\n                            })\n                        except Exception as e:\n                            log.warning(f\"Error getting schema for table {full_table_name}: {e}\")\n                            # Add table without detailed schema\n                            results.append({\n                                \"name\": full_table_name,\n                                \"metadata\": {\n                                    \"row_count\": 0,\n                                    \"columns\": [],\n                                    \"sample_rows\": []\n                                }\n                            })\n                        \n                        # Limit total results for performance\n                        if len(results) >= 100:\n                            log.info(\"Reached 100 table limit, stopping enumeration\")\n                            return results\n                        \n                except Exception as e:\n                    log.warning(f\"Error accessing dataset {dataset_id}: {e}\")\n                    continue\n                    \n        except Exception as e:\n            log.error(f\"Error listing BigQuery tables: {e}\")\n            \n        log.info(f\"Returning {len(results)} tables\")\n        return results\n\n    def fetch_data_as_arrow(\n        self,\n        source_table: str,\n        size: int = 1000000,\n        sort_columns: list[str] | None = None,\n        sort_order: str = 'asc'\n    ) -> pa.Table:\n        \"\"\"\n        Fetch data from BigQuery as a PyArrow Table using native Arrow support.\n        \n        BigQuery's Python client provides .to_arrow() for efficient Arrow-native\n        data transfer, avoiding pandas conversion overhead.\n        \"\"\"\n        if not source_table:\n            raise ValueError(\"source_table must be provided\")\n        \n        # Get table schema to handle nested fields\n        table_ref = self.client.get_table(source_table)\n        select_parts = self._build_select_parts(table_ref, source_table)\n        base_query = f\"SELECT {', '.join(select_parts)} FROM `{source_table}`\"\n        \n        # Add ORDER BY if sort columns specified\n        order_by_clause = \"\"\n        if sort_columns and len(sort_columns) > 0:\n            order_direction = \"DESC\" if sort_order == 'desc' else \"ASC\"\n            sanitized_cols = [f'`{col}` {order_direction}' for col in sort_columns]\n            order_by_clause = f\" ORDER BY {', '.join(sanitized_cols)}\"\n        \n        query = f\"{base_query}{order_by_clause} LIMIT {size}\"\n        \n        log.info(f\"Executing BigQuery query: {query[:200]}...\")\n        \n        # Execute query and get Arrow table directly (no pandas conversion)\n        query_job = self.client.query(query)\n        arrow_table = query_job.to_arrow()\n        \n        log.info(f\"Fetched {arrow_table.num_rows} rows from BigQuery [Arrow-native]\")\n        \n        return arrow_table\n    \n    def _build_select_parts(self, table_ref, table_name: str) -> list[str]:\n        \"\"\"Build SELECT parts handling nested BigQuery fields.\"\"\"\n        select_parts: list[str] = []\n        used_aliases: dict[str, str] = {}\n\n        def build_alias(field_path: str) -> str:\n            alias = field_path.replace('.', '_')\n            alias = re.sub(r'[^0-9a-zA-Z_]', '_', alias)\n            alias = re.sub(r'_+', '_', alias).strip('_') or \"col\"\n            if not alias[0].isalpha() and alias[0] != '_':\n                alias = f\"_{alias}\"\n            base_alias = alias\n            counter = 1\n            while alias in used_aliases:\n                alias = f\"{base_alias}_{counter}\"\n                counter += 1\n            used_aliases[alias] = field_path\n            return alias\n\n        def add_field(field_path: str):\n            alias = build_alias(field_path)\n            select_parts.append(f\"`{table_name}`.{field_path} AS `{alias}`\")\n\n        def process_field(field, parent_path: str = \"\"):\n            current_path = f\"{parent_path}.{field.name}\" if parent_path else field.name\n            if field.field_type == \"RECORD\" and field.mode != \"REPEATED\":\n                for subfield in field.fields:\n                    process_field(subfield, current_path)\n            else:\n                add_field(current_path)\n\n        for field in table_ref.schema:\n            process_field(field)\n\n        return select_parts if select_parts else [\"*\"]\n"
  },
  {
    "path": "py-src/data_formulator/data_loader/external_data_loader.py",
    "content": "from abc import ABC, abstractmethod\nfrom typing import Any, TYPE_CHECKING\nimport pandas as pd\nimport pyarrow as pa\nimport re\nimport logging\n\nif TYPE_CHECKING:\n    from data_formulator.datalake.workspace import Workspace\n    from data_formulator.datalake.metadata import TableMetadata\n\nlogger = logging.getLogger(__name__)\n\n# Sensitive parameter names that should be excluded from stored metadata\nSENSITIVE_PARAMS = {'password', 'api_key', 'secret', 'token', 'access_key', 'secret_key'}\n\n\ndef sanitize_table_name(name_as: str) -> str:\n    if not name_as:\n        raise ValueError(\"Table name cannot be empty\")\n    \n    # Remove any SQL injection attempts\n    name_as = name_as.replace(\";\", \"\").replace(\"--\", \"\").replace(\"/*\", \"\").replace(\"*/\", \"\")\n    \n    # Replace invalid characters with underscores\n    # This includes special characters, spaces, dots, dashes, and other non-alphanumeric chars\n    sanitized = re.sub(r'[^a-zA-Z0-9_]', '_', name_as)\n    \n    # Ensure the name starts with a letter or underscore\n    if not sanitized[0].isalpha() and sanitized[0] != '_':\n        sanitized = '_' + sanitized\n    \n    # Ensure the name is not a SQL keyword\n    sql_keywords = {\n        'SELECT', 'FROM', 'WHERE', 'GROUP', 'BY', 'ORDER', 'HAVING', 'LIMIT',\n        'OFFSET', 'JOIN', 'INNER', 'LEFT', 'RIGHT', 'FULL', 'OUTER', 'ON',\n        'AND', 'OR', 'NOT', 'NULL', 'TRUE', 'FALSE', 'UNION', 'ALL', 'DISTINCT',\n        'INSERT', 'UPDATE', 'DELETE', 'CREATE', 'DROP', 'TABLE', 'VIEW', 'INDEX',\n        'ALTER', 'ADD', 'COLUMN', 'PRIMARY', 'KEY', 'FOREIGN', 'REFERENCES',\n        'CONSTRAINT', 'DEFAULT', 'CHECK', 'UNIQUE', 'CASCADE', 'RESTRICT'\n    }\n    \n    if sanitized.upper() in sql_keywords:\n        sanitized = '_' + sanitized\n    \n    # Ensure the name is not too long (common SQL limit is 63 characters)\n    if len(sanitized) > 63:\n        sanitized = sanitized[:63]\n    \n    return sanitized\n\nclass ExternalDataLoader(ABC):\n    \"\"\"\n    Abstract base class for external data loaders.\n    \n    Data loaders fetch data from external sources (databases, cloud storage, etc.)\n    and store data as parquet files in the workspace. DuckDB is not used for storage;\n    it is only the computation engine elsewhere in the application.\n    \n    Ingest flow: External Source → PyArrow Table → Parquet (workspace).\n    \n    - `fetch_data_as_arrow()`: each loader must implement; fetches data as PyArrow Table.\n    - `ingest_to_workspace()`: fetches via Arrow and writes parquet to the given workspace.\n    \"\"\"\n    \n    def get_safe_params(self) -> dict[str, Any]:\n        \"\"\"\n        Get connection parameters with sensitive values removed.\n        \n        Returns:\n            Dictionary of parameters safe to store in metadata\n        \"\"\"\n        if not hasattr(self, 'params'):\n            return {}\n        \n        return {\n            k: v for k, v in self.params.items()\n            if k.lower() not in SENSITIVE_PARAMS\n        }\n    \n    @abstractmethod\n    def fetch_data_as_arrow(\n        self,\n        source_table: str,\n        size: int = 1000000,\n        sort_columns: list[str] | None = None,\n        sort_order: str = 'asc'\n    ) -> pa.Table:\n        \"\"\"\n        Fetch data from the external source as a PyArrow Table.\n        \n        This is the primary method for data fetching. Each loader must implement\n        this method to fetch data directly as Arrow format for optimal performance.\n        Only source_table is supported (no raw query strings) to avoid security\n        and dialect diversity issues across loaders.\n        \n        Args:\n            source_table: Full table name (or table identifier) to fetch from\n            size: Maximum number of rows to fetch\n            sort_columns: Columns to sort by before limiting\n            sort_order: Sort direction ('asc' or 'desc')\n            \n        Returns:\n            PyArrow Table with the fetched data\n            \n        Raises:\n            ValueError: If source_table is not provided\n            NotImplementedError: If the loader doesn't support this method yet\n        \"\"\"\n        pass\n    \n    def fetch_data_as_dataframe(\n        self,\n        source_table: str,\n        size: int = 1000000,\n        sort_columns: list[str] | None = None,\n        sort_order: str = 'asc'\n    ) -> pd.DataFrame:\n        \"\"\"\n        Fetch data from the external source as a pandas DataFrame.\n        \n        This method converts the Arrow table to pandas. For better performance,\n        prefer using `fetch_data_as_arrow()` directly when possible.\n        \n        Args:\n            source_table: Full table name to fetch from\n            size: Maximum number of rows to fetch\n            sort_columns: Columns to sort by before limiting\n            sort_order: Sort direction ('asc' or 'desc')\n            \n        Returns:\n            pandas DataFrame with the fetched data\n        \"\"\"\n        arrow_table = self.fetch_data_as_arrow(\n            source_table=source_table,\n            size=size,\n            sort_columns=sort_columns,\n            sort_order=sort_order,\n        )\n        return arrow_table.to_pandas()\n    \n    def ingest_to_workspace(\n        self,\n        workspace: \"Workspace\",\n        table_name: str,\n        source_table: str,\n        size: int = 1000000,\n        sort_columns: list[str] | None = None,\n        sort_order: str = 'asc'\n    ) -> \"TableMetadata\":\n        \"\"\"\n        Fetch data from external source and store as parquet in workspace.\n        \n        Uses PyArrow for efficient data transfer: External Source → Arrow → Parquet.\n        This avoids pandas conversion overhead entirely.\n        \n        Args:\n            workspace: The workspace to store data in\n            table_name: Name for the table in the workspace\n            source_table: Full table name to fetch from\n            size: Maximum number of rows to fetch\n            sort_columns: Columns to sort by before limiting\n            sort_order: Sort direction ('asc' or 'desc')\n            \n        Returns:\n            TableMetadata for the created parquet file\n        \"\"\"\n        # Fetch data as Arrow table (efficient, no pandas conversion)\n        arrow_table = self.fetch_data_as_arrow(\n            source_table=source_table,\n            size=size,\n            sort_columns=sort_columns,\n            sort_order=sort_order,\n        )\n\n        # Prepare loader metadata\n        loader_metadata = {\n            \"loader_type\": self.__class__.__name__,\n            \"loader_params\": self.get_safe_params(),\n            \"source_table\": source_table,\n        }\n\n        # Write Arrow table directly to parquet (no pandas conversion)\n        table_metadata = workspace.write_parquet_from_arrow(\n            table=arrow_table,\n            table_name=table_name,\n            loader_metadata=loader_metadata,\n        )\n        \n        logger.info(\n            f\"Ingested {arrow_table.num_rows} rows from {self.__class__.__name__} \"\n            f\"to workspace as {table_name}.parquet\"\n        )\n        \n        return table_metadata\n\n    @staticmethod\n    @abstractmethod\n    def list_params() -> list[dict[str, Any]]:\n        \"\"\"Return list of parameters needed to configure this data loader.\"\"\"\n        pass\n\n    @staticmethod\n    @abstractmethod\n    def auth_instructions() -> str:\n        \"\"\"Return human-readable authentication instructions.\"\"\"\n        pass\n\n    @abstractmethod\n    def __init__(self, params: dict[str, Any]):\n        \"\"\"\n        Initialize the data loader.\n\n        Args:\n            params: Configuration parameters for the loader (e.g. host, credentials).\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def list_tables(self, table_filter: str | None = None) -> list[dict[str, Any]]:\n        \"\"\"\n        List available tables (or files) from the data source.\n\n        Returns:\n            List of dicts with: name (table/file identifier), metadata (row_count, columns, sample_rows).\n        \"\"\"\n        pass\n"
  },
  {
    "path": "py-src/data_formulator/data_loader/kusto_data_loader.py",
    "content": "import json\nimport logging\nfrom typing import Any\nimport pandas as pd\nimport pyarrow as pa\n\nfrom data_formulator.data_loader.external_data_loader import ExternalDataLoader, sanitize_table_name\n\nfrom azure.kusto.data import KustoClient, KustoConnectionStringBuilder\nfrom azure.kusto.data.helpers import dataframe_from_result_table\n\nlogger = logging.getLogger(__name__)\n\nclass KustoDataLoader(ExternalDataLoader):\n\n    @staticmethod\n    def list_params() -> list[dict[str, Any]]:\n        params_list = [\n            {\"name\": \"kusto_cluster\", \"type\": \"string\", \"required\": True, \"description\": \"e.g., https://mycluster.region.kusto.windows.net\"}, \n            {\"name\": \"kusto_database\", \"type\": \"string\", \"required\": True, \"description\": \"database name\"}, \n            {\"name\": \"client_id\", \"type\": \"string\", \"required\": False, \"description\": \"only for App Key auth\"}, \n            {\"name\": \"client_secret\", \"type\": \"string\", \"required\": False, \"description\": \"only for App Key auth\"}, \n            {\"name\": \"tenant_id\", \"type\": \"string\", \"required\": False, \"description\": \"only for App Key auth\"}\n        ]\n        return params_list\n    \n    @staticmethod\n    def auth_instructions() -> str:\n        return \"\"\"**Example (CLI):** kusto_cluster: `https://mycluster.westus.kusto.windows.net` · kusto_database: `mydb`\n\n**Example (App Key):** kusto_cluster: `https://mycluster.westus.kusto.windows.net` · kusto_database: `mydb` · client_id: `abc-123...` · client_secret: `xyz...` · tenant_id: `def-456...`\n\n**Option 1 — Azure CLI (recommended):**\nRun `az login` in your terminal. Leave `client_id`, `client_secret`, and `tenant_id` empty.\n\n**Option 2 — App Key Authentication:**\nRegister an Azure AD application, generate a client secret, and grant it access to your Kusto cluster (e.g., \"AllDatabasesViewer\" role via Azure Portal → Kusto cluster → Permissions). Provide `client_id`, `client_secret`, and `tenant_id`.\"\"\"\n\n    def __init__(self, params: dict[str, Any]):\n        self.params = params\n        self.kusto_cluster = params.get(\"kusto_cluster\", None)\n        self.kusto_database = params.get(\"kusto_database\", None)\n\n        self.client_id = params.get(\"client_id\", None)\n        self.client_secret = params.get(\"client_secret\", None)\n        self.tenant_id = params.get(\"tenant_id\", None)\n\n        try:\n            if self.client_id and self.client_secret and self.tenant_id:\n                self.client = KustoClient(KustoConnectionStringBuilder.with_aad_application_key_authentication(\n                    self.kusto_cluster, self.client_id, self.client_secret, self.tenant_id))\n            else:\n                cluster_url = KustoConnectionStringBuilder.with_az_cli_authentication(self.kusto_cluster)\n                logger.info(f\"Connecting to Kusto cluster: {self.kusto_cluster}\")\n                self.client = KustoClient(cluster_url)\n                logger.info(\"Using Azure CLI authentication for Kusto client.\")\n        except Exception as e:\n            logger.error(f\"Error creating Kusto client: {e}\")\n            raise RuntimeError(\n                f\"Error creating Kusto client: {e}. \"\n                \"Please authenticate with Azure CLI (az login) when starting the app.\"\n            ) from e\n\n    def _convert_kusto_datetime_columns(self, df: pd.DataFrame) -> pd.DataFrame:\n        \"\"\"Convert Kusto datetime columns to proper pandas datetime format\"\"\"\n        logger.info(f\"Processing DataFrame with columns: {list(df.columns)}\")\n        logger.info(f\"Column dtypes before conversion: {dict(df.dtypes)}\")\n        \n        for col in df.columns:\n            original_dtype = df[col].dtype\n            \n            if df[col].dtype == 'object':\n                # Try to identify datetime columns by checking sample values\n                sample_values = df[col].dropna().head(3)\n                if len(sample_values) > 0:\n                    # Check if values look like datetime strings or timestamp numbers\n                    first_val = sample_values.iloc[0]\n                    \n                    # Handle Kusto datetime format (ISO 8601 strings)\n                    if isinstance(first_val, str) and ('T' in first_val or '-' in first_val):\n                        try:\n                            # Try to parse as datetime\n                            pd.to_datetime(sample_values.iloc[0])\n                            logger.info(f\"Converting column '{col}' from string to datetime\")\n                            df[col] = pd.to_datetime(df[col], errors='coerce', utc=True).dt.tz_localize(None)\n                        except Exception as e:\n                            logger.debug(f\"Failed to convert column '{col}' as string datetime: {e}\")\n                    \n                    # Handle numeric timestamps (Unix timestamps in various formats)\n                    elif isinstance(first_val, (int, float)) and first_val > 1000000000:\n                        try:\n                            # Try different timestamp formats\n                            if first_val > 1e15:  # Likely microseconds since epoch\n                                logger.info(f\"Converting column '{col}' from microseconds timestamp to datetime\")\n                                df[col] = pd.to_datetime(df[col], unit='us', errors='coerce', utc=True).dt.tz_localize(None)\n                            elif first_val > 1e12:  # Likely milliseconds since epoch\n                                logger.info(f\"Converting column '{col}' from milliseconds timestamp to datetime\")\n                                df[col] = pd.to_datetime(df[col], unit='ms', errors='coerce', utc=True).dt.tz_localize(None)\n                            else:  # Likely seconds since epoch\n                                logger.info(f\"Converting column '{col}' from seconds timestamp to datetime\")\n                                df[col] = pd.to_datetime(df[col], unit='s', errors='coerce', utc=True).dt.tz_localize(None)\n                        except Exception as e:\n                            logger.debug(f\"Failed to convert column '{col}' as numeric timestamp: {e}\")\n                            \n            # Handle datetime64 columns that might have timezone info\n            elif pd.api.types.is_datetime64_any_dtype(df[col]):\n                # Ensure timezone-aware datetimes are properly handled\n                if hasattr(df[col].dt, 'tz') and df[col].dt.tz is not None:\n                    logger.info(f\"Converting timezone-aware datetime column '{col}' to UTC\")\n                    df[col] = df[col].dt.tz_convert('UTC').dt.tz_localize(None)\n            \n            # Log if conversion happened\n            if original_dtype != df[col].dtype:\n                logger.info(f\"Column '{col}' converted from {original_dtype} to {df[col].dtype}\")\n        \n        logger.info(f\"Column dtypes after conversion: {dict(df.dtypes)}\")\n        return df\n\n    def query(self, kql: str) -> pd.DataFrame:\n        logger.info(f\"Executing KQL query: {kql} on database {self.kusto_database}\")\n        result = self.client.execute(self.kusto_database, kql)\n        logger.info(f\"Query executed successfully, returning results.\")\n        df = dataframe_from_result_table(result.primary_results[0])\n        \n        # Convert datetime columns properly\n        df = self._convert_kusto_datetime_columns(df)\n        \n        return df\n\n    def fetch_data_as_arrow(\n        self,\n        source_table: str,\n        size: int = 1000000,\n        sort_columns: list[str] | None = None,\n        sort_order: str = 'asc'\n    ) -> pa.Table:\n        \"\"\"\n        Fetch data from Kusto/Azure Data Explorer as a PyArrow Table.\n        \n        Kusto SDK returns pandas, so we convert to Arrow format.\n        \n        Args:\n            source_table: Kusto table name\n            size: Maximum number of rows to fetch\n            sort_columns: Columns to sort by\n            sort_order: Sort direction\n        \"\"\"\n        if not source_table:\n            raise ValueError(\"source_table must be provided\")\n        \n        base_query = f\"['{source_table}']\"\n        \n        # Add sort if specified (KQL syntax)\n        sort_clause = \"\"\n        if sort_columns and len(sort_columns) > 0:\n            order_direction = \"desc\" if sort_order == 'desc' else \"asc\"\n            sort_cols_with_order = [f\"{col} {order_direction}\" for col in sort_columns]\n            sort_clause = f\" | sort by {', '.join(sort_cols_with_order)}\"\n        \n        # Add take limit\n        kql_query = f\"{base_query}{sort_clause} | take {size}\"\n        \n        logger.info(f\"Executing Kusto query: {kql_query[:200]}...\")\n        \n        # Execute query\n        df = self.query(kql_query)\n        \n        # Convert to Arrow\n        arrow_table = pa.Table.from_pandas(df, preserve_index=False)\n        \n        logger.info(f\"Fetched {arrow_table.num_rows} rows from Kusto\")\n        \n        return arrow_table\n\n    def list_tables(self, table_filter: str | None = None) -> list[dict[str, Any]]:\n        query = \".show tables\"\n        tables_df = self.query(query)\n\n        tables = []\n        for table in tables_df.to_dict(orient=\"records\"):\n            table_name = table['TableName']\n            \n            # Apply table filter if provided\n            if table_filter and table_filter.lower() not in table_name.lower():\n                continue\n                \n            schema_result = self.query(f\".show table ['{table_name}'] schema as json\").to_dict(orient=\"records\")\n            columns = [{\n                'name': r[\"Name\"],\n                'type': r[\"Type\"]\n            } for r in json.loads(schema_result[0]['Schema'])['OrderedColumns']]\n\n            row_count_result = self.query(f\".show table ['{table_name}'] details\").to_dict(orient=\"records\")\n            row_count = row_count_result[0][\"TotalRowCount\"]\n\n            sample_query = f\"['{table_name}'] | take {5}\"\n            sample_df = self.query(sample_query)\n            \n            # Convert sample data to JSON with proper datetime handling\n            sample_result = json.loads(sample_df.to_json(orient=\"records\", date_format='iso'))\n\n            table_metadata = {\n                \"row_count\": row_count,\n                \"columns\": columns,\n                \"sample_rows\": sample_result\n            }\n\n            tables.append({\n                \"type\": \"table\",\n                \"name\": table_name,\n                \"metadata\": table_metadata\n            })\n\n        return tables"
  },
  {
    "path": "py-src/data_formulator/data_loader/mongodb_data_loader.py",
    "content": "import json\nimport logging\nfrom datetime import datetime\n\nimport pandas as pd\nimport pyarrow as pa\nimport pymongo\nfrom bson import ObjectId\n\nfrom data_formulator.data_loader.external_data_loader import ExternalDataLoader, sanitize_table_name\nfrom typing import Any\n\nlogger = logging.getLogger(__name__)\n\n\nclass MongoDBDataLoader(ExternalDataLoader):\n\n    @staticmethod\n    def list_params() -> list[dict[str, Any]]:\n        params_list = [\n            {\"name\": \"host\", \"type\": \"string\", \"required\": True, \"default\": \"localhost\", \"description\": \"server address\"}, \n            {\"name\": \"port\", \"type\": \"int\", \"required\": False, \"default\": 27017, \"description\": \"server port\"},\n            {\"name\": \"username\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"leave blank if no auth\"},\n            {\"name\": \"password\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"leave blank if no auth\"},\n            {\"name\": \"database\", \"type\": \"string\", \"required\": True, \"default\": \"\", \"description\": \"database name\"},\n            {\"name\": \"collection\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"leave empty to list all collections\"},\n            {\"name\": \"authSource\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"auth database (defaults to target database)\"}\n        ]\n        return params_list\n\n    @staticmethod\n    def auth_instructions() -> str:\n        return \"\"\"**Example:** host: `localhost` · port: `27017` · database: `mydb` · collection: `users`\n\n**Local setup:** Ensure MongoDB is running. Leave username and password blank if authentication is not enabled.\n\n**Remote setup:** Get host, port, username, and password from your database administrator.\n\n**Troubleshooting:** Test with `mongosh --host <host> --port <port>`\"\"\"\n\n    def __init__(self, params: dict[str, Any]):\n        self.params = params\n\n        self.host = self.params.get(\"host\", \"localhost\")\n        self.port = int(self.params.get(\"port\", 27017))\n        self.username = self.params.get(\"username\", \"\")\n        self.password = self.params.get(\"password\", \"\")\n        self.database_name = self.params.get(\"database\", \"\")\n        self.collection_name = self.params.get(\"collection\", \"\")\n        auth_source = self.params.get(\"authSource\", \"\") or self.database_name\n\n        try:\n            if self.username and self.password:\n                self.mongo_client = pymongo.MongoClient(\n                    host=self.host,\n                    port=self.port,\n                    username=self.username,\n                    password=self.password,\n                    authSource=auth_source\n                )\n            else:\n                self.mongo_client = pymongo.MongoClient(host=self.host, port=self.port)\n\n            self.db = self.mongo_client[self.database_name]\n            self.collection = self.db[self.collection_name] if self.collection_name else None\n\n            logger.info(f\"Successfully connected to MongoDB: {self.host}:{self.port}/{self.database_name}\")\n\n        except Exception as e:\n            logger.error(f\"Failed to connect to MongoDB: {e}\")\n            raise RuntimeError(f\"Failed to connect to MongoDB: {e}\") from e\n    \n    def close(self):\n        \"\"\"Close the MongoDB connection.\"\"\"\n        if hasattr(self, 'mongo_client') and self.mongo_client is not None:\n            try:\n                self.mongo_client.close()\n                self.mongo_client = None\n            except Exception as e:\n                logger.warning(f\"Failed to close MongoDB connection: {e}\")\n\n    def __enter__(self):\n        \"\"\"Context manager entry\"\"\"\n        return self\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        \"\"\"Context manager exit - ensures connection is closed\"\"\"\n        self.close()\n        return False\n\n    def __del__(self):\n        \"\"\"Destructor to ensure connection is closed\"\"\"\n        self.close()\n    \n    @staticmethod\n    def _flatten_document(doc: dict[str, Any], parent_key: str = '', sep: str = '_') -> dict[str, Any]:\n        \"\"\"\n        Use recursion to flatten nested MongoDB documents\n        \"\"\"\n        items = []\n        for key, value in doc.items():\n            new_key = f\"{parent_key}{sep}{key}\" if parent_key else key\n            \n            if isinstance(value, dict):\n                items.extend(MongoDBDataLoader._flatten_document(value, new_key, sep).items())\n            elif isinstance(value, list):\n                if len(value) == 0:\n                    items.append((new_key, None))\n                else:\n                    for idx, item in enumerate(value, start=1):\n                        item_key = f\"{new_key}{sep}{idx}\"\n                        if isinstance(item, dict):\n                            items.extend(MongoDBDataLoader._flatten_document(item, item_key, sep).items())\n                        else:\n                            items.append((item_key, item))\n            else:\n                items.append((new_key, value))\n        \n        return dict(items)\n    \n    @staticmethod\n    def _convert_special_types(doc: dict[str, Any]) -> dict[str, Any]:\n        \"\"\"\n        Convert MongoDB special types (ObjectId, datetime, etc.) to serializable types\n        \"\"\"\n        result = {}\n        for key, value in doc.items():\n            if isinstance(value, ObjectId):\n                result[key] = str(value)\n            elif isinstance(value, datetime):\n                result[key] = value.isoformat()\n            elif isinstance(value, bytes):\n                result[key] = value.decode('utf-8', errors='ignore')\n            elif isinstance(value, dict):\n                result[key] = MongoDBDataLoader._convert_special_types(value)\n            elif isinstance(value, list):\n                result[key] = [\n                    MongoDBDataLoader._convert_special_types(item) if isinstance(item, dict)\n                    else str(item) if isinstance(item, ObjectId)\n                    else item.isoformat() if isinstance(item, datetime)\n                    else item\n                    for item in value\n                ]\n            else:\n                result[key] = value\n        return result\n    \n    def _process_documents(self, documents: list[dict[str, Any]]) -> pd.DataFrame:\n        \"\"\"\n        Process MongoDB documents list, flatten and convert to DataFrame\n        \"\"\"\n        if not documents:\n            return pd.DataFrame()\n        \n        processed_docs = []\n        for doc in documents:\n            converted = self._convert_special_types(doc)\n            flattened = self._flatten_document(converted)\n            processed_docs.append(flattened)\n        \n        df = pd.DataFrame(processed_docs)\n        return df\n\n    def fetch_data_as_arrow(\n        self,\n        source_table: str,\n        size: int = 1000000,\n        sort_columns: list[str] | None = None,\n        sort_order: str = 'asc'\n    ) -> pa.Table:\n        \"\"\"\n        Fetch data from MongoDB as a PyArrow Table.\n        \n        MongoDB doesn't have native Arrow support, so we fetch documents,\n        process them, and convert to Arrow format.\n        \n        Args:\n            source_table: Collection name to fetch from\n            size: Maximum number of documents to fetch\n            sort_columns: Columns to sort by\n            sort_order: Sort direction ('asc' or 'desc')\n        \"\"\"\n        if not source_table:\n            raise ValueError(\"source_table (collection name) must be provided\")\n        \n        # Get collection\n        collection_name = source_table\n        # Handle full table names like \"database.collection\"\n        if '.' in collection_name:\n            parts = collection_name.split('.')\n            collection_name = parts[-1]\n        \n        collection = self.db[collection_name]\n        \n        logger.info(f\"Fetching from MongoDB collection: {collection_name}\")\n        \n        # Build cursor with optional sorting\n        data_cursor = collection.find()\n        if sort_columns and len(sort_columns) > 0:\n            sort_direction = -1 if sort_order == 'desc' else 1\n            sort_spec = [(col, sort_direction) for col in sort_columns]\n            data_cursor = data_cursor.sort(sort_spec)\n        data_cursor = data_cursor.limit(size)\n        \n        # Fetch and process documents\n        data_list = list(data_cursor)\n        if not data_list:\n            logger.warning(f\"No data found in MongoDB collection '{collection_name}'\")\n            return pa.table({})\n        \n        df = self._process_documents(data_list)\n        \n        # Convert to Arrow\n        arrow_table = pa.Table.from_pandas(df, preserve_index=False)\n        \n        logger.info(f\"Fetched {arrow_table.num_rows} rows from MongoDB collection '{collection_name}'\")\n        \n        return arrow_table\n        \n    def list_tables(self, table_filter: str | None = None) -> list[dict[str, Any]]:\n        \"\"\"\n        List all collections\n        \"\"\"\n        results = []\n        \n        # Get specified collection or all collections\n        collection_param = self.params.get(\"collection\", \"\")\n        \n        if collection_param:\n            collection_names = [collection_param]\n        else:\n            collection_names = self.db.list_collection_names()\n        \n        for collection_name in collection_names:\n            # Apply filter\n            if table_filter and table_filter.lower() not in collection_name.lower():\n                continue\n            \n            try:\n                full_table_name = f\"{collection_name}\"\n                collection = self.db[collection_name]\n                \n                # Get row count\n                row_count = collection.count_documents({})\n                \n                # Get sample data\n                sample_data = list(collection.find().limit(10))\n                \n                if sample_data:\n                    df = self._process_documents(sample_data)\n                    \n                    # Construct column information\n                    columns = [{\n                        'name': col,\n                        'type': str(df[col].dtype)\n                    } for col in df.columns]\n                    \n                    # Convert sample_data for return\n                    sample_rows = json.loads(df.to_json(orient=\"records\"))\n                else:\n                    columns = []\n                    sample_rows = []\n                \n                table_metadata = {\n                    \"row_count\": row_count,\n                    \"columns\": columns,\n                    \"sample_rows\": sample_rows\n                }\n                \n                results.append({\n                    \"name\": full_table_name,\n                    \"metadata\": table_metadata\n                })\n            except Exception as e:\n                logger.debug(f\"Error listing collection {collection_name}: {e}\")\n                continue\n\n        return results"
  },
  {
    "path": "py-src/data_formulator/data_loader/mssql_data_loader.py",
    "content": "import json\nimport logging\nfrom typing import Any\n\nimport pandas as pd\nimport pyarrow as pa\nimport connectorx as cx\n\nfrom data_formulator.data_loader.external_data_loader import ExternalDataLoader, sanitize_table_name\n\nlog = logging.getLogger(__name__)\n\n\nclass MSSQLDataLoader(ExternalDataLoader):\n    @staticmethod\n    def list_params() -> list[dict[str, Any]]:\n        params_list = [\n            {\n                \"name\": \"server\",\n                \"type\": \"string\",\n                \"required\": True,\n                \"default\": \"localhost\",\n                \"description\": \"SQL Server host address or instance name\",\n            },\n            {\n                \"name\": \"database\",\n                \"type\": \"string\",\n                \"required\": True,\n                \"default\": \"master\",\n                \"description\": \"Database name to connect to\",\n            },\n            {\n                \"name\": \"user\",\n                \"type\": \"string\",\n                \"required\": False,\n                \"default\": \"\",\n                \"description\": \"Username (leave empty for Windows Authentication)\",\n            },\n            {\n                \"name\": \"password\",\n                \"type\": \"string\",\n                \"required\": False,\n                \"default\": \"\",\n                \"description\": \"Password (leave empty for Windows Authentication)\",\n            },\n            {\n                \"name\": \"port\",\n                \"type\": \"string\",\n                \"required\": False,\n                \"default\": \"1433\",\n                \"description\": \"SQL Server port (default: 1433)\",\n            },\n            {\n                \"name\": \"driver\",\n                \"type\": \"string\",\n                \"required\": False,\n                \"default\": \"ODBC Driver 17 for SQL Server\",\n                \"description\": \"ODBC driver name\",\n            },\n            {\n                \"name\": \"encrypt\",\n                \"type\": \"string\",\n                \"required\": False,\n                \"default\": \"yes\",\n                \"description\": \"Enable encryption (yes/no)\",\n            },\n            {\n                \"name\": \"trust_server_certificate\",\n                \"type\": \"string\",\n                \"required\": False,\n                \"default\": \"no\",\n                \"description\": \"Trust server certificate (yes/no)\",\n            },\n            {\n                \"name\": \"connection_timeout\",\n                \"type\": \"string\",\n                \"required\": False,\n                \"default\": \"30\",\n                \"description\": \"Connection timeout in seconds\",\n            },\n        ]\n        return params_list\n\n    @staticmethod\n    def auth_instructions() -> str:\n        return \"\"\"**Example (SQL auth):** server: `localhost` · database: `mydb` · user: `sa` · password: `MyP@ss` · port: `1433`\n\n**Example (Windows auth):** server: `localhost\\\\SQLEXPRESS` · database: `mydb` (leave user/password empty)\n\n**Prerequisites (macOS/Linux only):**\nInstall ODBC driver: `brew install unixodbc msodbcsql17` (macOS) or `sudo apt-get install unixodbc-dev msodbcsql17` (Ubuntu/Debian). Windows usually has these pre-installed.\n\n**Authentication:**\n- **Windows Auth:** Leave user/password empty (recommended for local dev)\n- **SQL Server Auth:** Provide username and password\n\n**Troubleshooting:** Ensure SQL Server service is running. Verify TCP/IP is enabled in SQL Server Configuration Manager. Test with `sqlcmd -S <server> -d <database> -U <user> -P <password>`.\"\"\"\n\n    def __init__(self, params: dict[str, Any]):\n        log.info(f\"Initializing MSSQL DataLoader with parameters: {params}\")\n\n        self.params = params\n\n        self.server = params.get(\"server\", \"localhost\")\n        self.database = params.get(\"database\", \"master\")\n        self.user = params.get(\"user\", \"\").strip()\n        self.password = params.get(\"password\", \"\").strip()\n        self.port = params.get(\"port\", \"1433\")\n\n        # Build connection URL for connectorx: mssql://user:password@host:port/database\n        # - Use explicit empty password (user:@host) when user is set but password is blank.\n        # - Use 127.0.0.1 when server is localhost to force IPv4 TCP and avoid IPv6 ::1 connection issues.\n        server_for_url = \"127.0.0.1\" if (self.server or \"\").strip().lower() == \"localhost\" else self.server\n        if self.user:\n            self.connection_url = f\"mssql://{self.user}:{self.password}@{server_for_url}:{self.port}/{self.database}?TrustServerCertificate=true\"\n        else:\n            self.connection_url = f\"mssql://{server_for_url}:{self.port}/{self.database}?TrustServerCertificate=true&IntegratedSecurity=true\"\n\n        try:\n            cx.read_sql(self.connection_url, \"SELECT 1\", return_type=\"arrow\")\n            log.info(f\"Successfully connected to SQL Server: {self.server}/{self.database}\")\n        except Exception as e:\n            log.error(f\"Failed to connect to SQL Server: {e}\")\n            raise ValueError(f\"Failed to connect to SQL Server '{self.server}': {e}\") from e\n\n    # SQL Server types that connectorx cannot handle natively\n    _CX_SPATIAL_TYPES = {'geometry', 'geography'}  # use .STAsText()\n    _CX_OTHER_UNSUPPORTED = {'hierarchyid', 'xml', 'sql_variant', 'image', 'timestamp'}\n    _CX_UNSUPPORTED_TYPES = _CX_SPATIAL_TYPES | _CX_OTHER_UNSUPPORTED\n\n    def _safe_select_list(self, schema: str, table_name: str) -> str:\n        \"\"\"Build a SELECT column list that converts unsupported types to text.\n        Uses .STAsText() for spatial types, CAST(... AS NVARCHAR(MAX)) for others.\n        Returns '*' if no unsupported columns are found.\"\"\"\n        try:\n            columns_query = f\"\"\"\n                SELECT COLUMN_NAME, DATA_TYPE\n                FROM INFORMATION_SCHEMA.COLUMNS\n                WHERE TABLE_SCHEMA = '{schema}' AND TABLE_NAME = '{table_name}'\n                ORDER BY ORDINAL_POSITION\n            \"\"\"\n            cols_df = self._execute_query_raw(columns_query).to_pandas()\n            has_unsupported = any(r['DATA_TYPE'].lower() in self._CX_UNSUPPORTED_TYPES for _, r in cols_df.iterrows())\n            if not has_unsupported:\n                return \"*\"\n            parts = []\n            for _, r in cols_df.iterrows():\n                col, dtype = r['COLUMN_NAME'], r['DATA_TYPE'].lower()\n                if dtype in self._CX_SPATIAL_TYPES:\n                    parts.append(f\"[{col}].STAsText() AS [{col}]\")\n                elif dtype in self._CX_OTHER_UNSUPPORTED:\n                    parts.append(f\"CAST([{col}] AS NVARCHAR(MAX)) AS [{col}]\")\n                else:\n                    parts.append(f\"[{col}]\")\n            return ', '.join(parts)\n        except Exception:\n            return \"*\"\n\n    def _execute_query_raw(self, query: str) -> pa.Table:\n        \"\"\"Execute a query via connectorx (no error wrapping).\"\"\"\n        return cx.read_sql(self.connection_url, query, return_type=\"arrow\")\n\n    def _execute_query(self, query: str) -> pa.Table:\n        \"\"\"Execute a query and return results as a PyArrow Table (via connectorx).\"\"\"\n        try:\n            return cx.read_sql(self.connection_url, query, return_type=\"arrow\")\n        except Exception as e:\n            log.error(f\"Failed to execute query: {e}\")\n            raise\n\n    def fetch_data_as_arrow(\n        self,\n        source_table: str,\n        size: int = 1000000,\n        sort_columns: list[str] | None = None,\n        sort_order: str = 'asc'\n    ) -> pa.Table:\n        \"\"\"\n        Fetch data from SQL Server as a PyArrow Table using connectorx.\n        \"\"\"\n        if not source_table:\n            raise ValueError(\"source_table must be provided\")\n        \n        # Parse table name\n        if \".\" in source_table:\n            schema, table = source_table.split(\".\", 1)\n        else:\n            schema = \"dbo\"\n            table = source_table\n        \n        col_list = self._safe_select_list(schema.strip('[]'), table.strip('[]'))\n        base_query = f\"SELECT {col_list} FROM [{schema}].[{table}]\"\n        \n        # Add ORDER BY if sort columns specified\n        order_by_clause = \"\"\n        if sort_columns and len(sort_columns) > 0:\n            order_direction = \"DESC\" if sort_order == 'desc' else \"ASC\"\n            sanitized_cols = [f'[{col}] {order_direction}' for col in sort_columns]\n            order_by_clause = f\" ORDER BY {', '.join(sanitized_cols)}\"\n        \n        # SQL Server uses TOP instead of LIMIT\n        query = f\"SELECT TOP {size} * FROM ({base_query}{order_by_clause}) AS limited\"\n        \n        log.info(f\"Executing SQL Server query: {query[:200]}...\")\n        \n        arrow_table = cx.read_sql(self.connection_url, query, return_type=\"arrow\")\n        log.info(f\"Fetched {arrow_table.num_rows} rows from SQL Server [Arrow-native]\")\n        \n        return arrow_table\n\n    def list_tables(self, table_filter: str | None = None) -> list[dict[str, Any]]:\n        \"\"\"List all tables from SQL Server database.\"\"\"\n        try:\n            tables_query = \"\"\"\n                SELECT \n                    TABLE_SCHEMA, \n                    TABLE_NAME,\n                    TABLE_TYPE\n                FROM INFORMATION_SCHEMA.TABLES \n                WHERE TABLE_TYPE = 'BASE TABLE' \n                AND TABLE_SCHEMA NOT IN ('sys', 'INFORMATION_SCHEMA')\n                ORDER BY TABLE_SCHEMA, TABLE_NAME\n            \"\"\"\n\n            tables_df = self._execute_query(tables_query).to_pandas()\n            results = []\n\n            for _, row in tables_df.iterrows():\n                schema = row[\"TABLE_SCHEMA\"]\n                table_name = row[\"TABLE_NAME\"]\n                table_type = row.get(\"TABLE_TYPE\", \"BASE TABLE\")\n                full_table_name = f\"{schema}.{table_name}\"\n\n                if table_filter and table_filter.lower() not in full_table_name.lower():\n                    continue\n\n                try:\n                    # Get column information\n                    columns_query = f\"\"\"\n                        SELECT \n                            COLUMN_NAME, \n                            DATA_TYPE, \n                            IS_NULLABLE, \n                            COLUMN_DEFAULT,\n                            CHARACTER_MAXIMUM_LENGTH,\n                            NUMERIC_PRECISION,\n                            NUMERIC_SCALE\n                        FROM INFORMATION_SCHEMA.COLUMNS \n                        WHERE TABLE_SCHEMA = '{schema}' AND TABLE_NAME = '{table_name}'\n                        ORDER BY ORDINAL_POSITION\n                    \"\"\"\n                    columns_df = self._execute_query(columns_query).to_pandas()\n\n                    columns = []\n                    for _, col_row in columns_df.iterrows():\n                        col_info = {\n                            \"name\": col_row[\"COLUMN_NAME\"],\n                            \"type\": col_row[\"DATA_TYPE\"],\n                            \"nullable\": col_row[\"IS_NULLABLE\"] == \"YES\",\n                            \"default\": col_row[\"COLUMN_DEFAULT\"],\n                        }\n\n                        # Add length/precision info for relevant types with NaN handling\n                        if (\n                            col_row[\"CHARACTER_MAXIMUM_LENGTH\"] is not None\n                            and not pd.isna(col_row[\"CHARACTER_MAXIMUM_LENGTH\"])\n                        ):\n                            try:\n                                col_info[\"max_length\"] = int(col_row[\"CHARACTER_MAXIMUM_LENGTH\"])\n                            except (ValueError, TypeError):\n                                pass  # Skip if conversion fails\n\n                        if (\n                            col_row[\"NUMERIC_PRECISION\"] is not None\n                            and not pd.isna(col_row[\"NUMERIC_PRECISION\"])\n                        ):\n                            try:\n                                col_info[\"precision\"] = int(col_row[\"NUMERIC_PRECISION\"])\n                            except (ValueError, TypeError):\n                                pass  # Skip if conversion fails\n\n                        if (\n                            col_row[\"NUMERIC_SCALE\"] is not None\n                            and not pd.isna(col_row[\"NUMERIC_SCALE\"])\n                        ):\n                            try:\n                                col_info[\"scale\"] = int(col_row[\"NUMERIC_SCALE\"])\n                            except (ValueError, TypeError):\n                                pass  # Skip if conversion fails\n\n                        columns.append(col_info)\n\n                    # Build safe column list (casts unsupported types to NVARCHAR)\n                    col_list = self._safe_select_list(schema, table_name)\n\n                    # Get sample data (first 10 rows)\n                    sample_rows = []\n                    sample_query = f\"SELECT TOP 10 {col_list} FROM [{schema}].[{table_name}]\"\n                    try:\n                        sample_df = self._execute_query(sample_query).to_pandas()\n                        sample_df_clean = sample_df.fillna(value=None)\n                        sample_rows = json.loads(\n                            sample_df_clean.to_json(\n                                orient=\"records\", date_format=\"iso\", default_handler=str\n                            )\n                        )\n                    except Exception as e:\n                        log.warning(\n                            f\"Failed to sample table {schema}.{table_name}: {e}\"\n                        )\n\n                    # Get row count\n                    count_query = f\"SELECT COUNT(*) as row_count FROM [{schema}].[{table_name}]\"\n                    count_df = self._execute_query(count_query).to_pandas()\n\n                    # Handle NaN values in row count\n                    raw_count = count_df.iloc[0][\"row_count\"]\n                    if pd.isna(raw_count):\n                        row_count = 0\n                        log.warning(\n                            f\"Row count for table {schema}.{table_name} returned NaN, using 0\"\n                        )\n                    else:\n                        try:\n                            row_count = int(raw_count)\n                        except (ValueError, TypeError):\n                            row_count = 0\n                            log.warning(\n                                f\"Could not convert row count '{raw_count}' to integer for table {schema}.{table_name}, using 0\"\n                            )\n\n                    table_metadata = {\n                        \"row_count\": row_count,\n                        \"columns\": columns,\n                        \"sample_rows\": sample_rows,\n                        \"table_type\": table_type,\n                    }\n\n                    results.append({\"name\": full_table_name, \"metadata\": table_metadata})\n\n                except Exception as e:\n                    log.warning(f\"Failed to get metadata for table {full_table_name}: {e}\")\n                    # Add table without detailed metadata\n                    results.append(\n                        {\n                            \"name\": full_table_name,\n                            \"metadata\": {\n                                \"row_count\": 0,\n                                \"columns\": [],\n                                \"sample_rows\": [],\n                                \"table_type\": table_type,\n                            },\n                        }\n                    )\n\n        except Exception as e:\n            log.error(f\"Failed to list tables from SQL Server: {e}\")\n            results = []\n\n        return results\n"
  },
  {
    "path": "py-src/data_formulator/data_loader/mysql_data_loader.py",
    "content": "import json\nimport logging\nfrom typing import Any\n\nimport pandas as pd\nimport pyarrow as pa\nimport connectorx as cx\n\nfrom data_formulator.data_loader.external_data_loader import ExternalDataLoader\n\nlogger = logging.getLogger(__name__)\n\n\nclass MySQLDataLoader(ExternalDataLoader):\n\n    @staticmethod\n    def list_params() -> list[dict[str, Any]]:\n        params_list = [\n            {\"name\": \"user\", \"type\": \"string\", \"required\": True, \"default\": \"root\", \"description\": \"MySQL username\"}, \n            {\"name\": \"password\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"leave blank for no password\"}, \n            {\"name\": \"host\", \"type\": \"string\", \"required\": True, \"default\": \"localhost\", \"description\": \"server address\"}, \n            {\"name\": \"port\", \"type\": \"int\", \"required\": False, \"default\": 3306, \"description\": \"server port\"},\n            {\"name\": \"database\", \"type\": \"string\", \"required\": True, \"default\": \"mysql\", \"description\": \"database name\"}\n        ]\n        return params_list\n\n    @staticmethod\n    def auth_instructions() -> str:\n        return \"\"\"**Example:** user: `root` · host: `localhost` · port: `3306` · database: `mydb`\n\n**Local setup:** Ensure MySQL is running — `brew services list` (macOS) or `systemctl status mysql` (Linux). Leave password blank if none is set.\n\n**Remote setup:** Get host, port, username, and password from your database administrator. Ensure the server allows remote connections and your IP is whitelisted.\n\n**Troubleshooting:** Test with `mysql -u <user> -p -h <host> -P <port> <database>`\"\"\"\n\n    def __init__(self, params: dict[str, Any]):\n        self.params = params\n\n        self.host = self.params.get(\"host\", \"\")\n        self.user = self.params.get(\"user\", \"\")\n        self.password = self.params.get(\"password\", \"\")\n        self.database = self.params.get(\"database\", \"\")\n\n        if not self.host:\n            raise ValueError(\"MySQL host is required\")\n        if not self.user:\n            raise ValueError(\"MySQL user is required\")\n        if not self.database:\n            raise ValueError(\"MySQL database is required\")\n\n        port = self.params.get(\"port\", \"\")\n        if isinstance(port, str):\n            self.port = int(port) if port else 3306\n        elif not port:\n            self.port = 3306\n        else:\n            self.port = int(port)\n        \n        # Build connection URL for connectorx\n        # Format: mysql://user:password@host:port/database\n        # - Use explicit empty password (user:@host) so the URL parser sees user vs password correctly.\n        # - Use 127.0.0.1 when host is localhost to force IPv4 TCP and avoid IPv6 ::1 connection issues.\n        host_for_url = \"127.0.0.1\" if (self.host or \"\").strip().lower() == \"localhost\" else self.host\n        if self.password:\n            self.connection_url = f\"mysql://{self.user}:{self.password}@{host_for_url}:{self.port}/{self.database}\"\n        else:\n            self.connection_url = f\"mysql://{self.user}:@{host_for_url}:{self.port}/{self.database}\"\n        \n        self._sanitized_url = f\"mysql://{self.user}:***@{self.host}:{self.port}/{self.database}\"\n        \n        # Test connection\n        try:\n            cx.read_sql(self.connection_url, \"SELECT 1\", return_type=\"arrow\")\n        except Exception as e:\n            logger.error(f\"Failed to connect to MySQL (mysql://{self.user}:***@{self.host}:{self.port}/{self.database}): {e}\")\n            raise ValueError(f\"Failed to connect to MySQL database '{self.database}' on host '{self.host}': {e}\") from e\n        logger.info(f\"Successfully connected to MySQL: mysql://{self.user}:***@{self.host}:{self.port}/{self.database}\")\n\n    # MySQL types that connectorx cannot handle natively\n    _CX_GEOMETRY_TYPES = {'geometry', 'point', 'linestring', 'polygon',\n                           'multipoint', 'multilinestring', 'multipolygon',\n                           'geometrycollection'}\n    _CX_OTHER_UNSUPPORTED = {'bit'}\n    _CX_UNSUPPORTED_TYPES = _CX_GEOMETRY_TYPES | _CX_OTHER_UNSUPPORTED\n\n    def _safe_select_list(self, schema: str, table_name: str) -> str:\n        \"\"\"Build a SELECT column list that converts unsupported types to text.\n        Uses ST_AsText() for geometry types, CAST(... AS CHAR) for others.\n        Returns '*' if no unsupported columns are found.\"\"\"\n        try:\n            columns_query = f\"\"\"\n                SELECT COLUMN_NAME, DATA_TYPE\n                FROM information_schema.columns\n                WHERE TABLE_SCHEMA = '{schema}' AND TABLE_NAME = '{table_name}'\n                ORDER BY ORDINAL_POSITION\n            \"\"\"\n            cols_arrow = cx.read_sql(self.connection_url, columns_query, return_type=\"arrow\")\n            cols_df = cols_arrow.to_pandas()\n            has_unsupported = any(r['DATA_TYPE'].lower() in self._CX_UNSUPPORTED_TYPES for _, r in cols_df.iterrows())\n            if not has_unsupported:\n                return \"*\"\n            parts = []\n            for _, r in cols_df.iterrows():\n                col, dtype = r['COLUMN_NAME'], r['DATA_TYPE'].lower()\n                if dtype in self._CX_GEOMETRY_TYPES:\n                    parts.append(f\"ST_AsText(`{col}`) AS `{col}`\")\n                elif dtype in self._CX_OTHER_UNSUPPORTED:\n                    parts.append(f\"CAST(`{col}` AS CHAR) AS `{col}`\")\n                else:\n                    parts.append(f\"`{col}`\")\n            return ', '.join(parts)\n        except Exception:\n            return \"*\"\n\n    def fetch_data_as_arrow(\n        self,\n        source_table: str,\n        size: int = 1000000,\n        sort_columns: list[str] | None = None,\n        sort_order: str = 'asc'\n    ) -> pa.Table:\n        \"\"\"\n        Fetch data from MySQL as a PyArrow Table using connectorx.\n        \n        connectorx provides extremely fast Arrow-native database access.\n        \"\"\"\n        if not source_table:\n            raise ValueError(\"source_table must be provided\")\n        \n        # Handle table names and build safe column list\n        if '.' in source_table:\n            parts = source_table.split('.', 1)\n            col_list = self._safe_select_list(parts[0].strip('`'), parts[1].strip('`'))\n            base_query = f\"SELECT {col_list} FROM {source_table}\"\n        else:\n            col_list = self._safe_select_list(self.database, source_table.strip('`'))\n            base_query = f\"SELECT {col_list} FROM `{source_table}`\"\n        \n        # Add ORDER BY if sort columns specified\n        order_by_clause = \"\"\n        if sort_columns and len(sort_columns) > 0:\n            order_direction = \"DESC\" if sort_order == 'desc' else \"ASC\"\n            sanitized_cols = [f'`{col}` {order_direction}' for col in sort_columns]\n            order_by_clause = f\" ORDER BY {', '.join(sanitized_cols)}\"\n        \n        query = f\"{base_query}{order_by_clause} LIMIT {size}\"\n        \n        logger.info(f\"Executing MySQL query via connectorx: {query[:200]}...\")\n        \n        arrow_table = cx.read_sql(self.connection_url, query, return_type=\"arrow\")\n        \n        logger.info(f\"Fetched {arrow_table.num_rows} rows from MySQL [Arrow-native]\")\n        \n        return arrow_table\n\n    def list_tables(self, table_filter: str | None = None) -> list[dict[str, Any]]:\n        \"\"\"List available tables from MySQL database.\"\"\"\n        return self._list_tables_connectorx(table_filter)\n    \n    def _list_tables_connectorx(self, table_filter: str | None = None) -> list[dict[str, Any]]:\n        \"\"\"List tables using connectorx.\"\"\"\n        try:\n            tables_query = f\"\"\"\n                SELECT TABLE_SCHEMA, TABLE_NAME \n                FROM information_schema.tables \n                WHERE TABLE_SCHEMA = '{self.database}'\n                AND TABLE_TYPE = 'BASE TABLE'\n            \"\"\"\n            tables_arrow = cx.read_sql(self.connection_url, tables_query, return_type=\"arrow\")\n            tables_df = tables_arrow.to_pandas()\n            \n            if tables_df.empty:\n                return []\n            \n            results = []\n            \n            for _, row in tables_df.iterrows():\n                schema = row['TABLE_SCHEMA']\n                table_name = row['TABLE_NAME']\n                \n                if table_filter and table_filter.lower() not in table_name.lower():\n                    continue\n                \n                full_table_name = f\"{schema}.{table_name}\"\n                \n                try:\n                    # Get column information\n                    columns_query = f\"\"\"\n                        SELECT COLUMN_NAME, DATA_TYPE \n                        FROM information_schema.columns \n                        WHERE TABLE_SCHEMA = '{schema}' AND TABLE_NAME = '{table_name}'\n                        ORDER BY ORDINAL_POSITION\n                    \"\"\"\n                    columns_arrow = cx.read_sql(self.connection_url, columns_query, return_type=\"arrow\")\n                    columns_df = columns_arrow.to_pandas()\n                    columns = [{\n                        'name': col_row['COLUMN_NAME'],\n                        'type': col_row['DATA_TYPE']\n                    } for _, col_row in columns_df.iterrows()]\n                    \n                    # Build safe column list (casts unsupported types to CHAR)\n                    col_list = self._safe_select_list(schema, table_name)\n                    \n                    # Get sample data\n                    sample_rows = []\n                    sample_query = f\"SELECT {col_list} FROM `{schema}`.`{table_name}` LIMIT 10\"\n                    try:\n                        sample_arrow = cx.read_sql(self.connection_url, sample_query, return_type=\"arrow\")\n                        sample_df = sample_arrow.to_pandas()\n                        sample_rows = json.loads(sample_df.to_json(orient=\"records\", date_format='iso'))\n                    except Exception as sample_err:\n                        logger.warning(f\"Could not sample {full_table_name}: {sample_err}\")\n                    \n                    # Get row count\n                    count_query = f\"SELECT COUNT(*) as cnt FROM `{schema}`.`{table_name}`\"\n                    count_arrow = cx.read_sql(self.connection_url, count_query, return_type=\"arrow\")\n                    row_count = int(count_arrow.to_pandas()['cnt'].iloc[0])\n                    \n                    table_metadata = {\n                        \"row_count\": row_count,\n                        \"columns\": columns,\n                        \"sample_rows\": sample_rows\n                    }\n                    \n                    results.append({\n                        \"name\": full_table_name,\n                        \"metadata\": table_metadata\n                    })\n                except Exception as e:\n                    logger.warning(f\"Error processing table {full_table_name}: {e}\")\n                    continue\n            \n            return results\n\n        except Exception as e:\n            logger.error(f\"Error listing tables: {e}\")\n            return []"
  },
  {
    "path": "py-src/data_formulator/data_loader/postgresql_data_loader.py",
    "content": "import json\nimport logging\nfrom typing import Any\n\nimport pandas as pd\nimport pyarrow as pa\nimport connectorx as cx\n\nfrom data_formulator.data_loader.external_data_loader import ExternalDataLoader\n\nlogger = logging.getLogger(__name__)\n\n\nclass PostgreSQLDataLoader(ExternalDataLoader):\n\n    @staticmethod\n    def list_params() -> list[dict[str, Any]]:\n        params_list = [\n            {\"name\": \"user\", \"type\": \"string\", \"required\": True, \"default\": \"postgres\", \"description\": \"PostgreSQL username\"}, \n            {\"name\": \"password\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"leave blank for no password\"}, \n            {\"name\": \"host\", \"type\": \"string\", \"required\": True, \"default\": \"localhost\", \"description\": \"PostgreSQL host\"}, \n            {\"name\": \"port\", \"type\": \"string\", \"required\": False, \"default\": \"5432\", \"description\": \"PostgreSQL port\"},\n            {\"name\": \"database\", \"type\": \"string\", \"required\": True, \"default\": \"postgres\", \"description\": \"PostgreSQL database name\"}\n        ]\n        return params_list\n\n    @staticmethod\n    def auth_instructions() -> str:\n        return \"\"\"**Example:** user: `postgres` · host: `localhost` · port: `5432` · database: `mydb`\n\n**Local setup:** Ensure PostgreSQL is running — `brew services list` (macOS) or `systemctl status postgresql` (Linux). Leave password blank if none is set.\n\n**Remote setup:** Get host, port, username, and password from your database administrator. The user must have SELECT permissions on the tables you want to access.\n\n**Troubleshooting:** Test with `psql -U <user> -h <host> -p <port> -d <database>`\"\"\"\n\n    def __init__(self, params: dict[str, Any]):\n        self.params = params\n\n        self.host = self.params.get(\"host\", \"\")\n        self.port = self.params.get(\"port\", \"\") or \"5432\"\n        self.user = self.params.get(\"user\", \"\")\n        self.database = self.params.get(\"database\", \"\")\n        self.password = self.params.get(\"password\", \"\")\n\n        if not self.host:\n            raise ValueError(\"PostgreSQL host is required\")\n        if not self.user:\n            raise ValueError(\"PostgreSQL user is required\")\n        if not self.database:\n            raise ValueError(\"PostgreSQL database is required\")\n\n        # Build connection URL for connectorx: postgresql://user:password@host:port/database\n        # - Use explicit empty password (user:@host) so the URL parser sees user vs password correctly.\n        # - Use 127.0.0.1 when host is localhost to force IPv4 TCP and avoid IPv6 ::1 connection issues.\n        host_for_url = \"127.0.0.1\" if (self.host or \"\").strip().lower() == \"localhost\" else self.host\n        if self.password:\n            self.connection_url = f\"postgresql://{self.user}:{self.password}@{host_for_url}:{self.port}/{self.database}\"\n        else:\n            self.connection_url = f\"postgresql://{self.user}:@{host_for_url}:{self.port}/{self.database}\"\n\n        try:\n            cx.read_sql(self.connection_url, \"SELECT 1\", return_type=\"arrow\")\n        except Exception as e:\n            logger.error(f\"Failed to connect to PostgreSQL (postgresql://{self.user}:***@{self.host}:{self.port}/{self.database}): {e}\")\n            raise ValueError(f\"Failed to connect to PostgreSQL database '{self.database}' on host '{self.host}': {e}\") from e\n        logger.info(f\"Successfully connected to PostgreSQL: postgresql://{self.user}:***@{self.host}:{self.port}/{self.database}\")\n\n    # PostgreSQL types that connectorx cannot handle natively\n    _CX_SPATIAL_TYPES = {'geometry', 'geography'}  # PostGIS types → ST_AsText()\n    _CX_OTHER_UNSUPPORTED = {'box', 'circle', 'line', 'lseg', 'path', 'point',\n                              'polygon', 'bit', 'bit varying', 'xml', 'tsvector', 'tsquery'}\n    _CX_UNSUPPORTED_TYPES = _CX_SPATIAL_TYPES | _CX_OTHER_UNSUPPORTED\n\n    def _safe_select_list(self, schema: str, table_name: str) -> str:\n        \"\"\"Build a SELECT column list that converts unsupported types to text.\n        Uses ST_AsText() for PostGIS types, ::text for others.\n        Returns '*' if no unsupported columns are found.\"\"\"\n        try:\n            columns_query = f\"\"\"\n                SELECT column_name, udt_name\n                FROM information_schema.columns\n                WHERE table_schema = '{schema}' AND table_name = '{table_name}'\n                ORDER BY ordinal_position\n            \"\"\"\n            cols_arrow = cx.read_sql(self.connection_url, columns_query, return_type=\"arrow\")\n            cols_df = cols_arrow.to_pandas()\n            has_unsupported = any(r['udt_name'].lower() in self._CX_UNSUPPORTED_TYPES for _, r in cols_df.iterrows())\n            if not has_unsupported:\n                return \"*\"\n            parts = []\n            for _, r in cols_df.iterrows():\n                col, dtype = r['column_name'], r['udt_name'].lower()\n                if dtype in self._CX_SPATIAL_TYPES:\n                    parts.append(f'ST_AsText(\"{col}\") AS \"{col}\"')\n                elif dtype in self._CX_OTHER_UNSUPPORTED:\n                    parts.append(f'\"{col}\"::text AS \"{col}\"')\n                else:\n                    parts.append(f'\"{col}\"')\n            return ', '.join(parts)\n        except Exception:\n            return \"*\"\n\n    def fetch_data_as_arrow(\n        self,\n        source_table: str,\n        size: int = 1000000,\n        sort_columns: list[str] | None = None,\n        sort_order: str = 'asc'\n    ) -> pa.Table:\n        \"\"\"\n        Fetch data from PostgreSQL as a PyArrow Table using connectorx.\n        \n        connectorx provides extremely fast Arrow-native data access,\n        typically 2-10x faster than pandas-based approaches.\n        \"\"\"\n        if not source_table:\n            raise ValueError(\"source_table must be provided\")\n        \n        # Handle table names like \"mypostgresdb.schema.table\" -> \"schema.table\"\n        table_ref = source_table\n        if source_table.startswith(\"mypostgresdb.\"):\n            table_ref = source_table[len(\"mypostgresdb.\"):]\n        # Build safe column list for the resolved schema.table\n        if '.' in table_ref:\n            s, t = table_ref.split('.', 1)\n            col_list = self._safe_select_list(s.strip('\"'), t.strip('\"'))\n        else:\n            col_list = self._safe_select_list('public', table_ref.strip('\"'))\n        base_query = f\"SELECT {col_list} FROM {table_ref}\"\n        \n        # Add ORDER BY if sort columns specified\n        order_by_clause = \"\"\n        if sort_columns and len(sort_columns) > 0:\n            order_direction = \"DESC\" if sort_order == 'desc' else \"ASC\"\n            sanitized_cols = [f'\"{col}\" {order_direction}' for col in sort_columns]\n            order_by_clause = f\" ORDER BY {', '.join(sanitized_cols)}\"\n        \n        # Build full query with limit\n        query = f\"{base_query}{order_by_clause} LIMIT {size}\"\n        \n        logger.info(f\"Executing PostgreSQL query via connectorx: {query[:200]}...\")\n        \n        # Execute with connectorx - returns Arrow table directly\n        arrow_table = cx.read_sql(self.connection_url, query, return_type=\"arrow\")\n        \n        logger.info(f\"Fetched {arrow_table.num_rows} rows from PostgreSQL [Arrow-native]\")\n        \n        return arrow_table\n\n    def list_tables(self, table_filter: str | None = None) -> list[dict[str, Any]]:\n        \"\"\"List available tables from PostgreSQL.\"\"\"\n        return self._list_tables_connectorx(table_filter)\n\n    def _list_tables_connectorx(self, table_filter: str | None = None) -> list[dict[str, Any]]:\n        \"\"\"List tables using connectorx.\"\"\"\n        try:\n            # Query tables from information_schema\n            query = \"\"\"\n                SELECT table_schema as schemaname, table_name as tablename \n                FROM information_schema.tables \n                WHERE table_schema NOT IN ('information_schema', 'pg_catalog', 'pg_toast') \n                AND table_schema NOT LIKE '%_intern%' \n                AND table_schema NOT LIKE '%timescaledb%'\n                AND table_name NOT LIKE '%/%'\n                AND table_type = 'BASE TABLE'\n                ORDER BY table_schema, table_name\n            \"\"\"\n            tables_arrow = cx.read_sql(self.connection_url, query, return_type=\"arrow\")\n            tables_df = tables_arrow.to_pandas()\n            \n            logger.info(f\"Found {len(tables_df)} tables\")\n            \n            results = []\n            \n            for _, row in tables_df.iterrows():\n                schema = row['schemaname']\n                table_name = row['tablename']\n                full_table_name = f\"{schema}.{table_name}\"\n                \n                # Apply filter if provided\n                if table_filter and table_filter.lower() not in full_table_name.lower():\n                    continue\n                \n                try:\n                    # Get column information\n                    columns_query = f\"\"\"\n                        SELECT column_name, data_type \n                        FROM information_schema.columns \n                        WHERE table_schema = '{schema}' AND table_name = '{table_name}'\n                        ORDER BY ordinal_position\n                    \"\"\"\n                    columns_arrow = cx.read_sql(self.connection_url, columns_query, return_type=\"arrow\")\n                    columns_df = columns_arrow.to_pandas()\n                    columns = [{\n                        'name': col_row['column_name'],\n                        'type': col_row['data_type']\n                    } for _, col_row in columns_df.iterrows()]\n                    \n                    # Build safe column list (casts unsupported types to TEXT)\n                    col_list = self._safe_select_list(schema, table_name)\n                    \n                    # Get sample data\n                    sample_rows = []\n                    sample_query = f'SELECT {col_list} FROM \"{schema}\".\"{table_name}\" LIMIT 10'\n                    try:\n                        sample_arrow = cx.read_sql(self.connection_url, sample_query, return_type=\"arrow\")\n                        sample_df = sample_arrow.to_pandas()\n                        sample_rows = json.loads(sample_df.to_json(orient=\"records\"))\n                    except Exception as sample_err:\n                        logger.warning(f\"Could not sample {full_table_name}: {sample_err}\")\n                    \n                    # Get row count\n                    count_query = f'SELECT COUNT(*) as cnt FROM \"{schema}\".\"{table_name}\"'\n                    count_arrow = cx.read_sql(self.connection_url, count_query, return_type=\"arrow\")\n                    row_count = count_arrow.to_pandas()['cnt'].iloc[0]\n                    \n                    table_metadata = {\n                        \"row_count\": int(row_count),\n                        \"columns\": columns,\n                        \"sample_rows\": sample_rows\n                    }\n                    \n                    results.append({\n                        \"name\": full_table_name,\n                        \"metadata\": table_metadata\n                    })\n                    \n                except Exception as e:\n                    logger.warning(f\"Error processing table {full_table_name}: {e}\")\n                    continue\n            \n            return results\n\n        except Exception as e:\n            logger.error(f\"Error listing tables: {e}\")\n            return []\n"
  },
  {
    "path": "py-src/data_formulator/data_loader/s3_data_loader.py",
    "content": "import json\nimport logging\nfrom typing import Any\n\nimport boto3\nimport pandas as pd\nimport pyarrow as pa\nimport pyarrow.csv as pa_csv\nimport pyarrow.parquet as pq\nfrom pyarrow import fs as pa_fs\n\nfrom data_formulator.data_loader.external_data_loader import ExternalDataLoader\n\nlogger = logging.getLogger(__name__)\n\n\nclass S3DataLoader(ExternalDataLoader):\n\n    @staticmethod\n    def list_params() -> list[dict[str, Any]]:\n        params_list = [\n            {\"name\": \"aws_access_key_id\", \"type\": \"string\", \"required\": True, \"default\": \"\", \"description\": \"AWS access key ID\"},\n            {\"name\": \"aws_secret_access_key\", \"type\": \"string\", \"required\": True, \"default\": \"\", \"description\": \"AWS secret access key\"},\n            {\"name\": \"aws_session_token\", \"type\": \"string\", \"required\": False, \"default\": \"\", \"description\": \"AWS session token (required for temporary credentials)\"},\n            {\"name\": \"region_name\", \"type\": \"string\", \"required\": True, \"default\": \"us-east-1\", \"description\": \"AWS region name\"},\n            {\"name\": \"bucket\", \"type\": \"string\", \"required\": True, \"default\": \"\", \"description\": \"S3 bucket name\"}\n        ]\n        return params_list\n\n    @staticmethod\n    def auth_instructions() -> str:\n        return \"\"\"**Example:** aws_access_key_id: `AKIA...` · aws_secret_access_key: `wJalr...` · region_name: `us-east-1` · bucket: `my-data-bucket`\n\n**Getting credentials:** AWS Console → IAM → Users → Security credentials → Create access key → choose \"Application running outside AWS\".\n\n**Required permissions:** `s3:GetObject` and `s3:ListBucket` on your bucket.\n\n**Supported formats:** CSV, Parquet, JSON, JSONL\"\"\"\n\n    def __init__(self, params: dict[str, Any]):\n        self.params = params\n\n        self.aws_access_key_id = params.get(\"aws_access_key_id\", \"\")\n        self.aws_secret_access_key = params.get(\"aws_secret_access_key\", \"\")\n        self.aws_session_token = params.get(\"aws_session_token\", \"\")\n        self.region_name = params.get(\"region_name\", \"us-east-1\")\n        self.bucket = params.get(\"bucket\", \"\")\n\n        self.s3_fs = pa_fs.S3FileSystem(\n            access_key=self.aws_access_key_id,\n            secret_key=self.aws_secret_access_key,\n            session_token=self.aws_session_token if self.aws_session_token else None,\n            region=self.region_name,\n        )\n        logger.info(f\"Initialized PyArrow S3 filesystem for bucket: {self.bucket}\")\n\n    def fetch_data_as_arrow(\n        self,\n        source_table: str,\n        size: int = 1000000,\n        sort_columns: list[str] | None = None,\n        sort_order: str = 'asc'\n    ) -> pa.Table:\n        \"\"\"\n        Fetch data from S3 as a PyArrow Table using PyArrow's native S3 filesystem.\n        \n        For files (parquet, csv), reads directly using PyArrow.\n        \"\"\"\n        if not source_table:\n            raise ValueError(\"source_table (S3 URL) must be provided\")\n        \n        s3_url = source_table\n        \n        # Parse S3 URL: s3://bucket/key -> bucket/key for PyArrow\n        if s3_url.startswith(\"s3://\"):\n            s3_path = s3_url[5:]  # Remove \"s3://\"\n        else:\n            s3_path = f\"{self.bucket}/{s3_url}\"\n        \n        logger.info(f\"Reading S3 file via PyArrow: {s3_url}\")\n        \n        # Read based on file extension\n        if s3_url.lower().endswith('.parquet'):\n            arrow_table = pq.read_table(s3_path, filesystem=self.s3_fs)\n        elif s3_url.lower().endswith('.csv'):\n            with self.s3_fs.open_input_file(s3_path) as f:\n                arrow_table = pa_csv.read_csv(f)\n        elif s3_url.lower().endswith('.json') or s3_url.lower().endswith('.jsonl'):\n            import pyarrow.json as pa_json\n            with self.s3_fs.open_input_file(s3_path) as f:\n                arrow_table = pa_json.read_json(f)\n        else:\n            raise ValueError(f\"Unsupported file type: {s3_url}\")\n        \n        # Apply sorting if specified\n        if sort_columns and len(sort_columns) > 0:\n            df = arrow_table.to_pandas()\n            ascending = sort_order != 'desc'\n            df = df.sort_values(by=sort_columns, ascending=ascending)\n            arrow_table = pa.Table.from_pandas(df, preserve_index=False)\n        \n        # Apply size limit\n        if arrow_table.num_rows > size:\n            arrow_table = arrow_table.slice(0, size)\n        \n        logger.info(f\"Fetched {arrow_table.num_rows} rows from S3 [Arrow-native]\")\n        \n        return arrow_table\n\n    def list_tables(self, table_filter: str | None = None) -> list[dict[str, Any]]:\n        \"\"\"List available files from S3 bucket.\"\"\"\n        s3_client = boto3.client(\n            's3',\n            aws_access_key_id=self.aws_access_key_id,\n            aws_secret_access_key=self.aws_secret_access_key,\n            aws_session_token=self.aws_session_token if self.aws_session_token else None,\n            region_name=self.region_name\n        )\n        \n        response = s3_client.list_objects_v2(Bucket=self.bucket)\n        \n        results = []\n        \n        if 'Contents' in response:\n            for obj in response['Contents']:\n                key = obj['Key']\n                \n                if key.endswith('/') or not self._is_supported_file(key):\n                    continue\n                \n                if table_filter and table_filter.lower() not in key.lower():\n                    continue\n                \n                s3_url = f\"s3://{self.bucket}/{key}\"\n                \n                try:\n                    sample_table = self._read_sample_arrow(s3_url, 10)\n                    sample_df = sample_table.to_pandas()\n                    \n                    columns = [{\n                        'name': col,\n                        'type': str(sample_df[col].dtype)\n                    } for col in sample_df.columns]\n                    \n                    sample_rows = json.loads(sample_df.to_json(orient=\"records\"))\n                    row_count = self._estimate_row_count(s3_url)\n                    \n                    table_metadata = {\n                        \"row_count\": row_count,\n                        \"columns\": columns,\n                        \"sample_rows\": sample_rows\n                    }\n                    \n                    results.append({\n                        \"name\": s3_url,\n                        \"metadata\": table_metadata\n                    })\n                except Exception as e:\n                    logger.warning(f\"Error reading {s3_url}: {e}\")\n                    continue\n        \n        return results\n    \n    def _read_sample_arrow(self, s3_url: str, limit: int) -> pa.Table:\n        \"\"\"Read sample data using PyArrow S3 filesystem.\"\"\"\n        s3_path = s3_url[5:] if s3_url.startswith(\"s3://\") else s3_url\n        \n        if s3_url.lower().endswith('.parquet'):\n            table = pq.read_table(s3_path, filesystem=self.s3_fs)\n        elif s3_url.lower().endswith('.csv'):\n            with self.s3_fs.open_input_file(s3_path) as f:\n                table = pa_csv.read_csv(f)\n        elif s3_url.lower().endswith('.json') or s3_url.lower().endswith('.jsonl'):\n            import pyarrow.json as pa_json\n            with self.s3_fs.open_input_file(s3_path) as f:\n                table = pa_json.read_json(f)\n        else:\n            raise ValueError(f\"Unsupported file type: {s3_url}\")\n        \n        return table.slice(0, limit) if table.num_rows > limit else table\n    \n    def _is_supported_file(self, key: str) -> bool:\n        \"\"\"Check if the file type is supported (CSV, Parquet, JSON).\"\"\"\n        supported_extensions = [\".csv\", \".parquet\", \".json\", \".jsonl\"]\n        return any(key.lower().endswith(ext) for ext in supported_extensions)\n    \n    def _estimate_row_count(self, s3_url: str) -> int:\n        \"\"\"Estimate the number of rows in a file.\"\"\"\n        try:\n            # For parquet files, use PyArrow metadata for exact count\n            if s3_url.lower().endswith('.parquet'):\n                s3_path = s3_url[5:] if s3_url.startswith(\"s3://\") else s3_url\n                parquet_file = pq.ParquetFile(s3_path, filesystem=self.s3_fs)\n                return parquet_file.metadata.num_rows\n            \n            # For CSV, JSON, and JSONL files, skip row count for efficiency\n            return 0\n        except Exception as e:\n            logger.warning(f\"Error estimating row count for {s3_url}: {e}\")\n            return 0"
  },
  {
    "path": "py-src/data_formulator/datalake/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nData Lake module for Data Formulator.\n\nThis module provides a unified data management layer that:\n- Manages user workspaces with identity-based directories\n- Stores user-uploaded files as-is (CSV, Excel, TXT, HTML, JSON, PDF)\n- Stores data from external loaders as parquet via pyarrow\n- Tracks all data sources in a workspace.yaml metadata file\n\nExample usage:\n\n    from data_formulator.datalake import Workspace, save_uploaded_file, write_parquet\n    \n    # Get or create a workspace for a user\n    workspace = Workspace(\"user:123\")\n    \n    # Save an uploaded file\n    with open(\"sales.csv\", \"rb\") as f:\n        metadata = save_uploaded_file(workspace, f.read(), \"sales.csv\")\n    \n    # Write a DataFrame as parquet (typically from data loaders)\n    import pandas as pd\n    df = pd.DataFrame({\"id\": [1, 2, 3], \"name\": [\"a\", \"b\", \"c\"]})\n    metadata = write_parquet(workspace, df, \"customers\")\n    \n    # List tables in workspace\n    tables = workspace.list_tables()\n    \n    # Read parquet back\n    df = read_parquet(workspace, \"customers\")\n\"\"\"\n\n# Workspace management\nfrom data_formulator.datalake.workspace import (\n    Workspace,\n    WorkspaceWithTempData,\n    get_data_formulator_home,\n    get_default_workspace_root,\n)\nfrom data_formulator.datalake.azure_blob_workspace import AzureBlobWorkspace\nfrom data_formulator.datalake.cached_azure_blob_workspace import CachedAzureBlobWorkspace\nfrom data_formulator.datalake.cache_manager import GlobalCacheManager\n\n# Metadata types and operations\nfrom data_formulator.datalake.metadata import (\n    TableMetadata,\n    ColumnInfo,\n    WorkspaceMetadata,\n    load_metadata,\n    save_metadata,\n    metadata_exists,\n    METADATA_VERSION,\n    METADATA_FILENAME,\n)\n\n# File operations (for user uploads)\nfrom data_formulator.datalake.file_manager import (\n    save_uploaded_file,\n    save_uploaded_file_from_path,\n    is_supported_file,\n    get_file_type,\n    get_file_info,\n    SUPPORTED_EXTENSIONS,\n)\n\n# Parquet utilities (pure helpers, no Workspace dependency)\nfrom data_formulator.datalake.parquet_utils import (\n    sanitize_table_name,\n    DEFAULT_COMPRESSION,\n)\n\n__all__ = [\n    # Workspace\n    \"Workspace\",\n    \"WorkspaceWithTempData\",\n    \"AzureBlobWorkspace\",\n    \"CachedAzureBlobWorkspace\",\n    \"GlobalCacheManager\",\n    \"get_data_formulator_home\",\n    \"get_default_workspace_root\",\n    # Metadata\n    \"TableMetadata\",\n    \"ColumnInfo\",\n    \"WorkspaceMetadata\",\n    \"load_metadata\",\n    \"save_metadata\",\n    \"metadata_exists\",\n    \"METADATA_VERSION\",\n    \"METADATA_FILENAME\",\n    # File manager\n    \"save_uploaded_file\",\n    \"save_uploaded_file_from_path\",\n    \"get_supported_extensions\",\n    \"is_supported_file\",\n    \"get_file_type\",\n    \"get_file_info\",\n    \"SUPPORTED_EXTENSIONS\",\n    # Parquet utilities\n    \"sanitize_table_name\",\n    \"DEFAULT_COMPRESSION\",\n]\n"
  },
  {
    "path": "py-src/data_formulator/datalake/azure_blob_workspace.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nAzure Blob Storage–backed workspace for the Data Lake.\n\nDrop-in replacement for :class:`Workspace` where every file (data files\n**and** ``workspace.yaml`` metadata) lives as a blob under::\n\n    <container>/<datalake_root>/<sanitized_identity_id>/\n\nRequires ``azure-storage-blob`` (``pip install azure-storage-blob``).\n\nUsage::\n\n    from azure.storage.blob import ContainerClient\n\n    container = ContainerClient.from_connection_string(conn_str, \"my-container\")\n    ws = AzureBlobWorkspace(\"user:42\", container, datalake_root=\"workspaces\")\n\"\"\"\n\nfrom __future__ import annotations\n\nimport io\nimport json\nimport logging\nimport shutil\nimport tempfile\nimport zipfile\nfrom contextlib import contextmanager\nfrom datetime import datetime, timezone\nfrom pathlib import Path\nfrom typing import Any, Optional, TYPE_CHECKING\n\nimport pandas as pd\nimport pyarrow as pa\nimport pyarrow.parquet as pq\nimport yaml\n\nfrom data_formulator.datalake.metadata import (\n    WorkspaceMetadata,\n    TableMetadata,\n    METADATA_FILENAME,\n)\nfrom werkzeug.utils import secure_filename\nfrom data_formulator.datalake.parquet_utils import (\n    sanitize_table_name,\n    get_arrow_column_info,\n    compute_arrow_table_hash,\n    get_column_info,\n    compute_dataframe_hash,\n    sanitize_dataframe_for_arrow,\n    DEFAULT_COMPRESSION,\n)\nfrom data_formulator.datalake.workspace import Workspace\n\nif TYPE_CHECKING:\n    from azure.storage.blob import ContainerClient\n\nlogger = logging.getLogger(__name__)\n\n\nclass AzureBlobWorkspace(Workspace):\n    \"\"\"\n    Workspace backed by Azure Blob Storage.\n\n    All files (data + ``workspace.yaml``) are stored as blobs under\n    ``<datalake_root>/<sanitized_identity_id>/`` inside the given container.\n\n    Inherits from :class:`Workspace` so it is a drop-in replacement\n    everywhere a ``Workspace`` is expected. Methods that only call other\n    (overridden) methods — ``add_table_metadata``, ``get_table_metadata``,\n    ``list_tables``, ``get_fresh_name``, ``get_relative_data_file_path``,\n    ``refresh_parquet*`` — are inherited unchanged.\n    \"\"\"\n\n    # ------------------------------------------------------------------\n    # Construction\n    # ------------------------------------------------------------------\n\n    def __init__(\n        self,\n        identity_id: str,\n        container_client: ContainerClient,\n        datalake_root: str = \"\",\n    ):\n        \"\"\"\n        Args:\n            identity_id: Unique user identifier (e.g. ``\"user:123\"``).\n            container_client: An ``azure.storage.blob.ContainerClient``\n                already authenticated and pointing at the target container.\n            datalake_root: Optional path prefix inside the container\n                (e.g. ``\"workspaces\"``).  Leading/trailing slashes are\n                stripped automatically.\n        \"\"\"\n        if not identity_id:\n            raise ValueError(\"identity_id cannot be empty\")\n\n        # --- identity -------------------------------------------------------\n        self._identity_id = identity_id\n        self._safe_id = self._sanitize_identity_id(identity_id)\n\n        # --- blob storage ----------------------------------------------------\n        self._container: ContainerClient = container_client\n        root = datalake_root.strip(\"/\")\n        self._datalake_root = root\n        self._prefix = f\"{root}/{self._safe_id}/\" if root else f\"{self._safe_id}/\"\n\n        # _path / _root are not meaningful for blob storage but some code\n        # (e.g. sandbox) may reference them, so we set them to None rather\n        # than leaving them undefined.\n        self._root = None  # type: ignore[assignment]\n        self._path = None  # type: ignore[assignment]\n\n        # --- in-memory metadata cache ----------------------------------------\n        # Avoids re-downloading workspace.yaml on every method call.\n        # Invalidated automatically by save_metadata() and cleanup().\n        self._metadata_cache: Optional[WorkspaceMetadata] = None\n\n        # --- blob data cache -------------------------------------------------\n        # Caches downloaded blob bytes keyed by filename.  Avoids repeated\n        # downloads of the same data file within one request (e.g.\n        # analyze_table calls run_parquet_sql once per column, each of\n        # which would otherwise re-download the entire parquet blob).\n        # Invalidated per-file on upload/delete, cleared on cleanup.\n        self._blob_data_cache: dict[str, bytes] = {}\n\n        # --- metadata --------------------------------------------------------\n        if not self._blob_exists(METADATA_FILENAME):\n            self._init_metadata()\n\n        logger.debug(\"Initialized AzureBlobWorkspace at %s\", self._prefix)\n\n    # ------------------------------------------------------------------\n    # Low-level blob helpers\n    # ------------------------------------------------------------------\n\n    def _blob_name(self, filename: str) -> str:\n        \"\"\"Full blob name for *filename* within this workspace.\"\"\"\n        return f\"{self._prefix}{filename}\"\n\n    def _get_blob(self, filename: str):\n        \"\"\"Return a ``BlobClient`` for *filename*.\"\"\"\n        return self._container.get_blob_client(self._blob_name(filename))\n\n    def _blob_exists(self, filename: str) -> bool:\n        from azure.core.exceptions import ResourceNotFoundError\n        try:\n            self._get_blob(filename).get_blob_properties()\n            return True\n        except ResourceNotFoundError:\n            return False\n\n    def _upload_bytes(\n        self, filename: str, data: bytes | str, *, overwrite: bool = True\n    ) -> int:\n        \"\"\"Upload *data* to blob.  Returns size in bytes.\"\"\"\n        raw = data.encode(\"utf-8\") if isinstance(data, str) else data\n        self._get_blob(filename).upload_blob(raw, overwrite=overwrite)\n        # Invalidate cached copy of this file\n        self._blob_data_cache.pop(filename, None)\n        if hasattr(self, \"_temp_file_cache\") and filename in self._temp_file_cache:\n            self._temp_file_cache.pop(filename).unlink(missing_ok=True)\n        return len(raw)\n\n    def _download_bytes(self, filename: str) -> bytes:\n        cached = self._blob_data_cache.get(filename)\n        if cached is not None:\n            return cached\n        data = self._get_blob(filename).download_blob().readall()\n        self._blob_data_cache[filename] = data\n        return data\n\n    def _delete_blob(self, filename: str) -> None:\n        self._get_blob(filename).delete_blob()\n        self._blob_data_cache.pop(filename, None)\n        if hasattr(self, \"_temp_file_cache\") and filename in self._temp_file_cache:\n            self._temp_file_cache.pop(filename).unlink(missing_ok=True)\n\n    @contextmanager\n    def _temp_local_copy(self, filename: str):\n        \"\"\"Yield a local file path containing the blob's data.\n\n        The file is cached on disk for the lifetime of this workspace\n        instance so that repeated calls (e.g. ``run_parquet_sql`` once\n        per column in ``analyze_table``) don't re-write the temp file.\n        The cache is keyed by filename and cleaned up when the instance\n        is garbage-collected or when :meth:`cleanup` is called.\n        \"\"\"\n        if not hasattr(self, \"_temp_file_cache\"):\n            self._temp_file_cache: dict[str, Path] = {}\n\n        tmp_path = self._temp_file_cache.get(filename)\n        if tmp_path is None or not tmp_path.exists():\n            data = self._download_bytes(filename)\n            suffix = Path(filename).suffix\n            tmp = tempfile.NamedTemporaryFile(suffix=suffix, delete=False)\n            tmp.write(data)\n            tmp.close()\n            tmp_path = Path(tmp.name)\n            self._temp_file_cache[filename] = tmp_path\n\n        yield tmp_path\n        # Don't delete — reused across calls, cleaned up on GC / cleanup()\n\n    def _cleanup_temp_files(self) -> None:\n        \"\"\"Remove all cached temp files from disk.\"\"\"\n        for path in getattr(self, \"_temp_file_cache\", {}).values():\n            path.unlink(missing_ok=True)\n        if hasattr(self, \"_temp_file_cache\"):\n            self._temp_file_cache.clear()\n\n    def __del__(self) -> None:\n        self._cleanup_temp_files()\n\n    # ------------------------------------------------------------------\n    # Metadata overrides\n    # ------------------------------------------------------------------\n\n    def _init_metadata(self) -> None:\n        metadata = WorkspaceMetadata.create_new()\n        self.save_metadata(metadata)\n        logger.info(\"Initialized new workspace metadata in blob: %s\", self._prefix)\n\n    def get_metadata(self) -> WorkspaceMetadata:\n        if self._metadata_cache is not None:\n            return self._metadata_cache\n        raw = self._download_bytes(METADATA_FILENAME)\n        parsed = yaml.safe_load(raw)\n        if parsed is None:\n            raise ValueError(\"Metadata blob parsed to None\")\n        self._metadata_cache = WorkspaceMetadata.from_dict(parsed)\n        return self._metadata_cache\n\n    def save_metadata(self, metadata: WorkspaceMetadata) -> None:\n        metadata.updated_at = datetime.now(timezone.utc)\n        content = yaml.dump(\n            metadata.to_dict(),\n            default_flow_style=False,\n            allow_unicode=True,\n            sort_keys=False,\n        )\n        self._upload_bytes(METADATA_FILENAME, content)\n        # Update the cache with the just-saved metadata\n        self._metadata_cache = metadata\n\n    def invalidate_metadata_cache(self) -> None:\n        \"\"\"Force the next get_metadata() to re-read from blob storage.\"\"\"\n        self._metadata_cache = None\n\n    # ------------------------------------------------------------------\n    # File / table operations\n    # ------------------------------------------------------------------\n\n    def get_file_path(self, filename: str) -> str:  # type: ignore[override]\n        \"\"\"Return the full blob name for *filename*.\n\n        .. note::\n            The return type is ``str`` (a blob path), **not** a local\n            ``pathlib.Path``.  Code that opens the result as a local file\n            will not work — use :meth:`read_data_as_df`,\n            :meth:`download_file`, or :meth:`_temp_local_copy` instead.\n        \"\"\"\n        safe_filename = secure_filename(filename)\n        if not safe_filename:\n            raise ValueError(f\"Invalid filename: {filename!r}\")\n        return self._blob_name(safe_filename)\n\n    def file_exists(self, filename: str) -> bool:\n        safe_filename = Path(filename).name\n        return self._blob_exists(safe_filename)\n\n    def delete_table(self, table_name: str) -> bool:\n        metadata = self.get_metadata()\n        table = metadata.get_table(table_name)\n        if table is None:\n            return False\n\n        if self._blob_exists(table.filename):\n            self._delete_blob(table.filename)\n\n        metadata.remove_table(table_name)\n        self.save_metadata(metadata)\n        logger.info(\"Deleted table %s from blob workspace %s\", table_name, self._safe_id)\n        return True\n\n    def cleanup(self) -> None:\n        \"\"\"Delete **all** blobs under this workspace's prefix.\"\"\"\n        for blob in self._container.list_blobs(name_starts_with=self._prefix):\n            self._container.delete_blob(blob.name)\n        self._metadata_cache = None\n        self._blob_data_cache.clear()\n        self._cleanup_temp_files()\n        logger.info(\"Cleaned up blob workspace %s\", self._safe_id)\n\n    # ------------------------------------------------------------------\n    # Read\n    # ------------------------------------------------------------------\n\n    def read_data_as_df(self, table_name: str) -> pd.DataFrame:\n        meta = self.get_table_metadata(table_name)\n        if meta is None:\n            raise FileNotFoundError(f\"Table not found: {table_name}\")\n        if not self._blob_exists(meta.filename):\n            raise FileNotFoundError(f\"Blob not found: {meta.filename}\")\n\n        buf = io.BytesIO(self._download_bytes(meta.filename))\n        readers = {\n            \"parquet\": lambda b: pd.read_parquet(b),\n            \"csv\": lambda b: pd.read_csv(b),\n            \"excel\": lambda b: pd.read_excel(b),\n            \"json\": lambda b: pd.read_json(b),\n            \"txt\": lambda b: pd.read_csv(b, sep=\"\\t\"),\n        }\n        reader = readers.get(meta.file_type)\n        if reader is None:\n            raise ValueError(\n                f\"Unsupported file type '{meta.file_type}' for table '{table_name}'. \"\n                f\"Supported: {', '.join(readers)}.\"\n            )\n        return reader(buf)\n\n    # ------------------------------------------------------------------\n    # Parquet write\n    # ------------------------------------------------------------------\n\n    def write_parquet_from_arrow(\n        self,\n        table: pa.Table,\n        table_name: str,\n        compression: str = DEFAULT_COMPRESSION,\n        loader_metadata: Optional[dict[str, Any]] = None,\n    ) -> TableMetadata:\n        safe_name = sanitize_table_name(table_name)\n        filename = f\"{safe_name}.parquet\"\n\n        # Remove old blob if overwriting\n        ws_meta = self.get_metadata()\n        if safe_name in ws_meta.tables:\n            old_fn = ws_meta.tables[safe_name].filename\n            if self._blob_exists(old_fn):\n                self._delete_blob(old_fn)\n\n        # Serialise to bytes, upload\n        buf = io.BytesIO()\n        pq.write_table(table, buf, compression=compression)\n        blob_bytes = buf.getvalue()\n        self._upload_bytes(filename, blob_bytes)\n\n        now = datetime.now(timezone.utc)\n        table_metadata = TableMetadata(\n            name=safe_name,\n            source_type=\"data_loader\",\n            filename=filename,\n            file_type=\"parquet\",\n            created_at=now,\n            content_hash=compute_arrow_table_hash(table),\n            file_size=len(blob_bytes),\n            row_count=table.num_rows,\n            columns=get_arrow_column_info(table),\n            last_synced=now,\n        )\n\n        if loader_metadata:\n            table_metadata.loader_type = loader_metadata.get(\"loader_type\")\n            table_metadata.loader_params = loader_metadata.get(\"loader_params\")\n            table_metadata.source_table = loader_metadata.get(\"source_table\")\n            table_metadata.source_query = loader_metadata.get(\"source_query\")\n\n        self.add_table_metadata(table_metadata)\n        logger.info(\n            \"Wrote parquet blob %s: %d rows, %d cols (%d bytes) [Arrow]\",\n            filename, table.num_rows, table.num_columns, len(blob_bytes),\n        )\n        return table_metadata\n\n    def write_parquet(\n        self,\n        df: pd.DataFrame,\n        table_name: str,\n        compression: str = DEFAULT_COMPRESSION,\n        loader_metadata: Optional[dict[str, Any]] = None,\n    ) -> TableMetadata:\n        safe_name = sanitize_table_name(table_name)\n        filename = f\"{safe_name}.parquet\"\n\n        ws_meta = self.get_metadata()\n        if safe_name in ws_meta.tables:\n            old_fn = ws_meta.tables[safe_name].filename\n            if self._blob_exists(old_fn):\n                self._delete_blob(old_fn)\n\n        sanitized_df = sanitize_dataframe_for_arrow(df)\n        arrow_table = pa.Table.from_pandas(sanitized_df)\n\n        buf = io.BytesIO()\n        pq.write_table(arrow_table, buf, compression=compression)\n        blob_bytes = buf.getvalue()\n        self._upload_bytes(filename, blob_bytes)\n\n        now = datetime.now(timezone.utc)\n        table_metadata = TableMetadata(\n            name=safe_name,\n            source_type=\"data_loader\",\n            filename=filename,\n            file_type=\"parquet\",\n            created_at=now,\n            content_hash=compute_dataframe_hash(df),\n            file_size=len(blob_bytes),\n            row_count=len(df),\n            columns=get_column_info(df),\n            last_synced=now,\n        )\n\n        if loader_metadata:\n            table_metadata.loader_type = loader_metadata.get(\"loader_type\")\n            table_metadata.loader_params = loader_metadata.get(\"loader_params\")\n            table_metadata.source_table = loader_metadata.get(\"source_table\")\n            table_metadata.source_query = loader_metadata.get(\"source_query\")\n\n        self.add_table_metadata(table_metadata)\n        logger.info(\n            \"Wrote parquet blob %s: %d rows, %d cols (%d bytes)\",\n            filename, len(df), len(df.columns), len(blob_bytes),\n        )\n        return table_metadata\n\n    # ------------------------------------------------------------------\n    # Parquet read helpers\n    # ------------------------------------------------------------------\n\n    def get_parquet_schema(self, table_name: str) -> dict:\n        meta = self.get_table_metadata(table_name)\n        if meta is None:\n            raise FileNotFoundError(f\"Table not found: {table_name}\")\n        if meta.file_type != \"parquet\":\n            raise ValueError(f\"Table {table_name} is not a parquet file\")\n        if not self._blob_exists(meta.filename):\n            raise FileNotFoundError(f\"Parquet blob not found: {meta.filename}\")\n\n        with self._temp_local_copy(meta.filename) as tmp_path:\n            pf = pq.ParquetFile(tmp_path)\n            schema = pf.schema_arrow\n            return {\n                \"table_name\": table_name,\n                \"filename\": meta.filename,\n                \"num_rows\": pf.metadata.num_rows,\n                \"num_columns\": len(schema),\n                \"columns\": [\n                    {\"name\": f.name, \"type\": str(f.type), \"nullable\": f.nullable}\n                    for f in schema\n                ],\n                \"created_at\": meta.created_at.isoformat(),\n                \"last_synced\": (\n                    meta.last_synced.isoformat() if meta.last_synced else None\n                ),\n            }\n\n    def get_parquet_path(self, table_name: str) -> str:  # type: ignore[override]\n        \"\"\"Return the full blob name for the parquet file.\n\n        .. warning::\n            Unlike the base class this returns a *blob path* (``str``),\n            **not** a resolved local ``pathlib.Path``.\n        \"\"\"\n        meta = self.get_table_metadata(table_name)\n        if meta is None:\n            raise FileNotFoundError(f\"Table not found: {table_name}\")\n        if meta.file_type != \"parquet\":\n            raise ValueError(f\"Table {table_name} is not a parquet file\")\n        if not self._blob_exists(meta.filename):\n            raise FileNotFoundError(f\"Parquet blob not found: {meta.filename}\")\n        return self._blob_name(meta.filename)\n\n    def run_parquet_sql(self, table_name: str, sql: str) -> pd.DataFrame:\n        \"\"\"Run a DuckDB SQL query against a parquet table.\n\n        Downloads the blob to a temporary local file for the duration of\n        the query, so DuckDB can use its native parquet reader.\n        \"\"\"\n        import duckdb\n\n        meta = self.get_table_metadata(table_name)\n        if meta is None:\n            raise FileNotFoundError(f\"Table not found: {table_name}\")\n        if meta.file_type != \"parquet\":\n            raise ValueError(f\"Table {table_name} is not a parquet file\")\n        if not self._blob_exists(meta.filename):\n            raise FileNotFoundError(f\"Parquet blob not found: {meta.filename}\")\n        if \"{parquet}\" not in sql:\n            raise ValueError(\"SQL must contain {parquet} placeholder\")\n\n        with self._temp_local_copy(meta.filename) as tmp_path:\n            escaped = str(tmp_path).replace(\"\\\\\", \"\\\\\\\\\").replace(\"'\", \"''\")\n            full_sql = sql.format(parquet=f\"read_parquet('{escaped}')\")\n            conn = duckdb.connect(\":memory:\")\n            try:\n                return conn.execute(full_sql).fetchdf()\n            finally:\n                conn.close()\n\n    # ------------------------------------------------------------------\n    # Local directory materialisation (for sandbox execution)\n    # ------------------------------------------------------------------\n\n    @contextmanager\n    def local_dir(self):\n        \"\"\"Download all workspace files to a temporary local directory.\n\n        Yields the path to the temp directory.  The directory and its\n        contents are removed when the context manager exits.\n        \"\"\"\n        tmp = tempfile.mkdtemp(prefix=\"df_blob_ws_\")\n        tmp_path = Path(tmp)\n        try:\n            # Download every blob under this workspace's prefix\n            for blob in self._container.list_blobs(name_starts_with=self._prefix):\n                # Relative filename within the workspace\n                rel = blob.name[len(self._prefix):]\n                if not rel or rel == METADATA_FILENAME:\n                    continue  # skip the metadata file itself\n                local_file = tmp_path / rel\n                local_file.parent.mkdir(parents=True, exist_ok=True)\n                data = self._container.download_blob(blob.name).readall()\n                local_file.write_bytes(data)\n            yield tmp_path\n        finally:\n            shutil.rmtree(tmp, ignore_errors=True)\n\n    # ------------------------------------------------------------------\n    # Raw file upload / download (replaces get_file_path + open() pattern)\n    # ------------------------------------------------------------------\n\n    def upload_file(self, content: bytes, filename: str) -> None:\n        \"\"\"Upload raw file content to the workspace as a blob.\"\"\"\n        safe_filename = Path(filename).name\n        self._upload_bytes(safe_filename, content)\n\n    def download_file(self, filename: str) -> bytes:\n        \"\"\"Download raw file content from the workspace blob.\"\"\"\n        safe_filename = Path(filename).name\n        return self._download_bytes(safe_filename)\n\n    # ------------------------------------------------------------------\n    # Workspace snapshot (session save / restore)\n    # ------------------------------------------------------------------\n\n    def save_workspace_snapshot(self, dst: Path) -> None:\n        \"\"\"Download all workspace blobs (including metadata) to *dst*.\"\"\"\n        for blob in self._container.list_blobs(name_starts_with=self._prefix):\n            rel = blob.name[len(self._prefix):]\n            if not rel:\n                continue\n            dst.mkdir(parents=True, exist_ok=True)\n            local_file = dst / rel\n            local_file.parent.mkdir(parents=True, exist_ok=True)\n            data = self._container.download_blob(blob.name).readall()\n            local_file.write_bytes(data)\n\n    def restore_workspace_snapshot(self, src: Path) -> None:\n        \"\"\"Replace all workspace blobs with files from *src* directory.\"\"\"\n        self.cleanup()\n        if src.exists():\n            for f in src.rglob(\"*\"):\n                if f.is_file():\n                    rel = str(f.relative_to(src))\n                    self._upload_bytes(rel, f.read_bytes())\n        # Ensure metadata exists even if snapshot didn't include it\n        if not self._blob_exists(METADATA_FILENAME):\n            self._init_metadata()\n        # Invalidate caches since metadata and data were replaced from snapshot\n        self._metadata_cache = None\n        self._blob_data_cache.clear()\n        self._cleanup_temp_files()\n\n    # ------------------------------------------------------------------\n    # Session management (blob-backed)\n    # ------------------------------------------------------------------\n\n    def _session_blob_prefix(self, session_name: str) -> str:\n        \"\"\"Blob prefix for a named session.\n\n        Uses a parallel structure to the workspace prefix::\n\n          workspace data:  <root>/<safe_id>/...\n          sessions:        sessions/<safe_id>/<session_name>/...\n\n        This mirrors the local filesystem layout where workspaces and\n        sessions live side-by-side.\n        \"\"\"\n        safe_name = self._sanitize_session_name(session_name)\n        return f\"sessions/{self._safe_id}/{safe_name}/\"\n\n    def save_session(self, session_name: str, state: dict) -> str:\n        safe_name = self._sanitize_session_name(session_name)\n        prefix = self._session_blob_prefix(session_name)\n\n        # Wipe previous save\n        for blob in self._container.list_blobs(name_starts_with=prefix):\n            self._container.delete_blob(blob.name)\n\n        # 1. Snapshot workspace files into session blobs\n        for blob in self._container.list_blobs(name_starts_with=self._prefix):\n            rel = blob.name[len(self._prefix):]\n            if not rel:\n                continue\n            data = self._container.download_blob(blob.name).readall()\n            self._container.upload_blob(\n                f\"{prefix}workspace/{rel}\", data, overwrite=True\n            )\n\n        # 2. State JSON\n        state_json = json.dumps(state, default=str)\n        self._container.upload_blob(\n            f\"{prefix}state.json\", state_json.encode(\"utf-8\"), overwrite=True\n        )\n\n        saved_at = datetime.now(timezone.utc).isoformat()\n        logger.info(f\"Saved session '{safe_name}' for {self._identity_id} (blob)\")\n        return saved_at\n\n    def load_session(self, session_name: str) -> dict | None:\n        prefix = self._session_blob_prefix(session_name)\n        state_blob = f\"{prefix}state.json\"\n\n        from azure.core.exceptions import ResourceNotFoundError\n        try:\n            raw = self._container.download_blob(state_blob).readall()\n        except ResourceNotFoundError:\n            return None\n\n        # Restore workspace: delete current blobs, copy session workspace blobs\n        ws_prefix = f\"{prefix}workspace/\"\n        ws_blobs = list(self._container.list_blobs(name_starts_with=ws_prefix))\n        if ws_blobs:\n            self.cleanup()\n            for blob in ws_blobs:\n                rel = blob.name[len(ws_prefix):]\n                if not rel:\n                    continue\n                data = self._container.download_blob(blob.name).readall()\n                self._container.upload_blob(\n                    self._blob_name(rel), data, overwrite=True\n                )\n            if not self._blob_exists(METADATA_FILENAME):\n                self._init_metadata()\n\n        # Invalidate caches since workspace blobs were replaced\n        self._metadata_cache = None\n        self._blob_data_cache.clear()\n        self._cleanup_temp_files()\n\n        return json.loads(raw)\n\n    def _sessions_root_prefix(self) -> str:\n        \"\"\"Blob prefix for all sessions of this user.\"\"\"\n        return f\"sessions/{self._safe_id}/\"\n\n    def list_sessions(self) -> list[dict]:\n        sessions_prefix = self._sessions_root_prefix()\n        sessions: list[dict] = []\n        seen: set[str] = set()\n\n        for blob in self._container.list_blobs(name_starts_with=sessions_prefix):\n            rel = blob.name[len(sessions_prefix):]\n            parts = rel.split(\"/\", 1)\n            if len(parts) < 2:\n                continue\n            sess_name = parts[0]\n            if sess_name in seen:\n                continue\n            # Check it has a state.json\n            if parts[1] == \"state.json\":\n                seen.add(sess_name)\n                sessions.append({\n                    \"name\": sess_name,\n                    \"saved_at\": blob.last_modified.isoformat()\n                    if blob.last_modified\n                    else datetime.now(timezone.utc).isoformat(),\n                })\n\n        sessions.sort(key=lambda s: s[\"saved_at\"], reverse=True)\n        return sessions\n\n    def delete_session(self, session_name: str) -> bool:\n        prefix = self._session_blob_prefix(session_name)\n        blobs = list(self._container.list_blobs(name_starts_with=prefix))\n        if not blobs:\n            return False\n        for blob in blobs:\n            self._container.delete_blob(blob.name)\n        logger.info(f\"Deleted session '{session_name}' for {self._identity_id} (blob)\")\n        return True\n\n    def export_session_zip(self, state: dict) -> io.BytesIO:\n        buf = io.BytesIO()\n        with zipfile.ZipFile(buf, \"w\", zipfile.ZIP_DEFLATED) as zf:\n            zf.writestr(\"state.json\", json.dumps(state, default=str))\n            for blob in self._container.list_blobs(name_starts_with=self._prefix):\n                rel = blob.name[len(self._prefix):]\n                if not rel:\n                    continue\n                data = self._container.download_blob(blob.name).readall()\n                zf.writestr(f\"workspace/{rel}\", data)\n        buf.seek(0)\n        return buf\n\n    def import_session_zip(self, zip_data: io.BytesIO) -> dict:\n        with zipfile.ZipFile(zip_data, \"r\") as zf:\n            if \"state.json\" not in zf.namelist():\n                raise ValueError(\"Invalid session file: missing state.json\")\n\n            state = json.loads(zf.read(\"state.json\"))\n\n            workspace_entries = [\n                n for n in zf.namelist()\n                if n.startswith(\"workspace/\") and not n.endswith(\"/\")\n            ]\n            if workspace_entries:\n                self.cleanup()\n                for entry in workspace_entries:\n                    rel = entry[len(\"workspace/\"):]\n                    # Guard against zip-slip: secure_filename strips\n                    # path separators and \"..\" components.\n                    safe_rel = secure_filename(rel)\n                    if not safe_rel:\n                        continue  # skip entries that sanitise to empty\n                    self._upload_bytes(safe_rel, zf.read(entry))\n                if not self._blob_exists(METADATA_FILENAME):\n                    self._init_metadata()\n                # Invalidate caches since workspace blobs were replaced\n                self._metadata_cache = None\n                self._blob_data_cache.clear()\n                self._cleanup_temp_files()\n\n        return state\n\n    # ------------------------------------------------------------------\n    # Representation\n    # ------------------------------------------------------------------\n\n    def __repr__(self) -> str:\n        return (\n            f\"AzureBlobWorkspace(identity_id={self._identity_id!r}, \"\n            f\"prefix={self._prefix!r})\"\n        )\n"
  },
  {
    "path": "py-src/data_formulator/datalake/cache_manager.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nGlobal cache manager for multi-user deployments.\n\nWhile each :class:`CachedAzureBlobWorkspace` enforces its own per-workspace\nlimit (default 1 GB), this module enforces a **server-wide ceiling** across\nALL user caches, preventing the aggregate local cache from consuming all\navailable disk space when many users are active.\n\nArchitecture\n~~~~~~~~~~~~\n``GlobalCacheManager`` is a **thread-safe singleton**.  The first call to\n:meth:`get_instance` configures it (cache root, max bytes, scan interval);\nsubsequent calls return the same object.\n\nCross-user eviction\n~~~~~~~~~~~~~~~~~~~\nWhen the global limit is exceeded, files are evicted across *all* user\ncache directories using **LRU by mtime** (oldest files first, regardless\nof which user owns them).  Protected files (``workspace.yaml``) are never\nevicted.  Eviction targets 80 % of the global max to avoid thrashing.\n\nGraceful degradation\n~~~~~~~~~~~~~~~~~~~~\nWhen the global cache is full and eviction cannot free enough space,\nindividual workspaces fall through to direct Azure reads.  User-initiated\nwrites always succeed locally (correctness), but read-path caching is\nskipped so the disk isn't filled further.\n\nDisk scanning\n~~~~~~~~~~~~~\nTotal disk usage is computed via ``os.walk()`` over the cache root.\nTo avoid excessive I/O on servers with many files, the scan is\n**debounced** — at most once per ``scan_interval`` seconds (default 10 s).\n\"\"\"\n\nfrom __future__ import annotations\n\nimport logging\nimport os\nimport threading\nimport time\nfrom pathlib import Path\nfrom typing import Any\n\nfrom data_formulator.datalake.metadata import METADATA_FILENAME\n\nlogger = logging.getLogger(__name__)\n\n# Default global cache limit: 50 GB\n_DEFAULT_GLOBAL_MAX_BYTES = 50 * 1024**3\n\n# Default interval between filesystem scans (seconds)\n_DEFAULT_SCAN_INTERVAL = 10.0\n\n\nclass GlobalCacheManager:\n    \"\"\"Thread-safe singleton managing total cache disk usage across all users.\n\n    Usage::\n\n        mgr = GlobalCacheManager.get_instance(\n            cache_root=Path(\"~/.data_formulator/cache\"),\n            max_global_bytes=10 * 1024**3,   # 10 GB\n        )\n\n        # Before caching a downloaded file (optional write):\n        if mgr.try_acquire_space(len(data)):\n            cache_file.write_bytes(data)\n\n        # After a mandatory write (e.g. user upload):\n        cache_file.write_bytes(data)\n        mgr.notify_write(len(data))\n\n        # Monitoring:\n        stats = mgr.get_global_stats()\n    \"\"\"\n\n    _instance: GlobalCacheManager | None = None\n    _init_lock = threading.Lock()\n\n    # ------------------------------------------------------------------\n    # Singleton access\n    # ------------------------------------------------------------------\n\n    @classmethod\n    def get_instance(\n        cls,\n        cache_root: Path | str | None = None,\n        max_global_bytes: int = _DEFAULT_GLOBAL_MAX_BYTES,\n        scan_interval: float = _DEFAULT_SCAN_INTERVAL,\n    ) -> GlobalCacheManager:\n        \"\"\"Return the singleton, creating it on first call.\n\n        Args:\n            cache_root: Root of the local cache tree.  Defaults to\n                ``~/.data_formulator/cache``.\n            max_global_bytes: Global ceiling in bytes (default 10 GB).\n            scan_interval: Min seconds between full filesystem scans\n                (default 10).\n\n        Subsequent calls return the existing singleton — arguments are\n        ignored after the first call.\n        \"\"\"\n        if cls._instance is not None:\n            return cls._instance\n        with cls._init_lock:\n            if cls._instance is not None:\n                return cls._instance\n            if cache_root is None:\n                from data_formulator.datalake.workspace import (\n                    get_data_formulator_home,\n                )\n\n                cache_root = get_data_formulator_home() / \"cache\"\n            cls._instance = cls(\n                Path(cache_root), max_global_bytes, scan_interval\n            )\n            return cls._instance\n\n    @classmethod\n    def reset_instance(cls) -> None:\n        \"\"\"Discard the singleton (for testing only).\"\"\"\n        with cls._init_lock:\n            cls._instance = None\n\n    # ------------------------------------------------------------------\n    # Construction (private — use get_instance)\n    # ------------------------------------------------------------------\n\n    def __init__(\n        self,\n        cache_root: Path,\n        max_global_bytes: int,\n        scan_interval: float,\n    ):\n        self._cache_root = cache_root\n        self._max_global_bytes = max_global_bytes\n        self._scan_interval = scan_interval\n\n        self._lock = threading.Lock()\n        self._last_scan_time: float = 0.0\n        self._cached_total_bytes: int = 0\n\n        logger.info(\n            \"GlobalCacheManager: root=%s max=%d MB scan_interval=%.1fs\",\n            cache_root,\n            max_global_bytes // (1024 * 1024),\n            scan_interval,\n        )\n\n    # ------------------------------------------------------------------\n    # Properties\n    # ------------------------------------------------------------------\n\n    @property\n    def max_global_bytes(self) -> int:\n        return self._max_global_bytes\n\n    @property\n    def cache_root(self) -> Path:\n        return self._cache_root\n\n    # ------------------------------------------------------------------\n    # Disk scanning (debounced)\n    # ------------------------------------------------------------------\n\n    def _scan_total_size(self) -> int:\n        \"\"\"Walk the cache root and sum file sizes.\n\n        Debounced: returns the cached value if the last scan was less\n        than ``scan_interval`` seconds ago.\n\n        **Must be called with ``self._lock`` held.**\n        \"\"\"\n        now = time.monotonic()\n        if now - self._last_scan_time < self._scan_interval:\n            return self._cached_total_bytes\n\n        total = 0\n        try:\n            for dirpath, _dirnames, filenames in os.walk(self._cache_root):\n                for fn in filenames:\n                    try:\n                        total += os.path.getsize(os.path.join(dirpath, fn))\n                    except OSError:\n                        pass\n        except OSError:\n            pass\n\n        self._cached_total_bytes = total\n        self._last_scan_time = now\n        return total\n\n    # ------------------------------------------------------------------\n    # Space management\n    # ------------------------------------------------------------------\n\n    def try_acquire_space(self, needed_bytes: int) -> bool:\n        \"\"\"Try to make room for *needed_bytes* of new cache data.\n\n        1. If total + needed is under the limit, return ``True``.\n        2. Otherwise, run cross-user LRU eviction.\n        3. If still insufficient, return ``False`` (caller should skip\n           local caching and serve from Azure directly).\n\n        This is intended for **optional** cache writes (e.g. caching a\n        download).  For **mandatory** writes (user uploads), use\n        :meth:`notify_write` after writing instead.\n        \"\"\"\n        with self._lock:\n            total = self._scan_total_size()\n            if total + needed_bytes <= self._max_global_bytes:\n                self._cached_total_bytes = total + needed_bytes\n                return True\n\n            # Try cross-user eviction\n            freed = self._evict_global_unlocked(\n                target_free=needed_bytes + int(self._max_global_bytes * 0.1)\n            )\n\n            # Re-scan after eviction\n            if freed > 0:\n                self._last_scan_time = 0.0  # force fresh scan\n                total = self._scan_total_size()\n                if total + needed_bytes <= self._max_global_bytes:\n                    self._cached_total_bytes = total + needed_bytes\n                    return True\n\n            return False\n\n    def notify_write(self, nbytes: int) -> None:\n        \"\"\"Notify the manager of a mandatory write (e.g. user upload).\n\n        The write has already happened.  This bumps the cached counter\n        and triggers global eviction if the limit is exceeded.\n        \"\"\"\n        with self._lock:\n            self._cached_total_bytes += nbytes\n            if self._cached_total_bytes > self._max_global_bytes:\n                self._evict_global_unlocked(\n                    target_free=int(\n                        self._cached_total_bytes\n                        - self._max_global_bytes * 0.8\n                    )\n                )\n\n    def maybe_evict_global(self) -> int:\n        \"\"\"Run cross-user eviction if total exceeds the global limit.\n\n        Returns bytes freed.\n        \"\"\"\n        with self._lock:\n            total = self._scan_total_size()\n            if total <= self._max_global_bytes:\n                return 0\n            return self._evict_global_unlocked(\n                target_free=int(total - self._max_global_bytes * 0.8)\n            )\n\n    # ------------------------------------------------------------------\n    # Cross-user LRU eviction (internal)\n    # ------------------------------------------------------------------\n\n    def _evict_global_unlocked(self, target_free: int) -> int:\n        \"\"\"Evict files across all user caches, LRU by mtime.\n\n        **Must be called with ``self._lock`` held.**\n\n        Skips:\n        * ``workspace.yaml`` — correctness-critical metadata.\n        * Hidden files (starting with ``.``).\n\n        Args:\n            target_free: Bytes to free.\n\n        Returns:\n            Total bytes actually freed.\n        \"\"\"\n        if target_free <= 0:\n            return 0\n\n        # Collect all candidate files across all user caches\n        candidates: list[tuple[str, float, int]] = []\n        try:\n            for dirpath, _, filenames in os.walk(self._cache_root):\n                for fn in filenames:\n                    if fn == METADATA_FILENAME:\n                        continue\n                    if fn.startswith(\".\"):\n                        continue\n                    full = os.path.join(dirpath, fn)\n                    try:\n                        st = os.stat(full)\n                        candidates.append((full, st.st_mtime, st.st_size))\n                    except OSError:\n                        pass\n        except OSError:\n            return 0\n\n        # Sort by mtime ascending (oldest first = evict first)\n        candidates.sort(key=lambda x: x[1])\n\n        freed = 0\n        evicted = 0\n        for full_path, _mtime, size in candidates:\n            if freed >= target_free:\n                break\n            try:\n                os.unlink(full_path)\n                freed += size\n                evicted += 1\n            except OSError:\n                pass\n\n        if evicted:\n            logger.info(\n                \"Global cache eviction: removed %d file(s), freed %.1f MB \"\n                \"(target was %.1f MB)\",\n                evicted,\n                freed / (1024 * 1024),\n                target_free / (1024 * 1024),\n            )\n            # Invalidate cached scan so next check is accurate\n            self._last_scan_time = 0.0\n\n        return freed\n\n    # ------------------------------------------------------------------\n    # Monitoring\n    # ------------------------------------------------------------------\n\n    def get_global_stats(self) -> dict[str, Any]:\n        \"\"\"Return global cache statistics for monitoring / debugging.\"\"\"\n        with self._lock:\n            total = self._scan_total_size()\n\n        # Count user-level cache directories (root/datalake_root/user_id/)\n        user_dirs = 0\n        try:\n            for entry in os.scandir(self._cache_root):\n                if entry.is_dir():\n                    for sub in os.scandir(entry.path):\n                        if sub.is_dir():\n                            user_dirs += 1\n        except OSError:\n            pass\n\n        return {\n            \"cache_root\": str(self._cache_root),\n            \"total_size_bytes\": total,\n            \"total_size_mb\": round(total / (1024 * 1024), 2),\n            \"max_size_mb\": round(self._max_global_bytes / (1024 * 1024), 2),\n            \"utilization_pct\": (\n                round(total / self._max_global_bytes * 100, 1)\n                if self._max_global_bytes > 0\n                else 0\n            ),\n            \"user_cache_count\": user_dirs,\n        }\n\n    # ------------------------------------------------------------------\n    # Representation\n    # ------------------------------------------------------------------\n\n    def __repr__(self) -> str:\n        return (\n            f\"GlobalCacheManager(root={self._cache_root!r}, \"\n            f\"max={self._max_global_bytes // (1024**2)} MB)\"\n        )\n"
  },
  {
    "path": "py-src/data_formulator/datalake/cached_azure_blob_workspace.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nCached Azure Blob workspace with persistent local file mirror.\n\nWraps :class:`AzureBlobWorkspace` with a **write-through local cache**\nunder ``~/.data_formulator/cache/``.  Reads come from the local mirror\n(filesystem speed), writes go to the local mirror immediately and are\nuploaded to Azure Blob Storage in a background thread.\n\nKey performance improvements over plain ``AzureBlobWorkspace``:\n\n* ``read_data_as_df()`` — reads local parquet directly (no blob download)\n* ``local_dir()``       — yields the cache directory (no temp-dir downloads)\n* ``run_parquet_sql()`` — runs DuckDB against local parquet (no temp copy)\n* ``write_parquet()``   — writes local file immediately, Azure upload in bg\n\nCache eviction\n--------------\nAn LRU eviction mechanism prevents unbounded disk growth:\n\n* **Max size** — configurable, default 1 GB per workspace.\n* **Trigger**  — checked after every write.\n* **Policy**   — evict least-recently-used files (oldest ``mtime``) until\n  total cache size drops to 80 % of the max.\n* **Protected** — ``workspace.yaml`` and files with pending background\n  uploads are never evicted.\n\nUsage::\n\n    from azure.storage.blob import ContainerClient\n    from data_formulator.datalake.cached_azure_blob_workspace import (\n        CachedAzureBlobWorkspace,\n    )\n\n    container = ContainerClient.from_connection_string(conn_str, \"my-container\")\n    ws = CachedAzureBlobWorkspace(\n        \"user:42\", container,\n        datalake_root=\"workspaces\",\n        max_cache_bytes=2 * 1024**3,   # 2 GB cache\n    )\n\"\"\"\n\nfrom __future__ import annotations\n\nimport atexit\nimport collections\nimport io\nimport logging\nimport os\nimport shutil\nimport threading\nimport time\nfrom concurrent.futures import Future, ThreadPoolExecutor\nfrom contextlib import contextmanager\nfrom datetime import datetime, timezone\nfrom pathlib import Path\nfrom typing import Any, Optional, TYPE_CHECKING\n\nimport pandas as pd\nimport pyarrow as pa\nimport pyarrow.parquet as pq\nimport yaml\n\nfrom data_formulator.datalake.azure_blob_workspace import AzureBlobWorkspace\nfrom data_formulator.datalake.cache_manager import GlobalCacheManager\nfrom data_formulator.datalake.metadata import (\n    METADATA_FILENAME,\n    WorkspaceMetadata,\n)\nfrom data_formulator.datalake.parquet_utils import sanitize_table_name\nfrom data_formulator.datalake.workspace import Workspace, get_data_formulator_home\n\nif TYPE_CHECKING:\n    from azure.storage.blob import ContainerClient\n\nlogger = logging.getLogger(__name__)\n\n# Default cache size limit per workspace (1 GB).\n_DEFAULT_MAX_CACHE_BYTES = 1 * 1024 ** 3\n\n\nclass CachedAzureBlobWorkspace(AzureBlobWorkspace):\n    \"\"\"Azure Blob workspace with a persistent local file cache.\n\n    Every file written to Azure is also written to a local cache directory.\n    Reads are served from the local cache whenever possible — falling back\n    to Azure only for files that have been evicted or written by another\n    process.\n\n    Background uploads\n    ~~~~~~~~~~~~~~~~~~\n    Data-file uploads are submitted to a :class:`ThreadPoolExecutor` so\n    they don't block the request thread.  Metadata (``workspace.yaml``)\n    is always uploaded **synchronously** because it is small and\n    correctness-critical.  Call :meth:`wait_for_uploads` to block until\n    all pending uploads finish (e.g. before shutdown or tests).\n\n    Multi-instance safety\n    ~~~~~~~~~~~~~~~~~~~~~~\n    When the same user is served by multiple server instances (e.g.\n    behind a load balancer), each instance has its own local cache.\n    Stale-cache detection compares the local ``workspace.yaml``'s\n    ``updated_at`` timestamp against Azure on a configurable interval\n    (default: 30 s).  If Azure is newer, the local metadata and any\n    changed data files are re-downloaded.\n\n    Global cache budget\n    ~~~~~~~~~~~~~~~~~~~~\n    A :class:`GlobalCacheManager` singleton enforces a server-wide\n    ceiling (default 10 GB) across **all** user caches.  When the\n    global limit is exceeded, cross-user LRU eviction removes the\n    oldest files server-wide.  If eviction cannot free enough space,\n    download-path caching is skipped (graceful degradation) so reads\n    fall through to Azure Blob Storage directly.\n\n    Thread safety\n    ~~~~~~~~~~~~~\n    The local cache directory is per-user so there are no cross-user\n    conflicts.  Per-file upload locks prevent concurrent background\n    uploads from racing on the same blob.  The ``_pending_uploads``\n    set is protected by a global lock.\n    \"\"\"\n\n    # ------------------------------------------------------------------\n    # Construction\n    # ------------------------------------------------------------------\n\n    def __init__(\n        self,\n        identity_id: str,\n        container_client: \"ContainerClient\",\n        datalake_root: str = \"\",\n        *,\n        cache_root: str | Path | None = None,\n        max_cache_bytes: int = _DEFAULT_MAX_CACHE_BYTES,\n        max_global_cache_bytes: int | None = None,\n        bg_upload_workers: int = 2,\n        staleness_check_interval: float = 30.0,\n    ):\n        \"\"\"\n        Args:\n            identity_id:  Unique user identifier.\n            container_client:  Azure ``ContainerClient``.\n            datalake_root:  Path prefix inside the blob container.\n            cache_root:  Root of the local cache tree.  Defaults to\n                ``~/.data_formulator/cache``.\n            max_cache_bytes:  Maximum total size of cached files for this\n                workspace before LRU eviction kicks in.\n            max_global_cache_bytes:  Server-wide ceiling across **all**\n                user caches (default: 10 GB).  ``None`` uses the\n                :class:`GlobalCacheManager` default.\n            bg_upload_workers:  Thread pool size for background uploads.\n            staleness_check_interval:  Seconds between Azure metadata\n                freshness checks (default: 30).  Set to 0 to check on\n                every ``get_metadata()`` call.\n        \"\"\"\n        # We must set up the cache directory *before* calling\n        # super().__init__ because the parent's __init__ may call\n        # _upload_bytes (via _init_metadata / save_metadata).\n        safe_id = Workspace._sanitize_identity_id(identity_id)\n        root = datalake_root.strip(\"/\")\n\n        if cache_root is None:\n            cache_root = get_data_formulator_home() / \"cache\"\n        base = Path(cache_root)\n        if root:\n            self._cache_dir = base / root / safe_id\n        else:\n            self._cache_dir = base / safe_id\n        self._cache_dir.mkdir(parents=True, exist_ok=True)\n\n        self._max_cache_bytes = max_cache_bytes\n\n        # Background upload machinery\n        self._pending_uploads: set[str] = set()\n        self._upload_lock = threading.Lock()\n        # Per-file locks to serialise concurrent uploads to the same blob\n        self._file_locks: dict[str, threading.Lock] = collections.defaultdict(\n            threading.Lock\n        )\n        self._upload_executor = ThreadPoolExecutor(\n            max_workers=bg_upload_workers,\n            thread_name_prefix=\"df_cache_upload\",\n        )\n        self._upload_futures: list[Future] = []\n        # Register atexit hook to flush pending uploads on interpreter exit\n        atexit.register(self._atexit_flush)\n\n        # Staleness detection for multi-instance deployments\n        self._staleness_check_interval = staleness_check_interval\n        self._last_staleness_check: float = 0.0  # epoch seconds\n        self._local_metadata_updated_at: Optional[datetime] = None\n\n        # Initialise the global cache manager (singleton) — must be\n        # before super().__init__ because _upload_bytes references it.\n        gcm_kwargs: dict[str, Any] = {\"cache_root\": base}\n        if max_global_cache_bytes is not None:\n            gcm_kwargs[\"max_global_bytes\"] = max_global_cache_bytes\n        self._global_cache = GlobalCacheManager.get_instance(**gcm_kwargs)\n\n        # Now safe to call super().__init__ — our _upload_bytes / etc.\n        # overrides are in place and _cache_dir is ready.\n        super().__init__(identity_id, container_client, datalake_root)\n\n        # Run initial eviction if cache is over-sized (e.g. from prev run)\n        self._maybe_evict()\n\n        logger.info(\n            \"Initialized CachedAzureBlobWorkspace: prefix=%s cache=%s \"\n            \"max=%d MB global_max=%d MB\",\n            self._prefix,\n            self._cache_dir,\n            self._max_cache_bytes // (1024 * 1024),\n            self._global_cache.max_global_bytes // (1024 * 1024),\n        )\n\n    # ------------------------------------------------------------------\n    # Cache path helper\n    # ------------------------------------------------------------------\n\n    def _cache_path(self, filename: str) -> Path:\n        \"\"\"Return the local cache path for *filename*.\n\n        Raises ``ValueError`` if the resolved path escapes the cache\n        directory (defence-in-depth against path-traversal attacks).\n        \"\"\"\n        resolved = (self._cache_dir / filename).resolve()\n        if not resolved.is_relative_to(self._cache_dir.resolve()):\n            raise ValueError(\n                f\"Path traversal detected: {filename!r} resolves outside \"\n                f\"the cache directory\"\n            )\n        return resolved\n\n    # ------------------------------------------------------------------\n    # Low-level blob overrides (write-through cache)\n    # ------------------------------------------------------------------\n\n    def _upload_bytes(\n        self,\n        filename: str,\n        data: bytes | str,\n        *,\n        overwrite: bool = True,\n    ) -> int:\n        \"\"\"Write *data* to local cache **and** Azure.\n\n        Metadata (``workspace.yaml``) is uploaded synchronously.\n        Data files are uploaded in a background thread.\n        \"\"\"\n        raw = data.encode(\"utf-8\") if isinstance(data, str) else data\n\n        # 1. Write to local cache immediately\n        cache_file = self._cache_path(filename)\n        cache_file.parent.mkdir(parents=True, exist_ok=True)\n        cache_file.write_bytes(raw)\n\n        # 2. Invalidate in-memory caches (inherited from AzureBlobWorkspace)\n        self._blob_data_cache.pop(filename, None)\n        if hasattr(self, \"_temp_file_cache\") and filename in self._temp_file_cache:\n            self._temp_file_cache.pop(filename).unlink(missing_ok=True)\n\n        # 3. Upload to Azure\n        if filename == METADATA_FILENAME:\n            # Metadata: synchronous (small, correctness-critical)\n            self._get_blob(filename).upload_blob(raw, overwrite=overwrite)\n        else:\n            # Data files: background upload with per-file lock\n            with self._upload_lock:\n                self._pending_uploads.add(filename)\n\n            def _bg_upload(fn: str, payload: bytes) -> None:\n                # Per-file lock ensures concurrent writes to the same\n                # blob are serialised — last write always wins.\n                file_lock = self._file_locks[fn]\n                file_lock.acquire()\n                try:\n                    self._get_blob(fn).upload_blob(payload, overwrite=True)\n                    logger.debug(\"Background upload complete: %s\", fn)\n                except Exception:\n                    logger.warning(\n                        \"Background upload FAILED for %s — data is safe in \"\n                        \"local cache and will be retried on next write.\",\n                        fn,\n                        exc_info=True,\n                    )\n                finally:\n                    file_lock.release()\n                    with self._upload_lock:\n                        self._pending_uploads.discard(fn)\n\n            fut = self._upload_executor.submit(_bg_upload, filename, raw)\n            self._upload_futures.append(fut)\n\n        # 4. Evict if needed (per-workspace, then global)\n        self._maybe_evict()\n        # Notify global manager of the mandatory write\n        self._global_cache.notify_write(len(raw))\n\n        return len(raw)\n\n    def _download_bytes(self, filename: str) -> bytes:\n        \"\"\"Read from local cache first, then Azure, then populate cache.\"\"\"\n        # 1. Local cache hit\n        cache_file = self._cache_path(filename)\n        if cache_file.exists():\n            data = cache_file.read_bytes()\n            # Touch to update mtime for LRU tracking\n            try:\n                os.utime(cache_file, None)\n            except OSError:\n                pass\n            # Also populate in-memory cache for extra speed on hot paths\n            self._blob_data_cache[filename] = data\n            return data\n\n        # 2. In-memory cache (shouldn't happen if local cache is warm)\n        cached = self._blob_data_cache.get(filename)\n        if cached is not None:\n            # Backfill local cache — only if global budget allows\n            if self._global_cache.try_acquire_space(len(cached)):\n                try:\n                    cache_file.parent.mkdir(parents=True, exist_ok=True)\n                    cache_file.write_bytes(cached)\n                except OSError:\n                    logger.debug(\"Failed to backfill cache for %s\", filename)\n            return cached\n\n        # 3. Azure download (cache miss — evicted or written by other instance)\n        data = self._get_blob(filename).download_blob().readall()\n        self._blob_data_cache[filename] = data\n\n        # Persist to local cache only if global budget allows\n        if self._global_cache.try_acquire_space(len(data)):\n            try:\n                cache_file.parent.mkdir(parents=True, exist_ok=True)\n                cache_file.write_bytes(data)\n            except OSError:\n                logger.debug(\n                    \"Global cache full — serving %s from Azure without \"\n                    \"local caching\",\n                    filename,\n                )\n        else:\n            logger.debug(\n                \"Global cache full — serving %s from Azure without \"\n                \"local caching\",\n                filename,\n            )\n        return data\n\n    def _blob_exists(self, filename: str) -> bool:\n        \"\"\"Check local cache first, then Azure.\"\"\"\n        if self._cache_path(filename).exists():\n            return True\n        # Fall back to Azure (file may have been evicted)\n        return super()._blob_exists(filename)\n\n    # ------------------------------------------------------------------\n    # Staleness detection (multi-instance safety)\n    # ------------------------------------------------------------------\n\n    def _check_staleness(self) -> None:\n        \"\"\"Compare local metadata timestamp with Azure's.\n\n        If Azure has a newer ``updated_at``, invalidate local metadata\n        and any data files whose table metadata has changed.\n        Called by ``get_metadata()`` at most once per\n        ``staleness_check_interval``.\n        \"\"\"\n        now = time.monotonic()\n        if now - self._last_staleness_check < self._staleness_check_interval:\n            return\n        self._last_staleness_check = now\n\n        try:\n            # Fetch fresh metadata from Azure (bypass all caches)\n            raw = self._get_blob(METADATA_FILENAME).download_blob().readall()\n            parsed = yaml.safe_load(raw)\n            if parsed is None:\n                return\n            remote_meta = WorkspaceMetadata.from_dict(parsed)\n        except Exception:\n            # If Azure is unreachable, use local cache silently\n            logger.debug(\"Staleness check: Azure unreachable, using local cache\")\n            return\n\n        local_meta = self._metadata_cache\n        if local_meta is None:\n            # No local metadata cached yet — will be loaded fresh anyway\n            return\n\n        if remote_meta.updated_at <= local_meta.updated_at:\n            return  # local is up to date\n\n        logger.info(\n            \"Stale cache detected: local=%s remote=%s — refreshing\",\n            local_meta.updated_at.isoformat(),\n            remote_meta.updated_at.isoformat(),\n        )\n\n        # Find data files that changed (different hash or new tables)\n        for table_name, remote_table in remote_meta.tables.items():\n            local_table = local_meta.tables.get(table_name)\n            if (\n                local_table is None\n                or local_table.content_hash != remote_table.content_hash\n            ):\n                # Invalidate cached file so next read re-downloads\n                self._cache_path(remote_table.filename).unlink(missing_ok=True)\n                self._blob_data_cache.pop(remote_table.filename, None)\n                logger.debug(\"Invalidated stale cached file: %s\", remote_table.filename)\n\n        # Find tables deleted remotely\n        for table_name in list(local_meta.tables.keys()):\n            if table_name not in remote_meta.tables:\n                old_fn = local_meta.tables[table_name].filename\n                self._cache_path(old_fn).unlink(missing_ok=True)\n                self._blob_data_cache.pop(old_fn, None)\n\n        # Update local metadata cache file and in-memory cache\n        self._cache_path(METADATA_FILENAME).write_bytes(raw)\n        self._metadata_cache = remote_meta\n        self._blob_data_cache[METADATA_FILENAME] = raw\n\n    def _delete_blob(self, filename: str) -> None:\n        \"\"\"Delete from local cache, in-memory caches, and Azure.\"\"\"\n        # Local cache\n        self._cache_path(filename).unlink(missing_ok=True)\n\n        # In-memory caches\n        self._blob_data_cache.pop(filename, None)\n        if hasattr(self, \"_temp_file_cache\") and filename in self._temp_file_cache:\n            self._temp_file_cache.pop(filename).unlink(missing_ok=True)\n\n        # Azure\n        try:\n            self._get_blob(filename).delete_blob()\n        except Exception:\n            logger.debug(\"Azure delete failed for %s (may not exist)\", filename)\n\n    # ------------------------------------------------------------------\n    # Temp-local-copy override (use cache file directly)\n    # ------------------------------------------------------------------\n\n    # ------------------------------------------------------------------\n    # Metadata override with staleness check\n    # ------------------------------------------------------------------\n\n    def get_metadata(self) -> WorkspaceMetadata:\n        \"\"\"Return workspace metadata, checking Azure for staleness.\"\"\"\n        self._check_staleness()\n        return super().get_metadata()\n\n    # ------------------------------------------------------------------\n    # Temp-local-copy override (use cache file directly)\n    # ------------------------------------------------------------------\n\n    @contextmanager\n    def _temp_local_copy(self, filename: str):\n        \"\"\"Yield the local cache path directly — no temp file needed.\"\"\"\n        cache_file = self._cache_path(filename)\n        if not cache_file.exists():\n            # Ensure file is in cache\n            self._download_bytes(filename)\n        yield cache_file\n\n    # ------------------------------------------------------------------\n    # Read overrides (read directly from local cache files)\n    # ------------------------------------------------------------------\n\n    def read_data_as_df(self, table_name: str) -> pd.DataFrame:\n        \"\"\"Read table from local cache (fast!) with Azure fallback.\"\"\"\n        meta = self.get_table_metadata(table_name)\n        if meta is None:\n            raise FileNotFoundError(f\"Table not found: {table_name}\")\n\n        cache_file = self._cache_path(meta.filename)\n\n        # Ensure file is in cache\n        if not cache_file.exists():\n            # Download from Azure and populate cache\n            self._download_bytes(meta.filename)\n\n        # Update mtime for LRU\n        try:\n            os.utime(cache_file, None)\n        except OSError:\n            pass\n\n        # Read directly from local file — fastest path\n        readers = {\n            \"parquet\": lambda p: pd.read_parquet(p),\n            \"csv\": lambda p: pd.read_csv(p),\n            \"excel\": lambda p: pd.read_excel(p),\n            \"json\": lambda p: pd.read_json(p),\n            \"txt\": lambda p: pd.read_csv(p, sep=\"\\t\"),\n        }\n        reader = readers.get(meta.file_type)\n        if reader is None:\n            raise ValueError(\n                f\"Unsupported file type '{meta.file_type}' for table \"\n                f\"'{table_name}'. Supported: {', '.join(readers)}.\"\n            )\n        return reader(cache_file)\n\n    def run_parquet_sql(self, table_name: str, sql: str) -> pd.DataFrame:\n        \"\"\"Run DuckDB SQL against local cache file (no temp copy needed).\"\"\"\n        import duckdb\n\n        meta = self.get_table_metadata(table_name)\n        if meta is None:\n            raise FileNotFoundError(f\"Table not found: {table_name}\")\n        if meta.file_type != \"parquet\":\n            raise ValueError(f\"Table {table_name} is not a parquet file\")\n        if \"{parquet}\" not in sql:\n            raise ValueError(\"SQL must contain {parquet} placeholder\")\n\n        cache_file = self._cache_path(meta.filename)\n        if not cache_file.exists():\n            self._download_bytes(meta.filename)\n\n        # Update mtime for LRU\n        try:\n            os.utime(cache_file, None)\n        except OSError:\n            pass\n\n        escaped = str(cache_file).replace(\"\\\\\", \"\\\\\\\\\").replace(\"'\", \"''\")\n        full_sql = sql.format(parquet=f\"read_parquet('{escaped}')\")\n        conn = duckdb.connect(\":memory:\")\n        try:\n            return conn.execute(full_sql).fetchdf()\n        finally:\n            conn.close()\n\n    # ------------------------------------------------------------------\n    # local_dir — the biggest win\n    # ------------------------------------------------------------------\n\n    @contextmanager\n    def local_dir(self):\n        \"\"\"Yield the cache directory — no temp dir, no mass downloads.\n\n        Verifies that all workspace data files are present in the local\n        cache before yielding.  Any missing files (evicted or written by\n        another instance) are downloaded on demand.\n        \"\"\"\n        self._ensure_all_cached()\n        yield self._cache_dir\n\n    def _ensure_all_cached(self) -> None:\n        \"\"\"Download any workspace files not present in local cache.\"\"\"\n        for blob in self._container.list_blobs(name_starts_with=self._prefix):\n            rel = blob.name[len(self._prefix) :]\n            if not rel or rel == METADATA_FILENAME:\n                continue\n            cache_file = self._cache_path(rel)\n            if not cache_file.exists():\n                data = self._container.download_blob(blob.name).readall()\n                cache_file.parent.mkdir(parents=True, exist_ok=True)\n                cache_file.write_bytes(data)\n                logger.debug(\"local_dir: downloaded missing file %s\", rel)\n\n    # ------------------------------------------------------------------\n    # Cache eviction (LRU by mtime)\n    # ------------------------------------------------------------------\n\n    def _get_cache_size(self) -> int:\n        \"\"\"Total bytes of all files in the cache directory.\"\"\"\n        total = 0\n        for f in self._cache_dir.iterdir():\n            if f.is_file():\n                try:\n                    total += f.stat().st_size\n                except OSError:\n                    pass\n        return total\n\n    def _maybe_evict(self) -> None:\n        \"\"\"Evict LRU files if cache exceeds ``max_cache_bytes``.\n\n        Evicts down to 80 % of max.  Never evicts ``workspace.yaml``\n        or files with pending background uploads.\n        \"\"\"\n        total = self._get_cache_size()\n        if total <= self._max_cache_bytes:\n            return\n\n        target = int(self._max_cache_bytes * 0.8)\n\n        # Collect eviction candidates (sorted oldest mtime first)\n        candidates: list[tuple[Path, float, int]] = []\n        with self._upload_lock:\n            pending = set(self._pending_uploads)\n\n        for f in self._cache_dir.iterdir():\n            if not f.is_file():\n                continue\n            if f.name == METADATA_FILENAME:\n                continue  # never evict metadata\n            if f.name in pending:\n                continue  # never evict files being uploaded\n            try:\n                st = f.stat()\n                candidates.append((f, st.st_mtime, st.st_size))\n            except OSError:\n                pass\n\n        # Sort by mtime ascending (oldest first = evict first)\n        candidates.sort(key=lambda x: x[1])\n\n        evicted = 0\n        freed = 0\n        for path, mtime, size in candidates:\n            if total <= target:\n                break\n            try:\n                path.unlink(missing_ok=True)\n                total -= size\n                freed += size\n                evicted += 1\n            except OSError:\n                pass\n\n        if evicted:\n            logger.info(\n                \"Cache eviction: removed %d file(s), freed %.1f MB, \"\n                \"remaining %.1f / %.1f MB\",\n                evicted,\n                freed / (1024 * 1024),\n                total / (1024 * 1024),\n                self._max_cache_bytes / (1024 * 1024),\n            )\n\n        # Also run global cross-user eviction if needed\n        self._global_cache.maybe_evict_global()\n\n    def get_cache_stats(self) -> dict[str, Any]:\n        \"\"\"Return cache statistics for monitoring / debugging.\"\"\"\n        files = []\n        total_size = 0\n        for f in self._cache_dir.iterdir():\n            if f.is_file():\n                try:\n                    st = f.stat()\n                    files.append({\"name\": f.name, \"size\": st.st_size, \"mtime\": st.st_mtime})\n                    total_size += st.st_size\n                except OSError:\n                    pass\n\n        with self._upload_lock:\n            pending = list(self._pending_uploads)\n\n        return {\n            \"cache_dir\": str(self._cache_dir),\n            \"file_count\": len(files),\n            \"total_size_bytes\": total_size,\n            \"total_size_mb\": round(total_size / (1024 * 1024), 2),\n            \"max_size_mb\": round(self._max_cache_bytes / (1024 * 1024), 2),\n            \"utilization_pct\": round(total_size / self._max_cache_bytes * 100, 1)\n            if self._max_cache_bytes > 0\n            else 0,\n            \"pending_uploads\": pending,\n            \"files\": sorted(files, key=lambda f: f[\"mtime\"], reverse=True),\n        }\n\n    # ------------------------------------------------------------------\n    # Lifecycle\n    # ------------------------------------------------------------------\n\n    def wait_for_uploads(self, timeout: float | None = 30) -> bool:\n        \"\"\"Block until all pending background uploads complete.\n\n        Args:\n            timeout: Max seconds to wait.  ``None`` = wait forever.\n\n        Returns:\n            ``True`` if all uploads finished, ``False`` if timeout was hit.\n        \"\"\"\n        # Collect outstanding futures\n        futures = [f for f in self._upload_futures if not f.done()]\n        if not futures:\n            return True\n\n        from concurrent.futures import wait, FIRST_EXCEPTION\n\n        done, not_done = wait(futures, timeout=timeout)\n        # Clean up completed futures\n        self._upload_futures = [f for f in self._upload_futures if not f.done()]\n\n        if not_done:\n            logger.warning(\n                \"%d background upload(s) did not complete within %.1fs\",\n                len(not_done),\n                timeout or 0,\n            )\n            return False\n        return True\n\n    def _atexit_flush(self) -> None:\n        \"\"\"Best-effort flush of pending uploads on interpreter shutdown.\"\"\"\n        with self._upload_lock:\n            if not self._pending_uploads:\n                return\n            pending_count = len(self._pending_uploads)\n\n        logger.info(\"Flushing %d pending upload(s) on shutdown...\", pending_count)\n        self.wait_for_uploads(timeout=30)\n\n    def cleanup(self) -> None:\n        \"\"\"Remove local cache immediately, delete Azure blobs in background.\n\n        The local cache is cleared **synchronously** so the workspace is\n        immediately reusable.  Azure blob deletion is submitted to the\n        background thread pool so the caller isn't blocked by many\n        sequential Azure API calls.\n        \"\"\"\n        # 1. Wait for any in-flight uploads (so we don't race with them)\n        self.wait_for_uploads(timeout=60)\n\n        # 2. Clear local caches immediately (non-blocking)\n        if self._cache_dir.exists():\n            shutil.rmtree(self._cache_dir, ignore_errors=True)\n        self._cache_dir.mkdir(parents=True, exist_ok=True)\n        self._metadata_cache = None\n        self._blob_data_cache.clear()\n        self._cleanup_temp_files()\n\n        # 3. Delete Azure blobs in background\n        prefix = self._prefix\n        container = self._container\n\n        def _bg_cleanup() -> None:\n            try:\n                for blob in container.list_blobs(name_starts_with=prefix):\n                    try:\n                        container.delete_blob(blob.name)\n                    except Exception:\n                        logger.debug(\"Failed to delete blob %s\", blob.name)\n                logger.info(\"Background cleanup finished for %s\", prefix)\n            except Exception:\n                logger.warning(\n                    \"Background Azure cleanup failed for %s\",\n                    prefix,\n                    exc_info=True,\n                )\n\n        self._upload_executor.submit(_bg_cleanup)\n        logger.info(\"Cleanup: local cache cleared, Azure deletion queued for %s\", self._safe_id)\n\n    # ------------------------------------------------------------------\n    # snapshot / session overrides: ensure cache consistency\n    # ------------------------------------------------------------------\n\n    def restore_workspace_snapshot(self, src: Path) -> None:\n        \"\"\"Restore snapshot and repopulate local cache.\"\"\"\n        # Clear local cache first\n        if self._cache_dir.exists():\n            shutil.rmtree(self._cache_dir, ignore_errors=True)\n        self._cache_dir.mkdir(parents=True, exist_ok=True)\n\n        # Delegate to parent (uploads blobs to Azure)\n        super().restore_workspace_snapshot(src)\n\n        # Repopulate cache from the source snapshot\n        if src.exists():\n            for f in src.rglob(\"*\"):\n                if f.is_file():\n                    rel = str(f.relative_to(src))\n                    cache_file = self._cache_path(rel)\n                    cache_file.parent.mkdir(parents=True, exist_ok=True)\n                    shutil.copy2(f, cache_file)\n\n    def invalidate_metadata_cache(self) -> None:\n        \"\"\"Force re-read of metadata from Azure (clears local + in-memory).\"\"\"\n        self._cache_path(METADATA_FILENAME).unlink(missing_ok=True)\n        super().invalidate_metadata_cache()\n\n    # ------------------------------------------------------------------\n    # Representation\n    # ------------------------------------------------------------------\n\n    def __repr__(self) -> str:\n        return (\n            f\"CachedAzureBlobWorkspace(identity_id={self._identity_id!r}, \"\n            f\"prefix={self._prefix!r}, cache={self._cache_dir!r})\"\n        )\n"
  },
  {
    "path": "py-src/data_formulator/datalake/file_manager.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nFile manager for user-uploaded files in the Data Lake.\n\nThis module handles storing user-uploaded files (CSV, Excel, TXT, HTML, JSON, PDF)\nas-is in the workspace without conversion.\n\"\"\"\n\nimport hashlib\nimport logging\nimport os\nfrom datetime import datetime, timezone\nfrom pathlib import Path\nfrom typing import BinaryIO, Union\n\nfrom werkzeug.utils import secure_filename\n\nfrom data_formulator.datalake.metadata import TableMetadata\nfrom data_formulator.datalake.workspace import Workspace\n\nlogger = logging.getLogger(__name__)\n\n# Supported file extensions for upload\nSUPPORTED_EXTENSIONS = {\n    '.csv': 'csv',\n    '.xlsx': 'excel',\n    '.xls': 'excel',\n    '.txt': 'txt',\n    '.html': 'html',\n    '.htm': 'html',\n    '.json': 'json',\n    '.pdf': 'pdf',\n}\n\n\ndef is_supported_file(filename: str) -> bool:\n    ext = Path(filename).suffix.lower()\n    return ext in SUPPORTED_EXTENSIONS\n\n\ndef get_file_type(filename: str) -> str | None:\n    \"\"\"\n    Get the file type based on extension.\n    \n    Args:\n        filename: Name of the file\n        \n    Returns:\n        File type string (e.g., 'csv', 'excel') or None if unsupported\n    \"\"\"\n    ext = Path(filename).suffix.lower()\n    return SUPPORTED_EXTENSIONS.get(ext)\n\n\ndef compute_file_hash(content: bytes) -> str:\n    \"\"\"\n    Compute MD5 hash of file content.\n    \n    Args:\n        content: File content as bytes\n        \n    Returns:\n        MD5 hash as hex string\n    \"\"\"\n    return hashlib.md5(content).hexdigest()\n\n\ndef sanitize_table_name(name: str) -> str:\n    \"\"\"\n    Sanitize a string to be a valid table name.\n    \n    Args:\n        name: Original name\n        \n    Returns:\n        Sanitized name suitable for use as a table identifier\n    \"\"\"\n    # Remove extension if present\n    name = Path(name).stem\n    \n    # Replace invalid characters with underscores\n    sanitized = []\n    for char in name:\n        if char.isalnum() or char == '_':\n            sanitized.append(char)\n        else:\n            sanitized.append('_')\n    \n    result = ''.join(sanitized)\n    \n    # Ensure it starts with a letter or underscore\n    if result and not (result[0].isalpha() or result[0] == '_'):\n        result = '_' + result\n    \n    # Ensure it's not empty\n    if not result:\n        result = '_unnamed'\n    \n    return result.lower()\n\n\ndef generate_unique_filename(\n    workspace: Workspace,\n    desired_filename: str,\n) -> str:\n    \"\"\"\n    Generate a unique filename if the desired one already exists.\n    \n    Args:\n        workspace: The workspace to check\n        desired_filename: The desired filename\n        \n    Returns:\n        A unique filename (may be the original if it doesn't exist)\n    \"\"\"\n    if not workspace.file_exists(desired_filename):\n        return desired_filename\n    \n    # Split filename and extension\n    path = Path(desired_filename)\n    stem = path.stem\n    suffix = path.suffix\n    \n    # Try adding numbers until we find a unique name\n    counter = 1\n    while True:\n        new_filename = f\"{stem}_{counter}{suffix}\"\n        if not workspace.file_exists(new_filename):\n            return new_filename\n        counter += 1\n        if counter > 1000:  # Safety limit\n            raise ValueError(f\"Could not generate unique filename for {desired_filename}\")\n\n\ndef save_uploaded_file(\n    workspace: Workspace,\n    file_content: Union[bytes, BinaryIO],\n    filename: str,\n    table_name: str | None = None,\n    overwrite: bool = False,\n) -> TableMetadata:\n    \"\"\"\n    Save an uploaded file to the workspace.\n    \n    The file is stored as-is without conversion. Metadata is added to track\n    the file in the workspace.\n    \n    Args:\n        workspace: The workspace to save to\n        file_content: File content as bytes or file-like object\n        filename: Original filename (used for extension detection)\n        table_name: Name to use for the table. If None, derived from filename.\n        overwrite: If True, overwrite existing file. If False, generate unique name.\n        \n    Returns:\n        TableMetadata for the saved file\n        \n    Raises:\n        ValueError: If file type is not supported\n    \"\"\"\n    # Sanitize filename to prevent path traversal (defence-in-depth)\n    filename = secure_filename(filename)\n    if not filename:\n        raise ValueError(\"Invalid filename after sanitization\")\n\n    # Validate file type\n    file_type = get_file_type(filename)\n    if file_type is None:\n        raise ValueError(\n            f\"Unsupported file type: {filename}. \"\n            f\"Supported extensions: {', '.join(SUPPORTED_EXTENSIONS.keys())}\"\n        )\n    \n    # Read content if it's a file-like object\n    if hasattr(file_content, 'read'):\n        content = file_content.read()\n    else:\n        content = file_content\n\n    # Determine the actual filename to use\n    if overwrite:\n        actual_filename = filename\n    else:\n        actual_filename = generate_unique_filename(workspace, filename)\n    \n    # Determine table name\n    if table_name is None:\n        table_name = sanitize_table_name(actual_filename)\n    \n    # Ensure table name is unique in metadata\n    metadata = workspace.get_metadata()\n    if table_name in metadata.tables and not overwrite:\n        # Generate unique table name\n        base_name = table_name\n        counter = 1\n        while table_name in metadata.tables:\n            table_name = f\"{base_name}_{counter}\"\n            counter += 1\n    \n    # Write the file\n    file_path = workspace.get_file_path(actual_filename)\n    with open(file_path, 'wb') as f:\n        f.write(content)\n    \n    # Compute hash and size\n    content_hash = compute_file_hash(content)\n    file_size = len(content)\n    \n    # Create metadata\n    table_metadata = TableMetadata(\n        name=table_name,\n        source_type=\"upload\",\n        filename=actual_filename,\n        file_type=file_type,\n        created_at=datetime.now(timezone.utc),\n        content_hash=content_hash,\n        file_size=file_size,\n    )\n    \n    # Save metadata\n    workspace.add_table_metadata(table_metadata)\n    \n    logger.info(\n        f\"Saved uploaded file {actual_filename} as table {table_name} \"\n        f\"({file_size} bytes, hash={content_hash[:8]}...)\"\n    )\n    \n    return table_metadata\n\n\ndef save_uploaded_file_from_path(\n    workspace: Workspace,\n    source_path: Union[str, Path],\n    table_name: str | None = None,\n    overwrite: bool = False,\n) -> TableMetadata:\n    \"\"\"\n    Save a file from a local path to the workspace.\n    \n    Args:\n        workspace: The workspace to save to\n        source_path: Path to the source file\n        table_name: Name to use for the table. If None, derived from filename.\n        overwrite: If True, overwrite existing file.\n        \n    Returns:\n        TableMetadata for the saved file\n    \"\"\"\n    source_path = Path(source_path)\n    \n    if not source_path.exists():\n        raise FileNotFoundError(f\"Source file not found: {source_path}\")\n    \n    with open(source_path, 'rb') as f:\n        content = f.read()\n    \n    return save_uploaded_file(\n        workspace=workspace,\n        file_content=content,\n        filename=source_path.name,\n        table_name=table_name,\n        overwrite=overwrite,\n    )\n\n\ndef get_file_info(workspace: Workspace, table_name: str) -> dict | None:\n    \"\"\"\n    Get information about an uploaded file.\n    \n    Args:\n        workspace: The workspace\n        table_name: Name of the table\n        \n    Returns:\n        Dictionary with file information or None if not found\n    \"\"\"\n    table_meta = workspace.get_table_metadata(table_name)\n    if table_meta is None:\n        return None\n    \n    file_path = workspace.get_file_path(table_meta.filename)\n    \n    result = {\n        \"table_name\": table_name,\n        \"filename\": table_meta.filename,\n        \"file_type\": table_meta.file_type,\n        \"file_size\": table_meta.file_size,\n        \"content_hash\": table_meta.content_hash,\n        \"created_at\": table_meta.created_at.isoformat(),\n        \"exists\": file_path.exists(),\n    }\n    \n    if file_path.exists():\n        stat = file_path.stat()\n        result[\"current_size\"] = stat.st_size\n        result[\"modified_at\"] = datetime.fromtimestamp(stat.st_mtime).isoformat()\n    \n    return result\n"
  },
  {
    "path": "py-src/data_formulator/datalake/metadata.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nMetadata management for the Data Lake workspace.\n\nThis module defines the schema and operations for workspace.yaml,\nwhich tracks all data sources (uploaded files and data loader ingests).\n\"\"\"\n\nfrom dataclasses import dataclass, field, asdict\nfrom datetime import datetime, date, timezone\nfrom decimal import Decimal\nfrom pathlib import Path\nfrom typing import Literal, Any\nimport yaml\nimport logging\nimport tempfile\nimport time\nimport os\nimport sys\n\nlogger = logging.getLogger(__name__)\n\nMETADATA_VERSION = \"1.1\"\nMETADATA_FILENAME = \"workspace.yaml\"\nLOCK_FILENAME = \".workspace.lock\"\nMAX_LOCK_WAIT_SECONDS = 10\n\n\nif sys.platform == 'win32':\n    # Windows: use LockFileEx/UnlockFileEx via ctypes for whole-file locking,\n    # semantically equivalent to fcntl.flock on Unix.\n    import ctypes\n    import ctypes.wintypes\n    import msvcrt as _msvcrt\n\n    # use_last_error=True: ctypes saves GetLastError() per-thread immediately\n    # after each call, avoiding races with other threads.\n    _kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) \n\n    _LOCKFILE_EXCLUSIVE_LOCK = 0x0002\n    _LOCKFILE_FAIL_IMMEDIATELY = 0x0001\n\n    class _OVERLAPPED(ctypes.Structure):\n        _fields_ = [\n            ('Internal', ctypes.POINTER(ctypes.c_ulong)),\n            ('InternalHigh', ctypes.POINTER(ctypes.c_ulong)),\n            ('Offset', ctypes.wintypes.DWORD),\n            ('OffsetHigh', ctypes.wintypes.DWORD),\n            ('hEvent', ctypes.wintypes.HANDLE),\n        ]\n\n    def _lock_file(fd: int) -> None:\n        \"\"\"Acquire an exclusive, non-blocking lock on the whole file (Windows).\"\"\"\n        handle = _msvcrt.get_osfhandle(fd)\n        overlapped = _OVERLAPPED()\n        result = _kernel32.LockFileEx(\n            ctypes.wintypes.HANDLE(handle),\n            ctypes.wintypes.DWORD(_LOCKFILE_EXCLUSIVE_LOCK | _LOCKFILE_FAIL_IMMEDIATELY),\n            ctypes.wintypes.DWORD(0),       # reserved\n            ctypes.wintypes.DWORD(0xFFFFFFFF),  # bytes to lock (low)\n            ctypes.wintypes.DWORD(0xFFFFFFFF),  # bytes to lock (high)\n            ctypes.byref(overlapped),\n        )\n        if not result:\n            raise ctypes.WinError(ctypes.get_last_error())\n\n    def _unlock_file(fd: int) -> None:\n        \"\"\"Release the whole-file lock (Windows).\"\"\"\n        handle = _msvcrt.get_osfhandle(fd)\n        overlapped = _OVERLAPPED()\n        result = _kernel32.UnlockFileEx(\n            ctypes.wintypes.HANDLE(handle),\n            ctypes.wintypes.DWORD(0),       # reserved\n            ctypes.wintypes.DWORD(0xFFFFFFFF),\n            ctypes.wintypes.DWORD(0xFFFFFFFF),\n            ctypes.byref(overlapped),\n        )\n        if not result:\n            raise ctypes.WinError(ctypes.get_last_error())\nelse:\n    import fcntl as _fcntl\n\n    def _lock_file(fd: int) -> None:\n        \"\"\"Acquire an exclusive, non-blocking lock on the whole file (Unix).\"\"\"\n        _fcntl.flock(fd, _fcntl.LOCK_EX | _fcntl.LOCK_NB)\n\n    def _unlock_file(fd: int) -> None:\n        \"\"\"Release the whole-file lock (Unix).\"\"\"\n        _fcntl.flock(fd, _fcntl.LOCK_UN)\n\n\nclass WorkspaceLock:\n    \"\"\"\n    Context manager for acquiring an exclusive lock on workspace metadata.\n    Prevents race conditions when multiple processes/threads modify metadata concurrently.\n    Uses LockFileEx on Windows and fcntl.flock on Unix — both provide whole-file locking.\n    \"\"\"\n\n    def __init__(self, workspace_path: Path, timeout: float = MAX_LOCK_WAIT_SECONDS):\n        self.lock_file = workspace_path / LOCK_FILENAME\n        self.timeout = timeout\n        self.lock_fd = None\n\n    def __enter__(self):\n        \"\"\"Acquire exclusive lock with timeout.\"\"\"\n        # Ensure the lock file exists\n        self.lock_file.parent.mkdir(parents=True, exist_ok=True)\n\n        start_time = time.time()\n        while True:\n            try:\n                # Open lock file (create if doesn't exist)\n                # 'a+' creates the file atomically if missing and allows seek/read\n                self.lock_fd = open(self.lock_file, 'a+')\n                # Try to acquire exclusive whole-file lock (non-blocking)\n                _lock_file(self.lock_fd.fileno())\n                logger.debug(f\"Acquired workspace lock: {self.lock_file}\")\n                return self\n            except (IOError, OSError) as e:\n                # Lock is held by another process\n                if self.lock_fd:\n                    self.lock_fd.close()\n                    self.lock_fd = None\n\n                elapsed = time.time() - start_time\n                if elapsed >= self.timeout:\n                    raise TimeoutError(\n                        f\"Failed to acquire workspace lock after {self.timeout}s. \"\n                        f\"Another process may be holding it.\"\n                    )\n\n                # Wait a bit before retrying\n                time.sleep(0.05)\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        \"\"\"Release lock.\"\"\"\n        if self.lock_fd:\n            try:\n                _unlock_file(self.lock_fd.fileno())\n                self.lock_fd.close()\n                logger.debug(f\"Released workspace lock: {self.lock_file}\")\n            except Exception as e:\n                logger.warning(f\"Error releasing lock: {e}\")\n            finally:\n                self.lock_fd = None\n\n\ndef make_json_safe(value: Any) -> Any:\n    \"\"\"\n    Convert a value (possibly containing numpy/pandas/pyarrow scalars) into\n    a JSON/YAML-safe primitive structure.\n    \"\"\"\n    if value is None or isinstance(value, (bool, int, float, str)):\n        return value\n\n    if isinstance(value, (datetime, date)):\n        return value.isoformat()\n\n    if isinstance(value, Decimal):\n        return str(value)\n\n    if isinstance(value, Path):\n        return str(value)\n\n    if isinstance(value, dict):\n        return {str(k): make_json_safe(v) for k, v in value.items()}\n\n    if isinstance(value, (list, tuple)):\n        return [make_json_safe(v) for v in value]\n\n    # numpy scalars, pandas scalars, etc.\n    item = getattr(value, \"item\", None)\n    if callable(item):\n        try:\n            return make_json_safe(item())\n        except Exception:\n            pass\n\n    return str(value)\n\n\n@dataclass\nclass ColumnInfo:\n    \"\"\"Information about a single column in a table.\"\"\"\n    name: str\n    dtype: str\n\n    def to_dict(self) -> dict:\n        return {\"name\": self.name, \"dtype\": self.dtype}\n\n    @classmethod\n    def from_dict(cls, data: dict) -> \"ColumnInfo\":\n        return cls(name=data[\"name\"], dtype=data[\"dtype\"])\n\n\n@dataclass\nclass TableMetadata:\n    \"\"\"Metadata for a single table/file in the workspace.\"\"\"\n    name: str\n    source_type: Literal[\"upload\", \"data_loader\"]\n    filename: str\n    file_type: str\n    created_at: datetime\n    content_hash: str | None = None\n    file_size: int | None = None\n    # For data_loader sources:\n    loader_type: str | None = None\n    loader_params: dict | None = None\n    source_table: str | None = None\n    source_query: str | None = None\n    last_synced: datetime | None = None\n    row_count: int | None = None\n    columns: list[ColumnInfo] | None = None\n\n    def to_dict(self) -> dict:\n        \"\"\"Convert to dictionary for YAML serialization.\"\"\"\n        result = {\n            \"source_type\": self.source_type,\n            \"filename\": self.filename,\n            \"file_type\": self.file_type,\n            \"created_at\": self.created_at.isoformat(),\n        }\n        \n        if self.content_hash is not None:\n            result[\"content_hash\"] = self.content_hash\n        if self.file_size is not None:\n            result[\"file_size\"] = self.file_size\n        if self.loader_type is not None:\n            result[\"loader_type\"] = self.loader_type\n        if self.loader_params is not None:\n            result[\"loader_params\"] = self.loader_params\n        if self.source_table is not None:\n            result[\"source_table\"] = self.source_table\n        if self.source_query is not None:\n            result[\"source_query\"] = self.source_query\n        if self.last_synced is not None:\n            result[\"last_synced\"] = self.last_synced.isoformat()\n        if self.row_count is not None:\n            result[\"row_count\"] = self.row_count\n        if self.columns is not None:\n            result[\"columns\"] = [col.to_dict() for col in self.columns]\n        \n        return result\n\n    @classmethod\n    def from_dict(cls, name: str, data: dict) -> \"TableMetadata\":\n        \"\"\"Create from dictionary (YAML deserialization).\"\"\"\n        columns = None\n        if \"columns\" in data and data[\"columns\"] is not None:\n            columns = [ColumnInfo.from_dict(col) for col in data[\"columns\"]]\n        \n        created_at = data[\"created_at\"]\n        if isinstance(created_at, str):\n            created_at = datetime.fromisoformat(created_at)\n        \n        last_synced = data.get(\"last_synced\")\n        if isinstance(last_synced, str):\n            last_synced = datetime.fromisoformat(last_synced)\n        \n        return cls(\n            name=name,\n            source_type=data[\"source_type\"],\n            filename=data[\"filename\"],\n            file_type=data[\"file_type\"],\n            created_at=created_at,\n            content_hash=data.get(\"content_hash\"),\n            file_size=data.get(\"file_size\"),\n            loader_type=data.get(\"loader_type\"),\n            loader_params=data.get(\"loader_params\"),\n            source_table=data.get(\"source_table\"),\n            source_query=data.get(\"source_query\"),\n            last_synced=last_synced,\n            row_count=data.get(\"row_count\"),\n            columns=columns,\n        )\n\n\n@dataclass\nclass WorkspaceMetadata:\n    \"\"\"Metadata for the entire workspace.\"\"\"\n    version: str\n    created_at: datetime\n    updated_at: datetime\n    tables: dict[str, TableMetadata] = field(default_factory=dict)\n\n    def add_table(self, table: TableMetadata) -> None:\n        \"\"\"Add or update a table in the metadata.\"\"\"\n        self.tables[table.name] = table\n        self.updated_at = datetime.now(timezone.utc)\n\n    def remove_table(self, name: str) -> bool:\n        \"\"\"Remove a table from the metadata. Returns True if removed.\"\"\"\n        if name in self.tables:\n            del self.tables[name]\n            self.updated_at = datetime.now(timezone.utc)\n            return True\n        return False\n\n    def get_table(self, name: str) -> TableMetadata | None:\n        \"\"\"Get metadata for a specific table.\"\"\"\n        return self.tables.get(name)\n\n    def list_tables(self) -> list[str]:\n        \"\"\"List all table names.\"\"\"\n        return list(self.tables.keys())\n\n    def to_dict(self) -> dict:\n        \"\"\"Convert to dictionary for YAML serialization.\"\"\"\n        return {\n            \"version\": self.version,\n            \"created_at\": self.created_at.isoformat(),\n            \"updated_at\": self.updated_at.isoformat(),\n            \"tables\": {\n                name: table.to_dict() \n                for name, table in self.tables.items()\n            },\n        }\n\n    @classmethod\n    def from_dict(cls, data: dict) -> \"WorkspaceMetadata\":\n        \"\"\"Create from dictionary (YAML deserialization).\"\"\"\n        created_at = data[\"created_at\"]\n        if isinstance(created_at, str):\n            created_at = datetime.fromisoformat(created_at)\n        \n        updated_at = data[\"updated_at\"]\n        if isinstance(updated_at, str):\n            updated_at = datetime.fromisoformat(updated_at)\n        \n        tables = {}\n        tables_data = data.get(\"tables\", {})\n        if tables_data:\n            for name, table_data in tables_data.items():\n                tables[name] = TableMetadata.from_dict(name, table_data)\n        \n        return cls(\n            version=data[\"version\"],\n            created_at=created_at,\n            updated_at=updated_at,\n            tables=tables,\n        )\n\n    @classmethod\n    def create_new(cls) -> \"WorkspaceMetadata\":\n        \"\"\"Create a new empty workspace metadata.\"\"\"\n        now = datetime.now(timezone.utc)\n        return cls(\n            version=METADATA_VERSION,\n            created_at=now,\n            updated_at=now,\n            tables={},\n        )\n\n\ndef load_metadata(workspace_path: Path) -> WorkspaceMetadata:\n    \"\"\"\n    Load workspace metadata from YAML file with file locking.\n\n    Args:\n        workspace_path: Path to the workspace directory\n\n    Returns:\n        WorkspaceMetadata object\n\n    Raises:\n        FileNotFoundError: If metadata file doesn't exist\n        ValueError: If metadata file is invalid\n    \"\"\"\n    metadata_file = workspace_path / METADATA_FILENAME\n\n    if not metadata_file.exists():\n        raise FileNotFoundError(f\"Metadata file not found: {metadata_file}\")\n\n    # Acquire shared lock for reading\n    with WorkspaceLock(workspace_path):\n        try:\n            with open(metadata_file, \"r\", encoding=\"utf-8\") as f:\n                content = f.read()\n\n            # Check for empty file (can happen during concurrent writes)\n            if not content or not content.strip():\n                raise ValueError(\n                    f\"Empty metadata file - this may indicate a concurrent write conflict. \"\n                    f\"File: {metadata_file}\"\n                )\n\n            data = yaml.safe_load(content)\n\n            if data is None:\n                raise ValueError(\"Metadata file parsed to None\")\n\n            return WorkspaceMetadata.from_dict(data)\n\n        except yaml.YAMLError as e:\n            raise ValueError(f\"Invalid YAML in metadata file: {e}\")\n\n\ndef save_metadata(workspace_path: Path, metadata: WorkspaceMetadata) -> None:\n    \"\"\"\n    Save workspace metadata to YAML file with atomic writes and file locking.\n\n    Uses atomic write (write to temp file + rename) to prevent partial writes\n    and file locking to prevent concurrent modifications.\n\n    Args:\n        workspace_path: Path to the workspace directory\n        metadata: WorkspaceMetadata object to save\n    \"\"\"\n    metadata_file = workspace_path / METADATA_FILENAME\n\n    # Update the updated_at timestamp\n    metadata.updated_at = datetime.now(timezone.utc)\n\n    # Ensure directory exists\n    workspace_path.mkdir(parents=True, exist_ok=True)\n\n    # Acquire exclusive lock for writing\n    with WorkspaceLock(workspace_path):\n        # Write to temporary file first (atomic operation)\n        temp_fd, temp_path = tempfile.mkstemp(\n            dir=workspace_path,\n            prefix=\".workspace_\",\n            suffix=\".yaml.tmp\",\n            text=True\n        )\n\n        try:\n            with os.fdopen(temp_fd, \"w\", encoding=\"utf-8\") as f:\n                yaml.dump(\n                    metadata.to_dict(),\n                    f,\n                    default_flow_style=False,\n                    allow_unicode=True,\n                    sort_keys=False,\n                )\n\n            # Atomic rename - replaces old file\n            os.replace(temp_path, metadata_file)\n            logger.debug(f\"Saved metadata to {metadata_file}\")\n\n        except Exception as e:\n            # Clean up temp file on error\n            try:\n                os.unlink(temp_path)\n            except:\n                pass\n            raise e\n\n\ndef metadata_exists(workspace_path: Path) -> bool:\n    \"\"\"Check if workspace metadata file exists.\"\"\"\n    return (workspace_path / METADATA_FILENAME).exists()\n"
  },
  {
    "path": "py-src/data_formulator/datalake/parquet_utils.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nParquet utility functions for the Data Lake.\n\nPure helper functions for parquet I/O, hashing, column introspection, and\nname sanitisation.  These utilities have **no dependency on Workspace** and\nare consumed by Workspace methods that handle metadata bookkeeping.\n\"\"\"\n\nimport hashlib\nimport logging\nfrom typing import Any\n\nimport pandas as pd\nimport pyarrow as pa\nimport pyarrow.parquet as pq\nfrom werkzeug.utils import secure_filename\n\nfrom data_formulator.datalake.metadata import ColumnInfo, make_json_safe\n\nlogger = logging.getLogger(__name__)\n\n# ---------------------------------------------------------------------------\n# Constants\n# ---------------------------------------------------------------------------\n\n# Default compression for parquet files\nDEFAULT_COMPRESSION = \"snappy\"\n\n# Default number of rows to persist in metadata for preview\nDEFAULT_METADATA_SAMPLE_ROWS = 50\n\n\n# ---------------------------------------------------------------------------\n# Name helpers\n# ---------------------------------------------------------------------------\n\ndef sanitize_table_name(name: str) -> str:\n    \"\"\"\n    Sanitize a string to be a valid table/file name.\n\n    Uses ``werkzeug.utils.secure_filename`` as the first pass to strip\n    path separators, leading dots, and other dangerous components (this\n    is the sanitiser recognised by CodeQL / static-analysis tools).\n    Additional rules are then applied to guarantee the result is a valid,\n    lowercase, Python-identifier-style name.\n\n    Args:\n        name: Original name\n\n    Returns:\n        Sanitized name\n    \"\"\"\n    # First pass: werkzeug's secure_filename neutralises path-traversal\n    # components (\"../\", leading dots, etc.) and keeps only ASCII\n    # alphanumerics plus \".\", \"_\", and \"-\".\n    name = secure_filename(name)\n\n    # Second pass: replace any remaining chars that are not alphanumeric\n    # or underscore (e.g. dots and hyphens kept by secure_filename).\n    sanitized = []\n    for char in name:\n        if char.isalnum() or char == '_':\n            sanitized.append(char)\n        else:\n            sanitized.append('_')\n\n    result = ''.join(sanitized)\n\n    # Ensure it starts with a letter or underscore\n    if result and not (result[0].isalpha() or result[0] == '_'):\n        result = '_' + result\n\n    # Ensure it's not empty\n    if not result:\n        result = '_unnamed'\n\n    return result.lower()\n\n\n# ---------------------------------------------------------------------------\n# Arrow / DataFrame introspection\n# ---------------------------------------------------------------------------\n\ndef get_sample_rows_from_arrow(\n    table: pa.Table, limit: int = DEFAULT_METADATA_SAMPLE_ROWS\n) -> list[dict[str, Any]]:\n    \"\"\"Get a small sample of rows from an Arrow table as JSON/YAML-safe records.\"\"\"\n    if table.num_rows <= 0 or limit <= 0:\n        return []\n    sample = table.slice(0, min(limit, table.num_rows))\n    return make_json_safe(sample.to_pylist())\n\n\ndef get_arrow_column_info(table: pa.Table) -> list[ColumnInfo]:\n    \"\"\"Extract column information from a PyArrow Table.\"\"\"\n    return [ColumnInfo(name=field.name, dtype=str(field.type)) for field in table.schema]\n\n\ndef get_column_info(df: pd.DataFrame) -> list[ColumnInfo]:\n    \"\"\"Extract column information from a pandas DataFrame.\"\"\"\n    return [ColumnInfo(name=str(col), dtype=str(df[col].dtype)) for col in df.columns]\n\n\n# ---------------------------------------------------------------------------\n# Hashing\n# ---------------------------------------------------------------------------\n\ndef compute_arrow_table_hash(table: pa.Table, sample_rows: int = 100) -> str:\n    \"\"\"\n    Compute an MD5 hash representing the Arrow Table content.\n\n    Uses row count, column names, and sampled rows for efficiency.\n    \"\"\"\n    hash_parts = [\n        f\"rows:{table.num_rows}\",\n        f\"cols:{','.join(table.column_names)}\",\n    ]\n\n    if table.num_rows > 0:\n        if table.num_rows <= sample_rows:\n            sample = table\n        else:\n            n = sample_rows // 3\n            indices = (\n                list(range(n))\n                + list(range(table.num_rows // 4, table.num_rows // 4 + n))\n                + list(range(table.num_rows - n, table.num_rows))\n            )\n            sample = table.take(indices)\n        hash_parts.append(f\"data:{sample.to_string()}\")\n\n    content = '|'.join(hash_parts)\n    return hashlib.md5(content.encode()).hexdigest()\n\n\ndef sanitize_dataframe_for_arrow(df: pd.DataFrame) -> pd.DataFrame:\n    \"\"\"\n    Sanitize a DataFrame for conversion to PyArrow Table.\n    \n    Handles common issues that cause ArrowTypeError:\n    - Mixed types in object columns (e.g., strings and integers)\n    - Columns with all nulls that have ambiguous type\n    \n    For object dtype columns, converts all non-null values to strings\n    to ensure consistent typing.\n    \n    Returns:\n        A copy of the DataFrame with sanitized columns.\n    \"\"\"\n    df = df.copy()\n    \n    for col in df.columns:\n        # Handle object dtype columns (potential mixed types)\n        if df[col].dtype == 'object':\n            # Convert all non-null values to string\n            # This handles mixed int/string columns safely\n            df[col] = df[col].apply(\n                lambda x: str(x) if pd.notna(x) and x is not None else None\n            )\n    \n    return df\n\n\ndef compute_dataframe_hash(df: pd.DataFrame, sample_rows: int = 100) -> str:\n    \"\"\"\n    Compute an MD5 hash representing the DataFrame content.\n\n    Uses row count, column names, and sampled rows for efficiency.\n    \"\"\"\n    hash_parts = [\n        f\"rows:{len(df)}\",\n        f\"cols:{','.join(df.columns.tolist())}\",\n    ]\n\n    if len(df) > 0:\n        if len(df) <= sample_rows:\n            sample = df\n        else:\n            n = sample_rows // 3\n            first = df.head(n)\n            last = df.tail(n)\n            middle = df.iloc[len(df) // 4 : len(df) * 3 // 4].sample(\n                min(n, len(df) // 2), random_state=42\n            )\n            sample = pd.concat([first, middle, last])\n        hash_parts.append(f\"data:{sample.to_string()}\")\n\n    content = '|'.join(hash_parts)\n    return hashlib.md5(content.encode()).hexdigest()\n"
  },
  {
    "path": "py-src/data_formulator/datalake/workspace.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nWorkspace management for the Data Lake.\n\nEach user has a workspace directory identified by their identity_id.\nThe workspace contains all their data files (uploaded and ingested)\nplus a workspace.yaml metadata file.\n\"\"\"\n\nimport io\nimport json\nimport os\nimport re\nimport shutil\nimport logging\nimport tempfile\nimport time\nimport zipfile\nfrom contextlib import contextmanager\nfrom datetime import datetime, timezone\nfrom pathlib import Path\nfrom typing import Any, Optional\n\nimport pandas as pd\nimport pyarrow as pa\nimport pyarrow.parquet as pq\n\nfrom data_formulator.datalake.metadata import (\n    WorkspaceMetadata,\n    TableMetadata,\n    load_metadata,\n    save_metadata,\n    metadata_exists,\n)\nfrom data_formulator.datalake.parquet_utils import (\n    sanitize_table_name,\n    get_arrow_column_info,\n    compute_arrow_table_hash,\n    get_column_info,\n    compute_dataframe_hash,\n    sanitize_dataframe_for_arrow,\n    DEFAULT_COMPRESSION,\n)\nfrom werkzeug.utils import secure_filename\n\nlogger = logging.getLogger(__name__)\n\n\ndef get_data_formulator_home() -> Path:\n    \"\"\"\n    Get the Data Formulator home directory.\n\n    Resolution order:\n    1. Flask app.config['CLI_ARGS']['data_dir'] (set via --data-dir CLI flag)\n    2. DATA_FORMULATOR_HOME environment variable\n    3. Default: ~/.data_formulator\n    \"\"\"\n    # Try Flask app config first (set by --data-dir CLI arg)\n    try:\n        from flask import current_app\n        data_dir = current_app.config.get('CLI_ARGS', {}).get('data_dir')\n        if data_dir:\n            return Path(data_dir)\n    except (RuntimeError, ImportError):\n        pass\n\n    env_home = os.getenv(\"DATA_FORMULATOR_HOME\")\n    if env_home:\n        return Path(env_home)\n\n    return Path.home() / \".data_formulator\"\n\n\ndef get_default_workspace_root() -> Path:\n    \"\"\"\n    Get the default workspace root directory.\n\n    Returns DATA_FORMULATOR_HOME / \"workspaces\".\n    \"\"\"\n    return get_data_formulator_home() / \"workspaces\"\n\n\ndef cleanup_stale_temp_files(workspace_path: Path, max_age_hours: int = 24) -> int:\n    \"\"\"\n    Remove stale temporary files from workspace directory.\n\n    This handles crash recovery by cleaning up temp files (.temp_*.parquet) that\n    were not properly deleted due to server crashes or unexpected shutdowns.\n\n    Args:\n        workspace_path: Path to the workspace directory\n        max_age_hours: Remove temp files older than this many hours (default: 24)\n\n    Returns:\n        Number of files cleaned up\n    \"\"\"\n    if not workspace_path.exists():\n        return 0\n\n    cleaned_count = 0\n    current_time = time.time()\n    max_age_seconds = max_age_hours * 3600\n\n    try:\n        for file_path in workspace_path.glob('.temp_*.parquet'):\n            try:\n                # Check file age using modification time\n                file_age = current_time - file_path.stat().st_mtime\n\n                if file_age > max_age_seconds:\n                    file_path.unlink(missing_ok=True)\n                    cleaned_count += 1\n                    logger.info(\n                        f\"Cleaned up stale temp file: {file_path.name} \"\n                        f\"(age: {file_age / 3600:.1f} hours)\"\n                    )\n            except Exception as e:\n                logger.warning(f\"Failed to clean temp file {file_path}: {e}\")\n    except Exception as e:\n        logger.warning(f\"Error during temp file cleanup in {workspace_path}: {e}\")\n\n    if cleaned_count > 0:\n        logger.info(f\"Cleaned up {cleaned_count} stale temp file(s) from {workspace_path}\")\n\n    return cleaned_count\n\n\nclass Workspace:\n    \"\"\"\n    Manages a user's workspace directory in the Data Lake.\n    \n    The workspace contains:\n    - workspace.yaml: Metadata file tracking all data sources\n    - Data files: User uploaded files (CSV, Excel, etc.) and parquet files from data loaders\n    \n    All files are stored in a single flat directory per user.\n    \"\"\"\n    \n    def __init__(self, identity_id: str, root_dir: Optional[str | Path] = None):\n        \"\"\"\n        Initialize a workspace for a user.\n        \n        Args:\n            identity_id: Unique identifier for the user (e.g., \"user:123\" or \"browser:abc\")\n            root_dir: Root directory for all workspaces. If None, uses default.\n        \"\"\"\n        if not identity_id:\n            raise ValueError(\"identity_id cannot be empty\")\n        \n        # Sanitize identity_id for filesystem safety\n        self._identity_id = identity_id\n        self._safe_id = self._sanitize_identity_id(identity_id)\n        \n        # Determine root directory\n        if root_dir is None:\n            self._root = get_default_workspace_root()\n        else:\n            self._root = Path(root_dir)\n        \n        # Workspace path is root / sanitized_identity_id\n        self._path = self._root / self._safe_id\n\n        # Verify the constructed path hasn't escaped the root directory\n        resolved = self._path.resolve()\n        root_resolved = self._root.resolve()\n        if not str(resolved).startswith(str(root_resolved) + os.sep) and resolved != root_resolved:\n            raise ValueError(\n                f\"Path traversal detected: workspace path escapes root directory\"\n            )\n        if resolved == root_resolved:\n            raise ValueError(\n                \"identity_id must not resolve to the workspace root itself\"\n            )\n\n        # Ensure workspace directory exists\n        self._path.mkdir(parents=True, exist_ok=True)\n\n        # Initialize metadata if it doesn't exist\n        if not metadata_exists(self._path):\n            self._init_metadata()\n\n        # --- in-memory metadata cache ----------------------------------------\n        # Avoids re-reading and re-parsing workspace.yaml on every method call.\n        # Invalidated automatically by save_metadata() and cleanup().\n        self._metadata_cache: Optional[WorkspaceMetadata] = None\n\n        # Clean up any stale temp files from previous crashes (older than 24 hours)\n        # This is safe because active temp files are always created fresh and\n        # cleaned up within minutes of their creation\n        cleanup_stale_temp_files(self._path, max_age_hours=24)\n\n        logger.debug(f\"Initialized workspace at {self._path}\")\n    \n    @staticmethod\n    def _sanitize_identity_id(identity_id: str) -> str:\n        \"\"\"\n        Sanitize identity_id for use as a directory name.\n        \n        Uses ``secure_filename`` to produce a safe single-component name.\n        Raises ``ValueError`` if the result is empty or too long.\n        \"\"\"\n        if len(identity_id) > 256:\n            raise ValueError(\"identity_id too long\")\n        result = secure_filename(identity_id)\n        if not result:\n            raise ValueError(\"identity_id sanitized to empty string\")\n        return result\n    \n    def _init_metadata(self) -> None:\n        \"\"\"Initialize a new workspace with empty metadata.\"\"\"\n        metadata = WorkspaceMetadata.create_new()\n        save_metadata(self._path, metadata)\n        logger.info(f\"Initialized new workspace metadata at {self._path}\")\n    \n    def get_file_path(self, filename: str) -> Path:\n        \"\"\"\n        Get the full path for a file in the workspace.\n        \n        Args:\n            filename: Name of the file\n            \n        Returns:\n            Full path to the file\n        \"\"\"\n        # secure_filename strips path separators and \"..\" components.\n        safe_filename = secure_filename(filename)\n        if not safe_filename:\n            raise ValueError(f\"Invalid filename: {filename!r}\")\n        return self._path / safe_filename\n    \n    def file_exists(self, filename: str) -> bool:\n        \"\"\"\n        Check if a file exists in the workspace.\n        \n        Args:\n            filename: Name of the file\n            \n        Returns:\n            True if file exists, False otherwise\n        \"\"\"\n        return self.get_file_path(filename).exists()\n    \n    \n    def delete_table(self, table_name: str) -> bool:\n        \"\"\"\n        Delete a table by name (removes both file and metadata).\n        \n        Args:\n            table_name: Name of the table to delete\n            \n        Returns:\n            True if table was deleted, False if it didn't exist\n        \"\"\"\n        metadata = self.get_metadata()\n        table = metadata.get_table(table_name)\n        \n        if table is None:\n            return False\n        \n        # Delete the file\n        file_path = self.get_file_path(table.filename)\n        if file_path.exists():\n            file_path.unlink()\n        \n        # Remove from metadata\n        metadata.remove_table(table_name)\n        self.save_metadata(metadata)\n        \n        logger.info(f\"Deleted table {table_name} from workspace {self._safe_id}\")\n        return True\n    \n    def get_metadata(self) -> WorkspaceMetadata:\n        if self._metadata_cache is not None:\n            return self._metadata_cache\n        self._metadata_cache = load_metadata(self._path)\n        return self._metadata_cache\n    \n    def save_metadata(self, metadata: WorkspaceMetadata) -> None:\n        save_metadata(self._path, metadata)\n        # Update the cache with the just-saved metadata\n        self._metadata_cache = metadata\n\n    def invalidate_metadata_cache(self) -> None:\n        \"\"\"Force the next get_metadata() to re-read from disk.\"\"\"\n        self._metadata_cache = None\n    \n    def add_table_metadata(self, table: TableMetadata) -> None:\n        metadata = self.get_metadata()\n        metadata.add_table(table)\n        self.save_metadata(metadata)\n    \n    def get_table_metadata(self, table_name: str) -> Optional[TableMetadata]:\n        \"\"\"Look up table metadata, falling back to sanitized name.\"\"\"\n        ws_metadata = self.get_metadata()\n        result = ws_metadata.get_table(table_name)\n        if result is None:\n            result = ws_metadata.get_table(sanitize_table_name(table_name))\n        return result\n    \n    def list_tables(self) -> list[str]:\n        metadata = self.get_metadata()\n        return metadata.list_tables()\n    \n    def get_fresh_name(self, name: str) -> str:\n        \"\"\"\n        Generate a unique table name that doesn't conflict with existing tables.\n        \n        Sanitizes the input name, then checks if it already exists in the workspace.\n        If it does, appends an incrementing numeric suffix (_2, _3, ...) until\n        a unique name is found.\n        \n        Args:\n            name: Desired table name (will be sanitized)\n            \n        Returns:\n            A sanitized, unique table name safe for use in write_parquet etc.\n        \"\"\"\n        base = sanitize_table_name(name)\n        existing = set(self.list_tables())\n        \n        if base not in existing:\n            return base\n        \n        # Try incrementing suffixes\n        counter = 2\n        while f\"{base}_{counter}\" in existing:\n            counter += 1\n        return f\"{base}_{counter}\"\n    \n    def cleanup(self) -> None:\n        \"\"\" Remove the entire workspace directory. \"\"\"\n        if self._path.exists():\n            shutil.rmtree(self._path)\n            logger.info(f\"Cleaned up workspace {self._safe_id}\")\n        self._metadata_cache = None\n\n    def get_relative_data_file_path(self, table_name: str) -> str:\n        \"\"\"\n        Get the filename for a table, suitable for use in generated code.\n\n        Returns just the filename (e.g. \"sales_data.parquet\").  The sandbox\n        ensures the script runs with the workspace as its working directory,\n        so ``pd.read_parquet(\"sales_data.parquet\")`` works directly.\n\n        Args:\n            table_name: Name of the table in the workspace\n\n        Returns:\n            Filename string that can be used in read_parquet() / read_csv() etc.\n\n        Raises:\n            FileNotFoundError: If the table doesn't exist\n        \"\"\"\n        metadata = self.get_table_metadata(table_name)\n        if metadata is None:\n            raise FileNotFoundError(f\"Table not found: {table_name}\")\n        return metadata.filename\n\n    def read_data_as_df(self, table_name: str) -> pd.DataFrame:\n        \"\"\"\n        Read a table from the workspace as a pandas DataFrame.\n\n        Automatically selects the appropriate reader based on the file's type\n        (stored in metadata). Supports parquet, csv, excel, json, and txt.\n        Falls back to sanitized table name if the original name is not found.\n\n        Args:\n            table_name: Name of the table in the workspace\n\n        Returns:\n            pandas DataFrame with the table data\n\n        Raises:\n            FileNotFoundError: If the table or file doesn't exist\n            ValueError: If the file type is not supported for DataFrame reading\n        \"\"\"\n        metadata = self.get_table_metadata(table_name)\n        if metadata is None:\n            raise FileNotFoundError(f\"Table not found: {table_name}\")\n\n        file_path = self.get_file_path(metadata.filename)\n        if not file_path.exists():\n            raise FileNotFoundError(f\"File not found: {file_path}\")\n\n        file_type = metadata.file_type\n\n        if file_type == \"parquet\":\n            return pd.read_parquet(file_path)\n        elif file_type == \"csv\":\n            return pd.read_csv(file_path)\n        elif file_type == \"excel\":\n            return pd.read_excel(file_path)\n        elif file_type == \"json\":\n            return pd.read_json(file_path)\n        elif file_type == \"txt\":\n            return pd.read_csv(file_path, sep=\"\\t\")\n        else:\n            raise ValueError(\n                f\"Unsupported file type '{file_type}' for table '{table_name}'. \"\n                f\"Supported types: parquet, csv, excel, json, txt.\"\n            )\n\n    # ------------------------------------------------------------------\n    # Parquet management\n    # ------------------------------------------------------------------\n\n    def write_parquet_from_arrow(\n        self,\n        table: pa.Table,\n        table_name: str,\n        compression: str = DEFAULT_COMPRESSION,\n        loader_metadata: Optional[dict[str, Any]] = None,\n    ) -> TableMetadata:\n        \"\"\"\n        Write a PyArrow Table directly to parquet.\n\n        This is the preferred path because it avoids pandas conversion.\n        \"\"\"\n        safe_name = sanitize_table_name(table_name)\n        filename = f\"{safe_name}.parquet\"\n\n        # Overwrite existing file if present\n        metadata = self.get_metadata()\n        if safe_name in metadata.tables:\n            old_file = self.get_file_path(metadata.tables[safe_name].filename)\n            if old_file.exists():\n                old_file.unlink()\n\n        file_path = self.get_file_path(filename)\n        pq.write_table(table, file_path, compression=compression)\n\n        now = datetime.now(timezone.utc)\n        table_metadata = TableMetadata(\n            name=safe_name,\n            source_type=\"data_loader\",\n            filename=filename,\n            file_type=\"parquet\",\n            created_at=now,\n            content_hash=compute_arrow_table_hash(table),\n            file_size=file_path.stat().st_size,\n            row_count=table.num_rows,\n            columns=get_arrow_column_info(table),\n            last_synced=now,\n        )\n\n        if loader_metadata:\n            table_metadata.loader_type = loader_metadata.get('loader_type')\n            table_metadata.loader_params = loader_metadata.get('loader_params')\n            table_metadata.source_table = loader_metadata.get('source_table')\n            table_metadata.source_query = loader_metadata.get('source_query')\n\n        self.add_table_metadata(table_metadata)\n        logger.info(\n            f\"Wrote parquet {filename}: {table.num_rows} rows, \"\n            f\"{table.num_columns} cols ({table_metadata.file_size} bytes) [Arrow]\"\n        )\n        return table_metadata\n\n    def write_parquet(\n        self,\n        df: pd.DataFrame,\n        table_name: str,\n        compression: str = DEFAULT_COMPRESSION,\n        loader_metadata: Optional[dict[str, Any]] = None,\n    ) -> TableMetadata:\n        \"\"\"Write a pandas DataFrame to parquet.\"\"\"\n        safe_name = sanitize_table_name(table_name)\n        filename = f\"{safe_name}.parquet\"\n\n        metadata = self.get_metadata()\n        if safe_name in metadata.tables:\n            old_file = self.get_file_path(metadata.tables[safe_name].filename)\n            if old_file.exists():\n                old_file.unlink()\n\n        file_path = self.get_file_path(filename)\n        # Sanitize DataFrame to handle mixed types in object columns\n        sanitized_df = sanitize_dataframe_for_arrow(df)\n        arrow_table = pa.Table.from_pandas(sanitized_df)\n        pq.write_table(arrow_table, file_path, compression=compression)\n\n        now = datetime.now(timezone.utc)\n        table_metadata = TableMetadata(\n            name=safe_name,\n            source_type=\"data_loader\",\n            filename=filename,\n            file_type=\"parquet\",\n            created_at=now,\n            content_hash=compute_dataframe_hash(df),\n            file_size=file_path.stat().st_size,\n            row_count=len(df),\n            columns=get_column_info(df),\n            last_synced=now,\n        )\n\n        if loader_metadata:\n            table_metadata.loader_type = loader_metadata.get('loader_type')\n            table_metadata.loader_params = loader_metadata.get('loader_params')\n            table_metadata.source_table = loader_metadata.get('source_table')\n            table_metadata.source_query = loader_metadata.get('source_query')\n\n        self.add_table_metadata(table_metadata)\n        logger.info(\n            f\"Wrote parquet {filename}: {len(df)} rows, \"\n            f\"{len(df.columns)} cols ({table_metadata.file_size} bytes)\"\n        )\n        return table_metadata\n\n    def get_parquet_schema(self, table_name: str) -> dict:\n        \"\"\"Get schema information for a parquet table without reading all data.\"\"\"\n        meta = self.get_table_metadata(table_name)\n        if meta is None:\n            raise FileNotFoundError(f\"Table not found: {table_name}\")\n        if meta.file_type != \"parquet\":\n            raise ValueError(f\"Table {table_name} is not a parquet file\")\n        path = self.get_file_path(meta.filename)\n        if not path.exists():\n            raise FileNotFoundError(f\"Parquet file not found: {path}\")\n\n        pf = pq.ParquetFile(path)\n        schema = pf.schema_arrow\n        return {\n            \"table_name\": table_name,\n            \"filename\": meta.filename,\n            \"num_rows\": pf.metadata.num_rows,\n            \"num_columns\": len(schema),\n            \"columns\": [\n                {\"name\": f.name, \"type\": str(f.type), \"nullable\": f.nullable}\n                for f in schema\n            ],\n            \"created_at\": meta.created_at.isoformat(),\n            \"last_synced\": meta.last_synced.isoformat() if meta.last_synced else None,\n        }\n\n    def get_parquet_path(self, table_name: str) -> Path:\n        \"\"\"Return the resolved filesystem path of the parquet file for *table_name*.\"\"\"\n        meta = self.get_table_metadata(table_name)\n        if meta is None:\n            raise FileNotFoundError(f\"Table not found: {table_name}\")\n        if meta.file_type != \"parquet\":\n            raise ValueError(f\"Table {table_name} is not a parquet file\")\n        path = self.get_file_path(meta.filename)\n        if not path.exists():\n            raise FileNotFoundError(f\"Parquet file not found: {path}\")\n        return path.resolve()\n\n    def run_parquet_sql(self, table_name: str, sql: str) -> pd.DataFrame:\n        \"\"\"\n        Run a DuckDB SQL query against a parquet table.\n\n        The *sql* string must contain a ``{parquet}`` placeholder which will\n        be replaced with ``read_parquet('<path>')``.\n        Example:  ``SELECT * FROM {parquet} AS t LIMIT 10``\n\n        This gives efficient column-pruned / row-group-skipped reads on\n        large parquet files without loading the full table into memory.\n        \"\"\"\n        import duckdb\n\n        path = self.get_parquet_path(table_name)\n        path_escaped = str(path).replace(\"\\\\\", \"\\\\\\\\\").replace(\"'\", \"''\")\n        if \"{parquet}\" not in sql:\n            raise ValueError(\"SQL must contain {parquet} placeholder\")\n        full_sql = sql.format(parquet=f\"read_parquet('{path_escaped}')\")\n        conn = duckdb.connect(\":memory:\")\n        try:\n            return conn.execute(full_sql).fetchdf()\n        finally:\n            conn.close()\n\n    def refresh_parquet_from_arrow(\n        self,\n        table_name: str,\n        table: pa.Table,\n        compression: str = DEFAULT_COMPRESSION,\n    ) -> tuple[TableMetadata, bool]:\n        \"\"\"\n        Refresh a parquet table with new Arrow data.\n\n        Returns ``(new_metadata, data_changed)``.\n        \"\"\"\n        old_meta = self.get_table_metadata(table_name)\n        if old_meta is None:\n            raise FileNotFoundError(f\"Table not found: {table_name}\")\n\n        new_hash = compute_arrow_table_hash(table)\n        if old_meta.content_hash == new_hash:\n            old_meta.last_synced = datetime.now(timezone.utc)\n            self.add_table_metadata(old_meta)\n            logger.info(f\"Table {table_name} unchanged (hash: {new_hash[:8]}…)\")\n            return old_meta, False\n\n        loader_metadata = {\n            'loader_type': old_meta.loader_type,\n            'loader_params': old_meta.loader_params,\n            'source_table': old_meta.source_table,\n            'source_query': old_meta.source_query,\n        }\n        new_meta = self.write_parquet_from_arrow(\n            table=table,\n            table_name=table_name,\n            compression=compression,\n            loader_metadata=loader_metadata,\n        )\n        logger.info(f\"Refreshed {table_name}: {old_meta.row_count} → {new_meta.row_count} rows\")\n        return new_meta, True\n\n    def refresh_parquet(\n        self,\n        table_name: str,\n        df: pd.DataFrame,\n        compression: str = DEFAULT_COMPRESSION,\n    ) -> tuple[TableMetadata, bool]:\n        \"\"\"Refresh a parquet table with new DataFrame data.\"\"\"\n        return self.refresh_parquet_from_arrow(\n            table_name, pa.Table.from_pandas(df), compression\n        )\n\n    @contextmanager\n    def local_dir(self):\n        \"\"\"Context manager yielding a local directory containing workspace files.\n\n        For local workspaces this simply yields ``self._path``.\n        Subclasses (e.g. Azure Blob) override this to download files to a\n        temporary directory that is cleaned up on exit.\n\n        Usage::\n\n            with workspace.local_dir() as wd:\n                subprocess.run([\"python\", \"script.py\"], cwd=wd)\n        \"\"\"\n        yield self._path\n\n    def save_workspace_snapshot(self, dst: Path) -> None:\n        \"\"\"Copy all workspace files (including metadata) to *dst* directory.\n\n        Used by session save / export to capture the full workspace state.\n        \"\"\"\n        if self._path.exists() and any(self._path.iterdir()):\n            dst.mkdir(parents=True, exist_ok=True)\n            shutil.copytree(self._path, dst, dirs_exist_ok=True)\n\n    def restore_workspace_snapshot(self, src: Path) -> None:\n        \"\"\"Replace all workspace files with the contents of *src* directory.\n\n        Used by session load / import to restore a previously saved workspace.\n        \"\"\"\n        if self._path.exists():\n            shutil.rmtree(self._path)\n        self._path.mkdir(parents=True, exist_ok=True)\n        if src.exists():\n            shutil.copytree(src, self._path, dirs_exist_ok=True)\n\n    # ------------------------------------------------------------------\n    # Session management\n    # ------------------------------------------------------------------\n\n    @staticmethod\n    def _sanitize_session_name(name: str) -> str:\n        \"\"\"Produce a storage-safe session name.\"\"\"\n        return secure_filename(name) or 'unnamed'\n\n    def _get_sessions_root(self) -> Path:\n        \"\"\"Return the per-user sessions directory on local filesystem.\"\"\"\n        p = get_data_formulator_home() / \"sessions\" / self._safe_id\n        p.mkdir(parents=True, exist_ok=True)\n        return p\n\n    def _session_dir(self, session_name: str) -> Path:\n        return self._get_sessions_root() / self._sanitize_session_name(session_name)\n\n    def save_session(self, session_name: str, state: dict) -> str:\n        \"\"\"Save a session (state + workspace snapshot).\n\n        Returns the ISO timestamp of the save.\n        \"\"\"\n        safe_name = self._sanitize_session_name(session_name)\n        sess_dir = self._session_dir(session_name)\n\n        # Wipe previous save with the same name\n        if sess_dir.exists():\n            shutil.rmtree(sess_dir)\n        sess_dir.mkdir(parents=True)\n\n        # 1. Workspace snapshot\n        self.save_workspace_snapshot(sess_dir / \"workspace\")\n\n        # 2. State JSON\n        (sess_dir / \"state.json\").write_text(\n            json.dumps(state, default=str), encoding=\"utf-8\"\n        )\n\n        saved_at = datetime.now(timezone.utc).isoformat()\n        logger.info(f\"Saved session '{safe_name}' for {self._identity_id}\")\n        return saved_at\n\n    def load_session(self, session_name: str) -> dict | None:\n        \"\"\"Load a session.  Restores workspace and returns the state dict.\n\n        Returns ``None`` if the session does not exist.\n        \"\"\"\n        sess_dir = self._session_dir(session_name)\n        state_file = sess_dir / \"state.json\"\n        if not state_file.exists():\n            return None\n\n        # 1. Restore workspace\n        ws_saved = sess_dir / \"workspace\"\n        if ws_saved.exists():\n            self.restore_workspace_snapshot(ws_saved)\n\n        # 2. Return state\n        return json.loads(state_file.read_text(encoding=\"utf-8\"))\n\n    def list_sessions(self) -> list[dict]:\n        \"\"\"List saved sessions (newest first).\"\"\"\n        root = self._get_sessions_root()\n        sessions: list[dict] = []\n        if root.exists():\n            for child in sorted(root.iterdir()):\n                if not child.is_dir():\n                    continue\n                state_file = child / \"state.json\"\n                if not state_file.exists():\n                    continue\n                stat = state_file.stat()\n                sessions.append({\n                    \"name\": child.name,\n                    \"saved_at\": datetime.fromtimestamp(\n                        stat.st_mtime, tz=timezone.utc\n                    ).isoformat(),\n                })\n        sessions.sort(key=lambda s: s[\"saved_at\"], reverse=True)\n        return sessions\n\n    def delete_session(self, session_name: str) -> bool:\n        \"\"\"Delete a saved session.  Returns True if it existed.\"\"\"\n        sess_dir = self._session_dir(session_name)\n        if not sess_dir.exists():\n            return False\n        shutil.rmtree(sess_dir)\n        logger.info(f\"Deleted session '{session_name}' for {self._identity_id}\")\n        return True\n\n    def export_session_zip(self, state: dict) -> io.BytesIO:\n        \"\"\"Export current state + workspace as a .dfsession zip.\"\"\"\n        buf = io.BytesIO()\n        with zipfile.ZipFile(buf, \"w\", zipfile.ZIP_DEFLATED) as zf:\n            zf.writestr(\"state.json\", json.dumps(state, default=str))\n            with tempfile.TemporaryDirectory(prefix=\"df_session_export_\") as tmp_dir:\n                ws_snap = Path(tmp_dir) / \"workspace\"\n                self.save_workspace_snapshot(ws_snap)\n                if ws_snap.exists():\n                    for ws_file in ws_snap.rglob(\"*\"):\n                        if ws_file.is_file():\n                            arcname = \"workspace/\" + str(ws_file.relative_to(ws_snap))\n                            zf.write(ws_file, arcname)\n        buf.seek(0)\n        return buf\n\n    def import_session_zip(self, zip_data: io.BytesIO) -> dict:\n        \"\"\"Import a .dfsession zip.  Restores workspace, returns state dict.\n\n        Raises ``ValueError`` on invalid zip / missing state.json.\n        \"\"\"\n        with zipfile.ZipFile(zip_data, \"r\") as zf:\n            if \"state.json\" not in zf.namelist():\n                raise ValueError(\"Invalid session file: missing state.json\")\n\n            state = json.loads(zf.read(\"state.json\"))\n\n            workspace_entries = [\n                n for n in zf.namelist()\n                if n.startswith(\"workspace/\") and not n.endswith(\"/\")\n            ]\n            if workspace_entries:\n                with tempfile.TemporaryDirectory(prefix=\"df_session_import_\") as tmp_dir:\n                    ws_tmp = Path(tmp_dir) / \"workspace\"\n                    ws_tmp.mkdir(parents=True, exist_ok=True)\n                    for entry in workspace_entries:\n                        rel = entry[len(\"workspace/\"):]\n                        # Guard against zip-slip: secure_filename strips\n                        # path separators and \"..\" components, and is\n                        # recognised by CodeQL as a path-injection sanitiser.\n                        safe_rel = secure_filename(rel)\n                        if not safe_rel:\n                            continue  # skip entries that sanitise to empty\n                        dest = ws_tmp / safe_rel\n                        dest.parent.mkdir(parents=True, exist_ok=True)\n                        dest.write_bytes(zf.read(entry))\n                    self.restore_workspace_snapshot(ws_tmp)\n\n        return state\n\n    def __repr__(self) -> str:\n        return f\"Workspace(identity_id={self._identity_id!r}, path={self._path!r})\"\n\n\nclass WorkspaceWithTempData:\n    \"\"\"\n    A Workspace wrapper with an in-memory metadata overlay for temporary tables.\n\n    Delegates **all** attribute and method access to the wrapped workspace\n    via ``__getattr__``, ensuring the correct backend-specific implementations\n    (e.g. ``AzureBlobWorkspace.read_data_as_df``, ``local_dir``, etc.) are\n    always used.\n\n    Does **not** inherit from :class:`Workspace` — this is intentional so\n    that Python's MRO cannot short-circuit to base-class implementations\n    and skip subclass overrides on the wrapped workspace.\n\n    Used as a context manager:\n\n    .. code-block:: python\n\n        with WorkspaceWithTempData(workspace, temp_data) as ws:\n            ws.read_data_as_df(\"my_temp_table\")  # works\n\n    On enter:\n      - Writes each temp table into the workspace via the workspace's own\n        ``write_parquet`` method (works for local *and* blob backends).\n      - Overrides ``get_table_metadata`` / ``list_tables`` to resolve temp\n        tables from a fast in-memory dict, without touching ``workspace.yaml``.\n\n    On exit:\n      - Deletes the temp parquet files via the workspace's own\n        ``delete_table`` / file deletion methods.\n\n    The original ``Workspace`` is never mutated (metadata is overlaid).\n    Nesting is supported: inner overlays delegate to outer overlays.\n    \"\"\"\n\n    def __init__(self, workspace: Workspace, temp_data: Optional[list[dict[str, Any]]] = None):\n        # Do NOT call Workspace.__init__ — we delegate everything to _base.\n        # We also do NOT copy __dict__; instead __getattr__ proxies to _base.\n        object.__setattr__(self, '_base', workspace)\n        object.__setattr__(self, '_temp_data', temp_data if temp_data else None)\n        object.__setattr__(self, '_temp_table_names', [])\n        object.__setattr__(self, '_overlay', {})\n\n    # ---- proxy everything else to the real workspace -----------------------\n\n    def __getattr__(self, name: str) -> Any:\n        \"\"\"Delegate attribute access to the wrapped workspace.\"\"\"\n        return getattr(self._base, name)\n\n    # ---- metadata overrides ------------------------------------------------\n\n    def get_table_metadata(self, table_name: str) -> Optional[TableMetadata]:\n        result = self._overlay.get(table_name)\n        if result is None:\n            result = self._overlay.get(sanitize_table_name(table_name))\n        if result is not None:\n            return result\n        return self._base.get_table_metadata(table_name)\n\n    def list_tables(self) -> list[str]:\n        names = self._base.list_tables()\n        for name in self._overlay:\n            if name not in names:\n                names.append(name)\n        return names\n\n    def read_data_as_df(self, table_name: str) -> pd.DataFrame:\n        \"\"\"Read a table — temp overlay first, then delegate to base.\"\"\"\n        safe = sanitize_table_name(table_name)\n        if table_name in self._overlay or safe in self._overlay:\n            # Temp table was written via base workspace; delegate read to it\n            return self._base.read_data_as_df(safe)\n        return self._base.read_data_as_df(table_name)\n\n    # ---- context manager ---------------------------------------------------\n\n    def __enter__(self) -> \"WorkspaceWithTempData\":\n        if not self._temp_data:\n            return self\n\n        for item in self._temp_data:\n            base_name = item.get(\"name\", \"table\")\n            safe_name = sanitize_table_name(base_name)\n\n            rows = item.get(\"rows\", [])\n            df = pd.DataFrame(rows) if rows else pd.DataFrame()\n\n            # Write through the base workspace (handles local *and* blob)\n            self._base.write_parquet(df, safe_name)\n\n            # Build an overlay entry so get_table_metadata resolves without\n            # touching the real workspace.yaml.\n            meta = self._base.get_table_metadata(safe_name)\n            if meta is not None:\n                self._overlay[safe_name] = meta\n\n            self._temp_table_names.append(safe_name)\n            logger.debug(\n                f\"Mounted temp table '{safe_name}' \"\n                f\"({len(df)} rows, in-memory metadata)\"\n            )\n\n        return self\n\n    def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:\n        for name in self._temp_table_names:\n            try:\n                self._base.delete_table(name)\n            except Exception as e:\n                logger.warning(f\"Failed to remove temp table {name}: {e}\")\n\n        self._temp_table_names.clear()\n        self._overlay.clear()"
  },
  {
    "path": "py-src/data_formulator/demo_stream_routes.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nDemo data REST APIs for streaming/refresh demos.\n\nDesign Philosophy:\n- Each endpoint returns a COMPLETE dataset (not just a single row)\n- Datasets are meaningful on their own for analysis/visualization\n- When refreshed, datasets change over time:\n  * New rows may be added (accumulating data)\n  * Existing values may update (latest readings)\n- This allows tracking trends, changes, and patterns over time\n\nExample Use Cases:\n- Stock prices: \"Last 30 days\" grows daily with new data\n- ISS position: Track trajectory over last N minutes\n- Earthquakes: All quakes since a start date accumulates\n\nRate Limiting:\n- External API routes are rate-limited to prevent abuse\n- Limits are set per IP address using Flask-Limiter\n\"\"\"\n\nimport random\nimport logging\nimport requests\nimport io\nimport csv\nimport math\nfrom datetime import datetime, timedelta\nfrom flask import Blueprint, Response, request, jsonify\nfrom typing import Any\nfrom collections import deque\nimport threading\n\nlogger = logging.getLogger(__name__)\n\ndemo_stream_bp = Blueprint('demo_stream', __name__, url_prefix='/api/demo-stream')\n\n# ============================================================================\n# Rate Limiting Configuration\n# ============================================================================\n# Uses Flask-Limiter with deferred app initialization to avoid circular imports.\n# The limiter is created here and init_app() is called from app.py.\n\nfrom flask_limiter import Limiter\nfrom flask_limiter.util import get_remote_address\n\n# Create limiter without app - will be initialized via init_app() in app.py\nlimiter = Limiter(\n    key_func=get_remote_address,\n    default_limits=[],  # No default limits - only apply to specific routes\n    storage_uri=\"memory://\",\n    strategy=\"fixed-window\",\n)\n\n# Rate limit strings for different endpoint types\n# These are applied to routes that call external APIs\n\n# ISS API (open-notify.org) - generous limits\nISS_RATE_LIMIT = \"30 per minute\"\n\n# USGS Earthquake API - allow reasonable queries\nEARTHQUAKE_RATE_LIMIT = \"20 per minute\"\n\n# Weather APIs (Open-Meteo, NWS) - moderate limits\nWEATHER_RATE_LIMIT = \"20 per minute\"\n\n# yfinance API - more restrictive due to Yahoo's limits\nYFINANCE_RATE_LIMIT = \"10 per minute\"\n\n# Simulated/mock data - no external calls, more generous\nMOCK_RATE_LIMIT = \"60 per minute\"\n\n# Try to import yfinance\nimport yfinance as yf\n\n\n# ============================================================================\n# Helper Functions\n# ============================================================================\n\ndef make_csv_response(rows: list, filename: str = \"data.csv\") -> Response:\n    \"\"\"Convert list of dicts to CSV text response\"\"\"\n    if not rows:\n        return Response(\"\", mimetype='text/csv')\n    \n    output = io.StringIO()\n    writer = csv.DictWriter(output, fieldnames=rows[0].keys())\n    writer.writeheader()\n    writer.writerows(rows)\n    \n    return Response(\n        output.getvalue(),\n        mimetype='text/csv',\n        headers={'Access-Control-Allow-Origin': '*'}\n    )\n\n\n# ============================================================================\n# ISS Location Tracking - Real-time trajectory\n# Returns accumulated position history that grows over time\n# Background thread automatically collects positions every 5 seconds\n# ============================================================================\n\n# Thread-safe storage for ISS position history\n_iss_track_lock = threading.Lock()\n_iss_track_history: deque = deque(maxlen=10000)  # Keep last 10000 positions\n_iss_last_fetch: datetime | None = None\n_iss_collector_started = False\n\ndef _fetch_iss_position() -> dict[str, Any] | None:\n    \"\"\"Fetch current ISS position from API\"\"\"\n    try:\n        response = requests.get(\"http://api.open-notify.org/iss-now.json\", timeout=10)\n        response.raise_for_status()\n        data = response.json()\n        position = data.get(\"iss_position\", {})\n        return {\n            \"timestamp\": datetime.utcfromtimestamp(data.get(\"timestamp\", 0)).isoformat() + \"Z\",\n            \"latitude\": float(position.get(\"latitude\", 0)),\n            \"longitude\": float(position.get(\"longitude\", 0)),\n        }\n    except Exception as e:\n        logger.warning(f\"Failed to fetch ISS position: {e}\")\n        return None\n\n\ndef _iss_collector_loop():\n    \"\"\"Background thread that continuously collects ISS positions every 5 seconds.\"\"\"\n    global _iss_last_fetch\n    logger.info(\"ISS position collector started\")\n    while True:\n        try:\n            position = _fetch_iss_position()\n            if position:\n                now = datetime.utcnow()\n                position[\"fetched_at\"] = now.isoformat() + \"Z\"\n                with _iss_track_lock:\n                    _iss_track_history.append(position)\n                    _iss_last_fetch = now\n        except Exception as e:\n            logger.warning(f\"ISS collector error: {e}\")\n        threading.Event().wait(10)  # Sleep 10 seconds between fetches\n\n\ndef start_iss_collector():\n    \"\"\"Start the background ISS position collector if not already running.\"\"\"\n    global _iss_collector_started\n    if _iss_collector_started:\n        return\n    _iss_collector_started = True\n    t = threading.Thread(target=_iss_collector_loop, daemon=True)\n    t.start()\n\n\n@demo_stream_bp.route('/iss', methods=['GET'])\n@limiter.limit(ISS_RATE_LIMIT)\ndef get_iss():\n    \"\"\"\n    ISS position trajectory over time. Positions are collected automatically\n    in the background every 5 seconds.\n    \n    Query params:\n        - minutes: How many minutes of history to return (default: 1440, max: 1440)\n        - limit: Max number of points to return (default: 10000, max: 10000)\n    \n    The ISS completes one orbit in ~90 minutes, so 30 min shows ~1/3 of orbit.\n    \"\"\"\n    # Ensure the collector is running\n    start_iss_collector()\n    \n    minutes = min(1440, max(1, int(request.args.get('minutes', 1440))))\n    limit = min(10000, max(1000, int(request.args.get('limit', 10000))))\n    \n    now = datetime.utcnow()\n    cutoff = now - timedelta(minutes=minutes)\n    \n    with _iss_track_lock:\n        # Filter to requested time window and limit\n        rows = []\n        for pos in _iss_track_history:\n            try:\n                pos_time = datetime.fromisoformat(pos[\"timestamp\"].replace(\"Z\", \"+00:00\")).replace(tzinfo=None)\n                if pos_time >= cutoff:\n                    rows.append(pos)\n            except:\n                continue\n        \n        # Limit and sort by time\n        rows = sorted(rows, key=lambda x: x[\"timestamp\"])[-limit:]\n    \n    # If we have no data yet (just started), do a one-time fetch\n    if not rows:\n        position = _fetch_iss_position()\n        if position:\n            position[\"fetched_at\"] = now.isoformat() + \"Z\"\n            rows = [position]\n    \n    return make_csv_response(rows)\n\n\n@demo_stream_bp.route('/iss/reset', methods=['POST'])\ndef reset_iss():\n    \"\"\"Clear all accumulated ISS position history and start fresh.\"\"\"\n    with _iss_track_lock:\n        _iss_track_history.clear()\n    return jsonify({\"status\": \"ok\", \"message\": \"ISS position history cleared\"})\n\n\n# ============================================================================\n# USGS Earthquakes - Accumulating dataset of seismic events\n# Data naturally grows over time as new earthquakes occur\n# Recommended refresh: 60 seconds\n# ============================================================================\n\n@demo_stream_bp.route('/earthquakes', methods=['GET'])\n@limiter.limit(EARTHQUAKE_RATE_LIMIT)\ndef get_earthquakes():\n    \"\"\"\n    Earthquakes from USGS. Dataset grows as new quakes occur.\n    \n    Query params:\n        - timeframe: 'hour', 'day', 'week', 'month' (default: 'day')\n        - min_magnitude: Minimum magnitude filter (default: 0)\n        - max_magnitude: Maximum magnitude filter (optional)\n        - since: ISO date string - only return quakes after this time\n        - limit: Maximum number of results (default: 20000, max: 20000)\n        - use_query_api: 'true' to use query API for more data (default: 'false' for quick summary)\n    \n    Use case:\n        - Set timeframe='week' to see a week of earthquake data\n        - Each refresh may show new earthquakes that occurred\n        - Use min_magnitude to filter for significant quakes (e.g., 4.0+)\n        - Set use_query_api=true and limit=10000 to get large datasets\n    \n    Recommended refresh: 60 seconds\n    \"\"\"\n    timeframe = request.args.get('timeframe', 'day')\n    min_magnitude = float(request.args.get('min_magnitude', 0))\n    max_magnitude = request.args.get('max_magnitude')\n    since_str = request.args.get('since')\n    limit = min(20000, max(1, int(request.args.get('limit', 20000))))\n    use_query_api = request.args.get('use_query_api', 'false').lower() == 'true'\n    \n    fetched_at = datetime.utcnow().isoformat() + \"Z\"\n    rows = []\n    \n    # Parse 'since' filter if provided\n    since_timestamp = None\n    if since_str:\n        try:\n            since_dt = datetime.fromisoformat(since_str.replace(\"Z\", \"+00:00\")).replace(tzinfo=None)\n            since_timestamp = since_dt.timestamp() * 1000  # USGS uses milliseconds\n        except:\n            pass\n    \n    try:\n        if use_query_api or limit > 1000:\n            # Use USGS Query API for larger datasets\n            now = datetime.utcnow()\n            timeframe_deltas = {\n                \"hour\": timedelta(hours=1),\n                \"day\": timedelta(days=1),\n                \"week\": timedelta(weeks=1),\n                \"month\": timedelta(days=30)\n            }\n            start_time = now - timeframe_deltas.get(timeframe, timedelta(days=1))\n            \n            params = {\n                \"format\": \"geojson\",\n                \"starttime\": start_time.strftime(\"%Y-%m-%dT%H:%M:%S\"),\n                \"endtime\": now.strftime(\"%Y-%m-%dT%H:%M:%S\"),\n                \"minmagnitude\": min_magnitude,\n                \"limit\": limit,\n                \"orderby\": \"time\"  # Most recent first\n            }\n            \n            if max_magnitude:\n                params[\"maxmagnitude\"] = float(max_magnitude)\n            \n            url = \"https://earthquake.usgs.gov/fdsnws/event/1/query\"\n            response = requests.get(url, params=params, timeout=60)\n            response.raise_for_status()\n            data = response.json()\n        else:\n            # Use summary feeds for quick queries\n            feeds = {\"hour\": \"all_hour\", \"day\": \"all_day\", \"week\": \"all_week\", \"month\": \"all_month\"}\n            feed = feeds.get(timeframe, \"all_day\")\n            url = f\"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/{feed}.geojson\"\n            response = requests.get(url, timeout=30)\n            response.raise_for_status()\n            data = response.json()\n        \n        for feature in data.get(\"features\", []):\n            props = feature.get(\"properties\", {})\n            coords = feature.get(\"geometry\", {}).get(\"coordinates\", [0, 0, 0])\n            \n            # Filter by magnitude (additional client-side filter for summary feeds)\n            mag = props.get(\"mag\")\n            if mag is not None:\n                if mag < min_magnitude:\n                    continue\n                if max_magnitude and mag > float(max_magnitude):\n                    continue\n            \n            # Filter by 'since' time\n            quake_time = props.get(\"time\", 0)\n            if since_timestamp and quake_time <= since_timestamp:\n                continue\n            \n            rows.append({\n                \"id\": feature.get(\"id\"),\n                \"time\": datetime.utcfromtimestamp(quake_time / 1000).isoformat() + \"Z\",\n                \"latitude\": coords[1] if len(coords) > 1 else None,\n                \"longitude\": coords[0] if len(coords) > 0 else None,\n                \"depth_km\": coords[2] if len(coords) > 2 else None,\n                \"magnitude\": mag,\n                \"place\": props.get(\"place\"),\n                \"type\": props.get(\"type\", \"earthquake\"),\n                \"status\": props.get(\"status\"),\n                \"felt\": props.get(\"felt\"),  # Number of people who reported feeling it\n                \"cdi\": props.get(\"cdi\"),  # Maximum reported intensity\n                \"mmi\": props.get(\"mmi\"),  # Maximum estimated instrumental intensity\n                \"tsunami\": props.get(\"tsunami\", 0),  # Tsunami warning (0 or 1)\n                \"sig\": props.get(\"sig\"),  # Significance (0-1000)\n                \"net\": props.get(\"net\"),  # Network that reported the event\n                \"code\": props.get(\"code\"),  # Event code\n                \"url\": props.get(\"url\"),  # USGS detail page URL\n                \"fetched_at\": fetched_at\n            })\n            \n            # Limit results if using summary feed\n            if not use_query_api and len(rows) >= limit:\n                break\n        \n        # Sort by time, most recent first\n        rows.sort(key=lambda x: x[\"time\"], reverse=True)\n        \n        # Apply limit (in case summary feed returned more than requested)\n        if len(rows) > limit:\n            rows = rows[:limit]\n        \n        return make_csv_response(rows)\n    except Exception as e:\n        logger.warning(f\"Failed to fetch earthquakes: {e}\")\n        return Response(f\"error,{str(e)}\", mimetype='text/csv'), 500\n\n\n# ============================================================================\n# Current Weather (Open-Meteo) - Updates every 15 minutes\n# Recommended refresh: 300 seconds\n# ============================================================================\n\nWEATHER_CITIES = [\n    {\"name\": \"Seattle\", \"lat\": 47.6062, \"lon\": -122.3321, \"state\": \"WA\"},\n    {\"name\": \"New York\", \"lat\": 40.7128, \"lon\": -74.0060, \"state\": \"NY\"},\n    {\"name\": \"Los Angeles\", \"lat\": 34.0522, \"lon\": -118.2437, \"state\": \"CA\"},\n    {\"name\": \"Chicago\", \"lat\": 41.8781, \"lon\": -87.6298, \"state\": \"IL\"},\n    {\"name\": \"Miami\", \"lat\": 25.7617, \"lon\": -80.1918, \"state\": \"FL\"},\n    {\"name\": \"Denver\", \"lat\": 39.7392, \"lon\": -104.9903, \"state\": \"CO\"},\n    {\"name\": \"Boston\", \"lat\": 42.3601, \"lon\": -71.0589, \"state\": \"MA\"},\n    {\"name\": \"Phoenix\", \"lat\": 33.4484, \"lon\": -112.0740, \"state\": \"AZ\"},\n    {\"name\": \"Atlanta\", \"lat\": 33.7490, \"lon\": -84.3880, \"state\": \"GA\"},\n    {\"name\": \"Dallas\", \"lat\": 32.7767, \"lon\": -96.7970, \"state\": \"TX\"},\n    {\"name\": \"Houston\", \"lat\": 29.7604, \"lon\": -95.3698, \"state\": \"TX\"},\n    {\"name\": \"Portland\", \"lat\": 45.5152, \"lon\": -122.6784, \"state\": \"OR\"},\n    {\"name\": \"San Francisco\", \"lat\": 37.7749, \"lon\": -122.4194, \"state\": \"CA\"},\n    {\"name\": \"Las Vegas\", \"lat\": 36.1699, \"lon\": -115.1398, \"state\": \"NV\"},\n    {\"name\": \"Minneapolis\", \"lat\": 44.9778, \"lon\": -93.2650, \"state\": \"MN\"},\n    {\"name\": \"Detroit\", \"lat\": 42.3314, \"lon\": -83.0458, \"state\": \"MI\"},\n    {\"name\": \"Philadelphia\", \"lat\": 39.9526, \"lon\": -75.1652, \"state\": \"PA\"},\n    {\"name\": \"Washington\", \"lat\": 38.9072, \"lon\": -77.0369, \"state\": \"DC\"},\n    {\"name\": \"Nashville\", \"lat\": 36.1627, \"lon\": -86.7816, \"state\": \"TN\"},\n    {\"name\": \"New Orleans\", \"lat\": 29.9511, \"lon\": -90.0715, \"state\": \"LA\"},\n]\n\n@demo_stream_bp.route('/weather', methods=['GET'])\n@limiter.limit(WEATHER_RATE_LIMIT)\ndef get_weather():\n    \"\"\"\n    Current weather for major US cities. Updates every 15 minutes.\n    \n    Query params:\n        - cities: Comma-separated list of city names (default: all cities)\n                  Example: cities=Seattle,New York,Los Angeles\n        - fields: Comma-separated list of fields to include (default: all)\n                  Available: temperature,humidity,wind,precipitation,pressure,cloud_cover\n    \n    Recommended refresh: 300 seconds\n    \"\"\"\n    fetched_at = datetime.utcnow().isoformat() + \"Z\"\n    rows = []\n    \n    # Parse city filter\n    cities_param = request.args.get('cities', '').strip()\n    if cities_param:\n        city_names = [c.strip() for c in cities_param.split(',')]\n        cities_to_fetch = [c for c in WEATHER_CITIES if c[\"name\"] in city_names]\n        if not cities_to_fetch:\n            # If no matches, use all cities\n            cities_to_fetch = WEATHER_CITIES\n    else:\n        cities_to_fetch = WEATHER_CITIES\n    \n    # Parse fields filter\n    fields_param = request.args.get('fields', '').strip()\n    include_all = not fields_param\n    include_temp = include_all or 'temperature' in fields_param\n    include_humidity = include_all or 'humidity' in fields_param\n    include_wind = include_all or 'wind' in fields_param\n    include_precip = include_all or 'precipitation' in fields_param\n    include_pressure = include_all or 'pressure' in fields_param\n    include_cloud = include_all or 'cloud_cover' in fields_param\n    \n    for city in cities_to_fetch:\n        try:\n            # Build current weather parameters\n            current_fields = []\n            if include_temp:\n                current_fields.append(\"temperature_2m\")\n            if include_humidity:\n                current_fields.append(\"relative_humidity_2m\")\n            if include_wind:\n                current_fields.extend([\"wind_speed_10m\", \"wind_direction_10m\"])\n            if include_precip:\n                current_fields.append(\"precipitation\")\n            if include_pressure:\n                current_fields.append(\"surface_pressure\")\n            if include_cloud:\n                current_fields.append(\"cloud_cover\")\n            \n            if not current_fields:\n                current_fields = [\"temperature_2m\", \"relative_humidity_2m\", \"wind_speed_10m\", \"precipitation\"]\n            \n            params = {\n                \"latitude\": city[\"lat\"],\n                \"longitude\": city[\"lon\"],\n                \"current\": \",\".join(current_fields),\n                \"timezone\": \"auto\"\n            }\n            response = requests.get(\"https://api.open-meteo.com/v1/forecast\", params=params, timeout=10)\n            response.raise_for_status()\n            data = response.json()\n            current = data.get(\"current\", {})\n            \n            row = {\n                \"city\": city[\"name\"],\n                \"state\": city.get(\"state\", \"\"),\n                \"latitude\": city[\"lat\"],\n                \"longitude\": city[\"lon\"],\n                \"fetched_at\": fetched_at\n            }\n            \n            if include_temp:\n                row[\"temperature_c\"] = current.get(\"temperature_2m\")\n            if include_humidity:\n                row[\"humidity_percent\"] = current.get(\"relative_humidity_2m\")\n            if include_wind:\n                row[\"wind_speed_kmh\"] = current.get(\"wind_speed_10m\")\n                row[\"wind_direction_deg\"] = current.get(\"wind_direction_10m\")\n            if include_precip:\n                row[\"precipitation_mm\"] = current.get(\"precipitation\")\n            if include_pressure:\n                row[\"pressure_hpa\"] = current.get(\"surface_pressure\")\n            if include_cloud:\n                row[\"cloud_cover_percent\"] = current.get(\"cloud_cover\")\n            \n            rows.append(row)\n        except Exception as e:\n            logger.warning(f\"Failed to fetch weather for {city['name']}: {e}\")\n    \n    return make_csv_response(rows)\n\n\n# ============================================================================\n# Weather History (Open-Meteo) - Past days of hourly data\n# Dataset grows as new hours pass\n# ============================================================================\n\n@demo_stream_bp.route('/weather/history', methods=['GET'])\n@limiter.limit(WEATHER_RATE_LIMIT)\ndef get_weather_history():\n    \"\"\"\n    Hourly weather history for one or more locations. Dataset grows with each hour.\n    \n    Query params:\n        - city: City name (default: Seattle) - one of the WEATHER_CITIES\n                  Can also be comma-separated list: city=Seattle,New York,Los Angeles\n        - cities: Alternative parameter name for comma-separated list of city names\n        - days: Number of past days to include (default: 7, max: 92 for archive, 14 for forecast)\n        - use_archive: 'true' to use historical archive API (for data older than 5 days, default: 'auto')\n    \n    Use case:\n        - Track temperature/weather trends over the past week\n        - Each hour, a new row appears in the dataset\n        - Great for visualizing weather patterns\n        - Use days=30 with use_archive=true for month-long analysis\n        - Compare weather history across multiple cities\n    \n    Recommended refresh: 3600 seconds (hourly)\n    \"\"\"\n    # Support both 'city' and 'cities' parameters for backward compatibility\n    city_param = request.args.get('city', '').strip()\n    cities_param = request.args.get('cities', '').strip()\n    \n    # Use cities if provided, otherwise fall back to city\n    cities_input = cities_param if cities_param else city_param\n    \n    days = min(92, max(1, int(request.args.get('days', 7))))\n    use_archive_param = request.args.get('use_archive', 'auto').lower()\n    \n    # Parse city filter - support both single city and comma-separated list\n    if cities_input:\n        city_names = [c.strip() for c in cities_input.split(',')]\n        cities_to_fetch = [c for c in WEATHER_CITIES if c[\"name\"] in city_names]\n        if not cities_to_fetch:\n            # If no matches, default to Seattle\n            cities_to_fetch = [WEATHER_CITIES[0]]\n    else:\n        # Default to Seattle if no cities specified\n        cities_to_fetch = [WEATHER_CITIES[0]]\n    \n    fetched_at = datetime.utcnow().isoformat() + \"Z\"\n    rows = []\n    \n    end_date = datetime.utcnow()\n    start_date = end_date - timedelta(days=days)\n    \n    # Determine which API to use\n    # Archive API has 5-day delay, so use forecast API for recent data (< 6 days)\n    # unless explicitly requested\n    use_archive = False\n    if use_archive_param == 'true':\n        use_archive = True\n    elif use_archive_param == 'false':\n        use_archive = False\n    else:  # 'auto'\n        # Use archive for data older than 6 days\n        use_archive = days > 6\n    \n    # Weather code descriptions (WMO Weather interpretation codes)\n    weather_desc = {\n        0: \"Clear\", 1: \"Mainly Clear\", 2: \"Partly Cloudy\", 3: \"Overcast\",\n        45: \"Foggy\", 48: \"Depositing Rime Fog\",\n        51: \"Light Drizzle\", 53: \"Moderate Drizzle\", 55: \"Dense Drizzle\",\n        61: \"Slight Rain\", 63: \"Moderate Rain\", 65: \"Heavy Rain\",\n        71: \"Slight Snow\", 73: \"Moderate Snow\", 75: \"Heavy Snow\",\n        80: \"Slight Showers\", 81: \"Moderate Showers\", 82: \"Violent Showers\",\n        85: \"Slight Snow Showers\", 86: \"Heavy Snow Showers\",\n        95: \"Thunderstorm\", 96: \"Thunderstorm with Hail\", 99: \"Thunderstorm with Heavy Hail\"\n    }\n    \n    for city in cities_to_fetch:\n        try:\n            params = {\n                \"latitude\": city[\"lat\"],\n                \"longitude\": city[\"lon\"],\n                \"hourly\": \"temperature_2m,relative_humidity_2m,wind_speed_10m,precipitation,weather_code,pressure_msl\",\n                \"timezone\": \"auto\",\n                \"start_date\": start_date.strftime(\"%Y-%m-%d\"),\n                \"end_date\": end_date.strftime(\"%Y-%m-%d\")\n            }\n            \n            # Use archive API for historical data, forecast API for recent data\n            if use_archive:\n                api_url = \"https://api.open-meteo.com/v1/archive\"\n            else:\n                api_url = \"https://api.open-meteo.com/v1/forecast\"\n            \n            response = requests.get(api_url, params=params, timeout=30)\n            response.raise_for_status()\n            data = response.json()\n            \n            hourly = data.get(\"hourly\", {})\n            times = hourly.get(\"time\", [])\n            temps = hourly.get(\"temperature_2m\", [])\n            humidity = hourly.get(\"relative_humidity_2m\", [])\n            wind = hourly.get(\"wind_speed_10m\", [])\n            precip = hourly.get(\"precipitation\", [])\n            weather_codes = hourly.get(\"weather_code\", [])\n            pressure = hourly.get(\"pressure_msl\", [])\n            \n            for i, time_str in enumerate(times):\n                code = weather_codes[i] if i < len(weather_codes) else 0\n                # Parse timestamp - handle both formats\n                if \"T\" in time_str:\n                    timestamp_str = time_str\n                else:\n                    timestamp_str = time_str + \"T00:00:00Z\"\n                \n                rows.append({\n                    \"city\": city[\"name\"],\n                    \"state\": city.get(\"state\", \"\"),\n                    \"timestamp\": timestamp_str,\n                    \"temperature_c\": round(temps[i], 1) if i < len(temps) and temps[i] is not None else None,\n                    \"humidity_percent\": humidity[i] if i < len(humidity) and humidity[i] is not None else None,\n                    \"wind_speed_kmh\": round(wind[i], 1) if i < len(wind) and wind[i] is not None else None,\n                    \"precipitation_mm\": round(precip[i], 2) if i < len(precip) and precip[i] is not None else None,\n                    \"pressure_hpa\": round(pressure[i], 1) if i < len(pressure) and pressure[i] is not None else None,\n                    \"weather_code\": code,\n                    \"weather\": weather_desc.get(code, \"Unknown\"),\n                    \"fetched_at\": fetched_at\n                })\n        except Exception as e:\n            logger.warning(f\"Failed to fetch weather history for {city['name']}: {e}\")\n    \n    # Sort by city, then timestamp\n    rows.sort(key=lambda x: (x[\"city\"], x[\"timestamp\"]))\n    \n    return make_csv_response(rows)\n\n\n# ============================================================================\n# Weather Forecast (Open-Meteo) - Multi-day forecasts for multiple cities\n# Recommended refresh: 3600 seconds (1 hour)\n# ============================================================================\n\n@demo_stream_bp.route('/weather/forecast', methods=['GET'])\n@limiter.limit(WEATHER_RATE_LIMIT)\ndef get_weather_forecast():\n    \"\"\"\n    Multi-day weather forecast for US cities. Updates every few hours.\n    \n    Query params:\n        - cities: Comma-separated list of city names (default: all cities)\n                  Example: cities=Seattle,New York,Los Angeles\n        - days: Number of forecast days (default: 7, max: 16)\n        - hourly: 'true' to get hourly forecast data (default: 'false' for daily)\n    \n    Use case:\n        - Compare forecasts across multiple cities\n        - Track upcoming weather patterns\n        - Plan based on forecasted conditions\n        - Use hourly=true for detailed hourly forecasts\n    \n    Recommended refresh: 3600 seconds (1 hour)\n    \"\"\"\n    cities_param = request.args.get('cities', '').strip()\n    days = min(16, max(1, int(request.args.get('days', 7))))\n    hourly_mode = request.args.get('hourly', 'false').lower() == 'true'\n    \n    # Parse city filter\n    if cities_param:\n        city_names = [c.strip() for c in cities_param.split(',')]\n        cities_to_fetch = [c for c in WEATHER_CITIES if c[\"name\"] in city_names]\n        if not cities_to_fetch:\n            cities_to_fetch = WEATHER_CITIES\n    else:\n        cities_to_fetch = WEATHER_CITIES\n    \n    fetched_at = datetime.utcnow().isoformat() + \"Z\"\n    rows = []\n    \n    for city in cities_to_fetch:\n        try:\n            if hourly_mode:\n                # Hourly forecast\n                params = {\n                    \"latitude\": city[\"lat\"],\n                    \"longitude\": city[\"lon\"],\n                    \"hourly\": \"temperature_2m,relative_humidity_2m,wind_speed_10m,precipitation,weather_code,pressure_msl\",\n                    \"forecast_days\": days,\n                    \"timezone\": \"auto\"\n                }\n                response = requests.get(\"https://api.open-meteo.com/v1/forecast\", params=params, timeout=30)\n                response.raise_for_status()\n                data = response.json()\n                \n                hourly = data.get(\"hourly\", {})\n                times = hourly.get(\"time\", [])\n                temps = hourly.get(\"temperature_2m\", [])\n                humidity = hourly.get(\"relative_humidity_2m\", [])\n                wind = hourly.get(\"wind_speed_10m\", [])\n                precip = hourly.get(\"precipitation\", [])\n                weather_codes = hourly.get(\"weather_code\", [])\n                pressure = hourly.get(\"pressure_msl\", [])\n                \n                weather_desc = {\n                    0: \"Clear\", 1: \"Mainly Clear\", 2: \"Partly Cloudy\", 3: \"Overcast\",\n                    45: \"Foggy\", 48: \"Depositing Rime Fog\",\n                    51: \"Light Drizzle\", 53: \"Moderate Drizzle\", 55: \"Dense Drizzle\",\n                    61: \"Slight Rain\", 63: \"Moderate Rain\", 65: \"Heavy Rain\",\n                    71: \"Slight Snow\", 73: \"Moderate Snow\", 75: \"Heavy Snow\",\n                    80: \"Slight Showers\", 81: \"Moderate Showers\", 82: \"Violent Showers\",\n                    85: \"Slight Snow Showers\", 86: \"Heavy Snow Showers\",\n                    95: \"Thunderstorm\", 96: \"Thunderstorm with Hail\", 99: \"Thunderstorm with Heavy Hail\"\n                }\n                \n                for i, time_str in enumerate(times):\n                    code = weather_codes[i] if i < len(weather_codes) else 0\n                    rows.append({\n                        \"city\": city[\"name\"],\n                        \"state\": city.get(\"state\", \"\"),\n                        \"timestamp\": time_str,\n                        \"temperature_c\": round(temps[i], 1) if i < len(temps) and temps[i] is not None else None,\n                        \"humidity_percent\": humidity[i] if i < len(humidity) and humidity[i] is not None else None,\n                        \"wind_speed_kmh\": round(wind[i], 1) if i < len(wind) and wind[i] is not None else None,\n                        \"precipitation_mm\": round(precip[i], 2) if i < len(precip) and precip[i] is not None else None,\n                        \"pressure_hpa\": round(pressure[i], 1) if i < len(pressure) and pressure[i] is not None else None,\n                        \"weather_code\": code,\n                        \"weather\": weather_desc.get(code, \"Unknown\"),\n                        \"fetched_at\": fetched_at\n                    })\n            else:\n                # Daily forecast\n                params = {\n                    \"latitude\": city[\"lat\"],\n                    \"longitude\": city[\"lon\"],\n                    \"daily\": \"temperature_2m_max,temperature_2m_min,precipitation_sum,wind_speed_10m_max,weather_code\",\n                    \"forecast_days\": days,\n                    \"timezone\": \"auto\"\n                }\n                response = requests.get(\"https://api.open-meteo.com/v1/forecast\", params=params, timeout=30)\n                response.raise_for_status()\n                data = response.json()\n                \n                daily = data.get(\"daily\", {})\n                times = daily.get(\"time\", [])\n                temp_max = daily.get(\"temperature_2m_max\", [])\n                temp_min = daily.get(\"temperature_2m_min\", [])\n                precip = daily.get(\"precipitation_sum\", [])\n                wind = daily.get(\"wind_speed_10m_max\", [])\n                weather_codes = daily.get(\"weather_code\", [])\n                \n                weather_desc = {\n                    0: \"Clear\", 1: \"Mainly Clear\", 2: \"Partly Cloudy\", 3: \"Overcast\",\n                    45: \"Foggy\", 48: \"Depositing Rime Fog\",\n                    51: \"Light Drizzle\", 53: \"Moderate Drizzle\", 55: \"Dense Drizzle\",\n                    61: \"Slight Rain\", 63: \"Moderate Rain\", 65: \"Heavy Rain\",\n                    71: \"Slight Snow\", 73: \"Moderate Snow\", 75: \"Heavy Snow\",\n                    80: \"Slight Showers\", 81: \"Moderate Showers\", 82: \"Violent Showers\",\n                    85: \"Slight Snow Showers\", 86: \"Heavy Snow Showers\",\n                    95: \"Thunderstorm\", 96: \"Thunderstorm with Hail\", 99: \"Thunderstorm with Heavy Hail\"\n                }\n                \n                for i, time_str in enumerate(times):\n                    code = weather_codes[i] if i < len(weather_codes) else 0\n                    rows.append({\n                        \"city\": city[\"name\"],\n                        \"state\": city.get(\"state\", \"\"),\n                        \"date\": time_str,\n                        \"temperature_max_c\": round(temp_max[i], 1) if i < len(temp_max) and temp_max[i] is not None else None,\n                        \"temperature_min_c\": round(temp_min[i], 1) if i < len(temp_min) and temp_min[i] is not None else None,\n                        \"precipitation_mm\": round(precip[i], 2) if i < len(precip) and precip[i] is not None else None,\n                        \"wind_speed_max_kmh\": round(wind[i], 1) if i < len(wind) and wind[i] is not None else None,\n                        \"weather_code\": code,\n                        \"weather\": weather_desc.get(code, \"Unknown\"),\n                        \"fetched_at\": fetched_at\n                    })\n        except Exception as e:\n            logger.warning(f\"Failed to fetch forecast for {city['name']}: {e}\")\n    \n    return make_csv_response(rows)\n\n\n# ============================================================================\n# Today's Weather Comparison - Current weather across multiple cities\n# Recommended refresh: 300 seconds (5 minutes)\n# ============================================================================\n\n@demo_stream_bp.route('/weather/today', methods=['GET'])\n@limiter.limit(WEATHER_RATE_LIMIT)\ndef get_weather_today():\n    \"\"\"\n    Today's current weather for multiple US cities - perfect for comparison.\n    \n    Query params:\n        - cities: Comma-separated list of city names (default: all cities)\n                  Example: cities=Seattle,New York,Los Angeles,Miami\n        - limit: Maximum number of cities to return (default: 20, max: 50)\n    \n    Use case:\n        - Compare current weather conditions across US cities\n        - Visualize temperature, humidity, wind patterns geographically\n        - Great for maps, bar charts, and comparison visualizations\n        - Perfect for \"weather dashboard\" style analysis\n    \n    Recommended refresh: 300 seconds (5 minutes)\n    \"\"\"\n    cities_param = request.args.get('cities', '').strip()\n    limit = min(50, max(1, int(request.args.get('limit', 20))))\n    \n    # Parse city filter\n    if cities_param:\n        city_names = [c.strip() for c in cities_param.split(',')]\n        cities_to_fetch = [c for c in WEATHER_CITIES if c[\"name\"] in city_names][:limit]\n        if not cities_to_fetch:\n            cities_to_fetch = WEATHER_CITIES[:limit]\n    else:\n        cities_to_fetch = WEATHER_CITIES[:limit]\n    \n    fetched_at = datetime.utcnow().isoformat() + \"Z\"\n    rows = []\n    \n    for city in cities_to_fetch:\n        try:\n            params = {\n                \"latitude\": city[\"lat\"],\n                \"longitude\": city[\"lon\"],\n                \"current\": \"temperature_2m,relative_humidity_2m,wind_speed_10m,wind_direction_10m,precipitation,pressure_msl,cloud_cover,weather_code\",\n                \"timezone\": \"auto\"\n            }\n            response = requests.get(\"https://api.open-meteo.com/v1/forecast\", params=params, timeout=10)\n            response.raise_for_status()\n            data = response.json()\n            current = data.get(\"current\", {})\n            \n            weather_desc = {\n                0: \"Clear\", 1: \"Mainly Clear\", 2: \"Partly Cloudy\", 3: \"Overcast\",\n                45: \"Foggy\", 48: \"Depositing Rime Fog\",\n                51: \"Light Drizzle\", 53: \"Moderate Drizzle\", 55: \"Dense Drizzle\",\n                61: \"Slight Rain\", 63: \"Moderate Rain\", 65: \"Heavy Rain\",\n                71: \"Slight Snow\", 73: \"Moderate Snow\", 75: \"Heavy Snow\",\n                80: \"Slight Showers\", 81: \"Moderate Showers\", 82: \"Violent Showers\",\n                85: \"Slight Snow Showers\", 86: \"Heavy Snow Showers\",\n                95: \"Thunderstorm\", 96: \"Thunderstorm with Hail\", 99: \"Thunderstorm with Heavy Hail\"\n            }\n            \n            weather_code = current.get(\"weather_code\", 0)\n            \n            rows.append({\n                \"city\": city[\"name\"],\n                \"state\": city.get(\"state\", \"\"),\n                \"latitude\": city[\"lat\"],\n                \"longitude\": city[\"lon\"],\n                \"temperature_c\": round(current.get(\"temperature_2m\"), 1) if current.get(\"temperature_2m\") is not None else None,\n                \"temperature_f\": round(current.get(\"temperature_2m\") * 9/5 + 32, 1) if current.get(\"temperature_2m\") is not None else None,\n                \"humidity_percent\": current.get(\"relative_humidity_2m\"),\n                \"wind_speed_kmh\": round(current.get(\"wind_speed_10m\"), 1) if current.get(\"wind_speed_10m\") is not None else None,\n                \"wind_direction_deg\": current.get(\"wind_direction_10m\"),\n                \"precipitation_mm\": round(current.get(\"precipitation\"), 2) if current.get(\"precipitation\") is not None else None,\n                \"pressure_hpa\": round(current.get(\"pressure_msl\"), 1) if current.get(\"pressure_msl\") is not None else None,\n                \"cloud_cover_percent\": current.get(\"cloud_cover\"),\n                \"weather_code\": weather_code,\n                \"weather\": weather_desc.get(weather_code, \"Unknown\"),\n                \"fetched_at\": fetched_at\n            })\n        except Exception as e:\n            logger.warning(f\"Failed to fetch weather for {city['name']}: {e}\")\n    \n    return make_csv_response(rows)\n\n\n# ============================================================================\n# yfinance - Stock/Financial Data via Yahoo Finance\n# Three pre-baked APIs: history (daily), recent (intraday), financials (metrics)\n# ============================================================================\n\nDEFAULT_SYMBOLS = [\"AAPL\", \"MSFT\", \"GOOGL\", \"AMZN\", \"META\", \"NVDA\", \"TSLA\"]\n\n# S&P 100 Companies (as of 2024)\nSP100_SYMBOLS = [\n    # Technology\n    \"AAPL\", \"MSFT\", \"GOOGL\", \"GOOG\", \"META\", \"NVDA\", \"AVGO\", \"ORCL\", \"CRM\", \"CSCO\",\n    \"ACN\", \"ADBE\", \"AMD\", \"INTC\", \"IBM\", \"QCOM\", \"TXN\",\n    # Consumer/Retail\n    \"AMZN\", \"TSLA\", \"HD\", \"MCD\", \"NKE\", \"SBUX\", \"TGT\", \"LOW\", \"COST\",\n    # Financial Services\n    \"JPM\", \"V\", \"MA\", \"BAC\", \"WFC\", \"GS\", \"MS\", \"BLK\", \"SPGI\", \"AXP\", \"C\", \"BK\",\n    # Healthcare\n    \"UNH\", \"JNJ\", \"LLY\", \"PFE\", \"ABBV\", \"MRK\", \"TMO\", \"ABT\", \"DHR\", \"BMY\", \"AMGN\", \n    \"GILD\", \"MDT\", \"CVS\",\n    # Energy\n    \"XOM\", \"CVX\", \"COP\", \"SLB\",\n    # Industrials\n    \"CAT\", \"GE\", \"HON\", \"UNP\", \"UPS\", \"RTX\", \"BA\", \"LMT\", \"DE\", \"MMM\", \"EMR\",\n    # Consumer Staples\n    \"PG\", \"KO\", \"PEP\", \"WMT\", \"PM\", \"MO\", \"CL\", \"MDLZ\",\n    # Communications\n    \"DIS\", \"CMCSA\", \"NFLX\", \"T\", \"VZ\", \"TMUS\",\n    # Utilities & Real Estate\n    \"NEE\", \"DUK\", \"SO\",\n    # Materials\n    \"LIN\", \"DOW\",\n    # Other Major Companies\n    \"BRK-B\", \"PYPL\", \"NOW\", \"INTU\", \"AMAT\", \"ADI\", \"MU\", \"LRCX\", \"KLAC\",\n    \"SCHW\", \"CB\", \"PNC\", \"USB\", \"TFC\",\n    \"ISRG\", \"VRTX\", \"REGN\", \"ZTS\", \"SYK\", \"ELV\",\n    \"F\", \"GM\",\n    \"ADP\", \"FIS\", \"ITW\", \"GD\", \"NOC\",\n    \"EXC\", \"AEP\", \"D\", \"SRE\", \"PEG\"\n]\n\n\n# Helper functions for yfinance endpoints\ndef _yf_is_valid(val):\n    \"\"\"Check if value is valid (not NaN/None)\"\"\"\n    try:\n        return val is not None and not (isinstance(val, float) and math.isnan(val))\n    except:\n        return False\n\n\ndef _yf_format_timestamp(date_obj):\n    \"\"\"Convert pandas Timestamp or datetime to string\"\"\"\n    try:\n        if hasattr(date_obj, 'tz_convert'):\n            date_utc = date_obj.tz_convert('UTC')\n        elif hasattr(date_obj, 'tz_localize') and date_obj.tz is not None:\n            date_utc = date_obj.tz_convert('UTC')\n        else:\n            date_utc = date_obj\n        \n        if hasattr(date_utc, 'to_pydatetime'):\n            date_utc = date_utc.to_pydatetime()\n        elif hasattr(date_utc, 'timestamp'):\n            date_utc = datetime.fromtimestamp(date_utc.timestamp())\n        \n        if isinstance(date_utc, datetime):\n            return date_utc.strftime(\"%Y-%m-%d %H:%M:%S\")\n        else:\n            return str(date_utc)\n    except:\n        return str(date_obj)\n\n\n@demo_stream_bp.route('/yfinance/history', methods=['GET'])\n@limiter.limit(YFINANCE_RATE_LIMIT)\ndef get_yfinance_history():\n    \"\"\"\n    6-month daily stock price history via yfinance.\n    \n    Returns daily OHLCV data for the last 6 months.\n    \n    Query params:\n        - symbols: comma-separated stock symbols (default: AAPL,MSFT,GOOGL,AMZN,META,NVDA,TSLA)\n    \n    Example:\n        /api/demo-stream/yfinance/history?symbols=AAPL,MSFT,GOOGL\n    \n    Recommended refresh: 3600 seconds (1 hour)\n    \"\"\"\n    symbols_param = request.args.get('symbols', ','.join(DEFAULT_SYMBOLS))\n    symbols = [s.strip().upper() for s in symbols_param.split(',') if s.strip()][:10]\n    \n    now = datetime.utcnow()\n    start_date = now - timedelta(days=180)  # 6 months\n    \n    fetched_at = now.isoformat() + \"Z\"\n    rows = []\n    \n    for symbol in symbols:\n        try:\n            ticker = yf.Ticker(symbol)\n            hist = ticker.history(start=start_date.strftime(\"%Y-%m-%d\"), end=now.strftime(\"%Y-%m-%d\"))\n            \n            for date, row in hist.iterrows():\n                try:\n                    date_str = date.strftime(\"%Y-%m-%d\") if hasattr(date, 'strftime') else str(date)\n                except:\n                    date_str = str(date)\n                \n                rows.append({\n                    \"symbol\": symbol,\n                    \"date\": date_str,\n                    \"open\": round(row[\"Open\"], 2) if _yf_is_valid(row[\"Open\"]) else None,\n                    \"high\": round(row[\"High\"], 2) if _yf_is_valid(row[\"High\"]) else None,\n                    \"low\": round(row[\"Low\"], 2) if _yf_is_valid(row[\"Low\"]) else None,\n                    \"close\": round(row[\"Close\"], 2) if _yf_is_valid(row[\"Close\"]) else None,\n                    \"volume\": int(row[\"Volume\"]) if _yf_is_valid(row[\"Volume\"]) else None,\n                    \"fetched_at\": fetched_at\n                })\n                    \n        except Exception as e:\n            logger.warning(f\"Failed to fetch history for {symbol}: {e}\")\n    \n    # Sort by symbol, then date\n    rows.sort(key=lambda x: (x[\"symbol\"], x[\"date\"]))\n    \n    return make_csv_response(rows)\n\n\n@demo_stream_bp.route('/yfinance/recent', methods=['GET'])\n@limiter.limit(YFINANCE_RATE_LIMIT)\ndef get_yfinance_recent():\n    \"\"\"\n    Recent intraday stock prices (15-minute intervals) via yfinance.\n    \n    Returns 15-minute interval data for the last 5 trading days.\n    yfinance typically provides intraday data for the last 5-7 days only.\n    \n    Query params:\n        - symbols: comma-separated stock symbols (default: AAPL,MSFT,GOOGL,AMZN,META,NVDA,TSLA)\n    \n    Example:\n        /api/demo-stream/yfinance/recent?symbols=AAPL,MSFT,GOOGL\n    \n    Recommended refresh: 300 seconds (5 minutes) during market hours\n    \"\"\"\n    symbols_param = request.args.get('symbols', ','.join(DEFAULT_SYMBOLS))\n    symbols = [s.strip().upper() for s in symbols_param.split(',') if s.strip()][:10]\n    \n    now = datetime.utcnow()\n    fetched_at = now.isoformat() + \"Z\"\n    rows = []\n    \n    for symbol in symbols:\n        try:\n            ticker = yf.Ticker(symbol)\n            \n            # Get 5 days of 15-minute interval data\n            hist = ticker.history(interval='15m', period='5d')\n            \n            if not hist.empty:\n                for date, row in hist.iterrows():\n                    timestamp_str = _yf_format_timestamp(date)\n                    \n                    rows.append({\n                        \"symbol\": symbol,\n                        \"timestamp\": timestamp_str,\n                        \"date\": timestamp_str.split()[0] if ' ' in timestamp_str else str(date),\n                        \"open\": round(row[\"Open\"], 2) if _yf_is_valid(row[\"Open\"]) else None,\n                        \"high\": round(row[\"High\"], 2) if _yf_is_valid(row[\"High\"]) else None,\n                        \"low\": round(row[\"Low\"], 2) if _yf_is_valid(row[\"Low\"]) else None,\n                        \"close\": round(row[\"Close\"], 2) if _yf_is_valid(row[\"Close\"]) else None,\n                        \"volume\": int(row[\"Volume\"]) if _yf_is_valid(row[\"Volume\"]) else None,\n                        \"fetched_at\": fetched_at\n                    })\n                    \n        except Exception as e:\n            logger.warning(f\"Failed to fetch recent data for {symbol}: {e}\")\n    \n    # Sort by symbol, then timestamp\n    rows.sort(key=lambda x: (x[\"symbol\"], x[\"timestamp\"]))\n    \n    return make_csv_response(rows)\n\n\n@demo_stream_bp.route('/yfinance/financials', methods=['GET'])\n@limiter.limit(YFINANCE_RATE_LIMIT)\ndef get_yfinance_financials():\n    \"\"\"\n    Key financial metrics snapshot via yfinance for S&P 100 companies.\n    \n    Returns current financial data for each stock including market cap,\n    P/E ratio, EPS, dividend yield, 52-week range, and more.\n    \n    Query params:\n        - symbols: comma-separated stock symbols (default: all S&P 100 companies)\n    \n    Example:\n        /api/demo-stream/yfinance/financials\n        /api/demo-stream/yfinance/financials?symbols=AAPL,MSFT,GOOGL,AMZN\n    \n    Recommended refresh: 3600 seconds (1 hour)\n    \"\"\"\n    symbols_param = request.args.get('symbols')\n    if symbols_param:\n        symbols = [s.strip().upper() for s in symbols_param.split(',') if s.strip()]\n    else:\n        symbols = SP100_SYMBOLS\n    \n    now = datetime.utcnow()\n    fetched_at = now.isoformat() + \"Z\"\n    rows = []\n    \n    for symbol in symbols:\n        try:\n            ticker = yf.Ticker(symbol)\n            info = ticker.info\n            \n            # Extract key financial metrics\n            rows.append({\n                \"symbol\": symbol,\n                \"name\": info.get('shortName') or info.get('longName') or symbol,\n                \"sector\": info.get('sector') or 'N/A',\n                \"industry\": info.get('industry') or 'N/A',\n                \"current_price\": round(info.get('currentPrice') or info.get('regularMarketPrice') or 0, 2),\n                \"previous_close\": round(info.get('previousClose') or 0, 2),\n                \"market_cap\": info.get('marketCap') or 0,\n                \"pe_ratio\": round(info.get('trailingPE') or 0, 2) if info.get('trailingPE') else None,\n                \"forward_pe\": round(info.get('forwardPE') or 0, 2) if info.get('forwardPE') else None,\n                \"eps\": round(info.get('trailingEps') or 0, 2) if info.get('trailingEps') else None,\n                \"dividend_yield\": round((info.get('dividendYield') or 0) * 100, 2) if info.get('dividendYield') else 0,\n                \"week_52_high\": round(info.get('fiftyTwoWeekHigh') or 0, 2),\n                \"week_52_low\": round(info.get('fiftyTwoWeekLow') or 0, 2),\n                \"avg_volume\": info.get('averageVolume') or 0,\n                \"beta\": round(info.get('beta') or 0, 2) if info.get('beta') else None,\n                \"profit_margin\": round((info.get('profitMargins') or 0) * 100, 2) if info.get('profitMargins') else None,\n                \"revenue\": info.get('totalRevenue') or 0,\n                \"fetched_at\": fetched_at\n            })\n                    \n        except Exception as e:\n            logger.warning(f\"Failed to fetch financials for {symbol}: {e}\")\n    \n    # Sort by symbol\n    rows.sort(key=lambda x: x[\"symbol\"])\n    \n    return make_csv_response(rows)\n\n\n# ============================================================================\n# Mock Live Sales Feed - Accumulating dataset with rolling 1000 records\n# Similar to ISS tracking - data accumulates in memory\n# Recommended refresh: 1-5 seconds\n# ============================================================================\n\n# Thread-safe storage for sales transaction history\n_sales_lock = threading.Lock()\n_sales_history: deque = deque(maxlen=1000)  # Keep last 1000 transactions\n_sales_last_update: datetime | None = None\n\n# Products with realistic pricing and popularity\n_SALES_PRODUCTS = [\n    {\"name\": \"Wireless Headphones\", \"category\": \"Electronics\", \"base_price\": 79.99, \"popularity\": 0.15},\n    {\"name\": \"Smart Watch\", \"category\": \"Electronics\", \"base_price\": 199.99, \"popularity\": 0.10},\n    {\"name\": \"Running Shoes\", \"category\": \"Sports\", \"base_price\": 129.99, \"popularity\": 0.12},\n    {\"name\": \"Yoga Mat\", \"category\": \"Sports\", \"base_price\": 34.99, \"popularity\": 0.08},\n    {\"name\": \"Coffee Maker\", \"category\": \"Home\", \"base_price\": 89.99, \"popularity\": 0.09},\n    {\"name\": \"Desk Lamp\", \"category\": \"Home\", \"base_price\": 45.99, \"popularity\": 0.07},\n    {\"name\": \"Backpack\", \"category\": \"Accessories\", \"base_price\": 59.99, \"popularity\": 0.11},\n    {\"name\": \"Water Bottle\", \"category\": \"Accessories\", \"base_price\": 24.99, \"popularity\": 0.13},\n    {\"name\": \"Bluetooth Speaker\", \"category\": \"Electronics\", \"base_price\": 49.99, \"popularity\": 0.08},\n    {\"name\": \"Fitness Tracker\", \"category\": \"Electronics\", \"base_price\": 69.99, \"popularity\": 0.07},\n]\n\n_SALES_REGIONS = [\"North America\", \"Europe\", \"Asia Pacific\", \"Latin America\"]\n_SALES_REGION_WEIGHTS = [0.45, 0.30, 0.18, 0.07]\n\n_SALES_CHANNELS = [\"Web\", \"Mobile App\", \"In-Store\", \"Partner\"]\n_SALES_CHANNEL_WEIGHTS = [0.40, 0.35, 0.15, 0.10]\n\n\ndef _generate_sale_transaction(timestamp: datetime) -> dict[str, Any]:\n    \"\"\"Generate a single sale transaction\"\"\"\n    product = random.choices(_SALES_PRODUCTS, weights=[p[\"popularity\"] for p in _SALES_PRODUCTS])[0]\n    region = random.choices(_SALES_REGIONS, weights=_SALES_REGION_WEIGHTS)[0]\n    channel = random.choices(_SALES_CHANNELS, weights=_SALES_CHANNEL_WEIGHTS)[0]\n    \n    quantity = random.choices([1, 2, 3, 4, 5], weights=[0.5, 0.25, 0.15, 0.07, 0.03])[0]\n    discount = random.choices([0, 5, 10, 15, 20], weights=[0.6, 0.15, 0.12, 0.08, 0.05])[0]\n    \n    unit_price = round(product[\"base_price\"] * (1 - discount / 100), 2)\n    total = round(unit_price * quantity, 2)\n    \n    return {\n        \"transaction_id\": f\"TX{int(timestamp.timestamp() * 1000) % 100000000:08d}\",\n        \"timestamp\": timestamp.isoformat() + \"Z\",\n        \"product\": product[\"name\"],\n        \"category\": product[\"category\"],\n        \"quantity\": quantity,\n        \"unit_price\": unit_price,\n        \"discount_pct\": discount,\n        \"total\": total,\n        \"region\": region,\n        \"channel\": channel,\n    }\n\n\n@demo_stream_bp.route('/live-sales', methods=['GET'])\n@limiter.limit(MOCK_RATE_LIMIT)\ndef get_live_sales():\n    \"\"\"\n    Simulated live sales feed with accumulating transaction history.\n    Data accumulates in memory and maintains a rolling record of the last 1000 transactions.\n    Each refresh may add new transactions and returns the complete accumulated dataset.\n    \n    Query params:\n        - limit: Maximum number of records to return (default: 1000, max: 1000)\n    \n    Recommended refresh: 1-5 seconds\n    \"\"\"\n    global _sales_last_update\n    \n    now = datetime.utcnow()\n    limit = min(1000, max(1, int(request.args.get('limit', 1000))))\n    \n    # Generate new transactions if enough time has passed (at least 1 second)\n    with _sales_lock:\n        should_update = _sales_last_update is None or (now - _sales_last_update).total_seconds() >= 1\n        \n        if should_update:\n            # If no data exists yet, generate initial batch of transactions\n            if len(_sales_history) == 0:\n                # Generate 5-10 initial transactions\n                num_initial = random.randint(5, 10)\n                for _ in range(num_initial):\n                    tx_time = now - timedelta(seconds=random.randint(0, 60))\n                    transaction = _generate_sale_transaction(tx_time)\n                    transaction[\"fetched_at\"] = now.isoformat() + \"Z\"\n                    _sales_history.append(transaction)\n            else:\n                # Generate 1-3 new transactions per update\n                num_new_transactions = random.randint(1, 3)\n                for _ in range(num_new_transactions):\n                    # Spread transactions over the last second\n                    tx_time = now - timedelta(milliseconds=random.randint(0, 1000))\n                    transaction = _generate_sale_transaction(tx_time)\n                    transaction[\"fetched_at\"] = now.isoformat() + \"Z\"\n                    _sales_history.append(transaction)\n            \n            _sales_last_update = now\n        \n        # Return all accumulated records (up to limit)\n        rows = list(_sales_history)[-limit:]\n    \n    # Sort by timestamp descending (most recent first)\n    rows.sort(key=lambda x: x[\"timestamp\"], reverse=True)\n    \n    return make_csv_response(rows)\n\n\n# ============================================================================\n# API Info Endpoint\n# ============================================================================\n\n@demo_stream_bp.route('/info', methods=['GET'])\ndef get_info():\n    \"\"\"List all available demo data endpoints with their parameters\"\"\"\n    return jsonify({\n        \"name\": \"Demo Data REST APIs\",\n        \"description\": \"Each endpoint returns CSV text with complete datasets that change over time. \"\n                       \"Import URL in frontend, set auto-refresh to watch data evolve.\",\n        \"design_philosophy\": [\n            \"Each endpoint returns a COMPLETE dataset (not just one row)\",\n            \"Datasets are meaningful for analysis and visualization\", \n            \"When refreshed, new data may appear (accumulating) or values may update\",\n            \"Use date parameters to track data from a specific point in time\"\n        ],\n        \"demo_examples\": [\n            # Stock Market Data - History, Intraday, and Financials\n            {\n                \"id\": \"stocks-history\",\n                \"url\": \"/api/demo-stream/yfinance/history?symbols=AAPL,MSFT,GOOGL,AMZN,META,NVDA\",\n                \"name\": \"📈 Yahoo Finance: 6-Month Stock Price History - Tech Companies (updates daily)\",\n                \"refresh_seconds\": 86400,\n            },\n            {\n                \"id\": \"stocks-intraday\",\n                \"url\": \"/api/demo-stream/yfinance/recent?symbols=AAPL,MSFT,GOOGL,AMZN,META,NVDA,TSLA\",\n                \"name\": \"📈 Yahoo Finance: Recent Intraday Stock Prices - Tech Companies (updates every 15 min)\",\n                \"refresh_seconds\": 900,\n            },\n            {\n                \"id\": \"stocks-financials\",\n                \"url\": \"/api/demo-stream/yfinance/financials\",\n                \"name\": \"📈 Yahoo Finance: S&P 100 Key Financial Metrics (updates daily)\",\n                \"refresh_seconds\": 86400,\n            },\n            # ISS Tracking Variations\n            {\n                \"id\": \"iss-trajectory-recent\",\n                \"url\": \"/api/demo-stream/iss\",\n                \"name\": \"🛰️ Open Notify: International Space Station Real-time Positions (updates every 30 sec)\",\n                \"refresh_seconds\": 30,\n                \"reset_url\": \"/api/demo-stream/iss/reset\",\n            },\n            \n            # Earthquake Data Variations\n            {\n                \"id\": \"earthquakes-significant-week\",\n                \"url\": \"/api/demo-stream/earthquakes?timeframe=week&min_magnitude=4\",\n                \"name\": \"🌍 USGS: Significant Earthquakes Worldwide - Last Week (updates every minute)\",\n                \"refresh_seconds\": 60,\n            },\n\n            # Weather Data Variations\n            {\n                \"id\": \"weather-today-all-cities\",\n                \"url\": \"/api/demo-stream/weather/today\",\n                \"name\": \"🌤️ Open Meteo: Today's Weather - 20 Major US Cities (updates daily)\",\n                \"refresh_seconds\": 86400,\n            },\n            {\n                \"id\": \"weather-forecast-hourly\",\n                \"url\": \"/api/demo-stream/weather/forecast?days=3&hourly=true\",\n                \"name\": \"🌤️ Open Meteo: 3-Day Hourly Weather Forecast - US Cities (updates hourly)\",\n                \"refresh_seconds\": 3600,\n            },\n            \n            # Live Sales & E-commerce Variations\n            {\n                \"id\": \"live-sales-feed\",\n                \"url\": \"/api/demo-stream/live-sales\",\n                \"name\": \"💰 Simulated: Live E-commerce Sales Feed (updates every 5 seconds)\",\n                \"refresh_seconds\": 5,\n            }\n        ],\n        \"usage\": \"Click any example to load it, or enter a custom URL. Set auto-refresh to watch data change over time.\"\n    })\n"
  },
  {
    "path": "py-src/data_formulator/example_datasets_config.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nSample datasets configuration for Data Formulator.\n\"\"\"\n\nEXAMPLE_DATASETS = [\n    {\n        'source': 'vegadatasets',\n        'name': 'Gapminder',\n        'description': 'A simplified dataset of global development indicators tracking population, and life expectancy across countries over time.',\n        'tables': [\n            {\n                \"format\": 'json',\n                \"url\": 'https://raw.githubusercontent.com/vega/vega-datasets/refs/heads/main/data/gapminder.json',\n                \"sample\": [{\"year\": 1955, \"country\": \"Afghanistan\", \"cluster\": 0, \"pop\": 7971931, \"life_expect\": 43.88, \"fertility\": 7.42}, {\"year\": 1960, \"country\": \"Afghanistan\", \"cluster\": 0, \"pop\": 8622466, \"life_expect\": 45.03, \"fertility\": 7.38}, {\"year\": 1965, \"country\": \"Afghanistan\", \"cluster\": 0, \"pop\": 9565147, \"life_expect\": 46.13, \"fertility\": 7.35}, {\"year\": 1970, \"country\": \"Afghanistan\", \"cluster\": 0, \"pop\": 10752971, \"life_expect\": 47.08, \"fertility\": 7.4}, {\"year\": 1975, \"country\": \"Afghanistan\", \"cluster\": 0, \"pop\": 12157386, \"life_expect\": 47.55, \"fertility\": 7.54}, {\"year\": 1980, \"country\": \"Afghanistan\", \"cluster\": 0, \"pop\": 12486631, \"life_expect\": 43.68, \"fertility\": 7.59}, {\"year\": 1985, \"country\": \"Afghanistan\", \"cluster\": 0, \"pop\": 10512221, \"life_expect\": 42.03, \"fertility\": 7.52}, {\"year\": 1990, \"country\": \"Afghanistan\", \"cluster\": 0, \"pop\": 10694796, \"life_expect\": 53.83, \"fertility\": 7.57}, {\"year\": 1995, \"country\": \"Afghanistan\", \"cluster\": 0, \"pop\": 16418912, \"life_expect\": 54.33, \"fertility\": 7.71}, {\"year\": 2000, \"country\": \"Afghanistan\", \"cluster\": 0, \"pop\": 19542982, \"life_expect\": 54.73, \"fertility\": 7.53}, {\"year\": 2005, \"country\": \"Afghanistan\", \"cluster\": 0, \"pop\": 24411191, \"life_expect\": 57.63, \"fertility\": 6.91}, {\"year\": 1955, \"country\": \"Argentina\", \"cluster\": 3, \"pop\": 18700686, \"life_expect\": 64.51, \"fertility\": 3.14}, {\"year\": 1960, \"country\": \"Argentina\", \"cluster\": 3, \"pop\": 20349744, \"life_expect\": 65.26, \"fertility\": 3.08}, {\"year\": 1965, \"country\": \"Argentina\", \"cluster\": 3, \"pop\": 22053661, \"life_expect\": 66.13, \"fertility\": 3.06}, {\"year\": 1970, \"country\": \"Argentina\", \"cluster\": 3, \"pop\": 23842803, \"life_expect\": 66.13, \"fertility\": 3.09}, {\"year\": 1975, \"country\": \"Argentina\", \"cluster\": 3, \"pop\": 25875558, \"life_expect\": 68.03, \"fertility\": 3.3}, {\"year\": 1980, \"country\": \"Argentina\", \"cluster\": 3, \"pop\": 28024803, \"life_expect\": 70.23, \"fertility\": 3.3}, {\"year\": 1985, \"country\": \"Argentina\", \"cluster\": 3, \"pop\": 30287112, \"life_expect\": 71.73, \"fertility\": 3.1}, {\"year\": 1990, \"country\": \"Argentina\", \"cluster\": 3, \"pop\": 32637657, \"life_expect\": 72.47, \"fertility\": 3.03}, {\"year\": 1995, \"country\": \"Argentina\", \"cluster\": 3, \"pop\": 34946110, \"life_expect\": 73.44, \"fertility\": 2.86}, {\"year\": 2000, \"country\": \"Argentina\", \"cluster\": 3, \"pop\": 37070774, \"life_expect\": 74.22, \"fertility\": 2.59}]\n            }\n        ]\n    },\n    {\n        'source': 'vegadatasets',\n        'name': 'US Income',\n        'description': 'US income distribution data showing how household incomes are spread across different brackets and states.',\n        'tables': [\n            {\n                \"format\": 'json',\n                \"url\": 'https://raw.githubusercontent.com/vega/vega-datasets/refs/heads/main/data/income.json',\n                \"sample\": [{\"name\":\"Alabama\",\"region\":\"south\",\"id\":1,\"pct\":0.102,\"total\":1837292,\"group\":\"<10000\"},{\"name\":\"Alabama\",\"region\":\"south\",\"id\":1,\"pct\":0.072,\"total\":1837292,\"group\":\"10000 to 14999\"},{\"name\":\"Alabama\",\"region\":\"south\",\"id\":1,\"pct\":0.13,\"total\":1837292,\"group\":\"15000 to 24999\"},{\"name\":\"Alabama\",\"region\":\"south\",\"id\":1,\"pct\":0.115,\"total\":1837292,\"group\":\"25000 to 34999\"},{\"name\":\"Alabama\",\"region\":\"south\",\"id\":1,\"pct\":0.143,\"total\":1837292,\"group\":\"35000 to 49999\"},{\"name\":\"Alabama\",\"region\":\"south\",\"id\":1,\"pct\":0.108,\"total\":1837292,\"group\":\"75000 to 99999\"}]\n            }\n        ]\n    },\n    {\n        'source': 'vegadatasets',\n        'name': 'Disasters',\n        'description': 'Historical records of natural disasters worldwide, including fatalities, types, and locations.',\n        'tables': [\n            {\n                \"format\": 'csv',\n                \"url\": 'https://raw.githubusercontent.com/vega/vega-datasets/refs/heads/main/data/disasters.csv',\n                \"sample\": '''Entity,Year,Deaths\nAll natural disasters,1900,1267360\nAll natural disasters,1901,200018\nAll natural disasters,1902,46037\nAll natural disasters,1903,6506\nAll natural disasters,1905,22758\nAll natural disasters,1906,42970\nAll natural disasters,1907,1325641\nAll natural disasters,1908,75033\nAll natural disasters,1909,1511524\nAll natural disasters,1910,148233\nAll natural disasters,1911,102408\nAll natural disasters,1912,52093\nAll natural disasters,1913,882\nAll natural disasters,1914,289'''\n            }\n        ]\n    },\n    {\n        'source': 'vegadatasets',\n        'name': 'Movies',\n        'description': 'Box office performance, budgets, and ratings for films across different genres and time periods.',\n        'tables': [\n            {\n                \"format\": 'json',\n                \"url\": 'https://raw.githubusercontent.com/vega/vega-datasets/refs/heads/main/data/movies.json',\n                \"sample\": [\n    {\"Title\": \"The Land Girls\", \"US Gross\": 146083, \"Worldwide Gross\": 146083, \"US DVD Sales\": None, \"Production Budget\": 8000000, \"Release Date\": \"Jun 12 1998\", \"MPAA Rating\": \"R\", \"Running Time min\": None, \"Distributor\": \"Gramercy\", \"Source\": None, \"Major Genre\": None, \"Creative Type\": None, \"Director\": None, \"Rotten Tomatoes Rating\": None, \"IMDB Rating\": 6.1, \"IMDB Votes\": 1071},\n    {\"Title\": \"First Love, Last Rites\", \"US Gross\": 10876, \"Worldwide Gross\": 10876, \"US DVD Sales\": None, \"Production Budget\": 300000, \"Release Date\": \"Aug 07 1998\", \"MPAA Rating\": \"R\", \"Running Time min\": None, \"Distributor\": \"Strand\", \"Source\": None, \"Major Genre\": \"Drama\", \"Creative Type\": None, \"Director\": None, \"Rotten Tomatoes Rating\": None, \"IMDB Rating\": 6.9, \"IMDB Votes\": 207},\n    {\"Title\": \"I Married a Strange Person\", \"US Gross\": 203134, \"Worldwide Gross\": 203134, \"US DVD Sales\": None, \"Production Budget\": 250000, \"Release Date\": \"Aug 28 1998\", \"MPAA Rating\": None, \"Running Time min\": None, \"Distributor\": \"Lionsgate\", \"Source\": None, \"Major Genre\": \"Comedy\", \"Creative Type\": None, \"Director\": None, \"Rotten Tomatoes Rating\": None, \"IMDB Rating\": 6.8, \"IMDB Votes\": 865},\n    {\"Title\": \"Let's Talk About Sex\", \"US Gross\": 373615, \"Worldwide Gross\": 373615, \"US DVD Sales\": None, \"Production Budget\": 300000, \"Release Date\": \"Sep 11 1998\", \"MPAA Rating\": None, \"Running Time min\": None, \"Distributor\": \"Fine Line\", \"Source\": None, \"Major Genre\": \"Comedy\", \"Creative Type\": None, \"Director\": None, \"Rotten Tomatoes Rating\": 13, \"IMDB Rating\": None, \"IMDB Votes\": None},\n    {\"Title\": \"Slam\", \"US Gross\": 1009819, \"Worldwide Gross\": 1087521, \"US DVD Sales\": None, \"Production Budget\": 1000000, \"Release Date\": \"Oct 09 1998\", \"MPAA Rating\": \"R\", \"Running Time min\": None, \"Distributor\": \"Trimark\", \"Source\": \"Original Screenplay\", \"Major Genre\": \"Drama\", \"Creative Type\": \"Contemporary Fiction\", \"Director\": None, \"Rotten Tomatoes Rating\": 62, \"IMDB Rating\": 3.4, \"IMDB Votes\": 165},\n    {\"Title\": \"Mississippi Mermaid\", \"US Gross\": 24551, \"Worldwide Gross\": 2624551, \"US DVD Sales\": None, \"Production Budget\": 1600000, \"Release Date\": \"Jan 15 1999\", \"MPAA Rating\": None, \"Running Time min\": None, \"Distributor\": \"MGM\", \"Source\": None, \"Major Genre\": None, \"Creative Type\": None, \"Director\": None, \"Rotten Tomatoes Rating\": None, \"IMDB Rating\": None, \"IMDB Votes\": None},\n    {\"Title\": \"Following\", \"US Gross\": 44705, \"Worldwide Gross\": 44705, \"US DVD Sales\": None, \"Production Budget\": 6000, \"Release Date\": \"Apr 04 1999\", \"MPAA Rating\": \"R\", \"Running Time min\": None, \"Distributor\": \"Zeitgeist\", \"Source\": None, \"Major Genre\": None, \"Creative Type\": None, \"Director\": \"Christopher Nolan\", \"Rotten Tomatoes Rating\": None, \"IMDB Rating\": 7.7, \"IMDB Votes\": 15133},\n    {\"Title\": \"Foolish\", \"US Gross\": 6026908, \"Worldwide Gross\": 6026908, \"US DVD Sales\": None, \"Production Budget\": 1600000, \"Release Date\": \"Apr 09 1999\", \"MPAA Rating\": \"R\", \"Running Time min\": None, \"Distributor\": \"Artisan\", \"Source\": \"Original Screenplay\", \"Major Genre\": \"Comedy\", \"Creative Type\": \"Contemporary Fiction\", \"Director\": None, \"Rotten Tomatoes Rating\": None, \"IMDB Rating\": 3.8, \"IMDB Votes\": 353},\n    {\"Title\": \"Pirates\", \"US Gross\": 1641825, \"Worldwide Gross\": 6341825, \"US DVD Sales\": None, \"Production Budget\": 40000000, \"Release Date\": \"Jul 01 1986\", \"MPAA Rating\": \"R\", \"Running Time min\": None, \"Distributor\": None, \"Source\": None, \"Major Genre\": None, \"Creative Type\": None, \"Director\": \"Roman Polanski\", \"Rotten Tomatoes Rating\": 25, \"IMDB Rating\": 5.8, \"IMDB Votes\": 3275},\n    {\"Title\": \"Duel in the Sun\", \"US Gross\": 20400000, \"Worldwide Gross\": 20400000, \"US DVD Sales\": None, \"Production Budget\": 6000000, \"Release Date\": \"Dec 31 2046\", \"MPAA Rating\": None, \"Running Time min\": None, \"Distributor\": None, \"Source\": None, \"Major Genre\": None, \"Creative Type\": None, \"Director\": None, \"Rotten Tomatoes Rating\": 86, \"IMDB Rating\": 7, \"IMDB Votes\": 2906},\n    {\"Title\": \"Tom Jones\", \"US Gross\": 37600000, \"Worldwide Gross\": 37600000, \"US DVD Sales\": None, \"Production Budget\": 1000000, \"Release Date\": \"Oct 07 1963\", \"MPAA Rating\": None, \"Running Time min\": None, \"Distributor\": None, \"Source\": None, \"Major Genre\": None, \"Creative Type\": None, \"Director\": None, \"Rotten Tomatoes Rating\": 81, \"IMDB Rating\": 7, \"IMDB Votes\": 4035}\n]\n            }\n        ]\n    },\n    {\n        'source': 'vegadatasets',\n        'name': 'Unemployment',\n        'description': 'Unemployment rates across different economic sectors and industries over time.',\n        'tables': [\n            {\n                \"format\": 'json',\n                \"url\": 'https://raw.githubusercontent.com/vega/vega-datasets/refs/heads/main/data/unemployment-across-industries.json',\n                \"sample\": [{\"series\":\"Government\",\"year\":2000,\"month\":1,\"count\":430,\"rate\":2.1,\"date\":\"2000-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":2,\"count\":409,\"rate\":2,\"date\":\"2000-02-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":3,\"count\":311,\"rate\":1.5,\"date\":\"2000-03-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":4,\"count\":269,\"rate\":1.3,\"date\":\"2000-04-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":5,\"count\":370,\"rate\":1.9,\"date\":\"2000-05-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":6,\"count\":603,\"rate\":3.1,\"date\":\"2000-06-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":7,\"count\":545,\"rate\":2.9,\"date\":\"2000-07-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":8,\"count\":583,\"rate\":3.1,\"date\":\"2000-08-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":9,\"count\":408,\"rate\":2.1,\"date\":\"2000-09-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":10,\"count\":391,\"rate\":2,\"date\":\"2000-10-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":11,\"count\":384,\"rate\":1.9,\"date\":\"2000-11-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2000,\"month\":12,\"count\":365,\"rate\":1.8,\"date\":\"2000-12-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":1,\"count\":463,\"rate\":2.3,\"date\":\"2001-01-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":2,\"count\":298,\"rate\":1.5,\"date\":\"2001-02-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":3,\"count\":355,\"rate\":1.8,\"date\":\"2001-03-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":4,\"count\":369,\"rate\":1.9,\"date\":\"2001-04-01T08:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":5,\"count\":361,\"rate\":1.8,\"date\":\"2001-05-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":6,\"count\":525,\"rate\":2.7,\"date\":\"2001-06-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":7,\"count\":548,\"rate\":2.8,\"date\":\"2001-07-01T07:00:00.000Z\"},{\"series\":\"Government\",\"year\":2001,\"month\":8,\"count\":540,\"rate\":2.8,\"date\":\"2001-08-01T07:00:00.000Z\"}]\n            }\n        ]\n    },\n    {\n        'source': 'tidytuesday',\n        'name': 'College Majors',\n        'description': 'A dataset of college majors and their related fields',\n        'tables': [\n            {\n                \"format\": 'csv',\n                \"url\": 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2018/2018-10-16/recent-grads.csv',\n                \"sample\":  '''Rank,Major_code,Major,Total,Men,Women,Major_category,ShareWomen,Sample_size,Employed,Full_time,Part_time,Full_time_year_round,Unemployed,Unemployment_rate,Median,P25th,P75th,College_jobs,Non_college_jobs,Low_wage_jobs\n1,2419,PETROLEUM ENGINEERING,2339,2057,282,Engineering,0.120564344,36,1976,1849,270,1207,37,0.018380527,110000,95000,125000,1534,364,193\n2,2416,MINING AND MINERAL ENGINEERING,756,679,77,Engineering,0.101851852,7,640,556,170,388,85,0.117241379,75000,55000,90000,350,257,50\n3,2415,METALLURGICAL ENGINEERING,856,725,131,Engineering,0.153037383,3,648,558,133,340,16,0.024096386,73000,50000,105000,456,176,0\n4,2417,NAVAL ARCHITECTURE AND MARINE ENGINEERING,1258,1123,135,Engineering,0.107313196,16,758,1069,150,692,40,0.050125313,70000,43000,80000,529,102,0\n5,2405,CHEMICAL ENGINEERING,32260,21239,11021,Engineering,0.341630502,289,25694,23170,5180,16697,1672,0.061097712,65000,50000,75000,18314,4440,972\n6,2418,NUCLEAR ENGINEERING,2573,2200,373,Engineering,0.144966965,17,1857,2038,264,1449,400,0.177226407,65000,50000,102000,1142,657,244\n7,6202,ACTUARIAL SCIENCE,3777,2110,1667,Business,0.441355573,51,2912,2924,296,2482,308,0.095652174,62000,53000,72000,1768,314,259\n8,5001,ASTRONOMY AND ASTROPHYSICS,1792,832,960,Physical Sciences,0.535714286,10,1526,1085,553,827,33,0.021167415,62000,31500,109000,972,500,220\n9,2414,MECHANICAL ENGINEERING,91227,80320,10907,Engineering,0.119558903,1029,76442,71298,13101,54639,4650,0.057342278,60000,48000,70000,52844,16384,3253\n10,2408,ELECTRICAL ENGINEERING,81527,65511,16016,Engineering,0.196450256,631,61928,55450,12695,41413,3895,0.059173845,60000,45000,72000,45829,10874,3170\n11,2407,COMPUTER ENGINEERING,41542,33258,8284,Engineering,0.199412643,399,32506,30315,5146,23621,2275,0.065409275,60000,45000,75000,23694,5721,980'''\n            }\n        ]\n    },{\n        'source': 'bls.gov',\n        'name': 'Consumer Price Index',\n        'description': 'Average price of consumer goods and services in the United States',\n        'tables': [\n            {\n                \"format\": 'csv',\n                \"url\": 'https://gist.githubusercontent.com/Chenglong-MS/75827bc7daac7ba407863f499c494b37/raw/95af6fd0cc978932af9f6cacc7cd3c0c01d4dffa/average-price-data.csv',\n                \"sample\": '''Month,\"Bananas per lb.\",\"Oranges Navel per lb.\",\"Bread white pan per lb.\",\"Tomatoes field grown per lb.\",\"Chicken fresh whole per lb.\",Electricity per KWH,\"Eggs grade A large per doz.\",\"Gasoline unleaded regular per gallon\",\"Ground chuck 100% beef per lb.\",Utility (piped) gas per therm,\"Milk fresh whole fortified per gal.\"\n2005-08-01,0.487,,1.06,1.416,1.042,0.105,1.166,2.506,2.502,1.189,3.136\n2005-09-01,0.485,1.363,1.052,1.429,1.056,0.106,1.279,2.927,2.535,1.324,3.133\n2005-10-01,0.491,1.388,1.043,1.547,1.062,0.102,1.264,2.785,2.564,1.512,3.171\n2005-11-01,0.48,1.172,1.055,1.574,1.059,0.102,1.279,2.343,2.568,1.548,3.211\n2005-12-01,0.482,0.885,1.046,1.848,1.061,0.102,1.35,2.186,2.606,1.498,3.241\n2006-01-01,0.49,0.837,1.046,2.162,1.062,0.108,1.449,2.315,2.607,1.531,3.197\n2006-02-01,0.508,0.915,1.029,1.91,1.045,0.108,1.328,2.31,2.556,1.402,3.224\n2006-03-01,0.508,0.888,1.04,1.649,1.047,0.109,1.302,2.401,2.568,1.335,3.161\n2006-04-01,0.508,0.876,1.072,1.573,1.054,0.109,1.283,2.757,2.599,1.278,3.123\n2006-05-01,0.514,0.99,1.086,1.543,1.034,0.11,1.206,2.947,2.508,1.263,3.066\n2006-06-01,0.511,1.119,1.074,1.457,1.055,0.118,1.242,2.917,2.543,1.21,3.001''',\n            }\n        ]\n    },\n    {\n        'source': 'tidytuesday',\n        'name': 'Weekly Gas Price',\n        'description': 'Weekly gas prices in US for different grades and formulations',\n        'tables': [\n            {\n                \"format\": 'csv',\n                \"url\": 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2025/2025-07-01/weekly_gas_prices.csv',\n                \"sample\": '''date,fuel,grade,formulation,price\n1990-08-20,gasoline,regular,all,1.191\n1990-08-27,gasoline,regular,all,1.245\n1990-08-27,gasoline,regular,conventional,1.245\n1990-09-03,gasoline,regular,all,1.242\n1990-09-03,gasoline,regular,conventional,1.242\n1990-09-10,gasoline,regular,all,1.252\n1990-09-10,gasoline,regular,conventional,1.252\n1990-09-17,gasoline,regular,all,1.266\n1990-09-17,gasoline,regular,conventional,1.266\n1990-09-24,gasoline,regular,all,1.272\n1990-09-24,gasoline,regular,conventional,1.272\n1990-10-01,gasoline,regular,all,1.321\n1990-10-01,gasoline,regular,conventional,1.321\n1990-10-08,gasoline,regular,all,1.333\n1990-10-08,gasoline,regular,conventional,1.333\n1990-10-15,gasoline,regular,all,1.339\n1990-10-15,gasoline,regular,conventional,1.339'''\n            }\n        ]\n    }, {\n        'source': 'tidytuesday',\n        'name': 'Netflix',\n        'description': 'What movies and shows are we watching on Netflix?',\n        'tables': [\n            {\n                \"format\": 'csv',\n                \"url\": 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2025/2025-07-29/movies.csv',\n                \"sample\": '''source,report,title,available_globally,release_date,hours_viewed,runtime,views\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,Back in Action,Yes,2025-01-17,313000000,1H 54M 0S,164700000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,STRAW,Yes,2025-06-06,185200000,1H 48M 0S,102900000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,The Life List,Yes,2025-03-28,198900000,2H 5M 0S,95500000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,Exterritorial,Yes,2025-04-30,159000000,1H 49M 0S,87500000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,Havoc,Yes,2025-04-25,154900000,1H 47M 0S,86900000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,The Secret Life of Pets 2,No,NA,106800000,1H 26M 0S,74500000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,The Electric State,Yes,2025-03-14,158200000,2H 8M 0S,74200000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,Counterattack // Contraataque,Yes,2025-02-28,101000000,1H 25M 0S,71300000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,Ad Vitam,Yes,2025-01-10,114000000,1H 38M 0S,69800000''',\n            },\n            {\n                \"format\": 'csv',\n                \"url\": 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2025/2025-07-29/shows.csv',\n                \"sample\": '''source,report,title,available_globally,release_date,hours_viewed,runtime,views\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,Adolescence: Limited Series,Yes,2025-03-13,555100000,3H 50M 0S,144800000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,Squid Game: Season 2 // 오징어 게임: 시즌 2,Yes,2024-12-26,840300000,7H 10M 0S,117300000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,Squid Game: Season 3 // 오징어 게임: 시즌 3,Yes,2025-06-27,438600000,6H 8M 0S,71500000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,Zero Day: Limited Series,Yes,2025-02-20,315800000,5H 9M 0S,61300000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,Missing You: Limited Series,Yes,2025-01-01,218600000,3H 46M 0S,58000000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,American Murder: Gabby Petito: Season 1,Yes,2025-02-17,120600000,2H 9M 0S,56100000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,Ms. Rachel: Season 1,Yes,NA,162100000,3H 2M 0S,53400000\n1_What_We_Watched_A_Netflix_Engagement_Report_2025Jan-Jun,2025Jan-Jun,Sirens: Limited Series,Yes,2025-05-22,252300000,4H 44M 0S,53300000'''\n            }\n        ],\n    }, {\n        'source': 'tidytuesday',\n        'name': 'Billboard Hot 100',\n        'description': 'Data about every song to ever top the Billboard Hot 100 between August 4, 1958 and January 11, 2025. It was compiled by Chris Dalla Riva as he wrote the book Uncharted Territory: What Numbers Tell Us about the Biggest Hit Songs and Ourselves.',\n        'tables': [   \n            {\n                \"format\": 'csv',\n                'url': 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2025/2025-08-26/billboard.csv',\n                'sample': '''song,artist,date,weeks_at_number_one,non_consecutive,rating_1,rating_2,rating_3,overall_rating,divisiveness,label,parent_label,cdr_genre,cdr_style,discogs_genre,discogs_style,artist_structure,featured_artists,multiple_lead_vocalists,group_named_after_non_lead_singer,talent_contestant,posthumous,artist_place_of_origin,front_person_age,artist_male,artist_white,artist_black,songwriters,songwriters_w_o_interpolation_sample_credits,songwriter_male,songwriter_white,artist_is_a_songwriter,artist_is_only_songwriter,producers,producer_male,producer_white,artist_is_a_producer,artist_is_only_producer,songwriter_is_a_producer,time_signature,keys,simplified_key,bpm,energy,danceability,happiness,loudness_d_b,acousticness,vocally_based,bass_based,guitar_based,piano_keyboard_based,orchestral_strings,horns_winds,accordion,banjo,bongos,clarinet,cowbell,falsetto_vocal,flute_piccolo,handclaps_snaps,harmonica,human_whistling,kazoo,mandolin,pedal_lap_steel,ocarina,saxophone,sitar,trumpet,ukulele,violin,sound_effects,song_structure,rap_verse_in_a_non_rap_song,length_sec,instrumental,instrumental_length_sec,intro_length_sec,vocal_introduction,free_time_vocal_introduction,fade_out,live,cover,sample,interpolation,inspired_by_a_different_song,lyrics,lyrical_topic,lyrical_narrative,spoken_word,explicit,foreign_language,written_for_a_play,featured_in_a_then_contemporary_play,written_for_a_film,featured_in_a_then_contemporary_film,written_for_a_t_v_show,featured_in_a_then_contemporary_t_v_show,associated_with_dance,topped_the_charts_by_multiple_artist,double_a_side,eurovision_entry,u_s_artwork\nPoor Little Fool,Ricky Nelson,1958-08-04T00:00:00Z,2,0,4,5,3,4,1.3333333333333333,Imperial,Imperial,Pop;Rock,Acoustic Rock,Rock,Rock & Roll,1,NA,0,0,NA,0,United States,18,1,1,0,Sharon Sheeley,Sharon Sheeley,0,1,0,0,Jimmie Haskell;Ozzie Nelson;Ricky Nelson,1,1,1,0,0,4/4,C,C,155,33,54,80,-12,67,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NA,A2,0,154,0,12,12,0,0,0,0,0,0,0,0,I used to play around with hearts.That hastened at my call.But when I met that little girl.I knew that I would fall.Poor little fool oh yeah.I was a fool uh huh.Oh oh poor little fool.I was a fool oh yeah.She played around and teased me.With her carefree devil eyes.She'd hold me close and kiss me.But her heart was full of lies.Poor little fool oh yeah.I was a fool uh huh.Oh oh poor little fool.I was a fool oh yeah.She told me how she cared for me.And that we'd never part.And so for the very first time.I gave away my heart.Poor little fool oh yeah.I was a fool uh huh.Oh oh poor little fool.I was a fool oh yeah.The next day she was gone.And I knew she'd lied to me.She left me with a broken heart.And won her victory.Poor little fool oh yeah.I was a fool uh huh.Oh oh poor little fool.I was a fool oh yeah.Well I'd played this game with other hearts.But I never thought I'd see.The day that someone else would play.Love's foolish game with me.Poor little fool oh yeah.I was a fool uh huh.Oh oh poor little fool.I was a fool oh yeah.Poor little fool oh yeah.I was a fool uh huh.Oh oh poor little fool.Poor little fool.,Lost Love,0,0,0,0,0,NA,0,NA,0,NA,0,0,NA,0,Cannot Locate\nNel Blu Dipinto Di Blu,Domenico Modugno,1958-08-18T00:00:00Z,5,1,7,7,5,6.333333333333333,1.3333333333333333,Decca,Decca,Pop,Vocal,\"Pop;Folk, World, & Country\",Vocal;Canzone Napoletana;Ballad,1,NA,0,0,NA,0,Italy,30,1,1,0,Franco Migliacci;Domenico Modugno;Mitchell Parish,Franco Migliacci;Domenico Modugno;Mitchell Parish,1,1,1,0,Unknown,NA,NA,NA,NA,0,Free;6/8;4/4,Bb,Bb,130,6,55,48,-17,98,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NA,E1,0,219,0,11,40,1,1,0,0,0,0,0,0,NA,Flying;Dreaming,0,0,0,1,0,NA,0,NA,0,NA,0,0,NA,1,Cannot Locate\nLittle Star,The Elegants,1958-08-25T00:00:00Z,1,0,5,6,6,5.666666666666667,0.6666666666666666,Apt,ABC,Rock,Rock & Roll,Rock,Rock & Roll;Doo Wop,0,NA,0,0,NA,0,United States,17,1,1,0,Vito Picone;Arthur Venosa,Vito Picone;Arthur Venosa,1,1,1,1,Unknown,NA,NA,NA,NA,0,Free;4/4,A,A,73,40,41,70,-13,87,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NA,D3,0,163,0,0,10,1,1,0,0,0,0,1,1,Where are you little star.Where are you.Twinkle twinkle little star.How I wonder where you are.Wish I may wish I might.Make this wish come true tonight.Searched all over for a love.You're the one I'm thinking of.Twinkle twinkle little star.How I wonder where you are.High above the clouds somewhere.Send me down a love to share.Oh there you are.High above.Oh oh God.Send me a love.Oh there you are.Lighting up the sky.I need a love.Oh me oh me oh my.Twinkle twinkle little star.How I wonder where you are.Wish I may wish I might.Make this wish come true tonight.There you are little star.,Longing for Love,0,0,0,0,0,NA,0,NA,0,NA,0,0,NA,0,Cannot Locate\nIt's All in the Game,Tommy Edwards,1958-09-29T00:00:00Z,6,0,3,3,7,4.333333333333333,2.6666666666666665,MGM,MGM,Pop,Vocal,Rock;Pop,Ballad;Doo Wop,1,NA,0,0,NA,0,United States,35,1,0,1,Carl Sigman;Charles G. Dawes,Carl Sigman;Charles G. Dawes,1,1,0,0,Harry Myerson,1,1,0,0,0,3/4,Eb,Eb,71,15,33,61,-18,4,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NA,D1,0,156,0,0,3,0,0,0,0,0,0,1,1,Many a tear have to fall.But it's all in the game.All in the wonderful game.That we know as love.You have words with him.And your future's looking dim.But these things.Your hearts can rise above.Once in a while he will call.But it's all in the game.Soon he'll be there at your side.With a sweet bouquet.And he'll kiss your lips.And caress your waiting fingertips.And your hearts will fly.Away.Soon he'll be there at your side.With a sweet bouquet.Then he'll kiss your lips.And caress your waiting fingertips.And your hearts will fly.Away.,Love,0,0,0,0,0,NA,0,NA,0,NA,0,0,NA,0,Cannot Locate\nIt's Only Make Believe,Conway Twitty,1958-11-10T00:00:00Z,2,1,7,8,9,8,1.3333333333333333,MGM,MGM,Pop,Vocal,Rock,Rock & Roll;Pop Rock,1,NA,0,0,NA,0,United States,25,1,1,0,Jack Nance;Conway Twitty,Jack Nance;Conway Twitty,1,1,1,0,Jim Vienneau,1,1,0,0,0,Free;6/8,B,B,127,43,44,36,-10,86,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NA,A3,0,134,0,0,24,1,1,0,0,0,0,0,0,People see us everywhere.They think you really care.But myself I can't deceive.I know it's only make believe.My one and only prayer.Is that someday you'll care.My hopes my dreams come true.My one and only you.No one will ever know.How much I love you so.My only prayer will be.Someday you'll care for me.But it's only make believe.My hopes my dreams come true.My life I'd give for you.My heart a wedding ring.My all my everything.My heart I can't control.You rule my very soul.My only prayer will be.Someday you'll care for me.But it's only make believe.My one and only prayer.Is that someday you'll care.My hopes my dreams come true.My one and only you.No one will ever know.How much I love you so.My prayers my hopes my schemes.You are my every dream.But it's only make believe.,Lost Love,0,0,0,0,0,NA,0,NA,0,NA,0,0,NA,0,Cannot Locate\nTom Dooley,The Kingston Trio,1958-11-17T00:00:00Z,1,0,5,5,2,4,2,Capitol,EMI,Folk/Country,Folk,\"Folk, World, & Country\",Folk,0,NA,0,0,NA,0,United States,24.333333333333332,1,1,0,Alan Lomax;Frank Warner,Alan Lomax;Frank Warner,1,1,0,0,Voyle Gilmore,1,1,0,0,0,4/4,E,E,126,14,63,52,-15,83,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NA,C2,0,185,0,7,31,1,0,0,0,1,0,0,1,Throughout history there have been many songs written about the eternal triangle. This next one tells the story of Mister Grayson a beautiful woman and a condemned man named Tom Dooley. When the sun rises tomorrow Tom Dooley must hang.Hang down your head Tom Dooley.Hang down your head and cry.Hang down your head Tom Dooley.Poor boy you're bound to die.I met her on the mountain.There I took her life.Met her on the mountain.Stabbed her with my knife.Hang down your head Tom Dooley.Hang down your head and cry.Hang down your head Tom Dooley.Poor boy you're bound to die.This time tomorrow.Reckon where I'll be.Hadn't a been for Grayson.I'd a been in Tennessee.Well now boy.Hang down your head Tom Dooley.Hang down your head and cry.Hang down your head Tom Dooley.Poor boy you're bound to die.Hang down your head and try Tom Dooley.Hang down your head and cry.Hang down your head and try Tom Dooley.Poor boy you're bound to die.This time tomorrow.Reckon where I'll be.Down in some lonesome valley.Hanging from a white oak tree.Hang down your head Tom Dooley.Hang down your head and cry.Hang down your head Tom Dooley.Poor boy you're bound to die.Well now boy.Hang down your head Tom Dooley.Hang down your head and cry.Hang down your head Tom Dooley.Poor boy you're bound to die.Poor boy you're bound to die.Poor boy you're bound to die.Poor boy you're bound to die.,Murder;Death,1,1,0,0,0,NA,0,NA,0,NA,0,0,NA,0,Cannot Locate\nTo Know Him is to Love Him,The Teddy Bears,1958-12-01T00:00:00Z,3,0,8,8,8,8,0,Dore,Dore,Pop,Vocal,Pop,Vocal;Ballad,0,NA,0,0,NA,0,United States,18,2,1,0,Phil Spector,Phil Spector,1,1,1,1,Phil Spector,1,1,1,1,1,12/8,D;F,Multiple Keys,175,20,32,35,-16,89,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NA,D1,0,142,0,8,8,0,0,1,0,0,0,0,0,To know know know him.Is to love love love him.Just to see him smile.Makes my life worthwhile.To know know know him.Is to love love love him.And I do.And I do and I.And I do and I.And I do and I.And I do and I.I'd be good to him.I'd bring love to him.Everyone says there'll come a day.When I'll walk along side of him.Yes yes to know him.Is to love love love him.And I do.And I do and I.And I do and I.And I do and I.And I do and I.Why can't he see.How blind can he be.Someday he will see that he.Was meant for me.Oh oh yes.To know know know him.Is to love love love him.Just to see him smile.Makes my life worthwhile.To know know know him.Is to love love love him.And I do.And I do and I.And I do and I.And I do and I.And I do and I.,Longing for Love,0,0,0,0,0,NA,0,NA,0,NA,0,0,NA,0,Cannot Locate\nThe Chipmunk Song,The Chipmunks,1958-12-22T00:00:00Z,4,0,1,5,2,2.6666666666666665,2.6666666666666665,Liberty,Liberty,Pop,Novelty;Holiday,Pop;Children's,Novelty,0,NA,0,0,NA,0,United States,39,1,0,0,Ross Bagdasarian Sr.,Ross Bagdasarian Sr.,1,0,1,1,Ross Bagdasarian Sr.,1,0,1,1,1,3/4,Ab;Bb&%,Ab,153,37,61,78,-12,71,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NA,A2,0,141,0,28,19,0,0,1,0,0,0,0,0,Alright you Chipmunks Ready to sing your song.I'd say we are.Yeah Lets sing it now.Okay Simon.Okay.Okay Theodore.Okay.Okay Alvin Alvin Alvin.Okay.Christmas Christmas time is near.Time for toys and time for cheer.We've been good but we can't last.Hurry Christmas hurry fast.Want a plane that loops the loop.Me I want a Hula-Hoop.We can hardly stand the wait.Please Christmas don't be late.Ok Fellas Get ready.That was very good Simon.Naturally.Very Good Theodore.He He He He.Uh Alvin You were a little flat.Watch it Alvin Alvin Alvin.Okay.Want a plane that loops the loop.I still want a Hula-Hoop.We can hardly stand the wait.Please Christmas don't be late.We can hardly stand the wait.Please Christmas don't be late.,Christmas,0,0,0,0,0,NA,0,NA,0,NA,0,0,NA,0,Cannot Locate\nSmoke Gets in Your Eyes,The Platters,1959-01-19T00:00:00Z,3,0,9,9,8,8.666666666666666,0.6666666666666666,Mercury,Mercury,Pop,Vocal,Funk/Soul,Rhythm & Blues,0,NA,0,0,NA,0,United States,30,2,0,1,Otto Harbach;Jerome Kern,Otto Harbach;Jerome Kern,1,1,0,0,Buck Ram,1,1,0,0,0,4/4,Eb;B,Multiple Keys,113,27,32,26,-11,93,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NA,D1,0,158,0,16,8,0,0,0,0,1,0,0,1,They asked me how I knew.My true love was true.I of course replied.Something here inside.Cannot be denied.They said someday you'll find.All who love are blind.When your heart's on fire.You must realize.Smoke gets in your eyes.So I chaffed them and I gaily laughed.To think they could doubt my love.And yet today my love has flown away.I am without my love.Now laughing friends deride.Tears I cannot hide.So I smile and say.When a lovely flame dies.Smoke gets in your eyes.Smoke gets in your eyes.,Lost Love,0,0,0,0,1,NA,0,NA,0,NA,0,0,NA,0,Cannot Locate\nStagger Lee,Lloyd Price,1959-02-02T00:00:00Z,4,0,6,6,9,7,2,ABC-Paramount,ABC,Rock,Rhythm & Blues,Rock,Rock & Roll,1,NA,0,0,NA,0,United States,25,1,0,1,Lloyd Price;Harold Logan,Lloyd Price;Harold Logan,1,0,1,0,Don Costa,1,1,0,0,0,Free;4/4,Eb,Eb,71,62,36,79,-8,74,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NA,A4,0,145,0,32,13,1,1,1,0,1,0,0,1,The night was clear.And the moon was yellow.And the leaves came tumbling down.I was standing on the corner.When I heard my bulldog bark.He was barking at the two men.Who were gambling in the dark.It was Stagger Lee and Billy.Two men who gambled late.Stagger Lee threw seven.Billy swore that he threw eight.Stagger Lee told Billy.I can't let you go with that.You have won all my money.And my brand new Stetson hat.Stagger Lee started off.Going down that railroad track.He said I can't get you Billy.But don't be here when I come back.Go on Stagger Lee.Stagger Lee went home.And he got his forty-four.Said I'm going to the bar room.Just to pay that debt I owe.Stagger Lee went to the bar room.And he stood across the bar room door.Said Now nobody move.And he pulled his forty-four.Stagger Lee cried Billy.Oh please don't take my life.I got three little children.And a very sickly wife.Stagger Lee shot Billy.Oh he shot that poor boy so bad.Till the bullet came through Billy.And it broke the bartender's glass.Now look out Stagg come on.,Murder;Death,1,0,0,0,0,NA,0,NA,0,NA,0,0,NA,0,Cannot Locate\nVenus,Frankie Avalon,1959-03-09T00:00:00Z,5,0,3,2,2,2.3333333333333335,0.6666666666666666,Chancellor,ABC,Pop,Vocal,Pop,Vocal,1,NA,0,0,NA,0,United States,18,1,1,0,Ed Marshall,Ed Marshall,1,1,0,0,Peter DeAngelis;Bob Marcucci,1,1,0,0,0,4/4,Bb,Bb,115,48,56,75,-10,73,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NA,D1,0,142,0,23,16,0,0,0,0,0,0,0,0,Venus.Venus.Venus if you will.Please send a little girl for me to thrill.A girl who wants my kisses and my arms.A girl with all the charms of you.Venus make her fair.A lovely girl with sunlight in her hair.And take the brightest stars up in the skies.And place them in her eyes for me.Venus goddess of love that you are.Surely the things I ask.Can't be too great a task.Venus if you do.I promise that I always will be true.I'll give her all the love I have to give.As long as we both shall live.Venus goddess of love that you are.Surely the things I ask.Can't be too great a task.Venus if you do.I promise that I always will be true.I'll give her all the love I have to give.As long as we both shall live.Venus.Venus.Make my wish come true.,Longing for Love,0,0,0,0,0,NA,0,NA,0,NA,0,0,NA,0,Artist Photograph'''\n            }\n        ]\n    }, {\n        'source': 'tidytuesday',\n        'name': 'Patient Risk Profiles',\n        'description': \"This dataset contains 100 simulated patient's medical history features and the predicted 1-year risk of 14 outcomes based on each patient's medical history features. The predictions used real logistic regression models developed on a large real world healthcare dataset.\",\n        'tables': [\n            {\n                \"format\": 'csv',\n                'url': 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2023/2023-10-24/patient_risk_profiles.csv',\n                'sample': '''personId,age group:  10 -  14,age group:  15 -  19,age group:  20 -  24,age group:  65 -  69,age group:  40 -  44,age group:  45 -  49,age group:  55 -  59,age group:  85 -  89,age group:  75 -  79,age group:   5 -   9,age group:  25 -  29,age group:   0 -   4,age group:  70 -  74,age group:  50 -  54,age group:  60 -  64,age group:  35 -  39,age group:  30 -  34,age group:  80 -  84,age group:  90 -  94,Sex = FEMALE,Sex = MALE,Acetaminophen exposures in prior year,Occurrence of Alcoholism in prior year,Anemia in prior year,Angina events in prior year,ANTIEPILEPTICS in prior year,Occurrence of Anxiety in prior year,Osteoarthritis in prior year,Aspirin exposures in prior year,Occurrence of Asthma in prior year,\"Atrial Fibrillation, incident in prior year\",HORMONAL CONTRACEPTIVES in prior year,Any cancer (excl. prostate cancer and benign cancer) in prior year,Acute Kidney Injury (AKI) in prior year,Chronic kidney disease or end stage renal disease in prior year,Heart failure in prior year,Chronic obstructive pulmonary disease (COPD) in prior year,Coronary artery disease (CAD) in prior year,\"Major depressive disorder, with NO occurrence of certain psychiatric disorder in prior year\",Type 1 diabetes and no prior specific non-T1DM diabetes in prior year,\"Type 2 Diabetes Mellitus (DM), with no type 1 or secondary DM in prior year\",Deep Vein Thrombosis (DVT) in prior year,Dyspnea in prior year,Edema in prior year,Gastroesophageal reflux disease in prior year,Acute gastrointestinal (GI) bleeding in prior year,Heart valve disorder in prior year,Chronic hepatitis in prior year,Hyperlipidemia in prior year,Hypertension in prior year,Hypothyroidism in prior year,Inflammatory Bowel Disease in prior year,Low back pain in prior year,Occurrence of neuropathy in prior year,Obesity in prior year,Opioids in prior year,Osteoporosis in prior year,Peripheral vascular disease in prior year,Pneumonia in prior year,Psychotic disorder in prior year,Acute Respiratory failure in prior year,Rheumatoid Arthritis in prior year,Seizure in prior year,Sepsis in prior year,Skin ulcer in prior year,Sleep apnea in prior year,Smoking in prior year,STEROIDS in prior year,Hemorrhagic stroke in an inpatient setting in prior year,Non-hemorrhagic Stroke in an inpatient setting in prior year,Urinary tract infectious disease in prior year,Antibiotics Carbapenems in prior year,Antibiotics Aminoglycosides in prior year,Antibiotics Cephalosporins in prior year,Antibiotics Fluoroquinolones in prior year,Antibiotics Glycopeptides and lipoglycopeptides in prior year,Antibiotics Macrolides in prior year,Antibiotics Monobactams in prior year,Antibiotics Oxazolidinones in prior year,Antibiotics Penicillins in prior year,Antibiotics Polypeptides in prior year,Antibiotics Rifamycins in prior year,Antibiotics Sulfonamides in prior year,Antibiotics Streptogramins in prior year,Antibiotics Tetracyclines in prior year,predicted risk of Pulmonary Embolism,\"predicted risk of Sudden Hearing Loss, No congenital anomaly or middle or inner ear conditions\",predicted risk of Restless Leg Syndrome,\"predicted risk of Sudden Vision Loss, with no eye pathology causes\",predicted risk of Muscle weakness or injury,predicted risk of Ankylosing Spondylitis,predicted risk of Autoimmune hepatitis,predicted risk of Multiple Sclerosis,\"predicted risk of Acute pancreatitis, with No chronic or hereditary or common causes of pancreatitis\",predicted risk of Ulcerative colitis,predicted risk of Migraine,predicted risk of Dementia,predicted risk of  Treatment resistant depression (TRD),\"predicted risk of Parkinson's disease, inpatient or with 2nd diagnosis\"\n1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,6.99575517946153E-06,0.00118799448452361,0.00113521200511238,0.000111508301767788,0.0188317440572134,7.58027636940557E-05,7.96570781215902E-05,0.000468549568476105,0.00012436069695809,0.000230991182800591,0.00654426768381862,7.30568202867115E-05,0.000393828939554244,4.04339639325133E-05\n2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0.00441422061324454,0.0358259270965809,0.00628615304402316,0.00160728545057666,0.179579353683346,0.000501552796659848,7.88137732912271E-06,0.000421360646091043,0.000816636102151383,0.00156719415098486,0.0243635943152779,0.283879214688442,0.0138886132877911,0.0195526139594774\n3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0.00246179423902851,0.00352409954417798,0.00123963239201273,0.000145891713126901,0.0223178022257278,0.000461715423994332,2.28874258509341E-05,0.000527096330768595,0.000416669691599939,0.00127466041950367,0.00542984527203618,0.00128155335881044,0.00101738679514043,0.000113499343433664\n4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0.00267000861643238,0.00247336321987715,0.000441054921283152,0.000152773704749624,0.0220617756570553,0.000481510930093349,3.43010599599209E-05,0.000910960176825296,0.000235986486697154,0.00638625829979481,0.006636578736903,0.000706627519596284,0.00226615949859508,4.10984109899065E-05\n5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,0,0.0206818512182543,0.0117893418676085,0.00427664772229725,0.000325865473878066,0.0633105390455467,0.0041153809531189,8.3473321779432E-05,0.00185928919073779,0.000699811142238753,0.0620649084463635,0.00468263807806029,0.0163716009191329,5.64951086173088E-05,0.00331195228607955\n6,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0.00455665231961284,0.0215984207477867,0.00178776442479255,0.000466726635059575,0.0389368132012184,0.000666036384000457,2.15545946607044E-05,0.000127202886974176,0.000858813148174222,0.0010155590042039,0.0100388811465988,0.0457689464750165,0.000659150042438028,0.00336552536596351\n7,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0.0186826613299857,0.0187010037764903,0.00212554337046552,0.000214068587596829,0.134144553239361,0.00108141814357676,0.00139509039790527,0.000744241842425037,0.000916803656046385,0.00637231340606943,0.0326189204574906,0.331324640121089,0.000314660993270718,0.00498660937569948\n'''\n            }\n        ]\n    }, {\n        'source': 'tidytuesday',\n        'name': 'Life Expectancy',\n        'description': 'Across the world, people are living longer. In 1900, the average life expectancy of a newborn was 32 years. By 2021 this had more than doubled to 71 years. But where, when, how, and why has this dramatic change occurred? To understand it, we can look at data on life expectancy worldwide.',\n        'tables': [\n            {\n                \"format\": 'csv',\n                \"url\": 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2023/2023-12-05/life_expectancy.csv',\n                'sample': '''Entity,Code,Year,LifeExpectancy\nAfghanistan,AFG,1950,27.7275\nAfghanistan,AFG,1951,27.9634\nAfghanistan,AFG,1952,28.4456\nAfghanistan,AFG,1953,28.9304\nAfghanistan,AFG,1954,29.2258\nAfghanistan,AFG,1955,29.9206\nAfghanistan,AFG,1956,30.4078\nAfghanistan,AFG,1957,30.9458\n'''\n            }, {\n                \"format\": 'csv',\n                \"url\": 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2023/2023-12-05/life_expectancy_different_ages.csv',\n                'sample': '''Entity,Code,Year,LifeExpectancy0,LifeExpectancy10,LifeExpectancy25,LifeExpectancy45,LifeExpectancy65,LifeExpectancy80\nAfghanistan,AFG,1950,27.7275,49.1459,54.4422,63.4225,73.4901,83.7259\nAfghanistan,AFG,1951,27.9634,49.2941,54.5644,63.500603,73.5289,83.7448\nAfghanistan,AFG,1952,28.4456,49.5822,54.7998,63.6476,73.6018,83.7796\nAfghanistan,AFG,1953,28.9304,49.8634,55.028603,63.788902,73.6706,83.8118\nAfghanistan,AFG,1954,29.2258,49.9306,55.1165,63.8481,73.7041,83.8334\nAfghanistan,AFG,1955,29.9206,50.4315,55.4902,64.0732,73.8087,83.876\nAfghanistan,AFG,1956,30.4078,50.7036,55.7131,64.2102,73.8755,83.9073\nAfghanistan,AFG,1957,30.9458,51.0233,55.9721,64.3705,73.9542,83.9434\nAfghanistan,AFG,1958,31.5066,51.3565,56.244698,64.5401,74.0384,83.9826'''\n            }, {\n                \"format\": 'csv',\n                'url': 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2023/2023-12-05/life_expectancy_female_male.csv',\n                'sample': '''Entity,Code,Year,LifeExpectancyDiffFM\nAfghanistan,AFG,1950,1.2619\nAfghanistan,AFG,1951,1.2706013\nAfghanistan,AFG,1952,1.2882996\nAfghanistan,AFG,1953,1.3066006\nAfghanistan,AFG,1954,1.2765007\nAfghanistan,AFG,1955,1.3688011\nAfghanistan,AFG,1956,1.4055996\nAfghanistan,AFG,1957,1.4146996\nAfghanistan,AFG,1958,1.3987999\nAfghanistan,AFG,1959,1.3992996\nAfghanistan,AFG,1960,1.4146004'''\n            }\n        ]\n    }, {\n        'source': 'tidytuesday',\n        'name': 'PhDs Awarded',\n        'description': 'The data comes from the NSF - where there are at least 72 different datasets if you wanted to approach the data from a different angle.',\n        'tables': [\n            {\n                \"format\": 'csv',\n                \"url\": 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2019/2019-02-19/phd_by_field.csv',\n                'sample': '''broad_field,major_field,field,year,n_phds\nLife sciences,Agricultural sciences and natural resources,Agricultural economics,2008,111\nLife sciences,Agricultural sciences and natural resources,Agricultural and horticultural plant breeding,2008,28\nLife sciences,Agricultural sciences and natural resources,Agricultural animal breeding,2008,3\nLife sciences,Agricultural sciences and natural resources,Agronomy and crop science,2008,68\nLife sciences,Agricultural sciences and natural resources,Animal nutrition,2008,41\nLife sciences,Agricultural sciences and natural resources,\"Animal science, poultry or avian\",2008,18\nLife sciences,Agricultural sciences and natural resources,\"Animal sciences, other\",2008,77\nLife sciences,Agricultural sciences and natural resources,Environmental science,2008,182\nLife sciences,Agricultural sciences and natural resources,Fishing and fisheries sciences and management,2008,52\nLife sciences,Agricultural sciences and natural resources,Food science,2008,96\nLife sciences,Agricultural sciences and natural resources,\"Food science and technology, other\",2008,41\nLife sciences,Agricultural sciences and natural resources,Forest sciences and biology,2008,32\nLife sciences,Agricultural sciences and natural resources,\"Forest management, forest resources management\",2008,44\nLife sciences,Agricultural sciences and natural resources,\"Forestry, other\",2008,17\nLife sciences,Agricultural sciences and natural resources,Horticulture science,2008,50\nLife sciences,Agricultural sciences and natural resources,Natural resource and environmental policy,2008,NA\n'''\n            }\n        ]\n    }, {\n        'source': 'tidytuesday',\n        'name': 'Nuclear Explosions',\n        'description': 'This dataset is from Stockholm International Peace Research Institute, by way of data is plural with credit to Jesus Castagnetto for sharing the dataset.',\n        'tables': [\n            {\n                \"format\": 'csv',\n                \"url\": 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2019/2019-08-20/nuclear_explosions.csv',\n                'sample': '''date_long,year,id_no,country,region,source,latitude,longitude,magnitude_body,magnitude_surface,depth,yield_lower,yield_upper,purpose,name,type\n19450716,1945,45001,USA,ALAMOGORDO,DOE,32.54,-105.57,0,0,-0.1,21,21,WR,TRINITY,TOWER\n19450805,1945,45002,USA,HIROSHIMA,DOE,34.23,132.27,0,0,-0.6,15,15,COMBAT,LITTLEBOY,AIRDROP\n19450809,1945,45003,USA,NAGASAKI,DOE,32.45,129.52,0,0,-0.6,21,21,COMBAT,FATMAN,AIRDROP\n19460630,1946,46001,USA,BIKINI,DOE,11.35,165.2,0,0,-0.2,21,21,WE,ABLE,AIRDROP\n19460724,1946,46002,USA,BIKINI,DOE,11.35,165.2,0,0,0.03,21,21,WE,BAKER,UW\n19480414,1948,48001,USA,ENEWETAK,DOE,11.3,162.15,0,0,-0.08,37,37,WR,X-RAY,TOWER\n19480430,1948,48002,USA,ENEWETAK,DOE,11.3,162.15,0,0,-0.08,49,49,WR,YOKE,TOWER\n19480514,1948,48003,USA,ENEWETAK,DOE,11.3,162.15,0,0,-0.08,18,18,WR,ZEBRA,TOWER\n19490829,1949,49001,USSR,SEMI KAZAKH,DOE,48,76,0,0,0,22,22,WR,NA,SURFACE\n19510127,1951,51001,USA,NTS,DOE,37,-116,0,0,-0.35,1,1,WR,ABLE,AIRDROP\n19510128,1951,51002,USA,NTS,DOE,37,-116,0,0,-0.35,8,8,WR,BAKER,AIRDROP\n19510201,1951,51003,USA,NTS,DOE,37,-116,0,0,-0.35,1,1,WR,EASY,AIRDROP\n19510202,1951,51004,USA,NTS,DOE,37,-116,0,0,-0.4,8,8,WR,BAKER2,AIRDROP\n19510206,1951,51005,USA,NTS,DOE,37,-116,0,0,-0.5,22,22,WR,FOX,AIRDROP\n19510407,1951,51006,USA,ENEWETAK,DOE,11.3,162.15,0,0,-0.1,81,81,WR,DOG,TOWER\n19510420,1951,51007,USA,ENEWETAK,DOE,11.3,162.15,0,0,-0.1,47,47,WR,EASY,TOWER\n19510508,1951,51008,USA,ENEWETAK,DOE,11.3,162.15,0,0,-0.07,225,225,WR,GEORGE,TOWER\n19510524,1951,51009,USA,ENEWETAK,DOE,11.3,162.15,0,0,-0.07,45.5,45.5,WR,ITEM,TOWER'''\n            }\n        ]\n    }, {\n        'source': 'tidytuesday',\n        'name': 'Nobel Laureate',\n        'description': '\"The Nobel Prize is a set of annual international awards bestowed in several categories by Swedish and Norwegian institutions in recognition of academic, cultural, or scientific advances.\" - Wikipedia.',\n        'tables': [\n            {\n                \"format\": 'csv',\n                \"url\": 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2019/2019-05-14/nobel_winners.csv',\n                'sample': '''prize_year,category,prize,motivation,prize_share,laureate_id,laureate_type,full_name,birth_date,birth_city,birth_country,gender,organization_name,organization_city,organization_country,death_date,death_city,death_country\n1901,Chemistry,The Nobel Prize in Chemistry 1901,\"\"\"in recognition of the extraordinary services he has rendered by the discovery of the laws of chemical dynamics and osmotic pressure in solutions\"\"\",1/1,160,Individual,Jacobus Henricus van 't Hoff,1852-08-30,Rotterdam,Netherlands,Male,Berlin University,Berlin,Germany,1911-03-01,Berlin,Germany\n1901,Literature,The Nobel Prize in Literature 1901,\"\"\"in special recognition of his poetic composition, which gives evidence of lofty idealism, artistic perfection and a rare combination of the qualities of both heart and intellect\"\"\",1/1,569,Individual,Sully Prudhomme,1839-03-16,Paris,France,Male,NA,NA,NA,1907-09-07,Châtenay,France\n1901,Medicine,The Nobel Prize in Physiology or Medicine 1901,\"\"\"for his work on serum therapy, especially its application against diphtheria, by which he has opened a new road in the domain of medical science and thereby placed in the hands of the physician a victorious weapon against illness and deaths\"\"\",1/1,293,Individual,Emil Adolf von Behring,1854-03-15,Hansdorf (Lawice),Prussia (Poland),Male,Marburg University,Marburg,Germany,1917-03-31,Marburg,Germany\n1901,Peace,The Nobel Peace Prize 1901,NA,1/2,462,Individual,Jean Henry Dunant,1828-05-08,Geneva,Switzerland,Male,NA,NA,NA,1910-10-30,Heiden,Switzerland\n1901,Peace,The Nobel Peace Prize 1901,NA,1/2,463,Individual,Frédéric Passy,1822-05-20,Paris,France,Male,NA,NA,NA,1912-06-12,Paris,France\n1901,Physics,The Nobel Prize in Physics 1901,\"\"\"in recognition of the extraordinary services he has rendered by the discovery of the remarkable rays subsequently named after him\"\"\",1/1,1,Individual,Wilhelm Conrad Röntgen,1845-03-27,Lennep (Remscheid),Prussia (Germany),Male,Munich University,Munich,Germany,1923-02-10,Munich,Germany\n1902,Chemistry,The Nobel Prize in Chemistry 1902,\"\"\"in recognition of the extraordinary services he has rendered by his work on sugar and purine syntheses\"\"\",1/1,161,Individual,Hermann Emil Fischer,1852-10-09,Euskirchen,Prussia (Germany),Male,Berlin University,Berlin,Germany,1919-07-15,Berlin,Germany\n1902,Literature,The Nobel Prize in Literature 1902,\"\"\"the greatest living master of the art of historical writing, with special reference to his monumental work, <I>A history of Rome</I>\"\"\",1/1,571,Individual,Christian Matthias Theodor Mommsen,1817-11-30,Garding,Schleswig (Germany),Male,NA,NA,NA,1903-11-01,Charlottenburg,Germany\n1902,Medicine,The Nobel Prize in Physiology or Medicine 1902,\"\"\"for his work on malaria, by which he has shown how it enters the organism and thereby has laid the foundation for successful research on this disease and methods of combating it\"\"\",1/1,294,Individual,Ronald Ross,1857-05-13,Almora,India,Male,University College,Liverpool,United Kingdom,1932-09-16,Putney Heath,United Kingdom\n1902,Peace,The Nobel Peace Prize 1902,NA,1/2,464,Individual,Élie Ducommun,1833-02-19,Geneva,Switzerland,Male,NA,NA,NA,1906-12-07,Bern,Switzerland\n1902,Peace,The Nobel Peace Prize 1902,NA,1/2,465,Individual,Charles Albert Gobat,1843-05-21,Tramelan,Switzerland,Male,NA,NA,NA,1914-03-16,Bern,Switzerland\n1902,Physics,The Nobel Prize in Physics 1902,\"\"\"in recognition of the extraordinary service they rendered by their researches into the influence of magnetism upon radiation phenomena\"\"\",1/2,2,Individual,Hendrik Antoon Lorentz,1853-07-18,Arnhem,Netherlands,Male,Leiden University,Leiden,Netherlands,1928-02-04,NA,Netherlands'''\n            }\n        ]\n    }, {\n        'source': 'tidytuesday',\n        'name': 'Space launches',\n        'description': 'Taken from Economist GitHub (https://github.com/rfordatascience/tidytuesday/tree/main/data/2018/2018-08-21). These are the data behind the \"space launches\" article, The space race is dominated by new contenders. Principal data came from the Jonathan McDowell\\'s JSR Launch Vehicle Database.',\n        'tables': [\n            {\n                \"format\": 'csv',\n                \"url\": 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2019/2019-01-15/agencies.csv',\n                'sample': '''agency,count,ucode,state_code,type,class,tstart,tstop,short_name,name,location,longitude,latitude,error,parent,short_english_name,english_name,unicode_name,agency_type\nRVSN,1528,RVSN,SU,O/LA,D,1960,1991 Dec,RVSN,Rakentiye Voiska Strategicheskogo Naznacheniye,Mosvka?,-,-,-,-,-,Strategic Rocket Forces,Ракетные войска стратегического назначения,state\nUNKS,904,GUKOS,SU,O/LA,D,1986 Apr 24,1991,UNKS,Upravleniye Nachalnika Kosmicheskikh Sredstv,Moskva,-,-,-,MO,-,-,Управление начальника космических средств МО СССР,state\nNASA,469,NASA,US,O/LA/LV/PL/S,C,1958 Oct  1,-,NASA,National Aeronautics and Space Administration,\"Washington, D.C.\",-,-,-,-,-,-,National Aeronautics and Space Administration,state\nUSAF,388,USAF,US,O/LA/S,D,1947 Sep 18,-,USAF,United States Air Force,\"Washington, DC-Pentagon\",-,-,-,-,-,-,United States Air Force,state\nAE,258,AE,F,O/LA,B,1980 Mar 26,*,Arianespace,\"Arianespace, Inc.\",\"Paris-Evry, France\",-,-,-,-,Arianespace,-,\"Arianespace, Inc.\",private\nAFSC,247,AFSC,US,LA,D,1961 Apr  1,1992 Jul  1,AFSC,\"US Air Force Systems Command, Los Angeles AFS\",\"El Segundo, California\",-,-,-,USAF,-,-,\"US Air Force Systems Command, Los Angeles AFS\",state\nVKSR,200,GUKOS,RU,O/LA,D,1997 Jul,2001 Jun  1,VKS RVSN,\"Voenno-Kosmicheskiye Sili (Military Space Forces), RVSN\",\"Mosvka-Solnechnogorsk, Rossiya\",-,-,-,RVSN,-,Russian Military Space Forces,Военно-космические силы РВСН,state\nCALT,181,CALT,CN,LA/LV/PL/E,C,1957 Nov 11,-,CALT,Zhongguo yunzaihuojian jishu yanjiu yuan,Beijing-Nanyuan,-,-,-,CASC,CALT,Chinese Academy of Launch Vehicle Technology (CASC 1st Acad),中国运载火箭技术研究院,state\nFKA,128,MOM,RU,O/LA,C,2004,2016 Jan  1,Roskosmos,Federal'noe kosmicheskoe agentstvo Rossii (Roskosmos),Moskva,-,-,-,-,-,Roskosmos,Федеральное космическое агентство (Роскосмос),state\nSAST,105,SBA,CN,O/LA/LV/PL,B,1993,-,SAST,Shanghai hangtian jishu yanjiuyuan,Shanghai-Minghan,-,-,-,CASC,-,Shanghai Academy of Space Technology (CASC 8th Acad),上海航天技术研究院,state\nILSK,97,ILSK,RU,LA,B,1995,-,ILS-K,\"International Launch Services, Khrunichev\",Moskva,-,-,-,KHRU,-,-,\"International Launch Services, Khrunichev\",private\nKVR,78,GUKOS,RU,O/LA,D,2001 Jun  1,2011 Dec  1,KVR,Kosmichesikiye voyska Rossii,Moskva-Solnechnogorsk,-,-,-,-,-,Russian Space Forces,Космические войска России,state\nULAL,70,ULAL,US,LA,B,2006 Dec,-,ULA/LMA,United Launch Alliance/Lockheed Martin Astronautics,\"Denver-Centennial, Colorado\",-,-,-,LM,-,-,United Launch Alliance/Lockheed Martin Astronautics,private\nKHRU,67,KHRU,RU,O/LA/LV/PL/S,B,1994,1998,Khrunichev,\"GKNPTs im. M.V. Khrunichev, Zavod Khrunichev\",Moskva-Fili,-,-,-,-,-,Khrunichev State Research and Production Center,ГКНПЦ им. М.В.Хруничева,state\nSPX,65,SPX,US,O/LA/LV/PL/S,B,2007 Aug,-,SpaceX,SpaceX,\"Hawthorne, California\",-,-,-,-,-,-,SpaceX,startup'''\n            }, {\n                \"format\": 'csv',\n                \"url\": 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/refs/heads/main/data/2019/2019-01-15/launches.csv',\n                'sample': '''tag,JD,launch_date,launch_year,type,variant,mission,agency,state_code,category,agency_type\n1967-065,2439671.38,1967-06-29,1967,Thor Burner 2,,Secor Type II S/N 10,US,US,O,state\n1967-080,2439725.7,1967-08-23,1967,Thor Burner 2,,DAPP 3419,US,US,O,state\n1967-096,2439774.83,1967-10-11,1967,Thor Burner 2,,DAPP 4417,US,US,O,state\n1968-042,2439999.69,1968-05-23,1968,Thor Burner 2,,DAPP 5420,US,US,O,state\n1968-092,2440152.69,1968-10-23,1968,Thor Burner 2,,DAPP 6422,US,US,O,state\n1969-062,2440425.69,1969-07-23,1969,Thor Burner 2,,DAPP 7421,US,US,O,state\n1970-012,2440628.86,1970-02-11,1970,Thor Burner 2,,DAPP Block 5A F-1,US,US,O,state\n1970-070,2440832.86,1970-09-03,1970,Thor Burner 2,,DAPP Block 5A F-2,US,US,O,state\n1971-012,2440999.66,1971-02-17,1971,Thor Burner 2,,DAPP Block 5A F-3,US,US,O,state\n1971-054,2441111.08,1971-06-08,1971,Thor Burner 2,,P70-1,US,US,O,state\n1971-087,2441238.83,1971-10-14,1971,Thor Burner 2A,,DMSP Block 5B F-1 (SV-2),US,US,O,state\n1972-018,2441400.87,1972-03-24,1972,Thor Burner 2A,,DMSP Block 5B F-2 (SV-1),US,US,O,state\n1972-089,2441630.64,1972-11-09,1972,Thor Burner 2A,,DMSP Block 5B F-3,US,US,O,state\n1973-054,2441911.7,1973-08-17,1973,Thor Burner 2A,,DMSP Block 5B F-4,US,US,O,state\n1974-015,2442122.83,1974-03-16,1974,Thor Burner 2A,,DMSP Block 5B F-5,US,US,O,state\n1974-063,2442268.64,1974-08-09,1974,Thor Burner 2A,,DMSP Block 5C F-1,US,US,O,state'''\n            }\n        ]\n    },\n]\n\n\n"
  },
  {
    "path": "py-src/data_formulator/sandbox/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nfrom .local_sandbox import LocalSandbox\nfrom .docker_sandbox import DockerSandbox\n\n# Valid values for the --sandbox CLI option / SANDBOX env var.\nSANDBOX_OPTIONS = (\"local\", \"docker\")\n\n\ndef create_sandbox(sandbox: str = \"local\") -> LocalSandbox | DockerSandbox:\n    \"\"\"Instantiate a sandbox from a config string.\n\n    Parameters\n    ----------\n    sandbox : str\n        ``\"local\"`` (default) or ``\"docker\"``.\n    \"\"\"\n    if sandbox == \"docker\":\n        return DockerSandbox()\n    return LocalSandbox()\n"
  },
  {
    "path": "py-src/data_formulator/sandbox/base.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nAbstract base class for code-execution sandboxes.\n\nEvery sandbox backend must subclass :class:`Sandbox` and implement\n:meth:`run_python_code`.  The return contract is a dict with:\n\n* ``{'status': 'ok', 'content': <pandas.DataFrame>}``  on success\n* ``{'status': 'error', 'content': '<error message>'}`` on failure\n\"\"\"\n\nfrom abc import ABC, abstractmethod\n\nimport pandas as pd\n\n\nclass Sandbox(ABC):\n    \"\"\"Base class for sandbox execution backends.\"\"\"\n\n    @abstractmethod\n    def run_python_code(\n        self,\n        code: str,\n        workspace,\n        output_variable: str,\n    ) -> dict:\n        \"\"\"Execute a Python script and return the resulting DataFrame.\n\n        The script runs with the workspace directory as its working\n        directory (read-only).  Scripts can therefore read files directly\n        via e.g. ``pd.read_csv(\"file.csv\")``.\n\n        Parameters\n        ----------\n        code : str\n            Python source code to execute.  The script is expected to\n            populate a variable named *output_variable* with a\n            :class:`pandas.DataFrame`.\n        workspace\n            A :class:`~data_formulator.datalake.workspace.Workspace`\n            instance.  The sandbox uses ``workspace.local_dir()`` to set up\n            the execution environment.\n        output_variable : str\n            Name of the variable in *code* that holds the result.\n\n        Returns\n        -------\n        dict\n            ``{'status': 'ok', 'content': DataFrame}``  on success, or\n            ``{'status': 'error', 'content': str}``    on failure.\n        \"\"\"\n        ...\n"
  },
  {
    "path": "py-src/data_formulator/sandbox/docker_sandbox.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nDocker-based sandbox for executing Python code in an isolated container.\n\nThe workspace directory is mounted **read-only** as the container's working\ndirectory so user scripts can read data files via e.g.\n``pd.read_csv(\"file.csv\")`` but cannot tamper with the host filesystem.\nThe output DataFrame is serialised to Parquet and read back via a\nbind-mounted output directory.\n\"\"\"\n\nimport logging\nimport os\nimport shutil\nimport subprocess\nimport tempfile\nimport textwrap\n\nimport pandas as pd\nfrom werkzeug.utils import secure_filename\n\nfrom .base import Sandbox\n\nlogger = logging.getLogger(__name__)\n\n# ---------------------------------------------------------------------------\n# Configuration\n# ---------------------------------------------------------------------------\n\nDEFAULT_DOCKER_IMAGE = os.environ.get(\n    \"DOCKER_SANDBOX_IMAGE\", \"data-formulator-sandbox\"\n)\nDEFAULT_TIMEOUT = int(os.environ.get(\"DOCKER_SANDBOX_TIMEOUT\", \"120\"))\n\n\nclass DockerSandbox(Sandbox):\n    \"\"\"Execute Python code inside a Docker container.\n\n    The workspace directory is bind-mounted **read-only** as the\n    container's working directory.  Scripts read files directly via\n    e.g. ``pd.read_csv(\"file.csv\")``.\n\n    Parameters\n    ----------\n    docker_image : str\n        Docker image tag to use.  The default ``data-formulator-sandbox``\n        is built from ``Dockerfile.sandbox`` and has all required packages\n        pre-installed.  Override with ``DOCKER_SANDBOX_IMAGE`` env-var.\n    timeout : int\n        Wall-clock timeout in seconds (default: 120 or\n        ``DOCKER_SANDBOX_TIMEOUT``).\n    \"\"\"\n\n    def __init__(\n        self,\n        docker_image: str = DEFAULT_DOCKER_IMAGE,\n        timeout: int = DEFAULT_TIMEOUT,\n    ):\n        self.docker_image = docker_image\n        self.timeout = timeout\n\n    # ------------------------------------------------------------------\n    # Public interface\n    # ------------------------------------------------------------------\n\n    def run_python_code(\n        self,\n        code: str,\n        workspace,\n        output_variable: str,\n    ) -> dict:\n        \"\"\"Execute *code* in a Docker container and return the result DataFrame.\n\n        The wrapper script runs the user code, then serialises\n        ``output_variable`` to Parquet so the host can read it back.\n\n        Returns\n        -------\n        dict\n            ``{'status': 'ok', 'content': DataFrame}``  on success, or\n            ``{'status': 'error', 'content': str}``    on failure.\n        \"\"\"\n        # Use local_dir() to materialise workspace files locally\n        # (no-op for local workspaces, downloads blobs for Azure).\n        with workspace.local_dir() as local_path:\n            workspace_path = str(local_path)\n\n            tmpdir = tempfile.mkdtemp(prefix=\"df_docker_\")\n            output_dir = os.path.join(tmpdir, \"outputs\")\n            os.makedirs(output_dir, exist_ok=True)\n\n            # ---- build wrapper script -----------------------------------------\n            output_parquet = f\"/sandbox/outputs/{output_variable}.parquet\"\n            wrapper_script = textwrap.dedent(\"\"\"\\\n                import warnings\n                warnings.filterwarnings('ignore')\n\n                # --- user code ---\n                {user_code}\n\n                # --- serialise output ---\n                import pandas as _pd\n                _out = {output_variable}\n                if not isinstance(_out, _pd.DataFrame):\n                    raise TypeError(\n                        '{output_variable} is not a DataFrame '\n                        f'(type: {{type(_out).__name__}})'\n                    )\n                _out.to_parquet('{output_parquet}', index=False)\n\n                print(\"__DOCKER_SANDBOX_OK__\")\n            \"\"\").format(\n                user_code=code,\n                output_variable=output_variable,\n                output_parquet=output_parquet,\n            )\n\n            script_path = os.path.join(tmpdir, \"run.py\")\n            with open(script_path, \"w\") as f:\n                f.write(wrapper_script)\n\n            # ---- assemble docker command --------------------------------------\n            docker_cmd: list[str] = [\n                \"docker\", \"run\",\n                \"--rm\",\n                \"--memory\", \"512m\",\n                \"--cpus\", \"1\",\n                \"--pids-limit\", \"256\",\n            ]\n\n            abs_ws = os.path.abspath(workspace_path)\n            docker_cmd += [\"-v\", f\"{abs_ws}:/sandbox/workdir:ro\"]\n            docker_cmd += [\"-v\", f\"{output_dir}:/sandbox/outputs:rw\"]\n            docker_cmd += [\"-v\", f\"{script_path}:/sandbox/run.py:ro\"]\n            docker_cmd += [\"-w\", \"/sandbox/workdir\"]\n            docker_cmd += [self.docker_image]\n            docker_cmd += [\"python\", \"/sandbox/run.py\"]\n\n            # ---- execute ------------------------------------------------------\n            try:\n                proc = subprocess.run(\n                    docker_cmd,\n                    capture_output=True,\n                    timeout=self.timeout,\n                    text=True,\n                )\n            except subprocess.TimeoutExpired:\n                self._cleanup(tmpdir)\n                return {\n                    \"status\": \"error\",\n                    \"content\": f\"Docker sandbox execution timed out after {self.timeout}s\",\n                }\n            except FileNotFoundError:\n                self._cleanup(tmpdir)\n                return {\n                    \"status\": \"error\",\n                    \"content\": (\n                        \"Docker is not installed or not on the PATH. \"\n                        \"Install Docker to use the docker sandbox.\"\n                    ),\n                }\n            except Exception as exc:\n                self._cleanup(tmpdir)\n                return {\n                    \"status\": \"error\",\n                    \"content\": f\"Failed to start Docker container: {exc}\",\n                }\n\n            stdout = proc.stdout or \"\"\n            stderr = proc.stderr or \"\"\n\n            if proc.returncode != 0 or \"__DOCKER_SANDBOX_OK__\" not in stdout:\n                self._cleanup(tmpdir)\n                err_detail = stderr.strip() or stdout.strip() or \"Unknown error\"\n                return {\n                    \"status\": \"error\",\n                    \"content\": f\"Docker sandbox execution failed:\\n{err_detail}\",\n                }\n\n            # ---- read back output ---------------------------------------------\n            # Defensive: ensure the filename stays inside output_dir even if\n            # output_variable somehow contains path separators.\n            safe_name = secure_filename(output_variable)\n            if not safe_name:\n                self._cleanup(tmpdir)\n                return {\n                    \"status\": \"error\",\n                    \"content\": \"Invalid output_variable\",\n                }\n            parquet_out = os.path.join(output_dir, f\"{safe_name}.parquet\")\n            if not os.path.exists(parquet_out):\n                self._cleanup(tmpdir)\n                return {\n                    \"status\": \"error\",\n                    \"content\": f'Output variable \"{output_variable}\" was not produced',\n                }\n\n            try:\n                output_df = pd.read_parquet(parquet_out)\n            except Exception as exc:\n                self._cleanup(tmpdir)\n                return {\n                    \"status\": \"error\",\n                    \"content\": f\"Failed to read output parquet: {exc}\",\n                }\n\n            self._cleanup(tmpdir)\n            return {\"status\": \"ok\", \"content\": output_df}\n\n    # ------------------------------------------------------------------\n    # Internal helpers\n    # ------------------------------------------------------------------\n\n    @staticmethod\n    def _cleanup(tmpdir: str) -> None:\n        \"\"\"Best-effort recursive removal of *tmpdir*.\"\"\"\n        try:\n            shutil.rmtree(tmpdir, ignore_errors=True)\n        except Exception:\n            pass\n"
  },
  {
    "path": "py-src/data_formulator/sandbox/local_sandbox.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"Local sandbox -- executes Python code in a persistent warm subprocess.\n\nThe script runs with the workspace directory as its working directory\nso user scripts access files via e.g. ``pd.read_csv(\"sample.csv\")``.\n\"\"\"\n\nimport atexit\nimport logging\nimport os\nimport threading\nimport warnings\nfrom multiprocessing import Pipe, Process\nfrom sys import addaudithook\n\nimport pandas as pd\n\nfrom .base import Sandbox\n\nlogger = logging.getLogger(__name__)\n\n\n# ---------------------------------------------------------------------------\n# Persistent warm worker\n# ---------------------------------------------------------------------------\n\ndef _warm_worker_loop(conn):\n    \"\"\"Long-lived child process that pre-imports heavy libraries then\n    waits for code to execute.\n\n    Protocol (over *conn*):\n        Host -> worker:  (code: str, allowed_objects: dict)\n        Worker -> host:   {\"status\": \"ok\", \"allowed_objects\": {...}}\n                      or {\"status\": \"error\", \"error_message\": \"...\"}\n        Host -> worker:  None   -> terminate\n    \"\"\"\n    warnings.filterwarnings(\"ignore\")\n\n    # Install audit hooks once -- they persist for the process lifetime.\n    def block_mischief(event, arg):\n        if type(event) != str:\n            raise RuntimeError(\"bad audit event\")\n        # Block file writes (only allow reading)\n        if event == \"open\" and type(arg[1]) == str and arg[1] not in (\"r\", \"rb\"):\n            raise IOError(\"file write forbidden\")\n        # Block dangerous filesystem / process operations\n        _blocked_prefixes = (\"subprocess\", \"shutil\", \"winreg\", \"webbrowser\")\n        if event.split(\".\")[0] in _blocked_prefixes:\n            raise IOError(\"potentially dangerous, filesystem-accessing functions forbidden\")\n        # Block network access — code should only transform data, not\n        # make outbound connections (prevents data exfiltration).\n        if event in (\"socket.connect\", \"socket.bind\", \"socket.sendto\",\n                      \"socket.sendmsg\", \"socket.getaddrinfo\"):\n            raise IOError(\"network access forbidden in sandbox\")\n        # Block ctypes / dynamic library loading (could bypass audit hooks)\n        if event in (\"ctypes.dlopen\", \"ctypes.dlsym\", \"ctypes.set_errno\"):\n            raise IOError(\"ctypes access forbidden in sandbox\")\n        # Block import of dangerous modules\n        if event == \"import\" and type(arg[0]) == str:\n            _blocked_modules = (\"subprocess\", \"shutil\", \"socket\", \"http\",\n                                \"urllib\", \"requests\", \"ctypes\", \"multiprocessing\",\n                                \"signal\", \"resource\")\n            mod_name = arg[0].split(\".\")[0]\n            if mod_name in _blocked_modules:\n                raise ImportError(f\"import of '{mod_name}' is forbidden in sandbox\")\n\n    addaudithook(block_mischief)\n    del block_mischief\n\n    # Pre-import heavy libraries so first call is fast.\n    # These stay in sys.modules for the lifetime of the worker.\n    try:\n        import numpy  # noqa: F401\n        import pandas  # noqa: F401\n        import duckdb  # noqa: F401\n    except ImportError:\n        pass\n\n    while True:\n        try:\n            msg = conn.recv()\n        except (EOFError, OSError):\n            break\n\n        if msg is None:\n            break\n\n        code, allowed_objects = msg\n\n        namespace = {**allowed_objects}\n        try:\n            # Security: code is HMAC-SHA256 signed by the server when first generated\n            # by AI agents (see code_signing.py). The /refresh-derived-data endpoint\n            # verifies the signature before forwarding code here, ensuring only\n            # server-originated code is executed. Additional audit hooks above block\n            # file writes, network access, subprocess spawning, and dangerous imports.\n            exec(code, namespace)  # nosec  # codeql[py/code-injection]\n        except Exception as err:\n            conn.send({\"status\": \"error\", \"error_message\": f\"Error: {type(err).__name__} - {err}\"})\n            continue\n\n        conn.send({\"status\": \"ok\", \"allowed_objects\": {k: namespace[k] for k in allowed_objects}})\n\n    conn.close()\n\n\nclass _WarmWorkerPool:\n    \"\"\"Pool of persistent child processes with pre-imported libraries.\n\n    Workers are forked once and reuse the same process for multiple\n    calls, avoiding the ~600ms pandas/numpy import overhead each time.\n    A simple LIFO stack ensures thread-safe checkout/return.\n    \"\"\"\n\n    def __init__(self, size: int = 2):\n        self._size = size\n        self._lock = threading.Lock()\n        self._available: list[tuple[Process, object]] = []\n        self._all: list[tuple[Process, object]] = []\n        self._closed = False\n        atexit.register(self.shutdown)\n\n    def _spawn(self) -> tuple[Process, object]:\n        parent_conn, child_conn = Pipe()\n        p = Process(target=_warm_worker_loop, args=(child_conn,), daemon=True)\n        p.start()\n        return p, parent_conn\n\n    def acquire(self) -> tuple[Process, object]:\n        \"\"\"Get a warm worker (process, conn). Spawns one if needed.\"\"\"\n        with self._lock:\n            while self._available:\n                proc, conn = self._available.pop()\n                if proc.is_alive():\n                    return proc, conn\n                # Dead worker -- discard and try next\n            # No available workers -- spawn a new one (up to pool size is advisory)\n            pair = self._spawn()\n            self._all.append(pair)\n            return pair\n\n    def release(self, proc: Process, conn) -> None:\n        \"\"\"Return a worker to the pool for reuse.\"\"\"\n        with self._lock:\n            if not self._closed and proc.is_alive():\n                self._available.append((proc, conn))\n\n    def discard(self, proc: Process, conn) -> None:\n        \"\"\"Discard a broken worker (don't put it back).\"\"\"\n        try:\n            conn.send(None)\n        except Exception:\n            pass\n        try:\n            proc.terminate()\n        except Exception:\n            pass\n\n    def shutdown(self) -> None:\n        with self._lock:\n            self._closed = True\n            all_workers = list(self._all)\n            self._available.clear()\n            self._all.clear()\n\n        for proc, conn in all_workers:\n            try:\n                conn.send(None)\n            except Exception:\n                pass\n            try:\n                proc.join(timeout=2)\n            except Exception:\n                pass\n            if proc.is_alive():\n                proc.terminate()\n\n\n# Module-level pool -- shared by all LocalSandbox instances using subprocess mode.\n_worker_pool = _WarmWorkerPool(size=2)\n\n\nclass LocalSandbox(Sandbox):\n    \"\"\"Execute Python code in a persistent warm subprocess.\n\n    Uses a pool of pre-warmed child processes with pandas/numpy/duckdb\n    already imported, giving ~1 ms execution overhead per call.\n    Audit hooks in the child block file writes and dangerous operations.\n    \"\"\"\n\n    # ------------------------------------------------------------------\n    # Public interface\n    # ------------------------------------------------------------------\n\n    def run_python_code(\n        self,\n        code: str,\n        workspace,\n        output_variable: str,\n    ) -> dict:\n        \"\"\"Execute *code* and return the result DataFrame.\n\n        The script runs with the workspace directory as its working\n        directory so scripts access data files via e.g.\n        ``pd.read_csv(\"sample.csv\")``.\n\n        Returns\n        -------\n        dict\n            ``{'status': 'ok', 'content': DataFrame}``  on success, or\n            ``{'status': 'error', 'content': str}``    on failure.\n        \"\"\"\n        with workspace.local_dir() as local_path:\n            workspace_path = os.path.abspath(str(local_path))\n\n            # Prepend a chdir so the script runs inside the workspace directory.\n            ws_escaped = workspace_path.replace(\"\\\\\", \"\\\\\\\\\").replace(\"'\", \"\\\\'\")\n            chdir_preamble = f\"import os as _sandbox_os; _sandbox_os.chdir('{ws_escaped}')\\n\"\n            code_with_chdir = chdir_preamble + code\n\n            try:\n                allowed_objects = {output_variable: None}\n                result = self._run_in_warm_subprocess(code_with_chdir, allowed_objects)\n\n                if result[\"status\"] == \"ok\":\n                    output_df = result[\"allowed_objects\"][output_variable]\n                    if not isinstance(output_df, pd.DataFrame):\n                        return {\n                            \"status\": \"error\",\n                            \"content\": (\n                                f'Output variable \"{output_variable}\" is not a '\n                                f\"DataFrame (type: {type(output_df).__name__})\"\n                            ),\n                        }\n                    return {\"status\": \"ok\", \"content\": output_df}\n                else:\n                    return result\n\n            except Exception as e:\n                return {\n                    \"status\": \"error\",\n                    \"content\": f\"Error during execution setup: {type(e).__name__} - {e}\",\n                }\n\n    # ------------------------------------------------------------------\n    # Warm subprocess execution (persistent worker pool)\n    # ------------------------------------------------------------------\n\n    # Maximum wall-clock time for a single code execution (seconds).\n    EXECUTION_TIMEOUT = int(os.environ.get(\"DF_SANDBOX_TIMEOUT\", \"120\"))\n\n    @staticmethod\n    def _run_in_warm_subprocess(code, allowed_objects):\n        \"\"\"Send code to a warm worker from the pool, return the result.\"\"\"\n        proc, conn = _worker_pool.acquire()\n        try:\n            conn.send((code, {**allowed_objects}))\n            # Enforce a wall-clock timeout to prevent runaway code\n            if conn.poll(timeout=LocalSandbox.EXECUTION_TIMEOUT):\n                result = conn.recv()\n            else:\n                # Timed out — kill and discard the worker\n                _worker_pool.discard(proc, conn)\n                return {\n                    \"status\": \"error\",\n                    \"error_message\": (\n                        f\"Code execution timed out after \"\n                        f\"{LocalSandbox.EXECUTION_TIMEOUT}s\"\n                    ),\n                }\n            _worker_pool.release(proc, conn)\n            return result\n        except Exception as e:\n            _worker_pool.discard(proc, conn)\n            return {\"status\": \"error\", \"error_message\": f\"Error: worker communication failed - {e}\"}\n\n\n"
  },
  {
    "path": "py-src/data_formulator/sandbox/not_a_sandbox.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"Unsandboxed main-process executor -- for benchmarking only.\n\nThis runs user code directly in the main process with no isolation.\nIt is NOT exposed as a CLI option and should only be used to measure\nthe raw execution overhead baseline in benchmarks.\n\"\"\"\n\nimport os\nimport warnings\n\nimport pandas as pd\n\nfrom .base import Sandbox\n\n\nclass NotASandbox(Sandbox):\n    \"\"\"Execute Python code directly in the main process (no isolation).\n\n    For benchmarking only -- measures raw exec() overhead without any\n    subprocess or container overhead.  No security restrictions are\n    applied.\n    \"\"\"\n\n    def run_python_code(\n        self,\n        code: str,\n        workspace,\n        output_variable: str,\n    ) -> dict:\n        with workspace.local_dir() as local_path:\n            workspace_path = os.path.abspath(str(local_path))\n            original_cwd = os.getcwd()\n\n            try:\n                os.chdir(workspace_path)\n                warnings.filterwarnings(\"ignore\")\n\n                namespace = {output_variable: None}\n                # Security: this sandbox has NO isolation and is for benchmarking only.\n                # In production, use LocalSandbox or DockerSandbox. Code executed here\n                # is HMAC-SHA256 signed at generation time (see code_signing.py) and\n                # verified by the /refresh-derived-data endpoint before reaching exec().\n                exec(code, namespace)  # nosec  # codeql[py/code-injection]\n\n                output_df = namespace[output_variable]\n                if not isinstance(output_df, pd.DataFrame):\n                    return {\n                        \"status\": \"error\",\n                        \"content\": (\n                            f'Output variable \"{output_variable}\" is not a '\n                            f\"DataFrame (type: {type(output_df).__name__})\"\n                        ),\n                    }\n                return {\"status\": \"ok\", \"content\": output_df}\n\n            except Exception as e:\n                return {\n                    \"status\": \"error\",\n                    \"content\": f\"Error: {type(e).__name__} - {e}\",\n                }\n            finally:\n                os.chdir(original_cwd)\n"
  },
  {
    "path": "py-src/data_formulator/session_routes.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nSession save / load routes.\n\nDelegates all storage operations to the workspace object, which handles\nboth local filesystem and Azure Blob backends transparently.\n\"\"\"\n\nimport io\nimport json\nimport logging\nfrom datetime import datetime\n\nfrom flask import Blueprint, request, jsonify, send_file, current_app\n\nfrom data_formulator.auth import get_identity_id\nfrom data_formulator.workspace_factory import get_workspace\n\nlogger = logging.getLogger(__name__)\n\n\ndef _disk_persistence_enabled() -> bool:\n    \"\"\"Return True unless --disable-database was passed (no disk persistence).\"\"\"\n    try:\n        return not current_app.config.get('CLI_ARGS', {}).get('disable_database', False)\n    except RuntimeError:\n        return True\n\nsession_bp = Blueprint(\"sessions\", __name__, url_prefix=\"/api/sessions\")\n\n# Fields that must never be persisted (contain secrets / ephemeral info)\n_SENSITIVE_FIELDS = frozenset([\n    \"models\",\n    \"selectedModelId\",\n    \"testedModels\",\n    \"dataLoaderConnectParams\",\n    \"identity\",\n    \"agentRules\",\n    \"serverConfig\",\n])\n\n\ndef _strip_sensitive(state: dict) -> dict:\n    \"\"\"Return a copy of *state* with sensitive / ephemeral fields removed.\"\"\"\n    return {k: v for k, v in state.items() if k not in _SENSITIVE_FIELDS}\n\n\n# ---------------------------------------------------------------------------\n# Routes\n# ---------------------------------------------------------------------------\n\n@session_bp.route(\"/save\", methods=[\"POST\"])\ndef save_session():\n    if not _disk_persistence_enabled():\n        return jsonify(status=\"error\", message=\"Session save is disabled (no disk persistence)\"), 403\n\n    data = request.get_json(force=True)\n    name: str = data.get(\"name\", \"\").strip()\n    state: dict = data.get(\"state\")\n\n    if not name:\n        return jsonify(status=\"error\", message=\"Session name is required\"), 400\n    if state is None:\n        return jsonify(status=\"error\", message=\"State payload is required\"), 400\n\n    identity_id = get_identity_id()\n    ws = get_workspace(identity_id)\n    clean_state = _strip_sensitive(state)\n    saved_at = ws.save_session(name, clean_state)\n\n    return jsonify(status=\"ok\", name=name, saved_at=saved_at)\n\n\n@session_bp.route(\"/list\", methods=[\"GET\"])\ndef list_sessions():\n    if not _disk_persistence_enabled():\n        return jsonify(status=\"ok\", sessions=[])\n\n    identity_id = get_identity_id()\n    ws = get_workspace(identity_id)\n    return jsonify(status=\"ok\", sessions=ws.list_sessions())\n\n\n@session_bp.route(\"/load\", methods=[\"POST\"])\ndef load_session():\n    if not _disk_persistence_enabled():\n        return jsonify(status=\"error\", message=\"Session load is disabled (no disk persistence)\"), 403\n\n    data = request.get_json(force=True)\n    name: str = data.get(\"name\", \"\").strip()\n    if not name:\n        return jsonify(status=\"error\", message=\"Session name is required\"), 400\n\n    identity_id = get_identity_id()\n    ws = get_workspace(identity_id)\n    state = ws.load_session(name)\n\n    if state is None:\n        return jsonify(status=\"error\", message=f\"Session '{name}' not found\"), 404\n\n    return jsonify(status=\"ok\", name=name, state=state)\n\n\n@session_bp.route(\"/delete\", methods=[\"POST\"])\ndef delete_session():\n    if not _disk_persistence_enabled():\n        return jsonify(status=\"error\", message=\"Session delete is disabled (no disk persistence)\"), 403\n\n    data = request.get_json(force=True)\n    name: str = data.get(\"name\", \"\").strip()\n    if not name:\n        return jsonify(status=\"error\", message=\"Session name is required\"), 400\n\n    identity_id = get_identity_id()\n    ws = get_workspace(identity_id)\n\n    if not ws.delete_session(name):\n        return jsonify(status=\"error\", message=f\"Session '{name}' not found\"), 404\n\n    return jsonify(status=\"ok\", name=name)\n\n\n@session_bp.route(\"/export\", methods=[\"POST\"])\ndef export_session():\n    data = request.get_json(force=True)\n    state: dict = data.get(\"state\")\n    if state is None:\n        return jsonify(status=\"error\", message=\"State payload is required\"), 400\n\n    identity_id = get_identity_id()\n    ws = get_workspace(identity_id)\n    clean_state = _strip_sensitive(state)\n    buf = ws.export_session_zip(clean_state)\n\n    filename = f\"df_session_{datetime.now().strftime('%Y%m%d_%H%M%S')}.dfsession\"\n    return send_file(buf, mimetype=\"application/zip\", as_attachment=True, download_name=filename)\n\n\n@session_bp.route(\"/import\", methods=[\"POST\"])\ndef import_session():\n    if \"file\" not in request.files:\n        return jsonify(status=\"error\", message=\"No file uploaded\"), 400\n\n    file = request.files[\"file\"]\n    try:\n        identity_id = get_identity_id()\n        ws = get_workspace(identity_id)\n        state = ws.import_session_zip(io.BytesIO(file.read()))\n        return jsonify(status=\"ok\", state=state)\n    except ValueError as e:\n        return jsonify(status=\"error\", message=str(e)), 400\n    except Exception as e:\n        logger.error(f\"Error importing session: {e}\")\n        return jsonify(status=\"error\", message=str(e)), 400\n"
  },
  {
    "path": "py-src/data_formulator/tables_routes.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\nimport logging\nimport sys\nimport os\nimport mimetypes\nmimetypes.add_type('application/javascript', '.js')\nmimetypes.add_type('application/javascript', '.mjs')\nimport json\nimport traceback\nfrom flask import request, jsonify, Blueprint, Response\nimport pandas as pd\nfrom pathlib import Path\nfrom werkzeug.utils import secure_filename\n\nfrom data_formulator.data_loader import DATA_LOADERS\nfrom data_formulator.auth import get_identity_id\nfrom data_formulator.datalake.workspace import Workspace\nfrom data_formulator.workspace_factory import get_workspace as _create_workspace\nfrom data_formulator.datalake.parquet_utils import sanitize_table_name as parquet_sanitize_table_name\nfrom data_formulator.datalake.file_manager import save_uploaded_file, is_supported_file\nfrom data_formulator.datalake.metadata import TableMetadata as DatalakeTableMetadata\n\nimport re\n\n# Get logger for this module (logging config done in app.py)\nlogger = logging.getLogger(__name__)\n\nimport os\n\ntables_bp = Blueprint('tables', __name__, url_prefix='/api/tables')\n\n\ndef _get_workspace():\n    \"\"\"Get workspace for the current identity.\"\"\"\n    return _create_workspace(get_identity_id())\n\n\n# Row-count threshold above which we use DuckDB for parquet tables\n# (avoids loading the entire file into memory via pandas).\n_LARGE_TABLE_THRESHOLD = 100_000\n\n\ndef _should_use_duckdb(workspace, table_name: str) -> bool:\n    \"\"\"Return True if the table is a large parquet file that benefits from DuckDB.\n\n    Small parquet tables are faster to handle with pandas (avoids DuckDB\n    connection overhead and repeated YAML reads).\n    \"\"\"\n    meta = workspace.get_table_metadata(table_name)\n    if meta is None or meta.file_type != \"parquet\":\n        return False\n    row_count = meta.row_count or 0\n    return row_count > _LARGE_TABLE_THRESHOLD\n\n\ndef _quote_duckdb(col: str) -> str:\n    \"\"\"Quote identifier for DuckDB (double quotes, escape internal quotes).\"\"\"\n    return '\"' + str(col).replace('\"', '\"\"') + '\"'\n\n\ndef _dedup_dataframe_columns(df: pd.DataFrame) -> pd.DataFrame:\n    \"\"\"Remove duplicate columns from a DataFrame, keeping the first occurrence.\"\"\"\n    if df.columns.duplicated().any():\n        return df.loc[:, ~df.columns.duplicated()]\n    return df\n\n\ndef _dedup_list(items: list) -> list:\n    \"\"\"Remove duplicates from a list while preserving order.\"\"\"\n    return list(dict.fromkeys(items))\n\n\ndef _build_parquet_sample_sql(\n    columns: list[str],\n    aggregate_fields_and_functions: list,\n    select_fields: list,\n    method: str,\n    order_by_fields: list,\n    sample_size: int,\n) -> tuple[str, str]:\n    \"\"\"\n    Build DuckDB SQL for sampling (and optional aggregation) over parquet.\n    Returns (main_sql, count_sql) where each contains {parquet} placeholder.\n    \"\"\"\n    valid_agg = [(f, fn) for (f, fn) in aggregate_fields_and_functions if f is None or f in columns]\n    valid_select = _dedup_list([f for f in select_fields if f in columns])\n    valid_order = [f for f in order_by_fields if f in columns]\n\n    if valid_agg:\n        select_parts = []\n        for field, function in valid_agg:\n            fn = function.lower()\n            if field is None and fn == \"count\":\n                select_parts.append(\"COUNT(*) AS _count\")\n            elif field in columns:\n                q = _quote_duckdb(field)\n                if fn == \"count\":\n                    select_parts.append(f\"COUNT({q}) AS _count\")\n                elif fn in (\"avg\", \"average\", \"mean\"):\n                    select_parts.append(f\"AVG({q}) AS {_quote_duckdb(field + '_' + function)}\")\n                elif fn == \"sum\":\n                    select_parts.append(f\"SUM({q}) AS {_quote_duckdb(field + '_sum')}\")\n                elif fn == \"min\":\n                    select_parts.append(f\"MIN({q}) AS {_quote_duckdb(field + '_min')}\")\n                elif fn == \"max\":\n                    select_parts.append(f\"MAX({q}) AS {_quote_duckdb(field + '_max')}\")\n        for f in valid_select:\n            select_parts.append(f\"t.{_quote_duckdb(f)}\")\n        group_cols = valid_select\n        group_by = f\" GROUP BY {', '.join('t.' + _quote_duckdb(c) for c in group_cols)}\" if group_cols else \"\"\n        inner = f\"SELECT {', '.join(select_parts)} FROM {{parquet}} AS t{group_by}\"\n        count_sql = f\"SELECT COUNT(*) FROM ({inner}) AS sub\"\n        if method == \"random\":\n            order_by = \" ORDER BY RANDOM()\"\n        elif method == \"head\" and valid_order:\n            order_by = \" ORDER BY \" + \", \".join(f\"sub.{_quote_duckdb(c)} ASC\" for c in valid_order)\n        elif method == \"bottom\" and valid_order:\n            order_by = \" ORDER BY \" + \", \".join(f\"sub.{_quote_duckdb(c)} DESC\" for c in valid_order)\n        else:\n            order_by = \"\"\n        main_sql = f\"SELECT * FROM ({inner}) AS sub{order_by} LIMIT {sample_size}\"\n        return main_sql, count_sql\n\n    count_sql = \"SELECT COUNT(*) FROM {parquet} AS t\"\n    if method == \"random\":\n        order_by = \" ORDER BY RANDOM()\"\n    elif method == \"head\" and valid_order:\n        order_by = \" ORDER BY \" + \", \".join(f\"t.{_quote_duckdb(c)} ASC\" for c in valid_order)\n    elif method == \"bottom\" and valid_order:\n        order_by = \" ORDER BY \" + \", \".join(f\"t.{_quote_duckdb(c)} DESC\" for c in valid_order)\n    else:\n        order_by = \"\"\n    if valid_select:\n        select_list = \", \".join(f\"t.{_quote_duckdb(c)}\" for c in valid_select)\n        main_sql = f\"SELECT {select_list} FROM {{parquet}} AS t{order_by} LIMIT {sample_size}\"\n    else:\n        main_sql = f\"SELECT * FROM {{parquet}} AS t{order_by} LIMIT {sample_size}\"\n    return main_sql, count_sql\n\n\ndef _table_metadata_to_source_metadata(meta: DatalakeTableMetadata) -> dict | None:\n    \"\"\"Convert workspace TableMetadata to API source_metadata dict (for refresh).\"\"\"\n    if meta.loader_type is None and meta.loader_params is None:\n        return None\n    return {\n        \"table_name\": meta.name,\n        \"data_loader_type\": meta.loader_type or \"\",\n        \"data_loader_params\": meta.loader_params or {},\n        \"source_table_name\": meta.source_table,\n        \"source_query\": meta.source_query,\n        \"last_refreshed\": meta.last_synced.isoformat() if meta.last_synced else None,\n        \"content_hash\": meta.content_hash,\n    }\n\n\n@tables_bp.route('/open-workspace', methods=['POST'])\ndef open_workspace():\n    \"\"\"Open the Data Formulator home directory in the system file manager.\"\"\"\n    from flask import current_app\n    from data_formulator.datalake.workspace import get_data_formulator_home\n    import subprocess, platform\n\n    if current_app.config.get('CLI_ARGS', {}).get('disable_database', False):\n        return jsonify(status=\"error\", message=\"Workspace access is disabled\"), 403\n\n    try:\n        home_path = str(get_data_formulator_home())\n        # Ensure directory exists\n        Path(home_path).mkdir(parents=True, exist_ok=True)\n        system = platform.system()\n        if system == \"Darwin\":\n            subprocess.Popen([\"open\", home_path])\n        elif system == \"Windows\":\n            subprocess.Popen([\"explorer\", home_path])\n        else:\n            subprocess.Popen([\"xdg-open\", home_path])\n        return jsonify(status=\"ok\", path=home_path)\n    except Exception as e:\n        logger.error(f\"Failed to open workspace: {e}\")\n        return jsonify(status=\"error\", message=str(e)), 500\n\n\n@tables_bp.route('/list-tables', methods=['GET'])\ndef list_tables():\n    \"\"\"List all tables in the current workspace (datalake).\"\"\"\n    try:\n        workspace = _get_workspace()\n        result = []\n        for table_name in workspace.list_tables():\n            try:\n                meta = workspace.get_table_metadata(table_name)\n                if meta is None:\n                    continue\n                columns = [{\"name\": c.name, \"type\": c.dtype} for c in (meta.columns or [])]\n                if not columns and meta.file_type == \"parquet\":\n                    try:\n                        schema_info = workspace.get_parquet_schema(table_name)\n                        columns = [{\"name\": c[\"name\"], \"type\": c[\"type\"]} for c in schema_info.get(\"columns\", [])]\n                    except Exception:\n                        pass\n                row_count = meta.row_count\n                if row_count is None and meta.file_type == \"parquet\":\n                    try:\n                        schema_info = workspace.get_parquet_schema(table_name)\n                        row_count = schema_info.get(\"num_rows\", 0) or 0\n                    except Exception:\n                        row_count = 0\n                if row_count is None:\n                    row_count = 0\n                sample_rows = []\n                if row_count > 0:\n                    try:\n                        if _should_use_duckdb(workspace, table_name):\n                            df = workspace.run_parquet_sql(table_name, \"SELECT * FROM {parquet} AS t LIMIT 1000\")\n                        else:\n                            df = workspace.read_data_as_df(table_name)\n                            df = df.head(1000)\n                        df = _dedup_dataframe_columns(df)\n                        sample_rows = json.loads(df.to_json(orient='records', date_format='iso'))\n                    except Exception:\n                        pass\n                source_metadata = _table_metadata_to_source_metadata(meta)\n                result.append({\n                    \"name\": table_name,\n                    \"columns\": columns,\n                    \"row_count\": row_count,\n                    \"sample_rows\": sample_rows,\n                    \"view_source\": None,\n                    \"source_metadata\": source_metadata,\n                })\n            except Exception as e:\n                logger.error(f\"Error getting table metadata for {table_name}: {str(e)}\")\n                continue\n        return jsonify({\"status\": \"success\", \"tables\": result})\n    except Exception as e:\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n        \n\ndef _apply_aggregation_and_sample(\n    df: pd.DataFrame,\n    aggregate_fields_and_functions: list,\n    select_fields: list,\n    method: str,\n    order_by_fields: list,\n    sample_size: int,\n) -> tuple[pd.DataFrame, int]:\n    \"\"\"\n    Apply aggregation (optional), then sample with ordering.\n    Returns (sampled_df, total_row_count_after_aggregation).\n    \"\"\"\n    columns = list(df.columns)\n    valid_agg = [\n        (f, fn) for (f, fn) in aggregate_fields_and_functions\n        if f is None or f in columns\n    ]\n    valid_select = _dedup_list([f for f in select_fields if f in columns])\n    valid_order = [f for f in order_by_fields if f in columns]\n\n    if valid_agg:\n        group_cols = valid_select\n        agg_spec = {}\n        for field, function in valid_agg:\n            fn = function.lower()\n            if field is None and fn == \"count\":\n                agg_spec[\"_count\"] = (\"__size__\", \"size\")\n            elif field in columns:\n                if fn == \"count\":\n                    agg_spec[\"_count\"] = (field, \"count\")\n                elif fn in (\"avg\", \"average\", \"mean\"):\n                    agg_spec[f\"{field}_{function}\"] = (field, \"mean\")\n                elif fn == \"sum\":\n                    agg_spec[f\"{field}_sum\"] = (field, \"sum\")\n                elif fn == \"min\":\n                    agg_spec[f\"{field}_min\"] = (field, \"min\")\n                elif fn == \"max\":\n                    agg_spec[f\"{field}_max\"] = (field, \"max\")\n        if \"_count\" in agg_spec and agg_spec[\"_count\"] == (\"__size__\", \"size\"):\n            df = df.assign(__size__=1)\n            agg_spec[\"_count\"] = (\"__size__\", \"count\")\n        if group_cols:\n            df_agg = df.groupby(group_cols, dropna=False).agg(**{k: (c, f) for k, (c, f) in agg_spec.items()}).reset_index()\n        else:\n            df_agg = pd.DataFrame([{k: df[c].agg(f) for k, (c, f) in agg_spec.items()}])\n        total_row_count = len(df_agg)\n        work = df_agg\n    else:\n        total_row_count = len(df)\n        work = df[valid_select].copy() if valid_select else df.copy()\n\n    if method == \"random\":\n        work = work.sample(n=min(sample_size, len(work)), random_state=None)\n    elif method == \"head\":\n        work = work.sort_values(by=valid_order, ascending=True).head(sample_size) if valid_order else work.head(sample_size)\n    elif method == \"bottom\":\n        work = work.sort_values(by=valid_order, ascending=False).head(sample_size) if valid_order else work.tail(sample_size).iloc[::-1].reset_index(drop=True)\n    else:\n        work = work.head(sample_size)\n    return work, total_row_count\n\n\n@tables_bp.route('/sample-table', methods=['POST'])\ndef sample_table():\n    \"\"\"Sample a table from the workspace. Uses DuckDB for parquet (no full load).\"\"\"\n    try:\n        data = request.get_json()\n        table_id = data.get('table')\n        sample_size = data.get('size', 1000)\n        aggregate_fields_and_functions = data.get('aggregate_fields_and_functions', [])\n        select_fields = data.get('select_fields', [])\n        method = data.get('method', 'random')\n        order_by_fields = data.get('order_by_fields', [])\n\n        workspace = _get_workspace()\n        if _should_use_duckdb(workspace, table_id):\n            schema_info = workspace.get_parquet_schema(table_id)\n            columns = [c[\"name\"] for c in schema_info.get(\"columns\", [])]\n            main_sql, count_sql = _build_parquet_sample_sql(\n                columns,\n                aggregate_fields_and_functions,\n                select_fields,\n                method,\n                order_by_fields,\n                sample_size,\n            )\n            total_row_count = int(workspace.run_parquet_sql(table_id, count_sql).iloc[0, 0])\n            result_df = workspace.run_parquet_sql(table_id, main_sql)\n        else:\n            df = workspace.read_data_as_df(table_id)\n            result_df, total_row_count = _apply_aggregation_and_sample(\n                df,\n                aggregate_fields_and_functions,\n                select_fields,\n                method,\n                order_by_fields,\n                sample_size,\n            )\n        result_df = _dedup_dataframe_columns(result_df)\n        rows_json = json.loads(result_df.to_json(orient='records', date_format='iso'))\n        return jsonify({\n            \"status\": \"success\",\n            \"rows\": rows_json,\n            \"total_row_count\": total_row_count,\n        })\n    except Exception as e:\n        logger.error(f\"Error sampling table: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n\n@tables_bp.route('/get-table', methods=['GET'])\ndef get_table_data():\n    \"\"\"Get data from a specific table in the workspace. Uses DuckDB for parquet (LIMIT/OFFSET only).\"\"\"\n    try:\n        table_name = request.args.get('table_name')\n        page = int(request.args.get('page', 1))\n        page_size = int(request.args.get('page_size', 100))\n        offset = (page - 1) * page_size\n\n        if not table_name:\n            return jsonify({\"status\": \"error\", \"message\": \"Table name is required\"}), 400\n\n        workspace = _get_workspace()\n        if _should_use_duckdb(workspace, table_name):\n            count_df = workspace.run_parquet_sql(table_name, \"SELECT COUNT(*) FROM {parquet} AS t\")\n            total_rows = int(count_df.iloc[0, 0])\n            page_df = workspace.run_parquet_sql(\n                table_name,\n                f\"SELECT * FROM {{parquet}} AS t LIMIT {page_size} OFFSET {offset}\",\n            )\n            page_df = _dedup_dataframe_columns(page_df)\n            columns = list(page_df.columns)\n            rows = json.loads(page_df.to_json(orient='records', date_format='iso'))\n        else:\n            df = workspace.read_data_as_df(table_name)\n            df = _dedup_dataframe_columns(df)\n            total_rows = len(df)\n            columns = list(df.columns)\n            page_df = df.iloc[offset : offset + page_size]\n            rows = json.loads(page_df.to_json(orient='records', date_format='iso'))\n\n        return jsonify({\n            \"status\": \"success\",\n            \"table_name\": table_name,\n            \"columns\": columns,\n            \"rows\": rows,\n            \"total_rows\": total_rows,\n            \"page\": page,\n            \"page_size\": page_size,\n        })\n    except Exception as e:\n        logger.error(f\"Error getting table data: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n\n@tables_bp.route('/create-table', methods=['POST'])\ndef create_table():\n    \"\"\"Create a new table from uploaded file or raw data in the workspace.\"\"\"\n    try:\n        has_file = 'file' in request.files\n        has_raw_data = 'raw_data' in request.files or 'raw_data' in request.form\n        if not has_file and not has_raw_data:\n            return jsonify({\"status\": \"error\", \"message\": \"No file or raw data provided\"}), 400\n\n        table_name = request.form.get('table_name')\n        if not table_name:\n            return jsonify({\"status\": \"error\", \"message\": \"No table name provided\"}), 400\n\n        workspace = _get_workspace()\n        base_name = parquet_sanitize_table_name(table_name)\n        sanitized_table_name = base_name\n        counter = 1\n        while sanitized_table_name in workspace.list_tables():\n            sanitized_table_name = f\"{base_name}_{counter}\"\n            counter += 1\n\n        if has_file:\n            file = request.files['file']\n            if not file.filename or not is_supported_file(file.filename):\n                return jsonify({\"status\": \"error\", \"message\": \"Unsupported file format\"}), 400\n            safe_name = secure_filename(file.filename)\n            if not safe_name:\n                return jsonify({\"status\": \"error\", \"message\": \"Invalid filename\"}), 400\n            meta = save_uploaded_file(\n                workspace,\n                file.stream,\n                safe_name,\n                table_name=sanitized_table_name,\n                overwrite=False,\n            )\n            sanitized_table_name = meta.name\n            row_count = meta.row_count\n            columns = [c.name for c in (meta.columns or [])]\n            if row_count is None or not columns:\n                df = workspace.read_data_as_df(sanitized_table_name)\n                row_count = len(df)\n                columns = list(df.columns)\n        else:\n            # raw_data can come as a file upload (Blob) or as a form field\n            if 'raw_data' in request.files:\n                raw_data = request.files['raw_data'].read().decode('utf-8')\n            else:\n                raw_data = request.form.get('raw_data')\n            try:\n                df = pd.DataFrame(json.loads(raw_data))\n            except Exception as e:\n                return jsonify({\"status\": \"error\", \"message\": f\"Invalid JSON data: {str(e)}, it must be a list of dictionaries\"}), 400\n            workspace.write_parquet(df, sanitized_table_name)\n            row_count = len(df)\n            columns = list(df.columns)\n\n        return jsonify({\n            \"status\": \"success\",\n            \"table_name\": sanitized_table_name,\n            \"row_count\": row_count,\n            \"columns\": columns,\n            \"original_name\": base_name,\n            \"is_renamed\": base_name != sanitized_table_name,\n        })\n    except Exception as e:\n        logger.error(f\"Error creating table: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n\n\n@tables_bp.route('/sync-table-data', methods=['POST'])\ndef sync_table_data():\n    \"\"\"Update an existing workspace table's parquet with new row data.\n    \n    Used when the frontend has fresher data than the workspace (e.g., from stream refresh)\n    and needs to sync it so sandbox code reads the latest data.\n    \"\"\"\n    try:\n        data = request.get_json()\n        table_name = data.get('table_name')\n        rows = data.get('rows')\n\n        if not table_name:\n            return jsonify({\"status\": \"error\", \"message\": \"table_name is required\"}), 400\n        if rows is None:\n            return jsonify({\"status\": \"error\", \"message\": \"rows is required\"}), 400\n\n        workspace = _get_workspace()\n\n        if table_name not in workspace.list_tables():\n            return jsonify({\"status\": \"error\", \"message\": f\"Table '{table_name}' not found in workspace\"}), 404\n\n        df = pd.DataFrame(rows) if rows else pd.DataFrame()\n        workspace.write_parquet(df, table_name)\n\n        return jsonify({\n            \"status\": \"success\",\n            \"table_name\": table_name,\n            \"row_count\": len(df),\n        })\n    except Exception as e:\n        logger.error(f\"Error syncing table data: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n\n\n@tables_bp.route('/delete-table', methods=['POST'])\ndef drop_table():\n    \"\"\"Drop a table from the workspace.\"\"\"\n    try:\n        data = request.get_json()\n        table_name = data.get('table_name')\n        if not table_name:\n            return jsonify({\"status\": \"error\", \"message\": \"No table name provided\"}), 400\n\n        workspace = _get_workspace()\n        if not workspace.delete_table(table_name):\n            return jsonify({\"status\": \"error\", \"message\": f\"Table '{table_name}' does not exist\"}), 404\n        return jsonify({\"status\": \"success\", \"message\": f\"Table {table_name} dropped\"})\n    except Exception as e:\n        logger.error(f\"Error dropping table: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n\n\n@tables_bp.route('/upload-db-file', methods=['POST'])\ndef upload_db_file():\n    \"\"\"No longer used: storage is workspace/datalake, not DuckDB. Kept for API compatibility.\"\"\"\n    return jsonify({\n        \"status\": \"error\",\n        \"message\": \"Database file upload is no longer supported. Data is stored in the workspace; use create-table with a file or data loaders to add data.\",\n    }), 410\n\n\n@tables_bp.route('/download-db-file', methods=['GET'])\ndef download_db_file():\n    \"\"\"No longer used: storage is workspace/datalake. Kept for API compatibility.\"\"\"\n    return jsonify({\n        \"status\": \"error\",\n        \"message\": \"Database file download is no longer supported. Data lives in the workspace.\",\n    }), 410\n\n\n@tables_bp.route('/reset-db-file', methods=['POST'])\ndef reset_db_file():\n    \"\"\"Reset the workspace for the current session (removes all tables and files).\"\"\"\n    try:\n        workspace = _get_workspace()\n        workspace.cleanup()\n        return jsonify({\"status\": \"success\", \"message\": \"Workspace reset successfully\"})\n    except Exception as e:\n        logger.error(f\"Error resetting workspace: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n\ndef _is_numeric_duckdb_type(col_type: str) -> bool:\n    \"\"\"Return True if DuckDB/parquet type is numeric for min/max/avg.\"\"\"\n    t = (col_type or \"\").upper()\n    return any(\n        t.startswith(k) for k in (\"INT\", \"BIGINT\", \"SMALLINT\", \"TINYINT\", \"DOUBLE\", \"FLOAT\", \"REAL\", \"DECIMAL\", \"NUMERIC\")\n    )\n\n\n@tables_bp.route('/analyze', methods=['POST'])\ndef analyze_table():\n    \"\"\"Get basic statistics about a table in the workspace. Uses DuckDB for parquet (no full load).\"\"\"\n    try:\n        data = request.get_json()\n        table_name = data.get('table_name')\n        if not table_name:\n            return jsonify({\"status\": \"error\", \"message\": \"No table name provided\"}), 400\n\n        workspace = _get_workspace()\n        if _should_use_duckdb(workspace, table_name):\n            schema_info = workspace.get_parquet_schema(table_name)\n            col_infos = schema_info.get(\"columns\", [])\n            stats = []\n            for col_info in col_infos:\n                col_name = col_info[\"name\"]\n                col_type = col_info.get(\"type\", \"\")\n                q = _quote_duckdb(col_name)\n                if _is_numeric_duckdb_type(col_type):\n                    sql = (\n                        f\"SELECT COUNT(*) AS count, COUNT(DISTINCT t.{q}) AS unique_count, \"\n                        f\"COUNT(*) - COUNT(t.{q}) AS null_count, \"\n                        f\"MIN(t.{q}) AS min_val, MAX(t.{q}) AS max_val, AVG(t.{q}) AS avg_val \"\n                        f\"FROM {{parquet}} AS t\"\n                    )\n                    df = workspace.run_parquet_sql(table_name, sql)\n                    row = df.iloc[0]\n                    stats_dict = {\n                        \"count\": int(row[\"count\"]),\n                        \"unique_count\": int(row[\"unique_count\"]),\n                        \"null_count\": int(row[\"null_count\"]),\n                        \"min\": float(row[\"min_val\"]) if row[\"min_val\"] is not None else None,\n                        \"max\": float(row[\"max_val\"]) if row[\"max_val\"] is not None else None,\n                        \"avg\": float(row[\"avg_val\"]) if row[\"avg_val\"] is not None else None,\n                    }\n                else:\n                    sql = (\n                        f\"SELECT COUNT(*) AS count, COUNT(DISTINCT t.{q}) AS unique_count, \"\n                        f\"COUNT(*) - COUNT(t.{q}) AS null_count FROM {{parquet}} AS t\"\n                    )\n                    df = workspace.run_parquet_sql(table_name, sql)\n                    row = df.iloc[0]\n                    stats_dict = {\n                        \"count\": int(row[\"count\"]),\n                        \"unique_count\": int(row[\"unique_count\"]),\n                        \"null_count\": int(row[\"null_count\"]),\n                    }\n                stats.append({\"column\": col_name, \"type\": col_type, \"statistics\": stats_dict})\n        else:\n            df = workspace.read_data_as_df(table_name)\n            stats = []\n            for col_name in df.columns:\n                s = df[col_name]\n                col_type = str(s.dtype)\n                stats_dict = {\n                    \"count\": int(s.count()),\n                    \"unique_count\": int(s.nunique()),\n                    \"null_count\": int(s.isna().sum()),\n                }\n                if pd.api.types.is_numeric_dtype(s):\n                    stats_dict[\"min\"] = float(s.min()) if s.notna().any() else None\n                    stats_dict[\"max\"] = float(s.max()) if s.notna().any() else None\n                    stats_dict[\"avg\"] = float(s.mean()) if s.notna().any() else None\n                stats.append({\"column\": col_name, \"type\": col_type, \"statistics\": stats_dict})\n\n        return jsonify({\"status\": \"success\", \"table_name\": table_name, \"statistics\": stats})\n    except Exception as e:\n        logger.error(f\"Error analyzing table: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n\n\ndef sanitize_table_name(table_name: str) -> str:\n    \"\"\"Sanitize a table name for use in the workspace.\"\"\"\n    return parquet_sanitize_table_name(table_name)\n\ndef sanitize_db_error_message(error: Exception) -> tuple[str, int]:\n    \"\"\"\n    Sanitize error messages before sending to client.\n    Returns a tuple of (sanitized_message, status_code)\n    \"\"\"\n    # Convert error to string\n    error_msg = str(error)\n    \n    # Define patterns for known safe errors\n    safe_error_patterns = {\n        # Database table errors\n        r\"Table.*does not exist\": (error_msg, 404),\n        r\"Table.*already exists\": (error_msg, 409),\n        # Query errors\n        r\"syntax error\": (error_msg, 400),\n        r\"Catalog Error\": (error_msg, 404), \n        r\"Binder Error\": (error_msg, 400),\n        r\"Invalid input syntax\": (error_msg, 400),\n        \n        # File errors\n        r\"No such file\": (error_msg, 404),\n        r\"Permission denied\": (\"Access denied\", 403),\n\n        # Data loader errors\n        r\"Entity ID\": (error_msg, 500),\n        r\"identity\": (\"Identity not found, please refresh the page\", 500),\n    }\n    \n    # Check if error matches any safe pattern\n    for pattern, (safe_msg, status_code) in safe_error_patterns.items():\n        if re.search(pattern, error_msg, re.IGNORECASE):\n            return safe_msg, status_code\n            \n    # Log the full error for debugging\n    logger.error(f\"Unexpected error occurred: {error_msg}\")\n    \n    # Return a generic error message for unknown errors\n    return f\"An unexpected error occurred: {error_msg}\", 500\n\n\n@tables_bp.route('/data-loader/list-data-loaders', methods=['GET'])\ndef data_loader_list_data_loaders():\n    \"\"\"List all available data loaders\"\"\"\n\n    try:\n        return jsonify({\n            \"status\": \"success\",\n            \"data_loaders\": {\n                name: {\n                    \"params\": data_loader.list_params(),\n                    \"auth_instructions\": data_loader.auth_instructions()\n                }\n                for name, data_loader in DATA_LOADERS.items()\n            }\n        })\n    except Exception as e:\n        logger.error(f\"Error listing data loaders: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\n            \"status\": \"error\", \n            \"message\": safe_msg\n        }), status_code\n\n@tables_bp.route('/data-loader/list-tables', methods=['POST'])\ndef data_loader_list_tables():\n    \"\"\"List tables from a data loader (no workspace needed).\"\"\"\n    try:\n        data = request.get_json()\n        data_loader_type = data.get('data_loader_type')\n        data_loader_params = data.get('data_loader_params')\n        table_filter = data.get('table_filter', None)\n\n        if data_loader_type not in DATA_LOADERS:\n            return jsonify({\"status\": \"error\", \"message\": f\"Invalid data loader type. Must be one of: {', '.join(DATA_LOADERS.keys())}\"}), 400\n\n        data_loader = DATA_LOADERS[data_loader_type](data_loader_params)\n        if hasattr(data_loader, 'list_tables') and 'table_filter' in data_loader.list_tables.__code__.co_varnames:\n            tables = data_loader.list_tables(table_filter=table_filter)\n        else:\n            tables = data_loader.list_tables()\n\n        return jsonify({\"status\": \"success\", \"tables\": tables})\n    except Exception as e:\n        logger.error(f\"Error listing tables from data loader: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n\n\n@tables_bp.route('/data-loader/ingest-data', methods=['POST'])\ndef data_loader_ingest_data():\n    \"\"\"Ingest data from a data loader into the workspace as parquet.\"\"\"\n    try:\n        data = request.get_json()\n        data_loader_type = data.get('data_loader_type')\n        data_loader_params = data.get('data_loader_params')\n        table_name = data.get('table_name')\n        import_options = data.get('import_options', {}) or {}\n        row_limit = import_options.get('row_limit', 1000000)\n        sort_columns = import_options.get('sort_columns')\n        sort_order = import_options.get('sort_order', 'asc')\n\n        if data_loader_type not in DATA_LOADERS:\n            return jsonify({\"status\": \"error\", \"message\": f\"Invalid data loader type. Must be one of: {', '.join(DATA_LOADERS.keys())}\"}), 400\n\n        workspace = _get_workspace()\n        data_loader = DATA_LOADERS[data_loader_type](data_loader_params)\n        safe_name = parquet_sanitize_table_name(table_name.split('.')[-1] if '.' in table_name else table_name)\n        meta = data_loader.ingest_to_workspace(\n            workspace,\n            safe_name,\n            source_table=table_name,\n            size=row_limit,\n            sort_columns=sort_columns,\n            sort_order=sort_order,\n        )\n        return jsonify({\n            \"status\": \"success\",\n            \"message\": \"Successfully ingested data from data loader\",\n            \"table_name\": meta.name,\n        })\n    except Exception as e:\n        logger.error(f\"Error ingesting data from data loader: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n\n\n@tables_bp.route('/data-loader/view-query-sample', methods=['POST'])\ndef data_loader_view_query_sample():\n    \"\"\"View a sample of data from a query (fetches from external source, no workspace).\"\"\"\n    try:\n        data = request.get_json()\n        data_loader_type = data.get('data_loader_type')\n        data_loader_params = data.get('data_loader_params')\n        query = data.get('query')\n\n        if data_loader_type not in DATA_LOADERS:\n            return jsonify({\"status\": \"error\", \"message\": f\"Invalid data loader type. Must be one of: {', '.join(DATA_LOADERS.keys())}\"}), 400\n\n        data_loader = DATA_LOADERS[data_loader_type](data_loader_params)\n        if hasattr(data_loader, 'view_query_sample') and callable(getattr(data_loader, 'view_query_sample')):\n            sample = data_loader.view_query_sample(query)\n        else:\n            return jsonify({\n                \"status\": \"error\",\n                \"message\": \"Query sample is only supported for loaders that implement view_query_sample. Use a source table to fetch data.\",\n            }), 400\n        return jsonify({\"status\": \"success\", \"sample\": sample, \"message\": \"Successfully retrieved query sample\"})\n    except Exception as e:\n        logger.error(f\"Error viewing query sample: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"sample\": [], \"message\": safe_msg}), status_code\n\n\n@tables_bp.route('/data-loader/fetch-data', methods=['POST'])\ndef data_loader_fetch_data():\n    \"\"\"Fetch data from an external data loader and return as JSON rows WITHOUT saving to workspace.\n    \n    This is used when storeOnServer=false (local-only / incognito mode).\n    The data is returned directly to the frontend without being persisted as parquet.\n    \"\"\"\n    try:\n        data = request.get_json()\n        data_loader_type = data.get('data_loader_type')\n        data_loader_params = data.get('data_loader_params')\n        table_name = data.get('table_name')\n        row_limit = data.get('row_limit', 10000)\n        sort_columns = data.get('sort_columns')\n        sort_order = data.get('sort_order', 'asc')\n\n        if not data_loader_type or not table_name:\n            return jsonify({\"status\": \"error\", \"message\": \"data_loader_type and table_name are required\"}), 400\n\n        if data_loader_type not in DATA_LOADERS:\n            return jsonify({\"status\": \"error\", \"message\": f\"Invalid data loader type. Must be one of: {', '.join(DATA_LOADERS.keys())}\"}), 400\n\n        data_loader = DATA_LOADERS[data_loader_type](data_loader_params)\n        \n        # Fetch data as DataFrame (not Arrow, since we need JSON output not parquet)\n        df = data_loader.fetch_data_as_dataframe(\n            source_table=table_name,\n            size=row_limit,\n            sort_columns=sort_columns,\n            sort_order=sort_order,\n        )\n        \n        total_row_count = len(df)\n        # Apply row limit\n        if len(df) > row_limit:\n            df = df.head(row_limit)\n        \n        df = _dedup_dataframe_columns(df)\n        rows = json.loads(df.to_json(orient='records', date_format='iso'))\n        columns = [{\"name\": col, \"type\": str(df[col].dtype)} for col in df.columns]\n        \n        return jsonify({\n            \"status\": \"success\",\n            \"rows\": rows,\n            \"columns\": columns,\n            \"total_row_count\": total_row_count,\n            \"row_limit_applied\": row_limit,\n        })\n    except Exception as e:\n        logger.error(f\"Error fetching data from data loader: {str(e)}\")\n        logger.error(traceback.format_exc())\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n\n\n@tables_bp.route('/data-loader/ingest-data-from-query', methods=['POST'])\ndef data_loader_ingest_data_from_query():\n    \"\"\"Ingest data from a query into the workspace as parquet.\"\"\"\n    return jsonify({\n        \"status\": \"error\",\n        \"message\": \"Ingestion from custom query is not supported. Please select a source table to ingest.\",\n    }), 400\n\n\n@tables_bp.route('/data-loader/refresh-table', methods=['POST'])\ndef data_loader_refresh_table():\n    \"\"\"Refresh a table by re-fetching from its source and updating parquet in the workspace.\"\"\"\n    try:\n        data = request.get_json()\n        table_name = data.get('table_name')\n        updated_params = data.get('data_loader_params', {})\n\n        if not table_name:\n            return jsonify({\"status\": \"error\", \"message\": \"table_name is required\"}), 400\n\n        workspace = _get_workspace()\n        meta = workspace.get_table_metadata(table_name)\n        if meta is None:\n            return jsonify({\"status\": \"error\", \"message\": f\"No table '{table_name}' found. Cannot refresh.\"}), 400\n        if not meta.loader_type:\n            return jsonify({\"status\": \"error\", \"message\": f\"No source metadata for table '{table_name}'. Cannot refresh.\"}), 400\n\n        old_content_hash = meta.content_hash\n        data_loader_type = meta.loader_type\n        data_loader_params = {**(meta.loader_params or {}), **updated_params}\n\n        if data_loader_type not in DATA_LOADERS:\n            return jsonify({\"status\": \"error\", \"message\": f\"Unknown data loader type: {data_loader_type}\"}), 400\n\n        data_loader = DATA_LOADERS[data_loader_type](data_loader_params)\n        if meta.source_table:\n            arrow_table = data_loader.fetch_data_as_arrow(source_table=meta.source_table)\n        else:\n            return jsonify({\n                \"status\": \"error\",\n                \"message\": \"Refresh is not supported for tables ingested from a query. Only table-based sources can be refreshed.\",\n            }), 400\n\n        new_meta, data_changed = workspace.refresh_parquet_from_arrow(table_name, arrow_table)\n        return jsonify({\n            \"status\": \"success\",\n            \"message\": f\"Successfully refreshed table '{table_name}'\",\n            \"row_count\": new_meta.row_count,\n            \"content_hash\": new_meta.content_hash,\n            \"data_changed\": data_changed,\n        })\n    except Exception as e:\n        logger.error(f\"Error refreshing table: {str(e)}\")\n        logger.error(traceback.format_exc())\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n\n\n@tables_bp.route('/data-loader/get-table-metadata', methods=['POST'])\ndef data_loader_get_table_metadata():\n    \"\"\"Get source metadata for a specific table from workspace.\"\"\"\n    try:\n        data = request.get_json()\n        table_name = data.get('table_name')\n        if not table_name:\n            return jsonify({\"status\": \"error\", \"message\": \"table_name is required\"}), 400\n\n        workspace = _get_workspace()\n        meta = workspace.get_table_metadata(table_name)\n        metadata = _table_metadata_to_source_metadata(meta) if meta else None\n        return jsonify({\n            \"status\": \"success\",\n            \"metadata\": metadata,\n            \"message\": f\"No metadata found for table '{table_name}'\" if metadata is None else None,\n        })\n    except Exception as e:\n        logger.error(f\"Error getting table metadata: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code\n\n\n@tables_bp.route('/data-loader/list-table-metadata', methods=['GET'])\ndef data_loader_list_table_metadata():\n    \"\"\"Get source metadata for all tables in the workspace.\"\"\"\n    try:\n        workspace = _get_workspace()\n        metadata_list = []\n        for name in workspace.list_tables():\n            meta = workspace.get_table_metadata(name)\n            m = _table_metadata_to_source_metadata(meta) if meta else None\n            if m:\n                metadata_list.append(m)\n        return jsonify({\"status\": \"success\", \"metadata\": metadata_list})\n    except Exception as e:\n        logger.error(f\"Error listing table metadata: {str(e)}\")\n        safe_msg, status_code = sanitize_db_error_message(e)\n        return jsonify({\"status\": \"error\", \"message\": safe_msg}), status_code"
  },
  {
    "path": "py-src/data_formulator/workflows/__init__.py",
    "content": ""
  },
  {
    "path": "py-src/data_formulator/workflows/chart_semantics.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\n=============================================================================\nCHART SEMANTICS — Lightweight type resolution for VL spec assembly\n=============================================================================\n\nProvides semantic-aware type resolution for create_vl_plots.py:\n  - Type registry (maps semantic types → VL encoding types)\n  - VL type resolution (nominal / ordinal / temporal / quantitative)\n  - Ordinal sort order (months, days, quarters)\n\nThis is intentionally minimal.  The TS agents-chart library is the\ncanonical source of truth for formatting, color schemes, tick\nconstraints, domain constraints, and other visual refinements.\nThe Python side focuses on getting the structural type decisions right\n(which directly affect chart shape), and leaves cosmetic details to\ndefaults or the front-end.\n=============================================================================\n\"\"\"\n\nfrom __future__ import annotations\n\nimport re\nimport math\nfrom dataclasses import dataclass\nfrom datetime import datetime, date\nfrom typing import Any, Dict, List, Optional, Tuple\n\n# ---------------------------------------------------------------------------\n# §1  Type Registry  (mirrors type-registry.ts)\n# ---------------------------------------------------------------------------\n\n@dataclass(frozen=True)\nclass TypeRegistryEntry:\n    t0: str               # Top-level family\n    t1: str               # Mid-level category\n    vis_encodings: tuple   # Primary VL types, e.g. ('quantitative',)\n    agg_role: str          # additive | intensive | signed-additive | dimension | identifier\n    domain_shape: str      # open | bounded | fixed | cyclic\n\n\n_UNKNOWN = TypeRegistryEntry('Categorical', 'Entity', ('nominal',), 'dimension', 'open')\n\nTYPE_REGISTRY: Dict[str, TypeRegistryEntry] = {\n    # --- Temporal: DateTime ---\n    'DateTime':    TypeRegistryEntry('Temporal', 'DateTime', ('temporal',), 'dimension', 'open'),\n    'Date':        TypeRegistryEntry('Temporal', 'DateTime', ('temporal',), 'dimension', 'open'),\n    'Time':        TypeRegistryEntry('Temporal', 'DateTime', ('temporal',), 'dimension', 'open'),\n    'Timestamp':   TypeRegistryEntry('Temporal', 'DateTime', ('temporal',), 'dimension', 'open'),\n    # --- Temporal: DateGranule ---\n    'Year':        TypeRegistryEntry('Temporal', 'DateGranule', ('temporal', 'ordinal'), 'dimension', 'open'),\n    'Quarter':     TypeRegistryEntry('Temporal', 'DateGranule', ('ordinal',), 'dimension', 'cyclic'),\n    'Month':       TypeRegistryEntry('Temporal', 'DateGranule', ('ordinal',), 'dimension', 'cyclic'),\n    'Week':        TypeRegistryEntry('Temporal', 'DateGranule', ('ordinal',), 'dimension', 'cyclic'),\n    'Day':         TypeRegistryEntry('Temporal', 'DateGranule', ('ordinal',), 'dimension', 'cyclic'),\n    'Hour':        TypeRegistryEntry('Temporal', 'DateGranule', ('ordinal',), 'dimension', 'cyclic'),\n    'YearMonth':   TypeRegistryEntry('Temporal', 'DateGranule', ('temporal', 'ordinal'), 'dimension', 'open'),\n    'YearQuarter': TypeRegistryEntry('Temporal', 'DateGranule', ('temporal', 'ordinal'), 'dimension', 'open'),\n    'YearWeek':    TypeRegistryEntry('Temporal', 'DateGranule', ('temporal', 'ordinal'), 'dimension', 'open'),\n    'Decade':      TypeRegistryEntry('Temporal', 'DateGranule', ('temporal', 'ordinal'), 'dimension', 'open'),\n    # --- Temporal: Duration ---\n    'Duration':    TypeRegistryEntry('Temporal', 'Duration', ('quantitative',), 'additive', 'open'),\n    # --- Measure: Amount ---\n    'Amount':      TypeRegistryEntry('Measure', 'Amount', ('quantitative',), 'additive', 'open'),\n    'Price':       TypeRegistryEntry('Measure', 'Amount', ('quantitative',), 'intensive', 'open'),\n    'Revenue':     TypeRegistryEntry('Measure', 'Amount', ('quantitative',), 'additive', 'open'),\n    'Cost':        TypeRegistryEntry('Measure', 'Amount', ('quantitative',), 'additive', 'open'),\n    'Currency':    TypeRegistryEntry('Measure', 'Amount', ('quantitative',), 'additive', 'open'),\n    'GDP':         TypeRegistryEntry('Measure', 'Amount', ('quantitative',), 'additive', 'open'),\n    # --- Measure: Physical ---\n    'Quantity':    TypeRegistryEntry('Measure', 'Physical', ('quantitative',), 'additive', 'open'),\n    'Temperature': TypeRegistryEntry('Measure', 'Physical', ('quantitative',), 'intensive', 'open'),\n    # --- Measure: Proportion ---\n    'Percentage':  TypeRegistryEntry('Measure', 'Proportion', ('quantitative',), 'intensive', 'bounded'),\n    # --- Measure: SignedMeasure ---\n    'Profit':              TypeRegistryEntry('Measure', 'SignedMeasure', ('quantitative',), 'signed-additive', 'open'),\n    'PercentageChange':    TypeRegistryEntry('Measure', 'SignedMeasure', ('quantitative',), 'intensive', 'open'),\n    'Sentiment':           TypeRegistryEntry('Measure', 'SignedMeasure', ('quantitative',), 'intensive', 'open'),\n    'Correlation':         TypeRegistryEntry('Measure', 'SignedMeasure', ('quantitative',), 'intensive', 'bounded'),\n    # --- Measure: GenericMeasure ---\n    'Count':       TypeRegistryEntry('Measure', 'GenericMeasure', ('quantitative',), 'additive', 'open'),\n    'Number':      TypeRegistryEntry('Measure', 'GenericMeasure', ('quantitative',), 'additive', 'open'),\n    # --- Discrete ---\n    'Rank':        TypeRegistryEntry('Discrete', 'Rank', ('ordinal',), 'dimension', 'open'),\n    'Score':       TypeRegistryEntry('Discrete', 'Score', ('quantitative', 'ordinal'), 'intensive', 'bounded'),\n    'Rating':      TypeRegistryEntry('Discrete', 'Score', ('quantitative', 'ordinal'), 'intensive', 'bounded'),\n    'Index':       TypeRegistryEntry('Discrete', 'Index', ('ordinal',), 'dimension', 'open'),\n    'ID':          TypeRegistryEntry('Identifier', 'ID', ('nominal',), 'identifier', 'open'),\n    # --- Geographic ---\n    'Country':     TypeRegistryEntry('Categorical', 'GeoPlace', ('nominal',), 'dimension', 'open'),\n    'State':       TypeRegistryEntry('Categorical', 'GeoPlace', ('nominal',), 'dimension', 'open'),\n    'City':        TypeRegistryEntry('Categorical', 'GeoPlace', ('nominal',), 'dimension', 'open'),\n    'Region':      TypeRegistryEntry('Categorical', 'GeoPlace', ('nominal',), 'dimension', 'open'),\n    'Latitude':    TypeRegistryEntry('Measure', 'GeoCoord', ('geographic', 'quantitative'), 'dimension', 'fixed'),\n    'Longitude':   TypeRegistryEntry('Measure', 'GeoCoord', ('geographic', 'quantitative'), 'dimension', 'fixed'),\n    # --- Categorical ---\n    'Category':    TypeRegistryEntry('Categorical', 'Entity', ('nominal',), 'dimension', 'open'),\n    'String':      TypeRegistryEntry('Categorical', 'Entity', ('nominal',), 'dimension', 'open'),\n    'Boolean':     TypeRegistryEntry('Categorical', 'Status', ('nominal',), 'dimension', 'open'),\n    'Status':      TypeRegistryEntry('Categorical', 'Status', ('nominal',), 'dimension', 'open'),\n    'Gender':      TypeRegistryEntry('Categorical', 'Demographic', ('nominal',), 'dimension', 'open'),\n    'AgeGroup':    TypeRegistryEntry('Categorical', 'Range', ('ordinal',), 'dimension', 'open'),\n    'Range':       TypeRegistryEntry('Categorical', 'Range', ('ordinal',), 'dimension', 'open'),\n    'Direction':   TypeRegistryEntry('Categorical', 'Entity', ('nominal',), 'dimension', 'cyclic'),\n    # --- Identifiers ---\n    'Name':        TypeRegistryEntry('Identifier', 'Name', ('nominal',), 'identifier', 'open'),\n    'Label':       TypeRegistryEntry('Identifier', 'Name', ('nominal',), 'identifier', 'open'),\n    'Code':        TypeRegistryEntry('Identifier', 'Code', ('nominal',), 'identifier', 'open'),\n    'Population':  TypeRegistryEntry('Measure', 'Amount', ('quantitative',), 'additive', 'open'),\n}\n\n\ndef get_registry_entry(semantic_type: str) -> TypeRegistryEntry:\n    \"\"\"Look up a type in the registry. Falls back to UNKNOWN.\"\"\"\n    return TYPE_REGISTRY.get(semantic_type, _UNKNOWN)\n\n\ndef is_registered(semantic_type: str) -> bool:\n    return semantic_type in TYPE_REGISTRY\n\n\n# ---------------------------------------------------------------------------\n# §2  Channel Semantics (minimal)\n# ---------------------------------------------------------------------------\n\n@dataclass\nclass ChannelSemantics:\n    \"\"\"Resolved semantic decisions for a single channel.\"\"\"\n    field: str = ''\n    semantic_type: str = ''\n    vl_type: str = 'nominal'      # quantitative | nominal | ordinal | temporal\n    ordinal_sort_order: list[str] | None = None\n\n\n# ---------------------------------------------------------------------------\n# §3  VL Type Resolution\n# ---------------------------------------------------------------------------\n\ndef resolve_vl_type(semantic_type: str, values: List[Any]) -> str:\n    \"\"\"\n    Determine the best VL encoding type for a field.\n    Uses semantic type first, then disambiguates with data.\n    \"\"\"\n    if not semantic_type or not is_registered(semantic_type):\n        return _infer_vl_type_from_data(values)\n\n    entry = get_registry_entry(semantic_type)\n    candidates = entry.vis_encodings\n\n    if len(candidates) == 1:\n        return candidates[0] if candidates[0] != 'geographic' else 'quantitative'\n\n    # Disambiguate quantitative vs ordinal\n    if 'quantitative' in candidates and 'ordinal' in candidates:\n        distinct = len(set(v for v in values if v is not None))\n        # Guard: if values contain non-integer floats, they are continuous\n        # and should be quantitative regardless of cardinality.\n        # E.g. Rating values like 1.2, 3.7, 4.1 are clearly continuous.\n        nums = [v for v in values if isinstance(v, (int, float))]\n        if nums:\n            has_fractions = any(v % 1 != 0 for v in nums)\n            if has_fractions:\n                return 'quantitative'\n        return 'ordinal' if distinct <= 12 else 'quantitative'\n\n    # Disambiguate temporal vs ordinal\n    if 'temporal' in candidates and 'ordinal' in candidates:\n        non_null = [v for v in values if v is not None]\n        if non_null and all(isinstance(v, (int, float)) for v in non_null):\n            # Pure numeric — check if they look like 4-digit years.\n            # When semantic type is Year/Decade and values are 4-digit\n            # integers in a plausible year range (1000–2999), use temporal\n            # for larger sets so VL gets a continuous time axis.\n            # convert_temporal_data will convert int → str(\"1980\") before\n            # the data reaches VL, avoiding the unix-ms misinterpretation.\n            distinct = len(set(non_null))\n            if _looks_like_year_integers(non_null):\n                return 'ordinal' if distinct <= 6 else 'temporal'\n            # Not year-like integers → ordinal (safe default)\n            return 'ordinal' if distinct <= 20 else 'quantitative'\n        # Date strings or datetime objects → temporal\n        distinct = len(set(v for v in values if v is not None))\n        return 'ordinal' if distinct <= 6 else 'temporal'\n\n    # geographic + quantitative\n    if 'geographic' in candidates and 'quantitative' in candidates:\n        return 'quantitative'\n\n    return candidates[0]\n\n\ndef _looks_like_year_integers(values: List[Any]) -> bool:\n    \"\"\"Check if a list of numeric values look like 4-digit year integers.\n\n    Returns True when >=80% of non-null values are integers in the\n    plausible year range 1000-2999.  This is used to decide whether\n    integer Year/Decade data should get a temporal axis (with string\n    conversion) rather than being treated as plain quantitative numbers.\n    \"\"\"\n    nums = [v for v in values if isinstance(v, (int, float)) and not isinstance(v, bool)]\n    if not nums:\n        return False\n    year_count = sum(\n        1 for v in nums\n        if v == int(v) and 1000 <= int(v) <= 2999\n    )\n    return year_count >= len(nums) * 0.8\n\n\ndef _infer_vl_type_from_data(values: List[Any]) -> str:\n    \"\"\"Infer VL type purely from data values.\"\"\"\n    non_null = [v for v in values if v is not None]\n    if not non_null:\n        return 'nominal'\n    if all(isinstance(v, bool) for v in non_null):\n        return 'nominal'\n\n    # Check for native datetime/date objects first\n    if all(isinstance(v, (datetime, date)) for v in non_null):\n        return 'temporal'\n\n    # Check for pandas Timestamp objects\n    try:\n        import pandas as pd\n        if all(isinstance(v, pd.Timestamp) for v in non_null):\n            return 'temporal'\n    except ImportError:\n        pass\n\n    if all(isinstance(v, (int, float)) for v in non_null):\n        # Pure numeric — check for likely timestamps\n        if all(_is_likely_timestamp(v) for v in non_null[:20]):\n            return 'temporal'\n        return 'quantitative'\n\n    # String values — check if they look like dates\n    str_vals = [v for v in non_null[:30] if isinstance(v, str)]\n    if str_vals and len(str_vals) >= len(non_null[:30]) * 0.8:\n        date_count = sum(1 for s in str_vals if _looks_like_date(s))\n        if date_count >= len(str_vals) * 0.7:\n            return 'temporal'\n\n    return 'nominal'\n\n\n# ---------------------------------------------------------------------------\n# Timestamp detection (mirrors TS isLikelyTimestamp)\n# ---------------------------------------------------------------------------\n\n_MAX_TIMESTAMP_SEC = 4102444800       # ~2099-12-31 in epoch seconds\n_MAX_TIMESTAMP_MS = 4102444800000     # ~2099-12-31 in epoch milliseconds\n\n\ndef _is_likely_timestamp(val: Any) -> bool:\n    \"\"\"Check if a numeric value is likely a unix timestamp (s or ms).\"\"\"\n    if not isinstance(val, (int, float)):\n        return False\n    if isinstance(val, bool):\n        return False\n    if math.isnan(val) or math.isinf(val):\n        return False\n    if val >= 1e9 and val <= _MAX_TIMESTAMP_SEC:\n        return True\n    if val > _MAX_TIMESTAMP_SEC and val <= _MAX_TIMESTAMP_MS:\n        return True\n    return False\n\n\ndef _timestamp_to_ms(val: float) -> float:\n    \"\"\"Convert seconds-epoch to ms-epoch if needed.\"\"\"\n    return val * 1000 if val <= _MAX_TIMESTAMP_SEC else val\n\n\n# ---------------------------------------------------------------------------\n# Date string detection (mirrors TS looksLikeDateString, much more robust)\n# ---------------------------------------------------------------------------\n\n# Pre-compiled patterns for efficiency\n_DATE_PATTERNS = [\n    # ISO 8601: 2020-01-15, 2020-01-15T12:00:00Z\n    re.compile(r'^\\d{4}-\\d{2}-\\d{2}'),\n    # Slash-separated: 2020/01/15 or 01/15/2020 or 15/01/2020\n    re.compile(r'^\\d{1,4}[/]\\d{1,2}[/]\\d{1,4}$'),\n    # Month name variants: Jan 2020, January 2020, Jan-2020, 2020-Jan\n    re.compile(r'^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\w*[\\s,.-]+\\d', re.I),\n    re.compile(r'^\\d{1,2}[\\s,.-]+(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)', re.I),\n    re.compile(r'^\\d{4}[\\s,.-]+(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)', re.I),\n    # Quarter formats: Q1 2020, 2020-Q1, 2020 Q1\n    re.compile(r'^Q[1-4][\\s,-]+\\d{4}$', re.I),\n    re.compile(r'^\\d{4}[\\s,-]*Q[1-4]$', re.I),\n    # Dot-separated: 15.01.2020 or 2020.01.15\n    re.compile(r'^\\d{1,2}\\.\\d{1,2}\\.\\d{2,4}$'),\n    re.compile(r'^\\d{4}\\.\\d{1,2}\\.\\d{1,2}$'),\n    # Dash-separated with short month: 15-Jan-2020, 2020-01-15\n    re.compile(r'^\\d{1,2}-\\w+-\\d{2,4}$'),\n    # Year-month: 2020-01, 2020/01\n    re.compile(r'^\\d{4}[-/]\\d{1,2}$'),\n    # Month-year: Jan-2020\n    re.compile(r'^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\w*[-/]\\d{4}$', re.I),\n    # Compact: 20200115\n    re.compile(r'^\\d{8}$'),\n]\n\n\ndef _looks_like_date(s: str) -> bool:\n    \"\"\"Check if a string looks like a date/datetime value.\n\n    This is a lightweight heuristic used for type inference.\n    Does NOT match bare 4-digit years (\"2020\") — those should be\n    handled via semantic type (Year/Decade) to avoid false positives\n    with generic integer IDs.\n    \"\"\"\n    t = s.strip()\n    if not t:\n        return False\n    return any(p.search(t) for p in _DATE_PATTERNS)\n\n\n# ---------------------------------------------------------------------------\n# Robust date parsing (try multiple strategies)\n# ---------------------------------------------------------------------------\n\ndef _try_parse_date(val: Any) -> Optional[datetime]:\n    \"\"\"Try to parse a value as a datetime.  Returns None on failure.\"\"\"\n    if isinstance(val, datetime):\n        return val\n    if isinstance(val, date) and not isinstance(val, datetime):\n        return datetime(val.year, val.month, val.day)\n    try:\n        import pandas as pd\n        if isinstance(val, pd.Timestamp):\n            return val.to_pydatetime()\n    except ImportError:\n        pass\n\n    if isinstance(val, (int, float)):\n        if _is_likely_timestamp(val):\n            ms = _timestamp_to_ms(val)\n            return datetime.utcfromtimestamp(ms / 1000)\n        return None\n\n    if isinstance(val, str):\n        t = val.strip()\n        if not t:\n            return None\n        # Fast-path ISO\n        for fmt in (\n            '%Y-%m-%d',\n            '%Y-%m-%dT%H:%M:%S',\n            '%Y-%m-%dT%H:%M:%SZ',\n            '%Y-%m-%dT%H:%M:%S.%f',\n            '%Y-%m-%dT%H:%M:%S.%fZ',\n            '%m/%d/%Y',\n            '%d/%m/%Y',\n            '%Y/%m/%d',\n            '%b %d, %Y',\n            '%B %d, %Y',\n            '%d %b %Y',\n            '%d %B %Y',\n            '%b %Y',\n            '%B %Y',\n            '%Y-%m',\n            '%Y/%m',\n        ):\n            try:\n                return datetime.strptime(t, fmt)\n            except ValueError:\n                continue\n        # Fallback: pandas parser (very flexible)\n        try:\n            import pandas as pd\n            return pd.to_datetime(t).to_pydatetime()\n        except Exception:\n            pass\n    return None\n\n\n# ---------------------------------------------------------------------------\n# §4  Ordinal Sort Order  (months, days, quarters)\n# ---------------------------------------------------------------------------\n\n_MONTH_FULL = ['January', 'February', 'March', 'April', 'May', 'June',\n               'July', 'August', 'September', 'October', 'November', 'December']\n_MONTH_ABBR = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n_MONTH_NUM = [str(i) for i in range(1, 13)]\n\n_DOW_FULL = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']\n_DOW_ABBR = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n_DOW_FULL_SUN = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n_DOW_ABBR_SUN = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n\n_QUARTER = ['Q1', 'Q2', 'Q3', 'Q4']\n\n_COMPASS_8 = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW']\n_COMPASS_4 = ['N', 'E', 'S', 'W']\n\n_ORDINAL_SEQUENCES: Dict[str, List[Tuple[List[str], bool]]] = {\n    'Month': [(_MONTH_FULL, True), (_MONTH_ABBR, True), (_MONTH_NUM, False)],\n    'Day': [(_DOW_FULL, True), (_DOW_ABBR, True), (_DOW_FULL_SUN, True), (_DOW_ABBR_SUN, True)],\n    'Quarter': [(_QUARTER, True)],\n    'Direction': [(_COMPASS_8, True), (_COMPASS_4, True)],\n}\n\n\ndef infer_ordinal_sort_order(semantic_type: str, values: List[Any]) -> list[str] | None:\n    \"\"\"\n    Detect canonical ordinal sort order for months, days, quarters, etc.\n    Returns sorted unique values in canonical order, or None.\n    \"\"\"\n    # Try by explicit semantic type\n    sequences = _ORDINAL_SEQUENCES.get(semantic_type)\n    if sequences:\n        result = _match_sequence(values, sequences)\n        if result:\n            return result\n\n    # Auto-detect for generic types\n    if not semantic_type or semantic_type in ('Category', 'String', 'Unknown'):\n        for seqs in _ORDINAL_SEQUENCES.values():\n            result = _match_sequence(values, seqs)\n            if result:\n                return result\n\n    return None\n\n\ndef _match_sequence(\n    values: List[Any],\n    sequences: List[Tuple[List[str], bool]],\n) -> list[str] | None:\n    unique_vals = list(dict.fromkeys(str(v) for v in values if v is not None))\n    if not unique_vals:\n        return None\n\n    for labels, case_insensitive in sequences:\n        lookup = {(l.lower() if case_insensitive else l): i for i, l in enumerate(labels)}\n        matched = []\n        unmatched = []\n        for val in unique_vals:\n            key = val.lower() if case_insensitive else val\n            idx = lookup.get(key)\n            if idx is not None:\n                matched.append((val, idx))\n            else:\n                unmatched.append(val)\n\n        if len(matched) >= len(unique_vals) * 0.6 and len(matched) >= 2:\n            matched.sort(key=lambda x: x[1])\n            return [m[0] for m in matched] + unmatched\n\n    return None\n\n\n# ---------------------------------------------------------------------------\n# §5  Temporal Data Conversion  (mirrors TS convertTemporalData)\n# ---------------------------------------------------------------------------\n\ndef _expand_to_full_year(val: str) -> str:\n    \"\"\"Expand 2-digit year to 4-digit: '98' → '1998', '07' → '2007'.\"\"\"\n    t = val.strip()\n    if re.fullmatch(r'\\d{2}', t):\n        n = int(t)\n        return str(2000 + n if n <= 49 else 1900 + n)\n    return val\n\n\ndef convert_temporal_data(\n    data: List[Dict[str, Any]],\n    semantic_types: Dict[str, Any],\n    all_values: Dict[str, List[Any]] | None = None,\n) -> List[Dict[str, Any]]:\n    \"\"\"\n    Convert temporal field values to canonical string representations\n    so that Vega-Lite can parse them correctly.\n\n    Mirrors the TS ``convertTemporalData`` function.\n\n    This handles:\n    - Year/Decade integers → string (\"2015\" not 2015, avoids VL unix-ms interpretation)\n    - Unix timestamps → ISO datetime strings\n    - datetime/date objects → ISO strings\n    - pd.Timestamp objects → ISO strings\n    - 2-digit year strings → 4-digit\n    - Any other temporal values → str()\n\n    Parameters:\n    - data: list of row dicts (will be cloned)\n    - semantic_types: field_name → semantic type string or annotation dict\n    - all_values: optional precomputed {field: [values]} for type inference\n\n    Returns: new list of row dicts with temporal fields converted to strings.\n    \"\"\"\n    if not data:\n        return data\n\n    import copy\n\n    keys = list(data[0].keys())\n    temporal_keys = []\n\n    for k in keys:\n        sem_type = _extract_sem_type(semantic_types.get(k))\n        # Check semantic type\n        if sem_type and is_registered(sem_type):\n            entry = get_registry_entry(sem_type)\n            if 'temporal' in entry.vis_encodings:\n                temporal_keys.append(k)\n                continue\n\n        # Check data values\n        vals = all_values[k] if all_values and k in all_values else [r.get(k) for r in data[:50]]\n        inferred = _infer_vl_type_from_data(vals)\n        if inferred == 'temporal':\n            temporal_keys.append(k)\n\n    if not temporal_keys:\n        return data\n\n    result = copy.deepcopy(data)\n    for row in result:\n        for k in temporal_keys:\n            val = row.get(k)\n            if val is None:\n                continue\n            sem_type = _extract_sem_type(semantic_types.get(k))\n\n            if isinstance(val, (int, float)) and not isinstance(val, bool):\n                if sem_type in ('Year', 'Decade'):\n                    # Year/Decade: always convert int to string representation\n                    row[k] = str(int(val))\n                elif _is_likely_timestamp(val):\n                    ms = _timestamp_to_ms(val)\n                    row[k] = datetime.utcfromtimestamp(ms / 1000).isoformat() + 'Z'\n                elif _looks_like_year_integers([val]):\n                    # 4-digit year-like integer without explicit Year semantic type\n                    # → convert to string so VL doesn't treat it as unix-ms\n                    row[k] = str(int(val))\n                else:\n                    row[k] = str(val)\n            elif isinstance(val, datetime):\n                row[k] = val.isoformat()\n            elif isinstance(val, date) and not isinstance(val, datetime):\n                row[k] = val.isoformat()\n            else:\n                try:\n                    import pandas as pd\n                    if isinstance(val, pd.Timestamp):\n                        row[k] = val.isoformat()\n                        continue\n                except ImportError:\n                    pass\n                # String handling\n                if isinstance(val, str):\n                    if sem_type in ('Year', 'Decade'):\n                        row[k] = _expand_to_full_year(val)\n                    else:\n                        row[k] = str(val)\n                else:\n                    row[k] = str(val)\n\n    return result\n\n\ndef _extract_sem_type(annotation: Any) -> str:\n    \"\"\"Extract the semantic type string from an annotation (str or dict).\"\"\"\n    if isinstance(annotation, str):\n        return annotation\n    if isinstance(annotation, dict):\n        return annotation.get('type', annotation.get('semantic_type', ''))\n    return ''\n\n\n# ---------------------------------------------------------------------------\n# §6  Full Channel Resolution\n# ---------------------------------------------------------------------------\n\ndef resolve_channel_semantics(\n    field_name: str,\n    semantic_type: str,\n    channel: str,\n    mark_type: str,\n    values: List[Any],\n    unit: str | None = None,\n    intrinsic_domain: tuple[float, float] | None = None,\n) -> ChannelSemantics:\n    \"\"\"\n    Resolve semantic decisions for one (field, channel) pair.\n    This is the main entry point used by create_vl_plots.py.\n\n    Focuses on the critical structural decision: VL type + ordinal sort.\n    Formatting, domains, ticks, zero-baseline, color schemes, etc. are\n    left to VL defaults (or the front-end TS library).\n    \"\"\"\n    vl_type = resolve_vl_type(semantic_type, values)\n\n    cs = ChannelSemantics(\n        field=field_name,\n        semantic_type=semantic_type,\n        vl_type=vl_type,\n    )\n\n    # Ordinal sort order (months, days, quarters — affects axis label order)\n    if vl_type in ('ordinal', 'nominal'):\n        cs.ordinal_sort_order = infer_ordinal_sort_order(semantic_type, values)\n\n    return cs\n"
  },
  {
    "path": "py-src/data_formulator/workflows/create_vl_plots.py",
    "content": "import pandas as pd\nimport numpy as np\nfrom typing import Any\nimport vl_convert as vlc\nimport base64\nimport logging\n\nfrom data_formulator.agents.semantic_types import infer_vl_type_from_name\nfrom data_formulator.workflows.chart_semantics import (\n    resolve_channel_semantics,\n    resolve_vl_type,\n    is_registered,\n    ChannelSemantics,\n    convert_temporal_data,\n    _looks_like_date,\n    _looks_like_year_integers,\n)\n\nlogger = logging.getLogger(__name__)\n\n\ndef field_metadata_to_semantic_types(\n    field_metadata: dict[str, Any] | None,\n) -> dict[str, Any] | None:\n    \"\"\"Convert agent ``field_metadata`` to the ``semantic_types`` dict\n    expected by :func:`assemble_vegailte_chart`.\n\n    ``field_metadata`` comes from the LLM's ``refined_goal.field_metadata``\n    and has the shape::\n\n        {\n            \"Revenue\": {\"semantic_type\": \"Revenue\", \"unit\": \"USD\"},\n            \"Month\":   {\"semantic_type\": \"Month\"},\n        }\n\n    The returned dict maps field names to either a plain string\n    (the semantic type name) or a dict with ``type``, ``unit``,\n    and ``intrinsic_domain`` keys — exactly what ``assemble_vegailte_chart``\n    already accepts.\n    \"\"\"\n    if not field_metadata:\n        return None\n\n    result: dict[str, Any] = {}\n    for field_name, meta in field_metadata.items():\n        if isinstance(meta, str):\n            result[field_name] = meta\n            continue\n        if not isinstance(meta, dict):\n            continue\n        sem_type = meta.get(\"semantic_type\")\n        if not sem_type:\n            continue\n        extras = {}\n        if \"unit\" in meta and meta[\"unit\"]:\n            extras[\"unit\"] = meta[\"unit\"]\n        if \"intrinsic_domain\" in meta and meta[\"intrinsic_domain\"]:\n            extras[\"intrinsic_domain\"] = meta[\"intrinsic_domain\"]\n        if extras:\n            result[field_name] = {\"type\": sem_type, **extras}\n        else:\n            result[field_name] = sem_type\n    return result if result else None\n\n\ndef resolve_field_type(\n    series: pd.Series,\n    field_name: str | None = None,\n) -> str:\n    \"\"\"\n    Resolve the Vega-Lite type for a field.  Priority:\n      1. Column-name heuristic (catches derived columns like avg_revenue, year, etc.)\n      2. Pandas dtype detection (fallback)\n    \n    Parameters:\n    - series: the pandas Series for the field\n    - field_name: column name (used for name heuristics)\n    \n    Returns one of: 'quantitative', 'nominal', 'ordinal', 'temporal'\n    \"\"\"\n    # 1. Try column-name heuristic (useful for derived columns)\n    if field_name:\n        inferred = infer_vl_type_from_name(field_name)\n        if inferred:\n            return inferred\n    \n    # 2. Fall back to pandas-based detection\n    return detect_field_type(series)\n\n\ndef detect_field_type(series: pd.Series) -> str:\n    \"\"\"\n    Detect the appropriate Vega-Lite field type for a pandas Series.\n    Returns one of: 'quantitative', 'nominal', 'ordinal', 'temporal'\n    \"\"\"\n    if pd.api.types.is_datetime64_any_dtype(series):\n        return 'temporal'\n    if pd.api.types.is_bool_dtype(series):\n        return 'nominal'\n    if pd.api.types.is_numeric_dtype(series):\n        # Check if values look like 4-digit years (1000-2999).\n        # Year integers should be ordinal (discrete labels), not quantitative\n        # (which causes VL to format them with SI prefixes like \".024\").\n        non_null_vals = series.dropna().tolist()\n        if non_null_vals and _looks_like_year_integers(non_null_vals):\n            return 'ordinal'\n        # Check if it looks like a discrete categorical variable\n        unique_count = series.nunique()\n        total_count = len(series)\n        if unique_count <= 20 and unique_count / total_count < 0.5:\n            return 'ordinal'\n        return 'quantitative'\n    # String or object type — check for date strings\n    non_null = series.dropna().head(30).tolist()\n    if non_null:\n        str_vals = [v for v in non_null if isinstance(v, str)]\n        if str_vals and len(str_vals) >= len(non_null) * 0.8:\n            date_count = sum(1 for s in str_vals if _looks_like_date(s))\n            if date_count >= len(str_vals) * 0.7:\n                return 'temporal'\n    unique_count = series.nunique()\n    if unique_count <= 50:\n        return 'nominal'\n    return 'nominal'\n\n\n# Chart Templates\nCHART_TEMPLATES = [\n    {\n        \"chart\": \"Scatter Plot\",\n        \"mark\": \"circle\",\n        \"channels\": [\"x\", \"y\", \"color\", \"opacity\", \"size\", \"shape\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Line Chart\",\n        \"mark\": \"line\",\n        \"channels\": [\"x\", \"y\", \"color\", \"strokeDash\", \"opacity\", \"detail\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Dotted Line Chart\",\n        \"mark\": {\"type\": \"line\", \"point\": True},\n        \"channels\": [\"x\", \"y\", \"color\", \"detail\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Bar Chart\",\n        \"mark\": \"bar\",\n        \"channels\": [\"x\", \"y\", \"color\", \"opacity\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Grouped Bar Chart\",\n        \"mark\": \"bar\",\n        \"channels\": [\"x\", \"y\", \"color\", \"opacity\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Stacked Bar Chart\",\n        \"mark\": \"bar\",\n        \"channels\": [\"x\", \"y\", \"color\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Heatmap\",\n        \"mark\": \"rect\",\n        \"channels\": [\"x\", \"y\", \"color\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Area Chart\",\n        \"mark\": \"area\",\n        \"channels\": [\"x\", \"y\", \"color\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Streamgraph\",\n        \"mark\": \"area\",\n        \"channels\": [\"x\", \"y\", \"color\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Boxplot\",\n        \"mark\": \"boxplot\",\n        \"channels\": [\"x\", \"y\", \"color\", \"opacity\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Histogram\",\n        \"mark\": \"bar\",\n        \"channels\": [\"x\", \"color\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Pie Chart\",\n        \"mark\": \"arc\",\n        \"channels\": [\"theta\", \"color\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Lollipop Chart\",\n        \"mark\": \"rule\",  # layered: rule + circle\n        \"channels\": [\"x\", \"y\", \"color\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Strip Plot\",\n        \"mark\": {\"type\": \"circle\", \"opacity\": 0.7},\n        \"channels\": [\"x\", \"y\", \"color\", \"size\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Density Plot\",\n        \"mark\": \"area\",\n        \"channels\": [\"x\", \"color\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Bump Chart\",\n        \"mark\": {\"type\": \"line\", \"point\": True, \"interpolate\": \"monotone\", \"strokeWidth\": 2},\n        \"channels\": [\"x\", \"y\", \"color\", \"detail\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Regression\",\n        \"mark\": \"circle\",  # layered: circle + regression line\n        \"channels\": [\"x\", \"y\", \"size\", \"color\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Ranged Dot Plot\",\n        \"mark\": \"point\",  # layered: line + point\n        \"channels\": [\"x\", \"y\", \"color\"]\n    },\n    {\n        \"chart\": \"Candlestick Chart\",\n        \"mark\": \"rule\",  # layered: rule + bar\n        \"channels\": [\"x\", \"open\", \"high\", \"low\", \"close\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Waterfall Chart\",\n        \"mark\": \"bar\",\n        \"channels\": [\"x\", \"y\", \"color\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Radar Chart\",\n        \"mark\": \"line\",  # computed polar projection\n        \"channels\": [\"x\", \"y\", \"color\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Rose Chart\",\n        \"mark\": {\"type\": \"arc\", \"stroke\": \"white\", \"padAngle\": 0.02},\n        \"channels\": [\"x\", \"y\", \"color\", \"column\", \"row\"]\n    },\n    {\n        \"chart\": \"Pyramid Chart\",\n        \"mark\": \"bar\",  # hconcat of 2 panels\n        \"channels\": [\"x\", \"y\", \"color\"]\n    },\n    {\n        \"chart\": \"World Map\",\n        \"mark\": \"circle\",\n        \"channels\": [\"longitude\", \"latitude\", \"color\", \"size\", \"opacity\"]\n    },\n    {\n        \"chart\": \"US Map\",\n        \"mark\": \"circle\",\n        \"channels\": [\"longitude\", \"latitude\", \"color\", \"size\"]\n    }\n]\n\n\n# Chart-type-aware expected types per (chart_type, channel).\n# When detect_field_type disagrees with what the chart semantics require,\n# the value here wins.  None means \"keep detected\".\n_CHANNEL_TYPE_OVERRIDES: dict[str, dict[str, str]] = {\n    \"Histogram\":  {\"x\": \"quantitative\"},\n    \"Heatmap\":    {\"x\": \"nominal\", \"y\": \"nominal\"},\n    \"Boxplot\":    {\"x\": \"nominal\", \"y\": \"quantitative\"},\n    \"Pie Chart\":        {\"theta\": \"quantitative\", \"color\": \"nominal\"},\n    \"World Map\":   {\"longitude\": \"quantitative\", \"latitude\": \"quantitative\"},\n    \"US Map\":      {\"longitude\": \"quantitative\", \"latitude\": \"quantitative\"},\n    \"Candlestick Chart\": {\"x\": \"ordinal\"},\n    \"Density Plot\":    {\"x\": \"quantitative\"},\n    \"Waterfall Chart\":  {\"x\": \"ordinal\", \"y\": \"quantitative\"},\n    \"Pyramid Chart\":    {\"y\": \"nominal\", \"x\": \"quantitative\"},\n    \"Strip Plot\":      {},  # detected dynamically\n    \"Rose Chart\":       {\"x\": \"nominal\", \"y\": \"quantitative\"},\n}\n\n# Chart types where temporal fields on position channels should be ordinal\n# (discrete bars/cells rather than a continuous time axis).\n# For these charts, coerce_field_type downgrades \"temporal\" → \"ordinal\" on x/y.\n_BAR_LIKE_CHARTS = {\"Bar Chart\", \"Grouped Bar Chart\", \"Stacked Bar Chart\", \"Lollipop Chart\", \"Waterfall Chart\"}\n\n\ndef coerce_field_type(chart_type: str, channel: str, detected_type: str) -> str:\n    \"\"\"\n    Return the Vega-Lite type that should actually be used for this\n    (chart_type, channel) combination.  If no override is needed the\n    originally detected type is returned unchanged.\n    \"\"\"\n    overrides = _CHANNEL_TYPE_OVERRIDES.get(chart_type, {})\n    forced = overrides.get(channel)\n    if forced:\n        return forced\n\n    # Bar-like charts: temporal on x/y should become ordinal (discrete bars)\n    if chart_type in _BAR_LIKE_CHARTS and channel in (\"x\", \"y\") and detected_type == \"temporal\":\n        return \"ordinal\"\n\n    return detected_type\n\n\ndef get_chart_template(chart_type: str) -> dict | None:\n    \"\"\"Find a chart template by its full name (e.g. \"Scatter Plot\").\"\"\"\n    for template in CHART_TEMPLATES:\n        if template[\"chart\"] == chart_type:\n            return template\n    return None\n\ndef create_chart_spec(df: pd.DataFrame, fields: list[str], chart_type: str) -> dict[str, dict[str, str]]:\n    \"\"\"\n    Assign fields to appropriate visualization channels based on their data types and chart type.\n    \"\"\"\n    encodings = fields_to_encodings(df, chart_type, fields)\n    return assemble_vegailte_chart(df, chart_type, encodings)\n\n\ndef fields_to_encodings(df, chart_type: str, fields: list[str]) -> dict[str, dict[str, str]]:\n    \"\"\"\n    Assign fields to appropriate visualization channels based on their data types and chart type.\n    \n    Parameters:\n    - df: pandas DataFrame containing the data\n    - chart_type: string matching one of the chart types in CHART_TEMPLATES (e.g. \"Scatter Plot\")\n    - fields: list of column names to assign to channels\n    \n    Returns:\n    - dict: mapping of channel names to encoding objects with \"field\" and \"type\" properties (\"nominal\", \"quantitative\", \"temporal\")\n    \"\"\"\n    if not fields:\n        return {}\n    \n    # Get available channels for this chart type\n    template = get_chart_template(chart_type)\n    if not template:\n        return {}\n    \n    available_channels = template[\"channels\"]\n    \n    # Analyze field types and properties\n    field_info = []\n    for field in fields:\n        if field not in df.columns:\n            continue\n            \n        field_type = detect_field_type(df[field])\n        cardinality = df[field].nunique()\n        \n        field_info.append({\n            \"field\": field,\n            \"type\": field_type,\n            \"cardinality\": cardinality,\n            \"is_low_cardinality\": cardinality <= 20,\n            \"is_very_low_cardinality\": cardinality <= 10\n        })\n    \n    if not field_info:\n        return {}\n    \n    # Sort fields by priority for assignment\n    def field_priority(field_info_item):\n        # Prioritize temporal fields for time-based charts\n        if chart_type in [\"Line Chart\", \"Area Chart\"] and field_info_item[\"type\"] == \"temporal\":\n            return 0\n        # Prioritize quantitative fields\n        elif field_info_item[\"type\"] == \"quantitative\":\n            return 1\n        # Then categorical with reasonable cardinality\n        elif field_info_item[\"is_low_cardinality\"]:\n            return 2\n        # Finally high cardinality categoricals\n        else:\n            return 3\n    \n    field_info.sort(key=field_priority)\n    \n    encodings = {}\n    used_fields = set()\n    \n    def get_field_info_by_name(field_name: str):\n        \"\"\"Helper to get field info by field name\"\"\"\n        return next((f for f in field_info if f[\"field\"] == field_name), None)\n    \n    def add_encoding(channel: str, field_name: str):\n        \"\"\"Add encoding with type conversion if necessary\"\"\"\n        field_info_item = get_field_info_by_name(field_name)\n        if not field_info_item:\n            return\n            \n        original_type = field_info_item[\"type\"]\n        encoding = {\"field\": field_name}\n        \n        # Determine if type conversion is needed\n        needs_conversion = False\n        target_type = original_type\n        \n        # Heatmap axes should be categorical\n        if chart_type == \"Heatmap\" and channel in [\"x\", \"y\"]:\n            if original_type in [\"quantitative\", \"temporal\"]:\n                needs_conversion = True\n                target_type = \"nominal\"\n        \n        # Bar chart x-axis should be categorical for grouping\n        elif chart_type == \"Bar Chart\" and channel == \"x\":\n            if original_type == \"quantitative\":\n                needs_conversion = True\n                target_type = \"nominal\"\n        \n        # Color channel in non-heatmap charts should be categorical for discrete colors\n        elif channel == \"color\" and chart_type != \"Heatmap\":\n            if original_type == \"quantitative\" and field_info_item[\"is_low_cardinality\"]:\n                needs_conversion = True\n                target_type = \"nominal\"\n        \n        # Faceting channels should be categorical\n        elif channel in [\"column\", \"row\"]:\n            if original_type in [\"quantitative\", \"temporal\"]:\n                needs_conversion = True\n                target_type = \"nominal\"\n        \n        # Shape channel should always be categorical\n        elif channel == \"shape\":\n            if original_type in [\"quantitative\", \"temporal\"]:\n                needs_conversion = True\n                target_type = \"nominal\"\n        \n        # Add type to encoding only if conversion is necessary\n        if needs_conversion:\n            encoding[\"type\"] = target_type\n            \n        encodings[channel] = encoding\n        used_fields.add(field_name)\n    \n    # Define channel assignment rules by chart type\n    def assign_primary_channels():\n        \"\"\"Assign the main x and y channels\"\"\"\n        if \"x\" in available_channels and \"y\" in available_channels:\n            if chart_type == \"Bar Chart\":\n                # Bar chart: x = categorical, y = quantitative\n                categorical_field = next((f for f in field_info \n                                        if f[\"field\"] not in used_fields and \n                                        f[\"type\"] in [\"nominal\", \"ordinal\"]), None)\n                any_available_field = next((f for f in field_info \n                                          if f[\"field\"] not in used_fields and \n                                          f[\"type\"] in [\"quantitative\", \"temporal\"]), None)\n                \n                if categorical_field:\n                    add_encoding(\"x\", categorical_field[\"field\"])\n                elif any_available_field:\n                    add_encoding(\"x\", any_available_field[\"field\"])\n\n                quantitative_field = next((f for f in field_info \n                                         if f[\"field\"] not in used_fields and \n                                         f[\"type\"] == \"quantitative\"), None)\n                if quantitative_field:\n                    add_encoding(\"y\", quantitative_field[\"field\"])\n            \n            elif chart_type in [\"Line Chart\", \"Area Chart\"]:\n                # Line/Area chart: x = temporal/ordinal, y = quantitative\n                temporal_field = next((f for f in field_info \n                                     if f[\"field\"] not in used_fields and \n                                     f[\"type\"] in [\"temporal\", \"ordinal\"]), None)\n                # Fallback: use first available field of any type\n                any_available_field = next((f for f in field_info \n                                          if f[\"field\"] not in used_fields), None)\n            \n                if temporal_field:\n                    add_encoding(\"x\", temporal_field[\"field\"])\n                elif any_available_field:\n                    add_encoding(\"x\", any_available_field[\"field\"])\n                \n                # Re-evaluate quantitative field after x-axis assignment\n                quantitative_field = next((f for f in field_info \n                                         if f[\"field\"] not in used_fields and \n                                         f[\"type\"] == \"quantitative\"), None)\n                if quantitative_field:\n                    add_encoding(\"y\", quantitative_field[\"field\"])\n            \n            elif chart_type == \"Scatter Plot\":\n                # Point charts: flexible for scatter plots, bubble charts, etc.\n                # Prefer quantitative fields but accept any field type\n                available_fields = [f for f in field_info if f[\"field\"] not in used_fields]\n                \n                # Try to get quantitative fields first for traditional scatter plot\n                quant_fields = [f for f in available_fields if f[\"type\"] == \"quantitative\"]\n                \n                if len(quant_fields) >= 2:\n                    # Traditional scatter plot with two quantitative axes\n                    add_encoding(\"x\", quant_fields[0][\"field\"])\n                    add_encoding(\"y\", quant_fields[1][\"field\"])\n                elif len(available_fields) >= 2:\n                    # Bubble chart or categorical point plot - use any available fields\n                    add_encoding(\"x\", available_fields[0][\"field\"])\n                    add_encoding(\"y\", available_fields[1][\"field\"])\n                elif len(available_fields) == 1:\n                    # Single field - use for y-axis, x can be index or categorical\n                    add_encoding(\"y\", available_fields[0][\"field\"])\n            \n            elif chart_type == \"Heatmap\":\n                # Heatmap: x = categorical, y = categorical, color = quantitative\n                categorical_fields = [f for f in field_info \n                                    if f[\"field\"] not in used_fields and \n                                    f[\"type\"] in [\"nominal\", \"ordinal\"]]\n                \n                # Assign x and y to categorical fields\n                if len(categorical_fields) >= 2:\n                    add_encoding(\"x\", categorical_fields[0][\"field\"])\n                    add_encoding(\"y\", categorical_fields[1][\"field\"])\n                elif len(categorical_fields) >= 1:\n                    # Use available categorical field for one axis\n                    add_encoding(\"x\", categorical_fields[0][\"field\"])\n                    \n                    # Try to find another field for y-axis\n                    other_field = next((f for f in field_info \n                                      if f[\"field\"] not in used_fields), None)\n                    if other_field:\n                        add_encoding(\"y\", other_field[\"field\"])\n                else:\n                    # Fallback: use any available fields\n                    available_fields = [f for f in field_info if f[\"field\"] not in used_fields]\n                    if len(available_fields) >= 2:\n                        add_encoding(\"x\", available_fields[0][\"field\"])\n                        add_encoding(\"y\", available_fields[1][\"field\"])\n            \n            elif chart_type == \"Boxplot\":\n                # Box plot: x = categorical, y = quantitative\n                categorical_field = next((f for f in field_info \n                                        if f[\"field\"] not in used_fields and \n                                        f[\"type\"] in [\"nominal\", \"ordinal\"]), None)\n                quantitative_field = next((f for f in field_info \n                                         if f[\"field\"] not in used_fields and \n                                         f[\"type\"] == \"quantitative\"), None)\n                \n                if categorical_field:\n                    add_encoding(\"x\", categorical_field[\"field\"])\n                \n                if quantitative_field:\n                    add_encoding(\"y\", quantitative_field[\"field\"])\n            \n            else:\n                # Default: assign first two available fields\n                available_fields = [f for f in field_info if f[\"field\"] not in used_fields]\n                if len(available_fields) >= 1:\n                    add_encoding(\"x\", available_fields[0][\"field\"])\n                if len(available_fields) >= 2:\n                    add_encoding(\"y\", available_fields[1][\"field\"])\n    \n    def assign_aesthetic_channels():\n        \"\"\"Assign color, size, shape channels\"\"\"\n        remaining_fields = [f for f in field_info if f[\"field\"] not in used_fields]\n        \n        # Special handling for heatmap color channel\n        if chart_type == \"Heatmap\" and \"color\" in available_channels and remaining_fields:\n            # For heatmaps, color should be quantitative for intensity\n            color_field = next((f for f in remaining_fields \n                              if f[\"type\"] == \"quantitative\"), None)\n            if not color_field:\n                # Fallback to any remaining field\n                color_field = remaining_fields[0]\n            \n            add_encoding(\"color\", color_field[\"field\"])\n            remaining_fields = [f for f in remaining_fields if f[\"field\"] != color_field[\"field\"]]\n        \n        # Color for other chart types: prefer low cardinality categorical fields\n        elif \"color\" in available_channels and remaining_fields:\n            color_field = next((f for f in remaining_fields \n                              if f[\"is_low_cardinality\"] and \n                              f[\"type\"] in [\"nominal\", \"ordinal\"]), None)\n            if not color_field:\n                color_field = remaining_fields[0]\n            \n            add_encoding(\"color\", color_field[\"field\"])\n            remaining_fields = [f for f in remaining_fields if f[\"field\"] != color_field[\"field\"]]\n        \n        # Size: prefer quantitative fields (great for bubble charts)\n        if \"size\" in available_channels and remaining_fields:\n            size_field = next((f for f in remaining_fields \n                             if f[\"type\"] == \"quantitative\"), None)\n            if size_field:\n                add_encoding(\"size\", size_field[\"field\"])\n                remaining_fields = [f for f in remaining_fields if f[\"field\"] != size_field[\"field\"]]\n        \n        # Shape: prefer very low cardinality categorical fields\n        if \"shape\" in available_channels and remaining_fields:\n            shape_field = next((f for f in remaining_fields \n                              if f[\"is_very_low_cardinality\"] and \n                              f[\"type\"] in [\"nominal\", \"ordinal\"]), None)\n            if shape_field:\n                add_encoding(\"shape\", shape_field[\"field\"])\n                remaining_fields = [f for f in remaining_fields if f[\"field\"] != shape_field[\"field\"]]\n    \n    def assign_faceting_channels():\n        \"\"\"Assign column and row channels for faceting\"\"\"\n        remaining_fields = [f for f in field_info if f[\"field\"] not in used_fields]\n        \n        # Column: prefer low cardinality fields\n        if \"column\" in available_channels and remaining_fields:\n            col_field = next((f for f in remaining_fields \n                            if f[\"is_low_cardinality\"]), None)\n            if col_field:\n                add_encoding(\"column\", col_field[\"field\"])\n                remaining_fields = [f for f in remaining_fields if f[\"field\"] != col_field[\"field\"]]\n        \n        # Row: prefer very low cardinality fields (fewer rows than columns)\n        if \"row\" in available_channels and remaining_fields:\n            row_field = next((f for f in remaining_fields \n                            if f[\"is_very_low_cardinality\"]), None)\n            if row_field:\n                add_encoding(\"row\", row_field[\"field\"])\n    \n    # Execute assignment strategy\n    assign_primary_channels()\n    assign_aesthetic_channels()\n    assign_faceting_channels()\n    \n    return encodings\n\n\ndef assemble_vegailte_chart(\n    df: pd.DataFrame, \n    chart_type: str, \n    encodings: dict[str, dict[str, str]],\n    max_nominal_values: int = 68,\n    config: dict | None = None,\n    semantic_types: dict[str, Any] | None = None,\n) -> dict:\n    \"\"\"\n    Assemble a Vega-Lite chart specification from a dataframe, chart type, and encodings.\n    \n    Parameters:\n    - df: pandas DataFrame containing the data\n    - chart_type: string matching one of the chart types in CHART_TEMPLATES\n    - encodings: dict mapping channel names to encoding objects with \"field\" property\n      Examples:\n      - Simple: {\"x\": {\"field\": \"field1\"}, \"y\": {\"field\": \"field2\"}}\n      - With aggregation: {\"x\": {\"field\": \"category\"}, \"y\": {\"field\": \"sales\", \"aggregate\": \"mean\"}}\n    - max_nominal_values: maximum number of values for nominal axes before truncating\n    - config: optional chart configuration (binCount, innerRadius, colorScheme, etc.)\n    - semantic_types: optional dict mapping field names to semantic type strings or\n      annotation dicts {\"type\": \"Revenue\", \"unit\": \"USD\", \"intrinsic_domain\": [0, 100]}\n    \n    Returns:\n    - dict: Vega-Lite specification\n    \"\"\"\n    semantic_types = semantic_types or {}\n    # Find the chart template\n    template = get_chart_template(chart_type)\n    if not template:\n        raise ValueError(f\"Chart type '{chart_type}' not found in templates\")\n    \n    # Build initial spec — some chart types need special structure\n    spec = _build_initial_spec(chart_type, template, df, encodings, config)\n    \n    # Remove duplicate columns before converting to records\n    if df.columns.duplicated().any():\n        df = df.loc[:, ~df.columns.duplicated()]\n    # Add data to the spec (inline data from dataframe)\n    table_data = df.to_dict('records')\n    \n    # Resolve mark type for semantic decisions\n    mark_type = template[\"mark\"]\n    if isinstance(mark_type, dict):\n        mark_type = mark_type.get(\"type\", \"point\")\n\n    # Chart types that self-manage their encodings in _post_process_chart.\n    # For these, we still resolve field types but skip adding to spec encoding\n    # (the _post_process function distributes them from the raw encodings dict).\n    _SELF_MANAGED_CHARTS = {\"Radar Chart\", \"Pyramid Chart\", \"Waterfall Chart\"}\n    # Density: x/y are pre-set by template; only color goes through normal path\n    _DENSITY_SKIP_CHANNELS = {\"x\", \"y\"} if chart_type == \"Density Plot\" else set()\n\n    # Apply encodings with semantic-aware handling\n    for channel, encoding_input in encodings.items():\n        # Parse encoding input (always a dict with \"field\" property)\n        field_name = encoding_input.get(\"field\")\n        aggregate_func = encoding_input.get(\"aggregate\")\n        \n        if not field_name or field_name not in df.columns:\n            continue\n            \n        encoding_obj = {}\n        cs: ChannelSemantics | None = None  # channel semantics (when available)\n        \n        # Special scale configuration for radius\n        if channel == \"radius\":\n            encoding_obj[\"scale\"] = {\"type\": \"sqrt\", \"zero\": True}\n        \n        # Handle aggregation\n        if aggregate_func == \"count\":\n            encoding_obj[\"field\"] = \"*\"\n            encoding_obj[\"aggregate\"] = \"count\"\n            encoding_obj[\"title\"] = \"Count\"\n            encoding_obj[\"type\"] = \"quantitative\"\n        elif aggregate_func:\n            encoding_obj[\"field\"] = field_name\n            encoding_obj[\"aggregate\"] = aggregate_func\n            encoding_obj[\"type\"] = \"quantitative\"\n        else:\n            # --- Resolve field type and semantics ---\n            field_values = df[field_name].dropna().tolist()\n            sem_annotation = semantic_types.get(field_name)\n            \n            # Extract semantic type string and optional metadata\n            sem_type = ''\n            sem_unit = None\n            sem_domain = None\n            if isinstance(sem_annotation, str):\n                sem_type = sem_annotation\n            elif isinstance(sem_annotation, dict):\n                sem_type = sem_annotation.get('type', sem_annotation.get('semantic_type', ''))\n                sem_unit = sem_annotation.get('unit')\n                raw_domain = sem_annotation.get('intrinsic_domain')\n                if isinstance(raw_domain, (list, tuple)) and len(raw_domain) == 2:\n                    sem_domain = (raw_domain[0], raw_domain[1])\n            \n            # Use semantic-aware type resolution when available, else fall back\n            if sem_type and is_registered(sem_type):\n                cs = resolve_channel_semantics(\n                    field_name, sem_type, channel, mark_type,\n                    field_values, unit=sem_unit, intrinsic_domain=sem_domain,\n                )\n                encoding_obj[\"field\"] = field_name\n                encoding_obj[\"type\"] = cs.vl_type\n            else:\n                field_type = resolve_field_type(df[field_name], field_name)\n                encoding_obj[\"field\"] = field_name\n                encoding_obj[\"type\"] = field_type\n            \n            # Special handling for year/date fields\n            if pd.api.types.is_datetime64_any_dtype(df[field_name]):\n                if channel in ['color', 'size', 'column', 'row']:\n                    encoding_obj[\"type\"] = \"nominal\"\n                else:\n                    encoding_obj[\"type\"] = \"temporal\"\n            \n            # Chart-type-aware type coercion (e.g. histogram x must be quantitative,\n            # bar x must be nominal, heatmap x/y must be nominal, etc.)\n            encoding_obj[\"type\"] = coerce_field_type(chart_type, channel, encoding_obj[\"type\"])\n        \n        # ── Apply semantic enhancements when available ─────────────────────\n        if cs:\n            _apply_semantic_encoding(encoding_obj, cs, channel, chart_type, config)\n        else:\n            # Legacy fallback: basic color handling\n            if encoding_obj.get(\"type\") == \"nominal\" and channel == \"color\":\n                unique_values = df[field_name].unique()\n                if len(unique_values) >= 16:\n                    encoding_obj[\"scale\"] = {\"scheme\": \"tableau20\"}\n                    encoding_obj[\"legend\"] = {\"symbolSize\": 12, \"labelFontSize\": 8}\n        \n        # For map charts, encodings go into the second layer\n        if chart_type in (\"World Map\", \"US Map\"):\n            spec[\"layer\"][1][\"encoding\"][channel] = encoding_obj\n        elif chart_type in _SELF_MANAGED_CHARTS:\n            pass  # post_process will handle distribution from raw encodings\n        elif channel in _DENSITY_SKIP_CHANNELS:\n            pass  # density template pre-sets x/y\n        else:\n            # Add encoding to spec\n            spec.setdefault(\"encoding\", {})[channel] = encoding_obj\n    \n    # Special handling for histogram: ensure x has bin:true and y has count\n    if chart_type == \"Histogram\":\n        if \"x\" in spec[\"encoding\"]:\n            spec[\"encoding\"][\"x\"][\"bin\"] = True\n        if \"y\" not in spec[\"encoding\"]:\n            spec[\"encoding\"][\"y\"] = {\"aggregate\": \"count\"}\n    \n    # Special handling for pie: mark is 'arc'\n    if chart_type == \"Pie Chart\":\n        spec[\"mark\"] = \"arc\"\n    \n    # Special handling for group_bar: add xOffset using the same field as color\n    if chart_type == \"Grouped Bar Chart\" and \"color\" in spec.get(\"encoding\", {}):\n        color_encoding = spec[\"encoding\"][\"color\"]\n        spec[\"encoding\"][\"xOffset\"] = {\n            \"field\": color_encoding[\"field\"],\n            \"type\": color_encoding.get(\"type\", \"nominal\")\n        }\n\n    # Special handling for stacked_bar: set stack mode on quant axis\n    if chart_type == \"Stacked Bar Chart\":\n        stack_mode = (config or {}).get(\"stackMode\", \"stacked\")\n        for axis in (\"y\", \"x\"):\n            enc = spec.get(\"encoding\", {}).get(axis)\n            if enc and enc.get(\"type\") == \"quantitative\":\n                if stack_mode == \"normalize\":\n                    enc[\"stack\"] = \"normalize\"\n                elif stack_mode == \"center\":\n                    enc[\"stack\"] = \"center\"\n                elif stack_mode == \"layered\":\n                    enc[\"stack\"] = None\n                # default \"stacked\" uses VL default (true)\n                break\n\n    # Post-process special chart types (layered specs handled by _build_initial_spec)\n    _post_process_chart(spec, chart_type, df, encodings, config)\n    \n    # Apply config options\n    if config:\n        _apply_chart_config(spec, chart_type, config)\n    \n    # Handle agent \"facet\" channel → map to \"column\" so the existing column→facet logic picks it up\n    enc_target = spec[\"layer\"][1][\"encoding\"] if chart_type in (\"World Map\", \"US Map\") else spec.get(\"encoding\", {})\n    if \"facet\" in enc_target and \"column\" not in enc_target:\n        enc_target[\"column\"] = enc_target.pop(\"facet\")\n    \n    # Handle faceting (column without row becomes facet)\n    if \"encoding\" in spec:\n        if \"column\" in spec[\"encoding\"] and \"row\" not in spec[\"encoding\"]:\n            spec[\"encoding\"][\"facet\"] = spec[\"encoding\"][\"column\"]\n            spec[\"encoding\"][\"facet\"][\"columns\"] = 6\n            del spec[\"encoding\"][\"column\"]\n    \n    # Handle nominal axes with many entries\n    spec_encoding = spec.get(\"encoding\", {})\n    for channel in ['x', 'y', 'column', 'row']:\n        if channel in spec_encoding:\n            encoding = spec_encoding[channel]\n            if encoding.get(\"type\") == \"nominal\":\n                field_name = encoding[\"field\"]\n                unique_values = df[field_name].unique()\n                \n                if len(unique_values) > max_nominal_values:\n                    values_to_keep = _get_top_values(\n                        df, field_name, unique_values, channel, spec, max_nominal_values\n                    )\n                    \n                    # Filter the data\n                    table_data = [\n                        row for row in table_data \n                        if row[field_name] in values_to_keep\n                    ]\n                    \n                    # Add placeholder for omitted values\n                    omitted_count = len(unique_values) - len(values_to_keep)\n                    placeholder = f\"...{omitted_count} items omitted\"\n                    \n                    # Update domain\n                    encoding[\"scale\"] = encoding.get(\"scale\", {})\n                    encoding[\"scale\"][\"domain\"] = list(values_to_keep) + [placeholder]\n                    \n                    # Style the placeholder\n                    encoding[\"axis\"] = encoding.get(\"axis\", {})\n                    encoding[\"axis\"][\"labelColor\"] = {\n                        \"condition\": {\n                            \"test\": f\"datum.label == '{placeholder}'\",\n                            \"value\": \"#999999\"\n                        },\n                        \"value\": \"#000000\"\n                    }\n    \n    # Apply spec quality improvements (null handling, tooltips, sizing, etc.)\n    table_data = _apply_spec_quality(spec, table_data, df, chart_type)\n\n    # Convert temporal fields to strings for Vega-Lite.\n    # Uses the robust convert_temporal_data which handles datetime objects,\n    # timestamps, year integers, date strings, etc.\n    table_data = convert_temporal_data(table_data, semantic_types)\n\n    # Post-encoding temporal guard: any field resolved as type=\"temporal\"\n    # must have its integer values converted to strings so VL doesn't\n    # interpret e.g. 2024 as 2024ms-since-epoch.  convert_temporal_data\n    # above handles fields with known semantic types, but fields resolved\n    # as temporal purely by name heuristic (e.g. column named \"year\")\n    # may still have raw integer values.\n    _temporal_fields = set()\n    for _enc in spec.get(\"encoding\", {}).values():\n        if isinstance(_enc, dict) and _enc.get(\"type\") == \"temporal\":\n            _f = _enc.get(\"field\")\n            if _f:\n                _temporal_fields.add(_f)\n    if _temporal_fields and table_data:\n        for row in table_data:\n            for _f in _temporal_fields:\n                v = row.get(_f)\n                if isinstance(v, (int, float)) and not isinstance(v, bool):\n                    row[_f] = str(int(v)) if v == int(v) else str(v)\n\n    # Charts that manage their own data (waterfall, radar, pyramid) set\n    # spec[\"data\"] in _post_process_chart — don't overwrite it.\n    if \"data\" not in spec:\n        spec[\"data\"] = {\"values\": table_data}\n    return spec\n\n\n# ---------------------------------------------------------------------------\n# _build_initial_spec — construct the initial VL spec skeleton for each type\n# ---------------------------------------------------------------------------\n\ndef _build_initial_spec(\n    chart_type: str,\n    template: dict,\n    df: pd.DataFrame,\n    encodings: dict,\n    config: dict | None,\n) -> dict:\n    \"\"\"Build the initial VL spec skeleton before encoding channels are applied.\"\"\"\n\n    if chart_type == \"Histogram\":\n        return {\n            \"mark\": \"bar\",\n            \"encoding\": {\n                \"x\": {\"bin\": True},\n                \"y\": {\"aggregate\": \"count\"},\n            },\n        }\n\n    if chart_type in (\"World Map\", \"US Map\"):\n        projection_type = \"albersUsa\" if chart_type == \"US Map\" else \"equalEarth\"\n        topo_url = (\n            \"https://vega.github.io/vega-lite/data/us-10m.json\"\n            if chart_type == \"US Map\"\n            else \"https://vega.github.io/vega-lite/data/world-110m.json\"\n        )\n        topo_feature = \"states\" if chart_type == \"US Map\" else \"countries\"\n        return {\n            \"width\": 500 if chart_type == \"US Map\" else 600,\n            \"height\": 300 if chart_type == \"US Map\" else 350,\n            \"layer\": [\n                {\n                    \"data\": {\"url\": topo_url, \"format\": {\"type\": \"topojson\", \"feature\": topo_feature}},\n                    \"projection\": {\"type\": projection_type},\n                    \"mark\": {\"type\": \"geoshape\", \"fill\": \"lightgray\", \"stroke\": \"white\"},\n                },\n                {\n                    \"projection\": {\"type\": projection_type},\n                    \"mark\": \"circle\",\n                    \"encoding\": {},\n                },\n            ],\n        }\n\n    if chart_type == \"Lollipop Chart\":\n        return {\n            \"encoding\": {},\n            \"layer\": [\n                {\"mark\": {\"type\": \"rule\", \"strokeWidth\": 1.5}, \"encoding\": {}},\n                {\"mark\": {\"type\": \"circle\", \"size\": int((config or {}).get(\"dotSize\", 80))}, \"encoding\": {}},\n            ],\n        }\n\n    if chart_type == \"Regression\":\n        reg_transform: dict = {\"regression\": \"__y__\", \"on\": \"__x__\"}\n        method = (config or {}).get(\"regressionMethod\", \"linear\")\n        if method and method != \"linear\":\n            reg_transform[\"method\"] = method\n            if method == \"poly\":\n                reg_transform[\"order\"] = int((config or {}).get(\"polyOrder\", 3))\n        return {\n            \"layer\": [\n                {\"mark\": \"circle\", \"encoding\": {}},\n                {\n                    \"mark\": {\"type\": \"line\", \"color\": \"red\"},\n                    \"transform\": [reg_transform],\n                    \"encoding\": {},\n                },\n            ],\n            \"encoding\": {},\n        }\n\n    if chart_type == \"Ranged Dot Plot\":\n        return {\n            \"encoding\": {},\n            \"layer\": [\n                {\"mark\": \"line\", \"encoding\": {\"detail\": {}}},\n                {\"mark\": {\"type\": \"point\", \"filled\": True}, \"encoding\": {\"color\": {}}},\n            ],\n        }\n\n    if chart_type == \"Candlestick Chart\":\n        return {\n            \"encoding\": {},\n            \"layer\": [\n                {\"mark\": \"rule\", \"encoding\": {}},\n                {\"mark\": {\"type\": \"bar\", \"size\": 14}, \"encoding\": {}},\n            ],\n        }\n\n    if chart_type == \"Waterfall Chart\":\n        # Will be rebuilt into layered spec in _post_process_chart\n        return {\"mark\": \"bar\", \"encoding\": {}}\n\n    if chart_type == \"Density Plot\":\n        return {\n            \"mark\": \"area\",\n            \"transform\": [{\"density\": \"__field__\"}],\n            \"encoding\": {\n                \"x\": {\"field\": \"value\", \"type\": \"quantitative\"},\n                \"y\": {\"field\": \"density\", \"type\": \"quantitative\"},\n            },\n        }\n\n    if chart_type == \"Radar Chart\":\n        # Radar is entirely computed; placeholder spec\n        return {\"mark\": \"point\", \"encoding\": {}}\n\n    if chart_type == \"Pyramid Chart\":\n        return {\n            \"spacing\": 0,\n            \"resolve\": {\"scale\": {\"y\": \"shared\"}},\n            \"hconcat\": [\n                {\n                    \"mark\": \"bar\",\n                    \"encoding\": {\n                        \"y\": {},\n                        \"x\": {\"scale\": {\"reverse\": True}, \"stack\": None},\n                        \"opacity\": {\"value\": 0.9},\n                        \"color\": {\"value\": \"#4e79a7\"},\n                    },\n                },\n                {\n                    \"mark\": \"bar\",\n                    \"encoding\": {\n                        \"y\": {\"axis\": None},\n                        \"x\": {\"stack\": None},\n                        \"opacity\": {\"value\": 0.9},\n                        \"color\": {\"value\": \"#e15759\"},\n                    },\n                },\n            ],\n            \"config\": {\"view\": {\"stroke\": None}, \"axis\": {\"grid\": False}},\n        }\n\n    if chart_type == \"Streamgraph\":\n        return {\"mark\": \"area\", \"encoding\": {}}\n\n    if chart_type == \"Rose Chart\":\n        mark = {\"type\": \"arc\", \"stroke\": \"white\", \"padAngle\": 0.02}\n        return {\"mark\": mark, \"encoding\": {}}\n\n    # Default: use template mark\n    mark = template[\"mark\"]\n    return {\"mark\": mark, \"encoding\": {}}\n\n\n# ---------------------------------------------------------------------------\n# _post_process_chart — chart-type-specific post-processing\n# ---------------------------------------------------------------------------\n\ndef _post_process_chart(\n    spec: dict,\n    chart_type: str,\n    df: pd.DataFrame,\n    encodings: dict,\n    config: dict | None,\n) -> None:\n    \"\"\"Apply chart-type-specific post-processing after encodings are set.\"\"\"\n\n    if chart_type == \"Lollipop Chart\":\n        _post_process_lollipop(spec, df, encodings)\n\n    elif chart_type == \"Regression\":\n        _post_process_regression(spec, encodings)\n\n    elif chart_type == \"Ranged Dot Plot\":\n        _post_process_ranged_dot(spec, encodings)\n\n    elif chart_type == \"Candlestick Chart\":\n        _post_process_candlestick(spec, df, encodings, config)\n\n    elif chart_type == \"Waterfall Chart\":\n        _post_process_waterfall(spec, df, encodings, config)\n\n    elif chart_type == \"Density Plot\":\n        _post_process_density(spec, encodings, config)\n\n    elif chart_type == \"Radar Chart\":\n        _post_process_radar(spec, df, encodings, config)\n\n    elif chart_type == \"Pyramid Chart\":\n        _post_process_pyramid(spec, df, encodings)\n\n    elif chart_type == \"Streamgraph\":\n        _post_process_streamgraph(spec, encodings, config)\n\n    elif chart_type == \"Bump Chart\":\n        _post_process_bump(spec, encodings)\n\n    elif chart_type == \"Strip Plot\":\n        _post_process_strip(spec, df, encodings, config)\n\n    elif chart_type == \"Rose Chart\":\n        _post_process_rose(spec, df, encodings, config)\n\n\ndef _post_process_lollipop(spec: dict, df: pd.DataFrame, encodings: dict) -> None:\n    \"\"\"Lollipop: rule from 0 + circle at value. Both layers share positional encodings.\"\"\"\n    enc = spec.get(\"encoding\", {})\n    layer_rule = spec[\"layer\"][0]\n    layer_circle = spec[\"layer\"][1]\n\n    for ch in (\"x\", \"y\"):\n        if ch in enc:\n            layer_rule[\"encoding\"][ch] = dict(enc[ch])\n            layer_circle[\"encoding\"][ch] = dict(enc[ch])\n\n    # Anchor rule from 0 on the quantitative axis\n    for axis in (\"y\", \"x\"):\n        if enc.get(axis, {}).get(\"type\") == \"quantitative\":\n            layer_rule[\"encoding\"][f\"{axis}2\"] = {\"datum\": 0}\n            break\n\n    # Color → circle layer only\n    if \"color\" in enc:\n        layer_circle[\"encoding\"][\"color\"] = enc.pop(\"color\")\n\n    # Facets stay at top-level\n    for ch in list(enc.keys()):\n        if ch not in (\"x\", \"y\"):\n            pass  # keep in top encoding for faceting\n\n\ndef _post_process_regression(spec: dict, encodings: dict) -> None:\n    \"\"\"Regression: scatter layer + regression trend line.\"\"\"\n    scatter = spec[\"layer\"][0]\n    regression = spec[\"layer\"][1]\n    top_enc = spec.get(\"encoding\", {})\n\n    x_enc = top_enc.get(\"x\")\n    y_enc = top_enc.get(\"y\")\n\n    if x_enc:\n        scatter[\"encoding\"][\"x\"] = dict(x_enc)\n        regression[\"encoding\"][\"x\"] = dict(x_enc)\n        regression[\"transform\"][0][\"on\"] = x_enc.get(\"field\", \"__x__\")\n    if y_enc:\n        scatter[\"encoding\"][\"y\"] = dict(y_enc)\n        regression[\"encoding\"][\"y\"] = dict(y_enc)\n        regression[\"transform\"][0][\"regression\"] = y_enc.get(\"field\", \"__y__\")\n\n    if \"color\" in top_enc:\n        color_enc = top_enc.pop(\"color\")\n        scatter[\"encoding\"][\"color\"] = color_enc\n        # Group regression by color field so each class gets its own trend line\n        color_field = color_enc.get(\"field\")\n        if color_field:\n            regression[\"transform\"][0][\"groupby\"] = [color_field]\n            regression[\"encoding\"][\"color\"] = dict(color_enc)\n            # Remove hardcoded red so Vega-Lite uses the shared color scale\n            regression[\"mark\"] = {\"type\": \"line\"}\n    if \"size\" in top_enc:\n        scatter[\"encoding\"][\"size\"] = top_enc.pop(\"size\")\n\n    # Facets\n    for ch in (\"column\", \"row\"):\n        if ch in top_enc:\n            pass  # keep at top level\n\n\ndef _post_process_ranged_dot(spec: dict, encodings: dict) -> None:\n    \"\"\"Ranged dot plot: line + point layers; detail links line segments.\"\"\"\n    enc = spec.get(\"encoding\", {})\n    line_layer = spec[\"layer\"][0]\n    point_layer = spec[\"layer\"][1]\n\n    if \"color\" in enc:\n        point_layer[\"encoding\"][\"color\"] = enc.pop(\"color\")\n\n    # Copy nominal axis into detail encoding for line layer\n    if enc.get(\"y\", {}).get(\"type\") == \"nominal\":\n        import copy\n        line_layer[\"encoding\"][\"detail\"] = copy.deepcopy(enc[\"y\"])\n    elif enc.get(\"x\", {}).get(\"type\") == \"nominal\":\n        import copy\n        line_layer[\"encoding\"][\"detail\"] = copy.deepcopy(enc[\"x\"])\n\n\ndef _post_process_candlestick(\n    spec: dict, df: pd.DataFrame, encodings: dict, config: dict | None\n) -> None:\n    \"\"\"Candlestick: rule (wick) + bar (body) with conditional coloring.\"\"\"\n    enc = spec.get(\"encoding\", {})\n    rule = spec[\"layer\"][0]\n    bar = spec[\"layer\"][1]\n\n    # x shared\n    if \"x\" in enc:\n        x_enc = dict(enc[\"x\"])\n        if x_enc.get(\"type\") in (\"nominal\", \"ordinal\"):\n            x_enc[\"sort\"] = None\n        spec[\"encoding\"][\"x\"] = x_enc\n\n    # Shared y-axis\n    y_axis = {\"type\": \"quantitative\", \"scale\": {\"zero\": False}, \"axis\": {\"title\": None}}\n    spec[\"title\"] = {\"text\": \"Price\", \"anchor\": \"start\", \"fontSize\": 11,\n                      \"fontWeight\": \"normal\", \"color\": \"#666\"}\n\n    # Rule: y = low, y2 = high\n    open_f = encodings.get(\"open\", {}).get(\"field\")\n    high_f = encodings.get(\"high\", {}).get(\"field\")\n    low_f  = encodings.get(\"low\", {}).get(\"field\")\n    close_f = encodings.get(\"close\", {}).get(\"field\")\n\n    if low_f and high_f:\n        rule[\"encoding\"][\"y\"] = {\"field\": low_f, **y_axis}\n        rule[\"encoding\"][\"y2\"] = {\"field\": high_f}\n    if open_f and close_f:\n        bar[\"encoding\"][\"y\"] = {\"field\": open_f, **y_axis}\n        bar[\"encoding\"][\"y2\"] = {\"field\": close_f}\n        # Conditional color: green up, red down\n        bar[\"encoding\"][\"color\"] = {\n            \"condition\": {\n                \"test\": f\"datum['{open_f}'] < datum['{close_f}']\",\n                \"value\": \"#06982d\",\n            },\n            \"value\": \"#ae1325\",\n        }\n\n    # Adaptive bar size\n    x_field = enc.get(\"x\", {}).get(\"field\")\n    if x_field and x_field in df.columns:\n        card = df[x_field].nunique()\n        plot_w = 400\n        bar_size = max(2, min(20, round(plot_w * 0.6 / max(card, 1))))\n        bar[\"mark\"][\"size\"] = bar_size\n\n    # Remove OHLC channels from top-level encoding (not VL channels)\n    for ch in (\"open\", \"high\", \"low\", \"close\"):\n        enc.pop(ch, None)\n\n\ndef _post_process_waterfall(\n    spec: dict, df: pd.DataFrame, encodings: dict, config: dict | None\n) -> None:\n    \"\"\"Waterfall: cumulative bar chart with positive/negative coloring.\"\"\"\n    x_field = encodings.get(\"x\", {}).get(\"field\")\n    y_field = encodings.get(\"y\", {}).get(\"field\")\n    if not x_field or not y_field or x_field not in df.columns or y_field not in df.columns:\n        return\n\n    # Build cumulative waterfall data\n    wf_data = []\n    cumsum = 0\n    rows = df[[x_field, y_field]].to_dict(\"records\")\n    total_rows = len(rows)\n    for i, row in enumerate(rows):\n        val = row[y_field] if isinstance(row[y_field], (int, float)) else 0\n        prev = cumsum\n        if i == 0 or i == total_rows - 1:\n            wf_type = \"total\"\n            cumsum = val\n            prev = 0\n        else:\n            wf_type = \"increase\" if val >= 0 else \"decrease\"\n            cumsum += val\n        wf_data.append({\n            x_field: row[x_field],\n            \"__wf_prev_sum\": prev,\n            \"__wf_sum\": cumsum,\n            \"__wf_color\": wf_type,\n        })\n\n    corner_radius = int((config or {}).get(\"cornerRadius\", 0))\n    mark_obj: dict = {\"type\": \"bar\"}\n    if corner_radius:\n        mark_obj[\"cornerRadius\"] = corner_radius\n\n    spec.clear()\n    spec.update({\n        \"data\": {\"values\": wf_data},\n        \"encoding\": {\n            \"x\": {\"field\": x_field, \"type\": \"ordinal\", \"sort\": None,\n                   \"axis\": {\"labelAngle\": -45}},\n        },\n        \"layer\": [\n            {\n                \"mark\": mark_obj,\n                \"encoding\": {\n                    \"y\": {\"field\": \"__wf_prev_sum\", \"type\": \"quantitative\", \"title\": y_field},\n                    \"y2\": {\"field\": \"__wf_sum\"},\n                    \"color\": {\n                        \"field\": \"__wf_color\",\n                        \"type\": \"nominal\",\n                        \"scale\": {\n                            \"domain\": [\"total\", \"increase\", \"decrease\"],\n                            \"range\": [\"#f7e0b6\", \"#93c4aa\", \"#f78a64\"],\n                        },\n                        \"legend\": {\"title\": \"Type\"},\n                    },\n                },\n            }\n        ],\n    })\n\n\ndef _post_process_density(spec: dict, encodings: dict, config: dict | None) -> None:\n    \"\"\"Density plot: kernel density transform.\"\"\"\n    x_enc = encodings.get(\"x\", {})\n    x_field = x_enc.get(\"field\")\n    if x_field:\n        spec[\"transform\"][0][\"density\"] = x_field\n        spec[\"encoding\"][\"x\"][\"title\"] = x_field\n\n    color_enc = encodings.get(\"color\", {})\n    if color_enc.get(\"field\"):\n        spec[\"transform\"][0][\"groupby\"] = [color_enc[\"field\"]]\n        spec[\"encoding\"][\"color\"] = {\n            \"field\": color_enc[\"field\"],\n            \"type\": color_enc.get(\"type\", \"nominal\"),\n        }\n\n    bandwidth = (config or {}).get(\"bandwidth\")\n    if bandwidth and float(bandwidth) > 0:\n        spec[\"transform\"][0][\"bandwidth\"] = float(bandwidth)\n\n    # Remove x/y from top-level encoding (already set by template)\n    # Don't re-add them from the encoding loop\n\n\ndef _post_process_radar(\n    spec: dict, df: pd.DataFrame, encodings: dict, config: dict | None\n) -> None:\n    \"\"\"Radar chart: entirely client-computed polar projection.\"\"\"\n    x_enc = encodings.get(\"x\", {})\n    y_enc = encodings.get(\"y\", {})\n    color_enc = encodings.get(\"color\", {})\n\n    axis_field = x_enc.get(\"field\")\n    value_field = y_enc.get(\"field\")\n    group_field = color_enc.get(\"field\")\n\n    if not axis_field or not value_field:\n        return\n    if axis_field not in df.columns or value_field not in df.columns:\n        return\n\n    axes = df[axis_field].unique().tolist()\n    n_axes = len(axes)\n    if n_axes < 3:\n        return\n\n    groups = df[group_field].unique().tolist() if group_field and group_field in df.columns else [\"__all__\"]\n\n    # Compute per-axis max for normalization\n    axis_max = {}\n    for ax in axes:\n        vals = df[df[axis_field] == ax][value_field].dropna()\n        mx = float(vals.max()) if len(vals) > 0 else 1\n        axis_max[ax] = mx if mx > 0 else 1\n\n    # Build polar coordinates\n    import math as _math\n\n    polygon_data = []\n    point_data = []\n    for grp in groups:\n        subset = df if grp == \"__all__\" else df[df[group_field] == grp]\n        for i, ax in enumerate(axes):\n            angle = 2 * _math.pi * i / n_axes\n            vals = subset[subset[axis_field] == ax][value_field].dropna()\n            mean_val = float(vals.mean()) if len(vals) > 0 else 0\n            norm = mean_val / axis_max[ax]\n            px = norm * _math.sin(angle)\n            py = -norm * _math.cos(angle)\n            rec = {\"__x\": px, \"__y\": py, \"__group\": grp, \"__angle\": angle, \"__axis\": ax, \"__value\": mean_val}\n            polygon_data.append(rec)\n            point_data.append(rec)\n        # Close polygon\n        if n_axes > 0:\n            first = polygon_data[-(n_axes)]\n            polygon_data.append({**first})\n\n    # Spoke data\n    spoke_data = []\n    for i, ax in enumerate(axes):\n        angle = 2 * _math.pi * i / n_axes\n        spoke_data.append({\"__x\": 0, \"__y\": 0, \"__x2\": _math.sin(angle), \"__y2\": -_math.cos(angle)})\n\n    # Ring data (concentric polygons at 0.25, 0.5, 0.75, 1.0)\n    ring_data = []\n    for level in (0.25, 0.5, 0.75, 1.0):\n        for i in range(n_axes + 1):\n            angle = 2 * _math.pi * (i % n_axes) / n_axes\n            ring_data.append({\n                \"__x\": level * _math.sin(angle),\n                \"__y\": -level * _math.cos(angle),\n                \"__level\": level,\n                \"__order\": i,\n            })\n\n    # Label data\n    label_data = []\n    for i, ax in enumerate(axes):\n        angle = 2 * _math.pi * i / n_axes\n        r = 1.12\n        label_data.append({\n            \"__x\": r * _math.sin(angle),\n            \"__y\": -r * _math.cos(angle),\n            \"__label\": f\"{ax}\\n({axis_max[ax]:.0f})\",\n            \"__align\": \"center\" if abs(_math.sin(angle)) < 0.01 else (\"left\" if _math.sin(angle) > 0 else \"right\"),\n        })\n\n    filled = (config or {}).get(\"filled\", True)\n    fill_opacity = float((config or {}).get(\"fillOpacity\", 0.15))\n    stroke_width = float((config or {}).get(\"strokeWidth\", 1.5))\n\n    scale_xy = {\"domain\": [-1.18, 1.18]}\n    layers = [\n        # Spokes\n        {\n            \"data\": {\"values\": spoke_data},\n            \"mark\": {\"type\": \"rule\", \"color\": \"#ddd\"},\n            \"encoding\": {\n                \"x\": {\"field\": \"__x\", \"type\": \"quantitative\", \"scale\": scale_xy, \"axis\": None},\n                \"y\": {\"field\": \"__y\", \"type\": \"quantitative\", \"scale\": scale_xy, \"axis\": None},\n                \"x2\": {\"field\": \"__x2\"},\n                \"y2\": {\"field\": \"__y2\"},\n            },\n        },\n        # Rings\n        {\n            \"data\": {\"values\": ring_data},\n            \"mark\": {\"type\": \"line\", \"color\": \"#eee\", \"strokeWidth\": 0.5},\n            \"encoding\": {\n                \"x\": {\"field\": \"__x\", \"type\": \"quantitative\", \"scale\": scale_xy, \"axis\": None},\n                \"y\": {\"field\": \"__y\", \"type\": \"quantitative\", \"scale\": scale_xy, \"axis\": None},\n                \"detail\": {\"field\": \"__level\", \"type\": \"nominal\"},\n                \"order\": {\"field\": \"__order\", \"type\": \"quantitative\"},\n            },\n        },\n        # Labels\n        {\n            \"data\": {\"values\": label_data},\n            \"mark\": {\"type\": \"text\", \"fontSize\": 11},\n            \"encoding\": {\n                \"x\": {\"field\": \"__x\", \"type\": \"quantitative\", \"scale\": scale_xy, \"axis\": None},\n                \"y\": {\"field\": \"__y\", \"type\": \"quantitative\", \"scale\": scale_xy, \"axis\": None},\n                \"text\": {\"field\": \"__label\", \"type\": \"nominal\"},\n                \"align\": {\"field\": \"__align\", \"type\": \"nominal\"},\n            },\n        },\n        # Data polygon\n        {\n            \"data\": {\"values\": polygon_data},\n            \"mark\": {\n                \"type\": \"line\",\n                \"interpolate\": \"linear-closed\",\n                \"strokeWidth\": stroke_width,\n                **({\"filled\": True, \"fillOpacity\": fill_opacity} if filled else {}),\n            },\n            \"encoding\": {\n                \"x\": {\"field\": \"__x\", \"type\": \"quantitative\", \"scale\": scale_xy, \"axis\": None},\n                \"y\": {\"field\": \"__y\", \"type\": \"quantitative\", \"scale\": scale_xy, \"axis\": None},\n                \"color\": {\"field\": \"__group\", \"type\": \"nominal\"},\n                \"order\": {\"field\": \"__angle\", \"type\": \"quantitative\"},\n            },\n        },\n        # Data points\n        {\n            \"data\": {\"values\": point_data},\n            \"mark\": {\"type\": \"point\", \"filled\": True, \"size\": 25},\n            \"encoding\": {\n                \"x\": {\"field\": \"__x\", \"type\": \"quantitative\", \"scale\": scale_xy, \"axis\": None},\n                \"y\": {\"field\": \"__y\", \"type\": \"quantitative\", \"scale\": scale_xy, \"axis\": None},\n                \"color\": {\"field\": \"__group\", \"type\": \"nominal\"},\n            },\n        },\n    ]\n\n    size = min(400, 400)\n    spec.clear()\n    spec.update({\n        \"width\": size,\n        \"height\": size,\n        \"layer\": layers,\n        \"config\": {\"view\": {\"stroke\": None}},\n    })\n\n\ndef _post_process_pyramid(spec: dict, df: pd.DataFrame, encodings: dict) -> None:\n    \"\"\"Pyramid: hconcat of two mirrored bar panels split by color field.\"\"\"\n    if \"hconcat\" not in spec:\n        return\n\n    x_enc = encodings.get(\"x\", {})\n    y_enc = encodings.get(\"y\", {})\n    color_enc = encodings.get(\"color\", {})\n\n    y_field = y_enc.get(\"field\") or x_enc.get(\"field\")\n    x_field = x_enc.get(\"field\") if y_enc.get(\"field\") else y_enc.get(\"field\")\n    group_field = color_enc.get(\"field\")\n\n    if not y_field or not x_field or not group_field:\n        return\n    if y_field not in df.columns or x_field not in df.columns or group_field not in df.columns:\n        return\n\n    groups = df[group_field].unique().tolist()\n    left_group = groups[0] if len(groups) > 0 else None\n    right_group = groups[1] if len(groups) > 1 else None\n\n    table_data = df.to_dict(\"records\")\n    left_panel = spec[\"hconcat\"][0]\n    right_panel = spec[\"hconcat\"][1]\n\n    # y is the categorical axis (shared)\n    left_panel[\"encoding\"][\"y\"] = {\"field\": y_field, \"type\": \"nominal\", \"sort\": None}\n    right_panel[\"encoding\"][\"y\"] = {\"field\": y_field, \"type\": \"nominal\", \"axis\": None, \"sort\": None}\n\n    # x is the quantitative axis\n    x_max = float(df[x_field].max()) if pd.api.types.is_numeric_dtype(df[x_field]) else 100\n    left_panel[\"encoding\"][\"x\"] = {\n        \"field\": x_field, \"type\": \"quantitative\",\n        \"scale\": {\"reverse\": True, \"domain\": [0, x_max]},\n        \"stack\": None,\n    }\n    right_panel[\"encoding\"][\"x\"] = {\n        \"field\": x_field, \"type\": \"quantitative\",\n        \"scale\": {\"domain\": [0, x_max]},\n        \"stack\": None,\n    }\n\n    # Filter each panel\n    if left_group is not None:\n        left_panel[\"transform\"] = [{\"filter\": {\"field\": group_field, \"equal\": left_group}}]\n        left_panel[\"encoding\"][\"color\"] = {\"value\": \"#4e79a7\"}\n    if right_group is not None:\n        right_panel[\"transform\"] = [{\"filter\": {\"field\": group_field, \"equal\": right_group}}]\n        right_panel[\"encoding\"][\"color\"] = {\"value\": \"#e15759\"}\n\n    spec[\"data\"] = {\"values\": table_data}\n\n\ndef _post_process_streamgraph(spec: dict, encodings: dict, config: dict | None) -> None:\n    \"\"\"Streamgraph: stacked area with center baseline.\"\"\"\n    enc = spec.get(\"encoding\", {})\n    # Force center stack on the quantitative axis\n    for axis in (\"y\", \"x\"):\n        if enc.get(axis, {}).get(\"type\") == \"quantitative\":\n            enc[axis][\"stack\"] = \"center\"\n            enc[axis][\"axis\"] = None\n            break\n\n    interpolate = (config or {}).get(\"interpolate\")\n    if interpolate:\n        spec[\"mark\"] = {\"type\": \"area\", \"interpolate\": interpolate}\n\n\ndef _post_process_bump(spec: dict, encodings: dict) -> None:\n    \"\"\"Bump chart: reversed y-axis so rank 1 is at top.\"\"\"\n    enc = spec.get(\"encoding\", {})\n    # Detect rank axis (defaults to y)\n    y_enc = enc.get(\"y\", {})\n    if y_enc:\n        y_enc.setdefault(\"scale\", {})[\"reverse\"] = True\n\n\ndef _post_process_strip(\n    spec: dict, df: pd.DataFrame, encodings: dict, config: dict | None\n) -> None:\n    \"\"\"Strip plot: jittered points along a categorical axis.\"\"\"\n    enc = spec.get(\"encoding\", {})\n    cfg = config or {}\n    step_width = int(cfg.get(\"stepWidth\", 20))\n\n    # Detect categorical axis\n    cat_axis = None\n    cont_axis = None\n    for axis in (\"x\", \"y\"):\n        if enc.get(axis, {}).get(\"type\") in (\"nominal\", \"ordinal\"):\n            cat_axis = axis\n            cont_axis = \"y\" if axis == \"x\" else \"x\"\n            break\n\n    if cat_axis is None:\n        return\n\n    # Set step-based width/height\n    dim = \"width\" if cat_axis == \"x\" else \"height\"\n    spec[dim] = {\"step\": step_width}\n\n    # Auto point size\n    cat_field = enc[cat_axis].get(\"field\")\n    if cat_field and cat_field in df.columns:\n        max_group = int(df.groupby(cat_field).size().max())\n        cont_dim = spec.get(\"height\" if cat_axis == \"x\" else \"width\", 300)\n        if isinstance(cont_dim, dict):\n            cont_len = 300\n        else:\n            cont_len = cont_dim\n        ideal_size = max(5, min(100, int(0.35 * step_width * cont_len / max(max_group, 1))))\n        point_size = int(cfg.get(\"pointSize\", 0)) or ideal_size\n    else:\n        point_size = int(cfg.get(\"pointSize\", 0)) or 30\n\n    mark = spec.get(\"mark\", {})\n    if isinstance(mark, dict):\n        mark[\"size\"] = point_size\n    else:\n        spec[\"mark\"] = {\"type\": \"circle\", \"opacity\": 0.7, \"size\": point_size}\n\n    # Jitter transform\n    jitter_width = step_width * 0.7\n    spec.setdefault(\"transform\", []).append({\n        \"calculate\": f\"{-jitter_width/2} + random() * {jitter_width}\",\n        \"as\": \"__jitter\",\n    })\n    offset_ch = \"xOffset\" if cat_axis == \"x\" else \"yOffset\"\n    enc[offset_ch] = {\n        \"field\": \"__jitter\",\n        \"type\": \"quantitative\",\n        \"axis\": None,\n        \"scale\": {\"domain\": [-step_width / 2, step_width / 2]},\n    }\n\n\ndef _post_process_rose(\n    spec: dict, df: pd.DataFrame, encodings: dict, config: dict | None\n) -> None:\n    \"\"\"Rose (Nightingale) chart: polar bar using arc mark.\"\"\"\n    enc = spec.get(\"encoding\", {})\n    cfg = config or {}\n\n    x_enc = enc.pop(\"x\", None)\n    y_enc = enc.pop(\"y\", None)\n\n    # x → theta (the angular/category axis)\n    if x_enc:\n        theta_enc = {\"field\": x_enc[\"field\"], \"type\": \"nominal\", \"stack\": True}\n        if x_enc.get(\"sort\"):\n            theta_enc[\"sort\"] = x_enc[\"sort\"]\n        enc[\"theta\"] = theta_enc\n\n    # y → radius\n    if y_enc:\n        radius_field = y_enc[\"field\"]\n        enc[\"radius\"] = {\"field\": radius_field, \"type\": \"quantitative\", \"scale\": {\"type\": \"sqrt\"}}\n    else:\n        enc[\"radius\"] = {\"aggregate\": \"count\", \"type\": \"quantitative\", \"scale\": {\"type\": \"sqrt\"}}\n\n    # color: use the explicit color field or fall back to x field\n    if \"color\" not in enc and x_enc:\n        enc[\"color\"] = {\"field\": x_enc[\"field\"], \"type\": \"nominal\"}\n\n    # Config\n    inner_radius = int(cfg.get(\"innerRadius\", 0))\n    pad_angle = float(cfg.get(\"padAngle\", 0.02))\n    mark = spec.get(\"mark\", {})\n    if isinstance(mark, dict):\n        if inner_radius:\n            mark[\"innerRadius\"] = inner_radius\n        mark[\"padAngle\"] = pad_angle\n    else:\n        spec[\"mark\"] = {\"type\": \"arc\", \"stroke\": \"white\", \"padAngle\": pad_angle}\n        if inner_radius:\n            spec[\"mark\"][\"innerRadius\"] = inner_radius\n\n    # Square aspect ratio\n    spec[\"width\"] = 300\n    spec[\"height\"] = 300\n\n\ndef _apply_semantic_encoding(\n    encoding_obj: dict,\n    cs: ChannelSemantics,\n    channel: str,\n    chart_type: str,\n    config: dict | None,\n) -> None:\n    \"\"\"\n    Apply semantic-aware enhancements to a VL encoding object.\n\n    Kept intentionally minimal — only ordinal sort order (months, days).\n    Formatting, domains, ticks, zero-baseline, etc. are left to VL\n    defaults or handled by the front-end TS library.\n    \"\"\"\n    vl_type = encoding_obj.get(\"type\", \"nominal\")\n\n    # --- Ordinal sort order (months, days, quarters) ---\n    if cs.ordinal_sort_order and vl_type in ('ordinal', 'nominal'):\n        encoding_obj[\"sort\"] = cs.ordinal_sort_order\n\n    # --- Basic color scheme fallback ---\n    if vl_type == 'nominal' and channel == 'color':\n        encoding_obj.setdefault(\"scale\", {}).setdefault(\"scheme\", \"tableau10\")\n\n\ndef _apply_spec_quality(\n    spec: dict,\n    table_data: list[dict],\n    df: pd.DataFrame,\n    chart_type: str,\n) -> list[dict]:\n    \"\"\"\n    Post-processing quality improvements for VL specs.\n\n    Mirrors the TS ``vlApplyLayoutToSpec`` logic in instantiate-spec.ts.\n    Returns (potentially filtered) table_data.\n    \"\"\"\n    encoding = spec.get(\"encoding\", {})\n    config = spec.setdefault(\"config\", {})\n\n    # ── 1. Filter nulls for line / area y-field (prevents broken lines) ───\n    #    Default VL behaviour leaves gaps at null points.  Filtering them\n    #    out from the data connects the line across missing values.\n    if chart_type in ('Line Chart', 'Area Chart'):\n        y_field = encoding.get(\"y\", {}).get(\"field\")\n        if y_field:\n            table_data = [\n                row for row in table_data\n                if row.get(y_field) is not None\n                and not (isinstance(row.get(y_field), float) and pd.isna(row[y_field]))\n            ]\n\n    # ── 2. Tooltips ───────────────────────────────────────────────────────\n    config.setdefault(\"mark\", {})[\"tooltip\"] = True\n\n    # ── 3. Canvas sizing defaults ─────────────────────────────────────────\n    view = config.setdefault(\"view\", {})\n    view.setdefault(\"continuousWidth\", 400)\n    view.setdefault(\"continuousHeight\", 300)\n\n    # ── 4. Axis label limits (prevent long labels from overflowing) ──────\n    ax_x = config.setdefault(\"axisX\", {})\n    ax_x.setdefault(\"labelLimit\", 120)\n    ax_y = config.setdefault(\"axisY\", {})\n    ax_y.setdefault(\"labelLimit\", 120)\n\n    # ── 5. Step-based sizing for wide discrete axes ───────────────────────\n    for axis_ch, dim_key in [(\"x\", \"width\"), (\"y\", \"height\")]:\n        enc = encoding.get(axis_ch, {})\n        if (\n            enc.get(\"type\") in (\"nominal\", \"ordinal\")\n            and enc.get(\"field\")\n            and dim_key not in spec\n        ):\n            field = enc[\"field\"]\n            if field in df.columns:\n                n_unique = df[field].nunique()\n                if n_unique > 12:\n                    step = max(12, min(30, 600 // n_unique))\n                    spec[dim_key] = {\"step\": step}\n\n    # ── 6. X-axis label rotation for crowded labels ──────────────────────\n    x_enc = encoding.get(\"x\", {})\n    if x_enc.get(\"type\") in (\"nominal\", \"ordinal\") and x_enc.get(\"field\"):\n        field = x_enc[\"field\"]\n        if field in df.columns:\n            n_unique = df[field].nunique()\n            vals = df[field].dropna().astype(str)\n            max_label_len = int(vals.str.len().max()) if len(vals) > 0 else 0\n            if n_unique > 8 or (n_unique > 4 and max_label_len > 10):\n                if \"labelAngle\" not in ax_x:\n                    ax_x[\"labelAngle\"] = -45\n                    ax_x[\"labelAlign\"] = \"right\"\n                    ax_x[\"labelBaseline\"] = \"top\"\n\n    # ── 7. Facet header limits ────────────────────────────────────────────\n    for facet_ch in (\"facet\", \"column\", \"row\"):\n        enc = encoding.get(facet_ch)\n        if enc and enc.get(\"field\") and enc[\"field\"] in df.columns:\n            n_facets = df[enc[\"field\"]].nunique()\n            if n_facets > 6:\n                config.setdefault(\"header\", {}).update({\n                    \"labelLimit\": 120, \"labelFontSize\": 9,\n                })\n                break\n\n    # ── 8. Faceted chart lighter axis titles ──────────────────────────────\n    has_row = \"row\" in encoding\n    has_col = \"column\" in encoding or \"facet\" in encoding\n    if has_row or has_col:\n        light_title = {\n            \"titleFontWeight\": \"normal\",\n            \"titleFontSize\": 11,\n            \"titleColor\": \"#666\",\n        }\n        for ax_key in (\"axisX\", \"axisY\"):\n            ax_cfg = config.setdefault(ax_key, {})\n            for k, v in light_title.items():\n                ax_cfg.setdefault(k, v)\n\n    # ── 9. Dual-legend repositioning ──────────────────────────────────────\n    #    When two+ channels produce legends (e.g. color + size), move the\n    #    categorical legend to the bottom to free plot area width.\n    legend_channels = [\n        ch for ch in (\"color\", \"size\", \"shape\", \"opacity\")\n        if ch in encoding and encoding[ch].get(\"field\")\n    ]\n    if len(legend_channels) >= 2:\n        cat_chs = [\n            ch for ch in legend_channels\n            if encoding[ch].get(\"type\") in (\"nominal\", \"ordinal\")\n        ]\n        quant_chs = [\n            ch for ch in legend_channels\n            if encoding[ch].get(\"type\") in (\"quantitative\", \"temporal\")\n        ]\n        if cat_chs and quant_chs:\n            for ch in cat_chs:\n                legend = encoding[ch].setdefault(\"legend\", {})\n                legend[\"orient\"] = \"bottom\"\n                legend[\"direction\"] = \"horizontal\"\n\n    return table_data\n\n\ndef _apply_chart_config(spec: dict, chart_type: str, config: dict):\n    \"\"\"Apply optional config overrides to a Vega-Lite spec.\"\"\"\n    if not config:\n        return\n    \n    def _ensure_mark_obj(s):\n        \"\"\"Convert string mark to object so we can add properties.\"\"\"\n        if isinstance(s.get(\"mark\"), str):\n            s[\"mark\"] = {\"type\": s[\"mark\"]}\n    \n    if chart_type == \"Histogram\":\n        bin_count = config.get(\"binCount\")\n        if bin_count and \"encoding\" in spec and \"x\" in spec[\"encoding\"]:\n            spec[\"encoding\"][\"x\"][\"bin\"] = {\"maxbins\": int(bin_count)}\n    \n    elif chart_type == \"Pie Chart\":\n        inner_radius = config.get(\"innerRadius\")\n        if inner_radius is not None:\n            _ensure_mark_obj(spec)\n            spec[\"mark\"][\"innerRadius\"] = int(inner_radius)\n    \n    elif chart_type == \"Heatmap\":\n        color_scheme = config.get(\"colorScheme\")\n        if color_scheme and \"encoding\" in spec and \"color\" in spec[\"encoding\"]:\n            spec[\"encoding\"][\"color\"].setdefault(\"scale\", {})[\"scheme\"] = color_scheme\n    \n    elif chart_type == \"Scatter Plot\":\n        opacity = config.get(\"opacity\")\n        if opacity is not None:\n            _ensure_mark_obj(spec)\n            spec[\"mark\"][\"opacity\"] = float(opacity)\n    \n    elif chart_type in (\"Bar Chart\", \"Grouped Bar Chart\", \"Stacked Bar Chart\"):\n        corner_radius = config.get(\"cornerRadius\")\n        if corner_radius is not None:\n            _ensure_mark_obj(spec)\n            spec[\"mark\"][\"cornerRadius\"] = int(corner_radius)\n    \n    elif chart_type in (\"Line Chart\", \"Dotted Line Chart\"):\n        interpolate = config.get(\"interpolate\")\n        if interpolate:\n            _ensure_mark_obj(spec)\n            spec[\"mark\"][\"interpolate\"] = interpolate\n    \n    elif chart_type == \"Area Chart\":\n        interpolate = config.get(\"interpolate\")\n        opacity = config.get(\"opacity\")\n        stack_mode = config.get(\"stackMode\")\n        _ensure_mark_obj(spec)\n        if interpolate:\n            spec[\"mark\"][\"interpolate\"] = interpolate\n        if opacity is not None:\n            spec[\"mark\"][\"opacity\"] = float(opacity)\n        if stack_mode and \"encoding\" in spec:\n            for axis in (\"y\", \"x\"):\n                enc = spec[\"encoding\"].get(axis)\n                if enc and enc.get(\"type\") == \"quantitative\":\n                    if stack_mode == \"normalize\":\n                        enc[\"stack\"] = \"normalize\"\n                    elif stack_mode == \"center\":\n                        enc[\"stack\"] = \"center\"\n                    elif stack_mode == \"layered\":\n                        enc[\"stack\"] = None\n                    break\n    \n    elif chart_type == \"World Map\":\n        projection = config.get(\"projection\")\n        projection_center = config.get(\"projectionCenter\")\n        if projection and \"layer\" in spec:\n            for layer in spec[\"layer\"]:\n                if \"projection\" in layer:\n                    layer[\"projection\"][\"type\"] = projection\n        if projection_center and \"layer\" in spec:\n            # projectionCenter [lon, lat] → rotate [-lon, -lat, 0]\n            lon, lat = projection_center\n            for layer in spec[\"layer\"]:\n                if \"projection\" in layer:\n                    layer[\"projection\"][\"rotate\"] = [-lon, -lat, 0]\n\n\ndef _get_top_values(df: pd.DataFrame, field_name: str, unique_values: list, \n                   channel: str, spec: dict, max_values: int) -> list:\n    \"\"\"\n    Get top values for nominal fields with many entries.\n    \"\"\"\n    if channel in ['x', 'y']:\n        # Find opposite quantitative channel for sorting\n        opposite_channel = 'y' if channel == 'x' else 'x'\n        opposite_encoding = spec[\"encoding\"].get(opposite_channel)\n        \n        if (opposite_encoding and \n            opposite_encoding.get(\"type\") == \"quantitative\"):\n            # Sort by quantitative field sum\n            quant_field = opposite_encoding[\"field\"]\n            value_sums = []\n            \n            for val in unique_values:\n                subset = df[df[field_name] == val]\n                total = subset[quant_field].sum() if quant_field in df.columns else 0\n                value_sums.append((val, total))\n            \n            # Sort by sum descending and take top values\n            value_sums.sort(key=lambda x: x[1], reverse=True)\n            return [val for val, _ in value_sums[:max_values]]\n    \n    elif channel == 'row':\n        # Limit rows more strictly\n        return unique_values[:20]\n    \n    # Default: just take first N values\n    return unique_values[:max_values]\n\n\ndef vl_spec_to_png(spec: dict, output_path: str | None = None, scale: float = 1.0) -> bytes:\n    \"\"\"\n    Convert a Vega-Lite specification to a PNG image.\n    \n    Parameters:\n    - spec: Vega-Lite specification dictionary\n    - output_path: Optional path to save the PNG file\n    - scale: Scale factor for higher resolution (default 1.0)\n    \n    Returns:\n    - bytes: PNG image data\n    \n    Requires: pip install vl-convert-python\n    \"\"\"\n\n    # Convert directly to PNG bytes using vl-convert with higher scale for better fidelity\n    png_data = vlc.vegalite_to_png(spec, scale=scale, ppi=150)\n    \n    # Save to file if path provided\n    if output_path:\n        with open(output_path, 'wb') as f:\n            f.write(png_data)\n        print(f\"Chart saved to {output_path}\")\n    \n    return png_data\n\ndef spec_to_base64(spec: dict, scale: float = 1.0) -> str:\n    \"\"\"\n    Convert a Vega-Lite specification to a base64 encoded PNG string.\n    \n    Parameters:\n    - spec: Vega-Lite specification dictionary\n    - width: Optional width in pixels (defaults to spec width or 400)\n    - height: Optional height in pixels (defaults to spec height or 300)\n    - scale: Scale factor for higher resolution (default 2.0 for 2x resolution)\n    \n    Returns:\n    - str: Base64 encoded PNG data (data:image/png;base64,...)\n    \n    Requires: pip install vl-convert-python\n    \"\"\"\n    # Get PNG bytes with higher fidelity\n    png_data = vl_spec_to_png(spec, scale=scale)\n    \n    # Convert to base64\n    base64_string = base64.b64encode(png_data).decode('utf-8')\n    \n    return f\"data:image/png;base64,{base64_string}\""
  },
  {
    "path": "py-src/data_formulator/workspace_factory.py",
    "content": "# Copyright (c) Microsoft Corporation.\n# Licensed under the MIT License.\n\n\"\"\"\nFlask-aware workspace factory.\n\nReads the workspace backend configuration from Flask's ``current_app.config``\n(populated by CLI args / env vars in ``app.py``) and returns the appropriate\n:class:`Workspace` subclass.  This keeps the data-layer modules\n(``datalake.workspace``, ``datalake.azure_blob_workspace``) free of any\nFlask dependency.\n\"\"\"\n\nimport os\nimport logging\n\nfrom data_formulator.datalake.workspace import Workspace\n\nlogger = logging.getLogger(__name__)\n\n\ndef _build_azure_container_client(cfg: dict):\n    \"\"\"\n    Create an Azure ``ContainerClient`` using the best available credential.\n\n    Resolution order:\n\n    1. **Connection string** (``AZURE_BLOB_CONNECTION_STRING``) — shared-key\n       access, convenient for local development and testing.\n    2. **Account URL** (``AZURE_BLOB_ACCOUNT_URL``) + ``DefaultAzureCredential``\n       — uses Entra ID (Managed Identity on Azure, ``az login`` locally,\n       workload identity on Kubernetes).  No secrets required in production.\n\n    At least one of the two must be set.\n    \"\"\"\n    from azure.storage.blob import ContainerClient\n\n    conn_str = cfg.get(\n        \"azure_blob_connection_string\",\n        os.getenv(\"AZURE_BLOB_CONNECTION_STRING\"),\n    )\n    account_url = cfg.get(\n        \"azure_blob_account_url\",\n        os.getenv(\"AZURE_BLOB_ACCOUNT_URL\"),\n    )\n    container_name = cfg.get(\n        \"azure_blob_container\",\n        os.getenv(\"AZURE_BLOB_CONTAINER\", \"data-formulator\"),\n    )\n\n    if conn_str:\n        # Option 1: connection string (shared key / SAS)\n        return ContainerClient.from_connection_string(conn_str, container_name)\n\n    if account_url:\n        # Option 2: Entra ID via DefaultAzureCredential\n        from azure.identity import DefaultAzureCredential\n\n        credential = DefaultAzureCredential()\n        return ContainerClient(account_url, container_name, credential=credential)\n\n    raise ValueError(\n        \"Azure Blob workspace requires either a connection string or an \"\n        \"account URL.  Set --azure-blob-connection-string / \"\n        \"AZURE_BLOB_CONNECTION_STRING, or --azure-blob-account-url / \"\n        \"AZURE_BLOB_ACCOUNT_URL.\"\n    )\n\n\ndef get_workspace(identity_id: str) -> Workspace:\n    \"\"\"\n    Return a :class:`Workspace` (or subclass) for *identity_id*.\n\n    The backend is selected via the running Flask app's ``CLI_ARGS`` config,\n    which mirrors CLI flags and environment variables set in ``app.py``:\n\n    ================================= ================================ ==================\n    CLI flag                          Env var                          Default\n    ================================= ================================ ==================\n    ``--workspace-backend``           ``WORKSPACE_BACKEND``            ``local``\n    ``--azure-blob-connection-string````AZURE_BLOB_CONNECTION_STRING`` (none)\n    ``--azure-blob-account-url``      ``AZURE_BLOB_ACCOUNT_URL``       (none)\n    ``--azure-blob-container``        ``AZURE_BLOB_CONTAINER``         ``data-formulator``\n    ================================= ================================ ==================\n\n    ``datalake_root`` reuses ``--data-dir`` / ``DATA_FORMULATOR_HOME``\n    (defaulting to ``\"workspaces\"``).\n    \"\"\"\n    from flask import current_app\n\n    cfg = current_app.config.get(\"CLI_ARGS\", {})\n\n    backend = cfg.get(\n        \"workspace_backend\", os.getenv(\"WORKSPACE_BACKEND\", \"local\")\n    )\n\n    if backend == \"azure_blob\":\n        from data_formulator.datalake.cached_azure_blob_workspace import (\n            CachedAzureBlobWorkspace,\n        )\n\n        client = _build_azure_container_client(cfg)\n        root = (\n            cfg.get(\"data_dir\")\n            or os.getenv(\"DATA_FORMULATOR_HOME\")\n            or \"workspaces\"\n        )\n\n        # Cache configuration from env vars / CLI args\n        max_cache_mb = int(\n            cfg.get(\"cache_max_mb\", os.getenv(\"DF_CACHE_MAX_MB\", \"1024\"))\n        )\n        max_global_cache_mb = int(\n            cfg.get(\n                \"global_cache_max_mb\",\n                os.getenv(\"DF_GLOBAL_CACHE_MAX_MB\", \"10240\"),\n            )\n        )\n        return CachedAzureBlobWorkspace(\n            identity_id,\n            client,\n            datalake_root=root,\n            max_cache_bytes=max_cache_mb * 1024 * 1024,\n            max_global_cache_bytes=max_global_cache_mb * 1024 * 1024,\n        )\n\n    # Default: local filesystem workspace\n    return Workspace(identity_id)\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[build-system]\nrequires = [ \"setuptools >= 75.0\" ]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"data_formulator\"\nversion = \"0.7.0a1\"\n\nrequires-python = \">=3.11\"\nauthors = [\n  {name = \"Chenglong Wang\", email = \"chenglong.wang@microsoft.com\"},\n  {name = \"Dan Marshall\", email = \"danmar@microsoft.com\"},\n]\nreadme = \"README.md\"\nlicense = \"MIT\"\ndescription = \"Data Formulator is research protoype data visualization tool powered by AI.\"\nkeywords = [\"data visualization\", \"LLM\", \"AI\"]\nclassifiers = [\n  \"Development Status :: 4 - Beta\",\n  \"Programming Language :: Python\"\n]\n\ndependencies = [\n    \"jupyter\",\n    \"pandas\",\n    \"flask\",\n    \"flask-cors\",\n    \"flask-limiter\",\n    \"openai\",\n    \"python-dotenv\",\n    \"vega_datasets\",\n    \"litellm\",\n    \"duckdb\",\n    \"numpy\",\n    \"vl-convert-python\",\n    \"backoff\",\n    \"beautifulsoup4\",\n    \"scikit-learn\",\n    \"azure-identity\",\n    \"azure-kusto-data\",\n    \"azure-keyvault-secrets\",\n    \"azure-storage-blob\",\n    \"google-cloud-bigquery\",\n    \"google-auth\",\n    \"db-dtypes\",\n    \"boto3\",\n    \"pymysql\",\n    \"pyodbc\",\n    \"pymongo\",\n    \"yfinance\",\n    \"connectorx>=0.4.5\",\n    \"pyarrow>=23.0.0\",\n]\n\n[project.urls]\nHomepage = \"https://github.com/microsoft/data-formulator\"\nRepository = \"https://github.com/microsoft/data-formulator.git\"\n\"Bug Tracker\" = \"https://github.com/microsoft/data-formulator/issues\"\n\n[tool.setuptools]\npackage-dir = {\"\" = \"py-src\"}\ninclude-package-data = true\n\n[project.scripts]\ndata_formulator = \"data_formulator:run_app\"\n\n[tool.uv]\ndev-dependencies = [\n    \"build\",\n]\n"
  },
  {
    "path": "requirements.txt",
    "content": "# Minimal top-level dependencies for deployment.\n# Generated from pyproject.toml [project.dependencies].\n# Use this instead of the full uv-exported requirements.txt for faster\n# App Service deployments (pip resolves transitive deps automatically).\njupyter\npandas\nflask\nflask-cors\nflask-limiter\nopenai\npython-dotenv\nvega_datasets\nlitellm\nduckdb\nnumpy\nvl-convert-python\nbackoff\nbeautifulsoup4\nscikit-learn\nazure-identity\nazure-kusto-data\nazure-keyvault-secrets\nazure-storage-blob\ngoogle-cloud-bigquery\ngoogle-auth\ndb-dtypes\nboto3\npymysql\npyodbc\npymongo\nyfinance\nconnectorx>=0.4.5\npyarrow>=23.0.0\n"
  },
  {
    "path": "src/app/App.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { FC, useCallback, useEffect, useState } from 'react';\nimport '../scss/App.scss';\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n    DataFormulatorState,\n    dfActions,\n    dfSelectors,\n    fetchAvailableModels,\n} from './dfSlice'\nimport { getBrowserId } from './identity';\n\nimport { red, purple, blue, brown, yellow, orange, } from '@mui/material/colors';\nimport { palettes, defaultPaletteKey, paletteKeys, bgAlpha } from './tokens';\n\nimport _ from 'lodash';\n\nimport {\n    Button,\n    Tooltip,\n    Typography,\n    Box,\n    Toolbar,\n    Divider,\n    DialogTitle,\n    Dialog,\n    DialogContent,\n    Link,\n    DialogContentText,\n    DialogActions,\n    ToggleButtonGroup,\n    ToggleButton,\n    Menu,\n    MenuItem,\n    TextField,\n    SvgIcon,\n    IconButton,\n    Select,\n    FormControl,\n    InputLabel,\n    ListItemIcon,\n    ListItemText,\n    CircularProgress,\n    LinearProgress,\n} from '@mui/material';\n\n\nimport MuiAppBar from '@mui/material/AppBar';\nimport { alpha, createTheme, styled, ThemeProvider } from '@mui/material/styles';\n\nimport PowerSettingsNewIcon from '@mui/icons-material/PowerSettingsNew';\nimport ClearIcon from '@mui/icons-material/Clear';\n\nimport { DataFormulatorFC } from '../views/DataFormulator';\n\nimport GridViewIcon from '@mui/icons-material/GridView';\nimport ViewSidebarIcon from '@mui/icons-material/ViewSidebar';\nimport SettingsIcon from '@mui/icons-material/Settings';\nimport {\n    createBrowserRouter,\n    RouterProvider,\n} from \"react-router-dom\";\nimport { About } from '../views/About';\nimport ChartGallery from '../views/ChartGallery';\nimport { MessageSnackbar } from '../views/MessageSnackbar';\nimport { ChartRenderService } from '../views/ChartRenderService';\nimport { DictTable } from '../components/ComponentType';\nimport { AppDispatch } from './store';\nimport dfLogo from '../assets/df-logo.png';\nimport { ModelSelectionButton } from '../views/ModelSelectionDialog';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport UploadFileIcon from '@mui/icons-material/UploadFile';\nimport DownloadIcon from '@mui/icons-material/Download';\nimport SaveIcon from '@mui/icons-material/Save';\nimport FolderOpenIcon from '@mui/icons-material/FolderOpen';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport { getUrls, fetchWithIdentity } from './utils';\nimport { persistor } from './store';\nimport { UnifiedDataUploadDialog } from '../views/UnifiedDataUploadDialog';\nimport ChatIcon from '@mui/icons-material/Chat';\nimport ArticleIcon from '@mui/icons-material/Article';\nimport EditIcon from '@mui/icons-material/Edit';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport GitHubIcon from '@mui/icons-material/GitHub';\nimport UploadIcon from '@mui/icons-material/Upload';\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\nimport YouTubeIcon from '@mui/icons-material/YouTube';\nimport PublicIcon from '@mui/icons-material/Public';\n\n// Discord Icon Component\nconst DiscordIcon: FC<{ sx?: any }> = ({ sx }) => (\n    <SvgIcon sx={sx} viewBox=\"0 0 24 24\">\n        <path d=\"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z\" fill=\"currentColor\"/>\n    </SvgIcon>\n);\n\nconst AppBar = styled(MuiAppBar)(({ theme }) => ({\n    color: 'black',\n    backgroundColor: \"transparent\",\n    //borderBottom: \"1px solid #C3C3C3\",\n    boxShadow: \"none\",\n    transition: theme.transitions.create(['margin', 'width'], {\n        easing: theme.transitions.easing.sharp,\n        duration: theme.transitions.duration.leavingScreen,\n    }),\n}));\n\ndeclare module '@mui/material/styles' {\n    interface PaletteColor {\n        bgcolor?: string;\n        textColor?: string;\n    }\n    interface SimplePaletteColorOptions {\n        bgcolor?: string;\n        textColor?: string;\n    }\n    interface Palette {\n        derived: Palette['primary'];\n        custom: Palette['primary'];\n    }\n    interface PaletteOptions {\n        derived: PaletteOptions['primary'];\n        custom: PaletteOptions['primary'];\n    }\n}\n\nexport const toolName = \"Data Formulator\"\n\nexport interface AppFCProps {\n}\n\n// Extract menu components into separate components to prevent full app re-renders\nconst TableMenu: React.FC = () => {\n    const [dialogOpen, setDialogOpen] = useState<boolean>(false);\n    \n    return (\n        <>\n            <Button\n                variant=\"text\"\n                onClick={() => setDialogOpen(true)}\n                sx={{ textTransform: 'none' }}\n            >\n                Data\n            </Button>\n            \n            {/* Unified Data Upload Dialog */}\n            <UnifiedDataUploadDialog \n                open={dialogOpen}\n                onClose={() => setDialogOpen(false)}\n                initialTab=\"menu\"\n            />\n        </>\n    );\n};\n\nconst SaveSessionDialog: React.FC<{open: boolean, onClose: () => void}> = ({open, onClose}) => {\n    const [sessionName, setSessionName] = useState('');\n    const [saving, setSaving] = useState(false);\n    const dispatch = useDispatch();\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n\n    const fullState = useSelector((state: DataFormulatorState) => {\n        const excludedFields = new Set([\n            'models', 'selectedModelId', 'testedModels',\n            'dataLoaderConnectParams', 'identity', 'agentRules', 'serverConfig',\n        ]);\n        const stateToSerialize: any = {};\n        for (const [key, value] of Object.entries(state)) {\n            if (!excludedFields.has(key)) {\n                stateToSerialize[key] = value;\n            }\n        }\n        return stateToSerialize;\n    });\n\n    const handleSave = async () => {\n        if (!sessionName.trim()) return;\n        setSaving(true);\n        try {\n            const res = await fetchWithIdentity(getUrls().SESSION_SAVE, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: JSON.stringify({ name: sessionName.trim(), state: fullState }),\n            });\n            const data = await res.json();\n            if (data.status === 'ok') {\n                dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"success\", value: `Session \"${sessionName}\" saved` }));\n                onClose();\n            } else {\n                dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"error\", value: data.message || 'Save failed' }));\n            }\n        } catch (e) {\n            dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"error\", value: 'Failed to save session' }));\n        }\n        setSaving(false);\n    };\n\n    return (\n        <Dialog open={open} onClose={onClose} maxWidth=\"xs\" fullWidth>\n            <DialogTitle>Save Session</DialogTitle>\n            <DialogContent>\n                <TextField\n                    autoFocus fullWidth margin=\"dense\" label=\"Session name\"\n                    value={sessionName} onChange={(e) => setSessionName(e.target.value)}\n                    onKeyDown={(e) => { if (e.key === 'Enter') handleSave(); }}\n                    helperText={`${tables.length} table(s) will be saved`}\n                />\n            </DialogContent>\n            <DialogActions>\n                <Button onClick={onClose}>Cancel</Button>\n                <Button onClick={handleSave} disabled={!sessionName.trim() || saving}>\n                    {saving ? 'Saving...' : 'Save'}\n                </Button>\n            </DialogActions>\n        </Dialog>\n    );\n};\n\nconst LoadSessionDialog: React.FC<{open: boolean, onClose: () => void}> = ({open, onClose}) => {\n    const [sessions, setSessions] = useState<{name: string, saved_at: string}[]>([]);\n    const [loading, setLoading] = useState(false);\n    const [listLoading, setListLoading] = useState(false);\n    const [confirmDelete, setConfirmDelete] = useState<string | null>(null);\n    const dispatch = useDispatch();\n\n    const fetchSessions = useCallback(async () => {\n        setListLoading(true);\n        try {\n            const res = await fetchWithIdentity(getUrls().SESSION_LIST);\n            const data = await res.json();\n            if (data.status === 'ok') setSessions(data.sessions);\n        } catch (e) { /* ignore */ }\n        setListLoading(false);\n    }, []);\n\n    useEffect(() => {\n        if (!open) return;\n        fetchSessions();\n    }, [open, fetchSessions]);\n\n    const handleLoad = async (name: string) => {\n        setLoading(true);\n        dispatch(dfActions.setSessionLoading({ loading: true, label: `Loading session \"${name}\"...` }));\n        onClose();\n        try {\n            const res = await fetchWithIdentity(getUrls().SESSION_LOAD, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: JSON.stringify({ name }),\n            });\n            const data = await res.json();\n            if (data.status === 'ok') {\n                dispatch(dfActions.loadState(data.state));\n                dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"success\", value: `Session \"${name}\" loaded` }));\n            } else {\n                dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"error\", value: data.message || 'Load failed' }));\n            }\n        } catch (e) {\n            dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"error\", value: 'Failed to load session' }));\n        }\n        setLoading(false);\n        dispatch(dfActions.setSessionLoading({ loading: false }));\n    };\n\n    const handleDelete = async (name: string) => {\n        try {\n            const res = await fetchWithIdentity(getUrls().SESSION_DELETE, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: JSON.stringify({ name }),\n            });\n            const data = await res.json();\n            if (data.status === 'ok') {\n                setSessions(prev => prev.filter(s => s.name !== name));\n                dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"success\", value: `Session \"${name}\" deleted` }));\n            }\n        } catch (e) { /* ignore */ }\n        setConfirmDelete(null);\n    };\n\n    return (\n        <Dialog open={open} onClose={onClose} maxWidth=\"xs\" fullWidth>\n            <DialogTitle sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n                Load Session\n                <Tooltip title=\"Refresh session list\">\n                    <IconButton size=\"small\" onClick={fetchSessions} disabled={listLoading}>\n                        {listLoading ? <CircularProgress size={18} /> : <RefreshIcon fontSize=\"small\" />}\n                    </IconButton>\n                </Tooltip>\n            </DialogTitle>\n            <DialogContent sx={{ px: 1 }}>\n                {listLoading && sessions.length === 0 ? (\n                    <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', py: 4, gap: 1.5 }}>\n                        <CircularProgress size={28} />\n                        <Typography variant=\"body2\" color=\"text.secondary\">Loading sessions...</Typography>\n                    </Box>\n                ) : sessions.length === 0 ? (\n                    <DialogContentText sx={{ px: 1 }}>No saved sessions found.</DialogContentText>\n                ) : (\n                    sessions.map(s => (\n                        <Box\n                            key={s.name}\n                            sx={{\n                                display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n                                px: 1.5, py: 1, mx: 0, my: 0.5, borderRadius: 1, cursor: 'pointer',\n                                '&:hover': { backgroundColor: 'action.hover' },\n                                transition: 'background-color 0.15s',\n                            }}\n                            onClick={() => handleLoad(s.name)}\n                        >\n                            <Box sx={{ flex: 1, minWidth: 0 }}>\n                                <Typography variant=\"body2\" fontWeight=\"bold\" noWrap>{s.name}</Typography>\n                                <Typography variant=\"caption\" color=\"text.secondary\">\n                                    {new Date(s.saved_at).toLocaleString()}\n                                </Typography>\n                            </Box>\n                            {confirmDelete === s.name ? (\n                                <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }} onClick={e => e.stopPropagation()}>\n                                    <Button size=\"small\" color=\"error\" sx={{ minWidth: 0, fontSize: 11, textTransform: 'none' }}\n                                        onClick={() => handleDelete(s.name)}>delete</Button>\n                                    <Button size=\"small\" sx={{ minWidth: 0, fontSize: 11, textTransform: 'none' }}\n                                        onClick={() => setConfirmDelete(null)}>cancel</Button>\n                                </Box>\n                            ) : (\n                                <Tooltip title=\"Delete session\">\n                                    <IconButton size=\"small\" onClick={(e) => { e.stopPropagation(); setConfirmDelete(s.name); }}>\n                                        <ClearIcon fontSize=\"small\" />\n                                    </IconButton>\n                                </Tooltip>\n                            )}\n                        </Box>\n                    ))\n                )}\n            </DialogContent>\n            <DialogActions>\n                <Button onClick={onClose}>Close</Button>\n            </DialogActions>\n        </Dialog>\n    );\n};\n\nconst SessionMenu: React.FC = () => {\n    const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n    const [saveDialogOpen, setSaveDialogOpen] = useState(false);\n    const [loadDialogOpen, setLoadDialogOpen] = useState(false);\n    const [recentSessions, setRecentSessions] = useState<{name: string, saved_at: string}[]>([]);\n    const [exporting, setExporting] = useState(false);\n    const importRef = React.useRef<HTMLInputElement>(null);\n    const open = Boolean(anchorEl);\n    const dispatch = useDispatch();\n    const serverConfig = useSelector((state: DataFormulatorState) => state.serverConfig);\n    const diskPersistenceDisabled = serverConfig.DISABLE_DATABASE;\n\n    const fullState = useSelector((state: DataFormulatorState) => {\n        const excludedFields = new Set([\n            'models', 'selectedModelId', 'testedModels',\n            'dataLoaderConnectParams', 'identity', 'agentRules', 'serverConfig',\n        ]);\n        const obj: any = {};\n        for (const [key, value] of Object.entries(state)) {\n            if (!excludedFields.has(key)) obj[key] = value;\n        }\n        return obj;\n    });\n\n    // Fetch recent sessions when the menu opens\n    useEffect(() => {\n        if (!open || diskPersistenceDisabled) return;\n        (async () => {\n            try {\n                const res = await fetchWithIdentity(getUrls().SESSION_LIST);\n                const data = await res.json();\n                if (data.status === 'ok') setRecentSessions(data.sessions.slice(0, 3));\n            } catch (e) { /* ignore */ }\n        })();\n    }, [open]);\n\n    const closeMenu = () => setAnchorEl(null);\n\n    const handleLoadSession = async (name: string) => {\n        closeMenu();\n        dispatch(dfActions.setSessionLoading({ loading: true, label: `Loading session \"${name}\"...` }));\n        try {\n            const res = await fetchWithIdentity(getUrls().SESSION_LOAD, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: JSON.stringify({ name }),\n            });\n            const data = await res.json();\n            if (data.status === 'ok') {\n                dispatch(dfActions.loadState(data.state));\n                dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"success\", value: `Session \"${name}\" loaded` }));\n            } else {\n                dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"error\", value: data.message || 'Load failed' }));\n            }\n        } catch (e) {\n            dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"error\", value: 'Failed to load session' }));\n        }\n        dispatch(dfActions.setSessionLoading({ loading: false }));\n    };\n\n    const handleExport = async () => {\n        closeMenu();\n        setExporting(true);\n        try {\n            const res = await fetchWithIdentity(getUrls().SESSION_EXPORT, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: JSON.stringify({ state: fullState }),\n            });\n            if (!res.ok) throw new Error('Export failed');\n            const blob = await res.blob();\n            const disposition = res.headers.get('content-disposition');\n            const match = disposition?.match(/filename=\"?(.+?)\"?$/);\n            const filename = match?.[1] || 'session.dfsession';\n            const a = document.createElement('a');\n            a.href = URL.createObjectURL(blob);\n            a.download = filename;\n            a.click();\n            URL.revokeObjectURL(a.href);\n            dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"success\", value: \"Session exported\" }));\n        } catch (e) {\n            dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"error\", value: 'Failed to export session' }));\n        }\n        setExporting(false);\n    };\n\n    const handleImport = async (event: React.ChangeEvent<HTMLInputElement>) => {\n        const file = event.target.files?.[0];\n        if (!file) return;\n        closeMenu();\n        dispatch(dfActions.setSessionLoading({ loading: true, label: `Importing session from ${file.name}...` }));\n        try {\n            const formData = new FormData();\n            formData.append('file', file);\n            const res = await fetchWithIdentity(getUrls().SESSION_IMPORT, {\n                method: 'POST',\n                body: formData,\n            });\n            const data = await res.json();\n            if (data.status === 'ok') {\n                dispatch(dfActions.loadState(data.state));\n                dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"success\", value: `Session imported from ${file.name}` }));\n            } else {\n                dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"error\", value: data.message || 'Import failed' }));\n            }\n        } catch (e) {\n            dispatch(dfActions.addMessages({ timestamp: Date.now(), component: \"Session\", type: \"error\", value: 'Failed to import session' }));\n        }\n        dispatch(dfActions.setSessionLoading({ loading: false }));\n        if (importRef.current) importRef.current.value = '';\n    };\n\n    return (\n        <>\n            <Button \n                variant=\"text\" \n                onClick={(e) => setAnchorEl(e.currentTarget)} \n                endIcon={<KeyboardArrowDownIcon />} \n                sx={{ textTransform: 'none' }}\n            >\n                Session\n            </Button>\n            <Menu\n                anchorEl={anchorEl}\n                open={open}\n                onClose={closeMenu}\n                slotProps={{ paper: { sx: { minWidth: 200 } } }}\n            >\n                <Tooltip title={diskPersistenceDisabled ? \"Install locally to use this feature\" : \"\"} placement=\"right\">\n                    <span>\n                        <MenuItem disabled={diskPersistenceDisabled} onClick={() => { setSaveDialogOpen(true); closeMenu(); }}\n                            sx={{ fontSize: '12px', display: 'flex', alignItems: 'center', gap: 1 }}>\n                            <SaveIcon sx={{ fontSize: 16, color: 'text.secondary' }} /> Save session\n                        </MenuItem>\n                    </span>\n                </Tooltip>\n                <Tooltip title={diskPersistenceDisabled ? \"Install locally to use this feature\" : \"\"} placement=\"right\">\n                    <span>\n                        <MenuItem disabled={diskPersistenceDisabled} onClick={() => { setLoadDialogOpen(true); closeMenu(); }}\n                            sx={{ fontSize: '12px', display: 'flex', alignItems: 'center', gap: 1 }}>\n                            <FolderOpenIcon sx={{ fontSize: 16, color: 'text.secondary' }} /> Open session...\n                        </MenuItem>\n                    </span>\n                </Tooltip>\n\n                {!diskPersistenceDisabled && recentSessions.length > 0 && [\n                    <Divider key=\"div-recent\" />,\n                    <Typography key=\"label-recent\" variant=\"caption\" sx={{ px: 2, py: 0.5, color: 'text.secondary', display: 'block', fontSize: 10 }}>\n                        Quick resume\n                    </Typography>,\n                    ...recentSessions.map(s => (\n                        <MenuItem key={s.name} onClick={() => handleLoadSession(s.name)}\n                            sx={{ pl: 4, py: 0.25, minHeight: 0, fontSize: '12px', display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 2 }}>\n                            <Typography noWrap sx={{ fontSize: 12 }}>{s.name}</Typography>\n                            <Typography noWrap sx={{ fontSize: 10, color: 'text.secondary', flexShrink: 0 }}>\n                                {new Date(s.saved_at).toLocaleDateString()}\n                            </Typography>\n                        </MenuItem>\n                    )),\n                ]}\n\n                <Divider />\n                <MenuItem onClick={handleExport} disabled={exporting}\n                    sx={{ fontSize: '12px', display: 'flex', alignItems: 'center', gap: 1 }}>\n                    <DownloadIcon sx={{ fontSize: 16, color: 'text.secondary' }} /> {exporting ? 'Exporting...' : 'Export to file'}\n                </MenuItem>\n                <MenuItem onClick={() => importRef.current?.click()}\n                    sx={{ fontSize: '12px', display: 'flex', alignItems: 'center', gap: 1 }}>\n                    <UploadFileIcon sx={{ fontSize: 16, color: 'text.secondary' }} /> Import from file\n                    <input\n                        type=\"file\"\n                        hidden\n                        accept=\".dfsession,.zip\"\n                        ref={importRef}\n                        onChange={handleImport}\n                    />\n                </MenuItem>\n            </Menu>\n            <SaveSessionDialog open={saveDialogOpen} onClose={() => setSaveDialogOpen(false)} />\n            <LoadSessionDialog open={loadDialogOpen} onClose={() => setLoadDialogOpen(false)} />\n        </>\n    );\n};\n\nconst ResetDialog: React.FC = () => {\n    const [open, setOpen] = useState(false);\n    const [exiting, setExiting] = useState(false);\n    const dispatch = useDispatch();\n\n    const handleExit = async () => {\n        setExiting(true);\n        // Clear workspace on server first\n        try {\n            await fetchWithIdentity(getUrls().RESET_DB_FILE, { method: 'POST' });\n        } catch (e) {\n            console.warn('Failed to reset server workspace:', e);\n        }\n        dispatch(dfActions.resetState());\n\n        // Flush the reset state to IndexedDB so the persisted\n        // state matches (preserves models, config, agentRules).\n        await persistor.flush();\n        window.location.reload();\n    };\n\n    return (\n        <>\n            <Button \n                variant=\"text\" \n                sx={{textTransform: 'none'}}\n                onClick={() => setOpen(true)} \n                endIcon={<PowerSettingsNewIcon />}\n            >\n                Exit\n            </Button>\n            <Dialog onClose={exiting ? undefined : () => setOpen(false)} open={open} \n                sx={{ '& .MuiDialog-paper': { position: 'relative', overflow: 'hidden' } }}>\n                <DialogTitle sx={{ display: \"flex\", alignItems: \"center\" }}>Exit Session?</DialogTitle>\n                <DialogContent>\n                    <DialogContentText>\n                        All unsaved content (data, charts, reports) will be lost. Make sure to save your session before exiting.\n                    </DialogContentText>\n                </DialogContent>\n                <DialogActions>\n                    <Button \n                        disabled={exiting}\n                        onClick={handleExit}\n                        endIcon={<PowerSettingsNewIcon />}\n                    >\n                        Exit session\n                    </Button>\n                    <Button onClick={() => setOpen(false)} disabled={exiting}>cancel</Button>\n                </DialogActions>\n                {/* Cleaning overlay on top of dialog */}\n                {exiting && (\n                    <Box sx={{\n                        position: 'absolute',\n                        top: 0,\n                        left: 0,\n                        right: 0,\n                        bottom: 0,\n                        backgroundColor: 'rgba(255, 255, 255, 0.92)',\n                        backdropFilter: 'blur(4px)',\n                        display: 'flex',\n                        flexDirection: 'column',\n                        alignItems: 'center',\n                        justifyContent: 'center',\n                        gap: 2,\n                        zIndex: 1,\n                        borderRadius: 'inherit',\n                    }}>\n                        <Typography sx={{\n                            fontSize: 36,\n                            animation: 'sweepBroom 1.2s ease-in-out infinite',\n                            '@keyframes sweepBroom': {\n                                '0%, 100%': {\n                                    transform: 'rotate(-15deg) translateX(0px)',\n                                },\n                                '25%': {\n                                    transform: 'rotate(-5deg) translateX(8px)',\n                                },\n                                '50%': {\n                                    transform: 'rotate(-15deg) translateX(0px)',\n                                },\n                                '75%': {\n                                    transform: 'rotate(-25deg) translateX(-8px)',\n                                },\n                            },\n                            transformOrigin: 'top center',\n                        }}>\n                            🧹\n                        </Typography>\n                        <Typography variant=\"body1\" color=\"text.secondary\" sx={{ fontWeight: 500 }}>\n                            Cleaning workspace...\n                        </Typography>\n                        <LinearProgress sx={{ width: 200, mt: 1, borderRadius: 1 }} />\n                    </Box>\n                )}\n            </Dialog>\n        </>\n    );\n};\n\nconst ConfigDialog: React.FC = () => {\n    const [open, setOpen] = useState(false);\n    const dispatch = useDispatch();\n    const config = useSelector((state: DataFormulatorState) => state.config);\n\n\n    const [formulateTimeoutSeconds, setFormulateTimeoutSeconds] = useState(config.formulateTimeoutSeconds ?? 30);\n\n    const [defaultChartWidth, setDefaultChartWidth] = useState(config.defaultChartWidth ?? 300);\n    const [defaultChartHeight, setDefaultChartHeight] = useState(config.defaultChartHeight ?? 300);\n    const [maxStretchFactor, setMaxStretchFactor] = useState(config.maxStretchFactor ?? 2.0);\n    const [frontendRowLimit, setFrontendRowLimit] = useState(config.frontendRowLimit ?? 50000);\n    const [paletteKey, setPaletteKey] = useState(\n        (config.paletteKey && palettes[config.paletteKey]) ? config.paletteKey : defaultPaletteKey\n    );\n\n    // Add check for changes\n    const hasChanges = formulateTimeoutSeconds !== config.formulateTimeoutSeconds || \n                      defaultChartWidth !== config.defaultChartWidth ||\n                      defaultChartHeight !== config.defaultChartHeight ||\n                      maxStretchFactor !== config.maxStretchFactor ||\n                      frontendRowLimit !== config.frontendRowLimit ||\n                      paletteKey !== ((config.paletteKey && palettes[config.paletteKey]) ? config.paletteKey : defaultPaletteKey);\n\n    return (\n        <>\n            <Button variant=\"text\" sx={{textTransform: 'none'}} onClick={() => setOpen(true)} startIcon={<SettingsIcon />}>\n                Settings\n            </Button>\n            <Dialog onClose={() => setOpen(false)} open={open}>\n                <DialogTitle>Settings</DialogTitle>\n                <DialogContent>\n                    <Box sx={{ \n                        display: 'flex', \n                        flexDirection: 'column', \n                        gap: 3,\n                        maxWidth: 400\n                    }}>\n                        <Divider><Typography variant=\"caption\">Frontend</Typography></Divider>\n                        <FormControl fullWidth size=\"small\">\n                            <InputLabel id=\"palette-select-label\" sx={{ fontSize: 13 }}>Color Theme</InputLabel>\n                            <Select\n                                labelId=\"palette-select-label\"\n                                value={paletteKey}\n                                label=\"Color Theme\"\n                                onChange={(e) => setPaletteKey(e.target.value)}\n                                sx={{ fontSize: 13 }}\n                                renderValue={(key) => {\n                                    const p = palettes[key];\n                                    return (\n                                        <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n                                            <Box sx={{ width: 12, height: 12, borderRadius: '50%', backgroundColor: p.primary.main, flexShrink: 0 }} />\n                                            <Box sx={{ width: 12, height: 12, borderRadius: '50%', backgroundColor: p.custom.main, flexShrink: 0 }} />\n                                            <Typography sx={{ fontSize: 13 }}>{p.name}</Typography>\n                                        </Box>\n                                    );\n                                }}\n                            >\n                                {paletteKeys.map(key => {\n                                    const p = palettes[key];\n                                    return (\n                                        <MenuItem key={key} value={key} sx={{ py: 0.5 }}>\n                                            <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mr: 1.5 }}>\n                                                <Box sx={{ width: 14, height: 14, borderRadius: '50%', backgroundColor: p.primary.main, border: '1px solid rgba(0,0,0,0.1)' }} />\n                                                <Box sx={{ width: 14, height: 14, borderRadius: '50%', backgroundColor: p.custom.main, border: '1px solid rgba(0,0,0,0.1)' }} />\n                                            </Box>\n                                            <ListItemText primary={p.name} slotProps={{ primary: { sx: { fontSize: 13 } } }} />\n                                        </MenuItem>\n                                    );\n                                })}\n                            </Select>\n                        </FormControl>\n                        <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n                            <Box sx={{ flex: 1 }}>\n                                <TextField\n                                    label=\"default chart width\"\n                                    type=\"number\"\n                                    variant=\"outlined\"\n                                    value={defaultChartWidth}\n                                    onChange={(e) => {\n                                        const value = parseInt(e.target.value);\n                                        setDefaultChartWidth(value);\n                                    }}\n                                    fullWidth\n                                    slotProps={{\n                                        input: {\n                                            inputProps: {\n                                                min: 100,\n                                                max: 1000\n                                            }\n                                        }\n                                    }}\n                                    error={defaultChartWidth < 100 || defaultChartWidth > 1000}\n                                    helperText={defaultChartWidth < 100 || defaultChartWidth > 1000 ? \n                                        \"Value must be between 100 and 1000 pixels\" : \"\"}\n                                />\n                            </Box>\n                            <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mt: 1, display: 'block' }}>\n                                <ClearIcon fontSize=\"small\" />\n                            </Typography>\n                            <Box sx={{ flex: 1 }}>\n                                <TextField\n                                    label=\"default chart height\"\n                                    type=\"number\"\n                                    variant=\"outlined\"\n                                    value={defaultChartHeight}\n                                    onChange={(e) => {\n                                        const value = parseInt(e.target.value);\n                                        setDefaultChartHeight(value);\n                                    }}\n                                    fullWidth\n                                    slotProps={{\n                                        input: {\n                                            inputProps: {\n                                                min: 100,\n                                                max: 1000\n                                            }\n                                        }\n                                    }}\n                                    error={defaultChartHeight < 100 || defaultChartHeight > 1000}\n                                    helperText={defaultChartHeight < 100 || defaultChartHeight > 1000 ? \n                                        \"Value must be between 100 and 1000 pixels\" : \"\"}\n                                />\n                            </Box>\n                        </Box>\n                        <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n                            <Box sx={{ flex: 1 }}>\n                                <TextField\n                                    label=\"local-only row limit\"\n                                    type=\"number\"\n                                    variant=\"outlined\"\n                                    value={frontendRowLimit}\n                                    onChange={(e) => {\n                                        const value = parseInt(e.target.value);\n                                        setFrontendRowLimit(value);\n                                    }}\n                                    fullWidth\n                                    slotProps={{\n                                        input: {\n                                            inputProps: {\n                                                min: 100,\n                                                max: 1000000\n                                            }\n                                        }\n                                    }}\n                                    error={frontendRowLimit < 100 || frontendRowLimit > 1000000}\n                                    helperText={frontendRowLimit < 100 || frontendRowLimit > 1000000 ? \n                                        \"Value must be between 100 and 1,000,000 rows\" : \"\"}\n                                />\n                                <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mt: 1, display: 'block' }}>\n                                    Maximum number of rows kept when loading data locally (not stored on server).\n                                </Typography>\n                            </Box>\n                        </Box>\n                        <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n                            <Box sx={{ flex: 1 }}>\n                                <TextField\n                                    label=\"max chart stretch factor\"\n                                    type=\"number\"\n                                    variant=\"outlined\"\n                                    value={maxStretchFactor}\n                                    onChange={(e) => {\n                                        const value = parseFloat(e.target.value);\n                                        setMaxStretchFactor(value);\n                                    }}\n                                    fullWidth\n                                    slotProps={{\n                                        input: {\n                                            inputProps: {\n                                                min: 1,\n                                                max: 5,\n                                                step: 0.1\n                                            }\n                                        }\n                                    }}\n                                    error={isNaN(maxStretchFactor) || maxStretchFactor < 1 || maxStretchFactor > 5}\n                                    helperText={isNaN(maxStretchFactor) || maxStretchFactor < 1 || maxStretchFactor > 5 ? \n                                        \"Value must be between 1.0 and 5.0\" : \"\"}\n                                />\n                                <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mt: 1, display: 'block' }}>\n                                    How much charts can grow beyond the base size (1.0 = no stretch, 2.0 = up to 2×).\n                                </Typography>\n                            </Box>\n                        </Box>\n                        <Divider><Typography variant=\"caption\">Backend</Typography></Divider>\n                        <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n                            <Box sx={{ flex: 1 }}>\n                                <TextField\n                                    label=\"formulate timeout (seconds)\"\n                                    type=\"number\"\n                                    variant=\"outlined\"\n                                    value={formulateTimeoutSeconds}\n                                    onChange={(e) => {\n                                        const value = parseInt(e.target.value);\n                                        setFormulateTimeoutSeconds(value);\n                                    }}\n                                    inputProps={{\n                                        min: 0,\n                                        max: 3600,\n                                    }}\n                                    error={formulateTimeoutSeconds <= 0 || formulateTimeoutSeconds > 3600}\n                                    helperText={formulateTimeoutSeconds <= 0 || formulateTimeoutSeconds > 3600 ? \n                                        \"Value must be between 1 and 3600 seconds\" : \"\"}\n                                    fullWidth\n                                />\n                                <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mt: 1, display: 'block' }}>\n                                    Maximum time allowed for the formulation process before timing out. \n                                </Typography>\n                            </Box>\n                        </Box>\n                    </Box>\n                </DialogContent>\n                <DialogActions sx={{'.MuiButton-root': {textTransform: 'none'}}}>\n                    <Button sx={{marginRight: 'auto'}} onClick={() => {\n                        setFormulateTimeoutSeconds(30);\n                        setDefaultChartWidth(300);\n                        setDefaultChartHeight(300);\n                        setMaxStretchFactor(2.0);\n                        setFrontendRowLimit(50000);\n                        setPaletteKey(defaultPaletteKey);\n                    }}>Reset to default</Button>\n                    <Button onClick={() => setOpen(false)}>Cancel</Button>\n                    <Button \n                        variant={hasChanges ? \"contained\" : \"text\"}\n                        disabled={!hasChanges || isNaN(formulateTimeoutSeconds) || formulateTimeoutSeconds <= 0 || formulateTimeoutSeconds > 3600\n                            || isNaN(defaultChartWidth) || defaultChartWidth <= 0 || defaultChartWidth > 1000\n                            || isNaN(defaultChartHeight) || defaultChartHeight <= 0 || defaultChartHeight > 1000\n                            || isNaN(maxStretchFactor) || maxStretchFactor < 1 || maxStretchFactor > 5\n                            || isNaN(frontendRowLimit) || frontendRowLimit < 100 || frontendRowLimit > 1000000}\n                        onClick={() => {\n                            dispatch(dfActions.setConfig({formulateTimeoutSeconds, defaultChartWidth, defaultChartHeight, maxStretchFactor, frontendRowLimit, paletteKey}));\n                            setOpen(false);\n                        }}\n                    >\n                        Apply\n                    </Button>\n                </DialogActions>\n            </Dialog>\n        </>\n    );  \n}\n\nexport const AppFC: FC<AppFCProps> = function AppFC(appProps) {\n\n    const dispatch = useDispatch<AppDispatch>();\n    const viewMode = useSelector((state: DataFormulatorState) => state.viewMode);\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const generatedReports = useSelector((state: DataFormulatorState) => state.generatedReports);\n    const focusedId = useSelector((state: DataFormulatorState) => state.focusedId);\n    const serverConfig = useSelector((state: DataFormulatorState) => state.serverConfig);\n    const rawPaletteKey = useSelector((state: DataFormulatorState) => state.config.paletteKey);\n    const activePaletteKey = (rawPaletteKey && palettes[rawPaletteKey]) ? rawPaletteKey : defaultPaletteKey;\n\n    useEffect(() => {\n        fetchWithIdentity(getUrls().APP_CONFIG)\n            .then(response => response.json())\n            .then(data => {\n                dispatch(dfActions.setServerConfig(data));\n            });\n    }, []);\n\n    // User authentication state\n    const [userInfo, setUserInfo] = useState<{ name: string, userId: string } | undefined>(undefined);\n    const [authChecked, setAuthChecked] = useState(false);\n\n    // Check for authenticated user first\n    useEffect(() => {\n        fetch('/.auth/me')\n            .then(function (response) { return response.json(); })\n            .then(function (result) {\n                if (Array.isArray(result) && result.length > 0) {\n                    let authInfo = result[0];\n                    let userInfo = {\n                        name: authInfo['user_claims'].find((item: any) => item.typ == 'name')?.val || '',\n                        userId: authInfo['user_id']\n                    }\n                    setUserInfo(userInfo);\n                }\n            }).catch(err => {\n                // User is not logged in, will use browser identity\n            }).finally(() => {\n                setAuthChecked(true);\n            });\n    }, []);\n\n    // Initialize identity after auth check completes\n    // No server round-trip needed - identity is determined client-side:\n    // Priority: user identity (if logged in) > browser identity (localStorage-based, shared across tabs)\n    useEffect(() => {\n        if (authChecked) {\n            if (userInfo?.userId) {\n                // User is logged in - use their user ID\n                dispatch(dfActions.setIdentity({ type: 'user', id: userInfo.userId }));\n            } else {\n                // Not logged in - use browser ID (from localStorage, shared across tabs)\n                dispatch(dfActions.setIdentity({ type: 'browser', id: getBrowserId() }));\n            }\n        }\n    }, [authChecked, userInfo?.userId]);\n\n    useEffect(() => {\n        document.title = toolName;\n        dispatch(fetchAvailableModels());\n    }, []);\n\n    let theme = createTheme({\n        typography: {\n            fontFamily: [\n                \"Arial\",\n                \"Roboto\",\n                \"Helvetica Neue\",\n                \"sans-serif\"\n            ].join(\",\")\n        },\n        // Default Material UI palette\n        // Active palette from user config — selectable via Settings dialog\n        // Available: material, fluent, vivid, jewel, electric, tealCoral, copilot\n        palette: (() => {\n            const p = palettes[activePaletteKey];\n            const bg = (entry: { main: string; bgcolor?: string }) => entry.bgcolor ?? alpha(entry.main, bgAlpha);\n            const tc = (entry: { main: string; textColor?: string }) => entry.textColor ?? entry.main;\n            return {\n                primary:   { main: p.primary.main,   bgcolor: bg(p.primary),   textColor: tc(p.primary)   },\n                secondary: { main: p.secondary.main, bgcolor: bg(p.secondary), textColor: tc(p.secondary) },\n                derived:   { main: p.derived.main,   bgcolor: bg(p.derived),   textColor: tc(p.derived)   },\n                custom:    { main: p.custom.main,    bgcolor: bg(p.custom),    textColor: tc(p.custom)    },\n                warning:   { main: p.warning.main },\n            };\n        })(),\n        components: {\n            MuiButton: {\n                styleOverrides: {\n                    text: ({ ownerState, theme: t }) => {\n                        const c = ownerState.color;\n                        if (c && c !== 'inherit' && c !== 'error' && c !== 'info' && c !== 'success' && c in t.palette) {\n                            const p = (t.palette as any)[c];\n                            if (p?.textColor) return { color: p.textColor };\n                        }\n                        return {};\n                    },\n                    outlined: ({ ownerState, theme: t }) => {\n                        const c = ownerState.color;\n                        if (c && c !== 'inherit' && c !== 'error' && c !== 'info' && c !== 'success' && c in t.palette) {\n                            const p = (t.palette as any)[c];\n                            if (p?.textColor) return { color: p.textColor, borderColor: alpha(p.textColor, 0.5) };\n                        }\n                        return {};\n                    },\n                },\n            },\n            MuiIconButton: {\n                styleOverrides: {\n                    root: ({ ownerState, theme: t }) => {\n                        const c = ownerState.color;\n                        if (c && c !== 'inherit' && c !== 'default' && c !== 'error' && c !== 'info' && c !== 'success' && c in t.palette) {\n                            const p = (t.palette as any)[c];\n                            if (p?.textColor) return { color: p.textColor };\n                        }\n                        return {};\n                    },\n                },\n            },\n            MuiLink: {\n                styleOverrides: {\n                    root: ({ ownerState, theme: t }) => {\n                        const c = ownerState.color as string | undefined;\n                        if (c && c !== 'inherit' && c in t.palette) {\n                            const p = (t.palette as any)[c];\n                            if (p?.textColor) return { color: p.textColor };\n                        }\n                        return {};\n                    },\n                },\n            },\n        },\n    });\n\n    // Check if we're on the about page\n    const isAboutPage = window.location.pathname === '/about';\n    const isGalleryPage = window.location.pathname === '/gallery';\n    const isAppPage = !isAboutPage && !isGalleryPage;\n\n    let appBar =  [\n        <AppBar position=\"static\" key=\"app-bar-main\" >\n            <Toolbar variant=\"dense\" sx={{height: 40, minHeight: 36, position: 'relative'}}>\n                <Button sx={{\n                    display: \"flex\", flexDirection: \"row\", textTransform: \"none\",\n                    alignItems: 'stretch',\n                    backgroundColor: 'transparent',\n                    \"&:hover\": {\n                        backgroundColor: \"transparent\"\n                    }\n                }} color=\"inherit\">\n                    <Box component=\"img\" sx={{ height: 20, mr: 0.5 }} alt=\"\" src={dfLogo} />\n                    <Typography noWrap component=\"h1\" sx={{ fontWeight: 300, display: { xs: 'none', sm: 'block' }, letterSpacing: '0.03em' }}>\n                        {toolName}\n                    </Typography>\n                </Button>\n                <Box\n                    sx={{ \n                        ml: 2,\n                        height: '28px', \n                        my: 'auto',\n                        display: 'flex',\n                    }}\n                >\n                    <Button \n                        component=\"a\" \n                        href=\"/about\"\n                        sx={{ \n                            textDecoration: 'none',\n                            textTransform: 'none',\n                            fontSize: '13px',\n                            fontWeight: 400,\n                            border: 'none',\n                            borderRadius: 0,\n                            px: 1.5,\n                            py: 0.5,\n                            minWidth: 'auto',\n                            color: isAboutPage ? 'text.primary' : 'text.secondary',\n                            backgroundColor: isAboutPage ? 'rgba(0, 0, 0, 0.08)' : 'transparent',\n                            '&:hover': {\n                                color: 'text.primary',\n                                backgroundColor: isAboutPage ? 'rgba(0, 0, 0, 0.08)' : 'rgba(0, 0, 0, 0.04)',\n                            },\n                        }}\n                    >\n                        About\n                    </Button>\n                    <Button \n                        component=\"a\" \n                        href=\"/app\"\n                        sx={{ \n                            textDecoration: 'none',\n                            textTransform: 'none',\n                            fontSize: '13px',\n                            fontWeight: 400,\n                            border: 'none',\n                            borderRadius: 0,\n                            px: 1.5,\n                            py: 0.5,\n                            minWidth: 'auto',\n                            color: isAppPage ? 'text.primary' : 'text.secondary',\n                            backgroundColor: isAppPage ? 'rgba(0, 0, 0, 0.08)' : 'transparent',\n                            '&:hover': {\n                                color: 'text.primary',\n                                backgroundColor: isAppPage ? 'rgba(0, 0, 0, 0.08)' : 'rgba(0, 0, 0, 0.04)',\n                            },\n                        }}\n                    >\n                        App\n                    </Button>\n                    <Button \n                        component=\"a\" \n                        href=\"/gallery\"\n                        sx={{ \n                            textDecoration: 'none',\n                            textTransform: 'none',\n                            fontSize: '13px',\n                            fontWeight: 400,\n                            border: 'none',\n                            borderRadius: 0,\n                            px: 1.5,\n                            py: 0.5,\n                            minWidth: 'auto',\n                            color: isGalleryPage ? 'text.primary' : 'text.secondary',\n                            backgroundColor: isGalleryPage ? 'rgba(0, 0, 0, 0.08)' : 'transparent',\n                            '&:hover': {\n                                color: 'text.primary',\n                                backgroundColor: isGalleryPage ? 'rgba(0, 0, 0, 0.08)' : 'rgba(0, 0, 0, 0.04)',\n                            },\n                        }}\n                    >\n                        Gallery\n                    </Button>\n                </Box>\n                {tables.length === 0 && (\n                    <Typography noWrap sx={{ position: 'absolute', left: '50%', transform: 'translateX(-50%)', fontWeight: 500, fontSize: '0.65rem', color: 'text.disabled', letterSpacing: '0.15em', textTransform: 'uppercase' }}>\n                        Microsoft Research\n                    </Typography>\n                )}\n                {isAppPage && (\n                    <Box sx={{ display: 'flex', ml: 'auto', fontSize: 14 }}>\n                        {focusedId !== undefined && <React.Fragment><ToggleButtonGroup\n                            value={viewMode}\n                            exclusive\n                            onChange={(_, newMode) => {\n                                if (newMode !== null) {\n                                    dispatch(dfActions.setViewMode(newMode));\n                                }\n                            }}\n                            sx={{ \n                                mr: 2,\n                                height: '28px', \n                                my: 'auto',\n                                '& .MuiToggleButton-root': {\n                                    textTransform: 'none',\n                                    fontWeight: 500,\n                                    border: 'none',\n                                    '&:hover': {\n                                        backgroundColor: 'rgba(0, 0, 0, 0.04)',\n                                        color: 'text.primary',\n                                    },\n                                },\n                            }}\n                        >\n                            <ToggleButton value=\"editor\">\n                                <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n                                    <Box component=\"span\">Explore</Box>\n                                </Box>\n                            </ToggleButton>\n                            <ToggleButton value=\"report\">\n                                <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n                                    <Box component=\"span\">\n                                        {generatedReports.length > 0 ? `Reports (${generatedReports.length})` : 'Reports'}\n                                    </Box>\n                                </Box>\n                            </ToggleButton>\n                        </ToggleButtonGroup>\n                        <ConfigDialog />\n                        <Divider orientation=\"vertical\" variant=\"middle\" flexItem /></React.Fragment>}\n                        <ModelSelectionButton />\n                        <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\n                        \n                        <Typography fontSize=\"inherit\" sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n                            <TableMenu />\n                        </Typography>\n                        <Typography fontSize=\"inherit\" sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n                            <SessionMenu />\n                        </Typography>\n                        {tables.length > 0 && <ResetDialog />}\n                    </Box>\n                )}\n                {isAboutPage && (\n                    <Box sx={{ ml: 'auto', display: 'flex', gap: 0.5 }}>\n                        <Tooltip title=\"Watch Video\">\n                            <IconButton\n                                component=\"a\"\n                                href=\"https://youtu.be/3ndlwt0Wi3c\"\n                                target=\"_blank\"\n                                rel=\"noopener noreferrer\"\n                                aria-label=\"Watch Video\"\n                                sx={{ \n                                    color: 'inherit',\n                                    '&:hover': {\n                                        backgroundColor: 'rgba(0, 0, 0, 0.04)'\n                                    }\n                                }}\n                            >\n                                <YouTubeIcon fontSize=\"small\" />\n                            </IconButton>\n                        </Tooltip>\n                        <Tooltip title=\"View on GitHub\">\n                            <IconButton\n                                component=\"a\"\n                                href=\"https://github.com/microsoft/data-formulator\"\n                                target=\"_blank\"\n                                rel=\"noopener noreferrer\"\n                                aria-label=\"View on GitHub\"\n                                sx={{ \n                                    color: 'inherit',\n                                    '&:hover': {\n                                        backgroundColor: 'rgba(0, 0, 0, 0.04)'\n                                    }\n                                }}\n                            >\n                                <GitHubIcon fontSize=\"small\" />\n                            </IconButton>\n                        </Tooltip>\n                        <Tooltip title=\"Pip Install\">\n                            <IconButton\n                                component=\"a\"\n                                href=\"https://pypi.org/project/data-formulator/\"\n                                target=\"_blank\"\n                                rel=\"noopener noreferrer\"\n                                aria-label=\"Pip Install\"\n                                sx={{ \n                                    color: 'inherit',\n                                    '&:hover': {\n                                        backgroundColor: 'rgba(0, 0, 0, 0.04)'\n                                    }\n                                }}\n                            >\n                                <Box component=\"img\" src=\"/pip-logo.svg\" sx={{ width: 20, height: 20 }} alt=\"pip logo\" />\n                            </IconButton>\n                        </Tooltip>\n                        <Tooltip title=\"Join Discord\">\n                            <IconButton\n                                component=\"a\"\n                                href=\"https://discord.gg/mYCZMQKYZb\"\n                                target=\"_blank\"\n                                rel=\"noopener noreferrer\"\n                                aria-label=\"Join Discord\"\n                                sx={{ \n                                    color: 'inherit',\n                                    '&:hover': {\n                                        backgroundColor: 'rgba(0, 0, 0, 0.04)'\n                                    }\n                                }}\n                            >\n                                <DiscordIcon sx={{ fontSize: 20 }} />\n                            </IconButton>\n                        </Tooltip>\n                    </Box>\n                )}\n                {isAppPage && (\n                    <Tooltip title=\"View on GitHub\">\n                        <Button\n                            component=\"a\"\n                            href=\"https://github.com/microsoft/data-formulator\"\n                            target=\"_blank\"\n                            rel=\"noopener noreferrer\"\n                            sx={{ \n                                minWidth: 'auto', \n                                color: 'inherit',\n                                '&:hover': {\n                                    backgroundColor: 'rgba(0, 0, 0, 0.04)'\n                                }\n                            }}\n                        >\n                            <GitHubIcon fontSize=\"medium\" />\n                        </Button>\n                    </Tooltip>\n                )}\n            </Toolbar>\n        </AppBar>\n    ];\n\n    let router = createBrowserRouter([\n        {\n            path: \"/about\",\n            element: <About />,\n        },\n        {\n            path: \"/gallery\",\n            element: <ChartGallery />,\n        },\n        {\n            path: \"/\",\n            element: <DataFormulatorFC />,\n        }, {\n            path: \"*\",\n            element: <DataFormulatorFC />,\n            errorElement: <Box sx={{ width: \"100%\", height: \"100%\", display: \"flex\" }}>\n                <Typography color=\"gray\" sx={{ margin: \"150px auto\" }}>An error has occurred, please <Link href=\"/\">refresh the session</Link>. If the problem still exists, click close session.</Typography>\n            </Box>\n        }\n    ]);\n\n    let app =\n        <Box sx={{ \n            position: 'absolute',\n            backgroundColor: 'rgba(255, 255, 255, 0.3)',\n            top: 0,\n            left: 0,\n            right: 0,\n            bottom: 0,\n            overflow: 'auto',\n            '& > *': {\n                minWidth: '1000px',\n                minHeight: '600px'\n            },\n        }}>\n            <Box sx={{ \n                display: 'flex',\n                flexDirection: 'column',\n                height: '100%',\n                width: '100%',\n                overflow: 'hidden'\n            }}>\n                {appBar}\n                <Box sx={{ flex: 1, minHeight: 0, overflow: 'hidden', '& > div': { height: '100%' } }}>\n                    <RouterProvider router={router} />\n                </Box>\n                <MessageSnackbar />\n                <ChartRenderService />\n            </Box>\n        </Box>;\n\n    return (\n        <ThemeProvider theme={theme}>\n            {app}\n        </ThemeProvider>\n    );\n}\n\nfunction stringAvatar(name: string) {\n    let displayName = \"\"\n    try {\n        let nameSplit = name.split(' ')\n        displayName = `${nameSplit[0][0]}${nameSplit.length > 1 ? nameSplit[nameSplit.length - 1][0] : ''}`\n    } catch {\n        displayName = name ? name[0] : \"?\";\n    }\n    return {\n        sx: {\n            bgcolor: \"cornflowerblue\",\n            width: 36,\n            height: 36,\n            margin: \"auto\",\n            fontSize: \"1rem\"\n        },\n        children: displayName,\n    };\n}\n"
  },
  {
    "path": "src/app/chartCache.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Module-level chart render cache.\n * \n * Stores pre-rendered SVG and PNG thumbnail data for each chart,\n * keyed by chart ID. A specKey is stored alongside to detect\n * when the chart's inputs have changed and re-rendering is needed.\n * \n * This is deliberately NOT stored in Redux to avoid:\n * - Bloating serializable state with large SVG/PNG strings\n * - Breaking Redux DevTools with huge payloads\n * - Persisting stale render artifacts across sessions\n */\n\nexport interface ChartCacheEntry {\n    svg: string;                // Full-size SVG string (for VisualizationView)\n    thumbnailDataUrl: string;   // PNG data URL (for DataThread thumbnails)\n    specKey: string;            // Deterministic key of the inputs that produced this render\n}\n\nconst cache = new Map<string, ChartCacheEntry>();\n\n/** Get a cached entry for a chart. Returns undefined if not cached. */\nexport function getCachedChart(chartId: string): ChartCacheEntry | undefined {\n    return cache.get(chartId);\n}\n\n/** Store a rendered chart in the cache. */\nexport function setCachedChart(chartId: string, entry: ChartCacheEntry): void {\n    cache.set(chartId, entry);\n}\n\n/** Remove a chart from the cache (e.g., on deletion). */\nexport function invalidateChart(chartId: string): void {\n    cache.delete(chartId);\n}\n\n/** Clear the entire cache. */\nexport function clearCache(): void {\n    cache.clear();\n}\n\n/**\n * Get a higher-resolution PNG data URL from the cached SVG.\n * Renders the SVG onto a canvas at specified dimensions and\n * exports as a PNG data URL suitable for sending to a vision model.\n * Falls back to the thumbnail if SVG rendering fails.\n */\nexport async function getChartPngDataUrl(\n    chartId: string,\n    width: number = 400,\n    height: number = 400,\n): Promise<string | undefined> {\n    const entry = cache.get(chartId);\n    if (!entry) return undefined;\n\n    try {\n        const svgBlob = new Blob([entry.svg], { type: 'image/svg+xml;charset=utf-8' });\n        const url = URL.createObjectURL(svgBlob);\n\n        const img = new Image();\n        await new Promise<void>((resolve, reject) => {\n            img.onload = () => resolve();\n            img.onerror = reject;\n            img.src = url;\n        });\n\n        const canvas = document.createElement('canvas');\n        canvas.width = width * 2;   // 2x for clarity\n        canvas.height = height * 2;\n        const ctx = canvas.getContext('2d')!;\n        ctx.fillStyle = 'white';\n        ctx.fillRect(0, 0, canvas.width, canvas.height);\n        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n        URL.revokeObjectURL(url);\n        return canvas.toDataURL('image/png');\n    } catch (err) {\n        console.warn('getChartPngDataUrl: SVG render failed, falling back to thumbnail', err);\n        return entry.thumbnailDataUrl || undefined;\n    }\n}\n\n/**\n * Compute a deterministic cache key from chart rendering inputs.\n * This is used to detect when a chart needs re-rendering.\n * We intentionally use JSON.stringify for simplicity — it's fast enough\n * for the data sizes involved (~KB range).\n */\nexport function computeCacheKey(\n    chartType: string,\n    encodingMap: any,\n    config: any,\n    tableRowCount: number,\n    tableContentHash: string | undefined,\n    tableId: string,\n    tableMetadata?: any,\n): string {\n    return JSON.stringify({\n        chartType,\n        encodingMap,\n        config: config || {},\n        tableRowCount,\n        tableContentHash: tableContentHash || tableId,\n        tableMetadata: tableMetadata || {},\n    });\n}\n"
  },
  {
    "path": "src/app/chartRecommendation.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Agent response resolution — maps AI agent chart recommendations to\n * concrete Chart objects.\n *\n * The encoding recommendation engine has moved to the agents-chart library.\n * Use `vlRecommendEncodings` / `ecRecommendEncodings` / etc. directly.\n */\n\nimport { Channel, Chart, DictTable, FieldItem } from '../components/ComponentType';\nimport { generateFreshChart } from './dfSlice';\nimport { vlGetTemplateDef } from '../lib/agents-chart';\n\n/** Map from agent short names to display chart type names. */\nconst AGENT_CHART_TYPE_MAP: Record<string, string> = {\n    scatter: 'Scatter Plot',\n    regression: 'Regression',\n    bar: 'Bar Chart',\n    grouped_bar: 'Grouped Bar Chart',\n    histogram: 'Histogram',\n    line: 'Line Chart',\n    area: 'Area Chart',\n    heatmap: 'Heatmap',\n    boxplot: 'Boxplot',\n    pie: 'Pie Chart',\n    lollipop: 'Lollipop Chart',\n    waterfall: 'Waterfall Chart',\n    candlestick: 'Candlestick Chart',\n    world_map: 'World Map',\n    us_map: 'US Map',\n    // Legacy aliases (backward compat with older agent responses)\n    point: 'Scatter Plot',\n    group_bar: 'Grouped Bar Chart',\n    worldmap: 'World Map',\n    usmap: 'US Map',\n};\n\n/**\n * Resolve an AI agent's chart recommendation into a concrete Chart object.\n * The agent returns a `refinedGoal` with `chart.chart_type` which may be\n * a short name (e.g. \"scatter\"), a full template name (e.g. \"Radar Chart\"),\n * or a user-chosen chart type passed through from the UI.\n */\nexport const resolveRecommendedChart = (refinedGoal: any, allFields: FieldItem[], table: DictTable): Chart => {\n    const chartObj = refinedGoal['chart'] || {};\n    const rawChartType = chartObj['chart_type'];\n    const chartEncodings = chartObj['encodings'];\n\n    if (chartEncodings == undefined || rawChartType == undefined) {\n        let newChart = generateFreshChart(table.id, 'Scatter Plot') as Chart;\n        const basicEncodings: { [key: string]: string } = table.names.length > 1\n            ? { x: table.names[0], y: table.names[1] }\n            : {};\n        newChart = resolveChartFields(newChart, allFields, basicEncodings, table);\n        return newChart;\n    }\n\n    // Resolve chart type: try short-name map first, then check if it's already a valid template name\n    const chartType = AGENT_CHART_TYPE_MAP[rawChartType]\n        || (vlGetTemplateDef(rawChartType) ? rawChartType : undefined)\n        || 'Scatter Plot';\n    let newChart = generateFreshChart(table.id, chartType) as Chart;\n    newChart = resolveChartFields(newChart, allFields, chartEncodings, table);\n\n    // Apply chart config properties from agent recommendation\n    if (chartObj['config'] && typeof chartObj['config'] === 'object') {\n        newChart.config = { ...chartObj['config'] };\n    }\n    return newChart;\n};\n\n/**\n * Populate a chart's encodingMap from a plain { channel: fieldName } object.\n */\nexport const resolveChartFields = (\n    chart: Chart,\n    allFields: FieldItem[],\n    chartEncodings: { [key: string]: string },\n    table: DictTable,\n): Chart => {\n    // Get the keys that should be present after this update\n    const newEncodingKeys = new Set(Object.keys(chartEncodings).map(key => key === 'facet' ? 'column' : key));\n\n    // Remove encodings that are no longer in chartEncodings\n    for (const key of Object.keys(chart.encodingMap)) {\n        if (!newEncodingKeys.has(key) && chart.encodingMap[key as Channel]?.fieldID != undefined) {\n            chart.encodingMap[key as Channel] = {};\n        }\n    }\n\n    // Add/update encodings from chartEncodings\n    for (let [key, value] of Object.entries(chartEncodings)) {\n        if (key === 'facet') {\n            key = 'column';\n        }\n\n        const field = allFields.find(c => c.name === value);\n        if (field) {\n            chart.encodingMap[key as Channel] = { fieldID: field.id };\n        }\n    }\n\n    return chart;\n};\n"
  },
  {
    "path": "src/app/dfSlice.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { createAsyncThunk, createSlice, PayloadAction, createSelector } from '@reduxjs/toolkit'\nimport { Channel, Chart, ChartTemplate, DataCleanBlock, DataSourceConfig, EncodingItem, EncodingMap, FieldItem, Trigger, computeInsightKey, ChartInsight } from '../components/ComponentType'\nimport { enableMapSet } from 'immer';\nimport { DictTable } from \"../components/ComponentType\";\nimport { Message } from '../views/MessageSnackbar';\nimport { getChartTemplate, getChartChannels } from \"../components/ChartTemplates\"\nimport { vlAdaptChart, vlRecommendEncodings } from '../lib/agents-chart';\nimport { getDataTable } from '../views/VisualizationView';\nimport { getTriggers, getUrls, computeContentHash, fetchWithIdentity } from './utils';\nimport { getChartPngDataUrl } from './chartCache';\nimport { Type } from '../data/types';\nimport { createTableFromFromObjectArray, inferTypeFromValueArray } from '../data/utils';\nimport { Identity, IdentityType, getBrowserId } from './identity';\n\nenableMapSet();\n\n// Redux Persist will handle persistence automatically with enableMapSet()\n\nexport const generateFreshChart = (tableRef: string, chartType: string, source: \"user\" | \"trigger\" = \"user\") : Chart => {\n    return { \n        id: `chart-${Date.now()- Math.floor(Math.random() * 10000)}`, \n        chartType: chartType, \n        encodingMap: Object.assign({}, ...getChartChannels(chartType).map((channel) => ({ [channel]: { channel: channel, bin: false } }))),\n        tableRef: tableRef,\n        saved: false,\n        source: source,\n    }\n}\n\nexport interface SSEMessage {\n    type: \"heartbeat\" | \"notification\" | \"action\"; \n    text: string;\n    data?: Record<string, any>;\n    timestamp: number;\n}\n\n// Add interface for app configuration\nexport interface ServerConfig {\n    DISABLE_DISPLAY_KEYS: boolean;\n    DISABLE_DATABASE: boolean;\n    DISABLE_FILE_UPLOAD: boolean;\n    PROJECT_FRONT_PAGE: boolean;\n    MAX_DISPLAY_ROWS: number;\n    DATA_FORMULATOR_HOME?: string;\n    DEV_MODE: boolean;\n    WORKSPACE_BACKEND: string; // 'local' | 'azure_blob'\n}\n\nexport interface ModelConfig {\n    id: string; // unique identifier for the model / client combination\n    endpoint: string;\n    model: string;\n    api_key?: string;\n    api_base?: string;\n    api_version?: string;\n}\n\n\nexport type FocusedId = \n    | { type: 'table'; tableId: string }\n    | { type: 'chart'; chartId: string }\n    | undefined;\n\nexport interface ClientConfig {\n    formulateTimeoutSeconds: number;\n    defaultChartWidth: number;\n    defaultChartHeight: number;\n    maxStretchFactor: number; // max per-axis stretch multiplier for chart sizing (default 2.0)\n    frontendRowLimit: number; // max rows to keep in browser when loading locally (non-virtual)\n    paletteKey: string; // active color palette key from tokens.ts\n}\n\nexport interface GeneratedReport {\n    id: string;\n    content: string;\n    style: string;\n    selectedChartIds: string[];\n    createdAt: number;\n}\n\nexport interface DataFormulatorState {\n\n    agentRules: {\n        coding: string;\n        exploration: string;\n    };\n\n    // Identity management: user identity (if logged in) or browser identity (localStorage-based)\n    // Always initialized with browser identity, updated to user identity if logged in\n    identity: Identity;\n    models: ModelConfig[];\n    selectedModelId: string | undefined;\n    testedModels: {id: string, status: 'ok' | 'error' | 'testing' | 'unknown', message: string}[];\n\n    tables : DictTable[];\n    charts: Chart[];\n    \n    conceptShelfItems: FieldItem[];\n\n    // controls logs and message index\n    messages: Message[];\n    displayedMessageIdx: number;\n\n    focusedDataCleanBlockId: {blockId: string, itemId: number} | undefined;\n\n    focusedId: FocusedId;\n\n    viewMode: 'editor' | 'report';\n\n    chartSynthesisInProgress: string[];\n    chartInsightInProgress: string[];\n\n    serverConfig: ServerConfig;\n\n    config: ClientConfig;\n\n    dataLoaderConnectParams: Record<string, Record<string, string>>; // {table_name: {param_name: param_value}}\n    \n    // which table is the agent working on\n    agentActions: {\n        actionId: string, \n        originTableId: string, // the table the user was focused on when they triggered this action sequence\n        description: string, \n        status: 'running' | 'completed' | 'warning' | 'failed',\n        lastUpdate: number, // the time the action is last updated\n        hidden: boolean, // whether the action is hidden\n        messages: { content: string, role: 'user' | 'thinking' | 'action' | 'completion' | 'error' | 'clarify', observeTableId?: string, resultTableId?: string, timestamp: number }[], // accumulated messages from this action\n        pendingClarification?: { trajectory: any[], completedStepCount: number, lastCreatedTableId: string | null } | null, // stored when agent asks for clarification, cleared on resume/cancel\n    }[];\n\n    // Data cleaning dialog state\n    dataCleanBlocks: DataCleanBlock[];\n    cleanInProgress: boolean;\n\n    // Generated reports state\n    generatedReports: GeneratedReport[];\n\n    // Session loading overlay\n    sessionLoading: boolean;\n    sessionLoadingLabel: string;\n}\n\n// Define the initial state using that type\nconst initialState: DataFormulatorState = {\n\n    agentRules: {\n        coding: \"\",\n        exploration: \"\",\n    },\n\n    identity: { type: 'browser', id: getBrowserId() },\n    models: [],\n    selectedModelId: undefined,\n    testedModels: [],\n\n    tables: [],\n    charts: [],\n\n    conceptShelfItems: [],\n\n    messages: [],\n    displayedMessageIdx: -1,\n\n    focusedDataCleanBlockId: undefined,\n    focusedId: undefined,\n\n    viewMode: 'editor',\n\n    chartSynthesisInProgress: [],\n    chartInsightInProgress: [],\n\n    serverConfig: {\n        DISABLE_DISPLAY_KEYS: false,\n        DISABLE_DATABASE: false, // will be overridden by /api/app-config\n        DISABLE_FILE_UPLOAD: false,\n        PROJECT_FRONT_PAGE: false,\n        MAX_DISPLAY_ROWS: 10000,\n        DEV_MODE: false,\n        WORKSPACE_BACKEND: 'local',\n    },\n\n    config: {\n        formulateTimeoutSeconds: 60,\n        defaultChartWidth: 400,\n        defaultChartHeight: 300,\n        maxStretchFactor: 2.0,\n        frontendRowLimit: 50000,\n        paletteKey: 'fluent',\n    },\n\n    dataLoaderConnectParams: {},\n    \n    agentActions: [],\n\n    dataCleanBlocks: [],\n    cleanInProgress: false,\n\n    generatedReports: [],\n\n    sessionLoading: false,\n    sessionLoadingLabel: '',\n}\n\nlet getUnrefedDerivedTableIds = (state: DataFormulatorState) => {\n    // find tables directly referred by charts\n    let allCharts = dfSelectors.getAllCharts(state);\n    let chartRefedTables = allCharts.map(chart => getDataTable(chart, state.tables, allCharts, state.conceptShelfItems))\n        .filter(t => t != undefined).map(t => t.id);\n    let tableWithDescendants = state.tables.filter(table => state.tables.some(t => t.derive?.trigger.tableId == table.id)).map(t => t.id);\n\n    return state.tables.filter(table => table.derive && !tableWithDescendants.includes(table.id) && !chartRefedTables.includes(table.id)).map(t => t.id);\n}\n\n/**\n * Fire-and-forget cleanup of virtual tables from the workspace backend.\n * Called when derived tables are removed from the frontend state.\n */\nexport function cleanupVirtualTablesFromWorkspace(tables: DictTable[]) {\n    for (const table of tables) {\n        if (table.virtual?.tableId) {\n            fetchWithIdentity(getUrls().DELETE_TABLE, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: JSON.stringify({ table_name: table.virtual.tableId }),\n            }).catch(err => {\n                console.warn(`Failed to clean up virtual table ${table.virtual?.tableId}:`, err);\n            });\n        }\n    }\n}\n\n// Helper function to auto-populate latitude/longitude encodings for map charts\nlet deleteChartsRoutine = (state: DataFormulatorState, chartIds: string[]) => {\n    let charts = state.charts.filter(c => !chartIds.includes(c.id));\n    let currentFocusedChartId = state.focusedId?.type === 'chart' ? state.focusedId.chartId : undefined;\n\n    if (currentFocusedChartId && chartIds.includes(currentFocusedChartId)) {\n        let leafCharts = charts;\n        if (leafCharts.length > 0) {\n            state.focusedId = { type: 'chart', chartId: leafCharts[0].id };\n        } else {\n            state.focusedId = undefined;\n        }\n    }\n    state.chartSynthesisInProgress = state.chartSynthesisInProgress.filter(s => !chartIds.includes(s));\n\n    // update focusedChart and activeThreadChart\n    state.charts = charts;\n\n    let unrefedDerivedTableIds = getUnrefedDerivedTableIds(state);\n    let tableIdsToDelete = state.tables.filter(t => !t.anchored && unrefedDerivedTableIds.includes(t.id)).map(t => t.id);\n    \n    // Clean up virtual tables from workspace before removing from state\n    let tablesToDelete = state.tables.filter(t => tableIdsToDelete.includes(t.id));\n    cleanupVirtualTablesFromWorkspace(tablesToDelete);\n\n    state.tables = state.tables.filter(t => !tableIdsToDelete.includes(t.id));\n}\n\nexport const fetchFieldSemanticType = createAsyncThunk(\n    \"dataFormulatorSlice/fetchFieldSemanticType\",\n    async (table: DictTable, { getState }) => {\n        console.log(\">>> call agent to infer semantic types <<<\")\n\n        let state = getState() as DataFormulatorState;\n\n        let message = {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json', },\n            body: JSON.stringify({\n                token: Date.now(),\n                input_data: {name: table.id, rows: table.rows, virtual: table.virtual ? true : false},\n                model: dfSelectors.getActiveModel(state)\n            }),\n        };\n\n        // timeout the request after 20 seconds\n        const controller = new AbortController()\n        const timeoutId = setTimeout(() => controller.abort(), 20000)\n\n        let response = await fetchWithIdentity(getUrls().SERVER_PROCESS_DATA_ON_LOAD, {...message, signal: controller.signal })\n\n        return response.json();\n    }\n);\n\nexport const fetchCodeExpl = createAsyncThunk(\n    \"dataFormulatorSlice/fetchCodeExpl\",\n    async (derivedTable: DictTable, { getState }) => {\n        console.log(\">>> call agent to obtain code explanations <<<\")\n\n        let state = getState() as DataFormulatorState;\n\n        let message = {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json', },\n            body: JSON.stringify({\n                token: Date.now(),\n                input_tables: derivedTable.derive?.source\n                                .map(tId => state.tables.find(t => t.id == tId) as DictTable)\n                                .map(t => ({ \n                                    name: t.id, \n                                    rows: t.rows, \n                                    attached_metadata: t.attachedMetadata\n                                })),\n                code: derivedTable.derive?.code,\n                model: dfSelectors.getActiveModel(state)\n            }),\n        };\n\n        // timeout the request after 20 seconds\n        const controller = new AbortController()\n        const timeoutId = setTimeout(() => controller.abort(), 20000)\n\n        let response = await fetchWithIdentity(getUrls().CODE_EXPL_URL, {...message, signal: controller.signal })\n\n        return response.json();\n    }\n);\n\nexport const fetchChartInsight = createAsyncThunk(\n    \"dataFormulatorSlice/fetchChartInsight\",\n    async (args: { chartId: string; tableId: string }, { getState }) => {\n        console.log(\">>> call agent to generate chart insight <<<\");\n\n        let state = getState() as DataFormulatorState;\n        let chart = dfSelectors.getAllCharts(state).find(c => c.id === args.chartId);\n        if (!chart) throw new Error(`Chart not found: ${args.chartId}`);\n\n        // Get high-res PNG from the rendered chart\n        let chartImage = await getChartPngDataUrl(args.chartId);\n        if (!chartImage) throw new Error(`No rendered chart image for: ${args.chartId}`);\n\n        // Strip the data:image/png;base64, prefix for the backend\n        const base64Prefix = 'data:image/png;base64,';\n        if (chartImage.startsWith(base64Prefix)) {\n            chartImage = chartImage.substring(base64Prefix.length);\n        }\n\n        // Collect field names from the encoding map\n        let fieldNames = Object.values(chart.encodingMap)\n            .map(enc => enc.fieldID)\n            .filter((id): id is string => !!id)\n            .map(id => {\n                let field = state.conceptShelfItems.find(f => f.id === id);\n                return field?.name || id;\n            });\n\n        // Collect input table info (include source tables for derived tables)\n        let table = state.tables.find(t => t.id === args.tableId);\n        let tableIds = table?.derive?.source ? [...table.derive.source, table.id] : [table?.id].filter(Boolean);\n        let inputTables = [...new Set(tableIds)]\n            .map(tId => state.tables.find(t => t.id === tId))\n            .filter((t): t is DictTable => !!t)\n            .map(t => ({\n                name: t.id,\n                rows: t.rows,\n                attached_metadata: t.attachedMetadata,\n            }));\n\n        let message = {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json' },\n            body: JSON.stringify({\n                token: Date.now(),\n                chart_image: chartImage,\n                chart_type: chart.chartType,\n                field_names: fieldNames,\n                input_tables: inputTables,\n                model: dfSelectors.getActiveModel(state),\n            }),\n        };\n\n        const controller = new AbortController();\n        const timeoutId = setTimeout(() => controller.abort(), 30000);\n\n        let response = await fetchWithIdentity(getUrls().CHART_INSIGHT_URL, { ...message, signal: controller.signal });\n        clearTimeout(timeoutId);\n\n        let result = await response.json();\n        return { ...result, chartId: args.chartId, insightKey: computeInsightKey(chart) };\n    }\n);\n\nexport const fetchAvailableModels = createAsyncThunk(\n    \"dataFormulatorSlice/fetchAvailableModels\",\n    async () => {\n        console.log(\">>> call agent to fetch available models <<<\")\n        let message = {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json', },\n            body: JSON.stringify({\n                token: Date.now(),\n            }),\n        };\n\n        // timeout the request after 20 seconds\n        const controller = new AbortController()\n        const timeoutId = setTimeout(() => controller.abort(), 20000)\n\n        let response = await fetchWithIdentity(getUrls().CHECK_AVAILABLE_MODELS, {...message, signal: controller.signal })\n\n        return response.json();\n    }\n);\n\n// No server round-trip needed - identity is determined client-side:\n// - User ID from auth provider (if logged in)\n// - Browser ID from localStorage (shared across all tabs)\n\nexport const dataFormulatorSlice = createSlice({\n    name: 'dataFormulatorSlice',\n    initialState: initialState,\n    reducers: {\n        resetState: (state) => {\n            //state.table = undefined;\n            \n            // Preserve: models, selectedModelId, testedModels, agentRules,\n            //           config, dataLoaderConnectParams, identity\n\n            state.tables = [];\n            state.charts = [];\n\n            state.conceptShelfItems = [];\n\n            state.messages = [];\n            state.displayedMessageIdx = -1;\n\n            state.focusedDataCleanBlockId = undefined;\n\n            state.focusedId = undefined;\n\n            state.viewMode = 'editor';\n\n            state.chartSynthesisInProgress = [];\n\n            state.serverConfig = initialState.serverConfig;\n\n            state.dataCleanBlocks = [];\n            state.cleanInProgress = false;\n\n            state.agentActions = [];\n\n            state.generatedReports = [];\n            // Redux Persist will handle persistence automatically\n            \n        },\n        setSessionLoading: (state, action: PayloadAction<{loading: boolean, label?: string}>) => {\n            state.sessionLoading = action.payload.loading;\n            state.sessionLoadingLabel = action.payload.label || '';\n        },\n        loadState: (state, action: PayloadAction<any>) => {\n            const saved = action.payload;\n\n            // Return a brand-new state object so Immer skips\n            // recursive proxy / freeze on potentially huge table rows.\n            return {\n                // Preserve local-only / sensitive fields from current state\n                identity: state.identity,\n                agentRules: state.agentRules || initialState.agentRules,\n                models: state.models || [],\n                selectedModelId: state.selectedModelId || undefined,\n                testedModels: state.testedModels || [],\n                dataLoaderConnectParams: state.dataLoaderConnectParams || {},\n                serverConfig: initialState.serverConfig,\n\n                // Restore from saved payload\n                tables: saved.tables || [],\n                charts: saved.charts || [],\n                conceptShelfItems: saved.conceptShelfItems || [],\n                focusedDataCleanBlockId: saved.focusedDataCleanBlockId || undefined,\n                // Migrate from old focusedTableId/focusedChartId to new focusedId\n                focusedId: saved.focusedId || (\n                    saved.focusedChartId ? { type: 'chart' as const, chartId: saved.focusedChartId } :\n                    saved.focusedTableId ? { type: 'table' as const, tableId: saved.focusedTableId } :\n                    undefined\n                ),\n                config: { ...initialState.config, ...(saved.config || {}) },\n                dataCleanBlocks: saved.dataCleanBlocks || [],\n                agentActions: saved.agentActions || [],\n                generatedReports: saved.generatedReports || [],\n\n                // Reset transient fields\n                messages: [],\n                displayedMessageIdx: -1,\n                viewMode: saved.viewMode || 'editor',\n                chartSynthesisInProgress: [],\n                chartInsightInProgress: [],\n                cleanInProgress: false,\n                sessionLoading: false,\n                sessionLoadingLabel: '',\n            };\n        },\n        updateAgentWorkInProgress: (state, action: PayloadAction<{actionId: string, originTableId?: string, description: string, status: 'running' | 'completed' | 'warning' | 'failed', hidden: boolean, message?: { content: string, role: 'user' | 'thinking' | 'action' | 'completion' | 'error' | 'clarify', observeTableId?: string, resultTableId?: string }, pendingClarification?: { trajectory: any[], completedStepCount: number, lastCreatedTableId: string | null } | null }>) => {\n            const now = Date.now();\n            if (state.agentActions.some(a => a.actionId == action.payload.actionId)) {\n                state.agentActions = state.agentActions.map(a => {\n                    if (a.actionId != action.payload.actionId) return a;\n                    const updated = {...a, ...action.payload, lastUpdate: now};\n                    if (action.payload.message) {\n                        updated.messages = [...(a.messages || []), { ...action.payload.message, timestamp: now }];\n                    }\n                    return updated;\n                });\n            } else {\n                const messages = action.payload.message \n                    ? [{ ...action.payload.message, timestamp: now }] \n                    : [];\n                state.agentActions = [...state.agentActions, {...action.payload, originTableId: action.payload.originTableId || \"\", lastUpdate: now, hidden: action.payload.hidden, messages}];\n            }\n        },\n        deleteAgentWorkInProgress: (state, action: PayloadAction<string>) => {\n            state.agentActions = state.agentActions.filter(a => a.actionId != action.payload);\n        },\n        setServerConfig: (state, action: PayloadAction<ServerConfig>) => {\n            state.serverConfig = action.payload;\n        },\n        setConfig: (state, action: PayloadAction<ClientConfig>) => {\n            state.config = action.payload;\n        },\n        setViewMode: (state, action: PayloadAction<'editor' | 'report'>) => {\n            state.viewMode = action.payload;\n        },\n        setAgentRules: (state, action: PayloadAction<{coding: string, exploration: string}>) => {\n            state.agentRules = action.payload;\n        },\n        selectModel: (state, action: PayloadAction<string | undefined>) => {\n            state.selectedModelId = action.payload;\n        },\n        addModel: (state, action: PayloadAction<ModelConfig>) => {\n            state.models = [...state.models, action.payload];\n        },\n        removeModel: (state, action: PayloadAction<string>) => {\n            state.models = state.models.filter(model => model.id != action.payload);\n            if (state.selectedModelId == action.payload) {\n                state.selectedModelId = undefined;\n            }\n        },\n        updateModelStatus: (state, action: PayloadAction<{id: string, status: 'ok' | 'error' | 'testing' | 'unknown', message: string}>) => {\n            let id = action.payload.id;\n            let status = action.payload.status;\n            let message = action.payload.message;\n            \n            state.testedModels = [\n                ...state.testedModels.filter(t => t.id != id), \n                {id: id, status, message}\n            ];\n        },\n        addTableToStore: (state, action: PayloadAction<DictTable>) => {\n            let table = action.payload;\n            // Compute content hash if not already set\n            if (!table.contentHash) {\n                table = { ...table, contentHash: computeContentHash(table.rows, table.names) };\n            }\n            state.tables = [...state.tables, table];\n            state.charts = [...state.charts];\n            state.conceptShelfItems = [...state.conceptShelfItems, ...getDataFieldItems(table)];\n\n            state.focusedId = { type: 'table', tableId: table.id };\n        },\n        deleteTable: (state, action: PayloadAction<string>) => {\n            let tableId = action.payload;\n            \n            // Find the table to delete\n            let tableToDelete = state.tables.find(t => t.id == tableId);\n            if (!tableToDelete) return;\n\n            // Clean up virtual table from workspace before removing from state\n            cleanupVirtualTablesFromWorkspace([tableToDelete]);\n\n            // Find direct children: tables derived from or triggered by this table\n            let directChildren = state.tables.filter(t => \n                t.derive?.trigger.tableId === tableId || \n                t.derive?.source.includes(tableId)\n            );\n\n            // If the deleted table is derived and has children, re-parent their triggers\n            if (directChildren.length > 0 && tableToDelete.derive) {\n                const parentTriggerId = tableToDelete.derive.trigger.tableId;\n\n                state.tables = state.tables.map(t => {\n                    if (!t.derive) return t;\n\n                    // Only update trigger.tableId — derive.source stays as-is\n                    // since each table has its own specific data sources\n                    if (t.derive.trigger.tableId !== tableId) return t;\n\n                    return {\n                        ...t,\n                        derive: {\n                            ...t.derive,\n                            trigger: {\n                                ...t.derive.trigger,\n                                tableId: parentTriggerId,\n                            }\n                        }\n                    };\n                });\n            }\n            \n            // Remove the table\n            state.tables = state.tables.filter(t => t.id != tableId);\n\n            // Clean up concept shelf items referencing this table\n            state.conceptShelfItems = state.conceptShelfItems.filter(f => !(f.tableRef == tableId));\n            \n            // Delete charts that refer to this table\n            let chartIdsToDelete = state.charts.filter(c => c.tableRef == tableId).map(c => c.id);\n            deleteChartsRoutine(state, chartIdsToDelete);\n\n            // Clean up agent actions: remove non-running actions whose originTableId is the deleted table\n            // AND whose resultTableIds all point to tables that no longer exist\n            const survivingTableIds = new Set(state.tables.map(t => t.id));\n            state.agentActions = state.agentActions.filter(a => {\n                if (a.status === 'running') return true; // never remove running actions\n                if (a.originTableId !== tableId) return true; // not related to deleted table\n                // Keep if any resultTableId still exists in surviving tables\n                const resultTableIds = a.messages\n                    ?.filter(m => m.resultTableId)\n                    .map(m => m.resultTableId!) ?? [];\n                return resultTableIds.some(id => survivingTableIds.has(id));\n            });\n\n            // If the deleted table was focused, reset focus\n            if (state.focusedId?.type === 'table' && state.focusedId.tableId === tableId) {\n                state.focusedId = state.tables.length > 0 ? { type: 'table', tableId: state.tables[0].id } : undefined;\n            }\n        },\n        updateTableAnchored: (state, action: PayloadAction<{tableId: string, anchored: boolean}>) => {\n            let tableId = action.payload.tableId;\n            let anchored = action.payload.anchored;\n            state.tables = state.tables.map(t => t.id == tableId ? {...t, anchored} : t);\n        },\n        updateTableDisplayId: (state, action: PayloadAction<{tableId: string, displayId: string}>) => {\n            let tableId = action.payload.tableId;\n            let displayId = action.payload.displayId;\n            state.tables = state.tables.map(t => t.id == tableId ? {...t, displayId} : t);\n        },\n        updateTableAttachedMetadata: (state, action: PayloadAction<{tableId: string, attachedMetadata: string}>) => {\n            let tableId = action.payload.tableId;\n            let attachedMetadata = action.payload.attachedMetadata;\n            state.tables = state.tables.map(t => t.id == tableId ? {...t, attachedMetadata} : t);\n        },\n        updateTableRows: (state, action: PayloadAction<{tableId: string, rows: any[], contentHash?: string}>) => {\n            // Update the rows of a table while preserving all other table properties\n            // This is used for refreshing data in original (non-derived) tables\n            let tableId = action.payload.tableId;\n            let newRows = action.payload.rows;\n            let providedContentHash = action.payload.contentHash;\n            \n            state.tables = state.tables.map(t => {\n                if (t.id == tableId) {\n                    // Update metadata type inference based on new data\n                    let newMetadata = { ...t.metadata };\n                    for (let name of t.names) {\n                        if (newRows.length > 0 && name in newRows[0]) {\n                            newMetadata[name] = {\n                                ...newMetadata[name],\n                                type: inferTypeFromValueArray(newRows.map(r => r[name])),\n                            };\n                        }\n                    }\n                    // Update lastRefreshed timestamp if source exists\n                    const updatedSource = t.source ? { ...t.source, lastRefreshed: Date.now() } : undefined;\n                    // Use provided content hash (from backend for virtual/DB tables) or compute locally\n                    // For virtual tables, backend hash reflects full table; for stream tables, compute from actual rows\n                    const newContentHash = providedContentHash || computeContentHash(newRows, t.names);\n                    return { ...t, rows: newRows, metadata: newMetadata, source: updatedSource, contentHash: newContentHash };\n                }\n                return t;\n            });\n        },\n        updateMultipleTableRows: (state, action: PayloadAction<{tableId: string, rows: any[], contentHash?: string}[]>) => {\n            // Batch-update rows for multiple tables in a single state mutation.\n            // This avoids N separate dispatches (each creating a new state.tables reference)\n            // when refreshing derived tables after a source table changes.\n            const updates = new Map(action.payload.map(u => [u.tableId, u]));\n            state.tables = state.tables.map(t => {\n                const update = updates.get(t.id);\n                if (!update) return t;\n                const newRows = update.rows;\n                const providedContentHash = update.contentHash;\n                let newMetadata = { ...t.metadata };\n                for (let name of t.names) {\n                    if (newRows.length > 0 && name in newRows[0]) {\n                        newMetadata[name] = {\n                            ...newMetadata[name],\n                            type: inferTypeFromValueArray(newRows.map(r => r[name])),\n                        };\n                    }\n                }\n                const updatedSource = t.source ? { ...t.source, lastRefreshed: Date.now() } : undefined;\n                const newContentHash = providedContentHash || computeContentHash(newRows, t.names);\n                return { ...t, rows: newRows, metadata: newMetadata, source: updatedSource, contentHash: newContentHash };\n            });\n        },\n        updateTableSource: (state, action: PayloadAction<{tableId: string, source: DataSourceConfig}>) => {\n            // Update the source configuration of a table\n            let tableId = action.payload.tableId;\n            let source = action.payload.source;\n            state.tables = state.tables.map(t => t.id == tableId ? {...t, source} : t);\n        },\n        updateTableSourceRefreshSettings: (state, action: PayloadAction<{tableId: string, autoRefresh: boolean, refreshIntervalSeconds?: number}>) => {\n            // Update just the refresh settings of a table's source\n            let tableId = action.payload.tableId;\n            let autoRefresh = action.payload.autoRefresh;\n            let refreshIntervalSeconds = action.payload.refreshIntervalSeconds;\n            state.tables = state.tables.map(t => {\n                if (t.id == tableId && t.source) {\n                    return {\n                        ...t,\n                        source: {\n                            ...t.source,\n                            autoRefresh,\n                            ...(refreshIntervalSeconds !== undefined ? { refreshIntervalSeconds } : {})\n                        }\n                    };\n                }\n                return t;\n            });\n        },\n        extendTableWithNewFields: (state, action: PayloadAction<{tableId: string, columnName: string, values: any[], previousName: string | undefined, parentIDs: string[]}>) => {\n            // extend the existing extTable with new columns from the new table\n            let newValues = action.payload.values;\n            let tableId = action.payload.tableId;\n            let columnName = action.payload.columnName;\n            let previousName = action.payload.previousName;\n            let parentIDs = action.payload.parentIDs;\n\n            // Find the first parent's column name\n            let lastParentField = state.conceptShelfItems.find(f => f.id === parentIDs[parentIDs.length - 1]);\n            let lastParentName = lastParentField?.name;\n\n            let table = state.tables.find(t => t.id == tableId) as DictTable;\n\n            let newNames = [];\n            if (previousName && table.names.indexOf(previousName) != -1) {\n                let replacePosition = table.names.indexOf(previousName);\n                newNames[replacePosition] = columnName;\n            } else {            \n                let insertPosition = lastParentName ? table.names.indexOf(lastParentName) : table.names.length - 1;\n                newNames = table.names.slice(0, insertPosition + 1).concat(columnName).concat(table.names.slice(insertPosition + 1));\n            }\n\n            let newMetadata = structuredClone(table.metadata);\n            for (let name of newNames) {\n                newMetadata[name] = {type: inferTypeFromValueArray(newValues), semanticType: \"\", levels: []};\n            }\n\n            // Create new rows with the column positioned after the first parent\n            let newRows = table.rows.map((row, i) => {\n                let newRow: {[key: string]: any} = {};\n                for (let key of Object.keys(row)) {\n                    newRow[key] = row[key];\n                    if (key === lastParentName) {\n                        newRow[columnName] = newValues[i];\n                    }\n                }\n                if (!lastParentName) {\n                    newRow[columnName] = newValues[i];\n                }\n                if (previousName) {\n                    delete newRow[previousName];\n                }\n                return newRow;\n            });\n            \n            table.names = newNames;\n            table.metadata = newMetadata;\n            table.rows = newRows;\n        },\n        removeDerivedField: (state, action: PayloadAction<{tableId: string, fieldId: string}>) => {\n            let tableId = action.payload.tableId;\n            let fieldId = action.payload.fieldId;\n            let table = state.tables.find(t => t.id == tableId) as DictTable;\n            let fieldName = state.conceptShelfItems.find(f => f.id == fieldId)?.name as string;\n\n            let fieldIndex = table.names.indexOf(fieldName);  \n            if (fieldIndex != -1) {\n                table.names = table.names.slice(0, fieldIndex).concat(table.names.slice(fieldIndex + 1));\n                delete table.metadata[fieldName];\n                table.rows = table.rows.map(r => {\n                    delete r[fieldName];\n                    return r;\n                });\n            }\n        },\n        createNewChart: (state, action: PayloadAction<{chartType: string, tableId: string}>) => {\n            let chartType = action.payload.chartType;\n            let tableId = action.payload.tableId || state.tables[0].id;\n            let freshChart = generateFreshChart(tableId, chartType, \"user\") as Chart;\n            \n            // Auto-populate encodings based on table metadata\n            let table = state.tables.find(t => t.id === tableId);\n            if (table) {\n                const semanticTypes: Record<string, string> = {};\n                for (const [fn, meta] of Object.entries(table.metadata)) {\n                    if (meta?.semanticType) semanticTypes[fn] = meta.semanticType;\n                }\n                const suggested = vlRecommendEncodings(chartType, table.rows, semanticTypes);\n                for (const [channel, fieldName] of Object.entries(suggested)) {\n                    if (freshChart.encodingMap[channel as Channel]?.fieldID == undefined) {\n                        const fieldItem = state.conceptShelfItems.find(f => f.name === fieldName && table!.names.includes(f.name));\n                        if (fieldItem) freshChart.encodingMap[channel as Channel] = { fieldID: fieldItem.id };\n                    }\n                }\n            }\n            \n            state.charts = [ freshChart , ...state.charts];\n            state.focusedId = { type: 'chart', chartId: freshChart.id };\n        },\n        addChart: (state, action: PayloadAction<Chart>) => {\n            let chart = action.payload;\n            state.charts = [chart, ...state.charts];\n        },\n        addAndFocusChart: (state, action: PayloadAction<Chart>) => {\n            let chart = action.payload;\n            state.charts = [chart, ...state.charts];\n            state.focusedId = { type: 'chart', chartId: chart.id };\n        },\n        duplicateChart: (state, action: PayloadAction<string>) => {\n            let chartId = action.payload;\n\n            let chartCopy = JSON.parse(JSON.stringify(state.charts.find(chart => chart.id == chartId) as Chart)) as Chart;\n            chartCopy = { ...chartCopy, saved: false }\n            chartCopy.id = `chart-${Date.now()- Math.floor(Math.random() * 10000)}`;\n            state.charts.push(chartCopy);\n            state.focusedId = { type: 'chart', chartId: chartCopy.id };\n        },\n        saveUnsaveChart: (state, action: PayloadAction<string>) => {\n            let chartId = action.payload;\n\n            state.charts = state.charts.map(chart => {\n                if (chart.id == chartId) {\n                    return { ...chart, saved: !chart.saved };\n                } else {\n                    return chart;\n                }\n            })\n        },\n        deleteChartById: (state, action: PayloadAction<string>) => {\n            let chartId = action.payload;\n            deleteChartsRoutine(state, [chartId]);\n        },\n        updateChartType: (state, action: PayloadAction<{chartId: string, chartType: string}>) => {\n            let chartId = action.payload.chartId;\n            let chartType = action.payload.chartType;\n\n            let chart = dfSelectors.getAllCharts(state).find(c => c.id == chartId);\n            if (chart) {\n                const template = getChartTemplate(chartType) as ChartTemplate;\n                const sourceType = chart.chartType;\n\n                // Get data table + semantic types for recommendation-based adaptation\n                let allCharts = dfSelectors.getAllCharts(state);\n                let table = getDataTable(chart, state.tables, allCharts, state.conceptShelfItems);\n                const semanticTypes: Record<string, string> = {};\n                if (table) {\n                    for (const [fn, meta] of Object.entries(table.metadata)) {\n                        if (meta?.semanticType) semanticTypes[fn] = meta.semanticType;\n                    }\n                }\n\n                // Extract current encodings as field names\n                const filledEncodings: Record<string, string> = {};\n                for (const [ch, enc] of Object.entries(chart.encodingMap)) {\n                    if (enc.fieldID != null) {\n                        const field = state.conceptShelfItems.find(f => f.id === enc.fieldID);\n                        if (field) filledEncodings[ch] = field.name;\n                    }\n                }\n\n                // Adapt encodings: re-recommends with preference for existing fields\n                let adapted = vlAdaptChart(sourceType, chartType, filledEncodings, table?.rows, semanticTypes);\n\n                // Fallback: if adaptation returned nothing but we had fields,\n                // keep fields in channels that exist in both source and target\n                if (Object.keys(adapted).length === 0 && Object.keys(filledEncodings).length > 0) {\n                    const targetChannelSet = new Set(template.channels);\n                    for (const [ch, fieldName] of Object.entries(filledEncodings)) {\n                        if (targetChannelSet.has(ch)) {\n                            adapted[ch] = fieldName;\n                        }\n                    }\n                }\n\n                // Build new encoding map from adapted field names\n                const newEncodingMap = Object.assign(\n                    {}, ...template.channels.map((ch: string) => ({ [ch]: {} as EncodingItem })),\n                ) as EncodingMap;\n                for (const [ch, fieldName] of Object.entries(adapted)) {\n                    const field = state.conceptShelfItems.find(f => f.name === fieldName);\n                    if (field) newEncodingMap[ch as Channel] = { fieldID: field.id };\n                }\n                chart = { ...chart, chartType, encodingMap: newEncodingMap };\n                \n                // Fill any remaining empty channels via full recommendation\n                if (table) {\n                    const suggested = vlRecommendEncodings(chartType, table.rows, semanticTypes);\n                    for (const [channel, fieldName] of Object.entries(suggested)) {\n                        if (chart.encodingMap[channel as Channel]?.fieldID == undefined) {\n                            const fieldItem = state.conceptShelfItems.find(f => f.name === fieldName && table!.names.includes(f.name));\n                            if (fieldItem) chart.encodingMap[channel as Channel] = { fieldID: fieldItem.id };\n                        }\n                    }\n                }\n                \n                dfSelectors.replaceChart(state, chart);\n            }\n        },\n        \n        updateTableRef: (state, action: PayloadAction<{chartId: string, tableRef: string}>) => {\n            let chartId = action.payload.chartId;\n            let tableRef = action.payload.tableRef;\n            state.charts = state.charts.map(chart => {\n                if (chart.id == chartId) {\n                    return { ...chart, tableRef }\n                } else {\n                    return chart\n                }\n            })\n        },\n        updateChartConfig: (state, action: PayloadAction<{chartId: string, key: string, value: any}>) => {\n            let chartId = action.payload.chartId;\n            let key = action.payload.key;\n            let value = action.payload.value;\n            let chart = dfSelectors.getAllCharts(state).find(c => c.id == chartId);\n            if (chart) {\n                if (!chart.config) {\n                    chart.config = {};\n                }\n                if (value === undefined) {\n                    delete chart.config[key];\n                } else {\n                    chart.config[key] = value;\n                }\n            }\n        },\n        updateChartThumbnail: (state, action: PayloadAction<{chartId: string, thumbnail: string}>) => {\n            let chart = dfSelectors.getAllCharts(state).find(c => c.id == action.payload.chartId);\n            if (chart) {\n                chart.thumbnail = action.payload.thumbnail;\n            }\n        },\n        updateChartInsight: (state, action: PayloadAction<{chartId: string, insight: ChartInsight}>) => {\n            let chart = dfSelectors.getAllCharts(state).find(c => c.id == action.payload.chartId);\n            if (chart) {\n                chart.insight = action.payload.insight;\n            }\n        },\n        updateChartEncoding: (state, action: PayloadAction<{chartId: string, channel: Channel, encoding: EncodingItem}>) => {\n            let chartId = action.payload.chartId;\n            let channel = action.payload.channel;\n            let encoding = action.payload.encoding;\n            let chart = dfSelectors.getAllCharts(state).find(c => c.id == chartId);\n            if (chart) {\n                chart.encodingMap[channel] = encoding;\n            }\n        },\n        updateChartEncodingProp: (state, action: PayloadAction<{chartId: string, channel: Channel, prop: string, value: any}>) => {\n            let chartId = action.payload.chartId;\n            let channel = action.payload.channel;\n            let prop = action.payload.prop;\n            let value = action.payload.value;\n            let chart = dfSelectors.getAllCharts(state).find(c => c.id == chartId);\n            let table = state.tables.find(t => t.id == chart?.tableRef) as DictTable;\n            \n            if (chart) {\n                //TODO: check this, finding reference and directly update??\n                let encoding = chart.encodingMap[channel];\n                if (prop == 'fieldID') {\n                    encoding.fieldID = value;\n\n                    // automatcially fetch the auto-sort order from the field\n                    let field = state.conceptShelfItems.find(f => f.id == value);\n                    if (table && field && table.metadata[field.name] && table.metadata[field.name].levels && table.metadata[field.name].levels.length > 0) {\n                        encoding.sortBy = JSON.stringify(table.metadata[field.name].levels);\n                    }\n                } else if (prop == 'aggregate') {\n                    encoding.aggregate = value;\n                } else if (prop == \"sortOrder\") {\n                    encoding.sortOrder = value == \"auto\" ? undefined : value;\n                } else if (prop == \"sortBy\") {\n                    encoding.sortBy = value == \"auto\" ? undefined : value;\n                } else if (prop == \"scheme\") {\n                    encoding.scheme = value;\n                } else if (prop == \"dtype\") {\n                    encoding.dtype = value;\n                }\n            }\n        },\n        swapChartEncoding: (state, action: PayloadAction<{chartId: string, channel1: Channel, channel2: Channel}>) => {\n            let chartId = action.payload.chartId;\n            let channel1 = action.payload.channel1;\n            let channel2 = action.payload.channel2;\n\n            let chart = dfSelectors.getAllCharts(state).find(c => c.id == chartId);\n            if (chart) {\n                let enc1 = chart.encodingMap[channel1];\n                let enc2 = chart.encodingMap[channel2];\n\n                chart.encodingMap[channel1] = { fieldID: enc2.fieldID, aggregate: enc2.aggregate, sortBy: enc2.sortBy, sortOrder: enc2.sortOrder };\n                chart.encodingMap[channel2] = { fieldID: enc1.fieldID, aggregate: enc1.aggregate, sortBy: enc1.sortBy, sortOrder: enc1.sortOrder };\n            }\n        },\n        addConceptItems: (state, action: PayloadAction<FieldItem[]>) => {\n            state.conceptShelfItems = [...action.payload, ...state.conceptShelfItems];\n        },\n        updateConceptItems: (state, action: PayloadAction<FieldItem>) => {\n            let concept = action.payload;\n            let conceptShelfItems = [...state.conceptShelfItems];\n            let index = conceptShelfItems.findIndex(field => field.id === concept.id);\n            if (index != -1) {\n                conceptShelfItems[index] = concept;\n            } else {\n                conceptShelfItems = [concept, ...conceptShelfItems];\n            }\n            state.conceptShelfItems = conceptShelfItems;\n        },\n        deleteConceptItemByID: (state, action: PayloadAction<string>) => {\n            let conceptID = action.payload;\n            let allCharts = dfSelectors.getAllCharts(state);\n            // remove concepts from encoding maps\n            if (allCharts.some(chart => chart.saved \n                && Object.entries(chart.encodingMap).some(([channel, encoding]) => encoding.fieldID && conceptID == encoding.fieldID))) {\n                console.log(\"cannot delete!\")\n            } else {\n                state.conceptShelfItems = state.conceptShelfItems.filter(f => f.id != conceptID);\n                for (let chart of allCharts)  {\n                    for (let [channel, encoding] of Object.entries(chart.encodingMap)) {\n                        if (encoding.fieldID && conceptID == encoding.fieldID) {\n                            // clear the encoding\n                            chart.encodingMap[channel as Channel] = { }\n                        }\n                    }\n                }\n            }\n        },\n        batchDeleteConceptItemByID: (state, action: PayloadAction<string[]>) => {\n            let allCharts = dfSelectors.getAllCharts(state);\n            for (let conceptID of action.payload) {\n                // remove concepts from encoding maps\n                if (allCharts.some(chart => chart.saved \n                    && Object.entries(chart.encodingMap).some(([channel, encoding]) => encoding.fieldID && conceptID == encoding.fieldID))) {\n                    console.log(\"cannot delete!\")\n                } else {\n                    state.conceptShelfItems = state.conceptShelfItems.filter(field => field.id != conceptID);\n                    for (let chart of allCharts)  {\n                        for (let [channel, encoding] of Object.entries(chart.encodingMap)) {\n                            if (encoding.fieldID && conceptID == encoding.fieldID) {\n                                // clear the encoding\n                                chart.encodingMap[channel as Channel] = { }\n                            }\n                        }\n                    }\n                }\n            }\n        },\n        insertDerivedTables: (state, action: PayloadAction<DictTable>) => {\n            state.tables = [...state.tables, action.payload];\n        },\n        overrideDerivedTables: (state, action: PayloadAction<DictTable>) => {\n            let table = action.payload;\n            \n            // Clean up old virtual table from workspace since it's being replaced\n            let oldTable = state.tables.find(t => t.id == table.id);\n            if (oldTable) {\n                cleanupVirtualTablesFromWorkspace([oldTable]);\n            }\n            \n            state.tables = [...state.tables.filter(t => t.id != table.id), table];\n        },\n        deleteDerivedTableById: (state, action: PayloadAction<string>) => {\n            // delete a synthesis output based on index\n            let tableId = action.payload;\n            \n            // Clean up virtual table from workspace before removing from state\n            let tableToDelete = state.tables.find(t => t.derive && t.id == tableId);\n            if (tableToDelete) {\n                cleanupVirtualTablesFromWorkspace([tableToDelete]);\n            }\n            \n            state.tables = state.tables.filter(t => !(t.derive && t.id == tableId));\n        },\n        clearUnReferencedTables: (state) => {\n            // remove all tables that are not referred\n            let allCharts = dfSelectors.getAllCharts(state);\n            let referredTableId = allCharts.map(chart => getDataTable(chart, state.tables, allCharts, state.conceptShelfItems))\n                .filter(t => t != undefined).map(t => t.id);\n            let tablesToRemove = state.tables.filter(t => t.derive && !referredTableId.some(tableId => tableId == t.id));\n            \n            // Clean up virtual tables from workspace\n            cleanupVirtualTablesFromWorkspace(tablesToRemove);\n            \n            state.tables = state.tables.filter(t => !tablesToRemove.some(tr => tr.id == t.id));\n        },\n        clearUnReferencedCustomConcepts: (state) => {\n            let fieldNamesFromTables = state.tables.map(t => t.names).flat();\n            let fieldIdsReferredByCharts = dfSelectors.getAllCharts(state).map(c => Object.values(c.encodingMap).map(enc => enc.fieldID).filter(fid => fid != undefined) as string[]).flat();\n\n            state.conceptShelfItems = state.conceptShelfItems.filter(field => !(field.source == \"custom\" \n                && !(fieldNamesFromTables.includes(field.name) || fieldIdsReferredByCharts.includes(field.id))))\n        },\n        addMessages: (state, action: PayloadAction<Message>) => {\n            state.messages = [...state.messages, action.payload];\n        },\n        setDisplayedMessageIndex: (state, action: PayloadAction<number>) => {\n            state.displayedMessageIdx = action.payload\n        },\n        setFocused: (state, action: PayloadAction<FocusedId>) => {\n            state.focusedId = action.payload;\n\n            if (action.payload?.type === 'chart' && state.viewMode == 'report') {\n                state.viewMode = 'editor';\n            }\n        },\n        setFocusedDataCleanBlockId: (state, action: PayloadAction<{blockId: string, itemId: number} | undefined>) => {\n            state.focusedDataCleanBlockId = action.payload;\n        },\n        changeChartRunningStatus: (state, action: PayloadAction<{chartId: string, status: boolean}>) => {\n            if (action.payload.status) {\n                state.chartSynthesisInProgress = [...new Set([...state.chartSynthesisInProgress, action.payload.chartId])]\n            } else {\n                state.chartSynthesisInProgress = state.chartSynthesisInProgress.filter(s => s != action.payload.chartId);\n            }\n        },\n        setIdentity: (state, action: PayloadAction<Identity>) => {\n            state.identity = action.payload;\n        },\n        updateDataLoaderConnectParams: (state, action: PayloadAction<{dataLoaderType: string, params: Record<string, string>}>) => {\n            let dataLoaderType = action.payload.dataLoaderType;\n            let params = action.payload.params;\n            state.dataLoaderConnectParams[dataLoaderType] = params;\n        },\n        updateDataLoaderConnectParam: (state, action: PayloadAction<{dataLoaderType: string, paramName: string, paramValue: string}>) => {\n            let dataLoaderType = action.payload.dataLoaderType;\n            if (!state.dataLoaderConnectParams[dataLoaderType]) {\n                state.dataLoaderConnectParams[dataLoaderType] = {};\n            }\n            let paramName = action.payload.paramName;\n            let paramValue = action.payload.paramValue;\n            state.dataLoaderConnectParams[dataLoaderType][paramName] = paramValue;\n        },\n        deleteDataLoaderConnectParams: (state, action: PayloadAction<string>) => {\n            let dataLoaderType = action.payload;\n            delete state.dataLoaderConnectParams[dataLoaderType];\n        },\n        clearMessages: (state) => {\n            state.messages = [];\n        },\n        // Data cleaning dialog actions\n        addDataCleanBlock: (state, action: PayloadAction<DataCleanBlock>) => {\n            state.dataCleanBlocks = [...state.dataCleanBlocks, action.payload];\n        },\n        removeDataCleanBlocks: (state, action: PayloadAction<{blockIds: string[]}>) => {\n            state.dataCleanBlocks = state.dataCleanBlocks.filter(block => !action.payload.blockIds.includes(block.id));\n        },\n        resetDataCleanBlocks: (state) => {\n            state.dataCleanBlocks = [];\n        },\n        updateLastDataCleanBlock: (state, action: PayloadAction<Partial<DataCleanBlock>>) => {\n            if (state.dataCleanBlocks.length > 0) {\n                const lastIndex = state.dataCleanBlocks.length - 1;\n                state.dataCleanBlocks[lastIndex] = { \n                    ...state.dataCleanBlocks[lastIndex], \n                    ...action.payload \n                };\n            }\n        },\n        setCleanInProgress: (state, action: PayloadAction<boolean>) => {\n            state.cleanInProgress = action.payload;\n        },\n        // Generated reports actions\n        saveGeneratedReport: (state, action: PayloadAction<GeneratedReport>) => {\n            const report = action.payload;\n            // Check if report with same ID already exists and update it, otherwise add new\n            const existingIndex = state.generatedReports.findIndex(r => r.id === report.id);\n            if (existingIndex >= 0) {\n                state.generatedReports[existingIndex] = report;\n            } else {\n                state.generatedReports.unshift(report); // Add to beginning of array\n            }\n            // Redux Persist will handle persistence automatically\n        },\n        deleteGeneratedReport: (state, action: PayloadAction<string>) => {\n            const reportId = action.payload;\n            state.generatedReports = state.generatedReports.filter(r => r.id !== reportId);\n            // Redux Persist will handle persistence automatically\n        },\n        clearGeneratedReports: (state) => {\n            state.generatedReports = [];\n            // Redux Persist will handle persistence automatically\n        }\n    },\n    extraReducers: (builder) => {\n        builder\n        .addCase(fetchFieldSemanticType.fulfilled, (state, action) => {\n            let data = action.payload;\n            let tableId = action.meta.arg.id;\n            let table = state.tables.find(t => t.id == tableId) as DictTable;\n\n            if (data[\"status\"] == \"ok\" && data[\"result\"].length > 0) {\n                let typeMap = data['result'][0]['fields'];\n\n                for (let name of table.names) {\n                    table.metadata[name] = { \n                        type: typeMap[name]['type'] as Type, \n                        semanticType: typeMap[name]['semantic_type'], \n                        levels: typeMap[name]['sort_order'] || undefined,\n                        intrinsicDomain: typeMap[name]['intrinsic_domain'] || undefined,\n                        unit: typeMap[name]['unit'] || undefined,\n                    };\n                }\n\n                if (data[\"result\"][0][\"suggested_table_name\"]) {\n                    // avoid duplicate display ids\n                    let existingDisplayIds = state.tables.filter(t => t.id != tableId).map(t => t.displayId);\n                    let suffix = \"\";\n                    let displayId = `${data[\"result\"][0][\"suggested_table_name\"] as string}${suffix}`;\n                    let suffixId = 1;\n                    while (existingDisplayIds.includes(displayId)) {\n                        displayId = `${data[\"result\"][0][\"suggested_table_name\"] as string}${suffixId}`;\n                        suffixId++;\n                        suffix = `-${suffixId}`;\n                    }\n                    table.displayId = displayId;\n                }\n\n                // Store data summary as attached metadata if not already set (e.g., from extraction context)\n                let dataSummary = data[\"result\"][0][\"data_summary\"] || data[\"result\"][0][\"data summary\"];\n                if (dataSummary && !table.attachedMetadata) {\n                    table.attachedMetadata = dataSummary;\n                }\n            }\n        })\n        .addCase(fetchAvailableModels.fulfilled, (state, action) => {\n            let defaultModels = action.payload;\n\n            state.models = [\n                ...defaultModels, \n                ...state.models.filter(e => !defaultModels.some((m: ModelConfig) => \n                    m.endpoint === e.endpoint && m.model === e.model && \n                    m.api_base === e.api_base && m.api_version === e.api_version\n                ))\n            ];\n            \n            state.testedModels = [ \n                ...defaultModels.map((m: ModelConfig) => {return {id: m.id, status: 'ok'}}) ,\n                ...state.testedModels.filter(t => !defaultModels.map((m: ModelConfig) => m.id).includes(t.id))\n            ]\n\n            if (defaultModels.length > 0 && state.selectedModelId == undefined) {\n                state.selectedModelId = defaultModels[0].id;\n            }\n\n            // console.log(\"load model complete\");\n            // console.log(\"state.models\", state.models);\n        })\n        .addCase(fetchCodeExpl.fulfilled, (state, action) => {\n            let codeExplResponse = action.payload;\n            let derivedTableId = action.meta.arg.id;\n            let derivedTable = state.tables.find(t => t.id == derivedTableId)\n            if (derivedTable?.derive) {\n                // The response is now an object with code and concepts\n                derivedTable.derive.explanation = codeExplResponse;\n            }\n            console.log(\"fetched codeExpl\");\n            console.log(action.payload);\n        })\n        .addCase(fetchChartInsight.pending, (state, action) => {\n            let chartId = action.meta.arg.chartId;\n            if (!state.chartInsightInProgress.includes(chartId)) {\n                state.chartInsightInProgress.push(chartId);\n            }\n        })\n        .addCase(fetchChartInsight.fulfilled, (state, action) => {\n            let { chartId, insightKey, title, takeaways } = action.payload;\n            let chart = dfSelectors.getAllCharts(state).find(c => c.id === chartId);\n            if (chart && (title || (takeaways && takeaways.length > 0))) {\n                chart.insight = { title, takeaways: takeaways || [], key: insightKey };\n            }\n            state.chartInsightInProgress = state.chartInsightInProgress.filter(id => id !== chartId);\n            console.log(\"fetched chart insight\", action.payload);\n        })\n        .addCase(fetchChartInsight.rejected, (state, action) => {\n            let chartId = action.meta.arg.chartId;\n            state.chartInsightInProgress = state.chartInsightInProgress.filter(id => id !== chartId);\n            console.error(\"chart insight failed\", action.error);\n        })\n    },\n})\n\n// ─── Memoized granular selectors ─────────────────────────────────────────────\n// These avoid re-renders in components that don't care about row data changes.\n\n/** Returns a stable array of table IDs. Only changes when tables are added/removed/reordered. */\nexport const selectTableIds = createSelector(\n    [(state: DataFormulatorState) => state.tables],\n    (tables) => tables.map(t => t.id),\n    {\n        memoizeOptions: {\n            resultEqualityCheck: (prev: string[], next: string[]) => {\n                if (prev.length !== next.length) return false;\n                for (let i = 0; i < prev.length; i++) {\n                    if (prev[i] !== next[i]) return false;\n                }\n                return true;\n            }\n        }\n    }\n);\n\n/**\n * Returns a stable \"refresh config\" fingerprint for auto-refresh timer management.\n * Only changes when a table's autoRefresh/refreshIntervalSeconds/source.type changes,\n * or when tables are added/removed — NOT when rows are updated.\n */\nexport const selectRefreshConfigs = createSelector(\n    [(state: DataFormulatorState) => state.tables],\n    (tables) => tables.map(t => ({\n        id: t.id,\n        autoRefresh: t.source?.autoRefresh ?? false,\n        refreshIntervalSeconds: t.source?.refreshIntervalSeconds,\n        sourceType: t.source?.type,\n        canRefresh: t.source?.canRefresh ?? false,\n        url: t.source?.url,\n        hasVirtual: !!t.virtual?.tableId,\n        hasDerive: !!t.derive,\n    })),\n    {\n        memoizeOptions: {\n            resultEqualityCheck: (prev: any[], next: any[]) => {\n                if (prev.length !== next.length) return false;\n                for (let i = 0; i < prev.length; i++) {\n                    const a = prev[i], b = next[i];\n                    if (a.id !== b.id || a.autoRefresh !== b.autoRefresh ||\n                        a.refreshIntervalSeconds !== b.refreshIntervalSeconds ||\n                        a.sourceType !== b.sourceType || a.canRefresh !== b.canRefresh ||\n                        a.url !== b.url || a.hasVirtual !== b.hasVirtual ||\n                        a.hasDerive !== b.hasDerive) return false;\n                }\n                return true;\n            }\n        }\n    }\n);\n\n/**\n * Extracts trigger charts from tables. Uses a stable serialization key so the\n * output array only changes when trigger charts are actually added/removed/modified\n * — not when table rows change.\n */\nconst selectTriggerCharts = createSelector(\n    [(state: DataFormulatorState) => state.tables],\n    (tables) => {\n        return tables\n            .filter(t => t.derive?.trigger?.chart)\n            .map(t => t.derive?.trigger?.chart) as Chart[];\n    },\n    {\n        memoizeOptions: {\n            // Use a result equality check so row-only changes don't produce a new array\n            // if trigger charts themselves haven't changed.\n            resultEqualityCheck: (prev: Chart[], next: Chart[]) => {\n                if (prev.length !== next.length) return false;\n                for (let i = 0; i < prev.length; i++) {\n                    if (prev[i] !== next[i]) return false;\n                }\n                return true;\n            }\n        }\n    }\n);\n\nexport const dfSelectors = {\n    getActiveModel: (state: DataFormulatorState) : ModelConfig => {\n        return state.models.find(m => m.id == state.selectedModelId) || state.models[0];\n    },\n    getEffectiveTableId: (state: DataFormulatorState): string | undefined => {\n        if (!state.focusedId) return undefined;\n        if (state.focusedId.type === 'table') return state.focusedId.tableId;\n        // type === 'chart': derive table from the chart's tableRef\n        let allCharts = dfSelectors.getAllCharts(state);\n        let chart = allCharts.find(c => c.id === (state.focusedId as { type: 'chart'; chartId: string }).chartId);\n        return chart?.tableRef;\n    },\n    getFocusedChartId: (state: DataFormulatorState): string | undefined => {\n        return state.focusedId?.type === 'chart' ? state.focusedId.chartId : undefined;\n    },\n    getActiveBaseTableIds: (state: DataFormulatorState) => {\n        let effectiveTableId = dfSelectors.getEffectiveTableId(state);\n        let tables = state.tables;\n        let focusedTable = tables.find(t => t.id == effectiveTableId);\n        let sourceTables = focusedTable?.derive?.source || [focusedTable?.id];\n        return sourceTables;\n    },\n    \n    // Memoized chart selector that combines both sources.\n    // Decoupled from row-data changes via selectTriggerCharts.\n    getAllCharts: createSelector(\n        [(state: DataFormulatorState) => state.charts, \n         selectTriggerCharts],\n        (userCharts, triggerCharts) => {\n            return [...userCharts, ...triggerCharts];\n        }\n    ),\n\n    replaceChart: (state: DataFormulatorState, chart: Chart) => {\n        if (state.charts.find(c => c.id == chart.id)) {\n            // chart is from charts\n            state.charts = state.charts.map(c => c.id == chart.id ? chart : c);\n        } else {\n            // chart is from tables\n            let table = state.tables.find(t => t.derive?.trigger?.chart?.id == chart.id) as DictTable;\n            if (table.derive?.trigger) {\n                table.derive = { ...table.derive, trigger: { ...table.derive?.trigger, chart: chart } };\n            }\n        }\n    },\n    // Generated reports selectors\n    getAllGeneratedReports: (state: DataFormulatorState) => state.generatedReports,\n    getReportById: (state: DataFormulatorState, reportId: string) => \n        state.generatedReports.find(r => r.id === reportId),\n}\n\n// derived field: extra all field items from the table\nexport const getDataFieldItems = (baseTable: DictTable): FieldItem[] => {\n\n    let dataFieldItems = baseTable.names.map((name) => {\n        const id = `original--${baseTable.id}--${name}`;\n        return { id, name, source: \"original\", tableRef: baseTable.id } as FieldItem;\n    }) || [];\n\n    return dataFieldItems;\n}\n\n// Action creators are generated for each case reducer function\nexport const dfActions = dataFormulatorSlice.actions;\nexport const dataFormulatorReducer = dataFormulatorSlice.reducer;"
  },
  {
    "path": "src/app/identity.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Identity management for Data Formulator\n * \n * This module provides a layered identity system:\n * 1. User identity (if logged in via auth provider) - highest priority\n * 2. Browser identity (localStorage-based UUID) - fallback for anonymous users\n * \n * Browser identity is shared across all tabs of the same origin via localStorage,\n * ensuring consistent state across tabs without requiring login.\n */\n\nconst BROWSER_ID_KEY = 'df_browser_id';\n\nexport type IdentityType = 'user' | 'browser';\n\nexport interface Identity {\n    type: IdentityType;\n    id: string;\n}\n\nexport interface UserInfo {\n    name: string;\n    userId: string;\n}\n\n/**\n * Generates a UUID v4\n * Uses crypto.randomUUID if available, falls back to manual generation\n */\nfunction generateUUID(): string {\n    if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n        return crypto.randomUUID();\n    }\n    // Fallback for older browsers\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n        const r = Math.random() * 16 | 0;\n        const v = c === 'x' ? r : (r & 0x3 | 0x8);\n        return v.toString(16);\n    });\n}\n\n/**\n * Gets or creates a persistent browser identity stored in localStorage.\n * This ID is shared across all tabs of the same origin.\n * \n * @returns The browser identity UUID\n */\nexport function getBrowserId(): string {\n    try {\n        let browserId = localStorage.getItem(BROWSER_ID_KEY);\n        if (!browserId) {\n            browserId = generateUUID();\n            localStorage.setItem(BROWSER_ID_KEY, browserId);\n        }\n        return browserId;\n    } catch (e) {\n        // localStorage might be unavailable (e.g., private browsing in some browsers)\n        // Generate a session-only ID as fallback\n        console.warn('localStorage unavailable, using session-only browser ID');\n        return generateUUID();\n    }\n}\n\n/**\n * Clears the browser identity from localStorage.\n * Useful for testing or when user wants to reset their identity.\n */\nexport function clearBrowserId(): void {\n    try {\n        localStorage.removeItem(BROWSER_ID_KEY);\n    } catch (e) {\n        console.warn('Failed to clear browser ID from localStorage');\n    }\n}\n\n/**\n * Resolves the current identity based on available authentication.\n * Priority: User identity (if logged in) > Browser identity\n * \n * @param userInfo - Optional user info if user is authenticated\n * @returns The resolved identity\n */\nexport function resolveIdentity(userInfo?: UserInfo | null): Identity {\n    if (userInfo?.userId) {\n        return {\n            type: 'user',\n            id: userInfo.userId\n        };\n    }\n    return {\n        type: 'browser',\n        id: getBrowserId()\n    };\n}\n\n/**\n * Creates the identity key used for state storage on the backend.\n * Format: \"{type}:{id}\" (e.g., \"user:alice@example.com\" or \"browser:550e8400-...\")\n * \n * @param identity - The identity object\n * @returns A string key suitable for state storage\n */\nexport function getIdentityKey(identity: Identity): string {\n    return `${identity.type}:${identity.id}`;\n}\n"
  },
  {
    "path": "src/app/store.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { configureStore } from '@reduxjs/toolkit'\nimport { dataFormulatorReducer } from './dfSlice';\n\nimport { persistReducer, persistStore } from 'redux-persist'\nimport localforage from 'localforage';\n\nexport type AppDispatch = typeof store.dispatch\n\nconst persistConfig = {\n    key: 'root',\n    //storage,\n    storage: localforage,\n    blacklist: ['serverConfig'],  // Always fetch fresh from /api/app-config\n}\n\nconst persistedReducer = persistReducer(persistConfig, dataFormulatorReducer)\n\nlet store = configureStore({\n    reducer: persistedReducer,\n    middleware: (getDefaultMiddleware) =>\n        getDefaultMiddleware({\n            serializableCheck: false,\n    }),\n})\n\nexport const persistor = persistStore(store);\n\nexport default store;\n\n// Export store instance for use in utilities\nexport { store };\n"
  },
  {
    "path": "src/app/tableThunks.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Unified table loading thunk: loadTable\n * \n * All data loaders (file, paste, URL, example, database, extract) should use\n * this thunk to load tables into the application. It handles:\n * - Optionally storing data on the server (workspace) via API calls\n * - Applying row limits when data stays local (storeOnServer = false)\n * - Building DictTable with appropriate virtual/source fields\n * - Adding the table to Redux state + fetching semantic types\n */\n\nimport { createAsyncThunk } from '@reduxjs/toolkit';\nimport { DataSourceConfig, DictTable } from '../components/ComponentType';\nimport { Type } from '../data/types';\nimport { inferTypeFromValueArray } from '../data/utils';\nimport { fetchWithIdentity, getUrls, computeContentHash } from './utils';\nimport { DataFormulatorState, dfActions, fetchFieldSemanticType } from './dfSlice';\n\nexport interface LoadTablePayload {\n    // The table data (already parsed into rows/names/metadata on the frontend)\n    table: DictTable;\n    \n    // Whether to store on the server workspace (true) or keep local-only (false)\n    storeOnServer: boolean;\n    \n    // For file uploads to server: the raw File object\n    file?: File;\n    \n    // For database sources loaded via external data loader:\n    dataLoaderType?: string;\n    dataLoaderParams?: Record<string, string>;\n    sourceTableName?: string;\n    importOptions?: {\n        rowLimit?: number;\n        sortColumns?: string[];\n        sortOrder?: 'asc' | 'desc';\n    };\n}\n\nexport interface LoadTableResult {\n    table: DictTable;\n    truncated?: boolean;      // whether rows were truncated due to frontendRowLimit\n    originalRowCount?: number; // original count before truncation\n    duplicate?: boolean;      // whether the table was already loaded (skipped)\n}\n\n/**\n * Unified thunk to load a table from any source.\n * \n * Routes:\n * - storeOnServer=true + file/paste/url/example/extract: POST to /api/tables/create-table\n * - storeOnServer=true + database: use existing /api/tables/data-loader/ingest-data \n *   (caller should have already ingested; table comes from workspace list)\n * - storeOnServer=false + database: call /api/tables/data-loader/fetch-data (new endpoint)\n * - storeOnServer=false + other: keep data local, apply frontendRowLimit\n * \n * In all cases: adds table to Redux state + fetches semantic types\n */\nexport const loadTable = createAsyncThunk<\n    LoadTableResult,\n    LoadTablePayload,\n    { state: DataFormulatorState }\n>(\n    'dataFormulator/loadTable',\n    async (payload, { dispatch, getState }) => {\n        const { table, storeOnServer, file, dataLoaderType, dataLoaderParams, sourceTableName, importOptions } = payload;\n        const state = getState();\n        const frontendRowLimit = state.config?.frontendRowLimit ?? 50000;\n        const existingTables = state.tables;\n\n        // === DUPLICATE CHECK ===\n        // Check if a table with the same id already exists locally\n        const existingById = existingTables.find(t => t.id === table.id);\n        if (existingById) {\n            // Table with same id already loaded — just focus it\n            dispatch(dfActions.setFocused({ type: 'table', tableId: existingById.id }));\n            return { table: existingById, duplicate: true };\n        }\n\n        // Check by content hash — avoid loading identical data under a different name\n        const incomingHash = table.contentHash || computeContentHash(table.rows, table.names);\n        const existingByContent = existingTables.find(t => {\n            if (!t.contentHash) return false;\n            return t.contentHash === incomingHash;\n        });\n        if (existingByContent) {\n            dispatch(dfActions.setFocused({ type: 'table', tableId: existingByContent.id }));\n            dispatch(dfActions.addMessages({\n                timestamp: Date.now(),\n                type: 'warning',\n                component: 'data loader',\n                value: `This data is identical to the already-loaded table \"${existingByContent.displayId}\". Skipped duplicate load.`,\n            }));\n            return { table: existingByContent, duplicate: true };\n        }\n\n        // For workspace / virtual tables loaded from the DB manager, also check if the\n        // same workspace table (by virtual tableId) is already in the frontend.\n        if (table.virtual) {\n            const existingByVirtual = existingTables.find(t => t.virtual?.tableId === table.virtual?.tableId);\n            if (existingByVirtual) {\n                dispatch(dfActions.setFocused({ type: 'table', tableId: existingByVirtual.id }));\n                return { table: existingByVirtual, duplicate: true };\n            }\n        }\n        \n        let finalTable: DictTable = { ...table };\n        let truncated = false;\n        let originalRowCount = 0;\n\n        const sourceType = table.source?.type;\n\n        if (storeOnServer) {\n            // === STORE ON SERVER PATH ===\n            if (sourceType === 'database' && dataLoaderType && sourceTableName) {\n                // Database source: ingest to workspace via data loader\n                try {\n                    const response = await fetchWithIdentity(getUrls().DATA_LOADER_INGEST_DATA, {\n                        method: 'POST',\n                        headers: { 'Content-Type': 'application/json' },\n                        body: JSON.stringify({\n                            data_loader_type: dataLoaderType,\n                            data_loader_params: dataLoaderParams,\n                            table_name: sourceTableName,\n                            import_options: importOptions || {},\n                        }),\n                    });\n                    const data = await response.json();\n                    if (data.status === 'success') {\n                        // Now fetch the table info from workspace to get sample rows\n                        const listResp = await fetchWithIdentity(getUrls().LIST_TABLES, { method: 'GET' });\n                        const listData = await listResp.json();\n                        if (listData.status === 'success') {\n                            const wsTable = listData.tables.find((t: any) => t.name === data.table_name);\n                            if (wsTable) {\n                                finalTable = buildDictTableFromWorkspace(wsTable, table.source);\n                            }\n                        }\n                    } else {\n                        throw new Error(data.message || 'Failed to ingest data');\n                    }\n                } catch (err) {\n                    console.error('Failed to ingest database table to workspace:', err);\n                    throw err;\n                }\n            } else if (file) {\n                // File upload to workspace\n                try {\n                    const formData = new FormData();\n                    formData.append('file', file);\n                    formData.append('table_name', table.id);\n                    \n                    const response = await fetchWithIdentity(getUrls().CREATE_TABLE, {\n                        method: 'POST',\n                        body: formData,\n                    });\n                    const data = await response.json();\n                    if (data.status === 'success') {\n                        // Fetch back from workspace to get proper virtual info\n                        const listResp = await fetchWithIdentity(getUrls().LIST_TABLES, { method: 'GET' });\n                        const listData = await listResp.json();\n                        if (listData.status === 'success') {\n                            const wsTable = listData.tables.find((t: any) => t.name === data.table_name);\n                            if (wsTable) {\n                                finalTable = buildDictTableFromWorkspace(wsTable, table.source);\n                            }\n                        }\n                    } else {\n                        throw new Error(data.message || 'Failed to upload file');\n                    }\n                } catch (err) {\n                    console.error('Failed to upload file to workspace:', err);\n                    throw err;\n                }\n            } else if (table.virtual) {\n                // Table already exists in workspace (e.g., loaded from DB table manager)\n                finalTable = { ...table };\n            } else {\n                // Other sources (paste/url/example/extract): upload raw data to workspace\n                try {\n                    const formData = new FormData();\n                    const jsonBlob = new Blob([JSON.stringify(table.rows)], { type: 'application/json' });\n                    formData.append('raw_data', jsonBlob, 'data.json');\n                    formData.append('table_name', table.id);\n                    \n                    const response = await fetchWithIdentity(getUrls().CREATE_TABLE, {\n                        method: 'POST',\n                        body: formData,\n                    });\n                    const data = await response.json();\n                    if (data.status === 'success') {\n                        // Set virtual info from the response — virtual indicates server storage\n                        finalTable = {\n                            ...table,\n                            virtual: {\n                                tableId: data.table_name,\n                                rowCount: data.row_count,\n                            },\n                            id: data.table_name, // use the sanitized name from server\n                            displayId: table.displayId || data.table_name,\n                        };\n                    } else {\n                        throw new Error(data.message || 'Failed to save data to workspace');\n                    }\n                } catch (err) {\n                    console.error('Failed to save data to workspace:', err);\n                    throw err;\n                }\n            }\n        } else {\n            // === LOCAL ONLY PATH (storeOnServer = false) ===\n            if (sourceType === 'database' && dataLoaderType && dataLoaderParams && sourceTableName) {\n                // Database source: fetch data without saving to workspace\n                try {\n                    const response = await fetchWithIdentity(getUrls().DATA_LOADER_FETCH_DATA, {\n                        method: 'POST',\n                        headers: { 'Content-Type': 'application/json' },\n                        body: JSON.stringify({\n                            data_loader_type: dataLoaderType,\n                            data_loader_params: dataLoaderParams,\n                            table_name: sourceTableName,\n                            row_limit: frontendRowLimit,\n                            sort_columns: importOptions?.sortColumns,\n                            sort_order: importOptions?.sortOrder,\n                        }),\n                    });\n                    const data = await response.json();\n                    if (data.status === 'success') {\n                        const rows = data.rows;\n                        const names = rows.length > 0 ? Object.keys(rows[0]) : [];\n                        const totalCount: number = data.total_row_count ?? rows.length;\n                        originalRowCount = totalCount;\n                        truncated = rows.length < totalCount;\n                        \n                        finalTable = {\n                            ...table,\n                            id: table.id,\n                            displayId: table.displayId || table.id,\n                            names,\n                            rows,\n                            metadata: names.reduce((acc: Record<string, any>, name: string) => ({\n                                ...acc,\n                                [name]: {\n                                    type: inferTypeFromValueArray(rows.map((r: any) => r[name])),\n                                    semanticType: \"\",\n                                    levels: []\n                                }\n                            }), {}),\n                            // No virtual field = local-only (not stored on server)\n                            anchored: true,\n                        };\n                    } else {\n                        throw new Error(data.message || 'Failed to fetch data from external source');\n                    }\n                } catch (err) {\n                    console.error('Failed to fetch data from external source:', err);\n                    throw err;\n                }\n            } else {\n                // Other sources: apply row limit\n                originalRowCount = table.rows.length;\n                if (table.rows.length > frontendRowLimit) {\n                    truncated = true;\n                    finalTable = {\n                        ...table,\n                        rows: table.rows.slice(0, frontendRowLimit),\n                    };\n                } else {\n                    finalTable = { ...table };\n                }\n            }\n        }\n\n        // Dispatch the table into Redux state\n        dispatch(dfActions.addTableToStore(finalTable));\n        dispatch(fetchFieldSemanticType(finalTable));\n\n        // Notify user about truncation\n        if (truncated && originalRowCount) {\n            const diskDisabled = state.serverConfig?.DISABLE_DATABASE;\n            const workspaceBackend = state.serverConfig?.WORKSPACE_BACKEND;\n            const storageLabel = workspaceBackend === 'azure_blob' ? 'Azure' : 'Disk';\n            const baseMsg = `Table \"${finalTable.displayId || finalTable.id}\" was truncated from ${originalRowCount.toLocaleString()} to ${frontendRowLimit.toLocaleString()} rows (browser limit).`;\n            const installHint = diskDisabled\n                ? ` To load the full dataset, install Data Formulator locally and use disk storage.`\n                : ` To load the full dataset, switch to \"${storageLabel}\" storage mode.`;\n            dispatch(dfActions.addMessages({\n                timestamp: Date.now(),\n                type: 'warning',\n                component: 'data loader',\n                value: baseMsg + installHint,\n            }));\n        }\n\n        return { table: finalTable, truncated, originalRowCount, duplicate: false };\n    }\n);\n\n/**\n * Helper: Build a DictTable from a workspace table listing (as returned by /api/tables/list-tables).\n */\nfunction buildDictTableFromWorkspace(\n    wsTable: any,\n    source: DataSourceConfig | undefined,\n): DictTable {\n    const convertSqlTypeToAppType = (sqlType: string): Type => {\n        sqlType = sqlType.toUpperCase();\n        if (sqlType.includes('INT') || sqlType === 'BIGINT' || sqlType === 'SMALLINT' || sqlType === 'TINYINT') {\n            return Type.Integer;\n        } else if (sqlType.includes('FLOAT') || sqlType.includes('DOUBLE') || sqlType.includes('DECIMAL') || sqlType.includes('NUMERIC') || sqlType.includes('REAL')) {\n            return Type.Number;\n        } else if (sqlType.includes('BOOL')) {\n            return Type.Boolean;\n        } else if (sqlType.includes('DATE') || sqlType.includes('TIME') || sqlType.includes('TIMESTAMP')) {\n            return Type.Date;\n        } else {\n            return Type.String;\n        }\n    };\n\n    // Build source config for database tables\n    const sourceMeta = wsTable.source_metadata;\n    const sourceConfig: DataSourceConfig = source || {\n        type: 'database',\n        databaseTable: wsTable.name,\n        canRefresh: sourceMeta != null,\n        lastRefreshed: Date.now(),\n    };\n\n    return {\n        id: wsTable.name,\n        displayId: wsTable.name,\n        names: wsTable.columns.map((col: any) => col.name),\n        metadata: wsTable.columns.reduce((acc: Record<string, any>, col: any) => ({\n            ...acc,\n            [col.name]: {\n                type: convertSqlTypeToAppType(col.type),\n                semanticType: \"\",\n                levels: []\n            }\n        }), {}),\n        rows: wsTable.sample_rows,\n        virtual: {\n            tableId: wsTable.name,\n            rowCount: wsTable.row_count,\n        },\n        anchored: true,\n        createdBy: 'user',\n        attachedMetadata: '',\n        source: sourceConfig,\n    };\n}\n\n/**\n * Check if any ancestor table of a given table is local-only (no virtual field).\n * A table without `virtual` has all its data in the browser only, not on the server.\n * Used by derivation code to decide whether derived results should also stay local.\n */\nexport function hasLocalOnlyAncestor(tableId: string, tables: DictTable[]): boolean {\n    const visited = new Set<string>();\n    \n    const check = (id: string): boolean => {\n        if (visited.has(id)) return false;\n        visited.add(id);\n        \n        const t = tables.find(tbl => tbl.id === id);\n        if (!t) return false;\n        // virtual field indicates data is stored on server; absence means local-only\n        if (!t.virtual && !t.derive) return true;\n        \n        if (t.derive?.source) {\n            for (const sourceId of t.derive.source) {\n                if (check(sourceId)) return true;\n            }\n        }\n        return false;\n    };\n    \n    return check(tableId);\n}\n"
  },
  {
    "path": "src/app/tokens.ts",
    "content": "// ════════════════════════════════════════════════════════════════════════\n// Design tokens — single source of truth for visual constants.\n//\n// Usage:\n//   import { borderColor, shadow, transition, radius, ComponentBorderStyle } from '../app/tokens';\n//   sx={{ ...ComponentBorderStyle, borderRadius: radius.md, transition: transition.fast }}\n//   sx={{ borderBottom: `1px solid ${borderColor.divider}`, boxShadow: shadow.sm }}\n// ════════════════════════════════════════════════════════════════════════\n\nimport type { SxProps } from '@mui/material';\n\n// ── Border colors ──────────────────────────────────────────────────────\n\nexport const borderColor = {\n    /** 0.12 — section dividers, table borders, tab underlines, sidebar edges\n     *  DataLoadingChat, ExplComponents, RefreshDataDialog, ReportView tables,\n     *  TableSelectionView, DataLoadingThread, DBTableManager */\n    divider: 'rgba(0, 0, 0, 0.12)',\n\n    /** 0.10 — inner components: cards, chips, inputs, thumbnails\n     *  DataThreadCards table card, EncodingShelfCard tab divider */\n    component: 'rgba(0, 0, 0, 0.10)',\n\n    /** 0.12 — outer containers: panels, dialogs, popovers, drop zones\n     *  DataThread popups, UnifiedDataUploadDialog, AgentRulesDialog */\n    view: 'rgba(0, 0, 0, 0.12)',\n} as const;\n\n// ── Composite border styles (spread into sx) ───────────────────────────\n\n/** Section divider border — tabs, sidebars, table wrappers */\nexport const DividerBorderStyle: SxProps = { border: `1px solid ${borderColor.divider}` };\n\n/** Inner component border — cards, chips, input fields */\nexport const ComponentBorderStyle: SxProps = { border: `1px solid ${borderColor.component}` };\n\n/** Outer container border — panels, dialogs, popovers */\nexport const ViewBorderStyle: SxProps = { border: `1px solid ${borderColor.view}` };\n\n// ── Box shadows ────────────────────────────────────────────────────────\n\nexport const shadow = {\n    /** Resting cards, chips\n     *  ExplComponents, DataLoadingThread, DataThreadCards */\n    sm: '0 1px 2px rgba(0,0,0,0.05)',\n\n    /** Hovered cards, table headers\n     *  DataThreadCards, SelectableDataGrid, DataLoadingThread hover */\n    md: '0 2px 4px rgba(0,0,0,0.08)',\n\n    /** Expanded items, hovered panels\n     *  ExplComponents hover, ReportView compose toolbar */\n    lg: '0 2px 8px rgba(0,0,0,0.12)',\n\n    /** Floating overlays, dialogs, snackbars\n     *  ReportView hover, DataFormulator overlay, MessageSnackbar */\n    xl: '0 4px 12px rgba(0,0,0,0.10)',\n} as const;\n\n// ── Transitions ────────────────────────────────────────────────────────\n\nexport const transition = {\n    /** Hover highlights, tab toggles, icon reactions\n     *  DataThread, EncodingShelfCard, DataThreadCards, ChartRecBox */\n    fast: 'all 0.1s linear',\n\n    /** Panel animations, hover effects, expand/collapse\n     *  ReportView, RefreshDataDialog, UnifiedDataUploadDialog, SelectableDataGrid */\n    normal: 'all 0.2s ease',\n\n    /** Drawer slides, focus rings, snackbar entrances\n     *  MessageSnackbar, DataLoadingChat, AgentRulesDialog */\n    slow: 'all 0.3s ease',\n} as const;\n\n// ── Border radius ──────────────────────────────────────────────────────\n// Values are MUI spacing units (1 unit = 4px via theme.spacing)\n\nexport const radius = {\n    /** Cards, chips, inputs, code blocks\n     *  UnifiedDataUploadDialog, AgentRulesDialog, ChatDialog, ExplComponents */\n    sm: 1,\n\n    /** Floating panels, dialogs, chat cards, table containers\n     *  DataThread popups, ChatDialog, About, DataLoadingChat, TableSelectionView */\n    md: 2,\n\n    /** Status indicators, model icons\n     *  ModelSelectionDialog status badges */\n    lg: 3,\n\n    /** Fully rounded pill shape — FABs, floating overlays\n     *  DataFormulator chart overlay */\n    pill: '16px',\n} as const;\n\n// ── Color palettes ─────────────────────────────────────────────────────\n// Each palette defines five color roles: primary, secondary, derived, custom, warning.\n// `main` is the prominent color; `bgcolor` is a light tint for backgrounds.\n\nexport interface AppPaletteEntry {\n    main: string;\n    bgcolor?: string;\n    textColor?: string;\n}\n\nexport interface AppPalette {\n    name: string;\n    primary: AppPaletteEntry;\n    secondary: AppPaletteEntry;\n    derived: AppPaletteEntry;\n    custom: AppPaletteEntry;\n    warning: AppPaletteEntry;\n}\n\nexport const palettes: Record<string, AppPalette> = {\n    /** Default Material UI inspired palette\n     *  Primary/Custom: split-complementary pair (blue 215° ↔ orange 25°) */\n    material: {\n        name: 'Material',\n        primary:   { main: '#1565c0' },   // H215 S83 L42 — blue\n        secondary: { main: '#7b1fa2' },   // purple\n        derived:   { main: '#f9a825' },   // yellow\n        custom:    { main: '#c75b1e' },    // H25 S83 L45 — warm orange (matched S/L)\n        warning:   { main: '#bf5600' },\n    },\n\n    /** Microsoft Fluent UI palette\n     *  Primary/Custom: split-complementary (blue 205° ↔ orange 18°) */\n    fluent: {\n        name: 'Fluent UI',\n        primary:   { main: '#0078d4' },   // H205 S100 L42 — Fluent blue\n        secondary: { main: '#8764b8' },   // Fluent purple\n        derived:   { main: '#ffb900' },   // Fluent gold\n        custom:    { main: '#c85a17' },    // H18 S85 L44 — warm burnt orange (matched L)\n        warning:   { main: '#a4262c' },   // Fluent red\n    },\n\n    /** Vivid Spectrum — high saturation, modern\n     *  Primary/Custom: split-complementary (blue 224° ↔ amber 38°) */\n    vivid: {\n        name: 'Vivid',\n        primary:   { main: '#2563eb' },   // H224 S84 L54\n        secondary: { main: '#7c3aed' },\n        custom:    { main: '#d97218' },    // H38 S84 L47 — vivid amber\n        derived:   { main: '#ea580c' },\n        warning:   { main: '#dc2626' },\n    },\n\n    /** Deep Jewel — rich, saturated jewel tones\n     *  Primary/Custom: split-complementary (blue 224° ↔ copper 24°) */\n    jewel: {\n        name: 'Jewel',\n        primary:   { main: '#1d4ed8' },   // H224 S80 L48\n        secondary: { main: '#6d28d9' },\n        derived:   { main: '#d97706' },\n        custom:    { main: '#b85a1a' },    // H24 S80 L41 — deep copper\n        warning:   { main: '#b91c1c' },\n    },\n\n    /** Electric Modern — punchy, high contrast\n     *  Primary/Custom: split-complementary (blue 220° ↔ tangerine 28°) */\n    electric: {\n        name: 'Electric',\n        primary:   { main: '#0066ff' },   // H220 S100 L50\n        secondary: { main: '#8b5cf6' },\n        derived:   { main: '#eab308' },\n        custom:    { main: '#e07020' },    // H28 S78 L50 — electric tangerine\n        warning:   { main: '#ef4444' },\n    },\n\n    /** Coastal — teal & coral, distinctive, less corporate\n     *  Primary/Custom: split-complementary (teal 190° ↔ coral 350°) */\n    coastal: {\n        name: 'Coastal',\n        primary:   { main: '#0891b2' },   // H190 S93 L37\n        custom:    { main: '#c03050' },    // H350 S75 L47 — coral rose\n        derived:   { main: '#ca8a04' },\n        secondary: { main: '#7c3aed' },\n        warning:   { main: '#dc2626' },\n    },\n\n    /** Microsoft Copilot — inspired by the Copilot gradient spectrum\n     *  Primary/Custom: analogous pair from the gradient (blue → purple) */\n    copilot: {\n        name: 'Copilot',\n        primary:   { main: '#0f6cbd', textColor: '#0e5ea3' },   // Fluent 2 blue — darker for text\n        secondary: { main: '#0e9a6c', textColor: '#087a55' },   // Copilot green — darker for text\n        derived:   { main: '#d946ef', textColor: '#a020c0' },   // Copilot magenta — darker for text\n        custom:    { main: '#7160e8', textColor: '#5a48c8' },    // Copilot purple — darker for text\n        warning:   { main: '#d13438' },   // Fluent 2 red\n    },\n\n    /** Evergreen — Shopify Polaris green, proven in data-heavy merchant dashboards\n     *  Primary/Custom: complement (green 162° ↔ terracotta 345°) */\n    evergreen: {\n        name: 'Evergreen',\n        primary:   { main: '#008060' },   // Shopify Polaris green — WCAG AA on white\n        secondary: { main: '#5c6ac4' },   // Polaris indigo\n        derived:   { main: '#b98900' },   // dark gold\n        custom:    { main: '#b4456e' },    // H345 S50 L49 — muted rose\n        warning:   { main: '#d72c0d' },   // Polaris critical red\n    },\n\n    /** Orchid — Figma purple, designed as accent-on-white in professional design tools\n     *  Primary/Custom: complement (purple 270° ↔ olive 90°) */\n    orchid: {\n        name: 'Orchid',\n        primary:   { main: '#9747ff', bgcolor: '#f3ecff', textColor: '#7030d4' },   // Figma purple — darkened for text\n        secondary: { main: '#1264a3' },   // strong blue\n        derived:   { main: '#e0a526', textColor: '#a87b10' },   // warm gold — darkened for text\n        custom:    { main: '#538a3a', bgcolor: '#ecf4e8', textColor: '#3d6e28' },    // leaf green — darkened for text\n        warning:   { main: '#cc3333' },\n    },\n\n    /** Mono — minimalist black & white, ink-on-paper\n     *  Achromatic palette with pure grayscale tones */\n    mono: {\n        name: 'Mono',\n        primary:   { main: '#1a1a1a', bgcolor: '#f0f0f0', textColor: '#1a1a1a' },   // near-black (same as main)\n        secondary: { main: '#555555', bgcolor: '#f2f2f2', textColor: '#3a3a3a' },   // darkened for readability\n        derived:   { main: '#777777', bgcolor: '#f5f5f5', textColor: '#4a4a4a' },   // darkened for readability\n        custom:    { main: '#444444', bgcolor: '#f0f0f0', textColor: '#333333' },   // darkened for readability\n        warning:   { main: '#8b2020' },   // muted dark red\n    },\n} as const;\n\n/** Default palette key (used when no user preference is stored). */\nexport const defaultPaletteKey: keyof typeof palettes = 'fluent';\n\n/** List of palette keys in display order */\nexport const paletteKeys = Object.keys(palettes) as (keyof typeof palettes)[];\n\n/** Background tint opacity — applied to `main` to produce `bgcolor`. */\nexport const bgAlpha = 0.1;\n"
  },
  {
    "path": "src/app/useDataRefresh.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { useEffect, useRef, useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { DataFormulatorState, dfActions, selectRefreshConfigs } from './dfSlice';\nimport { AppDispatch } from './store';\nimport { DictTable } from '../components/ComponentType';\nimport { createTableFromText } from '../data/utils';\nimport { fetchWithIdentity, getUrls, computeContentHash } from './utils';\n\ninterface RefreshResult {\n    tableId: string;\n    success: boolean;\n    message: string;\n    newRows?: any[];\n    contentHash?: string; // Hash from backend for database sources\n}\n\n/**\n * Custom hook that manages automatic data refresh for tables with streaming or database sources.\n * It sets up intervals for each table that has auto-refresh enabled.\n *\n * Performance: timers are driven by `selectRefreshConfigs` (which is stable when\n * only row data changes) instead of the full `state.tables` array.  A ref keeps\n * track of the latest tables snapshot so callbacks always have fresh data without\n * causing the effect to re-run.\n */\nexport function useDataRefresh() {\n    const dispatch = useDispatch<AppDispatch>();\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const refreshConfigs = useSelector(selectRefreshConfigs);\n    const timeoutRefs = useRef<Map<string, NodeJS.Timeout>>(new Map());\n    const refreshInProgressRef = useRef<Map<string, boolean>>(new Map());\n    const isActiveRef = useRef<Map<string, boolean>>(new Map());\n    const initializedTablesRef = useRef<Set<string>>(new Set());\n\n    // Keep a ref to the latest tables so callbacks can read fresh data\n    // without adding `tables` to useEffect/useCallback deps.\n    const tablesRef = useRef(tables);\n    tablesRef.current = tables;\n\n    /** Read latest table from store (avoids stale closure issues). */\n    const getLatestTable = useCallback((tableId: string): DictTable | undefined => {\n        return tablesRef.current.find(t => t.id === tableId);\n    }, []);\n\n    /**\n     * Fetches fresh data from a streaming URL\n     */\n    const fetchStreamData = useCallback(async (table: DictTable): Promise<RefreshResult> => {\n        const source = table.source;\n        if (!source?.url) {\n            return { tableId: table.id, success: false, message: 'No URL configured' };\n        }\n\n        try {\n            const response = await fetch(source.url);\n            if (!response.ok) {\n                throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n            }\n\n            const content = await response.text();\n            let newRows: any[] = [];\n\n            try {\n                const jsonContent = JSON.parse(content);\n                if (Array.isArray(jsonContent)) {\n                    newRows = jsonContent;\n                } else {\n                    throw new Error('JSON content must be an array');\n                }\n            } catch {\n                // Try parsing as CSV/TSV\n                const tempTable = createTableFromText('temp', content);\n                if (tempTable) {\n                    newRows = tempTable.rows;\n                } else {\n                    throw new Error('Unable to parse response as JSON or CSV/TSV');\n                }\n            }\n\n            return {\n                tableId: table.id,\n                success: true,\n                message: 'Data refreshed successfully',\n                newRows\n            };\n        } catch (error) {\n            return {\n                tableId: table.id,\n                success: false,\n                message: error instanceof Error ? error.message : 'Unknown error'\n            };\n        }\n    }, []);\n\n    /**\n     * Refreshes a virtual table from its original database source.\n     * Backend stores connection info and knows how to refresh - frontend just triggers it.\n     * Backend returns data_changed flag - if false, skip resampling to avoid unnecessary work.\n     * DuckDB views that depend on this table will auto-recalculate only if data changed.\n     */\n    const refreshDatabaseTable = useCallback(async (table: DictTable): Promise<RefreshResult> => {\n        if (!table.virtual?.tableId) {\n            return { tableId: table.id, success: false, message: 'Not a virtual table' };\n        }\n\n        const tableName = table.virtual.tableId;\n\n        try {\n            // Tell backend to refresh the table - it has the connection info stored\n            console.log(`[DataRefresh] Requesting backend to refresh \"${tableName}\" from external source...`);\n            \n            const refreshResponse = await fetchWithIdentity(getUrls().DATA_LOADER_REFRESH_TABLE, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: JSON.stringify({ table_name: tableName })\n            });\n\n            const refreshData = await refreshResponse.json();\n            \n            if (refreshData.status !== 'success') {\n                // Backend doesn't have connection info for this table\n                console.log(`[DataRefresh] Cannot refresh \"${tableName}\": ${refreshData.message}`);\n                return {\n                    tableId: table.id,\n                    success: false,\n                    message: refreshData.message || 'No connection info stored for this table'\n                };\n            }\n            \n            console.log(`[DataRefresh] Backend refreshed \"${tableName}\" (${refreshData.row_count} rows, data_changed=${refreshData.data_changed}, hash=${refreshData.content_hash?.slice(0, 8)})`);\n\n            // If data hasn't changed, skip resampling - no need to update frontend\n            if (!refreshData.data_changed) {\n                console.log(`[DataRefresh] Data unchanged for \"${tableName}\", skipping resample`);\n                return {\n                    tableId: table.id,\n                    success: true,\n                    message: `Data unchanged (${refreshData.row_count} rows)`,\n                    // Don't include newRows - signals no update needed\n                };\n            }\n\n            // Data changed - get a fresh sample for the frontend\n            const sampleResponse = await fetchWithIdentity(getUrls().SAMPLE_TABLE, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: JSON.stringify({ \n                    table: tableName,\n                    size: Math.min(table.rows.length, 10000)\n                })\n            });\n\n            const sampleData = await sampleResponse.json();\n            if (sampleData.status === 'success') {\n                return {\n                    tableId: table.id,\n                    success: true,\n                    message: `Refreshed from source (${refreshData.row_count} rows)`,\n                    newRows: sampleData.rows,\n                    contentHash: refreshData.content_hash\n                };\n            } else {\n                return {\n                    tableId: table.id,\n                    success: false,\n                    message: sampleData.error || 'Failed to sample refreshed table'\n                };\n            }\n        } catch (error) {\n            return {\n                tableId: table.id,\n                success: false,\n                message: error instanceof Error ? error.message : 'Unknown error'\n            };\n        }\n    }, [dispatch]);\n\n    /**\n     * Refresh a single table's data\n     */\n    const refreshTable = useCallback(async (table: DictTable): Promise<RefreshResult> => {\n        const source = table.source;\n\n        // Stream source - frontend has URL\n        if (source?.type === 'stream' && source.url) {\n            return fetchStreamData(table);\n        }\n\n        // Database source - backend has connection info\n        if (table.virtual && source?.type === 'database' && source.canRefresh) {\n            return refreshDatabaseTable(table);\n        }\n\n        return { tableId: table.id, success: false, message: 'Table does not support refresh' };\n    }, [fetchStreamData, refreshDatabaseTable]);\n\n    /**\n     * Refresh table and update state, then refresh derived tables\n     */\n    const performRefresh = useCallback(async (table: DictTable) => {\n        // Prevent overlapping refreshes for the same table\n        if (refreshInProgressRef.current.get(table.id)) {\n            console.log(`[DataRefresh] Refresh already in progress for \"${table.id}\", skipping...`);\n            return;\n        }\n\n        refreshInProgressRef.current.set(table.id, true);\n\n        try {\n            const result = await refreshTable(table);\n\n            if (result.success) {\n                // Check if we have new rows to process\n                if (result.newRows) {\n                    // For stream sources: compute hash locally and compare\n                    // For database sources: backend already determined data changed\n                    const newContentHash = result.contentHash || computeContentHash(result.newRows, table.names);\n                    const oldContentHash = table.contentHash;\n                    \n                    const dataChanged = oldContentHash !== newContentHash;\n                    \n                    if (dataChanged) {\n                        console.log(`[DataRefresh] Table \"${table.id}\" data changed (hash: ${oldContentHash?.slice(0, 8) || 'none'} -> ${newContentHash.slice(0, 8)}), updating...`);\n                        \n                        // For stream sources with virtual tables, sync the new data to workspace\n                        // so that sandbox code (derived table refresh) reads fresh data from parquet.\n                        // Database sources don't need this — their backend refresh already updates workspace.\n                        if (table.source?.type === 'stream' && table.virtual?.tableId) {\n                            try {\n                                await fetchWithIdentity(getUrls().SYNC_TABLE_DATA, {\n                                    method: 'POST',\n                                    headers: { 'Content-Type': 'application/json' },\n                                    body: JSON.stringify({\n                                        table_name: table.virtual.tableId,\n                                        rows: result.newRows\n                                    })\n                                });\n                                console.log(`[DataRefresh] Synced stream data for \"${table.virtual.tableId}\" to workspace`);\n                            } catch (syncError) {\n                                console.warn(`[DataRefresh] Failed to sync stream data to workspace:`, syncError);\n                            }\n                        }\n\n                        // Update the table rows - this will trigger useDerivedTableRefresh\n                        // Pass contentHash from backend for virtual/DB tables so it reflects full table state\n                        dispatch(dfActions.updateTableRows({\n                            tableId: table.id,\n                            rows: result.newRows,\n                            contentHash: result.contentHash  // Use backend hash for DB tables\n                        }));\n\n                        // Notify about the refresh\n                        dispatch(dfActions.addMessages({\n                            timestamp: Date.now(),\n                            component: 'Data Refresh',\n                            type: 'info',\n                            value: `Table \"${table.displayId || table.id}\" data refreshed (${result.newRows.length} rows)`\n                        }));\n                    } else {\n                        console.log(`[DataRefresh] Table \"${table.id}\" data unchanged (hash: ${newContentHash.slice(0, 8)})`);\n                    }\n                } else {\n                    // Success but no newRows means database refresh detected no data change\n                    // No need to update frontend state or trigger derived table refresh\n                    console.log(`[DataRefresh] Table \"${table.id}\" refresh complete - data unchanged (backend check)`);\n                }\n            } else {\n                console.warn(`[DataRefresh] Failed to refresh \"${table.id}\": ${result.message}`);\n                dispatch(dfActions.addMessages({\n                    timestamp: Date.now(),\n                    component: 'Data Refresh',\n                    type: 'warning',\n                    value: `Failed to refresh \"${table.displayId || table.id}\": ${result.message}`\n                }));\n            }\n        } finally {\n            refreshInProgressRef.current.set(table.id, false);\n        }\n    }, [dispatch, refreshTable]);\n\n    /**\n     * Schedule the next refresh for a table after the current one completes.\n     * Uses recursive setTimeout pattern to ensure updates wait until complete.\n     */\n    const scheduleNextRefresh = useCallback((tableId: string) => {\n        // Look up the current table state to get latest source config\n        const table = getLatestTable(tableId);\n        if (!table) {\n            isActiveRef.current.set(tableId, false);\n            return;\n        }\n\n        const source = table.source;\n        if (!source?.autoRefresh || !source.refreshIntervalSeconds || source.refreshIntervalSeconds <= 0) {\n            isActiveRef.current.set(tableId, false);\n            return;\n        }\n\n        if (!isActiveRef.current.get(tableId)) {\n            return;\n        }\n\n        const intervalMs = source.refreshIntervalSeconds * 1000;\n        \n        const timeout = setTimeout(async () => {\n            if (!isActiveRef.current.get(tableId)) {\n                return;\n            }\n\n            // Read latest table from ref (not stale closure)\n            const currentTable = getLatestTable(tableId);\n            if (!currentTable) {\n                isActiveRef.current.set(tableId, false);\n                return;\n            }\n\n            await performRefresh(currentTable);\n            \n            scheduleNextRefresh(tableId);\n        }, intervalMs);\n\n        timeoutRefs.current.set(tableId, timeout);\n    }, [getLatestTable, performRefresh]);\n\n    /**\n     * Set up refresh intervals for tables with auto-refresh enabled.\n     *\n     * This effect depends on `refreshConfigs` (a memoized projection of tables\n     * that only contains refresh-relevant fields) — so it does NOT re-run when\n     * only table rows change. Timer churn is eliminated.\n     */\n    useEffect(() => {\n        // Clear all existing timeouts\n        timeoutRefs.current.forEach((timeout) => clearTimeout(timeout));\n        timeoutRefs.current.clear();\n        isActiveRef.current.clear();\n\n        // Set up new refresh schedules\n        refreshConfigs.forEach((config) => {\n            // Skip derived tables — they are refreshed by useDerivedTableRefresh\n            // when their source tables change, not by polling an external source.\n            const shouldAutoRefresh = config.autoRefresh && \n                config.refreshIntervalSeconds && \n                config.refreshIntervalSeconds > 0 &&\n                !config.hasDerive;\n\n            if (shouldAutoRefresh) {\n                const intervalMs = config.refreshIntervalSeconds! * 1000;\n                const isNewTable = !initializedTablesRef.current.has(config.id);\n                \n                console.log(`[DataRefresh] Setting up auto-refresh for \"${config.id}\" every ${config.refreshIntervalSeconds}s (new=${isNewTable})`);\n                \n                isActiveRef.current.set(config.id, true);\n                initializedTablesRef.current.add(config.id);\n                \n                if (isNewTable) {\n                    console.log(`[DataRefresh] Triggering immediate first refresh for newly loaded table \"${config.id}\"`);\n                    (async () => {\n                        if (!isActiveRef.current.get(config.id)) {\n                            return;\n                        }\n                        const table = getLatestTable(config.id);\n                        if (table) {\n                            await performRefresh(table);\n                        }\n                        scheduleNextRefresh(config.id);\n                    })();\n                } else {\n                    const initialTimeout = setTimeout(async () => {\n                        if (!isActiveRef.current.get(config.id)) {\n                            return;\n                        }\n                        const table = getLatestTable(config.id);\n                        if (table) {\n                            await performRefresh(table);\n                        }\n                        scheduleNextRefresh(config.id);\n                    }, intervalMs);\n\n                    timeoutRefs.current.set(config.id, initialTimeout);\n                }\n            }\n        });\n\n        // Clean up tables that no longer exist from the initialized set\n        const currentTableIds = new Set(refreshConfigs.map(c => c.id));\n        initializedTablesRef.current.forEach(tableId => {\n            if (!currentTableIds.has(tableId)) {\n                initializedTablesRef.current.delete(tableId);\n            }\n        });\n\n        return () => {\n            timeoutRefs.current.forEach((timeout) => clearTimeout(timeout));\n            timeoutRefs.current.clear();\n            isActiveRef.current.clear();\n        };\n    }, [refreshConfigs, performRefresh, scheduleNextRefresh, getLatestTable]);\n\n    /**\n     * Manual refresh function that can be called from components\n     */\n    const manualRefresh = useCallback(async (tableId: string) => {\n        const table = getLatestTable(tableId);\n        if (table) {\n            await performRefresh(table);\n        }\n    }, [getLatestTable, performRefresh]);\n\n    /**\n     * Get refresh info for a table\n     */\n    const getRefreshInfo = useCallback((tableId: string) => {\n        const table = getLatestTable(tableId);\n        if (!table) return null;\n\n        const source = table.source;\n        const canRefresh = (source?.type === 'stream' && !!source.url) || \n                          (source?.type === 'database' && source.canRefresh === true);\n        return {\n            canRefresh,\n            autoRefreshEnabled: source?.autoRefresh ?? false,\n            refreshIntervalSeconds: source?.refreshIntervalSeconds,\n            lastRefreshed: source?.lastRefreshed,\n            sourceType: source?.type\n        };\n    }, [getLatestTable]);\n\n    return {\n        manualRefresh,\n        getRefreshInfo\n    };\n}\n\n/**\n * Hook to handle refreshing derived tables when their source tables change.\n * This should be used in conjunction with useDataRefresh.\n *\n * Key performance optimisation: all derived table refreshes triggered by a\n * single source-table change are fetched in parallel and then dispatched as\n * a **single** `updateMultipleTableRows` action — collapsing N state updates\n * (and N full-app re-renders) into one.\n */\nexport function useDerivedTableRefresh() {\n    const dispatch = useDispatch<AppDispatch>();\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const prevTableRowsRef = useRef<Map<string, string>>(new Map());\n    const refreshInProgressRef = useRef<boolean>(false);\n\n    /**\n     * Refresh a SQL view (virtual table) by re-sampling from DuckDB.\n     * Returns the result rather than dispatching directly.\n     */\n    const refreshSqlView = useCallback(async (derivedTable: DictTable): Promise<{tableId: string, rows: any[]} | null> => {\n        if (!derivedTable.virtual?.tableId) return null;\n\n        const tableName = derivedTable.virtual.tableId;\n        console.log(`[DerivedRefresh] Re-sampling SQL view \"${tableName}\" (DuckDB auto-updated)...`);\n\n        try {\n            const response = await fetchWithIdentity(getUrls().SAMPLE_TABLE, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: JSON.stringify({ \n                    table: tableName,\n                    size: Math.max(derivedTable.rows.length, 1000)\n                })\n            });\n\n            const data = await response.json();\n            if (data.status === 'success' && data.rows) {\n                console.log(`[DerivedRefresh] Successfully re-sampled SQL view \"${tableName}\" (${data.rows.length} rows)`);\n                return { tableId: derivedTable.id, rows: data.rows };\n            }\n            return null;\n        } catch (error) {\n            console.error(`[DerivedRefresh] Error re-sampling SQL view ${tableName}:`, error);\n            return null;\n        }\n    }, []);\n\n    /**\n     * Refresh a single derived table. Returns the result for batching.\n     */\n    const refreshOneDerivedTable = useCallback(async (\n        derivedTable: DictTable,\n        allTables: DictTable[]\n    ): Promise<{tableId: string, rows: any[]} | null> => {\n        if (!derivedTable.derive) return null;\n\n        try {\n            // SQL views — DuckDB auto-updates; just re-sample\n            if (derivedTable.virtual?.tableId && !derivedTable.derive?.code) {\n                console.log(`[DerivedRefresh] Table \"${derivedTable.id}\" is an SQL view - DuckDB auto-updates it`);\n                return await refreshSqlView(derivedTable);\n            }\n\n            // Python-derived tables — re-run the transformation code\n            const { source: sourceTableIds, code, codeSignature } = derivedTable.derive;\n\n            // Security: refuse to send code without a valid server signature\n            if (!codeSignature) {\n                console.warn(`[DerivedRefresh] Table \"${derivedTable.id}\" has no code signature — skipping refresh (code may predate signing)`);\n                dispatch(dfActions.addMessages({\n                    timestamp: Date.now(),\n                    component: 'Data Refresh',\n                    type: 'warning',\n                    value: `Cannot refresh \"${derivedTable.displayId || derivedTable.id}\": missing code signature. Re-derive the table to obtain a signed version.`\n                }));\n                return null;\n            }\n\n            console.log(`[DerivedRefresh] Looking for source tables: ${sourceTableIds.join(', ')}`);\n            \n            const inputTables: {name: string, rows: any[]}[] = [];\n            for (const sourceId of sourceTableIds) {\n                const sourceTable = allTables.find(t => t.id === sourceId);\n                if (!sourceTable) {\n                    console.warn(`[DerivedRefresh] Source table not found: ${sourceId}`);\n                    continue;\n                }\n                const tableName = sourceTable.virtual?.tableId || sourceTable.id.replace(/\\.[^/.]+$/, \"\");\n                inputTables.push({ name: tableName, rows: sourceTable.rows });\n            }\n\n            if (inputTables.length !== sourceTableIds.length) {\n                console.error(`[DerivedRefresh] Missing source tables for: ${derivedTable.id} (got ${inputTables.length}/${sourceTableIds.length})`);\n                return null;\n            }\n\n            console.log(`[DerivedRefresh] Calling server to refresh \"${derivedTable.id}\" with ${inputTables.length} input tables, code length: ${code.length}`);\n\n            const requestBody: any = {\n                input_tables: inputTables,\n                code: code,\n                code_signature: codeSignature, // HMAC proof that server generated this code\n                output_variable: derivedTable.derive?.outputVariable || 'result_df',\n                virtual: !!derivedTable.virtual?.tableId,\n                output_table_name: derivedTable.virtual?.tableId\n            };\n            \n            const response = await fetchWithIdentity(getUrls().REFRESH_DERIVED_DATA, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: JSON.stringify(requestBody)\n            });\n\n            const data = await response.json();\n            \n            if (data.status === 'ok' && data.rows) {\n                console.log(`[DerivedRefresh] Successfully refreshed \"${derivedTable.id}\" with ${data.rows.length} rows`);\n                return { tableId: derivedTable.id, rows: data.rows };\n            } else {\n                console.error(`[DerivedRefresh] Failed to refresh \"${derivedTable.id}\": ${data.message}`);\n                dispatch(dfActions.addMessages({\n                    timestamp: Date.now(),\n                    component: 'Data Refresh',\n                    type: 'warning',\n                    value: `Failed to refresh \"${derivedTable.displayId || derivedTable.id}\": ${data.message}`\n                }));\n                return null;\n            }\n        } catch (error) {\n            console.error(`[DerivedRefresh] Error refreshing derived table ${derivedTable.id}:`, error);\n            dispatch(dfActions.addMessages({\n                timestamp: Date.now(),\n                component: 'Data Refresh',\n                type: 'error',\n                value: `Error refreshing \"${derivedTable.displayId || derivedTable.id}\": ${error instanceof Error ? error.message : 'Unknown error'}`\n            }));\n            return null;\n        }\n    }, [dispatch, refreshSqlView]);\n\n    /**\n     * Check for table changes and refresh dependent derived tables.\n     * All refreshes are fetched in parallel, then committed as a single batch dispatch.\n     */\n    useEffect(() => {\n        console.log(`[DerivedRefresh] useEffect triggered, ${tables.length} tables in state`);\n        \n        // Build a map of content hashes for source tables only (non-derived tables)\n        const currentHashMap = new Map<string, string>();\n        tables.forEach(table => {\n            if (!table.derive) {\n                const hash = table.contentHash || computeContentHash(table.rows, table.names);\n                currentHashMap.set(table.id, hash);\n            }\n        });\n\n        // Check which source tables have changed\n        const changedTableIds: string[] = [];\n        currentHashMap.forEach((hash, tableId) => {\n            const prevHash = prevTableRowsRef.current.get(tableId);\n            if (prevHash && prevHash !== hash) {\n                changedTableIds.push(tableId);\n                console.log(`[DerivedRefresh] Detected change in source table \"${tableId}\" (hash: ${prevHash.slice(0, 8)} -> ${hash.slice(0, 8)})`);\n            }\n        });\n\n        if (prevTableRowsRef.current.size === 0 && tables.length > 0) {\n            const sourceTableCount = tables.filter(t => !t.derive).length;\n            console.log(`[DerivedRefresh] First run, initializing content hashes for ${sourceTableCount} source tables`);\n        }\n\n        // If any source tables changed, find and refresh all dependent derived tables in parallel\n        if (changedTableIds.length > 0 && !refreshInProgressRef.current) {\n            console.log(`[DerivedRefresh] Source tables changed: ${changedTableIds.join(', ')}`);\n            \n            const directlyDependentTables: DictTable[] = [];\n            tables.forEach(table => {\n                if (table.derive) {\n                    const dependsOnChanged = table.derive.source.some(\n                        sourceId => changedTableIds.includes(sourceId)\n                    );\n                    console.log(`[DerivedRefresh] Checking derived table \"${table.id}\": dependsOnChanged=${dependsOnChanged}, sources=[${table.derive.source.join(', ')}]`);\n                    if (dependsOnChanged) {\n                        directlyDependentTables.push(table);\n                    }\n                }\n            });\n\n            if (directlyDependentTables.length > 0) {\n                console.log(`[DerivedRefresh] Will refresh ${directlyDependentTables.length} directly dependent tables in parallel: ${directlyDependentTables.map(t => t.id).join(', ')}`);\n                \n                refreshInProgressRef.current = true;\n\n                // Fire all refreshes in parallel, then batch the results into ONE dispatch\n                Promise.all(\n                    directlyDependentTables.map(dt => refreshOneDerivedTable(dt, tables))\n                ).then(results => {\n                    const successfulUpdates = results.filter((r): r is {tableId: string, rows: any[]} => r !== null);\n                    \n                    if (successfulUpdates.length > 0) {\n                        // Single dispatch for ALL derived table updates\n                        dispatch(dfActions.updateMultipleTableRows(successfulUpdates));\n                        \n                        // One summary message instead of N individual messages\n                        const names = successfulUpdates.map(u => {\n                            const t = tables.find(t => t.id === u.tableId);\n                            return `\"${t?.displayId || u.tableId}\" (${u.rows.length} rows)`;\n                        });\n                        dispatch(dfActions.addMessages({\n                            timestamp: Date.now(),\n                            component: 'Data Refresh',\n                            type: 'info',\n                            value: `Refreshed ${successfulUpdates.length} derived table(s): ${names.join(', ')}`\n                        }));\n                    }\n                }).finally(() => {\n                    refreshInProgressRef.current = false;\n                });\n            } else {\n                console.log(`[DerivedRefresh] No derived tables need refreshing`);\n            }\n        }\n\n        // Update the previous hashes reference (only source tables)\n        prevTableRowsRef.current = currentHashMap;\n    }, [tables, refreshOneDerivedTable, dispatch]);\n}\n"
  },
  {
    "path": "src/app/useFormulateData.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { useSelector, useDispatch } from 'react-redux';\nimport { DataFormulatorState, dfActions, dfSelectors, fetchCodeExpl, fetchChartInsight, fetchFieldSemanticType } from './dfSlice';\nimport { AppDispatch } from './store';\nimport { Chart, FieldItem, Trigger, createDictTable, DictTable } from '../components/ComponentType';\nimport { getUrls, getTriggers, fetchWithIdentity } from './utils';\n\nexport type IdeaItem = {\n    text: string;\n    goal: string;\n    difficulty: 'easy' | 'medium' | 'hard';\n    tag?: string;\n};\n\nexport interface StreamIdeasOptions {\n    actionTableIds: string[];\n    currentTable: DictTable;\n    onIdeas: (ideas: IdeaItem[]) => void;\n    onThinkingBuffer: (buffer: string) => void;\n    onLoadingChange: (loading: boolean) => void;\n    /** Chart image (PNG data URL) for current visualization context */\n    currentChartImage?: string | null;\n    /** Sample rows from the current table */\n    currentDataSample?: any[];\n    /** Optional start question for idea generation */\n    startQuestion?: string;\n    /** If true, only blocks with type===\"question\" are included (default: false) */\n    filterByType?: boolean;\n}\n\nexport interface FormulateDataOptions {\n    instruction: string;\n    mode: 'formulate' | 'ideate';\n    actionTableIds: string[];\n    currentTable: DictTable;\n    overrideTableId?: string;\n    currentVisualization?: any;\n    expectedVisualization?: any;\n    /** The chart spec to embed in the trigger for the derived table */\n    triggerChart: Chart;\n    /**\n     * Component-specific chart creation callback.\n     * Called with the candidate table, refined goal, and resolved concepts.\n     * Should dispatch chart creation actions and return the focused chart ID (or undefined).\n     */\n    createChart: (params: {\n        candidateTable: DictTable;\n        refinedGoal: any;\n        currentConcepts: FieldItem[];\n    }) => string | undefined;\n    /** Called before the request is made */\n    onStarted?: () => void;\n    /** Called on successful formulation */\n    onSuccess?: (params: { displayInstruction: string; candidateTable: DictTable; focusedChartId?: string }) => void;\n    /** Called on error */\n    onError?: (error: any) => void;\n    /** Called after the request completes (success or error) */\n    onFinally?: () => void;\n}\n\nfunction generateTableId(tables: DictTable[]): string {\n    let tableSuffix = Number.parseInt((Date.now() - Math.floor(Math.random() * 10000)).toString().slice(-6));\n    let tableId = `table-${tableSuffix}`;\n    while (tables.find(t => t.id === tableId) !== undefined) {\n        tableSuffix += 1;\n        tableId = `table-${tableSuffix}`;\n    }\n    return tableId;\n}\n\n/**\n * Shared hook for data formulation and idea streaming.\n * Used by both EncodingShelfCard (chart-aware formulation) and ChartRecBox (NL-driven formulation).\n */\nexport function useFormulateData() {\n    const dispatch = useDispatch<AppDispatch>();\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const config = useSelector((state: DataFormulatorState) => state.config);\n    const agentRules = useSelector((state: DataFormulatorState) => state.agentRules);\n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n    const activeModel = useSelector(dfSelectors.getActiveModel);\n\n    /**\n     * Build an exploration thread from the current table's derivation chain.\n     */\n    function buildExplorationThread(currentTable: DictTable): any[] {\n        if (!currentTable.derive || currentTable.anchored) return [];\n        const triggers = getTriggers(currentTable, tables);\n        return triggers.map(trigger => ({\n            name: trigger.resultTableId,\n            rows: tables.find(t2 => t2.id === trigger.resultTableId)?.rows,\n            description: `Derive from ${tables.find(t2 => t2.id === trigger.resultTableId)?.derive?.source} with instruction: ${trigger.instruction}`,\n        }));\n    }\n\n    /**\n     * Stream ideas/recommendations from the exploration agent via SSE.\n     */\n    async function streamIdeas(options: StreamIdeasOptions): Promise<void> {\n        const {\n            actionTableIds, currentTable,\n            onIdeas, onThinkingBuffer, onLoadingChange,\n            currentChartImage, currentDataSample,\n            startQuestion, filterByType = false,\n        } = options;\n\n        onLoadingChange(true);\n        onThinkingBuffer(\"\");\n        onIdeas([]);\n\n        try {\n            const explorationThread = buildExplorationThread(currentTable);\n            const actionTables = actionTableIds.map(id => tables.find(t => t.id === id) as DictTable);\n\n            const messageBody = JSON.stringify({\n                token: String(Date.now()),\n                model: activeModel,\n                mode: 'interactive',\n                input_tables: actionTables.map(t => ({\n                    name: t.virtual?.tableId || t.id.replace(/\\.[^/.]+$/, \"\"),\n                    rows: t.rows,\n                    attached_metadata: t.attachedMetadata,\n                })),\n                exploration_thread: explorationThread,\n                agent_exploration_rules: agentRules.exploration,\n                ...(currentDataSample ? { current_data_sample: currentDataSample } : {}),\n                ...(currentChartImage ? { current_chart: currentChartImage } : {}),\n                ...(startQuestion ? { start_question: startQuestion } : {}),\n            });\n\n            const engine = getUrls().GET_RECOMMENDATION_QUESTIONS;\n            const controller = new AbortController();\n            const timeoutId = setTimeout(() => controller.abort(), config.formulateTimeoutSeconds * 1000);\n\n            const response = await fetchWithIdentity(engine, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: messageBody,\n                signal: controller.signal,\n            });\n\n            clearTimeout(timeoutId);\n\n            if (!response.ok) {\n                throw new Error(`HTTP error! status: ${response.status}`);\n            }\n\n            const reader = response.body?.getReader();\n            if (!reader) {\n                throw new Error('No response body reader available');\n            }\n\n            const decoder = new TextDecoder();\n            let lines: string[] = [];\n            let buffer = '';\n\n            const updateState = (currentLines: string[]) => {\n                const dataBlocks = currentLines\n                    .map(line => { try { return JSON.parse(line.trim()); } catch (e) { return null; } })\n                    .filter(block => block != null);\n\n                const questions = (filterByType ? dataBlocks.filter((block: any) => block.type === \"question\") : dataBlocks)\n                    .map((block: any) => ({\n                        text: block.text,\n                        goal: block.goal,\n                        difficulty: block.difficulty,\n                        tag: block.tag,\n                    }));\n\n                onIdeas(questions);\n            };\n\n            try {\n                while (true) {\n                    const { done, value } = await reader.read();\n                    if (done) break;\n\n                    buffer += decoder.decode(value, { stream: true });\n                    const newLines = buffer.split('data: ').filter(line => line.trim() !== \"\");\n                    buffer = newLines.pop() || '';\n                    if (newLines.length > 0) {\n                        lines.push(...newLines);\n                        updateState(lines);\n                    }\n                    onThinkingBuffer(buffer.replace(/^data: /, \"\"));\n                }\n            } finally {\n                reader.releaseLock();\n            }\n\n            lines.push(buffer);\n            updateState(lines);\n\n            if (lines.length === 0) {\n                throw new Error('No valid results returned from agent');\n            }\n        } catch (error) {\n            dispatch(dfActions.addMessages({\n                \"timestamp\": Date.now(),\n                \"type\": \"error\",\n                \"component\": \"chart builder\",\n                \"value\": \"Failed to get ideas from the exploration agent. Please try again.\",\n                \"detail\": error instanceof Error ? error.message : 'Unknown error',\n            }));\n        } finally {\n            onLoadingChange(false);\n        }\n    }\n\n    /**\n     * Formulate data: send instruction to derive/refine endpoint and process the result.\n     * Handles request building, dialog continuation, table/concept creation, and error handling.\n     * Chart creation is delegated to the caller via the createChart callback.\n     */\n    function formulateData(options: FormulateDataOptions): void {\n        const {\n            instruction, mode, actionTableIds, currentTable,\n            overrideTableId, currentVisualization, expectedVisualization,\n            triggerChart, createChart,\n            onStarted, onSuccess, onError, onFinally,\n        } = options;\n\n        if (actionTableIds.length === 0) return;\n\n        onStarted?.();\n\n        const actionTables = actionTableIds.map(id => tables.find(t => t.id === id) as DictTable);\n        const token = String(Date.now());\n\n        // Build input_tables payload (shared across all request variants)\n        const inputTablesPayload = actionTables.map(t => ({\n            name: t.virtual?.tableId || t.id.replace(/\\.[^/.]+$/, \"\"),\n            rows: t.rows,\n            attached_metadata: t.attachedMetadata,\n        }));\n\n        // Build base request body\n        let messageBody: any = {\n            token,\n            mode,\n            input_tables: inputTablesPayload,\n            extra_prompt: instruction,\n            model: activeModel,\n            agent_coding_rules: agentRules.coding,\n            ...(currentVisualization ? { current_visualization: currentVisualization } : {}),\n            ...(expectedVisualization ? { expected_visualization: expectedVisualization } : {}),\n        };\n        let engine = getUrls().DERIVE_DATA;\n\n        // Handle dialog continuation / refinement\n        if (currentTable.derive?.dialog && !currentTable.anchored) {\n            const sourceTableIds = currentTable.derive.source;\n            const tableIdsChanged = !sourceTableIds.every((id: string) => actionTableIds.includes(id)) ||\n                !actionTableIds.every(id => sourceTableIds.includes(id));\n\n            if (mode === 'ideate' || tableIdsChanged) {\n                // Start fresh with prior dialog as additional context\n                messageBody.additional_messages = currentTable.derive.dialog;\n                engine = getUrls().DERIVE_DATA;\n            } else {\n                // Refine: continue existing dialog\n                messageBody = {\n                    token,\n                    mode,\n                    input_tables: inputTablesPayload,\n                    dialog: currentTable.derive.dialog,\n                    latest_data_sample: currentTable.rows.slice(0, 10),\n                    new_instruction: instruction,\n                    model: activeModel,\n                    agent_coding_rules: agentRules.coding,\n                    ...(currentVisualization ? { current_visualization: currentVisualization } : {}),\n                    ...(expectedVisualization ? { expected_visualization: expectedVisualization } : {}),\n                };\n                engine = getUrls().REFINE_DATA;\n            }\n        }\n\n        const controller = new AbortController();\n        const timeoutId = setTimeout(() => controller.abort(), config.formulateTimeoutSeconds * 1000);\n\n        fetchWithIdentity(engine, {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json' },\n            body: JSON.stringify(messageBody),\n            signal: controller.signal,\n        })\n        .then((response: Response) => {\n            if (!response.ok) {\n                return response.text().then(text => {\n                    try {\n                        const errorData = JSON.parse(text);\n                        throw new Error(errorData.error_message || errorData.error || `Server error (${response.status})`);\n                    } catch (parseError) {\n                        if (parseError instanceof SyntaxError) {\n                            throw new Error(`Server error (${response.status}): The server returned an unexpected response.`);\n                        }\n                        throw parseError;\n                    }\n                });\n            }\n            return response.json();\n        })\n        .then((data) => {\n            if (data.status === \"error\" && data.error_message) {\n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"component\": \"chart builder\",\n                    \"type\": \"error\",\n                    \"value\": `Data formulation failed: ${data.error_message}`,\n                }));\n                return;\n            }\n\n            if (!data.results || data.results.length === 0) {\n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"component\": \"chart builder\",\n                    \"type\": \"error\",\n                    \"value\": \"No result is returned from the data formulation agent. Please try again.\",\n                }));\n                return;\n            }\n\n            if (data[\"token\"] !== token) return;\n\n            const candidates = data[\"results\"].filter((item: any) => item[\"status\"] === \"ok\");\n\n            if (candidates.length === 0) {\n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"type\": \"error\",\n                    \"component\": \"chart builder\",\n                    \"value\": \"Data formulation failed, please try again.\",\n                    \"code\": data.results[0].code,\n                    \"detail\": data.results[0].content,\n                }));\n                return;\n            }\n\n            // Process the best candidate\n            const candidate = candidates[0];\n            const code = candidate[\"code\"];\n            const codeSignature = candidate[\"code_signature\"]; // HMAC signature from server\n            const rows = candidate[\"content\"][\"rows\"];\n            const dialog = candidate[\"dialog\"];\n            const refinedGoal = candidate['refined_goal'];\n            const displayInstruction = refinedGoal[\"display_instruction\"];\n\n            // Determine table ID\n            let candidateTableId: string;\n            if (overrideTableId) {\n                candidateTableId = overrideTableId;\n            } else if (candidate[\"content\"][\"virtual\"]) {\n                candidateTableId = candidate[\"content\"][\"virtual\"][\"table_name\"];\n            } else {\n                candidateTableId = generateTableId(tables);\n            }\n\n            // Create trigger\n            const trigger: Trigger = {\n                tableId: currentTable.id,\n                instruction,\n                displayInstruction,\n                chart: triggerChart,\n                resultTableId: candidateTableId,\n            };\n\n            // Create candidate table with derive info\n            const candidateTable = createDictTable(candidateTableId, rows, {\n                code,\n                codeSignature,\n                outputVariable: refinedGoal['output_variable'] || 'result_df',\n                source: actionTableIds,\n                dialog,\n                trigger,\n            });\n\n            if (candidate[\"content\"][\"virtual\"]) {\n                candidateTable.virtual = {\n                    tableId: candidate[\"content\"][\"virtual\"][\"table_name\"],\n                    rowCount: candidate[\"content\"][\"virtual\"][\"row_count\"],\n                };\n            }\n\n            // Bootstrap metadata from agent field_metadata (temporary until fetchFieldSemanticType completes)\n            const fieldMetadata = refinedGoal['field_metadata'];\n            if (fieldMetadata && typeof fieldMetadata === 'object') {\n                for (const [fieldName, meta] of Object.entries(fieldMetadata)) {\n                    if (!candidateTable.metadata[fieldName]) continue;\n                    if (typeof meta === 'string') {\n                        // Plain string format: { \"field\": \"SemanticType\" }\n                        candidateTable.metadata[fieldName].semanticType = meta;\n                    } else if (typeof meta === 'object' && meta !== null) {\n                        // Dict format: { \"field\": { \"semantic_type\": \"...\", \"unit\": \"...\", ... } }\n                        const m = meta as Record<string, any>;\n                        if (m['semantic_type']) {\n                            candidateTable.metadata[fieldName].semanticType = m['semantic_type'];\n                        }\n                        if (m['unit']) {\n                            candidateTable.metadata[fieldName].unit = m['unit'];\n                        }\n                        if (m['intrinsic_domain']) {\n                            candidateTable.metadata[fieldName].intrinsicDomain = m['intrinsic_domain'];\n                        }\n                    }\n                }\n            }\n\n            // Insert or override table\n            if (overrideTableId) {\n                dispatch(dfActions.overrideDerivedTables(candidateTable));\n            } else {\n                dispatch(dfActions.insertDerivedTables(candidateTable));\n            }\n\n            // Add missing concepts\n            const names = candidateTable.names;\n            const missingNames = names.filter((name: string) => !conceptShelfItems.some(field => field.name === name));\n            const conceptsToAdd = missingNames.map((name: string) => ({\n                id: `concept-${name}-${Date.now()}`,\n                name,\n                source: \"custom\",\n                tableRef: \"custom\",\n            } as FieldItem));\n\n            dispatch(dfActions.addConceptItems(conceptsToAdd));\n            dispatch(fetchFieldSemanticType(candidateTable));\n            dispatch(fetchCodeExpl(candidateTable));\n\n            // Compute current concepts for chart creation\n            const currentConcepts = [...conceptShelfItems.filter(c => names.includes(c.name)), ...conceptsToAdd];\n\n            // Delegate chart creation to the caller\n            const focusedChartId = createChart({ candidateTable, refinedGoal, currentConcepts });\n\n            // Auto-generate chart insight after rendering\n            if (focusedChartId) {\n                const chartIdForInsight = focusedChartId;\n                setTimeout(() => {\n                    dispatch(fetchChartInsight({ chartId: chartIdForInsight, tableId: candidateTable.id }) as any);\n                }, 1500);\n            }\n\n            onSuccess?.({ displayInstruction, candidateTable, focusedChartId });\n        })\n        .catch((error) => {\n            if (error.name === 'AbortError') {\n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"component\": \"chart builder\",\n                    \"type\": \"error\",\n                    \"value\": `Data formulation timed out after ${config.formulateTimeoutSeconds} seconds. Consider breaking down the task, using a different model or prompt, or increasing the timeout limit.`,\n                    \"detail\": \"Request exceeded timeout limit\",\n                }));\n            } else {\n                console.error(error);\n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"component\": \"chart builder\",\n                    \"type\": \"error\",\n                    \"value\": \"Data formulation failed, please try again.\",\n                    \"detail\": error.message,\n                }));\n            }\n            onError?.(error);\n        })\n        .finally(() => {\n            clearTimeout(timeoutId);\n            onFinally?.();\n        });\n    }\n\n    return { streamIdeas, formulateData };\n}\n"
  },
  {
    "path": "src/app/utils.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport _, {  } from \"lodash\";\nimport { useEffect, useRef } from \"react\";\nimport ts from \"typescript\";\nimport { Channel, Chart, EncodingItem, EncodingMap, FieldItem, Trigger } from \"../components/ComponentType\";\nimport { DictTable } from \"../components/ComponentType\";\nimport { Type } from \"../data/types\";\nimport * as d3 from 'd3';\n\nimport { assembleVegaLite, type ChartEncoding, type AssembleOptions } from \"../lib/agents-chart\";\n\nexport function getUrls() {\n    return {\n        APP_CONFIG: `/api/app-config`,\n        AUTH_INFO_PREFIX: `/api/.auth/`,\n\n        EXAMPLE_DATASETS: `/api/example-datasets`,\n\n        // these functions involves ai agents\n        CHECK_AVAILABLE_MODELS: `/api/agent/check-available-models`,\n        TEST_MODEL: `/api/agent/test-model`,\n\n        SORT_DATA_URL: `/api/agent/sort-data`,\n        CLEAN_DATA_URL: `/api/agent/clean-data-stream`,\n        \n        CODE_EXPL_URL: `/api/agent/code-expl`,\n        CHART_INSIGHT_URL: `/api/agent/chart-insight`,\n        SERVER_PROCESS_DATA_ON_LOAD: `/api/agent/process-data-on-load`,\n\n        DERIVE_DATA: `/api/agent/derive-data`,\n        REFINE_DATA: `/api/agent/refine-data`,\n        DATA_AGENT_STREAMING: `/api/agent/data-agent-streaming`,\n\n        // these functions involves database\n        UPLOAD_DB_FILE: `/api/tables/upload-db-file`,\n        DOWNLOAD_DB_FILE: `/api/tables/download-db-file`,\n        RESET_DB_FILE: `/api/tables/reset-db-file`,\n\n        LIST_TABLES: `/api/tables/list-tables`,\n        TABLE_DATA: `/api/tables/get-table`,\n        CREATE_TABLE: `/api/tables/create-table`,\n        DELETE_TABLE: `/api/tables/delete-table`,\n        GET_COLUMN_STATS: `/api/tables/analyze`,\n        SAMPLE_TABLE: `/api/tables/sample-table`,\n        SYNC_TABLE_DATA: `/api/tables/sync-table-data`,\n        EXPORT_TABLE_CSV: `/api/tables/export-table-csv`,\n\n        DATA_LOADER_LIST_DATA_LOADERS: `/api/tables/data-loader/list-data-loaders`,\n        DATA_LOADER_LIST_TABLES: `/api/tables/data-loader/list-tables`,\n        DATA_LOADER_INGEST_DATA: `/api/tables/data-loader/ingest-data`,\n        DATA_LOADER_VIEW_QUERY_SAMPLE: `/api/tables/data-loader/view-query-sample`,\n        DATA_LOADER_INGEST_DATA_FROM_QUERY: `/api/tables/data-loader/ingest-data-from-query`,\n        DATA_LOADER_REFRESH_TABLE: `/api/tables/data-loader/refresh-table`,\n        DATA_LOADER_FETCH_DATA: `/api/tables/data-loader/fetch-data`,\n        DATA_LOADER_GET_TABLE_METADATA: `/api/tables/data-loader/get-table-metadata`,\n        DATA_LOADER_LIST_TABLE_METADATA: `/api/tables/data-loader/list-table-metadata`,\n\n        GET_RECOMMENDATION_QUESTIONS: `/api/agent/get-recommendation-questions`,\n        GENERATE_REPORT_STREAM: `/api/agent/generate-report-stream`,\n\n        // Refresh data endpoint\n        REFRESH_DERIVED_DATA: `/api/agent/refresh-derived-data`,\n\n        // Session management\n        SESSION_SAVE: `/api/sessions/save`,\n        SESSION_LIST: `/api/sessions/list`,\n        SESSION_LOAD: `/api/sessions/load`,\n        SESSION_DELETE: `/api/sessions/delete`,\n        SESSION_EXPORT: `/api/sessions/export`,\n        SESSION_IMPORT: `/api/sessions/import`,\n\n        // Workspace\n        OPEN_WORKSPACE: `/api/tables/open-workspace`,\n    };\n}\n\n/**\n * Get the current namespaced identity from the Redux store, or fall back to browser ID.\n * Returns identity in \"type:id\" format (e.g., \"user:alice@example.com\" or \"browser:550e8400-...\")\n * \n * This namespaced format ensures the backend can distinguish between authenticated users\n * and anonymous browser sessions, preventing identity spoofing attacks.\n */\nasync function getCurrentNamespacedIdentity(): Promise<string> {\n    try {\n        const { store } = await import('./store');\n        const state = store.getState();\n        if (state.identity?.id && state.identity?.type) {\n            return `${state.identity.type}:${state.identity.id}`;\n        }\n    } catch (e) {\n        // Store not available\n    }\n    // Fall back to browser ID from localStorage\n    const { getBrowserId } = await import('./identity');\n    return `browser:${getBrowserId()}`;\n}\n\n/**\n * Get auth token if available (for future JWT auth support).\n * Currently returns null - implement when adding custom auth.\n */\nfunction getAuthToken(): string | null {\n    // Future: retrieve JWT from localStorage or auth context\n    // Example: return localStorage.getItem('auth_token');\n    return null;\n}\n\n/**\n * Enhanced fetch wrapper that automatically adds identity and auth headers for API requests.\n * \n * Security model:\n * - X-Identity-Id: Namespaced identity (\"type:id\" format) for all requests\n * - Authorization: Bearer token (when implementing custom JWT auth)\n * \n * The backend prioritizes verified auth (Azure headers, JWT) over X-Identity-Id.\n * For anonymous users, X-Identity-Id is used with \"browser:\" namespace prefix.\n * \n * Use this instead of native fetch() for all /api/ calls.\n * \n * @param url - The URL to fetch\n * @param options - Fetch options (same as native fetch)\n * @returns Promise<Response>\n */\nexport async function fetchWithIdentity(\n    url: string | URL,\n    options: RequestInit = {}\n): Promise<Response> {\n    const urlString = typeof url === 'string' ? url : url.toString();\n    \n    // Add identity and auth headers for all API requests\n    if (urlString.startsWith('/api/')) {\n        const headers = new Headers(options.headers);\n        \n        // Always send namespaced identity (fallback for backend)\n        const namespacedIdentity = await getCurrentNamespacedIdentity();\n        headers.set('X-Identity-Id', namespacedIdentity);\n        \n        // Send auth token if available (for custom JWT auth)\n        const authToken = getAuthToken();\n        if (authToken) {\n            headers.set('Authorization', `Bearer ${authToken}`);\n        }\n        \n        options = { ...options, headers };\n    }\n    \n    return fetch(url, options);\n}\n\nimport * as vm from 'vm-browserify';\n\nexport function usePrevious<T>(value: T): T | undefined {\n    const ref = useRef<T>();\n    useEffect(() => {\n        ref.current = value;\n    });\n    return ref.current;\n}\n\n/**\n * Simple hash function (djb2 algorithm) for creating content fingerprints\n * @param str - The string to hash\n * @returns A hexadecimal hash string\n */\nfunction djb2Hash(str: string): string {\n    let hash = 5381;\n    for (let i = 0; i < str.length; i++) {\n        hash = ((hash << 5) + hash) + str.charCodeAt(i);\n        hash = hash & hash; // Convert to 32-bit integer\n    }\n    return (hash >>> 0).toString(16); // Convert to unsigned and then to hex\n}\n\n/**\n * Computes a content hash for table data to detect changes.\n * Uses a sampling strategy for efficiency with large datasets:\n * - Always includes column names and row count\n * - Samples first 50, last 50, and 50 evenly distributed rows from the middle\n * - This catches most data changes while remaining efficient\n * \n * @param rows - The table rows to hash\n * @param names - Optional column names (for additional fingerprinting)\n * @returns A hash string representing the content\n */\nexport function computeContentHash(rows: any[], names?: string[]): string {\n    const parts: string[] = [];\n    \n    // Include column names if provided\n    if (names && names.length > 0) {\n        parts.push(`cols:${names.join(',')}`);\n    }\n    \n    // Include row count\n    const rowCount = rows.length;\n    parts.push(`count:${rowCount}`);\n    \n    if (rowCount === 0) {\n        return djb2Hash(parts.join('|'));\n    }\n    \n    // Get column names from first row if not provided\n    const columnNames = names || Object.keys(rows[0] || {});\n    parts.push(`fields:${columnNames.join(',')}`);\n    \n    // Sampling strategy for efficiency\n    const sampleSize = 50;\n    const samplesToInclude: number[] = [];\n    \n    // Always include first N rows\n    for (let i = 0; i < Math.min(sampleSize, rowCount); i++) {\n        samplesToInclude.push(i);\n    }\n    \n    // Include evenly distributed rows from the middle\n    if (rowCount > sampleSize * 2) {\n        const step = Math.floor((rowCount - sampleSize * 2) / sampleSize);\n        if (step > 0) {\n            for (let i = sampleSize; i < rowCount - sampleSize; i += step) {\n                if (samplesToInclude.length < sampleSize * 2) {\n                    samplesToInclude.push(i);\n                }\n            }\n        }\n    }\n    \n    // Always include last N rows\n    for (let i = Math.max(rowCount - sampleSize, sampleSize); i < rowCount; i++) {\n        if (!samplesToInclude.includes(i)) {\n            samplesToInclude.push(i);\n        }\n    }\n    \n    // Sort indices for consistent ordering\n    samplesToInclude.sort((a, b) => a - b);\n    \n    // Build content string from sampled rows\n    const rowStrings: string[] = [];\n    for (const idx of samplesToInclude) {\n        const row = rows[idx];\n        if (row) {\n            // Create a deterministic string representation of the row\n            const rowValues = columnNames.map(col => {\n                const val = row[col];\n                if (val === null) return 'null';\n                if (val === undefined) return 'undefined';\n                if (typeof val === 'object') return JSON.stringify(val);\n                return String(val);\n            });\n            rowStrings.push(`${idx}:${rowValues.join(',')}`);\n        }\n    }\n    \n    parts.push(`rows:${rowStrings.join(';')}`);\n    \n    return djb2Hash(parts.join('|'));\n}\n\nexport function runCodeOnInputListsInVM(\n            code: string, \n            inputTupleList: any[][], \n            mode: \"faster\" | \"safer\") : [any[], any][] {\n    // inputList is a list of testInputs, each item can be an arg or a list of args (if the function takes more than one argument)\n    \"use strict\";\n    let ioPairs : [any[], any][] = inputTupleList.map(args => [args, undefined]);\n    if (mode == \"safer\") {\n        try {\n            // slightly safer?\n            if (code != \"\") {\n                let jsCode = ts.transpile(code);\n                //target = eval(jsCode)(s);\n                \n                //console.log(`let func = ${code}; func(arg)`)\n                let context = { inputTupleList : inputTupleList, outputs: inputTupleList.map(args => undefined) };\n                //console.log(`let func = ${jsCode}; let outputs = inputList.map(arg => func(arg));`);\n                vm.runInNewContext(`let func = ${jsCode}; outputs = inputTupleList.map(args => func(...args));`, context);\n                ioPairs = inputTupleList.map((args, i) => [args, context.outputs[i]]);\n                return ioPairs;\n            }\n        } catch(err) {\n            console.warn(err);\n        }\n    } else if (mode == \"faster\") {\n        try {\n            if (code != \"\") {\n                let jsCode = ts.transpile(code);\n                let func = eval(jsCode);\n                ioPairs = inputTupleList.map(args => {\n                    let target = undefined;\n                    try {\n                        // copy args to ensure correctness of mapping\n                        target = func(...structuredClone(args))\n                    } catch (err) {\n                        console.warn(`execution err ${err}`)\n                    }\n                    return [args, target]\n                });\n                return ioPairs;\n            }\n        } catch (err) {            \n            console.warn(err);\n        }\n    }\n\n    return ioPairs;\n}\n\nexport function extractFieldsFromEncodingMap(encodingMap: EncodingMap, allFields: FieldItem[]) {\n    let aggregateFields: [string | undefined, string][] = []\n    let groupByFields: string[] = []\n    \n    for (const [channel, encoding] of Object.entries(encodingMap)) {\n        const field = encoding.fieldID ? _.find(allFields, (f) => f.id === encoding.fieldID) : undefined;\n        if (encoding.aggregate) {\n            aggregateFields.push([field?.name, encoding.aggregate]);\n        } else {\n            if (field) {\n                groupByFields.push(field.name);\n            }\n        }\n    }\n\n    return { aggregateFields, groupByFields };\n}\n\n\n\nexport function prepVisTable(table: any[], allFields: FieldItem[], encodingMap: EncodingMap) {\n    let { aggregateFields, groupByFields } = extractFieldsFromEncodingMap(encodingMap, allFields);\n\n    let processedTable = [...table];\n\n    let result = processedTable;\n\n    if (aggregateFields.length > 0) {\n        // Step 2: Group by and aggregate\n        let grouped = [];\n        if (groupByFields.length > 0) {\n            grouped = d3.flatGroup(processedTable, ...groupByFields.map(field => (d: any) => d[field]));\n        } else {\n            grouped = [[\"_default\", processedTable]];\n        }\n\n        result = grouped.map(row => {\n            // Last element is the array of grouped items, rest are group values\n\n            const groupValues = row.slice(0, -1);\n            const group = row[row.length - 1];\n            \n            return {\n                // Add group by fields\n                ...Object.fromEntries(groupByFields.map((field, i) => [field, groupValues[i]])),\n                // Add aggregations\n                ...(aggregateFields.some(([_, type]) => type === 'count') \n                    ? { _count: group.length } \n                    : {}),\n                ...Object.fromEntries(\n                    aggregateFields\n                        .filter(([fieldName, aggType]) => aggType !== 'count' && fieldName)\n                        .map(([fieldName, aggType]) => {\n                            const values = group.map((r: any) => r[fieldName!]);\n                            const suffix = `_${aggType}`;\n                            const aggFunc = {\n                                'sum': d3.sum,\n                                'max': d3.max,\n                                'min': d3.min,\n                                'mean': d3.mean,\n                                'median': d3.median,\n                                'average': d3.mean,\n                                'mode': d3.mode\n                            }[aggType] as (values: any[]) => number | undefined;\n                            return [fieldName + suffix, aggFunc ? aggFunc(values) : undefined];\n                        })\n                )\n            };\n        });\n    }\n\n    return result;\n}\n\nexport const assembleVegaChart = (\n    chartType: string, \n    encodingMap: { [key in Channel]: EncodingItem; }, \n    conceptShelfItems: FieldItem[], \n    workingTable: any[],\n    tableMetadata: {[key: string]: {type: Type, semanticType: string, levels: any[], intrinsicDomain?: [number, number], unit?: string}},\n    baseChartWidth: number = 100,\n    baseChartHeight: number = 80,\n    addTooltips: boolean = false,\n    chartProperties?: Record<string, any>,\n    scaleFactor: number = 1,\n    maxStretchFactor?: number,\n    assembleOptions?: AssembleOptions,\n    semanticAnnotationOverrides?: Record<string, any>,\n) => {\n\n    // Convert app-level EncodingMap (fieldID-based) to library-level encodings (field-name-based)\n    const encodings: Record<string, ChartEncoding> = {};\n    for (const [channel, encoding] of Object.entries(encodingMap)) {\n        const field = encoding.fieldID ? _.find(conceptShelfItems, (f) => f.id === encoding.fieldID) : undefined;\n        encodings[channel] = {\n            field: field?.name,\n            type: encoding.dtype,\n            aggregate: encoding.aggregate,\n            sortOrder: encoding.sortOrder,\n            sortBy: encoding.sortBy,\n            scheme: encoding.scheme,\n        };\n    }\n\n    // Extract semantic types from table metadata\n    // Build SemanticAnnotation objects when enriched metadata (intrinsicDomain, unit) is available\n    const semanticTypes: Record<string, string | any> = {};\n    for (const [fieldName, meta] of Object.entries(tableMetadata)) {\n        if (meta.semanticType) {\n            if (meta.intrinsicDomain || meta.unit) {\n                // Build enriched annotation object\n                const annotation: any = { semanticType: meta.semanticType };\n                if (meta.intrinsicDomain) annotation.intrinsicDomain = meta.intrinsicDomain;\n                if (meta.unit) annotation.unit = meta.unit;\n                if (meta.levels && meta.levels.length > 0) annotation.sortOrder = meta.levels;\n                semanticTypes[fieldName] = annotation;\n            } else {\n                semanticTypes[fieldName] = meta.semanticType;\n            }\n        }\n    }\n    // Merge enriched annotations (e.g., intrinsicDomain, unit) when provided\n    if (semanticAnnotationOverrides) {\n        for (const [fieldName, annotation] of Object.entries(semanticAnnotationOverrides)) {\n            semanticTypes[fieldName] = annotation;\n        }\n    }\n\n    // Hack: pie-like radial charts grow too large because the circumference\n    // pressure model + VL's auto-radius both amplify the canvas size.\n    // Apply two dampening levers:\n    //   1. Shrink the base canvas so VL's arc radius starts smaller\n    //   2. Cap maxStretch more aggressively so pressure growth is limited\n    const PIE_LIKE_TYPES = new Set([\n        'Pie Chart', 'Rose Chart', 'Sunburst Chart',\n        'Radar Chart', 'Gauge Chart',\n    ]);\n    const isPieLike = PIE_LIKE_TYPES.has(chartType);\n\n    // Lever 1: reduce base canvas for pie-like charts (0.75× → smaller pie)\n    const canvasShrink = isPieLike ? 0.75 : 1;\n    const effectiveW = Math.round(baseChartWidth * scaleFactor * canvasShrink);\n    const effectiveH = Math.round(baseChartHeight * scaleFactor * canvasShrink);\n\n    // Lever 2: tighter stretch cap for pie-like charts\n    let effectiveMaxStretch = maxStretchFactor;\n    if (effectiveMaxStretch != null && isPieLike) {\n        // Compress toward 1: e.g. 2.0 → 1.3, 3.0 → 1.6, 5.0 → 2.2\n        effectiveMaxStretch = 1 + (effectiveMaxStretch - 1) * 0.3;\n    }\n\n    return assembleVegaLite({\n        data: { values: workingTable },\n        semantic_types: semanticTypes,\n        chart_spec: {\n            chartType,\n            encodings,\n            canvasSize: { width: effectiveW, height: effectiveH },\n            chartProperties,\n        },\n        options: {\n            addTooltips,\n            ...(effectiveMaxStretch != null ? { maxStretch: effectiveMaxStretch } : {}),\n            ...assembleOptions,\n        },\n    });\n}\n\n// resolveRecommendedChart & resolveChartFields remain in app layer (need generateFreshChart, Chart)\nexport { resolveRecommendedChart, resolveChartFields } from './chartRecommendation';\n\nexport let getTriggers = (leafTable: DictTable, tables: DictTable[]) => {\n    // recursively find triggers that ends in leafTable (if the leaf table is anchored, we will find till the previous table is anchored)\n    let triggers : Trigger[] = [];\n    let t = leafTable;\n    \n    while(true) {\n        // this is when we find an original table\n        if (t.derive == undefined) {\n            break;\n        }\n\n        // this is when we find an anchored table (which is not the leaf table)\n        if (t !== leafTable && t.anchored) {\n            break;\n        }\n\n        let trigger = t.derive.trigger as Trigger;\n        triggers = [trigger, ...triggers];\n        let parentTable = tables.find(x => x.id == trigger.tableId);\n        if (parentTable) {\n            t = parentTable;\n        } else {\n            break;\n        }\n    }\n    \n    return triggers;\n}\n\n/**\n * Returns a hash code from a string\n * @param  {String} str The string to hash.\n * @return {Number}    A 32bit integer\n * @see http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n */\nexport function hashCode(str: string) {\n    let hash = 0;\n    for (let i = 0, len = str.length; i < len; i++) {\n        let chr = str.charCodeAt(i);\n        hash = (hash << 5) - hash + chr;\n        hash |= 0; // Convert to 32bit integer\n    }\n    return hash;\n}\n"
  },
  {
    "path": "src/assets/icon-design.md",
    "content": "# Chart Icon Design Guide\n\nDesign conventions for chart template icons in `src/assets/`.\n\n## Color Palette\n\n| Token | Hex | Usage |\n|-------|-----|-------|\n| **Light Blue** | `#76c6ff` | Primary fill — dots, bars, areas (series A) |\n| **Dark Blue** | `#4a8acb` | Primary stroke / line (series A) |\n| **Light Gray** | `#B8B8B8` | Secondary fill — dots, bars, areas (series B) |\n| **Dark Gray** | `#7a7a7a` | Secondary stroke / line (series B) |\n| **Axis / Outline** | `#363636` | Axes, mark outlines, stems |\n| **Pastel Red** | `#e8868f` | Bearish / negative (candlestick) |\n| **Pastel Green** | `#6dc48d` | Bullish / positive (candlestick) |\n\nAll colors are muted/pastel to match the overall UI tone. Avoid saturated primaries.\n\n## Mark Style Rules\n\n### Filled marks (bars, circles, areas)\n\n- **Fill** with light color (`#76c6ff` or `#B8B8B8`)\n- **Outline** with `#363636`, stroke-width `2`–`3`\n- This gives marks a clean, defined edge consistent with the designer samples\n\n### Lines (line charts, bump charts)\n\n- **Stroke** with dark color (`#4a8acb` for blue series, `#7a7a7a` for gray series)\n- **Stroke-width**: `4`–`5`, `stroke-linecap=\"round\"`, `stroke-linejoin=\"round\"`\n- Dots on lines: fill with the corresponding light color, outline `#363636` stroke-width `2`\n\n### Line thickness reference\n\n| Element | stroke-width |\n|---------|-------------|\n| Axes | `4` |\n| Data lines (line/bump/area outline) | `4`–`5` |\n| Mark outlines (bars, dots, rects) | `2`–`3` |\n| Stems / rules (lollipop) | `4` |\n| Grid / spokes (radar) | `0.6`–`0.8` |\n\n### Two-series convention\n\nCharts that show a color encoding use **two series**:\n- Series A: light blue fill / dark blue stroke\n- Series B: light gray fill / dark gray stroke\n\nFor charts needing **four series** (e.g. bump chart), alternate:\n- Series 1: `#76c6ff` fill / `#4a8acb` stroke\n- Series 2: `#B8B8B8` fill / `#7a7a7a` stroke\n- Series 3: `#5ba8e0` fill / `#3d7ebf` stroke\n- Series 4: `#d0d0d0` fill / `#a8a8a8` stroke\n\n## Format\n\n- **New icons**: SVG (`chart-icon-*.svg`), viewBox `0 0 256 256`\n- **Legacy icons**: minified PNG (`chart-icon-*-min.png`)\n- Prefer SVG for new additions — scales cleanly at any size\n\n## Structure (SVG)\n\n- Axes drawn last so they layer on top\n- Y-axis: `x1=\"48\" y1=\"28\" x2=\"48\" y2=\"220\"`, stroke `#363636`, width 4, round cap\n- X-axis: `x1=\"44\" y1=\"216\" x2=\"240\" y2=\"216\"`, stroke `#363636`, width 4, round cap\n- Data region: roughly `x ∈ [60, 236]`, `y ∈ [40, 216]`\n\n## Icon Inventory\n\n| File | Chart Type | Format |\n|------|-----------|--------|\n| `chart-icon-scatter-min.png` | Scatter Plot | PNG |\n| `chart-icon-linear-regression-min.png` | Linear Regression | PNG |\n| `chart-icon-dot-plot-horizontal-min.png` | Ranged Dot Plot | PNG |\n| `chart-icon-box-plot-min.png` | Boxplot | PNG |\n| `chart-icon-bubble-min.png` | Bubble Chart | PNG |\n| `chart-icon-column-min.png` | Bar Chart | PNG |\n| `chart-icon-column-grouped-min.png` | Grouped Bar Chart | PNG |\n| `chart-icon-column-stacked-min.png` | Stacked Bar Chart | PNG |\n| `chart-icon-histogram-min.png` | Histogram | PNG |\n| `chart-icon-heat-map-min.png` | Heatmap | PNG |\n| `chart-icon-pyramid.svg` | Pyramid Chart | SVG |\n| `chart-icon-line-min.png` | Line Chart | PNG |\n| `chart-icon-dotted-line-min.png` | Dotted Line Chart | PNG |\n| `chart-icon-area.svg` | Area Chart | SVG |\n| `chart-icon-streamgraph.svg` | Streamgraph | SVG |\n| `chart-icon-lollipop.svg` | Lollipop Chart | SVG |\n| `chart-icon-density.svg` | Density Plot | SVG |\n| `chart-icon-candlestick.svg` | Candlestick Chart | SVG |\n| `chart-icon-waterfall.svg` | Waterfall Chart | SVG |\n| `chart-icon-strip-plot.svg` | Strip Plot | SVG |\n| `chart-icon-radar.svg` | Radar Chart | SVG |\n| `chart-icon-bump.svg` | Bump Chart | SVG |\n| `chart-icon-pie-min.png` | Pie Chart | PNG |\n| `chart-icon-us-map-min.png` | US Map | PNG |\n| `chart-icon-world-map-min.png` | World Map | PNG |\n| `chart-icon-custom-point-min.png` | Custom Point | PNG |\n| `chart-icon-custom-line-min.png` | Custom Line | PNG |\n| `chart-icon-custom-bar-min.png` | Custom Bar | PNG |\n| `chart-icon-custom-rect-min.png` | Custom Rect | PNG |\n| `chart-icon-custom-area-min.png` | Custom Area | PNG |\n| `chart-icon-dot-plot-vertical-min.png` | *(unused — was Lollipop)* | PNG |\n| `chart-icon-table-min.png` | Table | PNG |\n"
  },
  {
    "path": "src/components/ChartTemplates.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart Templates with UI icons.\n *\n * This module wraps the reusable agents-chart template definitions\n * with React icon components for display in the Data Formulator UI.\n * The pure template logic (mark, encoding paths, post-processors) lives\n * in src/lib/agents-chart/templates/.\n */\n\nimport { ChartTemplate } from \"./ComponentType\";\nimport {\n    vlTemplateDefs,\n    vlGetTemplateChannels,\n} from \"../lib/agents-chart\";\nimport InsightsIcon from '@mui/icons-material/Insights';\nimport React from \"react\";\n\n// Import all chart icons statically so they are included in the build\nimport chartIconScatter from '../assets/chart-icon-scatter-min.png';\nimport chartIconLinearRegression from '../assets/chart-icon-linear-regression-min.png';\nimport chartIconDotPlotHorizontal from '../assets/chart-icon-dot-plot-horizontal-min.png';\nimport chartIconBoxPlot from '../assets/chart-icon-box-plot-min.png';\nimport chartIconColumn from '../assets/chart-icon-column-min.png';\nimport chartIconColumnGrouped from '../assets/chart-icon-column-grouped-min.png';\nimport chartIconColumnStacked from '../assets/chart-icon-column-stacked-min.png';\nimport chartIconHistogram from '../assets/chart-icon-histogram-min.png';\nimport chartIconHeatMap from '../assets/chart-icon-heat-map-min.png';\nimport chartIconLine from '../assets/chart-icon-line-min.png';\nimport chartIconDottedLine from '../assets/chart-icon-dotted-line-min.png';\nimport chartIconCustomPoint from '../assets/chart-icon-custom-point-min.png';\nimport chartIconCustomLine from '../assets/chart-icon-custom-line-min.png';\nimport chartIconCustomBar from '../assets/chart-icon-custom-bar-min.png';\nimport chartIconCustomRect from '../assets/chart-icon-custom-rect-min.png';\nimport chartIconCustomArea from '../assets/chart-icon-custom-area-min.png';\nimport chartIconArea from '../assets/chart-icon-area.svg';\nimport chartIconStreamgraph from '../assets/chart-icon-streamgraph.svg';\nimport chartIconDensity from '../assets/chart-icon-density.svg';\nimport chartIconLollipop from '../assets/chart-icon-lollipop.svg';\nimport chartIconPie from '../assets/chart-icon-pie-min.png';\nimport chartIconUSMap from '../assets/chart-icon-us-map-min.png';\nimport chartIconPyramid from '../assets/chart-icon-pyramid.svg';\nimport chartIconWorldMap from '../assets/chart-icon-world-map-min.png';\nimport chartIconDotPlotVertical from '../assets/chart-icon-dot-plot-vertical-min.png';\nimport chartIconCandlestick from '../assets/chart-icon-candlestick.svg';\nimport chartIconWaterfall from '../assets/chart-icon-waterfall.svg';\nimport chartIconStripPlot from '../assets/chart-icon-strip-plot.svg';\nimport chartIconRadar from '../assets/chart-icon-radar.svg';\nimport chartIconBump from '../assets/chart-icon-bump.svg';\nimport chartIconRose from '../assets/chart-icon-rose.svg';\n\n// Chart Icon Component using static imports\nconst ChartIcon: React.FC<{ src: string; alt?: string }> = ({ src, alt = \"\" }) => {\n    return <img src={src} alt={alt} style={{ width: '100%', height: '100%', objectFit: 'contain' }} />;\n};\n\n// ---------------------------------------------------------------------------\n// Icon mapping: chart name → React icon element\n// ---------------------------------------------------------------------------\n\nconst CHART_ICONS: Record<string, any> = {\n    \"Auto\": <InsightsIcon color=\"primary\" />,\n    \"Scatter Plot\": <ChartIcon src={chartIconScatter} />,\n    \"Regression\": <ChartIcon src={chartIconLinearRegression} />,\n    \"Ranged Dot Plot\": <ChartIcon src={chartIconDotPlotHorizontal} />,\n    \"Boxplot\": <ChartIcon src={chartIconBoxPlot} />,\n    \"Bar Chart\": <ChartIcon src={chartIconColumn} />,\n    \"Pyramid Chart\": <ChartIcon src={chartIconPyramid} />,\n    \"Grouped Bar Chart\": <ChartIcon src={chartIconColumnGrouped} />,\n    \"Stacked Bar Chart\": <ChartIcon src={chartIconColumnStacked} />,\n    \"Histogram\": <ChartIcon src={chartIconHistogram} />,\n    \"Heatmap\": <ChartIcon src={chartIconHeatMap} />,\n    \"US Map\": <ChartIcon src={chartIconUSMap} />,\n    \"World Map\": <ChartIcon src={chartIconWorldMap} />,\n    \"Pie Chart\": <ChartIcon src={chartIconPie} />,\n    \"Rose Chart\": <ChartIcon src={chartIconRose} />,\n    \"Line Chart\": <ChartIcon src={chartIconLine} />,\n    \"Dotted Line Chart\": <ChartIcon src={chartIconDottedLine} />,\n    \"Bump Chart\": <ChartIcon src={chartIconBump} />,\n    \"Area Chart\": <ChartIcon src={chartIconArea} />,\n    \"Streamgraph\": <ChartIcon src={chartIconStreamgraph} />,\n    \"Lollipop Chart\": <ChartIcon src={chartIconLollipop} />,\n    \"Density Plot\": <ChartIcon src={chartIconDensity} />,\n    \"Candlestick Chart\": <ChartIcon src={chartIconCandlestick} />,\n    \"Waterfall Chart\": <ChartIcon src={chartIconWaterfall} />,\n    \"Strip Plot\": <ChartIcon src={chartIconStripPlot} />,\n    \"Radar Chart\": <ChartIcon src={chartIconRadar} />,\n    \"Custom Point\": <ChartIcon src={chartIconCustomPoint} />,\n    \"Custom Line\": <ChartIcon src={chartIconCustomLine} />,\n    \"Custom Bar\": <ChartIcon src={chartIconCustomBar} />,\n    \"Custom Rect\": <ChartIcon src={chartIconCustomRect} />,\n    \"Custom Area\": <ChartIcon src={chartIconCustomArea} />,\n};\n\n// ---------------------------------------------------------------------------\n// Build CHART_TEMPLATES by adding icons to library template defs\n// ---------------------------------------------------------------------------\n\nfunction addIcons(defs: { chart: string }[]): ChartTemplate[] {\n    return defs.map(def => ({\n        ...def,\n        icon: CHART_ICONS[def.chart] || <InsightsIcon />,\n    })) as ChartTemplate[];\n}\n\nexport const CHART_TEMPLATES: { [key: string]: ChartTemplate[] } = Object.fromEntries(\n    Object.entries(vlTemplateDefs).map(([category, defs]) => [\n        category,\n        addIcons(defs),\n    ])\n);\n\n// ---------------------------------------------------------------------------\n// Re-exports for backward compatibility\n// ---------------------------------------------------------------------------\n\n// Re-export constants and utilities from the chart engine library\nexport {\n    channels,\n    channelGroups,\n} from '../lib/agents-chart';\n\nexport function getChartTemplate(chartType: string): ChartTemplate | undefined {\n    return Object.values(CHART_TEMPLATES).flat().find(t => t.chart === chartType);\n}\n\nexport const getChartChannels = (chartType: string): string[] => {\n    return vlGetTemplateChannels(chartType);\n}\n"
  },
  {
    "path": "src/components/ComponentType.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../data/types';\nimport { channels, type ChartTemplateDef } from '../lib/agents-chart';\nimport { inferTypeFromValueArray } from '../data/utils';\n\nexport type FieldSource = \"custom\" | \"original\";\n\nexport interface FieldItem {\n    id: string;\n    name: string;\n\n    source: FieldSource;\n    tableRef: string; // which table it belongs to\n}\n\nexport const duplicateField = (field: FieldItem) => {\n    return {\n        id: field.id,\n        name: field.name,\n        source: field.source,\n        tableRef: field.tableRef,\n    } as FieldItem;\n}\n\nexport interface Trigger {\n    tableId: string, // on which table this action is triggered\n\n    chart?: Chart, // what's the intented chart from the user when running formulation\n    instruction: string,\n    displayInstruction: string, // the short instruction that will be displayed to the user\n\n    resultTableId: string,\n}\n\n// Define data cleaning message types\nexport type DataCleanTableOutput = {\n    name: string;\n    context: string;\n    content: {\n        type: 'csv' | 'image_url' | 'web_url';\n        value: string;\n        incomplete?: boolean;\n    };\n};\n\nexport interface DataCleanBlock {\n    id: string; // the id of the item\n\n    items: DataCleanTableOutput[]; // the items that are cleaned in this block\n\n    derive: {\n        sourceId: string | undefined; // the source of the block that leads to this block\n        prompt: string;\n        artifacts: {type: 'image_url' | 'web_url', value: string}[]; // images sent along with the prompt\n    }\n\n    // For output messages  \n    dialogItem?: any; // Store the dialog item from the model response\n}\n\n// Data source types for tracking where data originated\nexport type DataSourceType = 'paste' | 'file' | 'url' | 'stream' | 'database' | 'example' | 'extract';\n\n// Configuration for data source refresh behavior\n// Note: For database sources, connection details are stored in DuckDB backend,\n// not in the frontend. Frontend only manages refresh timing/toggle.\nexport interface DataSourceConfig {\n    type: DataSourceType;\n    \n    // For URL/stream sources - the URL to fetch data from\n    url?: string;\n    \n    // Refresh interval in seconds (used for streams and database auto-refresh)\n    refreshIntervalSeconds?: number;\n    \n    // For database sources - the DuckDB table name (backend knows how to refresh it)\n    databaseTable?: string;\n    \n    // Whether auto-refresh is enabled (frontend controls this for all source types)\n    autoRefresh?: boolean;\n    \n    // Last refresh timestamp\n    lastRefreshed?: number;\n    \n    // Original file name (for file uploads)\n    fileName?: string;\n    \n    // Whether this table can be refreshed (backend has connection info)\n    canRefresh?: boolean;\n}\n\nexport interface DictTable {\n    id: string; // name/id of the table\n    displayId: string; // display id of the table \n    \n    names: string[]; // column names\n    metadata: {[key: string]: {\n        type: Type,\n        semanticType: string, \n        levels: any[],\n        intrinsicDomain?: [number, number],\n        unit?: string,\n    }}; // metadata of the table\n\n    rows: any[]; // table content, each entry is a row\n    derive?: { // how is this table derived\n        source: string[], // which tables are this table computed from\n        code: string,\n        codeSignature?: string, // HMAC-SHA256 signature proving code was generated by the server\n        outputVariable: string, // the Python variable name containing the result DataFrame (required)\n        explanation?: {\n            code: string, // explanation of the code\n            concepts: {\n                field: string,\n                explanation: string\n            }[]\n        },\n        dialog: any[], // the log of how the data is derived with LLM (the LLM conversation log)\n        // tracks how this derivation is triggered, as we as user instruction used to do the formulation,\n        // there is a subtle difference between trigger and source, trigger identifies the occasion when the derivision is called,\n        // source specifies how the deriviation is done from the source tables, they may be the same, but not necessarily\n        // in fact, right now dict tables are all triggered from charts\n        trigger: Trigger,\n    };\n    virtual?: {\n        tableId: string; // the id of the virtual table in the database\n        rowCount: number; // total number of rows in the full table\n    };\n    anchored: boolean; // whether this table is anchored as a persistent table used to derive other tables\n    createdBy: 'user' | 'agent'; // whether this table is created by the user or the agent\n    attachedMetadata: string; // a string of attached metadata explaining what the table is about (used for prompt)\n    \n    // New field: tracks the source of the data and refresh configuration\n    source?: DataSourceConfig;\n    \n    // Content hash for detecting data changes during refresh\n    // Used to avoid unnecessary derived table recalculations when data hasn't changed\n    contentHash?: string;\n}\n\nexport function createDictTable(\n    id: string, rows: any[], \n    derive: {\n        code: string, codeSignature?: string, outputVariable: string, \n        explanation?: {\n            code: string, \n            concepts: {field: string, explanation: string}[]}, \n            source: string[], \n            dialog: any[], \n            trigger: Trigger\n        } | undefined = undefined,\n    virtual: {tableId: string, rowCount: number} | undefined = undefined,\n    anchored: boolean = false,\n    createdBy: 'user' | 'agent' = 'user', // by default, all tables are created by the user\n    attachedMetadata: string = '',\n    source: DataSourceConfig | undefined = undefined,\n) : DictTable {\n    \n    let names = Object.keys(rows[0])\n\n    return {\n        id,\n        displayId: `${id}`,\n        names, \n        rows,\n        metadata: names.reduce((acc, name) => ({\n            ...acc,\n            [name]: {\n                type: inferTypeFromValueArray(rows.map(r => r[name])),\n                semanticType: \"\",\n                levels: []\n            }\n        }), {}),\n        derive,\n        virtual,\n        anchored,\n        createdBy,\n        attachedMetadata,\n        source,\n    }\n}\n\nexport interface ChartInsight {\n    title: string;\n    takeaways: string[];\n    key: string;  // \"chartType|sortedFieldIds\" — used to detect staleness\n}\n\nexport type Chart = { \n    id: string, \n    chartType: string, \n    encodingMap: EncodingMap, \n    tableRef: string, \n    saved: boolean,\n    source: \"user\" | \"trigger\",\n    config?: Record<string, any>,  // additional chart properties defined by the chart template\n    thumbnail?: string,  // PNG data URL for thumbnail display (managed by ChartRenderService, not persisted)\n    insight?: ChartInsight,  // AI-generated insight about the visualization\n}\n\n/** Compute a string key for insight invalidation: chartType|sortedFieldIds */\nexport function computeInsightKey(chart: Chart): string {\n    const fieldIds = Object.values(chart.encodingMap)\n        .map(enc => enc.fieldID)\n        .filter((id): id is string => !!id)\n        .sort();\n    return `${chart.chartType}|${fieldIds.join(',')}`;\n}\n\nexport let duplicateChart = (chart: Chart) : Chart => {\n    return {\n        id: `chart-${Date.now()- Math.floor(Math.random() * 10000)}`,\n        chartType: chart.chartType,\n        encodingMap: JSON.parse(JSON.stringify(chart.encodingMap)) as EncodingMap,\n        tableRef: chart.tableRef,\n        saved: false,\n        source: chart.source,\n        config: chart.config ? JSON.parse(JSON.stringify(chart.config)) : undefined,\n    }\n}\n\n// visualization related definitions\nexport type EncodingMap = { [key in Channel]: EncodingItem; }\n\nexport interface EncodingItem {\n    //channel: Channel, // the channel ID\n    fieldID?: string, // the fieldID\n    dtype?: \"quantitative\" | \"nominal\" | \"ordinal\" | \"temporal\",\n    aggregate?: AggrOp,\n    //sort?: \"ascending\" | \"descending\" | string,\n    sortOrder?: \"ascending\" | \"descending\", // \n    sortBy?: undefined | string, // what values are used to sort the encoding\n    scheme?: string\n}\n\n\n\n/**\n * ChartTemplate extends the library's ChartTemplateDef with a UI icon.\n * The library definition is icon-free for reusability; this type adds\n * the React element used in the Data Formulator UI.\n */\nexport type ChartTemplate = ChartTemplateDef & {\n    icon: any;\n}\n\nexport const AGGR_OP_LIST = [\"count\", \"sum\", \"average\"] as const\n\nexport type AggrOp = typeof AGGR_OP_LIST[number];\nexport type Channel = typeof channels[number];\n\nexport interface EncodingDropResult {\n    channel: Channel\n}\n"
  },
  {
    "path": "src/components/FunComponents.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React from 'react';\nimport { Typography, SxProps } from \"@mui/material\";\n\nexport let ThinkingBufferEffect :React.FC<{text: string, sx?: SxProps}> = ({text, sx}) => {\n    return <Typography sx={{ \n        margin: 'auto 0', padding: 0.5, fontSize: 10, color: \"darkgray\", \n        maxLines: 3, display: 'flex', alignItems: 'center', gap: 0.3, ...sx }}>\n        {text.replace(/[^\\s]/g, '·')}\n        <Typography sx={{ \n            fontSize: 10, opacity: 0.5, \n            transform: 'rotate(90deg)',\n            color: \"darkgray\", animation: 'writing 1.5s ease-in-out infinite',\n        '@keyframes writing': {\n            '0%, 100%': {\n                transform: 'translate(0, 0) rotate(80deg)',\n            },\n            '50%': {\n                transform: 'translate(2px, 2px) rotate(95deg)',\n            }\n        } }}>✏️</Typography>\n    </Typography>\n}"
  },
  {
    "path": "src/components/RotatingTextBlock.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport { Box, SxProps } from '@mui/material';\n\ninterface RotatingTextBlockProps {\n    texts: string[];\n    rotationInterval?: number;\n    transitionDuration?: number;\n    sx?: SxProps;\n}\n\nexport const RotatingTextBlock: React.FC<RotatingTextBlockProps> = ({\n    texts,\n    rotationInterval = 3000,\n    transitionDuration = 500,\n    sx\n}) => {\n    const [currentTextIndex, setCurrentTextIndex] = useState(0);\n    const [isTransitioning, setIsTransitioning] = useState(false);\n\n    // Effect for rotating text with carousel transition\n    useEffect(() => {\n        const interval = setInterval(() => {\n            setIsTransitioning(true);\n            setTimeout(() => {\n                setCurrentTextIndex((prevIndex) => (prevIndex + 1) % texts.length);\n                setIsTransitioning(false);\n            }, transitionDuration);\n        }, rotationInterval);\n\n        return () => clearInterval(interval);\n    }, [texts.length, rotationInterval, transitionDuration]);\n\n    return (\n        <Box\n            component=\"span\"\n            sx={{\n                display: 'inline',\n                position: 'relative',\n                fontWeight: 500,\n                opacity: isTransitioning ? 0 : 1,\n                transition: `opacity ${transitionDuration}ms ease-in-out`,\n                ...sx\n            }}\n        >\n            {texts[currentTextIndex]}\n        </Box>\n    );\n};\n"
  },
  {
    "path": "src/components/chartUtils.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart recommendation utilities.\n *\n * Recommendation engine has moved to the agents-chart library.\n * Use vlRecommendEncodings / ecRecommendEncodings / etc. directly.\n */\n\nexport { vlRecommendEncodings } from '../lib/agents-chart';\n"
  },
  {
    "path": "src/data/column.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from './types';\nimport { computeUniqueValues } from './utils';\n\nexport default class Column {\n    protected _data: any[];\n\n    protected _type: Type;\n\n    protected _uniques: any[];\n\n    constructor(data: any[], type?: Type) {\n        this._data = data;\n        this._type = type || Type.String;\n        // Should sort uniques based on type?\n        this._uniques = computeUniqueValues(this._data);\n    }\n\n    get uniques(): any[] {\n        return this._uniques;\n    }\n\n    get type(): Type {\n        return this._type;\n    }\n\n    get length(): number {\n        return this._data.length;\n    }\n\n    get(row: number): any {\n        return this._data[row];\n    }\n}\n"
  },
  {
    "path": "src/data/table.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport Column from './column';\nimport { Type } from './types';\n\nconst columnsToObjects = (columns: Map<string, Column>, names: string[], nrows: number): any[] => {\n    const objects = [];\n    for (let r = 0; r < nrows; r++) {\n        const o: any = {};\n        for (let c = 0; c < names.length; c++) {\n            o[names[c]] = columns.get(names[c])?.get(r);\n        }\n        objects.push(o);\n    }\n    return objects;\n};\n\nexport class ColumnTable {\n    protected _data: Map<string, Column>;\n\n    protected _names: string[];\n\n    protected _objects: any[];\n\n    protected _nrows: number;\n\n    constructor(columns: Map<string, Column>, names: string[]) {\n        this._data = columns;\n        this._names = names;\n        const nrows = columns.get(names[0])?.length;\n        this._nrows = nrows ? nrows : 0;\n        this._objects = columnsToObjects(this._data, this._names, this._nrows);\n    }\n\n    public numCols = (): number => {\n        return this._names.length;\n    };\n\n    public numRows = (): number => {\n        return this._nrows;\n    };\n\n    public column = (name: string): Column | undefined => {\n        return this._data.get(name);\n    };\n\n    public columnAt = (col: number): Column | undefined => {\n        return this._data.get(this._names[col]);\n    };\n\n    public columns = (): Map<string, Column> => {\n        return this._data;\n    };\n\n    public objects = (): any[] => {\n        return this._objects;\n    };\n\n    public names = (): string[] => {\n        return this._names;\n    };\n\n    public metadata = (): [string, Type][] => {\n        return this._names.map((name) => [name, (this.column(name) as Column).type])\n    }\n\n    public get = (name: string, row: number = 0): any => {\n        const column = this.column(name);\n        return column?.get(row);\n    };\n}\n"
  },
  {
    "path": "src/data/types.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport enum Type {\n    String = 'string',\n    Boolean = 'boolean',\n    Integer = 'integer',\n    Number = 'number',\n    Date = 'date',\n    Auto = 'auto'\n    // Time = 'time',\n    // DateTime = 'datetime',\n}\n\nexport const TypeList = [Type.Auto, Type.Number, Type.Date, Type.String]; //[Type.Boolean, Type.Integer, Type.Number, Type.Date, Type.String];\n\nconst coerceBoolean = (v: any): boolean | null => (v == null || v === '' ? null : v === 'false' ? false : !!v);\nconst coerceNumber = (v: any): number | null => (v == null || v === '' ? null : +v);\nconst coerceDate = (v: any, format?: any) => {\n    // const d = format ? format : Date;\n    //return v == null || v === '' ? null : new Date(v);\n    //TODO: follow the standard date\n    return v;\n};\nconst coerceString = (v: any) => (v == null || v === '' ? null : v);\n\nexport const CoerceType = {\n    boolean: coerceBoolean,\n    number: coerceNumber,\n    integer: coerceNumber,\n    date: coerceDate,\n    string: coerceString,\n    auto: coerceString,\n};\n\nconst testBoolean = (v: any): boolean => v === 'true' || v === 'false' || isBoolean(v);\nconst testNumber = (v: any): boolean => !isNaN(+v) && !isDate(v);\nconst testInteger = (v: any): boolean => testNumber(v) && (v = +v) === ~~v;\nconst testDate = (v: any): boolean => !isNaN(Date.parse(v));\nconst testString = (v: any): boolean => true;\n\nexport const TestType = {\n    boolean: testBoolean,\n    number: testNumber,\n    integer: testInteger,\n    date: testDate,\n    string: testString,\n    auto: testString,\n};\n\nexport const isBoolean = (v: any) => v === true || v === false || Object.prototype.toString.call(v) === '[object Boolean]';\n\nexport const isNumber = (v: any) => typeof v === 'number' || Object.prototype.toString.call(v) === '[object Number]';\n\nexport const isDate = (v: any) => Object.prototype.toString.call(v) === '[object Date]';\n\nexport const getDType = (type: Type | undefined, domain: any[]): string => {\n    // test the data type on the fly if it is not there\n    return type === Type.Integer || type === Type.Number ? 'quantitative'\n        : type === Type.Boolean ? 'nominal'\n        : type === Type.Date ? 'temporal' // date?\n        : type === Type.String ? 'nominal'\n        : type === Type.Auto ? getDType(testType(domain) as Type, domain)\n        : 'nominal';\n};\n\nexport const testType = (values: any[]) => {\n    if (values.length == 0) {\n        return \"string\"\n    }\n    if (values.filter(v => !isBoolean(v)).length == 0) {\n        return \"boolean\"\n    }\n    if (values.filter(v => !testNumber(v)).length == 0) {\n        return \"number\"\n    }\n    if (values.filter(v => !testDate(v)).length == 0) {\n        return \"date\"\n    }\n    return \"string\"\n}"
  },
  {
    "path": "src/data/utils.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as d3 from 'd3';\nimport Column from './column';\nimport * as ExcelJS from 'exceljs';\n\nimport { DictTable } from '../components/ComponentType';\nimport { CoerceType, TestType, Type } from './types';\nimport { ColumnTable } from './table';\n\nexport const loadTextDataWrapper = (title: string, text: string, fileType: string): DictTable | undefined => {\n    \n    let tableName = title;\n    //let tableName = title.replace(/\\.[^/.]+$/ , \"\");\n\n    let table = undefined;\n    if (fileType == \"text/csv\" || fileType == \"text/tab-separated-values\") {\n        table = createTableFromText(tableName, text);\n    } else if (fileType == \"application/json\") {\n        table = createTableFromFromObjectArray(tableName, JSON.parse(text), true);\n    } \n    return table;\n};\n\nexport const createTableFromText = (title: string, text: string, context?: string): DictTable | undefined => {\n    // Check for empty strings, bad data, anything else?\n    if (!text || text.trim() === '') {\n        console.log('Invalid text provided for data. Could not load.');\n        return undefined;\n    }\n\n    // Determine if the input text is tab or comma separated values\n    // Compute the number of tabs and lines\n    let tabNum = 0,\n        lineNum = 0;\n    for (let i = 0; i < text.length; i++) {\n        if (text.charAt(i) === '\\t') tabNum++;\n        if (text.charAt(i) === '\\n') lineNum++;\n    }\n\n    // If one or more tab per line, then it is tab separated values\n    // Should check the data file as well for the ending\n    const isTabSeparated = tabNum / lineNum >= 1;\n\n    // Use d3.dsvFormat to create a custom parser that properly handles quoted fields\n    // This ensures commas inside quoted fields won't be treated as delimiters\n    const rows = isTabSeparated \n        ? d3.tsvParseRows(text) \n        : d3.dsvFormat(',').parseRows(text, (row, index) => {\n            // Process each row to ensure proper type handling\n            return row;\n          });\n    \n    // Handle duplicate column names by appending _1, _2, etc.\n    let colNames: string[] = [];\n    for (let i = 0; i < rows[0].length; i++) {\n        let col = rows[0][i];   \n        if (colNames.includes(col)) {\n            let k = 1;\n            while (colNames.includes(`${col}_${k}`)) {\n                k++;\n            }\n            colNames.push(`${col}_${k}`);\n        } else {\n            colNames.push(col);\n        }\n    }\n\n    let values = rows.slice(1);\n    let records = values.map(row => {\n        let record: any = {};\n        for (let i = 0; i < colNames.length; i++) {\n            record[colNames[i]] = row[i];\n        }\n        return record;\n    });\n\n    return createTableFromFromObjectArray(title, records, true, undefined, context);\n};\n\nexport const createTableFromFromObjectArray = (title: string, values: any[], anchored: boolean, derive?: any, context?: string): DictTable => {\n    /*\n    * title: the title of the table\n    * values: the values of the table\n    * anchored: whether the table is anchored\n    * derive: the derive of the table\n    * context: the context of the table that will be attached to table metadata\n    */\n\n    const len = values.length;\n    let names: string[] = [];\n    let cleanNames: string[] = [];\n    const columns = new Map<string, Column>();\n\n    if (len) {\n        names = Object.keys(values[0]);\n        cleanNames = names.map((name, i) => {\n            if (name == \"\") {\n                let newName = `c${i}`;\n                let k = 0;\n                while(names.includes(newName)) {\n                    newName = `c${i}_${k}`\n                    k = k + 1;\n                } \n                return newName;\n            }\n            // clean up messy column names\n            if (name && name.includes(\".\")) {\n                return name.replace(\".\", \"_\");\n            }\n            return name;\n        })\n\n        for (let i = 0; i < names.length; i++) {\n            let col = [];\n            for (let r = 0; r < len; r++) {\n                col.push(values[r][names[i]]);\n            }\n            const type = inferTypeFromValueArray(col);\n            col = coerceValueArrayFromTypes(col, type);\n            columns.set(cleanNames[i], new Column(col, type));\n        }\n    }\n\n    let columnTable = new ColumnTable(columns, cleanNames);\n\n    return  {\n        id: title,\n        displayId: `${title}`,\n        names: columnTable.names(),\n        metadata: columnTable.names().reduce((acc, name) => ({\n            ...acc,\n            [name]: {\n                type: (columnTable.column(name) as Column).type,\n                semanticType: \"\",\n                levels: []\n            }\n        }), {}),\n        rows: columnTable.objects(),\n        derive: derive,\n        anchored: anchored,\n        createdBy: \"user\",\n        attachedMetadata: context || ''\n    }\n};\n\nexport const inferTypeFromValueArray = (values: any[]): Type => {\n    let types: Type[] = [Type.Boolean, Type.Integer, Type.Date, Type.Number, Type.String];\n\n    for (let i = 0; i < values.length; i++) {\n        const v = values[i];\n\n        for (let t = 0; t < types.length; t++) {\n            if (v != null && !TestType[types[t]](v)) {\n                types.splice(t, 1);\n                t -= 1;\n            }\n        }\n    }\n\n    return types[0];\n};\n\nexport const convertTypeToDtype = (type: Type | undefined): string => {\n    return type === Type.Integer || type === Type.Number\n        ? 'quantitative'\n        : type === Type.Boolean\n        ? 'boolean'\n        : type === Type.Date\n        ? 'date'\n        : 'nominal';\n};\n\nexport const coerceValueArrayFromTypes = (values: any[], type: Type): any[] => {\n    return values.map((v) => CoerceType[type](v));\n};\n\nexport const coerceValueFromTypes = (value: any, type: Type): any => {\n    return CoerceType[type](value);\n};\n\nexport const computeUniqueValues = (values: any[]): any[] => {\n    return Array.from(new Set(values));\n};\n\nexport function tupleEqual(a: any[], b: any[]) {\n    // check if two tuples are equal\n    if (a === b) return true;\n    if (a == null || b == null) return false;\n    if (a.length !== b.length) return false;\n    for (let i = 0; i < a.length; ++i) {\n        if (a[i] !== b[i]) return false;\n    }\n    return true;\n}\n\nexport const loadBinaryDataWrapper = async (title: string, arrayBuffer: ArrayBuffer): Promise<DictTable[]> => {\n    try {\n        // Read the Excel file\n        const workbook = new ExcelJS.Workbook();\n        await workbook.xlsx.load(arrayBuffer);\n        \n        // Create tables for each sheet\n        const tables: DictTable[] = [];\n        \n        workbook.eachSheet((worksheet) => {\n            try {\n                const jsonData: any[] = [];\n\n                // Get the first row as headers\n                const headerRow = worksheet.getRow(1);\n                const headers: string[] = [];\n                headerRow.eachCell((cell, colNumber) => {\n                    headers[colNumber - 1] = cell.value?.toString() || `Column${colNumber}`;\n                });\n\n                if (headers.length === 0) {\n                    return;\n                }\n\n                // Process data rows (skip header row)\n                worksheet.eachRow((row, rowNumber) => {\n                    if (rowNumber === 1) return; // Skip header row\n\n                    const rowData: any = {};\n                    row.eachCell((cell, colNumber) => {\n                        const header = headers[colNumber - 1] || `Column${colNumber}`;\n                        rowData[header] = cell.value;\n                    });\n\n                    // Only add row if it has data\n                    if (Object.keys(rowData).length > 0) {\n                        jsonData.push(rowData);\n                    }\n                });\n\n                if (jsonData.length === 0) {\n                    return;\n                }\n\n                // Create a table from the JSON data with sheet name included in the title\n                const sheetTable = createTableFromFromObjectArray(`${title}-${worksheet.name}`, jsonData, true);\n                tables.push(sheetTable);\n            } catch (error) {\n                console.error(`Error processing sheet ${worksheet.name}:`, error);\n            }\n        });\n        \n        return tables;\n    } catch (error) {\n        console.error('Error processing Excel file:', error);\n        return [];\n    }\n};\n\n/**\n * Exports a DictTable to DSV format using d3.dsvFormat\n * @param table - The DictTable to export\n * @param delimiter - The delimiter to use (e.g., \",\" for CSV, \"\\t\" for TSV)\n * @returns DSV string representation of the table\n */\nexport const exportTableToDsv = (table: DictTable, delimiter: string): string => {\n    // Use d3.dsvFormat to convert the rows array to DSV\n    return d3.dsvFormat(delimiter).format(table.rows);\n};\n"
  },
  {
    "path": "src/icons.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React from 'react';\n\nimport { SvgIcon, SvgIconProps } from '@mui/material';\nimport { Box, SxProps } from '@mui/material';\n\n// ── MUI domain icon re-exports ──────────────────────────────────────────\n// Centralized so every file imports domain icons from one place.\n// Chart-template icons (managed in ChartTemplates.tsx) are NOT included.\nexport { default as TableIcon } from '@mui/icons-material/TableRowsOutlined';\nexport { default as StreamIcon } from '@mui/icons-material/Stream';\nexport { default as AgentIcon } from '@mui/icons-material/PrecisionManufacturing';\nexport { default as InsightIcon } from '@mui/icons-material/Insights';\nexport { default as AnchorIcon } from '@mui/icons-material/Anchor';\n\n// ── Custom SVG domain icons ─────────────────────────────────────────────\n\n/** Grid-lines-in-a-rectangle icon — represents a database table. */\n// export const TableIcon: React.FC<{ sx?: SxProps }> = ({ sx }) => (\n//     <Box\n//         component=\"svg\"\n//         viewBox=\"0 0 16 16\"\n//         sx={{\n//             width: 16,\n//             height: 16,\n//             ...sx\n//         }}\n//     >\n//         <rect x=\"2\" y=\"2\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.2\" rx=\"0.5\"/>\n//         <line x1=\"2\" y1=\"6\" x2=\"14\" y2=\"6\" stroke=\"currentColor\" strokeWidth=\"1\"/>\n//         <line x1=\"2\" y1=\"10\" x2=\"14\" y2=\"10\" stroke=\"currentColor\" strokeWidth=\"1\"/>\n//         <line x1=\"6\" y1=\"2\" x2=\"6\" y2=\"14\" stroke=\"currentColor\" strokeWidth=\"1\"/>\n//         <line x1=\"10\" y1=\"2\" x2=\"10\" y2=\"14\" stroke=\"currentColor\" strokeWidth=\"1\"/>\n//     </Box>\n// );\n\n/** Two overlapping rectangles — represents a database view. */\nexport const DatabaseViewIcon: React.FC<{ sx?: SxProps }> = ({ sx }) => (\n    <Box\n        component=\"svg\"\n        viewBox=\"0 0 16 16\"\n        sx={{\n            width: 16,\n            height: 16,\n            ...sx\n        }}\n    >\n        <rect x=\"2\" y=\"2\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.2\" rx=\"0.5\" opacity=\"0.8\"/>\n        <rect x=\"4\" y=\"4\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.2\" rx=\"0.5\"/>\n    </Box>\n);\n\n// ── Data-type icons (existing) ──────────────────────────────────────────\n\nconst BooleanIcon: React.FunctionComponent<SvgIconProps> = (props) => {\n    return (\n        <SvgIcon {...props}>\n            <path d=\"M8.7,2.77H5.89v8.39H4.23V2.77H1.42V1.36H8.7Z\" />\n            <path d=\"M22,14.05H18.34V17H21.7v1.4H18.34v4.09H16.68V12.64H22Z\" />\n            <rect x=\"0.74\" y=\"11.45\" width=\"22.63\" height=\"1\" transform=\"translate(-4.92 12.02) rotate(-45)\" />\n        </SvgIcon>\n    );\n};\n\nconst StringIcon: React.FunctionComponent<SvgIconProps> = (props) => {\n    return (\n        <SvgIcon {...props}>\n            <path d=\"M1,18.55l3.67-9.8H6.57l3.64,9.8H8.38L7.56,16.2H3.64l-.8,2.35Zm3.05-3.71h3L5.77,11c0-.1-.06-.21-.09-.31s0-.23-.07-.38h0c0,.13-.05.25-.07.36L5.41,11Z\" />\n            <path d=\"M10.62,10.7V.9h3.17a3.66,3.66,0,0,1,2.26.61,2,2,0,0,1,.81,1.7,2.28,2.28,0,0,1-.45,1.41,2.39,2.39,0,0,1-1.23.85v0a2.43,2.43,0,0,1,1.55.75,2.24,2.24,0,0,1,.58,1.59,2.55,2.55,0,0,1-.94,2.08,3.67,3.67,0,0,1-2.45.78Zm1.66-8.47V5h1.09a1.91,1.91,0,0,0,1.28-.4,1.34,1.34,0,0,0,.47-1.09,1.14,1.14,0,0,0-.44-1,2.17,2.17,0,0,0-1.31-.32Zm0,4.11v3h1.39A2.08,2.08,0,0,0,15.06,9a1.44,1.44,0,0,0,.5-1.15A1.26,1.26,0,0,0,15,6.72a2.48,2.48,0,0,0-1.49-.38Z\" />\n            <path d=\"M22.39,21.52a6.46,6.46,0,0,1-1.45.51,6.72,6.72,0,0,1-1.53.16,4.72,4.72,0,0,1-3.54-1.31,5,5,0,0,1-1.27-3.61A5.16,5.16,0,0,1,16,13.51a4.9,4.9,0,0,1,3.69-1.45,7.28,7.28,0,0,1,1.37.12,6.54,6.54,0,0,1,1.26.4l-.55,1.36a4.91,4.91,0,0,0-2.05-.42,3.23,3.23,0,0,0-2.42,1,3.65,3.65,0,0,0-.95,2.67,3.7,3.7,0,0,0,.87,2.6,3,3,0,0,0,2.35,1,4.65,4.65,0,0,0,2.16-.56Z\" />\n        </SvgIcon>\n    );\n};\n\nconst NumericalIcon: React.FunctionComponent<SvgIconProps> = (props) => {\n    return (\n        <SvgIcon {...props}>\n            <path d=\"M6.5,19.05H4.88v-8a4.23,4.23,0,0,1-.87.48,7.43,7.43,0,0,1-1.07.4l-.45-1.35A9.4,9.4,0,0,0,4.21,10,8.16,8.16,0,0,0,5.65,9H6.5Z\" />\n            <path d=\"M9.55,11.62V11a3.59,3.59,0,0,1,.2-1.22,3.46,3.46,0,0,1,.54-1,4.79,4.79,0,0,1,.83-.86c.32-.26.67-.54,1.06-.82A7.58,7.58,0,0,0,13,6.47a5.14,5.14,0,0,0,.56-.62,1.88,1.88,0,0,0,.34-.62A2.55,2.55,0,0,0,14,4.49a1.51,1.51,0,0,0-.4-1.09A1.44,1.44,0,0,0,12.5,3a2.94,2.94,0,0,0-1.12.24A3.57,3.57,0,0,0,10.26,4L9.37,3a5.14,5.14,0,0,1,1.54-1,4.91,4.91,0,0,1,1.79-.32,2.89,2.89,0,0,1,2.17.79,2.54,2.54,0,0,1,.78,1.86,3.63,3.63,0,0,1-.18,1.21,3.59,3.59,0,0,1-.48.91,4.68,4.68,0,0,1-.74.81,10.42,10.42,0,0,1-.93.74l-.9.64a4.37,4.37,0,0,0-.62.55,2.29,2.29,0,0,0-.37.52,1.3,1.3,0,0,0-.12.55h4.52v1.39Z\" />\n            <path d=\"M16.39,21.48l.7-1.11a4.36,4.36,0,0,0,1,.5,3.6,3.6,0,0,0,1.08.16,2,2,0,0,0,1.43-.46,1.49,1.49,0,0,0,.46-1.12,1.44,1.44,0,0,0-.63-1.28,3.25,3.25,0,0,0-1.81-.42h-.81V16.46h.75a2.84,2.84,0,0,0,1.64-.39,1.41,1.41,0,0,0,.54-1.24,1.28,1.28,0,0,0-.39-1,1.5,1.5,0,0,0-1-.34,3,3,0,0,0-1,.17,4.17,4.17,0,0,0-1,.51l-.7-1.07A5.05,5.05,0,0,1,18,12.41a4.9,4.9,0,0,1,1.52-.22,3.12,3.12,0,0,1,2.07.66,2.18,2.18,0,0,1,.8,1.76A2.42,2.42,0,0,1,22,16.12a2.56,2.56,0,0,1-1.36.9v0a2.53,2.53,0,0,1,1.54.77,2.16,2.16,0,0,1,.6,1.56,2.69,2.69,0,0,1-.93,2.14,3.62,3.62,0,0,1-2.47.8,5.44,5.44,0,0,1-1.55-.2A5.64,5.64,0,0,1,16.39,21.48Z\" />\n        </SvgIcon>\n    );\n};\n\nconst DateIcon: React.FunctionComponent<SvgIconProps> = (props) => {\n    return (\n        <SvgIcon {...props}>\n            <path d=\"M18,3.5v-1H17v1H7v-1H6v1H2.5v17h19V3.5Zm2.5,16H3.5V8.5h17Zm0-12H3.5v-3H6v1H7v-1H17v1h1v-1h2.5Z\" />\n            <rect x=\"9.17\" y=\"9.68\" width=\"2\" height=\"2\" />\n            <rect x=\"12.83\" y=\"9.68\" width=\"2\" height=\"2\" />\n            <rect x=\"16.5\" y=\"9.68\" width=\"2\" height=\"2\" />\n            <rect x=\"5.5\" y=\"13\" width=\"2\" height=\"2\" />\n            <rect x=\"9.17\" y=\"13\" width=\"2\" height=\"2\" />\n            <rect x=\"12.83\" y=\"13\" width=\"2\" height=\"2\" />\n            <rect x=\"16.5\" y=\"13\" width=\"2\" height=\"2\" />\n            <rect x=\"5.5\" y=\"16.32\" width=\"2\" height=\"2\" />\n            <rect x=\"9.17\" y=\"16.32\" width=\"2\" height=\"2\" />\n        </SvgIcon>\n    );\n};\n\nconst UnknownIcon: React.FunctionComponent<SvgIconProps> = (props) => {\n    return (\n        <SvgIcon {...props}>\n            <path d=\"M10.22,15.43c-.07-.18-.12-.42-.17-.71-.05-.29-.08-.58-.08-.86,0-.44,.09-.84,.27-1.2,.18-.36,.4-.69,.66-1.01s.55-.61,.86-.9c.31-.29,.59-.57,.86-.85s.49-.57,.66-.87,.27-.64,.27-1c0-.33-.07-.61-.2-.85-.13-.24-.31-.45-.54-.61s-.49-.29-.78-.36c-.29-.08-.61-.12-.94-.12-1.08,0-2.11,.48-3.09,1.45v-2.51c1.19-.7,2.42-1.04,3.7-1.04,.59,0,1.14,.08,1.66,.23s.98,.38,1.37,.67c.39,.3,.7,.67,.92,1.11,.22,.44,.34,.96,.34,1.54s-.09,1.06-.28,1.49-.43,.84-.71,1.2-.59,.69-.92,.97c-.33,.28-.64,.57-.92,.85-.29,.28-.52,.58-.71,.88-.19,.3-.28,.64-.28,1.01,0,.31,.04,.59,.12,.85,.08,.25,.16,.47,.24,.64h-2.29Zm1.24,4.6c-.41,0-.78-.14-1.1-.42-.3-.28-.46-.62-.46-1.02s.15-.75,.46-1.02c.31-.29,.68-.43,1.1-.43s.78,.15,1.09,.43c.3,.27,.46,.61,.46,1.02s-.15,.75-.46,1.02c-.32,.28-.68,.42-1.09,.42Z\" />\n        </SvgIcon>\n    );\n};\n\nexport { BooleanIcon, NumericalIcon, StringIcon, DateIcon, UnknownIcon };\n"
  },
  {
    "path": "src/index.css",
    "content": "@import '@fontsource/roboto/300.css';\n@import '@fontsource/roboto/400.css';\n@import '@fontsource/roboto/500.css';\n@import '@fontsource/roboto/700.css';\n\nhtml,\nbody {\n    height: 100%;\n    margin: 0;\n    /* transform: translateZ(0); */\n    overflow: hidden;\n}\n\n#root {\n    height: 100%;\n    margin: 0;\n    overflow: auto;\n}\n\n/* Sharp window wipe animation */\n@keyframes windowWipe {\n    0% {\n        transform: translateX(-100%);\n        opacity: 0;\n    }\n    5% {\n        opacity: 1;\n    }\n    95% {\n        opacity: 1;\n    }\n    100% {\n        transform: translateX(100%);\n        opacity: 0;\n    }\n}\n\n.window-wipe {\n    position: relative;\n    overflow: hidden;\n}\n\n.window-wipe::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: linear-gradient(90deg, \n        transparent 0%, \n        transparent 30%, \n        rgba(255, 255, 255, 0.3) 40%,\n        rgba(255, 255, 255, 1) 50%, \n        rgba(255, 255, 255, 0.3) 60%,\n        transparent 70%, \n        transparent 100%);\n    animation: windowWipe 2s ease-out infinite;\n    z-index: 1;\n    pointer-events: none;\n    box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);\n}\n\n\n"
  },
  {
    "path": "src/index.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React from 'react';\nimport './index.css';\n\nimport store, { persistor } from './app/store'\nimport { Provider } from 'react-redux'\n\nimport { AppFC } from './app/App';\n\nimport { PersistGate } from 'redux-persist/integration/react'\nimport { createRoot } from 'react-dom/client';\n\n\nconst domNode = document.getElementById('root') as HTMLElement;\nconst root = createRoot(domNode);\n\n\nroot.render(<React.StrictMode>\n        <Provider store={store}>\n            <PersistGate loading={null} persistor={persistor}>\n                <AppFC />\n            </PersistGate>\n        </Provider>\n</React.StrictMode>);\n"
  },
  {
    "path": "src/lib/agents-chart/README.md",
    "content": "# agents-chart\n\nA semantic-level visualization library that compiles data + semantic annotations\ninto chart specifications for multiple rendering backends. The LLM outputs only\nchart type, field assignments, and a **semantic type** per field (e.g. `Revenue`,\n`Rank`, `CategoryCode`). A deterministic compiler derives all low-level\nparameters — sizing, zero-baseline, formatting, color schemes, and mark\ntemplates — so charts look good *and* stay editable without calling the LLM again.\n\nPure TypeScript · No UI framework dependencies · Data-in, spec-out\n\n> For full motivation & comparisons, see [docs/story.md](docs/story.md).\n> For architecture details, see [docs/design_v3.md](docs/design_v3.md).\n\n---\n\n## Why\n\nLLM-generated chart specs face a dilemma:\n\n| Approach | Looks good | Editable | Bespoke charts | Cost to re-encode |\n|----------|:---:|:---:|:---:|:---:|\n| Library defaults | ✗ | ✓ | ✗ | 0 |\n| LLM-tuned spec | ✓ | ✗ | Sometimes | 1 LLM call |\n| **agents-chart** | **✓** | **✓** | **✓** | **0** |\n\n**Simple specs** are editable but look bad (wrong sizing, misleading\nencodings). **Polished specs** look great but are brittle (hard-coded\nvalues break on every field swap). agents-chart resolves this: when a user\nswaps fields, changes chart type, or adds facets for exploration, the\ncompiler re-derives all parameters automatically — no LLM call needed.\n\nBecause the output is native library code (Vega-Lite, ECharts, or Chart.js),\nusers retain full control over aesthetic fine-tuning — fonts, colors, legends,\nannotations — using each library's own API. There is no abstraction tax or\nreduced expressiveness.\n\n### Key insight: semantic types as the contract\n\nInstead of asking the LLM to set dozens of low-level parameters, we ask\nit one thing: **what does this data mean?** — expressed as a semantic type.\n\n```\nSemantic type (e.g. \"Revenue\")\n    ├── Encoding type:   quantitative\n    ├── Zero baseline:   true\n    ├── Domain padding:  0%\n    ├── Scale direction: normal\n    ├── Axis formatting: \"$,.0f\"\n    ├── Color scheme:    sequential\n    └── Sizing model:    per-axis stretch\n```\n\nWhen the user swaps a field, the compiler re-derives everything from the new\nsemantic type. No hard-coded constants go stale. No LLM call needed.\n\n### The workflow\n\n```\n1. LLM generates:   chart type + semantic types   (~10-line JSON)\n2. User edits:      swap field / change mark / add facet → compiler handles it (no AI)\n3. Fine-tune (2%):  edit the generated spec directly for bespoke styling\n```\n\n---\n\n## Quick start\n\n### Vega-Lite\n\n```ts\nimport { assembleVegaLite } from './lib/agents-chart';\n\nconst spec = assembleVegaLite({\n  data: { values: myData },\n  semantic_types: { weight: 'Quantity', mpg: 'Quantity', origin: 'Country' },\n  chart_spec: {\n    chartType: 'Scatter Plot',\n    encodings: { x: { field: 'weight' }, y: { field: 'mpg' }, color: { field: 'origin' } },\n    canvasSize: { width: 400, height: 300 },\n  },\n});\n```\n\n### ECharts\n\n```ts\nimport { assembleECharts } from './lib/agents-chart';\n\nconst option = assembleECharts({\n  data: { values: myData },\n  semantic_types: { weight: 'Quantity', mpg: 'Quantity' },\n  chart_spec: {\n    chartType: 'Scatter Plot',\n    encodings: { x: { field: 'weight' }, y: { field: 'mpg' } },\n  },\n});\n```\n\n### Chart.js\n\n```ts\nimport { assembleChartjs } from './lib/agents-chart';\n\nconst config = assembleChartjs({\n  data: { values: myData },\n  semantic_types: { weight: 'Quantity' },\n  chart_spec: { chartType: 'Bar Chart', encodings: { x: { field: 'category' }, y: { field: 'value' } } },\n});\n```\n\n---\n\n## Architecture\n\n```\nindex.ts                ← public API (re-exports core/ + all backends)\n\ncore/                   ← target-language-agnostic\n  types.ts              ← shared type definitions (ChartAssemblyInput, ChartTemplateDef, …)\n  semantic-types.ts     ← ~70 semantic types + VisCategory helpers\n  decisions.ts          ← pure decision functions (layout, encoding type)\n  resolve-semantics.ts  ← Phase 0: semantic resolution\n  compute-layout.ts     ← Phase 1: layout computation\n  filter-overflow.ts    ← overflow filtering\n\nvegalite/               ← Vega-Lite backend\n  assemble.ts           ← assembleVegaLite() orchestrator\n  instantiate-spec.ts   ← Phase 2: VL spec instantiation\n  templates/            ← chart templates (bar, scatter, bump, …)\n\necharts/                ← ECharts backend\n  assemble.ts           ← assembleECharts() orchestrator\n  instantiate-spec.ts   ← Phase 2: EC option instantiation\n  templates/            ← chart templates\n\nchartjs/                ← Chart.js backend\n  assemble.ts           ← assembleChartjs() orchestrator\n  instantiate-spec.ts   ← Phase 2: CJS config instantiation\n  templates/            ← chart templates\n```\n\n### Type resolution pipeline\n\n```\n  semantic type → getVisCategory() → VisCategory → channel/chart rules → encoding type\n                                      ↑\n            (fallback: inferVisCategory() inspects raw data)\n```\n\n---\n\n## Public API\n\n### Assembly functions\n\nEach backend has its own assembly function. All accept the same\n`ChartAssemblyInput` shape:\n\n| Function | Output | Import |\n|----------|--------|--------|\n| `assembleVegaLite(input)` | Vega-Lite spec | `import { assembleVegaLite } from './lib/agents-chart'` |\n| `assembleECharts(input)` | ECharts option object | `import { assembleECharts } from './lib/agents-chart'` |\n| `assembleChartjs(input)` | Chart.js config object | `import { assembleChartjs } from './lib/agents-chart'` |\n\n### Input types\n\n```ts\ninterface ChartAssemblyInput {\n  data: { values: any[] } | { url: string };  // inline rows or URL\n  semantic_types?: Record<string, string>;     // field → semantic type\n  chart_spec: {\n    chartType: string;                         // e.g. \"Scatter Plot\"\n    encodings: Record<string, ChartEncoding>;  // channel → encoding map\n    canvasSize?: { width: number; height: number }; // default 400×320\n    chartProperties?: Record<string, any>;     // template-specific knobs\n  };\n  options?: AssembleOptions;                   // layout tuning\n}\n```\n\n| Key | Description |\n|---|---|\n| `data` | Data source — either `{ values: [...] }` (inline row objects) or `{ url: \"...\" }` (JSON/CSV URL) |\n| `semantic_types` | Per-column semantic annotations (e.g., `{ revenue: \"Price\", country: \"Country\" }`) |\n| `chart_spec` | What to draw — chart type, encodings, canvas size, properties |\n| `options` | Layout tuning (elasticity, step sizes, tooltips, etc.) |\n\n```ts\ninterface ChartEncoding {\n  field?: string;\n  type?: 'quantitative' | 'nominal' | 'ordinal' | 'temporal';\n  aggregate?: 'count' | 'sum' | 'average';\n  sortOrder?: 'ascending' | 'descending';\n  sortBy?: string;\n  scheme?: string;\n}\n\ninterface AssembleOptions {\n  addTooltips?: boolean;       // default false\n  elasticity?: number;         // axis stretch exponent    (default 0.5)\n  maxStretch?: number;         // axis stretch cap         (default 2)\n  facetElasticity?: number;    // facet stretch exponent   (default 0.3)\n  maxStretch?: number;         // unified stretch cap     (default 2)\n  minStep?: number;            // min px per discrete tick (default 6)\n  minSubplotSize?: number;     // min facet subplot px     (default 60)\n}\n```\n\n### Template registries\n\nEach backend has its own set of supported chart types and template\ndefinitions. Templates are organized by category and can be looked up by\nchart type name.\n\n| Backend | Template map | Flat list | Lookup | Channels |\n|---------|-------------|-----------|--------|----------|\n| Vega-Lite | `vlTemplateDefs` | `vlAllTemplateDefs` | `vlGetTemplateDef(name)` | `vlGetTemplateChannels(name)` |\n| ECharts | `ecTemplateDefs` | `ecAllTemplateDefs` | `ecGetTemplateDef(name)` | `ecGetTemplateChannels(name)` |\n| Chart.js | `cjsTemplateDefs` | `cjsAllTemplateDefs` | `cjsGetTemplateDef(name)` | `cjsGetTemplateChannels(name)` |\n\n```ts\n// Example: list available Vega-Lite chart categories\nimport { vlTemplateDefs } from './lib/agents-chart';\nObject.keys(vlTemplateDefs); // [\"Scatter & Point\", \"Bar\", \"Line & Area\", ...]\n\n// Example: get channels for a specific chart type\nimport { vlGetTemplateChannels } from './lib/agents-chart';\nvlGetTemplateChannels('Scatter Plot'); // [\"x\", \"y\", \"color\", \"size\", \"shape\"]\n```\n\n### Semantic types (~70 types)\n\n| Group | Examples |\n|-------|---------|\n| Temporal | `DateTime`, `Date`, `Year`, `Month` |\n| Measures | `Quantity`, `Count`, `Price`, `Percentage` |\n| Discrete numerics | `Rank`, `Score`, `ID` |\n| Geographic | `Latitude`, `Longitude`, `Country`, `City` |\n| Categorical | `PersonName`, `Company`, `Status`, `Boolean` |\n| Ranges | `Range`, `AgeGroup`, `Bucket` |\n| Fallbacks | `String`, `Number`, `Unknown` |\n\n### Core utilities (shared across backends)\n\nThese are re-exported from `core/` and available at the top level:\n\n```ts\nimport {\n  // Semantic type helpers\n  inferVisCategory,     // infer VisCategory from raw data\n  getVisCategory,       // look up VisCategory for a known semantic type\n\n  // Shared types\n  type ChartAssemblyInput,\n  type ChartEncoding,\n  type ChartTemplateDef,\n  type AssembleOptions,\n  type ChartWarning,\n\n  // Layout constants\n  channels,\n  channelGroups,\n} from './lib/agents-chart';\n```\n\n---\n\n## What the compiler handles automatically\n\n- **Sizing** — spring model for discrete axes, pressure model for continuous;\n  composable with facets and layers. No more 6400 px charts from 80 × 4 facets.\n- **Zero baseline** — Revenue → include zero; Temperature → don't; Rank → don't.\n- **Scale direction** — Rank → reversed; others → normal.\n- **Formatting** — Revenue → `$,.0f`; Percentage → `.0%`; Year → `%Y`.\n- **Color schemes** — categorical codes → distinct hues; measures → sequential.\n- **Label overflow** — auto-rotation and truncation from count + string lengths.\n- **Bespoke marks** — lollipops, bump charts, candlesticks as single templates.\n- **Semantic validation** — actionable errors before rendering, not after crashing.\n\n## Design principles\n\n1. **No UI dependencies** — pure data-in, spec-out.\n2. **Semantic types drive everything** — the caller annotates fields; the\n   compiler derives all config. Fallback: `inferVisCategory()` inspects raw data.\n3. **Callers own the data** — no aggregation transforms applied.\n4. **Layout is configurable** — elastic stretch, facet sizing, step sizes\n   exposed in `AssembleOptions`.\n5. **Templates are declarative** — each chart type is a `ChartTemplateDef`\n   with a skeleton, channel list, and optional post-processor.\n6. **Backend-agnostic semantics** — the same semantic reasoning targets\n   Vega-Lite, ECharts, and Chart.js through separate assembly functions.\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/README.md",
    "content": "# Chart.js Backend\n\nThe simplest backend. Compiles the core semantic layer into [Chart.js](https://www.chartjs.org/) configuration objects using a dataset-based data model.\n\n## Output Format\n\n```jsonc\n{ \"type\": \"bar\", \"data\": { \"labels\": [\"A\",\"B\",\"C\"], \"datasets\": [{ \"data\": [10,20,30], \"backgroundColor\": \"...\" }] }, \"options\": { \"scales\": {...}, \"plugins\": {...} } }\n```\n\nA Chart.js config object with `_width`/`_height` hints. Rendered via `new Chart(canvas, config)` with `responsive: false` and explicit canvas dimensions.\n\n## Assembly Pipeline\n\n| Phase | Step | Description |\n|-------|------|-------------|\n| **0** | `resolveSemantics` | Shared — resolve field types, aggregates, sort orders |\n| 0a | `declareLayoutMode` | Template layout declaration |\n| 0b | `convertTemporalData` | Shared — temporal parsing |\n| 0c | `filterOverflow` | Shared — category truncation |\n| **1** | `computeLayout` | Shared — step sizes, subplot dimensions |\n| **2** | Build `resolvedEncodings` → `template.instantiate` → `cjsApplyLayoutToSpec` → tooltips | Final CJS config |\n\n## File Structure\n\n```\nchartjs/\n  assemble.ts          – assembleChartjs(): Phase 2 assembly\n  instantiate-spec.ts  – cjsApplyLayoutToSpec(), cjsApplyTooltips()\n  index.ts             – barrel exports\n  templates/\n    index.ts           – template registry (10 templates, 5 categories)\n    scatter.ts         – Scatter Plot\n    bar.ts             – Bar, Grouped Bar, Stacked Bar\n    line.ts            – Line Chart\n    area.ts            – Area Chart\n    pie.ts             – Pie Chart\n    histogram.ts       – Histogram\n    radar.ts           – Radar Chart\n    rose.ts            – Rose Chart (polar bar)\n    utils.ts           – shared utilities\n```\n\n## Template Definitions (10 templates)\n\n| Category | Charts |\n|----------|--------|\n| Scatter & Point | Scatter Plot |\n| Bar | Bar Chart, Grouped Bar, Stacked Bar, Histogram |\n| Line & Area | Line Chart, Area Chart |\n| Part-to-Whole | Pie Chart |\n| Polar | Radar Chart, Rose Chart |\n\n## Known Issues & Notes\n\n- **Smallest backend** — 10 templates, no faceting support, no maps, no custom marks, no statistical charts.\n- `instantiate-spec.ts` is only 159 lines — the simplest Phase 2 of all backends.\n- Bar sizing uses `barPercentage` / `categoryPercentage` rather than VL's `step` or ECharts' `barWidth`.\n- Label rotation uses `ticks.maxRotation` on scales.\n- Stacking is configured via `stacked: true` on both x and y scales.\n- Axis-less detection checks for `config.type === 'radar'` as well as `pie`/`doughnut`.\n- No faceting support — Chart.js has no built-in multi-panel mechanism and no custom faceting module has been implemented.\n- Rose Chart is implemented as a polar bar chart (`type: 'polarArea'` or `type: 'bar'` with `indexAxis` and polar scales).\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/assemble.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js chart assembly — Two-Stage Pipeline Coordinator.\n *\n * Reuses the **same core analysis pipeline** as Vega-Lite and ECharts:\n *   Phase 0:  resolveChannelSemantics  → ChannelSemantics\n *   Step 0a:  declareLayoutMode    → LayoutDeclaration\n *   Step 0b:  convertTemporalData  → converted data\n *   Step 0c:  filterOverflow       → filtered data, nominalCounts\n *   Phase 1:  computeLayout        → LayoutResult\n *\n * Then diverges for Phase 2 (Chart.js-specific):\n *   template.instantiate → builds Chart.js config structure\n *   cjsApplyLayoutToSpec → applies layout decisions to config\n *\n * Key structural differences from ECharts / VL output:\n *   VL: { mark, encoding, data: {values}, width, height }\n *   EC: { xAxis, yAxis, series: [{type, data}], tooltip, legend, grid }\n *   CJS: { type, data: { labels, datasets[] }, options: { scales, plugins } }\n *\n * This module has NO React, Redux, or UI framework dependencies.\n */\n\nimport {\n    ChartEncoding,\n    ChartTemplateDef,\n    ChartAssemblyInput,\n    AssembleOptions,\n    LayoutDeclaration,\n    InstantiateContext,\n} from '../core/types';\nimport type { ChartWarning } from '../core/types';\nimport { cjsGetTemplateDef } from './templates';\nimport { resolveChannelSemantics, convertTemporalData } from '../core/resolve-semantics';\nimport { computeZeroDecision } from '../core/semantic-types';\nimport { filterOverflow } from '../core/filter-overflow';\nimport { computeLayout, computeChannelBudgets } from '../core/compute-layout';\nimport { cjsApplyLayoutToSpec, cjsApplyTooltips } from './instantiate-spec';\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Assemble a Chart.js config object.\n *\n * ```ts\n * const config = assembleChartjs({\n *   data: { values: myRows },\n *   semantic_types: { weight: 'Quantity' },\n *   chart_spec: { chartType: 'Bar Chart', encodings: { x: { field: 'category' }, y: { field: 'value' } } },\n *   options: { addTooltips: true },\n * });\n * ```\n *\n * @returns A Chart.js config object with optional `_warnings` and `_width`/`_height` hints\n */\nexport function assembleChartjs(input: ChartAssemblyInput): any {\n    const chartType = input.chart_spec.chartType;\n    const encodings = input.chart_spec.encodings;\n    const data = input.data.values ?? [];\n    const semanticTypes = input.semantic_types ?? {};\n    const canvasSize = input.chart_spec.canvasSize ?? { width: 400, height: 320 };\n    const chartProperties = input.chart_spec.chartProperties;\n    const options = input.options ?? {};\n    const chartTemplate = cjsGetTemplateDef(chartType) as ChartTemplateDef;\n    if (!chartTemplate) {\n        throw new Error(`Unknown Chart.js chart type: ${chartType}. Use cjsAllTemplateDefs to see available types.`);\n    }\n\n    const warnings: ChartWarning[] = [];\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // PHASE 0: Resolve Semantics (shared with VL + EC — completely target-agnostic)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const tplMark = chartTemplate.template?.mark;\n    const templateMarkType = typeof tplMark === 'string' ? tplMark : tplMark?.type;\n\n    // Convert temporal data once — feeds semantic resolution and all downstream stages\n    const convertedData = convertTemporalData(data, semanticTypes);\n\n    const channelSemantics = resolveChannelSemantics(\n        encodings, data, semanticTypes, convertedData,\n    );\n\n    // Finalize zero-baseline (requires template mark knowledge)\n    const effectiveMarkType = templateMarkType || 'point';\n    for (const [channel, cs] of Object.entries(channelSemantics)) {\n        if ((channel === 'x' || channel === 'y') && cs.type === 'quantitative') {\n            const numericValues = data\n                .map(r => r[cs.field])\n                .filter((v: any) => v != null && typeof v === 'number' && !isNaN(v));\n            cs.zero = computeZeroDecision(\n                cs.semanticAnnotation.semanticType, channel, effectiveMarkType, numericValues,\n            );\n        }\n    }\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // STEP 0a: declareLayoutMode (shared hook)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const declaration: LayoutDeclaration = chartTemplate.declareLayoutMode\n        ? chartTemplate.declareLayoutMode(channelSemantics, data, chartProperties)\n        : {};\n\n    const effectiveOptions: AssembleOptions = {\n        ...options,\n        ...(declaration.paramOverrides || {}),\n    };\n\n    const {\n        addTooltips: addTooltipsOpt = false,\n    } = effectiveOptions;\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // STEP 0b: filterOverflow (shared)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const allMarkTypes = new Set<string>();\n    if (templateMarkType) allMarkTypes.add(templateMarkType);\n\n    // ── Channel budgets (shared, in layout module) ─────────────────────\n    const budgets = computeChannelBudgets(\n        channelSemantics, declaration, convertedData, canvasSize, effectiveOptions,\n    );\n\n    const overflowResult = filterOverflow(\n        channelSemantics, declaration, encodings, convertedData,\n        budgets, allMarkTypes,\n    );\n\n    let values = overflowResult.filteredData;\n    warnings.push(...overflowResult.warnings);\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // PHASE 1: Compute Layout (shared — completely target-agnostic)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const layoutResult = computeLayout(\n        channelSemantics,\n        declaration,\n        values,\n        canvasSize,\n        effectiveOptions,\n    );\n\n    layoutResult.truncations = overflowResult.truncations;\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // PHASE 2: Instantiate Chart.js Config (CJS-specific)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    // Build resolved encodings for interface compatibility\n    const resolvedEncodings: Record<string, any> = {};\n    for (const [channel, encoding] of Object.entries(encodings)) {\n        const cs = channelSemantics[channel];\n        if (cs) {\n            resolvedEncodings[channel] = {\n                field: cs.field,\n                type: cs.type,\n                aggregate: encoding.aggregate,\n            };\n        }\n    }\n\n    // Template instantiate\n    const instantiateContext: InstantiateContext = {\n        channelSemantics,\n        layout: layoutResult,\n        table: values,\n        resolvedEncodings,\n        encodings,\n        chartProperties,\n        canvasSize,\n        semanticTypes,\n        chartType,\n        assembleOptions: effectiveOptions,\n    };\n\n    // Standard single-panel rendering (no faceting for initial CJS backend)\n    const cjsConfig: any = structuredClone(chartTemplate.template);\n\n    chartTemplate.instantiate(cjsConfig, instantiateContext);\n\n    // Apply layout decisions (CJS-specific)\n    cjsApplyLayoutToSpec(cjsConfig, instantiateContext, warnings);\n\n    // Tooltips\n    if (addTooltipsOpt) {\n        cjsApplyTooltips(cjsConfig);\n    }\n\n    // Template-specific post-processing\n    if (chartTemplate.postProcess) {\n        chartTemplate.postProcess(cjsConfig, instantiateContext);\n    }\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // RESULT\n    // ═══════════════════════════════════════════════════════════════════════\n\n    if (warnings.length > 0) {\n        cjsConfig._warnings = warnings;\n    }\n\n    cjsConfig._dataLength = values.length;\n\n    return cjsConfig;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/index.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @module agents-chart/chartjs\n *\n * Chart.js backend for agents-chart.\n *\n * Compiles the core semantic layer into Chart.js configuration objects.\n * Contains CJS-specific assembly, spec instantiation, and chart templates.\n *\n * Architecture contrast with other backends:\n *   VL: encoding-channel-based — { encoding: { x: { field, type }, y: ... } }\n *   EC: series-based           — { series: [{ type, data }], xAxis, yAxis }\n *   CJS: dataset-based         — { type, data: { labels, datasets[] }, options }\n *\n * Same core pipeline (Phase 0 + Phase 1), different Phase 2 output.\n */\n\n// CJS assembly function\nexport { assembleChartjs } from './assemble';\n\n// CJS spec instantiation (Phase 2)\nexport { cjsApplyLayoutToSpec, cjsApplyTooltips } from './instantiate-spec';\n\n// CJS template registry\nexport {\n    cjsTemplateDefs,\n    cjsAllTemplateDefs,\n    cjsGetTemplateDef,\n    cjsGetTemplateChannels,\n} from './templates';\n\n// CJS recommendation & adaptation\nexport { cjsAdaptChart, cjsRecommendEncodings } from './recommendation';\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/instantiate-spec.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * =============================================================================\n * PHASE 2: INSTANTIATE SPEC — Chart.js backend\n * =============================================================================\n *\n * Translates semantic decisions (Phase 0) and layout dimensions (Phase 1)\n * into Chart.js-specific config properties.\n *\n * Key differences from ECharts/Vega-Lite instantiation:\n *   - CJS uses { type, data: { labels, datasets[] }, options: { scales } }\n *   - CJS scales use 'x'/'y' keys (not xAxis/yAxis)\n *   - CJS sizing via canvas element dimensions + responsive: false\n *   - CJS label rotation via scales[axis].ticks.maxRotation\n *   - CJS stacking via stacked property on scales\n *   - CJS bar sizing via barPercentage and categoryPercentage\n *\n * CJS dependency: **Yes — this is where Chart.js-specific syntax lives**\n * =============================================================================\n */\n\nimport type {\n    ChannelSemantics,\n    LayoutResult,\n    InstantiateContext,\n    ChartWarning,\n} from '../core/types';\n\n/**\n * Phase 2: Apply layout and semantic decisions to the Chart.js config object.\n *\n * Handles common Chart.js plumbing across all templates:\n *   - Canvas sizing (_width, _height)\n *   - Axis label rotation and font sizing\n *   - Bar sizing (barPercentage, categoryPercentage)\n *   - Overflow truncation warnings\n */\nexport function cjsApplyLayoutToSpec(\n    config: any,\n    context: InstantiateContext,\n    warnings: ChartWarning[],\n): void {\n    const { channelSemantics, layout, canvasSize } = context;\n\n    // ── Axis-less chart types (pie, radar, doughnut) ─────────────────────\n    const hasAxes = !!(config.options?.scales?.x || config.options?.scales?.y);\n    const isRadar = config.type === 'radar';\n\n    // ── Canvas dimensions ────────────────────────────────────────────────\n    // Chart.js uses the canvas element dimensions.\n    // For non-axis charts (pie, radar), templates set their own _width/_height.\n    if (hasAxes && !config._width) {\n        const PADDING = 80; // approximate space for axes, labels, legend\n\n        const xIsDiscrete = layout.xNominalCount > 0 || layout.xContinuousAsDiscrete > 0;\n        const yIsDiscrete = layout.yNominalCount > 0 || layout.yContinuousAsDiscrete > 0;\n\n        let plotWidth: number;\n        let plotHeight: number;\n\n        if (xIsDiscrete && layout.xStepUnit !== 'group') {\n            const xItemCount = layout.xNominalCount || layout.xContinuousAsDiscrete || 0;\n            plotWidth = xItemCount > 0 ? layout.xStep * xItemCount : (layout.subplotWidth || canvasSize.width);\n        } else {\n            plotWidth = layout.subplotWidth || canvasSize.width;\n        }\n\n        if (yIsDiscrete && layout.yStepUnit !== 'group') {\n            const yItemCount = layout.yNominalCount || layout.yContinuousAsDiscrete || 0;\n            plotHeight = yItemCount > 0 ? layout.yStep * yItemCount : (layout.subplotHeight || canvasSize.height);\n        } else {\n            plotHeight = layout.subplotHeight || canvasSize.height;\n        }\n\n        config._width = plotWidth + PADDING;\n        config._height = plotHeight + PADDING;\n    }\n\n    // ── Bar sizing ───────────────────────────────────────────────────────\n    if (config.data?.datasets) {\n        const barDatasets = config.data.datasets.filter(\n            (ds: any) => config.type === 'bar' || ds.type === 'bar'\n        );\n        if (barDatasets.length > 0 && hasAxes) {\n            const bandPadding = layout.stepPadding;\n            // Chart.js uses:\n            //   categoryPercentage: fraction of available space per category (default 0.8)\n            //   barPercentage: fraction of category space per bar (default 0.9)\n            // Total bar space = categoryPercentage × barPercentage\n            const categoryPct = 1 - bandPadding;\n            for (const ds of barDatasets) {\n                if (ds.categoryPercentage == null) {\n                    ds.categoryPercentage = categoryPct;\n                }\n            }\n        }\n    }\n\n    // ── X-axis label sizing ──────────────────────────────────────────────\n    if (hasAxes && config.options?.scales?.x && layout.xLabel) {\n        if (!config.options.scales.x.ticks) config.options.scales.x.ticks = {};\n\n        if (layout.xLabel.labelAngle && layout.xLabel.labelAngle !== 0) {\n            config.options.scales.x.ticks.maxRotation = Math.abs(layout.xLabel.labelAngle);\n            config.options.scales.x.ticks.minRotation = Math.abs(layout.xLabel.labelAngle);\n        }\n\n        if (layout.xLabel.fontSize) {\n            config.options.scales.x.ticks.font = {\n                ...(config.options.scales.x.ticks.font || {}),\n                size: layout.xLabel.fontSize,\n            };\n        }\n    }\n\n    // ── Y-axis label sizing ──────────────────────────────────────────────\n    if (hasAxes && config.options?.scales?.y && layout.yLabel) {\n        if (!config.options.scales.y.ticks) config.options.scales.y.ticks = {};\n\n        if (layout.yLabel.fontSize) {\n            config.options.scales.y.ticks.font = {\n                ...(config.options.scales.y.ticks.font || {}),\n                size: layout.yLabel.fontSize,\n            };\n        }\n    }\n\n    // ── Overflow truncation warnings ─────────────────────────────────────\n    if (layout.truncations && layout.truncations.length > 0) {\n        for (const trunc of layout.truncations) {\n            warnings.push({\n                severity: 'warning',\n                code: 'overflow',\n                message: trunc.message,\n                channel: trunc.channel,\n                field: trunc.field,\n            });\n            // Chart.js: append placeholder to labels\n            if (config.data?.labels && Array.isArray(config.data.labels)) {\n                config.data.labels.push(trunc.placeholder);\n            }\n        }\n    }\n}\n\n/**\n * Apply tooltips to a Chart.js config.\n * Chart.js tooltips are configured under options.plugins.tooltip.\n */\nexport function cjsApplyTooltips(config: any): void {\n    if (!config.options) config.options = {};\n    if (!config.options.plugins) config.options.plugins = {};\n    if (!config.options.plugins.tooltip) {\n        config.options.plugins.tooltip = { enabled: true };\n    }\n}\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/recommendation.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js recommendation & adaptation wrappers.\n */\n\nimport { adaptChannels, recommendChannels } from '../core/recommendation';\nimport { cjsGetTemplateChannels } from './templates';\n\nexport function cjsAdaptChart(\n    sourceType: string,\n    targetType: string,\n    encodings: Record<string, string>,\n    data?: any[],\n    semanticTypes?: Record<string, string>,\n): Record<string, string> {\n    const targetChannels = cjsGetTemplateChannels(targetType);\n    return adaptChannels(sourceType, targetType, targetChannels, encodings, data, semanticTypes);\n}\n\nexport function cjsRecommendEncodings(\n    chartType: string,\n    data: any[],\n    semanticTypes: Record<string, string>,\n): Record<string, string> {\n    const rec = recommendChannels(chartType, data, semanticTypes);\n    const validChannels = cjsGetTemplateChannels(chartType);\n    const result: Record<string, string> = {};\n    for (const [ch, field] of Object.entries(rec)) {\n        if (validChannels.includes(ch)) result[ch] = field;\n    }\n    return result;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/templates/area.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Area Chart template (single + multi-series).\n *\n * Chart.js renders area charts as line charts with `fill: true`.\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport {\n    extractCategories, groupBy, buildCategoryAlignedData,\n    DEFAULT_COLORS, DEFAULT_BG_COLORS,\n} from './utils';\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\nexport const cjsAreaChartDef: ChartTemplateDef = {\n    chart: 'Area Chart',\n    template: { mark: 'area', encoding: {} },\n    channels: ['x', 'y', 'color', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'area',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xCS = channelSemantics.x;\n        const yCS = channelSemantics.y;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xCS?.field || !yCS?.field) return;\n        const xField = xCS.field;\n        const yField = yCS.field;\n\n        const xIsDiscrete = isDiscrete(xCS.type);\n        const categories = xIsDiscrete\n            ? extractCategories(table, xField, xCS.ordinalSortOrder)\n            : undefined;\n\n        const opacity = chartProperties?.opacity ?? 0.4;\n\n        // Stacking\n        const stackMode = chartProperties?.stackMode;\n        const stacked = stackMode !== 'layered';\n\n        // Interpolation\n        const interpolate = chartProperties?.interpolate;\n        const tension = (interpolate === 'monotone' || interpolate === 'basis' ||\n                         interpolate === 'cardinal' || interpolate === 'catmull-rom')\n            ? 0.4 : 0;\n\n        const config: any = {\n            type: 'line',\n            data: {\n                labels: categories || [],\n                datasets: [],\n            },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                scales: {\n                    x: {\n                        type: xIsDiscrete ? 'category' : 'linear',\n                        title: { display: true, text: xField },\n                    },\n                    y: {\n                        type: 'linear',\n                        title: { display: true, text: yField },\n                        stacked,\n                    },\n                },\n                plugins: {\n                    tooltip: { enabled: true },\n                    filler: { propagate: true },\n                },\n            },\n        };\n\n        // Zero-baseline: Chart.js defaults beginAtZero to false, so\n        // explicitly set true when the semantic decision includes zero.\n        if (channelSemantics.y?.zero) {\n            config.options.scales.y.beginAtZero = channelSemantics.y.zero.zero !== false;\n        }\n\n        if (colorField) {\n            const groups = groupBy(table, colorField);\n            config.options.plugins.legend = { display: true };\n\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const data = xIsDiscrete\n                    ? buildCategoryAlignedData(rows, xField, yField, categories!)\n                    : rows.map(r => ({ x: r[xField], y: r[yField] }));\n\n                const bgColor = DEFAULT_BG_COLORS[colorIdx % DEFAULT_BG_COLORS.length]\n                    .replace(/[\\d.]+\\)$/, `${opacity})`);\n\n                config.data.datasets.push({\n                    label: name,\n                    data,\n                    borderColor: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length],\n                    backgroundColor: bgColor,\n                    tension,\n                    fill: stacked ? 'stack' : 'origin',\n                    pointRadius: 2,\n                });\n                colorIdx++;\n            }\n        } else {\n            const data = xIsDiscrete\n                ? categories!.map(cat => {\n                    const row = table.find(r => String(r[xField]) === cat);\n                    return row ? row[yField] : null;\n                })\n                : table.map(r => ({ x: r[xField], y: r[yField] }));\n\n            config.data.datasets.push({\n                label: yField,\n                data,\n                borderColor: DEFAULT_COLORS[0],\n                backgroundColor: `rgba(54, 162, 235, ${opacity})`,\n                tension,\n                fill: 'origin',\n                pointRadius: 2,\n            });\n            config.options.plugins.legend = { display: false };\n        }\n\n        Object.assign(spec, config);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'interpolate', label: 'Curve', type: 'discrete', options: [\n                { value: undefined, label: 'Default (linear)' },\n                { value: 'linear', label: 'Linear' },\n                { value: 'monotone', label: 'Monotone (smooth)' },\n            ],\n        } as ChartPropertyDef,\n        { key: 'opacity', label: 'Opacity', type: 'continuous', min: 0.1, max: 1, step: 0.05, defaultValue: 0.4 } as ChartPropertyDef,\n        {\n            key: 'stackMode', label: 'Stack', type: 'discrete', options: [\n                { value: undefined, label: 'Stacked (default)' },\n                { value: 'layered', label: 'Layered (overlap)' },\n            ],\n        } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/templates/bar.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Bar Chart templates: Bar, Stacked Bar, Grouped Bar.\n *\n * Key contrast with Vega-Lite:\n *   VL: encoding channels determine stacking/grouping implicitly\n *   CJS: explicit datasets[] with stacked option on scales\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport {\n    extractCategories, groupBy, detectAxes, buildCategoryAlignedData,\n    DEFAULT_COLORS, DEFAULT_BG_COLORS,\n} from './utils';\nimport {\n    detectBandedAxisFromSemantics, detectBandedAxisForceDiscrete,\n} from '../../vegalite/templates/utils';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\n// ─── Bar Chart ──────────────────────────────────────────────────────────────\n\nexport const cjsBarChartDef: ChartTemplateDef = {\n    chart: 'Bar Chart',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'y', 'color', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisFromSemantics(cs, table, { preferAxis: 'x' });\n        return {\n            axisFlags: result ? { [result.axis]: { banded: true } } : { x: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n        };\n    },\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const { categoryAxis, valueAxis } = detectAxes(channelSemantics);\n\n        const catField = channelSemantics[categoryAxis]?.field;\n        const valField = channelSemantics[valueAxis]?.field;\n        if (!catField || !valField) return;\n\n        const catCS = channelSemantics[categoryAxis];\n        const categories = extractCategories(table, catField, catCS?.ordinalSortOrder);\n        const values = buildCategoryAlignedData(table, catField, valField, categories);\n\n        const isHorizontal = categoryAxis === 'y';\n\n        const config: any = {\n            type: 'bar',\n            data: {\n                labels: categories,\n                datasets: [{\n                    label: valField,\n                    data: values,\n                    backgroundColor: DEFAULT_BG_COLORS[0],\n                    borderColor: DEFAULT_COLORS[0],\n                    borderWidth: 1,\n                    borderRadius: chartProperties?.cornerRadius ?? 0,\n                }],\n            },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                indexAxis: isHorizontal ? 'y' as const : 'x' as const,\n                scales: {\n                    x: {\n                        title: { display: true, text: isHorizontal ? valField : catField },\n                        ...(isHorizontal ? {} : {}),\n                    },\n                    y: {\n                        title: { display: true, text: isHorizontal ? catField : valField },\n                    },\n                },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: true },\n                },\n            },\n        };\n\n        // Apply zero-baseline from semantic decision\n        const valScale = isHorizontal ? 'x' : 'y';\n        const valCS = channelSemantics[valueAxis];\n        if (valCS?.zero) {\n            config.options.scales[valScale].beginAtZero = valCS.zero.zero !== false;\n        } else {\n            // Default: bars should include zero for length integrity\n            config.options.scales[valScale].beginAtZero = true;\n        }\n\n        Object.assign(spec, config);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'cornerRadius', label: 'Corners', type: 'continuous', min: 0, max: 15, step: 1, defaultValue: 0 },\n    ] as ChartPropertyDef[],\n};\n\n// ─── Stacked Bar Chart ──────────────────────────────────────────────────────\n\nexport const cjsStackedBarChartDef: ChartTemplateDef = {\n    chart: 'Stacked Bar Chart',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'y', 'color', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisFromSemantics(cs, table, { preferAxis: 'x' });\n        return {\n            axisFlags: result ? { [result.axis]: { banded: true } } : { x: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n            paramOverrides: { continuousMarkCrossSection: { x: 20, y: 20, seriesCountAxis: 'auto' } },\n        };\n    },\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const { categoryAxis, valueAxis } = detectAxes(channelSemantics);\n        const colorField = channelSemantics.color?.field;\n\n        const catField = channelSemantics[categoryAxis]?.field;\n        const valField = channelSemantics[valueAxis]?.field;\n        if (!catField || !valField) return;\n\n        const catCS = channelSemantics[categoryAxis];\n        const categories = extractCategories(table, catField, catCS?.ordinalSortOrder);\n        const isHorizontal = categoryAxis === 'y';\n\n        const config: any = {\n            type: 'bar',\n            data: {\n                labels: categories,\n                datasets: [],\n            },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                indexAxis: isHorizontal ? 'y' as const : 'x' as const,\n                scales: {\n                    x: {\n                        stacked: true,\n                        title: { display: true, text: isHorizontal ? valField : catField },\n                    },\n                    y: {\n                        stacked: true,\n                        title: { display: true, text: isHorizontal ? catField : valField },\n                    },\n                },\n                plugins: {\n                    legend: { display: !!colorField },\n                    tooltip: { enabled: true },\n                },\n            },\n        };\n\n        if (colorField) {\n            const groups = groupBy(table, colorField);\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const values = buildCategoryAlignedData(rows, catField, valField, categories);\n                config.data.datasets.push({\n                    label: name,\n                    data: values,\n                    backgroundColor: DEFAULT_BG_COLORS[colorIdx % DEFAULT_BG_COLORS.length],\n                    borderColor: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length],\n                    borderWidth: 1,\n                });\n                colorIdx++;\n            }\n        } else {\n            const values = buildCategoryAlignedData(table, catField, valField, categories);\n            config.data.datasets.push({\n                label: valField,\n                data: values,\n                backgroundColor: DEFAULT_BG_COLORS[0],\n                borderColor: DEFAULT_COLORS[0],\n                borderWidth: 1,\n            });\n        }\n\n        // Apply zero-baseline from semantic decision\n        const valScaleS = isHorizontal ? 'x' : 'y';\n        const valCSs = channelSemantics[valueAxis];\n        if (valCSs?.zero) {\n            config.options.scales[valScaleS].beginAtZero = valCSs.zero.zero !== false;\n        } else {\n            config.options.scales[valScaleS].beginAtZero = true;\n        }\n\n        Object.assign(spec, config);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n\n// ─── Grouped Bar Chart ──────────────────────────────────────────────────────\n\nexport const cjsGroupedBarChartDef: ChartTemplateDef = {\n    chart: 'Grouped Bar Chart',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'y', 'group', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisForceDiscrete(cs, table, { preferAxis: 'x' });\n        return {\n            axisFlags: result ? { [result.axis]: { banded: true } } : { x: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n            paramOverrides: { continuousMarkCrossSection: { x: 20, y: 20, seriesCountAxis: 'auto' } },\n        };\n    },\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const { categoryAxis, valueAxis } = detectAxes(channelSemantics);\n        const groupField = channelSemantics.group?.field || channelSemantics.color?.field;\n\n        const catField = channelSemantics[categoryAxis]?.field;\n        const valField = channelSemantics[valueAxis]?.field;\n        if (!catField || !valField) return;\n\n        const catCS = channelSemantics[categoryAxis];\n        const categories = extractCategories(table, catField, catCS?.ordinalSortOrder);\n        const isHorizontal = categoryAxis === 'y';\n\n        const config: any = {\n            type: 'bar',\n            data: {\n                labels: categories,\n                datasets: [],\n            },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                indexAxis: isHorizontal ? 'y' as const : 'x' as const,\n                scales: {\n                    x: {\n                        title: { display: true, text: isHorizontal ? valField : catField },\n                    },\n                    y: {\n                        title: { display: true, text: isHorizontal ? catField : valField },\n                    },\n                },\n                plugins: {\n                    legend: { display: !!groupField },\n                    tooltip: { enabled: true },\n                },\n            },\n        };\n\n        if (groupField) {\n            const groups = groupBy(table, groupField);\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const values = buildCategoryAlignedData(rows, catField, valField, categories);\n                config.data.datasets.push({\n                    label: name,\n                    data: values,\n                    backgroundColor: DEFAULT_BG_COLORS[colorIdx % DEFAULT_BG_COLORS.length],\n                    borderColor: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length],\n                    borderWidth: 1,\n                });\n                colorIdx++;\n            }\n        } else {\n            const values = buildCategoryAlignedData(table, catField, valField, categories);\n            config.data.datasets.push({\n                label: valField,\n                data: values,\n                backgroundColor: DEFAULT_BG_COLORS[0],\n                borderColor: DEFAULT_COLORS[0],\n                borderWidth: 1,\n            });\n        }\n\n        // Apply zero-baseline from semantic decision\n        const valScaleG = isHorizontal ? 'x' : 'y';\n        const valCSg = channelSemantics[valueAxis];\n        if (valCSg?.zero) {\n            config.options.scales[valScaleG].beginAtZero = valCSg.zero.zero !== false;\n        } else {\n            config.options.scales[valScaleG].beginAtZero = true;\n        }\n\n        Object.assign(spec, config);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/templates/histogram.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Histogram template.\n *\n * Chart.js has no built-in binning — we compute bins client-side\n * and render as a bar chart.\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { DEFAULT_COLORS, DEFAULT_BG_COLORS } from './utils';\n\nexport const cjsHistogramDef: ChartTemplateDef = {\n    chart: 'Histogram',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'color', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xField = channelSemantics.x?.field;\n        const colorField = channelSemantics.color?.field;\n        if (!xField) return;\n\n        const binCount = chartProperties?.binCount ?? 10;\n\n        // Extract numeric values\n        const numValues = table\n            .map(r => Number(r[xField]))\n            .filter(v => isFinite(v));\n\n        if (numValues.length === 0) return;\n\n        const minVal = Math.min(...numValues);\n        const maxVal = Math.max(...numValues);\n        const range = maxVal - minVal;\n        const binWidth = range > 0 ? range / binCount : 1;\n\n        const categories = Array.from({ length: binCount }, (_, i) => {\n            const lo = (minVal + i * binWidth).toFixed(1);\n            const hi = (minVal + (i + 1) * binWidth).toFixed(1);\n            return `${lo}–${hi}`;\n        });\n\n        const config: any = {\n            type: 'bar',\n            data: {\n                labels: categories,\n                datasets: [],\n            },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                scales: {\n                    x: {\n                        title: { display: true, text: xField },\n                    },\n                    y: {\n                        title: { display: true, text: 'Count' },\n                        beginAtZero: true,\n                    },\n                },\n                plugins: {\n                    tooltip: { enabled: true },\n                },\n            },\n        };\n\n        if (!colorField) {\n            // Simple histogram\n            const counts = new Array(binCount).fill(0);\n            for (const v of numValues) {\n                let idx = Math.floor((v - minVal) / binWidth);\n                if (idx >= binCount) idx = binCount - 1;\n                counts[idx]++;\n            }\n\n            config.data.datasets.push({\n                label: 'Count',\n                data: counts,\n                backgroundColor: DEFAULT_BG_COLORS[0],\n                borderColor: DEFAULT_COLORS[0],\n                borderWidth: 1,\n                barPercentage: 1.0,\n                categoryPercentage: 1.0,\n            });\n            config.options.plugins.legend = { display: false };\n        } else {\n            // Stacked histogram\n            const groupValues = new Map<string, number[]>();\n            for (const row of table) {\n                const v = Number(row[xField]);\n                if (!isFinite(v)) continue;\n                const g = String(row[colorField] ?? '');\n                if (!groupValues.has(g)) groupValues.set(g, []);\n                groupValues.get(g)!.push(v);\n            }\n\n            config.options.scales.x.stacked = true;\n            config.options.scales.y.stacked = true;\n\n            let colorIdx = 0;\n            for (const [name, vals] of groupValues) {\n                const counts = new Array(binCount).fill(0);\n                for (const v of vals) {\n                    let idx = Math.floor((v - minVal) / binWidth);\n                    if (idx >= binCount) idx = binCount - 1;\n                    counts[idx]++;\n                }\n                config.data.datasets.push({\n                    label: name,\n                    data: counts,\n                    backgroundColor: DEFAULT_BG_COLORS[colorIdx % DEFAULT_BG_COLORS.length],\n                    borderColor: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length],\n                    borderWidth: 1,\n                    barPercentage: 1.0,\n                    categoryPercentage: 1.0,\n                });\n                colorIdx++;\n            }\n            config.options.plugins.legend = { display: true };\n        }\n\n        Object.assign(spec, config);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'binCount', label: 'Bins', type: 'continuous', min: 5, max: 50, step: 1, defaultValue: 10 } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/templates/index.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js template registry.\n *\n * Mirrors the structure of echarts/templates/index.ts and\n * vegalite/templates/index.ts but with Chart.js template definitions.\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { cjsScatterPlotDef } from './scatter';\nimport { cjsBarChartDef, cjsStackedBarChartDef, cjsGroupedBarChartDef } from './bar';\nimport { cjsLineChartDef } from './line';\nimport { cjsAreaChartDef } from './area';\nimport { cjsPieChartDef } from './pie';\nimport { cjsHistogramDef } from './histogram';\nimport { cjsRadarChartDef } from './radar';\nimport { cjsRoseChartDef } from './rose';\n\n/**\n * Chart.js chart template definitions, grouped by category.\n */\nexport const cjsTemplateDefs: { [key: string]: ChartTemplateDef[] } = {\n    'Scatter & Point': [cjsScatterPlotDef],\n    'Bar':             [cjsBarChartDef, cjsGroupedBarChartDef, cjsStackedBarChartDef, cjsHistogramDef],\n    'Line & Area':     [cjsLineChartDef, cjsAreaChartDef],\n    'Part-to-Whole':   [cjsPieChartDef],\n    'Polar':           [cjsRadarChartDef, cjsRoseChartDef],\n};\n\n/**\n * Flat list of all Chart.js chart template definitions.\n */\nexport const cjsAllTemplateDefs: ChartTemplateDef[] = Object.values(cjsTemplateDefs).flat();\n\n/**\n * Look up a Chart.js chart template definition by chart type name.\n */\nexport function cjsGetTemplateDef(chartType: string): ChartTemplateDef | undefined {\n    return cjsAllTemplateDefs.find(t => t.chart === chartType);\n}\n\n/**\n * Get the available channels for a Chart.js chart type.\n */\nexport function cjsGetTemplateChannels(chartType: string): string[] {\n    return cjsGetTemplateDef(chartType)?.channels || [];\n}\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/templates/line.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Line Chart template (single + multi-series).\n *\n * Contrast with VL:\n *   VL: encoding.x + encoding.y + encoding.color → auto-groups into lines\n *   CJS: explicit datasets[] — each dataset is one line\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport {\n    extractCategories, groupBy, buildCategoryAlignedData,\n    DEFAULT_COLORS,\n} from './utils';\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\nexport const cjsLineChartDef: ChartTemplateDef = {\n    chart: 'Line Chart',\n    template: { mark: 'line', encoding: {} },\n    channels: ['x', 'y', 'color', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xCS = channelSemantics.x;\n        const yCS = channelSemantics.y;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xCS?.field || !yCS?.field) return;\n        const xField = xCS.field;\n        const yField = yCS.field;\n\n        const xIsDiscrete = isDiscrete(xCS.type);\n\n        const categories = xIsDiscrete\n            ? extractCategories(table, xField, xCS.ordinalSortOrder)\n            : undefined;\n\n        // Determine tension for interpolation\n        const interpolate = chartProperties?.interpolate;\n        const tension = (interpolate === 'monotone' || interpolate === 'basis' ||\n                         interpolate === 'cardinal' || interpolate === 'catmull-rom')\n            ? 0.4 : 0;\n        const stepped = interpolate === 'step' ? 'middle' as const\n                      : interpolate === 'step-before' ? 'before' as const\n                      : interpolate === 'step-after' ? 'after' as const\n                      : false as const;\n\n        const config: any = {\n            type: 'line',\n            data: {\n                labels: categories || [],\n                datasets: [],\n            },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                scales: {\n                    x: {\n                        type: xIsDiscrete ? 'category' : 'linear',\n                        title: { display: true, text: xField },\n                    },\n                    y: {\n                        type: 'linear',\n                        title: { display: true, text: yField },\n                    },\n                },\n                plugins: {\n                    tooltip: { enabled: true },\n                },\n            },\n        };\n\n        // Zero-baseline: Chart.js defaults beginAtZero to false, so\n        // explicitly set true when the semantic decision includes zero.\n        if (channelSemantics.y?.zero) {\n            config.options.scales.y.beginAtZero = channelSemantics.y.zero.zero !== false;\n        }\n\n        if (colorField) {\n            const groups = groupBy(table, colorField);\n            config.options.plugins.legend = { display: true };\n\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const data = xIsDiscrete\n                    ? buildCategoryAlignedData(rows, xField, yField, categories!)\n                    : rows.map(r => ({ x: r[xField], y: r[yField] }));\n\n                config.data.datasets.push({\n                    label: name,\n                    data,\n                    borderColor: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length],\n                    backgroundColor: 'transparent',\n                    tension,\n                    stepped,\n                    pointRadius: 3,\n                    fill: false,\n                });\n                colorIdx++;\n            }\n        } else {\n            const data = xIsDiscrete\n                ? categories!.map(cat => {\n                    const row = table.find(r => String(r[xField]) === cat);\n                    return row ? row[yField] : null;\n                })\n                : table.map(r => ({ x: r[xField], y: r[yField] }));\n\n            config.data.datasets.push({\n                label: yField,\n                data,\n                borderColor: DEFAULT_COLORS[0],\n                backgroundColor: 'transparent',\n                tension,\n                stepped,\n                pointRadius: 3,\n                fill: false,\n            });\n            config.options.plugins.legend = { display: false };\n        }\n\n        Object.assign(spec, config);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'interpolate', label: 'Curve', type: 'discrete', options: [\n                { value: undefined, label: 'Default (linear)' },\n                { value: 'linear', label: 'Linear' },\n                { value: 'monotone', label: 'Monotone (smooth)' },\n                { value: 'step', label: 'Step' },\n                { value: 'step-before', label: 'Step Before' },\n                { value: 'step-after', label: 'Step After' },\n            ],\n        } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/templates/pie.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Pie Chart template.\n *\n * Contrast with VL:\n *   VL: mark = \"arc\" with theta + color\n *   CJS: type = 'pie' or 'doughnut' with data = { labels, datasets[{data}] }\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, DEFAULT_COLORS, DEFAULT_BG_COLORS } from './utils';\n\nexport const cjsPieChartDef: ChartTemplateDef = {\n    chart: 'Pie Chart',\n    template: { mark: 'arc', encoding: {} },\n    channels: ['size', 'color', 'column', 'row'],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const colorField = channelSemantics.color?.field;\n        const sizeField = channelSemantics.size?.field;\n\n        const labels: string[] = [];\n        const values: number[] = [];\n\n        if (colorField && sizeField) {\n            // color = category (slice label), size = measure (slice value)\n            const agg = new Map<string, number>();\n            for (const row of table) {\n                const cat = String(row[colorField] ?? '');\n                const val = Number(row[sizeField]) || 0;\n                agg.set(cat, (agg.get(cat) ?? 0) + val);\n            }\n            const categories = extractCategories(table, colorField, channelSemantics.color?.ordinalSortOrder);\n            for (const cat of categories) {\n                labels.push(cat);\n                values.push(agg.get(cat) ?? 0);\n            }\n        } else if (colorField) {\n            // No size field → count occurrences per category\n            const counts = new Map<string, number>();\n            for (const row of table) {\n                const cat = String(row[colorField] ?? '');\n                counts.set(cat, (counts.get(cat) ?? 0) + 1);\n            }\n            const categories = extractCategories(table, colorField, channelSemantics.color?.ordinalSortOrder);\n            for (const cat of categories) {\n                labels.push(cat);\n                values.push(counts.get(cat) ?? 0);\n            }\n        } else if (sizeField) {\n            for (const row of table) {\n                const val = Number(row[sizeField]) || 0;\n                labels.push(String(val));\n                values.push(val);\n            }\n        }\n\n        const innerRadius = chartProperties?.innerRadius ?? 0;\n        const isDoughnut = innerRadius > 0;\n\n        const config: any = {\n            type: isDoughnut ? 'doughnut' : 'pie',\n            data: {\n                labels,\n                datasets: [{\n                    data: values,\n                    backgroundColor: DEFAULT_BG_COLORS.slice(0, labels.length),\n                    borderColor: DEFAULT_COLORS.slice(0, labels.length),\n                    borderWidth: 1,\n                }],\n            },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                plugins: {\n                    legend: { display: true, position: 'right' as const },\n                    tooltip: { enabled: true },\n                },\n                ...(isDoughnut ? { cutout: `${innerRadius}%` } : {}),\n            },\n            // Canvas size from context (no axes)\n            _width: Math.max(ctx.canvasSize.width, 300),\n            _height: Math.max(ctx.canvasSize.height, 250),\n        };\n\n        Object.assign(spec, config);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'innerRadius', label: 'Donut', type: 'continuous', min: 0, max: 60, step: 5, defaultValue: 0 } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/templates/radar.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Radar Chart template.\n *\n * Chart.js has native radar chart support via type: 'radar'.\n *\n * Data model (long format):\n *   x (nominal): metric / axis name\n *   y (quantitative): value for that metric\n *   color (nominal): entity / group\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, groupBy, DEFAULT_COLORS, DEFAULT_BG_COLORS } from './utils';\n\nexport const cjsRadarChartDef: ChartTemplateDef = {\n    chart: 'Radar Chart',\n    template: { mark: 'point', encoding: {} },\n    channels: ['x', 'y', 'color', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const axisField = channelSemantics.x?.field;   // metric names\n        const valueField = channelSemantics.y?.field;   // metric values\n        const groupField = channelSemantics.color?.field; // entities\n\n        if (!axisField || !valueField) return;\n\n        // Extract unique metrics (radar axes)\n        const metrics = extractCategories(table, axisField, channelSemantics.x?.ordinalSortOrder);\n        if (metrics.length < 2) return;\n\n        const filled = chartProperties?.filled !== false;\n        const fillOpacity = chartProperties?.fillOpacity ?? 0.3;\n\n        const config: any = {\n            type: 'radar',\n            data: {\n                labels: metrics,\n                datasets: [],\n            },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                scales: {\n                    r: {\n                        beginAtZero: true,\n                        ticks: { display: true },\n                        pointLabels: { display: true },\n                    },\n                },\n                plugins: {\n                    tooltip: { enabled: true },\n                },\n            },\n            // Canvas size from context (no axes)\n            _width: Math.max(ctx.canvasSize.width, 350),\n            _height: Math.max(ctx.canvasSize.height, 300),\n        };\n\n        if (groupField) {\n            const groups = groupBy(table, groupField);\n            config.options.plugins.legend = { display: true };\n\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                // Aggregate: mean per metric\n                const metricVals = new Map<string, { sum: number; count: number }>();\n                for (const row of rows) {\n                    const m = String(row[axisField]);\n                    const v = Number(row[valueField]) || 0;\n                    if (!metricVals.has(m)) metricVals.set(m, { sum: 0, count: 0 });\n                    const entry = metricVals.get(m)!;\n                    entry.sum += v;\n                    entry.count++;\n                }\n\n                const values = metrics.map(m => {\n                    const entry = metricVals.get(m);\n                    return entry ? Math.round((entry.sum / entry.count) * 100) / 100 : 0;\n                });\n\n                const borderColor = DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length];\n                const bgColor = borderColor.replace(/[\\d.]+\\)$/, `${fillOpacity})`);\n\n                config.data.datasets.push({\n                    label: name,\n                    data: values,\n                    borderColor,\n                    backgroundColor: filled ? bgColor : 'transparent',\n                    pointBackgroundColor: borderColor,\n                    fill: filled,\n                });\n                colorIdx++;\n            }\n        } else {\n            // Single group\n            const metricVals = new Map<string, { sum: number; count: number }>();\n            for (const row of table) {\n                const m = String(row[axisField]);\n                const v = Number(row[valueField]) || 0;\n                if (!metricVals.has(m)) metricVals.set(m, { sum: 0, count: 0 });\n                const entry = metricVals.get(m)!;\n                entry.sum += v;\n                entry.count++;\n            }\n\n            const values = metrics.map(m => {\n                const entry = metricVals.get(m);\n                return entry ? Math.round((entry.sum / entry.count) * 100) / 100 : 0;\n            });\n\n            config.data.datasets.push({\n                label: valueField,\n                data: values,\n                borderColor: DEFAULT_COLORS[0],\n                backgroundColor: filled\n                    ? DEFAULT_COLORS[0].replace(/[\\d.]+\\)$/, `${fillOpacity})`)\n                    : 'transparent',\n                pointBackgroundColor: DEFAULT_COLORS[0],\n                fill: filled,\n            });\n            config.options.plugins.legend = { display: false };\n        }\n\n        Object.assign(spec, config);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'filled', label: 'Fill', type: 'discrete', options: [\n                { value: true, label: 'Filled (default)' },\n                { value: false, label: 'Outline only' },\n            ],\n        } as ChartPropertyDef,\n        { key: 'fillOpacity', label: 'Opacity', type: 'continuous', min: 0.05, max: 0.8, step: 0.05, defaultValue: 0.3 } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/templates/rose.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Rose Chart (Nightingale / Coxcomb) template.\n *\n * Contrast with VL:\n *   VL: mark = \"arc\" with theta (angular extent fixed per slice) + radius (value)\n *   CJS: type = 'polarArea' — each wedge spans an equal angle, radius encodes value.\n *\n * Data model (long format):\n *   x (nominal): angular category (direction, month, etc.)\n *   y (quantitative): value mapped to wedge radius\n *   color (nominal, optional): stack / group variable\n *\n * Note: Chart.js polarArea doesn't support native stacking. When a color\n * field is present we aggregate per category (sum across groups) and show\n * the total, with the legend listing the color groups for reference.\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, groupBy, DEFAULT_COLORS, DEFAULT_BG_COLORS } from './utils';\n\nexport const cjsRoseChartDef: ChartTemplateDef = {\n    chart: 'Rose Chart',\n    template: { mark: 'arc', encoding: {} },\n    channels: ['x', 'y', 'color', 'column', 'row'],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table } = ctx;\n        const catField = channelSemantics.x?.field;   // angular categories\n        const valField = channelSemantics.y?.field;    // wedge radius value\n        const colorField = channelSemantics.color?.field; // optional grouping\n\n        if (!catField || !valField) return;\n\n        // Extract unique angular categories\n        const categories = extractCategories(table, catField, channelSemantics.x?.ordinalSortOrder);\n        if (categories.length === 0) return;\n\n        let labels: string[];\n        let values: number[];\n        let bgColors: string[];\n        let borderColors: string[];\n\n        if (colorField) {\n            // Stacked: aggregate per (category × group), then sum across groups per category\n            const groups = groupBy(table, colorField);\n            const groupNames = [...groups.keys()];\n\n            // Build per-category totals\n            const catTotals = new Map<string, number>();\n            for (const cat of categories) catTotals.set(cat, 0);\n\n            for (const [, rows] of groups) {\n                for (const row of rows) {\n                    const cat = String(row[catField] ?? '');\n                    const val = Number(row[valField]) || 0;\n                    if (catTotals.has(cat)) {\n                        catTotals.set(cat, catTotals.get(cat)! + val);\n                    }\n                }\n            }\n\n            labels = categories;\n            values = categories.map(c => catTotals.get(c) ?? 0);\n\n            // Assign distinct colors per wedge (category)\n            bgColors = DEFAULT_BG_COLORS.slice(0, categories.length);\n            borderColors = DEFAULT_COLORS.slice(0, categories.length);\n        } else {\n            // Simple: one value per category\n            const catAgg = new Map<string, number>();\n            for (const row of table) {\n                const cat = String(row[catField] ?? '');\n                const val = Number(row[valField]) || 0;\n                catAgg.set(cat, (catAgg.get(cat) ?? 0) + val);\n            }\n\n            labels = categories;\n            values = categories.map(c => catAgg.get(c) ?? 0);\n            bgColors = DEFAULT_BG_COLORS.slice(0, categories.length);\n            borderColors = DEFAULT_COLORS.slice(0, categories.length);\n        }\n\n        // Alignment: 'center' puts wedge center at 12 o'clock,\n        // 'left' puts wedge left edge at 12 o'clock.\n        const alignment = ctx.chartProperties?.alignment ?? 'left';\n        const n = categories.length;\n        // Chart.js polarArea: startAngle 0 = 12 o'clock, CW.\n        // Default (startAngle=0) is left alignment.\n        // For center: offset by -halfSlice degrees.\n        const startAngle = alignment === 'center' && n > 0\n            ? -(180 / n)\n            : 0;\n\n        const config: any = {\n            type: 'polarArea',\n            data: {\n                labels,\n                datasets: [{\n                    data: values,\n                    backgroundColor: bgColors,\n                    borderColor: borderColors,\n                    borderWidth: 1,\n                }],\n            },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                startAngle,\n                scales: {\n                    r: {\n                        beginAtZero: true,\n                        ticks: { display: true },\n                    },\n                },\n                plugins: {\n                    legend: { display: true, position: 'right' as const },\n                    tooltip: { enabled: true },\n                },\n            },\n            _width: Math.max(ctx.canvasSize.width, 350),\n            _height: Math.max(ctx.canvasSize.height, 300),\n        };\n\n        Object.assign(spec, config);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'alignment', label: 'Alignment', type: 'discrete', options: [\n                { value: 'left', label: 'Left (default)' },\n                { value: 'center', label: 'Center' },\n            ],\n        } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/templates/scatter.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js Scatter Plot template.\n *\n * Maps scatter semantics to Chart.js config:\n *   VL: encoding.x.field + encoding.y.field → positional channels\n *   CJS: datasets[].data = [{x, y}, ...] with type: 'scatter'\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { DEFAULT_COLORS, DEFAULT_BG_COLORS } from './utils';\n\n/** Compute a reasonable point radius based on canvas area and point count. */\nfunction computePointRadius(width: number, height: number, pointCount: number): number {\n    const canvasArea = width * height;\n    const areaPerPoint = canvasArea / Math.max(1, pointCount);\n    const idealRadius = Math.sqrt(areaPerPoint * 0.05) / 2;\n    return Math.max(2, Math.min(6, Math.round(idealRadius)));\n}\n\nexport const cjsScatterPlotDef: ChartTemplateDef = {\n    chart: 'Scatter Plot',\n    template: { mark: 'circle', encoding: {} },\n    channels: ['x', 'y', 'color', 'size', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xField = channelSemantics.x?.field;\n        const yField = channelSemantics.y?.field;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xField || !yField) return;\n\n        const opacity = chartProperties?.opacity ?? 1;\n\n        const config: any = {\n            type: 'scatter',\n            data: { datasets: [] },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                scales: {\n                    x: {\n                        type: 'linear',\n                        title: { display: true, text: xField },\n                    },\n                    y: {\n                        type: 'linear',\n                        title: { display: true, text: yField },\n                    },\n                },\n                plugins: {\n                    tooltip: { enabled: true },\n                },\n            },\n        };\n\n        // Apply zero-baseline decisions\n        // Chart.js linear scales default beginAtZero to false, so we must\n        // explicitly set true when the semantic decision includes zero.\n        if (channelSemantics.x?.zero) {\n            config.options.scales.x.beginAtZero = channelSemantics.x.zero.zero !== false;\n        }\n        if (channelSemantics.y?.zero) {\n            config.options.scales.y.beginAtZero = channelSemantics.y.zero.zero !== false;\n        }\n\n        if (colorField) {\n            // Multi-series: group by color field\n            const groups = new Map<string, { x: number; y: number }[]>();\n            for (const row of table) {\n                const key = String(row[colorField] ?? '');\n                if (!groups.has(key)) groups.set(key, []);\n                groups.get(key)!.push({ x: row[xField], y: row[yField] });\n            }\n\n            let colorIdx = 0;\n            for (const [name, data] of groups) {\n                config.data.datasets.push({\n                    label: name,\n                    data,\n                    backgroundColor: DEFAULT_BG_COLORS[colorIdx % DEFAULT_BG_COLORS.length],\n                    borderColor: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length],\n                    borderWidth: 1,\n                    pointRadius: 4,\n                });\n                colorIdx++;\n            }\n            config.options.plugins.legend = { display: true };\n        } else {\n            const data = table.map(row => ({ x: row[xField], y: row[yField] }));\n            config.data.datasets.push({\n                data,\n                backgroundColor: `rgba(54, 162, 235, ${opacity})`,\n                borderColor: 'rgba(54, 162, 235, 1)',\n                borderWidth: 1,\n                pointRadius: 4,\n            });\n            config.options.plugins.legend = { display: false };\n        }\n\n        // Write Chart.js config into spec\n        Object.assign(spec, config);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'opacity', label: 'Opacity', type: 'continuous', min: 0.1, max: 1, step: 0.05, defaultValue: 1 },\n    ],\n    postProcess: (option, ctx) => {\n        if (!option.data?.datasets) return;\n        const w = option._width || ctx.canvasSize.width;\n        const h = option._height || ctx.canvasSize.height;\n        const pointCount = ctx.table.length;\n        const radius = computePointRadius(w, h, pointCount);\n        for (const ds of option.data.datasets) {\n            if (ds.pointRadius == null || ds.pointRadius === 4) {\n                ds.pointRadius = radius;\n            }\n        }\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/chartjs/templates/utils.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Shared helper functions for Chart.js template hooks.\n * Pure logic — no UI dependencies.\n */\n\nimport type { ChannelSemantics } from '../../core/types';\n\n// ---------------------------------------------------------------------------\n// Discrete-dimension helpers\n// ---------------------------------------------------------------------------\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\n/**\n * Get the number of unique non-null values for a field in the data table.\n */\nexport function getFieldCardinality(field: string, table: any[]): number {\n    return new Set(table.map((r: any) => r[field]).filter((v: any) => v != null)).size;\n}\n\n// ---------------------------------------------------------------------------\n// Chart.js-specific helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Extract unique category values from data for a given field, preserving order.\n * If `ordinalSortOrder` is provided, returns values sorted in that canonical order.\n */\nexport function extractCategories(data: any[], field: string, ordinalSortOrder?: string[]): string[] {\n    const seen = new Set<string>();\n    const result: string[] = [];\n    for (const row of data) {\n        const val = row[field];\n        if (val != null) {\n            const key = String(val);\n            if (!seen.has(key)) {\n                seen.add(key);\n                result.push(key);\n            }\n        }\n    }\n\n    if (ordinalSortOrder && ordinalSortOrder.length > 0) {\n        const orderMap = new Map(ordinalSortOrder.map((v, i) => [v, i]));\n        result.sort((a, b) => {\n            const ia = orderMap.get(a);\n            const ib = orderMap.get(b);\n            if (ia !== undefined && ib !== undefined) return ia - ib;\n            if (ia !== undefined) return -1;\n            if (ib !== undefined) return 1;\n            return 0;\n        });\n    }\n\n    return result;\n}\n\n/**\n * Group data by a categorical field.\n * Returns a map: seriesName → rows[].\n */\nexport function groupBy(data: any[], field: string): Map<string, any[]> {\n    const groups = new Map<string, any[]>();\n    for (const row of data) {\n        const key = String(row[field] ?? '');\n        if (!groups.has(key)) groups.set(key, []);\n        groups.get(key)!.push(row);\n    }\n    return groups;\n}\n\n/**\n * Default Chart.js color palette (RGBA with alpha for fill).\n */\nexport const DEFAULT_COLORS = [\n    'rgba(54, 162, 235, 1)',    // blue\n    'rgba(255, 99, 132, 1)',    // red\n    'rgba(255, 206, 86, 1)',    // yellow\n    'rgba(75, 192, 192, 1)',    // teal\n    'rgba(153, 102, 255, 1)',   // purple\n    'rgba(255, 159, 64, 1)',    // orange\n    'rgba(46, 204, 113, 1)',    // green\n    'rgba(52, 73, 94, 1)',      // dark blue-grey\n    'rgba(231, 76, 60, 1)',     // red-orange\n    'rgba(149, 165, 166, 1)',   // grey\n];\n\nexport const DEFAULT_BG_COLORS = [\n    'rgba(54, 162, 235, 0.6)',\n    'rgba(255, 99, 132, 0.6)',\n    'rgba(255, 206, 86, 0.6)',\n    'rgba(75, 192, 192, 0.6)',\n    'rgba(153, 102, 255, 0.6)',\n    'rgba(255, 159, 64, 0.6)',\n    'rgba(46, 204, 113, 0.6)',\n    'rgba(52, 73, 94, 0.6)',\n    'rgba(231, 76, 60, 0.6)',\n    'rgba(149, 165, 166, 0.6)',\n];\n\n/**\n * Detect which axis is the category (banded) axis and which is the value axis.\n */\nexport function detectAxes(\n    channelSemantics: Record<string, ChannelSemantics>,\n): { categoryAxis: 'x' | 'y'; valueAxis: 'x' | 'y' } {\n    const xCS = channelSemantics.x;\n    const yCS = channelSemantics.y;\n\n    if (xCS && isDiscrete(xCS.type)) {\n        return { categoryAxis: 'x', valueAxis: 'y' };\n    }\n    if (yCS && isDiscrete(yCS.type)) {\n        return { categoryAxis: 'y', valueAxis: 'x' };\n    }\n    return { categoryAxis: 'x', valueAxis: 'y' };\n}\n\n/**\n * Build category-aligned data array for a subset of rows.\n * Returns values indexed by category position (null for missing).\n */\nexport function buildCategoryAlignedData(\n    rows: any[],\n    xField: string,\n    yField: string,\n    categories: string[],\n): (number | null)[] {\n    const map = new Map<string, number>();\n    for (const row of rows) {\n        const key = String(row[xField] ?? '');\n        const val = row[yField];\n        if (val != null && !isNaN(val)) {\n            map.set(key, (map.get(key) ?? 0) + Number(val));\n        }\n    }\n    return categories.map(cat => map.get(cat) ?? null);\n}\n"
  },
  {
    "path": "src/lib/agents-chart/core/compute-layout.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * =============================================================================\n * PHASE 1: COMPUTE LAYOUT\n * =============================================================================\n *\n * Determine how big things should be — axis lengths, step sizes,\n * subplot dimensions, label sizing, and overflow truncation — from data\n * density, axis classification, and template-provided tuning knobs.\n *\n * VL dependency: **None**\n *\n * This module reads abstract axis descriptors (AxisLayoutInput) and\n * produces abstract layout numbers (LayoutResult). The same layout\n * engine works regardless of output format.\n *\n * ── Backend Responsibility ──────────────────────────────────────────\n * The LayoutResult is a target-agnostic description of \"how big things\n * should be\".  Each rendering backend (Vega-Lite, ECharts, etc.) MUST:\n *\n *   1. Call computeLayout() once per chart (facet-aware — it already\n *      divides subplot sizes for the facet grid).\n *\n *   2. Translate the LayoutResult into its own rendering format:\n *      - subplotWidth / subplotHeight → plot area size (before margins)\n *      - xStep / yStep → bar widths, band sizes, category spacing\n *      - stepPadding → inter-category gap (barCategoryGap, paddingInner)\n *      - label sizing → font size, rotation, truncation\n *\n *   3. Add its own margins, padding, and chrome (axis labels, titles,\n *      legends, CANVAS_BUFFER) around the subplot area.\n *\n *   4. Handle facet-specific concerns itself:\n *      - Column wrapping (when user specifies column-only, the backend\n *        decides how many columns per visual row and restructures the\n *        panel grid accordingly).\n *      - Per-panel vs shared axis titles.\n *      - Panel positioning and header labels.\n *\n * The layout engine does NOT know about VL encodings, ECharts grid\n * objects, or any rendering-specific structure.\n * =============================================================================\n */\n\nimport type {\n    ChannelSemantics,\n    LayoutDeclaration,\n    LayoutResult,\n    AssembleOptions,\n    ChannelBudgets,\n} from './types';\nimport {\n    computeElasticBudget,\n    computeAxisStep,\n    computeGasPressure,\n    computeLabelSizing,\n    DEFAULT_GAS_PRESSURE_PARAMS,\n    type ElasticStretchParams,\n    type GasPressureParams,\n    type GasPressureDecision,\n} from './decisions';\n\n// ---------------------------------------------------------------------------\n// Internal types\n// ---------------------------------------------------------------------------\n\ninterface AxisLayoutInput {\n    /** Spring model (banded) or gas pressure (non-banded) */\n    mode: 'banded' | 'non-banded';\n    /** Number of discrete positions (for banded) */\n    itemCount: number;\n    /** Number of sub-items per group (for grouped bars) */\n    subItemsPerGroup?: number;\n    /** Numeric values along this axis (for gas pressure) */\n    values?: number[];\n    /** Data extent [min, max] */\n    domain?: [number, number];\n    /** Number of distinct series (for series-based pressure) */\n    seriesCount?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Public API: computeLayout\n// ---------------------------------------------------------------------------\n\n/**\n * Phase 1: Compute layout decisions.\n *\n * Takes channel semantics, template layout declaration, data, canvas size,\n * and assembly options to produce a LayoutResult with step sizes, subplot\n * dimensions, label sizing, and truncation warnings.\n *\n * VL dependency: **None**\n *\n * @param channelSemantics   Phase 0 output\n * @param declaration        Template's layout declaration (axisFlags, resolvedTypes,\n *                           grouping, binnedAxes)\n * @param table              Data rows (post-overflow filtered)\n * @param canvasSize         Target canvas dimensions\n * @param options            Assembly options (merged with template overrides)\n * @param facetGrid          Optional pre-decided facet grid from computeFacetGrid.\n *                           When provided, computeLayout uses these column/row\n *                           counts instead of counting from data — this\n *                           eliminates the circularity between wrapping and\n *                           banded axis sizing.\n */\nexport function computeLayout(\n    channelSemantics: Record<string, ChannelSemantics>,\n    declaration: LayoutDeclaration,\n    table: any[],\n    canvasSize: { width: number; height: number },\n    options: AssembleOptions = {},\n    facetGrid?: { columns: number; rows: number },\n): LayoutResult {\n    const {\n        elasticity: elasticityVal = 0.5,\n        maxStretch: maxStretchVal = 2,\n        facetElasticity: facetElasticityVal = 0.3,\n        minStep: minStepVal = 6,\n        minSubplotSize: minSubplotVal = 60,\n        defaultStepMultiplier = 1,\n        stepPadding: stepPaddingVal = 0.1,\n        maintainContinuousAxisRatio = false,\n        continuousMarkCrossSection,\n    } = options;\n\n    const defaultChartWidth = canvasSize.width;\n    const defaultChartHeight = canvasSize.height;\n\n    // Facet overhead: fixed (axis labels, titles) + per-panel gap (spacing).\n    const fixW = options.facetFixedPadding?.width ?? 0;\n    const fixH = options.facetFixedPadding?.height ?? 0;\n    const gap  = options.facetGap ?? 0;\n\n    const baseRefSize = 300;\n    const sizeRatio = Math.max(defaultChartWidth, defaultChartHeight) / baseRefSize;\n    const defaultStepSize = Math.round(20 * Math.max(1, sizeRatio) * defaultStepMultiplier);\n\n    const isDiscreteType = (t: string | undefined) => t === 'nominal' || t === 'ordinal';\n\n    // Apply resolved types from template declaration\n    const effectiveTypes: Record<string, string> = {};\n    for (const [ch, cs] of Object.entries(channelSemantics)) {\n        effectiveTypes[ch] = declaration.resolvedTypes?.[ch] || cs.type;\n    }\n\n    // --- Classify axes and count items ---\n    const axisFlags = declaration.axisFlags || {};\n    const xBanded = axisFlags.x?.banded ?? false;\n    const yBanded = axisFlags.y?.banded ?? false;\n\n    const nominalCount: Record<string, number> = {\n        x: 0, y: 0, column: 0, row: 0, group: 0,\n    };\n\n    // Count discrete values per channel\n    for (const channel of ['x', 'y', 'column', 'row', 'color'] as const) {\n        const cs = channelSemantics[channel];\n        if (!cs?.field) continue;\n        const effectiveType = effectiveTypes[channel] || cs.type;\n        if (!isDiscreteType(effectiveType)) continue;\n        const uniqueValues = [...new Set(table.map((r: any) => r[cs.field]))];\n        nominalCount[channel] = uniqueValues.length;\n    }\n\n    // Detect grouping from 'group' channel + discrete axis\n    const groupField = channelSemantics.group?.field;\n    let groupAxis: 'x' | 'y' | undefined;\n    if (groupField) {\n        nominalCount.group = new Set(table.map((r: any) => r[groupField])).size;\n        if (isDiscreteType(effectiveTypes.x ?? channelSemantics.x?.type)) groupAxis = 'x';\n        else if (isDiscreteType(effectiveTypes.y ?? channelSemantics.y?.type)) groupAxis = 'y';\n    }\n\n    // Total discrete items per axis (grouping multiplies the grouped axis)\n    const xGroupMultiplier = (groupAxis === 'x' && nominalCount.group > 1) ? nominalCount.group : 1;\n    const yGroupMultiplier = (groupAxis === 'y' && nominalCount.group > 1) ? nominalCount.group : 1;\n    let xTotalNominalCount = nominalCount.x * xGroupMultiplier;\n    let yTotalNominalCount = nominalCount.y * yGroupMultiplier;\n\n    // --- Step size hints ---\n    // Minimum group step: the inter-group gap (stepPadding × step) must be\n    // at least MIN_GROUP_GAP_PX pixels so groups are visually separated.\n    const MIN_GROUP_GAP_PX = 3;\n    const xMinGroupStep = xGroupMultiplier > 1 ? Math.max(Math.ceil(MIN_GROUP_GAP_PX / stepPaddingVal), 2 * xGroupMultiplier) : minStepVal;\n    const yMinGroupStep = yGroupMultiplier > 1 ? Math.max(Math.ceil(MIN_GROUP_GAP_PX / stepPaddingVal), 2 * yGroupMultiplier) : minStepVal;\n\n    // (Overflow filtering is now handled by filterOverflow() before\n    //  computeLayout is called. The data passed here is already filtered.)\n\n    // --- Count banded continuous axes ---\n    let xContinuousAsDiscrete = 0;\n    let yContinuousAsDiscrete = 0;\n    for (const axis of ['x', 'y'] as const) {\n        const cs = channelSemantics[axis];\n        if (!cs?.field) continue;\n        const effectiveType = effectiveTypes[axis] || cs.type;\n        if (isDiscreteType(effectiveType)) continue;\n\n        const isBanded = (axis === 'x' ? xBanded : yBanded);\n        // Check for binned from declaration\n        const isBinned = declaration.binnedAxes?.[axis];\n        if (!isBanded && !isBinned) continue;\n\n        let count: number;\n        if (isBinned) {\n            const binDef = declaration.binnedAxes![axis];\n            // Default to 10 bins (Vega-Lite's default maxbins)\n            count = typeof binDef === 'object' && binDef.maxbins\n                ? binDef.maxbins : 10;\n        } else {\n            count = new Set(table.map((r: any) => r[cs.field])).size;\n        }\n        if (count <= 1) continue;\n\n        if (axis === 'x') {\n            xContinuousAsDiscrete = count;\n        } else {\n            yContinuousAsDiscrete = count;\n        }\n    }\n\n    // --- Facet layout ---\n    // Use pre-decided grid from filterOverflow when available.\n    // This avoids the circularity where wrapping depends on subplot\n    // width which depends on facet count which depends on wrapping.\n    let facetCols = 1;\n    let facetRows = 1;\n    if (facetGrid) {\n        facetCols = facetGrid.columns;\n        facetRows = facetGrid.rows;\n    } else {\n        if (nominalCount.column > 0) facetCols = nominalCount.column;\n        if (nominalCount.row > 0) facetRows = nominalCount.row;\n    }\n\n    // --- Facet subplot sizing ---\n    // Log-scale axes need more room so the minor grid lines (1,2,3…9 per\n    // decade) remain legible and act as the visual cue that it's log scale.\n    // Compute the number of orders of magnitude each axis spans; each\n    // decade needs ~40px minimum to avoid a dense wall of grid lines.\n    const LOG_PX_PER_DECADE = 40;\n    let logBoostX = 0;\n    let logBoostY = 0;\n    for (const axis of ['x', 'y'] as const) {\n        const cs = channelSemantics[axis];\n        if (!cs?.field || !cs.scaleType) continue;\n        if (cs.scaleType !== 'log' && cs.scaleType !== 'symlog') continue;\n        const vals = table\n            .map((r: any) => r[cs.field])\n            .filter((v: any) => typeof v === 'number' && v > 0 && isFinite(v));\n        if (vals.length < 2) continue;\n        const decades = Math.log10(Math.max(...vals)) - Math.log10(Math.min(...vals));\n        const needed = Math.ceil(Math.max(1, decades)) * LOG_PX_PER_DECADE;\n        if (axis === 'x') logBoostX = needed;\n        else logBoostY = needed;\n    }\n    const minContinuousSize = Math.max(10, minStepVal);\n    const minContinuousSizeX = Math.max(minContinuousSize, logBoostX);\n    const minContinuousSizeY = Math.max(minContinuousSize, logBoostY);\n\n    let subplotWidth: number;\n    if (facetCols > 1) {\n        const stretch = Math.min(maxStretchVal, Math.pow(facetCols, facetElasticityVal));\n        subplotWidth = Math.round(Math.max(minContinuousSizeX,\n            (defaultChartWidth * stretch - fixW) / facetCols - gap));\n    } else {\n        subplotWidth = defaultChartWidth;\n    }\n\n    let subplotHeight: number;\n    if (facetRows > 1) {\n        const stretch = Math.min(maxStretchVal, Math.pow(facetRows, facetElasticityVal));\n        subplotHeight = Math.round(Math.max(minContinuousSizeY,\n            (defaultChartHeight * stretch - fixH) / facetRows - gap));\n    } else {\n        subplotHeight = defaultChartHeight;\n    }\n\n    // --- Gas pressure stretch for continuous non-banded axes ---\n    const xIsContinuousNonBanded = xTotalNominalCount === 0 && xContinuousAsDiscrete === 0;\n    const yIsContinuousNonBanded = yTotalNominalCount === 0 && yContinuousAsDiscrete === 0;\n\n    if (xIsContinuousNonBanded && yIsContinuousNonBanded) {\n        const xCS = channelSemantics.x;\n        const yCS = channelSemantics.y;\n\n        if (xCS?.field && yCS?.field) {\n            const isTempX = (effectiveTypes.x || xCS.type) === 'temporal';\n            const isTempY = (effectiveTypes.y || yCS.type) === 'temporal';\n\n            const xNumeric: number[] = [];\n            const yNumeric: number[] = [];\n            for (const row of table) {\n                let xv = row[xCS.field];\n                let yv = row[yCS.field];\n                if (xv == null || yv == null) continue;\n                if (isTempX) xv = +new Date(xv);\n                else xv = +xv;\n                if (isTempY) yv = +new Date(yv);\n                else yv = +yv;\n                if (isNaN(xv) || isNaN(yv)) continue;\n                xNumeric.push(xv);\n                yNumeric.push(yv);\n            }\n\n            if (xNumeric.length > 1) {\n                const xMin = Math.min(...xNumeric);\n                const xMax = Math.max(...xNumeric);\n                const yMin = Math.min(...yNumeric);\n                const yMax = Math.max(...yNumeric);\n\n                const xDomain: [number, number] = [xMin, xMax];\n                const yDomain: [number, number] = [yMin, yMax];\n\n                let gasPressureParams: GasPressureParams = DEFAULT_GAS_PRESSURE_PARAMS;\n                if (continuousMarkCrossSection != null) {\n                    if (typeof continuousMarkCrossSection === 'number') {\n                        gasPressureParams = { ...DEFAULT_GAS_PRESSURE_PARAMS, markCrossSection: continuousMarkCrossSection };\n                    } else {\n                        const maxCS = Math.max(continuousMarkCrossSection.x, continuousMarkCrossSection.y);\n                        gasPressureParams = {\n                            ...DEFAULT_GAS_PRESSURE_PARAMS,\n                            markCrossSection: maxCS,\n                            markCrossSectionX: continuousMarkCrossSection.x,\n                            markCrossSectionY: continuousMarkCrossSection.y,\n                            ...(continuousMarkCrossSection.elasticity != null && { elasticity: continuousMarkCrossSection.elasticity }),\n                            ...(continuousMarkCrossSection.maxStretch != null && { maxStretch: continuousMarkCrossSection.maxStretch }),\n                        };\n\n                        // Series-count-based pressure\n                        if (continuousMarkCrossSection.seriesCountAxis) {\n                            const resolvedAxis = continuousMarkCrossSection.seriesCountAxis === 'auto'\n                                ? 'y' : continuousMarkCrossSection.seriesCountAxis;\n\n                            const nSeries = countDistinctSeries(channelSemantics, table);\n                            if (resolvedAxis === 'y') {\n                                gasPressureParams.yItemCountOverride = nSeries;\n                            } else {\n                                gasPressureParams.xItemCountOverride = nSeries;\n                            }\n                        }\n                    }\n                }\n\n                const gasPressureResult = computeGasPressure(\n                    xNumeric, yNumeric, xDomain, yDomain,\n                    subplotWidth, subplotHeight, gasPressureParams,\n                );\n\n                if (gasPressureResult.stretchX > 1 || gasPressureResult.stretchY > 1) {\n                    let sx = gasPressureResult.stretchX;\n                    let sy = gasPressureResult.stretchY;\n                    if (maintainContinuousAxisRatio) {\n                        const maxStretch = Math.max(sx, sy);\n                        sx = maxStretch;\n                        sy = maxStretch;\n                    }\n                    if (typeof continuousMarkCrossSection === 'object' &&\n                        continuousMarkCrossSection.seriesCountAxis) {\n                        const sAxis = continuousMarkCrossSection.seriesCountAxis === 'auto'\n                            ? 'y' : continuousMarkCrossSection.seriesCountAxis;\n                        if (sAxis === 'y' && sy > 1 && sx < sy) sx = sy;\n                        if (sAxis === 'x' && sx > 1 && sy < sx) sy = sx;\n                    }\n                    subplotWidth = Math.round(subplotWidth * sx);\n                    subplotHeight = Math.round(subplotHeight * sy);\n                }\n            }\n        }\n    } else if (xIsContinuousNonBanded || yIsContinuousNonBanded) {\n        const contAxis = xIsContinuousNonBanded ? 'x' : 'y';\n        const otherAxisHasDiscreteItems = contAxis === 'x'\n            ? (yTotalNominalCount > 0 || yContinuousAsDiscrete > 0)\n            : (xTotalNominalCount > 0 || xContinuousAsDiscrete > 0);\n\n        let seriesStretchApplied = false;\n        if (typeof continuousMarkCrossSection === 'object' && continuousMarkCrossSection.seriesCountAxis) {\n            const resolvedAxis = continuousMarkCrossSection.seriesCountAxis === 'auto'\n                ? contAxis : continuousMarkCrossSection.seriesCountAxis;\n\n            if (resolvedAxis === contAxis) {\n                const sigmaPerSeries = contAxis === 'x'\n                    ? continuousMarkCrossSection.x\n                    : continuousMarkCrossSection.y;\n                const baseDim = contAxis === 'x' ? subplotWidth : subplotHeight;\n                const nSeries = countDistinctSeries(channelSemantics, table);\n                const pressure = (nSeries * sigmaPerSeries) / baseDim;\n\n                const elast = continuousMarkCrossSection.elasticity ?? DEFAULT_GAS_PRESSURE_PARAMS.elasticity;\n                const maxS = continuousMarkCrossSection.maxStretch ?? DEFAULT_GAS_PRESSURE_PARAMS.maxStretch;\n\n                if (pressure > 1) {\n                    const stretch = Math.min(maxS, Math.pow(pressure, elast));\n                    if (contAxis === 'x') {\n                        subplotWidth = Math.round(subplotWidth * stretch);\n                    } else {\n                        subplotHeight = Math.round(subplotHeight * stretch);\n                    }\n                }\n                seriesStretchApplied = true;\n            }\n        }\n\n        if (!seriesStretchApplied && !otherAxisHasDiscreteItems) {\n            const contCS = channelSemantics[contAxis];\n            if (contCS?.field) {\n                const isTemporal = (effectiveTypes[contAxis] || contCS.type) === 'temporal';\n                const contValues: number[] = [];\n                for (const row of table) {\n                    let v = row[contCS.field];\n                    if (v == null) continue;\n                    if (isTemporal) v = +new Date(v);\n                    else v = +v;\n                    if (!isNaN(v)) contValues.push(v);\n                }\n                const sigma1d = Math.sqrt(DEFAULT_GAS_PRESSURE_PARAMS.markCrossSection);\n                const baseDim = contAxis === 'x' ? subplotWidth : subplotHeight;\n                const pressure1d = (contValues.length * sigma1d) / baseDim;\n                if (pressure1d > 1) {\n                    const stretch1d = Math.min(\n                        DEFAULT_GAS_PRESSURE_PARAMS.maxStretch,\n                        Math.pow(pressure1d, DEFAULT_GAS_PRESSURE_PARAMS.elasticity),\n                    );\n                    if (contAxis === 'x') {\n                        subplotWidth = Math.round(subplotWidth * stretch1d);\n                    } else {\n                        subplotHeight = Math.round(subplotHeight * stretch1d);\n                    }\n                }\n            }\n        }\n    }\n\n    // --- Elastic stretch for discrete axes ---\n    const elasticParams: ElasticStretchParams = {\n        elasticity: elasticityVal,\n        maxStretch: maxStretchVal,\n        defaultStepSize,\n        minStep: minStepVal,\n    };\n\n    const xAxis = computeAxisStep(xTotalNominalCount, xContinuousAsDiscrete, subplotWidth, elasticParams);\n    const yAxis = computeAxisStep(yTotalNominalCount, yContinuousAsDiscrete, subplotHeight, elasticParams);\n\n    const xIsDiscrete = xTotalNominalCount > 0;\n    const yIsDiscrete = yTotalNominalCount > 0;\n\n    const xHasGrouping = groupAxis === 'x' && nominalCount.group > 0;\n    const yHasGrouping = groupAxis === 'y' && nominalCount.group > 0;\n\n    let xStepSize: number;\n    let yStepSize: number;\n    let xStepUnit: 'item' | 'group' | undefined;\n    let yStepUnit: 'item' | 'group' | undefined;\n\n    if (xIsDiscrete && xHasGrouping) {\n        const itemsPerGroup = nominalCount.group;\n        const defaultGroupStep = itemsPerGroup * defaultStepSize;\n        const minGroupStep = Math.max(Math.ceil(MIN_GROUP_GAP_PX / stepPaddingVal), 2 * itemsPerGroup);\n        const groupAxis = computeAxisStep(nominalCount.x, 0, subplotWidth, elasticParams);\n        const groupStep = Math.max(minGroupStep, Math.min(defaultGroupStep, groupAxis.step));\n        xStepSize = groupStep;\n        xStepUnit = 'group';\n    } else if (xIsDiscrete) {\n        xStepSize = Math.max(minStepVal, Math.min(defaultStepSize, xAxis.step));\n    } else if (xContinuousAsDiscrete > 0) {\n        xStepSize = Math.max(minStepVal, Math.min(defaultStepSize, xAxis.step));\n    } else {\n        xStepSize = defaultStepSize;\n    }\n\n    if (yIsDiscrete && yHasGrouping) {\n        const itemsPerGroup = nominalCount.group;\n        const defaultGroupStep = itemsPerGroup * defaultStepSize;\n        const minGroupStep = Math.max(Math.ceil(MIN_GROUP_GAP_PX / stepPaddingVal), 2 * itemsPerGroup);\n        const groupAxis = computeAxisStep(nominalCount.y, 0, subplotHeight, elasticParams);\n        const groupStep = Math.max(minGroupStep, Math.min(defaultGroupStep, groupAxis.step));\n        yStepSize = groupStep;\n        yStepUnit = 'group';\n    } else if (yIsDiscrete) {\n        yStepSize = Math.max(minStepVal, Math.min(defaultStepSize, yAxis.step));\n    } else if (yContinuousAsDiscrete > 0) {\n        yStepSize = Math.max(minStepVal, Math.min(defaultStepSize, yAxis.step));\n    } else {\n        yStepSize = defaultStepSize;\n    }\n\n    // --- Banded continuous canvas size ---\n    for (const axis of ['x', 'y'] as const) {\n        const count = axis === 'x' ? xContinuousAsDiscrete : yContinuousAsDiscrete;\n        if (count <= 0) continue;\n        const stepSize = axis === 'x' ? xStepSize : yStepSize;\n        const continuousSize = Math.round(stepSize * (count + 1));\n        if (axis === 'x') {\n            subplotWidth = continuousSize;\n        } else {\n            subplotHeight = continuousSize;\n        }\n    }\n\n    // --- Unified stretch budget ------------------------------------------------\n    // Cap the per-subplot dimensions so total canvas never exceeds\n    // canvasWidth × maxStretch (and canvasHeight × maxStretch).\n    // Formula: effectiveW = W × maxStretch − fixedPad; each panel costs subplot + gap.\n    const maxSubplotW = (defaultChartWidth * maxStretchVal - fixW) / facetCols - gap;\n    const maxSubplotH = (defaultChartHeight * maxStretchVal - fixH) / facetRows - gap;\n\n    // Clamp step sizes for discrete/banded axes so VL step-based\n    // sizing respects the same budget.\n    // When step unit is 'group', divide by the number of groups (nominalCount)\n    // rather than the total item count (groups × items-per-group).\n    if (xTotalNominalCount > 0) {\n        const divisor = xStepUnit === 'group' ? nominalCount.x : xTotalNominalCount;\n        const cap = Math.max(minStepVal, Math.floor(maxSubplotW / divisor));\n        if (xStepSize > cap) xStepSize = cap;\n    }\n    if (xContinuousAsDiscrete > 0) {\n        const cap = Math.max(minStepVal, Math.floor(maxSubplotW / (xContinuousAsDiscrete + 1)));\n        if (xStepSize > cap) xStepSize = cap;\n    }\n    if (yTotalNominalCount > 0) {\n        const divisor = yStepUnit === 'group' ? nominalCount.y : yTotalNominalCount;\n        const cap = Math.max(minStepVal, Math.floor(maxSubplotH / divisor));\n        if (yStepSize > cap) yStepSize = cap;\n    }\n    if (yContinuousAsDiscrete > 0) {\n        const cap = Math.max(minStepVal, Math.floor(maxSubplotH / (yContinuousAsDiscrete + 1)));\n        if (yStepSize > cap) yStepSize = cap;\n    }\n\n    // Recompute banded subplot size after step clamping.\n    for (const axis of ['x', 'y'] as const) {\n        const count = axis === 'x' ? xContinuousAsDiscrete : yContinuousAsDiscrete;\n        if (count <= 0) continue;\n        const stepSize = axis === 'x' ? xStepSize : yStepSize;\n        if (axis === 'x') subplotWidth = Math.round(stepSize * (count + 1));\n        else subplotHeight = Math.round(stepSize * (count + 1));\n    }\n\n    // Clamp continuous subplot dimensions.\n    subplotWidth = Math.min(subplotWidth, Math.round(maxSubplotW));\n    subplotHeight = Math.min(subplotHeight, Math.round(maxSubplotH));\n\n    // --- Label sizing ---\n    const xHasDiscreteItems = xTotalNominalCount > 0;\n    const yHasDiscreteItems = yTotalNominalCount > 0;\n    const xLabel = computeLabelSizing(xStepSize, xHasDiscreteItems);\n    const yLabel = computeLabelSizing(yStepSize, yHasDiscreteItems);\n\n    return {\n        subplotWidth,\n        subplotHeight,\n        xStep: xStepSize,\n        yStep: yStepSize,\n        xStepUnit,\n        yStepUnit,\n        xContinuousAsDiscrete,\n        yContinuousAsDiscrete,\n        xNominalCount: xTotalNominalCount,\n        yNominalCount: yTotalNominalCount,\n        xLabel,\n        yLabel,\n        stepPadding: stepPaddingVal,\n        facet: (facetCols > 1 || facetRows > 1) ? {\n            columns: facetCols,\n            rows: facetRows,\n            subplotWidth,\n            subplotHeight,\n        } : undefined,\n        effectiveFacetGap: gap,\n        truncations: [],  // Overflow truncations are handled by filterOverflow\n    };\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Count distinct series (color/detail categories) from channel semantics.\n */\nfunction countDistinctSeries(\n    channelSemantics: Record<string, ChannelSemantics>,\n    data: any[],\n): number {\n    const seriesFields: string[] = [];\n    const colorField = channelSemantics.color?.field;\n    const detailField = channelSemantics.detail?.field;\n    if (colorField) seriesFields.push(colorField);\n    if (detailField && detailField !== colorField) seriesFields.push(detailField);\n\n    if (seriesFields.length === 0) return 1;\n\n    const seriesKeys = new Set<string>();\n    for (const row of data) {\n        const key = seriesFields.map(f => String(row[f] ?? '')).join('\\x00');\n        seriesKeys.add(key);\n    }\n    return seriesKeys.size;\n}\n\n// ---------------------------------------------------------------------------\n// Public: computeChannelBudgets\n// ---------------------------------------------------------------------------\n\n/**\n * Compute per-channel maximum values that can fit on the canvas.\n *\n * Uses the **most conservative** assumptions:\n *   - minStep  (smallest px per discrete item)\n *   - minSubplotSize (smallest subplot for continuous axes)\n *   - maxStretch (maximum canvas stretching)\n *\n * This is Step 0c-a in the pipeline — it runs before filterOverflow\n * and produces the budgets that filterOverflow consumes.\n *\n * Pipeline:  computeChannelBudgets → filterOverflow → computeLayout\n *\n * @param channelSemantics  Phase 0 output (field, type per channel)\n * @param declaration       Template layout declaration\n * @param data              Full data table (pre-overflow)\n * @param canvasSize        Target canvas dimensions\n * @param options           Assembly options\n * @returns                 ChannelBudgets with per-channel max-to-keep\n */\nexport function computeChannelBudgets(\n    channelSemantics: Record<string, ChannelSemantics>,\n    declaration: LayoutDeclaration,\n    data: any[],\n    canvasSize: { width: number; height: number },\n    options: AssembleOptions,\n): ChannelBudgets {\n    const {\n        maxStretch: maxStretchVal = 2,\n        minStep: minStepVal = 6,\n        stepPadding: stepPaddingVal = 0.1,\n        maxColorValues: maxColorVal = 24,\n    } = options;\n\n    const fixW = options.facetFixedPadding?.width ?? 0;\n    const fixH = options.facetFixedPadding?.height ?? 0;\n    const gap  = options.facetGap ?? 0;\n\n    const isDiscreteType = (t: string | undefined) => t === 'nominal' || t === 'ordinal';\n    const effectiveType = (ch: string): string | undefined =>\n        declaration.resolvedTypes?.[ch] ?? channelSemantics[ch]?.type;\n\n    // --- 1. Facet grid (delegates to computeFacetGrid) ---\n    const facetGrid = computeFacetGrid(\n        channelSemantics, declaration, data, canvasSize, options,\n    );\n    const facetCols = facetGrid?.columns ?? 1;\n    const facetRows = facetGrid?.rows ?? 1;\n\n    // --- 2. Per-subplot budget at maximum stretch ---\n    const maxSubplotW = Math.max(\n        options.minSubplotSize ?? 60,\n        (canvasSize.width * maxStretchVal - fixW) / facetCols - gap,\n    );\n    const maxSubplotH = Math.max(\n        options.minSubplotSize ?? 60,\n        (canvasSize.height * maxStretchVal - fixH) / facetRows - gap,\n    );\n\n    // --- 3. Grouping detection ---\n    const groupField = channelSemantics.group?.field;\n    let groupCount = 0;\n    let groupAxis: 'x' | 'y' | undefined;\n    if (groupField) {\n        groupCount = new Set(data.map(r => r[groupField])).size;\n        if (isDiscreteType(effectiveType('x'))) groupAxis = 'x';\n        else if (isDiscreteType(effectiveType('y'))) groupAxis = 'y';\n    }\n\n    const xGroupMultiplier = (groupAxis === 'x' && groupCount > 1) ? groupCount : 1;\n    const yGroupMultiplier = (groupAxis === 'y' && groupCount > 1) ? groupCount : 1;\n\n    const MIN_GROUP_GAP_PX = 3;\n    const xMinGroupStep = xGroupMultiplier > 1\n        ? Math.max(Math.ceil(MIN_GROUP_GAP_PX / stepPaddingVal), 2 * xGroupMultiplier)\n        : minStepVal;\n    const yMinGroupStep = yGroupMultiplier > 1\n        ? Math.max(Math.ceil(MIN_GROUP_GAP_PX / stepPaddingVal), 2 * yGroupMultiplier)\n        : minStepVal;\n\n    // --- 4. Per-channel budgets ---\n    let maxXToKeep = Math.floor(maxSubplotW / xMinGroupStep);\n    let maxYToKeep = Math.floor(maxSubplotH / yMinGroupStep);\n\n    // --- 5. Faceted-chart canvas cap ---\n    // When a busy discrete axis makes each subplot wider than the\n    // un-stretched canvas, cap axis items to fit within one canvas\n    // width/height.  This lets subplots be narrower, potentially fitting\n    // more facet columns — reducing overall chart height.\n    //\n    // Example: 70 counties on X × 20 states on column.  Without the cap,\n    // minSubplotWidth = 70 × 6 = 420 → only 1 facet column fits → each\n    // state stacks vertically → excessively tall chart.  With the cap,\n    // X is truncated to floor(400/6) = 66 items, and the facet grid is\n    // re-derived with narrower subplots so more columns fit.\n    if (facetGrid) {\n        const canvasXCap = Math.max(1, Math.floor(canvasSize.width / xMinGroupStep));\n        const canvasYCap = Math.max(1, Math.floor(canvasSize.height / yMinGroupStep));\n\n        if (maxXToKeep > canvasXCap || maxYToKeep > canvasYCap) {\n            maxXToKeep = Math.min(maxXToKeep, canvasXCap);\n            maxYToKeep = Math.min(maxYToKeep, canvasYCap);\n\n            // With tighter axis items, subplots can be narrower, so more\n            // facet columns may fit.  Re-derive the grid for column-only\n            // wrapping (the most affected case).\n            const colField = channelSemantics.column?.field;\n            const rowField = channelSemantics.row?.field;\n            const colCount = colField\n                ? new Set(data.map(r => r[colField])).size : 0;\n\n            if (colCount > 1 && !rowField) {\n                const tighterW = Math.max(\n                    options.minSubplotSize ?? 60,\n                    maxXToKeep * xMinGroupStep,\n                );\n                const totalW = canvasSize.width * maxStretchVal - fixW;\n                const totalH = canvasSize.height * maxStretchVal - fixH;\n                const revisedMaxCols = Math.max(1, Math.floor(\n                    totalW / (tighterW + gap),\n                ));\n                const revisedMaxRows = Math.max(1, Math.floor(\n                    totalH / ((options.minSubplotSize ?? 60) + gap),\n                ));\n                const maxTotal = revisedMaxCols * revisedMaxRows;\n                const effectiveCount = Math.min(colCount, maxTotal);\n                const visRows = Math.ceil(effectiveCount / revisedMaxCols);\n                const visCols = Math.ceil(effectiveCount / visRows);\n\n                facetGrid.columns = visCols;\n                facetGrid.rows = visRows;\n                facetGrid.maxColumnValues = maxTotal;\n            }\n        }\n    }\n\n    // maxColumnValues already carries the correct semantics for both\n    // column+row (per-dimension cap) and column-only wrapping (total\n    // panel count = grid cols × grid rows).  No multiplication needed.\n    const maxValues: Record<string, number> = {\n        x:      maxXToKeep,\n        y:      maxYToKeep,\n        column: facetGrid?.maxColumnValues ?? Infinity,\n        row:    facetGrid?.maxRowValues ?? Infinity,\n        color:  maxColorVal,\n    };\n\n    return { maxValues, facetGrid };\n}\n\n// ---------------------------------------------------------------------------\n// Public: computeFacetGrid\n// ---------------------------------------------------------------------------\n\n/**\n * Decide the facet grid layout (including column-only wrapping).\n *\n * This runs BEFORE filterOverflow and computeLayout.  It:\n *   1. Counts unique column/row values from data.\n *   2. Computes banded-aware minimum subplot dimensions.\n *   3. Computes max columns/rows that fit in the canvas budget.\n *   4. For column-only: wraps into a 2D grid (total panels = cols × rows).\n *   5. For column+row: caps each dimension independently.\n *\n * Returns `undefined` when there are no facet channels.\n *\n * @param channelSemantics  Phase 0 output\n * @param declaration       Template layout declaration\n * @param data              Data rows (pre-overflow — possibly after temporal conversion)\n * @param canvasSize        Target canvas dimensions\n * @param options           Assembly options\n */\nexport function computeFacetGrid(\n    channelSemantics: Record<string, ChannelSemantics>,\n    declaration: LayoutDeclaration,\n    data: any[],\n    canvasSize: { width: number; height: number },\n    options: AssembleOptions,\n): import('./types').FacetGridResult | undefined {\n    const { maxStretch: ms = 2 } = options;\n    const fixW = options.facetFixedPadding?.width ?? 0;\n    const fixH = options.facetFixedPadding?.height ?? 0;\n    const gap  = options.facetGap ?? 0;\n    const minStep = options.minStep ?? 6;\n    const stepPadding = options.stepPadding ?? 0.1;\n    const baseMinSubplot = options.minSubplotSize ?? 60;\n\n    const isDiscreteType = (t: string | undefined) => t === 'nominal' || t === 'ordinal';\n\n    // --- Compute min subplot size per axis ---\n    //\n    // Continuous:  baseMinSubplot (e.g. 60px).\n    //\n    // Discrete (not grouped):\n    //   min(minStep × valueCount, maxDim)\n    //\n    // Discrete (grouped):\n    //   perCategoryStep = max(minStep × groupCount, minGroupStep)\n    //   min(perCategoryStep × valueCount, maxDim)\n    //\n    //   where minGroupStep accounts for the inter-group gap:\n    //     the gap = stepPadding × step, which must be ≥ MIN_GROUP_GAP_PX.\n    //\n    // Always capped at maxDim (full stretched canvas minus fixed overhead)\n    // to guarantee at least 1 facet column/row.\n\n    const maxW = canvasSize.width * ms - fixW;\n    const maxH = canvasSize.height * ms - fixH;\n    const MIN_GROUP_GAP_PX = 3;\n\n    // Grouping detection\n    const groupField = channelSemantics.group?.field;\n    let groupCount = 0;\n    let groupAxis: 'x' | 'y' | undefined;\n    if (groupField) {\n        groupCount = new Set(data.map((r: any) => r[groupField])).size;\n        const xType = declaration.resolvedTypes?.x ?? channelSemantics.x?.type;\n        const yType = declaration.resolvedTypes?.y ?? channelSemantics.y?.type;\n        if (isDiscreteType(xType)) groupAxis = 'x';\n        else if (isDiscreteType(yType)) groupAxis = 'y';\n    }\n\n    let minSubplotWidth = baseMinSubplot;\n    let minSubplotHeight = baseMinSubplot;\n\n    // Log-scale axes need more space for minor grid lines to be legible.\n    const LOG_PX_PER_DECADE_FACET = 40;\n    for (const axis of ['x', 'y'] as const) {\n        const cs = channelSemantics[axis];\n        if (!cs?.field || !cs.scaleType) continue;\n        if (cs.scaleType !== 'log' && cs.scaleType !== 'symlog') continue;\n        const vals = data\n            .map((r: any) => r[cs.field])\n            .filter((v: any) => typeof v === 'number' && v > 0 && isFinite(v));\n        if (vals.length < 2) continue;\n        const decades = Math.log10(Math.max(...vals)) - Math.log10(Math.min(...vals));\n        const needed = Math.ceil(Math.max(1, decades)) * LOG_PX_PER_DECADE_FACET;\n        if (axis === 'x') minSubplotWidth = Math.max(minSubplotWidth, needed);\n        else minSubplotHeight = Math.max(minSubplotHeight, needed);\n    }\n\n    for (const axis of ['x', 'y'] as const) {\n        const cs = channelSemantics[axis];\n        if (!cs?.field) continue;\n\n        const effectiveType = declaration.resolvedTypes?.[axis] ?? cs.type;\n        const isBanded = declaration.axisFlags?.[axis]?.banded === true;\n        if (!isDiscreteType(effectiveType) && !isBanded) continue;\n\n        const valueCount = new Set(data.map((r: any) => r[cs.field])).size;\n        const axisGroupCount = (groupAxis === axis && groupCount > 1) ? groupCount : 1;\n        const maxDim = axis === 'x' ? maxW : maxH;\n\n        let perCategoryStep: number;\n        if (axisGroupCount > 1) {\n            // Grouped: each category needs room for groupCount sub-items\n            // PLUS enough inter-group gap (stepPadding × step ≥ MIN_GROUP_GAP_PX).\n            const minGroupStep = Math.max(\n                Math.ceil(MIN_GROUP_GAP_PX / stepPadding),\n                2 * axisGroupCount,\n            );\n            perCategoryStep = Math.max(minStep * axisGroupCount, minGroupStep);\n        } else {\n            // Ungrouped: one item per category\n            perCategoryStep = minStep;\n        }\n\n        const dataDrivenMin = Math.min(perCategoryStep * valueCount, maxDim);\n        const minDim = Math.max(baseMinSubplot, dataDrivenMin);\n\n        if (axis === 'x') {\n            minSubplotWidth = minDim;\n        } else {\n            minSubplotHeight = minDim;\n        }\n    }\n\n    // effectiveW = totalBudget - fixedOverhead; each panel costs (subplot + gap).\n    const effectiveW = maxW;\n    const effectiveH = maxH;\n    const maxFacetColumns = Math.max(1, Math.floor(\n        effectiveW / (minSubplotWidth + gap),\n    ));\n    const maxFacetRows = Math.max(1, Math.floor(\n        effectiveH / (minSubplotHeight + gap),\n    ));\n\n    // Identify column/row fields\n    const colField = channelSemantics.column?.field;\n    const rowField = channelSemantics.row?.field;\n    if (!colField && !rowField) return undefined;\n\n    const colCount = colField\n        ? new Set(data.map((r: any) => r[colField])).size : 0;\n    const rowCount = rowField\n        ? new Set(data.map((r: any) => r[rowField])).size : 0;\n\n    if (colCount === 0 && rowCount === 0) return undefined;\n\n    if (colCount > 0 && rowCount === 0) {\n        // Column-only: 2D budget for total panels, wrap visually.\n        const maxTotalPanels = maxFacetColumns * maxFacetRows;\n        const effectiveCount = Math.min(colCount, maxTotalPanels);\n        // Balanced wrapping: compute rows first, then distribute evenly.\n        // e.g. 10 items, max 6/row → 2 rows of 5 instead of 6+4.\n        const visRows = Math.ceil(effectiveCount / maxFacetColumns);\n        const visCols = Math.ceil(effectiveCount / visRows);\n        return {\n            columns: visCols,\n            rows: visRows,\n            maxColumnValues: maxTotalPanels,\n            maxRowValues: maxFacetRows,\n        };\n    }\n\n    // Column+row or row-only: cap each dimension independently.\n    return {\n        columns: Math.max(1, Math.min(colCount, maxFacetColumns)),\n        rows: Math.max(1, Math.min(rowCount, maxFacetRows)),\n        maxColumnValues: maxFacetColumns,\n        maxRowValues: maxFacetRows,\n    };\n}\n\n// ---------------------------------------------------------------------------\n// Public: computeMinSubplotDimensions\n// ---------------------------------------------------------------------------\n\n/**\n * Compute minimum subplot dimensions considering banded and discrete axes.\n *\n * For banded axes (e.g. temporal x on candlestick), each data point needs\n * `minStep` px, so the subplot minimum can be much larger than the generic\n * `minSubplotSize` (60px).  For discrete axes, the count of unique values\n * drives the minimum similarly.\n *\n * This is used by both filterOverflow (pre-layout) and the assemblers\n * (post-layout) to consistently compute facet column/row caps.\n *\n * @param channelSemantics  Phase 0 output (field, type per channel)\n * @param declaration       Template layout declaration (axisFlags, resolvedTypes)\n * @param data              Data rows\n * @param options           Assembly options ({ minStep, minSubplotSize })\n * @returns                 { minSubplotWidth, minSubplotHeight }\n */\nexport function computeMinSubplotDimensions(\n    channelSemantics: Record<string, ChannelSemantics>,\n    declaration: LayoutDeclaration,\n    data: any[],\n    options: { minStep?: number; minSubplotSize?: number },\n): { minSubplotWidth: number; minSubplotHeight: number } {\n    const minStep = options.minStep ?? 6;\n    const minSubplot = options.minSubplotSize ?? 60;\n\n    let minSubplotWidth = minSubplot;\n    let minSubplotHeight = minSubplot;\n\n    // Log-scale axes need more space so minor grid lines stay legible.\n    const LOG_PX_PER_DECADE_MIN = 40;\n    for (const axis of ['x', 'y'] as const) {\n        const cs = channelSemantics[axis];\n        if (!cs?.field || !cs.scaleType) continue;\n        if (cs.scaleType !== 'log' && cs.scaleType !== 'symlog') continue;\n        const vals = data\n            .map((r: any) => r[cs.field])\n            .filter((v: any) => typeof v === 'number' && v > 0 && isFinite(v));\n        if (vals.length < 2) continue;\n        const decades = Math.log10(Math.max(...vals)) - Math.log10(Math.min(...vals));\n        const needed = Math.ceil(Math.max(1, decades)) * LOG_PX_PER_DECADE_MIN;\n        if (axis === 'x') minSubplotWidth = Math.max(minSubplotWidth, needed);\n        else minSubplotHeight = Math.max(minSubplotHeight, needed);\n    }\n\n    const isDiscreteType = (t: string | undefined) =>\n        t === 'nominal' || t === 'ordinal';\n\n    for (const axis of ['x', 'y'] as const) {\n        const cs = channelSemantics[axis];\n        if (!cs?.field) continue;\n\n        const effectiveType = declaration.resolvedTypes?.[axis] ?? cs.type;\n        const isBanded = declaration.axisFlags?.[axis]?.banded === true;\n        const isDiscrete = isDiscreteType(effectiveType);\n\n        let itemCount = 0;\n        if (isBanded || isDiscrete) {\n            itemCount = new Set(data.map((r: any) => r[cs.field])).size;\n        }\n\n        if (itemCount > 0) {\n            const minDim = Math.max(minSubplot, itemCount * minStep);\n            if (axis === 'x') {\n                minSubplotWidth = Math.max(minSubplotWidth, minDim);\n            } else {\n                minSubplotHeight = Math.max(minSubplotHeight, minDim);\n            }\n        }\n    }\n\n    return { minSubplotWidth, minSubplotHeight };\n}\n"
  },
  {
    "path": "src/lib/agents-chart/core/decisions.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * =============================================================================\n * REUSABLE DECISION LOGIC\n * =============================================================================\n *\n * Pure decision functions that determine chart layout behavior.\n * These functions take data/config inputs and return decision objects —\n * NO Vega-Lite spec mutation happens here.\n *\n * The separation ensures:\n * 1. Decision logic is testable in isolation\n * 2. Same decisions can drive different output formats (VL, SVG, etc.)\n * 3. Templates can call decision functions without coupling to VL\n *\n * Naming conventions:\n *   - `compute*()` — returns a decision/value from inputs\n *   - `resolve*()` — picks from alternatives (type resolution, etc.)\n *   - `classify*()` — categorizes an input\n * =============================================================================\n */\n\nimport {\n    inferVisCategory,\n    type VisCategory,\n} from './semantic-types';\nimport { getRegistryEntry, isRegistered } from './type-registry';\n\n// ---------------------------------------------------------------------------\n// Encoding Type Resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Result of encoding type resolution.\n * Separates the decision from what gets written into VL.\n */\nexport interface EncodingTypeDecision {\n    /** The resolved VL encoding type */\n    vlType: 'quantitative' | 'ordinal' | 'nominal' | 'temporal';\n    /** The VisCategory that drove the decision */\n    visCategory: VisCategory;\n    /** Whether the type was overridden by channel rules */\n    channelOverride: boolean;\n    /** Whether the type was overridden by cardinality/fraction guard */\n    cardinalityGuard: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers for encoding type resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Map a VisCategory to the corresponding VL encoding type string.\n * Geographic maps to quantitative since VL uses quantitative for coordinates.\n */\nfunction visCategoryToVLType(vc: VisCategory): 'quantitative' | 'ordinal' | 'nominal' | 'temporal' {\n    switch (vc) {\n        case 'quantitative': return 'quantitative';\n        case 'ordinal':      return 'ordinal';\n        case 'temporal':     return 'temporal';\n        case 'geographic':   return 'quantitative';\n        case 'nominal':\n        default:             return 'nominal';\n    }\n}\n\n/**\n * Validate that field values actually parse as dates.\n *\n * @param fromRegistry  If true, uses a looser threshold (≥30%) since the\n *                      semantic type explicitly identified the field as temporal.\n *                      If false (data-inferred), requires ≥50%.\n */\nfunction validateTemporalParsing(\n    data: any[],\n    fieldName: string,\n    fromRegistry: boolean,\n): boolean {\n    const sampleValues = data.map(r => r[fieldName]).slice(0, 15).filter((v: any) => v != null);\n    if (sampleValues.length === 0) return false;\n\n    const looksTemporalValue = (val: any): boolean => {\n        if (val instanceof Date) return true;\n        if (typeof val === 'number') {\n            // Year-like integers (1500–2200)\n            if (val >= 1500 && val <= 2200 && val % 1 === 0) return true;\n            // Unix-ms timestamps: 86_400_000 (Jan 2, 1970) to ~year 2103\n            if (val > 86400000 && val < 4200000000000) return true;\n            return false;\n        }\n        if (typeof val === 'string') {\n            const trimmed = val.trim();\n            if (!trimmed) return false;\n            if (/^\\d{4}$/.test(trimmed)) return true;\n            return !Number.isNaN(Date.parse(trimmed));\n        }\n        return false;\n    };\n\n    const passingCount = sampleValues.filter(looksTemporalValue).length;\n    const minFraction = fromRegistry ? 0.3 : 0.5;\n    return passingCount / sampleValues.length >= minFraction;\n}\n\n/**\n * Apply temporal channel-compatibility adjustments, shared by both\n * registry-driven and data-inferred temporal paths.\n */\nfunction resolveTemporalEncoding(\n    visCategory: VisCategory,\n    channel: string,\n    data: any[],\n    fieldName: string,\n    fromRegistry: boolean,\n): EncodingTypeDecision {\n    // Temporal on facet/size channels → ordinal (VL limitation)\n    if (['size', 'column', 'row'].includes(channel)) {\n        return { vlType: 'ordinal', visCategory, channelOverride: true, cardinalityGuard: false };\n    }\n    // Temporal on color with low cardinality → ordinal for distinct colors\n    if (channel === 'color') {\n        const uniqueCount = new Set(data.map(r => r[fieldName])).size;\n        if (uniqueCount <= 12) {\n            return { vlType: 'ordinal', visCategory, channelOverride: true, cardinalityGuard: false };\n        }\n    }\n    // Validate temporal parsing\n    if (!validateTemporalParsing(data, fieldName, fromRegistry)) {\n        return { vlType: 'ordinal', visCategory, channelOverride: false, cardinalityGuard: false };\n    }\n    return { vlType: 'temporal', visCategory, channelOverride: false, cardinalityGuard: false };\n}\n\n/**\n * Apply channel-context guards to an ordinal encoding.\n *\n * Even when the registry says a field is ordinal, channel context may\n * require promoting to quantitative:\n *   - High cardinality on color/group → unreadable legend\n *   - High cardinality on x/y        → bars/lollipops need proportional\n *     spacing and baseline anchoring (y2/x2)\n *   - Fractional values + high cardinality → mis-classified continuous measure\n *\n * @param fromRegistry  Whether the ordinal type came from the registry\n *        (true) or was data-inferred (false). Data-inferred additionally\n *        checks for fractional values (Guard 1).\n */\nfunction applyOrdinalGuards(\n    visCategory: VisCategory,\n    channel: string,\n    data: any[],\n    fieldName: string,\n    fieldValues: any[],\n    fromRegistry: boolean,\n): EncodingTypeDecision {\n    const numericVals = fieldValues.filter(v => v != null && !isNaN(+v)).map(Number);\n    if (numericVals.length > 0) {\n        const uniqueCount = new Set(numericVals).size;\n        const hasFractions = numericVals.some(v => v % 1 !== 0);\n\n        // Guard 1 (data-inferred only): fractional + high-cardinality →\n        // mis-classified continuous measure. Registry types are explicit,\n        // so this guard only applies when the type was inferred from data.\n        if (!fromRegistry && hasFractions && uniqueCount > 20) {\n            return { vlType: 'quantitative', visCategory, channelOverride: false, cardinalityGuard: true };\n        }\n\n        // Guard 2: integer ordinal with high cardinality on color/group →\n        // a discrete legend with 12+ entries is unreadable; promote to\n        // quantitative so VL renders a continuous gradient instead.\n        if (!hasFractions && uniqueCount > 12 && ['color', 'group'].includes(channel)) {\n            return { vlType: 'quantitative', visCategory, channelOverride: true, cardinalityGuard: true };\n        }\n\n        // Guard 3: integer ordinal with high cardinality on position\n        // axes (x, y) → charts like bar/lollipop need a quantitative\n        // axis for proportional length; treating 12+ unique integers\n        // as discrete categories produces an unreadable axis and\n        // prevents baseline anchoring (y2/x2).\n        if (!hasFractions && uniqueCount > 12 && ['x', 'y'].includes(channel)) {\n            return { vlType: 'quantitative', visCategory, channelOverride: true, cardinalityGuard: true };\n        }\n    }\n    return { vlType: 'ordinal', visCategory, channelOverride: false, cardinalityGuard: false };\n}\n\n/**\n * Disambiguate when the registry lists multiple visEncodings for a type.\n *\n * Uses channel context and data characteristics to select the most\n * appropriate encoding from the candidates. Each combination of\n * candidate encodings has dedicated logic:\n *\n *   temporal + ordinal  (Year, YearMonth, Decade, …)\n *   quantitative + ordinal  (Score, Rating)\n *   quantitative + geographic  (Latitude, Longitude)\n *   ordinal + nominal  (Direction)\n */\nfunction disambiguateMultiEncoding(\n    candidates: VisCategory[],\n    channel: string,\n    data: any[],\n    fieldName: string,\n    fieldValues: any[],\n): EncodingTypeDecision {\n    const has = (vc: VisCategory) => candidates.includes(vc);\n\n    // ── Temporal + Ordinal (Year, YearMonth, Decade, etc.) ────────\n    // Time-unit granules. Temporal for continuous time axes (x/y);\n    // ordinal for grouping channels (color, facet, size).\n    if (has('temporal') && has('ordinal')) {\n        return resolveTemporalEncoding('temporal', channel, data, fieldName, true);\n    }\n\n    // ── Quantitative + Ordinal (Score, Rating) ────────────────────\n    // Bounded discrete numerics. Use ordinal for grouping channels\n    // with low cardinality (distinct colors/symbols); quantitative\n    // for position axes (proportional spacing, zero-baseline).\n    if (has('quantitative') && has('ordinal')) {\n        if (['color', 'group'].includes(channel)) {\n            const uniqueCount = new Set(data.map(r => r[fieldName])).size;\n            if (uniqueCount <= 12) {\n                return { vlType: 'ordinal', visCategory: 'ordinal', channelOverride: false, cardinalityGuard: false };\n            }\n            // High-cardinality Score/Rating on color → quantitative gradient\n            return { vlType: 'quantitative', visCategory: 'quantitative', channelOverride: false, cardinalityGuard: true };\n        }\n        if (['column', 'row'].includes(channel)) {\n            return { vlType: 'ordinal', visCategory: 'ordinal', channelOverride: false, cardinalityGuard: false };\n        }\n        // x, y, size → quantitative (proportional axis)\n        return { vlType: 'quantitative', visCategory: 'quantitative', channelOverride: false, cardinalityGuard: false };\n    }\n\n    // ── Quantitative + Geographic (Latitude, Longitude) ───────────\n    // Geographic is for map projections; standard encodings use quantitative.\n    if (has('quantitative') && has('geographic')) {\n        return { vlType: 'quantitative', visCategory: 'quantitative', channelOverride: false, cardinalityGuard: false };\n    }\n\n    // ── Ordinal + Nominal (Direction) ─────────────────────────────\n    // Inherently ordered, but nominal for grouping channels to get\n    // distinct (unordered) colors rather than a sequential scale.\n    if (has('ordinal') && has('nominal')) {\n        if (['color', 'group'].includes(channel)) {\n            return { vlType: 'nominal', visCategory: 'nominal', channelOverride: false, cardinalityGuard: false };\n        }\n        return { vlType: 'ordinal', visCategory: 'ordinal', channelOverride: false, cardinalityGuard: false };\n    }\n\n    // ── Fallback: first candidate ─────────────────────────────────\n    const fallback = candidates[0];\n    return { vlType: visCategoryToVLType(fallback), visCategory: fallback, channelOverride: false, cardinalityGuard: false };\n}\n\n// ---------------------------------------------------------------------------\n// Main API\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve the VL encoding type for a field.\n *\n * Two-stage pipeline:\n *\n * **Stage 1 — Registry-driven** (when semanticType is registered):\n *   - Single visEncoding  → use it directly (with channel adjustments)\n *   - Multiple visEncodings → `disambiguateMultiEncoding()` selects best\n *     option using channel context + data characteristics\n *\n * **Stage 2 — Data-inferred fallback** (no registered semantic type):\n *   - `inferVisCategory()` inspects raw values → VisCategory\n *   - Heuristic guards catch common mis-classifications (e.g., dense\n *     fractional data inferred as ordinal)\n *\n * This is a pure decision — it does NOT mutate any spec.\n *\n * @param semanticType   Semantic type string (e.g. 'Quantity', 'Country')\n * @param fieldValues    Sampled values from the field\n * @param channel        VL channel name (e.g. 'x', 'y', 'color')\n * @param data           Full data table (for computing unique value counts)\n * @param fieldName      Field name (for data lookups)\n */\nexport function resolveEncodingType(\n    semanticType: string,\n    fieldValues: any[],\n    channel: string,\n    data: any[],\n    fieldName: string,\n): EncodingTypeDecision {\n    // ═══════════════════════════════════════════════════════════════════\n    // Stage 1: Registry-driven resolution\n    // ═══════════════════════════════════════════════════════════════════\n    // The registry's visEncodings array is the source of truth.\n    //   - Single encoding  → resolved directly\n    //   - Multiple encodings → disambiguated by channel + data\n    if (semanticType && isRegistered(semanticType)) {\n        const entry = getRegistryEntry(semanticType);\n        const candidates = entry.visEncodings;\n\n        if (candidates.length > 1) {\n            // Multiple encodings listed — disambiguate semantically\n            return disambiguateMultiEncoding(candidates, channel, data, fieldName, fieldValues);\n        }\n\n        // Single encoding — use it directly with channel adjustments\n        const baseType = candidates[0];\n\n        // Guard: if the registry says quantitative but the actual values\n        // are strings (e.g. semantic \"Quantity\" on a binned field like\n        // \"91-95\"), fall back to data-inferred type.  Numeric strings\n        // that parse as numbers (e.g. \"42\") still count as numeric.\n        if (baseType === 'quantitative') {\n            const nonNull = fieldValues.filter(v => v != null);\n            const allNumeric = nonNull.length > 0 &&\n                nonNull.every(v => typeof v === 'number' || (typeof v === 'string' && !isNaN(+v) && v.trim() !== ''));\n            if (!allNumeric) {\n                // Values aren't actually numeric — infer from data instead\n                const inferred = inferVisCategory(fieldValues);\n                return {\n                    vlType: visCategoryToVLType(inferred),\n                    visCategory: inferred,\n                    channelOverride: false,\n                    cardinalityGuard: false,\n                };\n            }\n        }\n\n        if (baseType === 'temporal') {\n            return resolveTemporalEncoding(baseType, channel, data, fieldName, true);\n        }\n        if (baseType === 'ordinal') {\n            return applyOrdinalGuards(baseType, channel, data, fieldName, fieldValues, true);\n        }\n        return {\n            vlType: visCategoryToVLType(baseType),\n            visCategory: baseType,\n            channelOverride: false,\n            cardinalityGuard: false,\n        };\n    }\n\n    // ═══════════════════════════════════════════════════════════════════\n    // Stage 2: Data-inferred fallback\n    // ═══════════════════════════════════════════════════════════════════\n    // No registered semantic type — infer from raw data values, then\n    // apply heuristic guards for common data-inference mis-classifications.\n    const visCategory: VisCategory = inferVisCategory(fieldValues);\n    let channelOverride = false;\n    let cardinalityGuard = false;\n\n    switch (visCategory) {\n        case 'temporal':\n            return resolveTemporalEncoding(visCategory, channel, data, fieldName, false);\n\n        case 'ordinal':\n            return applyOrdinalGuards(visCategory, channel, data, fieldName, fieldValues, false);\n\n        case 'quantitative':\n            return { vlType: 'quantitative', visCategory, channelOverride, cardinalityGuard };\n\n        case 'geographic':\n            return { vlType: 'quantitative', visCategory, channelOverride, cardinalityGuard };\n\n        case 'nominal':\n        default:\n            return { vlType: 'nominal', visCategory, channelOverride, cardinalityGuard };\n    }\n}\n\n// ---------------------------------------------------------------------------\n// Continuous Axis Gas Pressure Model (docs/design-stretch-model.md §2)\n// ---------------------------------------------------------------------------\n\n/**\n * Parameters for the per-axis stretch model (docs/design-stretch-model.md §2).\n *\n * Each axis is stretched independently based on how many distinguishable\n * positions (or series) compete for pixel space along that axis.\n */\nexport interface GasPressureParams {\n    /** Mark cross-section in px² — used as default σ for both axes (default: 30) */\n    markCrossSection: number;\n    /** Per-axis cross-section overrides. When set, the per-axis stretch\n     *  uses these instead of `markCrossSection`.\n     *  Useful for line charts where X needs more stretch than Y. */\n    markCrossSectionX?: number;\n    markCrossSectionY?: number;\n    /** Override X item count for stretch.\n     *  When set, X stretch uses this count (e.g. number of series)\n     *  instead of counting unique X pixel positions. */\n    xItemCountOverride?: number;\n    /** Override Y item count for stretch.\n     *  When set, Y stretch uses this count (e.g. number of series)\n     *  instead of counting unique Y pixel positions. */\n    yItemCountOverride?: number;\n    /** Power-law exponent for continuous stretch (default: 0.3) */\n    elasticity: number;\n    /** Maximum stretch multiplier cap (default: 1.5) */\n    maxStretch: number;\n}\n\n/** Default gas pressure parameters (§2 recommendations). */\nexport const DEFAULT_GAS_PRESSURE_PARAMS: GasPressureParams = {\n    markCrossSection: 30,\n    elasticity: 0.3,\n    maxStretch: 1.5,\n};\n\n/**\n * Result of the per-axis stretch decision.\n */\nexport interface GasPressureDecision {\n    /** Per-axis stretch: X axis (1 = no stretch) */\n    stretchX: number;\n    /** Per-axis stretch: Y axis (1 = no stretch) */\n    stretchY: number;\n}\n\n/**\n * Compute per-axis stretch for a continuous 2D axis region.\n *\n * Implements docs/design-stretch-model.md §2: each axis is stretched independently based\n * on how many distinguishable positions (or series) compete for pixel\n * space along that axis.\n *\n * Two modes per axis:\n *   - Positional: count unique pixel positions, σ_1d = √σ.\n *   - Series-count: when xItemCountOverride / yItemCountOverride is set,\n *     use that count directly with σ (not sqrt'd) since it's already 1D.\n *\n * @param xValues      Numeric x-coordinates of data points\n * @param yValues      Numeric y-coordinates of data points\n * @param xDomain      Scale domain [min, max] for x-axis\n * @param yDomain      Scale domain [min, max] for y-axis\n * @param canvasWidth  Base canvas width W₀\n * @param canvasHeight Base canvas height H₀\n * @param params       Gas pressure parameters (optional, uses defaults)\n */\nexport function computeGasPressure(\n    xValues: number[],\n    yValues: number[],\n    xDomain: [number, number],\n    yDomain: [number, number],\n    canvasWidth: number,\n    canvasHeight: number,\n    params: GasPressureParams = DEFAULT_GAS_PRESSURE_PARAMS,\n): GasPressureDecision {\n    const N = xValues.length;\n\n    if (N <= 1 || canvasWidth <= 0 || canvasHeight <= 0) {\n        return { stretchX: 1, stretchY: 1 };\n    }\n\n    // Per-axis stretch via unique-position linear packing.\n    // The question for each axis is: \"how many distinguishable positions\n    // compete for pixel space along this axis?\"\n    //\n    // Count unique positions (bucketed to ~1px resolution) along each\n    // axis. Each unique position needs σ_1d ≈ √σ pixels of space.\n    // 1D pressure = uniquePositions × σ_1d / axisDimension.\n    const sigma1dDefault = Math.sqrt(params.markCrossSection); // ~5 px\n\n    const computeAxisStretch = (values: number[], domain: [number, number], baseDim: number, sigma1d: number): number => {\n        if (baseDim <= 0 || values.length <= 1) return 1;\n\n        const range = domain[1] - domain[0];\n        if (range <= 0) return 1;\n\n        // Bucket values to ~1px resolution in pixel space\n        const pxPerUnit = baseDim / range;\n        const seen = new Set<number>();\n        for (const v of values) {\n            seen.add(Math.round((v - domain[0]) * pxPerUnit));\n        }\n        const uniquePositions = seen.size;\n\n        // 1D pressure: how many sigma-sized marks fight for baseDim pixels\n        const pressure = (uniquePositions * sigma1d) / baseDim;\n        if (pressure <= 1) return 1;\n        return Math.min(params.maxStretch, Math.pow(pressure, params.elasticity));\n    };\n\n    const sigma1dX = params.markCrossSectionX != null ? Math.sqrt(params.markCrossSectionX) : sigma1dDefault;\n    const sigma1dY = params.markCrossSectionY != null ? Math.sqrt(params.markCrossSectionY) : sigma1dDefault;\n\n    // Helper: compute stretch for one axis, using series-count override if set.\n    // When a series override is provided, σ is used directly (not sqrt'd)\n    // because series count is already a 1D concept.\n    const computeStretchForAxis = (\n        values: number[], domain: [number, number], baseDim: number,\n        sigma1d: number, sigmaRaw: number, itemCountOverride?: number,\n    ): number => {\n        if (itemCountOverride != null && sigmaRaw > 0) {\n            const pressure = (itemCountOverride * sigmaRaw) / baseDim;\n            return pressure <= 1 ? 1 : Math.min(params.maxStretch, Math.pow(pressure, params.elasticity));\n        }\n        return sigma1d > 0 ? computeAxisStretch(values, domain, baseDim, sigma1d) : 1;\n    };\n\n    const sigmaRawX = params.markCrossSectionX ?? params.markCrossSection;\n    const sigmaRawY = params.markCrossSectionY ?? params.markCrossSection;\n    const stretchX = computeStretchForAxis(xValues, xDomain, canvasWidth, sigma1dX, sigmaRawX, params.xItemCountOverride);\n    const stretchY = computeStretchForAxis(yValues, yDomain, canvasHeight, sigma1dY, sigmaRawY, params.yItemCountOverride);\n\n    return { stretchX, stretchY };\n}\n\n// ---------------------------------------------------------------------------\n// Elastic Stretch Computation\n// ---------------------------------------------------------------------------\n\n/**\n * Parameters for elastic axis stretch computation.\n * These control the spring-model behavior from docs/design-stretch-model.md §1.\n */\nexport interface ElasticStretchParams {\n    /** Power-law exponent for stretch (default: 0.5) */\n    elasticity: number;\n    /** Maximum stretch multiplier cap (default: 2) */\n    maxStretch: number;\n    /** Default step size in px per discrete item */\n    defaultStepSize: number;\n    /** Minimum pixels per discrete item (default: 6) */\n    minStep: number;\n}\n\n/**\n * Result of elastic budget computation for a single axis.\n */\nexport interface ElasticBudget {\n    /** Elastic-stretched canvas budget in px */\n    budget: number;\n    /** Stretch multiplier applied (1 = no stretch) */\n    stretchFactor: number;\n}\n\n/**\n * Compute the elastic canvas budget for an axis with N discrete items.\n *\n * When N items at defaultStepSize exceed the base dimension, the axis\n * stretches using a power-law: stretch = min(maxStretch, pressure^elasticity).\n *\n * @param itemCount       Number of discrete items on the axis\n * @param baseDimension   Base canvas size (width or height) in px\n * @param params          Elastic stretch parameters\n */\nexport function computeElasticBudget(\n    itemCount: number,\n    baseDimension: number,\n    params: ElasticStretchParams,\n): ElasticBudget {\n    if (itemCount <= 0) {\n        return { budget: baseDimension, stretchFactor: 1 };\n    }\n    const pressure = (itemCount * params.defaultStepSize) / baseDimension;\n    if (pressure <= 1) {\n        return { budget: baseDimension, stretchFactor: 1 };\n    }\n    const stretchFactor = Math.min(params.maxStretch, Math.pow(pressure, params.elasticity));\n    return {\n        budget: baseDimension * stretchFactor,\n        stretchFactor,\n    };\n}\n\n/**\n * Result of per-axis step computation.\n */\nexport interface AxisStepDecision {\n    /** Computed step size in px per item */\n    step: number;\n    /** Total canvas budget in px */\n    budget: number;\n    /** Number of items this step was computed for */\n    itemCount: number;\n}\n\n/**\n * Compute the step size for a single axis, covering both discrete\n * and continuous-as-discrete (banded) cases.\n *\n * @param nominalCount       Number of discrete (nominal/ordinal) items\n * @param continuousCount    Number of continuous-as-discrete items (banded Q/T)\n * @param baseDimension      Base canvas size (width or height) in px\n * @param params             Elastic stretch parameters\n */\nexport function computeAxisStep(\n    nominalCount: number,\n    continuousCount: number,\n    baseDimension: number,\n    params: ElasticStretchParams,\n): AxisStepDecision {\n    if (nominalCount > 0) {\n        const { budget } = computeElasticBudget(nominalCount, baseDimension, params);\n        return { step: Math.floor(budget / nominalCount), budget, itemCount: nominalCount };\n    }\n    if (continuousCount > 0) {\n        const { budget } = computeElasticBudget(continuousCount, baseDimension, params);\n        return { step: Math.floor(budget / continuousCount), budget, itemCount: continuousCount };\n    }\n    return { step: params.defaultStepSize, budget: baseDimension, itemCount: 0 };\n}\n\n// ---------------------------------------------------------------------------\n// Facet Layout Decisions\n// ---------------------------------------------------------------------------\n\n/**\n * Result of facet layout computation.\n */\nexport interface FacetLayoutDecision {\n    /** Number of facet columns */\n    columns: number;\n    /** Number of facet rows */\n    rows: number;\n    /** Per-subplot width in px */\n    subplotWidth: number;\n    /** Per-subplot height in px */\n    subplotHeight: number;\n}\n\n/**\n * Parameters for facet layout computation.\n */\nexport interface FacetLayoutParams {\n    /** Power-law exponent for facet stretch (default: 0.3) */\n    facetElasticity: number;\n    /** Maximum total stretch multiplier cap (default: 2) */\n    maxStretch: number;\n    /** Minimum subplot size in px (default: 60) */\n    minSubplotSize: number;\n}\n\n/**\n * Compute facet subplot dimensions.\n *\n * @param facetCols       Number of facet columns\n * @param facetRows       Number of facet rows\n * @param baseWidth       Base canvas width in px\n * @param baseHeight      Base canvas height in px\n * @param params          Facet layout parameters\n */\nexport function computeFacetLayout(\n    facetCols: number,\n    facetRows: number,\n    baseWidth: number,\n    baseHeight: number,\n    params: FacetLayoutParams,\n): FacetLayoutDecision {\n    // Minimum subplot dimension — use the caller-supplied parameter\n    // (default 60px) so subplots remain readable.\n    const minContinuousSize = params.minSubplotSize;\n\n    let subplotWidth: number;\n    if (facetCols > 1) {\n        const stretch = Math.min(params.maxStretch, Math.pow(facetCols, params.facetElasticity));\n        subplotWidth = Math.round(Math.max(minContinuousSize, baseWidth * stretch / facetCols));\n    } else {\n        subplotWidth = baseWidth;\n    }\n\n    let subplotHeight: number;\n    if (facetRows > 1) {\n        const stretch = Math.min(params.maxStretch, Math.pow(facetRows, params.facetElasticity));\n        subplotHeight = Math.round(Math.max(minContinuousSize, baseHeight * stretch / facetRows));\n    } else {\n        subplotHeight = baseHeight;\n    }\n\n    return { columns: facetCols, rows: facetRows, subplotWidth, subplotHeight };\n}\n\n// ---------------------------------------------------------------------------\n// Label Sizing Decisions\n// ---------------------------------------------------------------------------\n\n/**\n * Result of label sizing computation for a discrete axis.\n */\nexport interface LabelSizingDecision {\n    /** Font size in px */\n    fontSize: number;\n    /** Max label width in px */\n    labelLimit: number;\n    /** Label rotation angle (undefined = no rotation) */\n    labelAngle?: number;\n    /** Label alignment (for rotated labels) */\n    labelAlign?: string;\n    /** Label baseline (for rotated labels) */\n    labelBaseline?: string;\n}\n\n/**\n * Compute label sizing for a discrete axis based on the effective step size.\n * Pure decision — returns sizing params without modifying any spec.\n *\n * @param effectiveStep      Pixels per discrete item\n * @param hasDiscreteItems   Whether the axis has discrete items\n */\nexport function computeLabelSizing(\n    effectiveStep: number,\n    hasDiscreteItems: boolean,\n): LabelSizingDecision {\n    const defaultFontSize = 10;\n    const defaultLimit = 100;\n\n    if (!hasDiscreteItems) {\n        return { fontSize: defaultFontSize, labelLimit: defaultLimit };\n    }\n\n    let fontSize = Math.max(6, Math.min(10, effectiveStep - 1));\n    let labelLimit = Math.max(30, Math.min(100, effectiveStep * 8));\n    let labelAngle: number | undefined;\n    let labelAlign: string | undefined;\n    let labelBaseline: string | undefined;\n\n    if (effectiveStep < 10) {\n        labelAngle = -90;\n        fontSize = Math.max(6, Math.min(8, effectiveStep));\n        labelLimit = 40;\n        labelAlign = 'right';\n        labelBaseline = 'middle';\n    } else if (effectiveStep < 16) {\n        labelAngle = -45;\n        fontSize = Math.max(7, Math.min(9, effectiveStep));\n        labelLimit = 60;\n        labelAlign = 'right';\n        labelBaseline = 'top';\n    }\n\n    return { fontSize, labelLimit, labelAngle, labelAlign, labelBaseline };\n}\n\n// ---------------------------------------------------------------------------\n// Overflow Decision\n// ---------------------------------------------------------------------------\n\n/**\n * Result of overflow analysis for a discrete axis.\n */\nexport interface OverflowDecision {\n    /** Whether overflow occurred (more items than can fit) */\n    overflowed: boolean;\n    /** Maximum items to keep */\n    maxToKeep: number;\n    /** Number of items omitted */\n    omittedCount: number;\n}\n\n/**\n * Compute whether a discrete axis overflows and how many items to keep.\n *\n * @param uniqueCount    Number of unique values on the axis\n * @param maxDimension   Maximum canvas dimension (with stretch) in px\n * @param minStepSize    Minimum px per item\n */\nexport function computeOverflow(\n    uniqueCount: number,\n    maxDimension: number,\n    minStepSize: number,\n): OverflowDecision {\n    const maxToKeep = Math.floor(maxDimension / minStepSize);\n    const overflowed = uniqueCount > maxToKeep;\n    return {\n        overflowed,\n        maxToKeep,\n        omittedCount: overflowed ? uniqueCount - maxToKeep : 0,\n    };\n}\n\n// ---------------------------------------------------------------------------\n// Circumference-pressure model for radial charts (§3)\n// ---------------------------------------------------------------------------\n\n/**\n * Parameters for circumference-pressure scaling (spring model on polar axis).\n */\nexport interface CircumferencePressureParams {\n    /** Minimum arc-length (px) each \"effective bar\" needs on the\n     *  circumference — analogous to defaultStepSize in the spring model.\n     *  Default: 45 */\n    minArcPx?: number;\n    /** Minimum chart radius in px. Default: 60 */\n    minRadius?: number;\n    /** Maximum chart radius in px. Caps runaway growth. Default: 400 */\n    maxRadius?: number;\n    /** Power-law exponent for pressure → stretch (same as spring model).\n     *  0.5 = square-root growth. Default: 0.5 */\n    elasticity?: number;\n    /** Per-dimension maximum stretch multiplier cap (matches bar-chart\n     *  default of 2.0).  The effective max stretch on the radius is\n     *  derived from min(baseW, baseH) × maxStretch so that the chart\n     *  never exceeds the cap in either dimension.  Default: 2.0 */\n    maxStretch?: number;\n    /** Extra margin outside the chart circle (px) for labels, legend, etc.\n     *  Added to each side when computing canvas dimensions. Default: 20 */\n    margin?: number;\n}\n\n/**\n * Result of circumference pressure computation.\n */\nexport interface CircumferencePressureResult {\n    /** Computed chart radius in px */\n    radius: number;\n    /** Recommended canvas width (px) */\n    canvasW: number;\n    /** Recommended canvas height (px) */\n    canvasH: number;\n}\n\n/**\n * Compute radial chart sizing using the spring model mapped to a polar axis.\n *\n * Treats the circumference as a linear \"bar axis\":\n *   baseCircumference = 2π × baseRadius\n *   pressure = effectiveItemCount × minArcPx / baseCircumference\n *   if pressure > 1:  stretch = min(maxStretch, pressure ^ elasticity)\n *   radius = baseRadius × stretch\n *\n * **effectiveItemCount** varies by chart type:\n *   - Rose / Radar: N categories (uniform slices/spokes)\n *   - Pie: total / minValue — how many of the smallest slice fit in the\n *     full circle.  This captures the worst-case thin slice that needs\n *     minimum arc width.\n *   - Sunburst: same as pie but computed on the outer ring leaves only.\n *\n * Both canvas dimensions grow equally (maintains 1:1 circular aspect).\n *\n * @param effectiveItemCount  Effective number of uniform \"bars\" around\n *                            the circle (see above)\n * @param canvasSize          Base canvas dimensions (from context)\n * @param params              Optional tuning parameters\n */\nexport function computeCircumferencePressure(\n    effectiveItemCount: number,\n    canvasSize: { width: number; height: number },\n    params: CircumferencePressureParams = {},\n): CircumferencePressureResult {\n    const {\n        minArcPx = 45,\n        minRadius = 60,\n        maxRadius = 400,\n        elasticity = 0.5,\n        maxStretch = 2.0,\n        margin = 20,\n    } = params;\n\n    const baseW = canvasSize.width;\n    const baseH = canvasSize.height;\n\n    // Base radius: largest circle that fits in the base canvas\n    const baseRadius = Math.max(minRadius,\n        (Math.min(baseW, baseH) / 2) - margin);\n\n    // ── Effective max-stretch on the radius ──────────────────────────\n    // The radius stretch expands the canvas in BOTH x and y equally.\n    // Cap so that neither dimension exceeds maxStretch × baseDim.\n    const maxCanvasW = baseW * maxStretch;\n    const maxCanvasH = baseH * maxStretch;\n    const maxDiameter = Math.min(maxCanvasW, maxCanvasH);\n    const effectiveMaxRadius = Math.min(maxRadius,\n        (maxDiameter - 2 * margin) / 2);\n    const effectiveMaxStretch = Math.max(1, effectiveMaxRadius / baseRadius);\n\n    // Spring model: pressure = items × step / baseDimension\n    const baseCircumference = 2 * Math.PI * baseRadius;\n    const pressure = (effectiveItemCount * minArcPx) / baseCircumference;\n\n    let radius: number;\n    if (pressure <= 1) {\n        // No pressure — base radius is sufficient\n        radius = baseRadius;\n    } else {\n        // Elastic stretch (same power law as bar-chart spring model)\n        const stretch = Math.min(effectiveMaxStretch, Math.pow(pressure, elasticity));\n        radius = Math.round(baseRadius * stretch);\n    }\n\n    // Clamp\n    radius = Math.min(maxRadius, Math.max(minRadius, radius));\n\n    // Canvas = diameter + margins\n    const diameter = 2 * radius + 2 * margin;\n    const canvasW = Math.max(baseW, diameter);\n    const canvasH = Math.max(baseH, diameter);\n\n    return { radius, canvasW, canvasH };\n}\n\n/**\n * Compute effective bar count for variable-width slices (pie / sunburst).\n *\n * If all slices are equal, this returns N (number of slices).\n * If slices vary, this returns `total / minValue` — i.e., how many of the\n * thinnest slice would fill the whole circle.  This is the worst-case\n * pressure that determines whether the chart needs to grow.\n *\n * Capped at 100 to prevent degenerate cases (near-zero slices) from\n * blowing up the radius.\n *\n * @param values  Array of slice values (must be > 0)\n */\nexport function computeEffectiveBarCount(values: number[]): number {\n    if (values.length === 0) return 0;\n    const positiveValues = values.filter(v => v > 0);\n    if (positiveValues.length === 0) return values.length;\n\n    const total = positiveValues.reduce((s, v) => s + v, 0);\n    const minVal = Math.min(...positiveValues);\n\n    // effectiveCount = total / minVal → how many of the smallest slice fill the circle\n    const effective = total / minVal;\n\n    // Cap at 100 to prevent degenerate cases\n    return Math.min(100, effective);\n}\n"
  },
  {
    "path": "src/lib/agents-chart/core/field-semantics.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * =============================================================================\n * FIELD SEMANTICS\n * =============================================================================\n *\n * Resolves what a data field *is* by combining its semantic annotation\n * (from LLM or user) with the actual data values. This resolves the\n * one-to-many ambiguities in the type registry (e.g., Score can be\n * quantitative or ordinal depending on cardinality).\n *\n * The entry point is `resolveFieldSemantics()`. It produces a\n * `FieldSemantics` object that captures the field's identity, format,\n * aggregation role, domain, scale hint, and ordering — everything\n * about *what the data represents*, independent of how it will be\n * visualized on any particular channel.\n *\n * Design doc: docs/design-compilation-context.md\n *\n * VL dependency: **None** — pure TypeScript, no rendering library imports.\n * =============================================================================\n */\n\nimport {\n    type VisCategory,\n    type TypeRegistryEntry,\n    getRegistryEntry,\n    isRegistered,\n} from './type-registry';\n\nimport {\n    getZeroClass,\n    inferOrdinalSortOrder,\n    inferVisCategory,\n    type ZeroClass,\n} from './semantic-types';\n\n// Re-export for backward compatibility — consumers can import from here or type-registry\nexport { getRegistryEntry } from './type-registry';\nexport type { TypeRegistryEntry } from './type-registry';\n\n// =============================================================================\n// §1  PUBLIC TYPES\n// =============================================================================\n\n/**\n * Enriched semantic annotation from LLM or user.\n */\nexport interface SemanticAnnotation {\n    /** The T2 semantic type string (e.g., \"Revenue\", \"Rating\", \"Month\") */\n    semanticType: string;\n\n    /**\n     * Intrinsic domain (value range) of this field's scale.\n     * Only for bounded/scaled types — NOT for open-ended measures.\n     * E.g., [1, 5] for 5-star rating, [0, 100] for score, [-90, 90] for latitude.\n     */\n    intrinsicDomain?: [number, number];\n\n    /** Unit or currency code. E.g., \"USD\", \"°C\", \"kg\" */\n    unit?: string;\n\n    /** Explicit ordinal ordering. E.g., [\"Low\", \"Medium\", \"High\"] */\n    sortOrder?: string[];\n}\n\n/** d3-compatible format specification */\nexport interface FormatSpec {\n    /** d3-format pattern: \",.2f\", \".1%\", \"+.2f\", etc. */\n    pattern?: string;\n    /** Prefix before the number: \"$\", \"€\", \"£\" */\n    prefix?: string;\n    /** Suffix after the number: \"°C\", \"%\", \" kg\" */\n    suffix?: string;\n    /** Whether large values should be abbreviated (1K, 1M, 1B) */\n    abbreviate?: boolean;\n}\n\n/** Domain bounds constraint */\nexport interface DomainConstraint {\n    min?: number;\n    max?: number;\n    /** Whether to hard-clamp values outside the domain */\n    clamp?: boolean;\n}\n\n/** Tick mark constraint */\nexport interface TickConstraint {\n    /** Only show integer tick values */\n    integersOnly?: boolean;\n    /** Exact tick values to show (for small domains like 1–5 rating) */\n    exactTicks?: number[];\n    /** Minimum step between ticks */\n    minStep?: number;\n}\n\n/** Color scheme recommendation from semantic analysis */\nexport interface ColorSchemeHint {\n    /** Whether the field is best shown with sequential, diverging, or categorical colors */\n    type: 'sequential' | 'diverging' | 'categorical';\n    /** For diverging: the midpoint value */\n    divergingMidpoint?: number;\n    /** Whether the field is inherently diverging (always show diverging) vs conditional */\n    inherentlyDiverging?: boolean;\n}\n\n/** Result of diverging midpoint analysis */\nexport interface DivergingInfo {\n    /** The midpoint value where the diverging center sits */\n    midpoint: number;\n    /** Whether this type is always diverging or only when data spans both sides */\n    inherent: boolean;\n    /** Source of the midpoint determination */\n    source: 'unit' | 'type-intrinsic' | 'domain' | 'data';\n}\n\n/**\n * Resolved field semantics — what the data field *is*.\n *\n * Derived from a `SemanticAnnotation` (semantic type + optional metadata)\n * plus actual data values. Resolves the one-to-many ambiguities in the\n * type registry by inspecting the concrete data representation.\n *\n * This is purely about the field’s identity and intrinsic properties —\n * NOT about how it will be visualized on a particular channel.\n * Channel-specific decisions (color scheme, axis reversal, interpolation,\n * tick strategy, stacking, etc.) belong in `ChannelSemantics`.\n *\n * Built once per field per dataset by `resolveFieldSemantics()`.\n */\nexport interface FieldSemantics {\n    // --- Identity ---\n    /** The semantic annotation (normalized from string or object input) */\n    semanticAnnotation: SemanticAnnotation;\n\n    // --- Encoding ---\n    /** Preferred encoding type, disambiguated from registry using data */\n    defaultVisType: VisCategory;\n\n    // --- Formatting ---\n    /** Number format derived from data type and unit */\n    format: FormatSpec;\n    /** Tooltip format (typically higher precision than axis format) */\n    tooltipFormat?: FormatSpec;\n\n    // --- Aggregation ---\n    /** Default aggregate function — intrinsic to the field (additive vs intensive) */\n    aggregationDefault?: 'sum' | 'average';\n\n    // --- Scale ---\n    /** Zero-baseline classification (meaningful / arbitrary / bipolar) */\n    zeroClass: ZeroClass | 'unknown';\n    /** Recommended scale type based on data distribution */\n    scaleType?: 'linear' | 'log' | 'sqrt' | 'symlog';\n\n    // --- Domain ---\n    /** Intrinsic domain bounds (from annotation, type-intrinsic, or data-inferred) */\n    domainConstraint?: DomainConstraint;\n\n    // --- Ordering ---\n    /** Canonical ordinal sort order (months, days, etc.) */\n    canonicalOrder?: string[];\n    /** Whether the canonical order is cyclic (wraps around) */\n    cyclic: boolean;\n    /** Default sort direction */\n    sortDirection: 'ascending' | 'descending';\n\n    // --- Histogram ---\n    /** Whether this field’s data distribution benefits from binning */\n    binningSuggested: boolean;\n}\n\n// =============================================================================\n// §2  TYPE REGISTRY  →  see ./type-registry.ts (single source of truth)\n// =============================================================================\n\n/**\n * Extract the semantic type string from a bare string or annotation object.\n * Used when downstream code only needs the type string, not the full annotation.\n */\nexport function toTypeString(input: string | SemanticAnnotation | undefined): string {\n    if (!input) return '';\n    if (typeof input === 'string') return input;\n    return input.semanticType || '';\n}\n\n// =============================================================================\n// §3  ANNOTATION NORMALIZATION\n// =============================================================================\n\n/**\n * Normalize a bare string or enriched annotation object into a\n * consistent SemanticAnnotation.\n *\n * Accepts:\n *   \"Revenue\"                                          → { semanticType: \"Revenue\" }\n *   { semanticType: \"Rating\", intrinsicDomain: [1,5] } → as-is\n *   undefined / \"\"                                     → { semanticType: \"Unknown\" }\n */\nexport function normalizeAnnotation(\n    input: string | SemanticAnnotation | undefined,\n): SemanticAnnotation {\n    if (!input) return { semanticType: 'Unknown' };\n    if (typeof input === 'string') return { semanticType: input || 'Unknown' };\n    return { ...input, semanticType: input.semanticType || 'Unknown' };\n}\n\n// =============================================================================\n// §4  FORMAT RESOLUTION\n// =============================================================================\n\n/** Map currency codes to display symbols */\nconst CURRENCY_MAP: Record<string, string> = {\n    USD: '$', EUR: '€', GBP: '£', JPY: '¥', CNY: '¥',\n    KRW: '₩', INR: '₹', BRL: 'R$', CAD: 'CA$', AUD: 'A$',\n    CHF: 'CHF', SEK: 'kr', NOK: 'kr', DKK: 'kr',\n};\n\n/**\n * Map common unit strings to suffix display.\n *\n * Limited to a small set of well-known, universally understood units.\n * Unknown/arbitrary annotation.unit values are intentionally excluded\n * to keep axis labels clean and avoid displaying obscure or verbose\n * unit strings on tick marks.\n */\nconst UNIT_SUFFIX_MAP: Record<string, string> = {\n    // Temperature\n    '°C': '°C', '°F': '°F', C: '°C', F: '°F',\n    // Mass\n    kg: ' kg', lb: ' lb',\n    // Distance\n    km: ' km', mi: ' mi', m: ' m', ft: ' ft',\n    // Speed\n    'km/h': ' km/h', mph: ' mph',\n    // Time\n    sec: ' s', min: ' min', hr: ' hr',\n    seconds: ' s', minutes: ' min', hours: ' hr',\n    // Percentage (handled by formatClass, but allow explicit suffix)\n    '%': '%',\n};\n\n/**\n * Detect whether percentage data uses 0–1 (fractional) or 0–100 (whole-number)\n * representation.\n *\n * Values can exceed the intrinsic range (e.g., 155 % growth), so we look at\n * the *majority* of absolute values rather than just the max.\n */\nfunction detectPercentageRepresentation(values: number[]): '0-1' | '0-100' {\n    if (values.length === 0) return '0-100';\n    const abs = values.map(Math.abs);\n    // If the majority of values are ≤ 1, treat as fractional 0–1 representation\n    const countBelow1 = abs.filter(v => v <= 1).length;\n    if (countBelow1 / abs.length >= 0.8) return '0-1';\n    return '0-100';\n}\n\n/**\n * Detect the maximum number of meaningful decimal places in a set of values.\n *\n * Returns 0 for all-integer data, 1 for data like [3.7, 4.2], 2 for [1.25, 3.50], etc.\n * Caps at 4 to avoid floating-point noise (e.g., 0.1 + 0.2 = 0.30000000000000004).\n */\nfunction detectPrecision(values: number[]): number {\n    let maxDecimals = 0;\n    for (const v of values) {\n        if (!Number.isFinite(v)) continue;\n        // Convert to string, trim trailing zeros, count decimal places\n        const s = v.toFixed(10);  // enough digits to detect real precision\n        const dot = s.indexOf('.');\n        if (dot === -1) continue;\n        // Trim trailing zeros\n        let end = s.length - 1;\n        while (end > dot && s[end] === '0') end--;\n        const decimals = end > dot ? end - dot : 0;\n        if (decimals > maxDecimals) maxDecimals = decimals;\n    }\n    return Math.min(maxDecimals, 4);\n}\n\n/**\n * Build a d3-format pattern that matches the detected data precision.\n *\n * @param values  Numeric data values\n * @param useGrouping  Whether to include thousands separator (,)\n * @param signMode  '' = default, '+' = always show sign\n * @returns  Format pattern string like ',d', ',.1f', ',.2f'\n */\nfunction precisionFormat(values: number[], useGrouping = true, signMode: '' | '+' = ''): string {\n    const p = detectPrecision(values);\n    const group = useGrouping ? ',' : '';\n    if (p === 0) return `${signMode}${group}d`;\n    return `${signMode}${group}.${p}f`;\n}\n\n/**\n * Resolve the format specification for a field based on its semantic type,\n * annotation metadata, and data values.\n *\n * Priority: annotation.unit > type-specific defaults\n */\nexport function resolveFormat(\n    semanticType: string,\n    annotation: SemanticAnnotation,\n    values: any[],\n): { format: FormatSpec; tooltipFormat?: FormatSpec } {\n    const entry = getRegistryEntry(semanticType);\n    const unit = annotation.unit;\n\n    // Resolve currency prefix from annotation.unit\n    const currencyPrefix = unit ? CURRENCY_MAP[unit.toUpperCase()] ?? CURRENCY_MAP[unit] : undefined;\n    // Resolve unit suffix from annotation.unit — only use known units;\n    // unknown units are dropped to avoid polluting tick labels with\n    // obscure or verbose strings.\n    const unitSuffix = unit ? UNIT_SUFFIX_MAP[unit] : undefined;\n\n    const nums = values.filter((v: any) => typeof v === 'number' && !isNaN(v));\n\n    switch (entry.formatClass) {\n        case 'currency': {\n            const pfx = currencyPrefix ?? '$';\n            // Price always shows cents; other currency uses data precision (min 0 for axis)\n            const axisPattern = semanticType === 'Price' ? ',.2f' : precisionFormat(nums);\n            return {\n                format:  { pattern: axisPattern, prefix: pfx, abbreviate: true },\n                tooltipFormat: { pattern: ',.2f', prefix: pfx },\n            };\n        }\n\n        case 'signed-currency': {\n            const pfx = currencyPrefix ?? '$';\n            return {\n                format:  { pattern: precisionFormat(nums, true, '+'), prefix: pfx, abbreviate: true },\n                tooltipFormat: { pattern: '+,.2f', prefix: pfx },\n            };\n        }\n\n        case 'percent': {\n            // Without an explicit intrinsicDomain we cannot reliably tell\n            // whether values are fractional 0-1 or whole-number 0-100, so\n            // fall back to plain formatting to avoid misinterpretation.\n            if (!annotation.intrinsicDomain) {\n                return {\n                    format:  {},\n                    tooltipFormat: { pattern: precisionFormat(nums) },\n                };\n            }\n            const rep = detectPercentageRepresentation(nums);\n            if (rep === '0-1') {\n                // d3's .% format multiplies by 100 automatically\n                const p = detectPrecision(nums);\n                // After ×100 we still need (p-2) decimals, minimum 0\n                const axisP = Math.max(0, p - 2);\n                const tipP  = Math.min(axisP + 1, 4);\n                return {\n                    format:  { pattern: `.${axisP}%` },\n                    tooltipFormat: { pattern: `.${tipP}%` },\n                };\n            }\n            // Whole-number percentage (0–100): use data precision\n            return {\n                format:  { pattern: precisionFormat(nums, false), suffix: '%' },\n                tooltipFormat: { pattern: precisionFormat(nums, false), suffix: '%' },\n            };\n        }\n\n        case 'signed-percent': {\n            // Without an explicit intrinsicDomain we cannot reliably tell\n            // whether values are fractional 0-1 or whole-number 0-100, so\n            // fall back to plain signed formatting to avoid misinterpretation.\n            if (!annotation.intrinsicDomain) {\n                return {\n                    format:  { pattern: precisionFormat(nums, true, '+') },\n                    tooltipFormat: { pattern: precisionFormat(nums, true, '+') },\n                };\n            }\n            const rep = detectPercentageRepresentation(nums);\n            if (rep === '0-1') {\n                const p = detectPrecision(nums);\n                const axisP = Math.max(0, p - 2);\n                const tipP  = Math.min(axisP + 1, 4);\n                return {\n                    format:  { pattern: `+.${axisP}%` },\n                    tooltipFormat: { pattern: `+.${tipP}%` },\n                };\n            }\n            return {\n                format:  { pattern: precisionFormat(nums, false, '+'), suffix: '%' },\n                tooltipFormat: { pattern: precisionFormat(nums, false, '+'), suffix: '%' },\n            };\n        }\n\n        case 'signed-decimal':\n            return {\n                format:  { pattern: precisionFormat(nums, false, '+') },\n                tooltipFormat: { pattern: precisionFormat(nums, false, '+') },\n            };\n\n        case 'unit-suffix': {\n            const sfx = unitSuffix ?? '';\n            return {\n                format:  { pattern: precisionFormat(nums), suffix: sfx, abbreviate: true },\n                tooltipFormat: { pattern: precisionFormat(nums), suffix: sfx },\n            };\n        }\n\n        case 'integer':\n            if (semanticType === 'Year') {\n                return { format: { pattern: 'd' } };\n            }\n            return {\n                format:  { pattern: ',d' },\n                tooltipFormat: { pattern: ',d' },\n            };\n\n        case 'decimal':\n            // Don't override axis format — VL's native formatting is superior\n            // for generic decimals (it adapts precision and uses ~s notation\n            // for large values). We only keep a tooltipFormat so tooltip\n            // pop-ups show clean precision rather than raw floats.\n            return {\n                format:  {},\n                tooltipFormat: { pattern: precisionFormat(nums) },\n            };\n\n        case 'plain':\n        default:\n            return { format: {} };\n    }\n}\n\n// =============================================================================\n// §5  DEFAULT VIS TYPE\n// =============================================================================\n\n/**\n * Resolve the default Vega-Lite encoding type for a field.\n *\n * When the registry lists multiple candidates (e.g., Score → ['quantitative', 'ordinal']),\n * disambiguate using data statistics (distinct value count).\n */\nexport function resolveDefaultVisType(\n    semanticType: string,\n    values: any[],\n): VisCategory {\n    // For unregistered types, defer entirely to data characteristics\n    if (!isRegistered(semanticType)) {\n        return inferVisCategory(values);\n    }\n\n    const entry = getRegistryEntry(semanticType);\n    const candidates = entry.visEncodings;\n    if (candidates.length === 1) {\n        // Guard: if registry says quantitative but actual values are\n        // strings (e.g. binned ranges like \"91-95\"), defer to data inference.\n        if (candidates[0] === 'quantitative') {\n            const nonNull = values.filter(v => v != null);\n            const allNumeric = nonNull.length > 0 &&\n                nonNull.every(v => typeof v === 'number' || (typeof v === 'string' && !isNaN(+v) && v.trim() !== ''));\n            if (!allNumeric) {\n                return inferVisCategory(values);\n            }\n        }\n        return candidates[0];\n    }\n\n    // Disambiguate between quantitative and ordinal based on distinct count\n    if (candidates.includes('quantitative') && candidates.includes('ordinal')) {\n        const distinct = new Set(values.filter(v => v != null)).size;\n        // Small number of distinct values → ordinal feels more natural\n        return distinct <= 12 ? 'ordinal' : 'quantitative';\n    }\n\n    // Disambiguate between temporal and ordinal\n    if (candidates.includes('temporal') && candidates.includes('ordinal')) {\n        const distinct = new Set(values.filter(v => v != null)).size;\n        // Few values → ordinal (e.g., only 3 years: 2022, 2023, 2024)\n        return distinct <= 6 ? 'ordinal' : 'temporal';\n    }\n\n    // If geographic + quantitative (lat/lon), prefer quantitative for standard charts\n    if (candidates.includes('geographic') && candidates.includes('quantitative')) {\n        return 'quantitative';\n    }\n\n    return candidates[0];\n}\n\n// =============================================================================\n// §6  AGGREGATION DEFAULT\n// =============================================================================\n\n/**\n * Resolve the default aggregation function based on the field's role.\n *\n * - Additive measures → sum (parts sum to a meaningful total)\n * - Intensive measures → average (rates/averages shouldn't be summed)\n * - Signed-additive    → sum (preserves sign semantics)\n * - Dimensions/IDs     → undefined (aggregation not meaningful)\n */\nexport function resolveAggregationDefault(\n    semanticType: string,\n): 'sum' | 'average' | undefined {\n    const entry = getRegistryEntry(semanticType);\n    switch (entry.aggRole) {\n        case 'additive':        return 'sum';\n        case 'signed-additive': return 'sum';\n        case 'intensive':       return 'average';\n        case 'dimension':       return undefined;\n        case 'identifier':      return undefined;\n        default:                return undefined;\n    }\n}\n\n// =============================================================================\n// §7  ZERO-BASELINE CLASSIFICATION\n// =============================================================================\n\n/**\n * Resolve zero-baseline class, enhanced with annotation domain.\n *\n * If annotation provides a domain starting above 0 (e.g., Rating [1, 5]),\n * zero is arbitrary regardless of what the base type says.\n */\nexport function resolveZeroClassFromAnnotation(\n    semanticType: string,\n    domain?: [number, number],\n): ZeroClass | 'unknown' {\n    // If domain starts above zero (e.g., Rating [1,5]), zero is arbitrary\n    if (domain && domain[0] > 0) return 'arbitrary';\n\n    // Delegate to existing classification\n    return getZeroClass(semanticType);\n}\n\n// =============================================================================\n// §8  SCALE TYPE\n// =============================================================================\n\n/**\n * Recommend a scale type based on semantic type and data distribution.\n *\n * Conservative policy — only triggers when ALL of these hold:\n *   1. The semantic type is in the ALLOW-list (Population, GDP, etc.)\n *   2. Data spans ≥ 4 orders of magnitude (10 000×)\n *   3. At least 10 data points\n *\n * This avoids surprising users on normal datasets while still helping\n * with genuinely wide-range data like city populations or GDP figures.\n */\nexport function resolveScaleType(\n    semanticType: string,\n    values: number[],\n): 'linear' | 'log' | 'sqrt' | 'symlog' | undefined {\n    // Only consider log for additive measures with open domains —\n    // these are the types that can legitimately span many orders of magnitude.\n    // (E.g., revenue, population, quantities across different scales.)\n    // Exclude generic fallback types (Number, Unknown) — they just mean\n    // \"we know it's numeric but not what it measures\", so applying\n    // log/symlog would be presumptuous.\n    const entry = getRegistryEntry(semanticType);\n    const eligible = entry.aggRole === 'additive' && entry.domainShape === 'open'\n        && entry.t1 !== 'GenericMeasure';\n    if (!eligible) return undefined;\n\n    if (values.length < 10) return undefined;\n\n    const filtered = values.filter(v => typeof v === 'number' && !isNaN(v) && isFinite(v));\n    if (filtered.length < 10) return undefined;\n\n    const min = Math.min(...filtered);\n    const max = Math.max(...filtered);\n    if (max <= 0 || min === max) return undefined;\n\n    // Only all-positive data — don't auto-log mixed-sign\n    if (min < 0) return undefined;\n\n    // Require ≥ 6 orders of magnitude (1000 000×) — very conservative\n    const positiveMin = Math.min(...filtered.filter(v => v > 0));\n    if (positiveMin > 0 && max / positiveMin >= 1000000) {\n        // If data contains zeros, log(0) = -∞ breaks the scale.\n        // Use symlog (linear near zero, logarithmic for large values)\n        // so zeros remain representable.\n        const hasZeros = filtered.some(v => v === 0);\n        return hasZeros ? 'symlog' : 'log';\n    }\n\n    return undefined;\n}\n\n// =============================================================================\n// §9  DOMAIN CONSTRAINTS\n// =============================================================================\n\n/**\n * Merge an intrinsic (semantic) domain with the actual data range.\n *\n * For **hard** domains (Latitude, Correlation) the intrinsic bounds are\n * physically absolute — data cannot exceed them, so we clamp.\n *\n * For **soft** domains (Percentage, Score, Rating, annotation-supplied)\n * the intrinsic bounds describe the *typical* range but real data can\n * legitimately exceed them (e.g., 155 % growth).  The effective domain\n * is the union: min(intrinsic[0], dataMin) … max(intrinsic[1], dataMax).\n */\nfunction mergeIntrinsicWithData(\n    intrinsic: [number, number],\n    values: any[],\n    hard: boolean,\n): DomainConstraint {\n    if (hard) {\n        return { min: intrinsic[0], max: intrinsic[1], clamp: true };\n    }\n    const nums = values.filter((v: any) => typeof v === 'number' && !isNaN(v));\n    if (nums.length === 0) {\n        return { min: intrinsic[0], max: intrinsic[1], clamp: false };\n    }\n    const dataMin = Math.min(...nums);\n    const dataMax = Math.max(...nums);\n    return {\n        min: Math.min(intrinsic[0], dataMin),\n        max: Math.max(intrinsic[1], dataMax),\n        clamp: false,\n    };\n}\n\n/**\n * Snap-to-bound heuristic for bounded types like Percentage / PercentageChange.\n *\n * Each bound is snapped independently:\n * - If data approaches the intrinsic lower bound → snap min\n * - If data approaches the intrinsic upper bound → snap max\n * - If data exceeds a bound → don't snap that side (let VL auto-extend)\n *\n * Threshold: 25% of the *effective side range*.\n *\n * We err on the side of snapping, because:\n * - Semantic types are opt-in — the bound carries meaning by definition.\n * - A wrong snap (extra white space) is less harmful than a wrong\n *   no-snap (viewer loses semantic reference, differences are\n *   exaggerated and proximity to the bound is hidden).\n * - Only when data is clearly in the interior (> 25% away from each\n *   bound) does the bound stop being a useful reference.\n *\n * When the intrinsic domain straddles zero (lo < 0 < hi), zero acts as a\n * visual baseline (bar charts, contextual zero).  Each bound's threshold\n * is computed relative to its distance from zero — not the full range —\n * so that snapping one side doesn't make values on the other side of zero\n * invisible (e.g., snapping to -100% when data has a tiny +0.2% bar).\n *\n * When the domain doesn't straddle zero (e.g., [0, 100]), the full range\n * is used as the reference.\n *\n * Examples for Percentage [0, 100] (threshold = 25, full range):\n *   20–45%   → snap min=0 only     (20 within 25 of 0; 45 far from 100)\n *   35–65%   → no snap             (both far from edges, in interior)\n *   55–82%   → snap max=100 only   (82 within 25 of 100; 55 far from 0)\n *   15–80%   → snap both [0, 100]  (15 near 0, 80 near 100)\n *   30–130%  → no snap             (130 exceeds 100 → no snap; 30 far from 0)\n *\n * Examples for PercentageChange [-1, 1] (threshold = 0.25 per side):\n *   -0.03 to +0.05 → no snap       (both far from ±0.75)\n *   -0.70 to +0.30 → no snap       (-0.70 > -0.75, not close enough)\n *   -0.80 to +0.30 → snap min=-1   (-0.80 ≤ -0.75; +0.30 < 0.75)\n *   -0.80 to +0.78 → snap both     (both within 0.25 of edges)\n */\nexport function snapToBoundHeuristic(\n    intrinsic: [number, number],\n    values: any[],\n): DomainConstraint | undefined {\n    const nums = values.filter((v: any) => typeof v === 'number' && !isNaN(v));\n    if (nums.length === 0) return undefined;\n\n    const [lo, hi] = intrinsic;\n    const range = hi - lo;\n    if (range <= 0) return undefined;\n\n    const dataMin = Math.min(...nums);\n    const dataMax = Math.max(...nums);\n\n    // When the domain straddles zero, compute each side's threshold relative\n    // to its distance from zero.  This prevents snapping one side from\n    // stretching the axis so wide that values near zero on the other side\n    // become invisible (sub-pixel bars).\n    const zeroInside = lo < 0 && hi > 0;\n    const thresholdLo = 0.25 * (zeroInside ? (0 - lo) : range);\n    const thresholdHi = 0.25 * (zeroInside ? hi       : range);\n\n    let snapMin: number | undefined;\n    let snapMax: number | undefined;\n\n    // Snap lower bound: data min is close to intrinsic lower bound\n    // AND data doesn't go below it (if it does, VL auto-extends)\n    if (dataMin >= lo && dataMin <= lo + thresholdLo) {\n        snapMin = lo;\n    }\n\n    // Snap upper bound: data max is close to intrinsic upper bound\n    // AND data doesn't exceed it\n    if (dataMax <= hi && dataMax >= hi - thresholdHi) {\n        snapMax = hi;\n    }\n\n    if (snapMin === undefined && snapMax === undefined) return undefined;\n\n    return { min: snapMin, max: snapMax, clamp: false };\n}\n\n/**\n * Resolve domain constraints from annotation, type-intrinsic rules, or data.\n *\n * Only truly fixed physical domains (Latitude, Longitude, Correlation)\n * use hard clamping. Bounded types like Percentage use a snap-to-bound\n * heuristic: the axis extends to the theoretical endpoint (e.g., 100%)\n * only when data is close to it, avoiding wasted space when data is\n * concentrated in a small region.\n *\n * Priority: annotation.intrinsicDomain > type-intrinsic > data-inferred\n */\nexport function resolveDomainConstraint(\n    semanticType: string,\n    annotation: SemanticAnnotation,\n    values: any[],\n): DomainConstraint | undefined {\n    const entry = getRegistryEntry(semanticType);\n\n    // 1. Explicit annotation intrinsicDomain\n    if (annotation.intrinsicDomain) {\n        // Proportion (Percentage) and SignedMeasure (PercentageChange, Profit):\n        // use snap-to-bound heuristic on both ends independently.\n        // Don't force the full theoretical range — only snap to a bound\n        // when data approaches it (e.g., 97% → snap to 100%, -0.95 → snap to -1).\n        if (entry.t1 === 'Proportion' || entry.t1 === 'SignedMeasure') {\n            return snapToBoundHeuristic(annotation.intrinsicDomain, values);\n        }\n        // All other types: soft merge (union of intrinsic + data)\n        return mergeIntrinsicWithData(annotation.intrinsicDomain, values, false);\n    }\n\n    // 2. Type-intrinsic hard domains (physically impossible to exceed)\n    if (semanticType === 'Latitude')    return mergeIntrinsicWithData([-90, 90], values, true);\n    if (semanticType === 'Longitude')   return mergeIntrinsicWithData([-180, 180], values, true);\n    if (semanticType === 'Correlation') return mergeIntrinsicWithData([-1, 1], values, true);\n\n    // 3. Percentage without explicit annotation — detect scale and apply snap\n    if (semanticType === 'Percentage') {\n        const nums = values.filter((v: any) => typeof v === 'number' && !isNaN(v));\n        if (nums.length > 0) {\n            const rep = detectPercentageRepresentation(nums);\n            const M = rep === '0-1' ? 1 : 100;\n            return snapToBoundHeuristic([0, M], values);\n        }\n    }\n\n    return undefined;\n}\n\n// =============================================================================\n// §10  TICK CONSTRAINTS\n// =============================================================================\n\n/**\n * Resolve tick constraints based on semantic type and domain.\n *\n * For bounded integer domains (e.g., Rating [1, 5]), generates exact ticks.\n * For integer types (Count, Rank, Year), enforces integer-only ticks.\n */\nexport function resolveTickConstraint(\n    semanticType: string,\n    domain?: [number, number],\n): TickConstraint | undefined {\n    const entry = getRegistryEntry(semanticType);\n\n    if (entry.formatClass === 'integer') {\n        const tc: TickConstraint = { integersOnly: true, minStep: 1 };\n        // If domain provided and span is small, generate exact ticks\n        if (domain) {\n            const span = domain[1] - domain[0];\n            if (span <= 20 && span > 0) {\n                tc.exactTicks = [];\n                for (let i = domain[0]; i <= domain[1]; i++) {\n                    tc.exactTicks.push(i);\n                }\n            }\n        }\n        return tc;\n    }\n\n    // Score/Rating with bounded domain → integer ticks\n    if ((semanticType === 'Score' || semanticType === 'Rating') && domain) {\n        const span = domain[1] - domain[0];\n        const tc: TickConstraint = { integersOnly: true, minStep: 1 };\n        if (span <= 20 && span > 0) {\n            tc.exactTicks = [];\n            for (let i = domain[0]; i <= domain[1]; i++) {\n                tc.exactTicks.push(i);\n            }\n        }\n        return tc;\n    }\n\n    return undefined;\n}\n\n// =============================================================================\n// §11  CANONICAL ORDERING & CYCLIC\n// =============================================================================\n\n/**\n * Resolve the canonical sort order for a field.\n *\n * Priority: annotation.sortOrder > well-known type sequence > auto-detect from data\n */\nexport function resolveCanonicalOrder(\n    semanticType: string,\n    annotation: SemanticAnnotation,\n    values: any[],\n): string[] | undefined {\n    // 1. Explicit annotation sortOrder\n    if (annotation.sortOrder && annotation.sortOrder.length > 0) {\n        return annotation.sortOrder;\n    }\n\n    // 2. Delegate to existing well-known sequence detection\n    return inferOrdinalSortOrder(semanticType, values);\n}\n\n/**\n * Determine whether a field's values form a cyclic (wrap-around) sequence.\n *\n * Derived purely from semantic type — NOT an LLM annotation.\n * Types with domainShape='cyclic' in the registry are cyclic.\n */\nexport function resolveCyclic(semanticType: string): boolean {\n    const entry = getRegistryEntry(semanticType);\n    return entry.domainShape === 'cyclic';\n}\n\n// =============================================================================\n// §12  REVERSED AXIS\n// =============================================================================\n\n/**\n * Whether the axis should be reversed for this field.\n *\n * Rank is the primary case: 1st place should appear at the top of the\n * y-axis.  On the x-axis, rank 1 should stay on the left (no reversal).\n */\nexport function resolveReversed(semanticType: string, channel?: string): boolean {\n    if (semanticType === 'Rank') {\n        // Only reverse on the y-axis (rank 1 at top).\n        // On x-axis, natural left-to-right order is correct.\n        return channel !== 'x';\n    }\n    return false;\n}\n\n// =============================================================================\n// §13  NICE (domain rounding)\n// =============================================================================\n\n/**\n * Whether to apply \"nice\" rounding to scale domain endpoints.\n *\n * Nice is false when:\n * - There's a fixed domain constraint (Rating [1, 5] → axis should show exactly 1–5)\n * - The type has a fixed domain shape (Latitude, Correlation)\n */\nexport function resolveNice(\n    semanticType: string,\n    domainConstraint?: DomainConstraint,\n): boolean {\n    if (domainConstraint?.clamp) return false;\n    if (domainConstraint && domainConstraint.min !== undefined && domainConstraint.max !== undefined) {\n        return false;\n    }\n    const entry = getRegistryEntry(semanticType);\n    if (entry.domainShape === 'fixed') return false;\n    return true;\n}\n\n// =============================================================================\n// §14  DIVERGING & COLOR SCHEME HINT\n// =============================================================================\n\n/**\n * Resolve diverging midpoint information for a field.\n *\n * Priority chain:\n *   1. annotation.unit → type lookup (°C → 0, °F → 32)\n *   2. type-intrinsic midpoint (Sentiment → 0, Correlation → 0)\n *   3. annotation.intrinsicDomain midpoint (Rating [1,5] → 3)\n *   4. data-driven: data spans 0 → midpoint 0\n *\n * Returns undefined if no diverging treatment applies.\n */\nexport function resolveDivergingInfo(\n    semanticType: string,\n    annotation: SemanticAnnotation,\n    values: number[],\n): DivergingInfo | undefined {\n    const entry = getRegistryEntry(semanticType);\n    // Types with diverging='none' don't get diverging treatment\n\n    // 1. Unit-derived (Temperature)\n    if (semanticType === 'Temperature' && annotation.unit) {\n        const unitMidpoints: Record<string, number> = {\n            '°C': 0, '°F': 32, 'K': 273.15, C: 0, F: 32,\n        };\n        const mid = unitMidpoints[annotation.unit];\n        if (mid !== undefined) {\n            return { midpoint: mid, inherent: false, source: 'unit' };\n        }\n    }\n\n    // 3. Type-intrinsic\n    if (entry.diverging === 'inherent') {\n        return { midpoint: 0, inherent: true, source: 'type-intrinsic' };\n    }\n    if (entry.diverging === 'conditional') {\n        return { midpoint: 0, inherent: false, source: 'type-intrinsic' };\n    }\n\n    // 3. Domain-derived midpoint (e.g., Rating [1,5] → 3)\n    if (annotation.intrinsicDomain) {\n        return {\n            midpoint: (annotation.intrinsicDomain[0] + annotation.intrinsicDomain[1]) / 2,\n            inherent: false,\n            source: 'domain',\n        };\n    }\n\n    // 4. Data-driven: if data spans 0, use 0 as midpoint\n    if (values.length > 0) {\n        const min = Math.min(...values);\n        const max = Math.max(...values);\n        if (min < 0 && max > 0) {\n            return { midpoint: 0, inherent: false, source: 'data' };\n        }\n    }\n\n    return undefined;\n}\n\n/**\n * Resolve color scheme hint based on semantic type, diverging analysis,\n * and data values.\n */\nexport function resolveColorSchemeHint(\n    semanticType: string,\n    annotation: SemanticAnnotation,\n    values: any[],\n): ColorSchemeHint {\n    const entry = getRegistryEntry(semanticType);\n    const nums = values.filter((v: any) => typeof v === 'number' && !isNaN(v));\n\n    // Try diverging analysis\n    const divInfo = resolveDivergingInfo(semanticType, annotation, nums);\n    if (divInfo) {\n        const min = nums.length > 0 ? Math.min(...nums) : 0;\n        const max = nums.length > 0 ? Math.max(...nums) : 0;\n        const spansBothSides = min < divInfo.midpoint && max > divInfo.midpoint;\n\n        if (divInfo.inherent || spansBothSides) {\n            return {\n                type: 'diverging',\n                divergingMidpoint: divInfo.midpoint,\n                inherentlyDiverging: divInfo.inherent,\n            };\n        }\n    }\n\n    // Sequential for quantitative, categorical for nominal/ordinal\n    if (entry.visEncodings.includes('quantitative')) {\n        return { type: 'sequential' };\n    }\n    return { type: 'categorical' };\n}\n\n// =============================================================================\n// §15  BINNING SUITABILITY\n// =============================================================================\n\n/**\n * Whether this field benefits from histogram-style binning.\n *\n * False for small bounded domains (Rating 1–5), non-numeric types,\n * and identifiers.\n */\nexport function resolveBinningSuggested(\n    semanticType: string,\n    domain?: [number, number],\n): boolean {\n    const entry = getRegistryEntry(semanticType);\n\n    // Non-quantitative types don't get binned\n    if (!entry.visEncodings.includes('quantitative')) return false;\n\n    // Identifiers/dimensions don't get binned\n    if (entry.aggRole === 'identifier' || entry.aggRole === 'dimension') return false;\n\n    // Year should use temporal axis, not bins\n    if (semanticType === 'Year' || semanticType === 'Decade') return false;\n\n    // Small bounded domains have too few values to bin\n    if (domain && (domain[1] - domain[0]) <= 20) return false;\n\n    // Rating/Score with known small range\n    if (semanticType === 'Rating' && !domain) return false;\n\n    return true;\n}\n\n// =============================================================================\n// §17  STACKING COMPATIBILITY\n// =============================================================================\n\n/**\n * Whether values of this type can be stacked in a bar/area chart, and how.\n *\n * - 'sum':       Additive measures (parts sum to whole)\n * - 'normalize': Proportions (show 100% breakdown)\n * - false:       Stacking is meaningless (rates, scores, identifiers)\n */\nexport function resolveStackable(\n    semanticType: string,\n): 'sum' | 'normalize' | false {\n    const entry = getRegistryEntry(semanticType);\n\n    switch (entry.aggRole) {\n        case 'additive':        return 'sum';\n        case 'signed-additive': return 'sum';\n        case 'intensive':\n            // Percentage is the exception — normalizable\n            if (semanticType === 'Percentage') return 'normalize';\n            return false;\n        case 'dimension':       return false;\n        case 'identifier':      return false;\n        default:                return false;\n    }\n}\n\n// =============================================================================\n// §18  SORT DIRECTION\n// =============================================================================\n\n/**\n * Default sort direction for this field when used on an axis.\n */\nexport function resolveSortDirection(\n    semanticType: string,\n): 'ascending' | 'descending' {\n    // Rank: show best first\n    if (semanticType === 'Rank') return 'descending';\n    return 'ascending';\n}\n\n// =============================================================================\n// §19  BUILDER: resolveFieldSemantics()\n// =============================================================================\n\n/**\n * Resolve field semantics from annotation + data.\n *\n * This is the sole entry point for data-identity decisions. It resolves\n * the one-to-many ambiguities in the type registry by inspecting the\n * concrete data representation.\n *\n * Visualization-specific decisions (color scheme, axis reversal,\n * interpolation, tick strategy, nice rounding, stacking) are NOT\n * computed here — those belong in `resolveChannelSemantics()`.\n *\n * @param input       The semantic type annotation (string or enriched object)\n * @param fieldName   Column name (used for unit detection heuristics)\n * @param values      Sampled data values from this field\n * @returns           Resolved field semantics\n */\nexport function resolveFieldSemantics(\n    input: string | SemanticAnnotation | undefined,\n    fieldName: string,\n    values: any[],\n): FieldSemantics {\n    // 1. Normalize annotation\n    const annotation = normalizeAnnotation(input);\n    const semanticType = annotation.semanticType;\n\n    // 2. Numeric values (filtered once, reused across resolvers)\n    const numericValues = values\n        .filter((v: any) => typeof v === 'number' && !isNaN(v) && isFinite(v));\n\n    // 3. Resolve field-intrinsic properties\n    const defaultVisType = resolveDefaultVisType(semanticType, values);\n    const { format, tooltipFormat } = resolveFormat(semanticType, annotation, values);\n    let aggregationDefault = resolveAggregationDefault(semanticType);\n    let zeroClass = resolveZeroClassFromAnnotation(semanticType, annotation.intrinsicDomain);\n    const scaleType = resolveScaleType(semanticType, numericValues);\n    const domainConstraint = resolveDomainConstraint(semanticType, annotation, values);\n    const canonicalOrder = resolveCanonicalOrder(semanticType, annotation, values);\n    const cyclic = resolveCyclic(semanticType);\n    let binningSuggested = resolveBinningSuggested(semanticType, annotation.intrinsicDomain);\n    const sortDirection = resolveSortDirection(semanticType);\n\n    // 4. For unregistered types, provide data-driven fallbacks.\n    //    The registry treats unknown types as categorical, but if the data\n    //    is actually numeric, we should behave like a generic measure.\n    if (!isRegistered(semanticType) && defaultVisType === 'quantitative') {\n        // Data looks numeric → treat like Number (GenericMeasure)\n        if (!aggregationDefault) aggregationDefault = 'sum';\n        if (zeroClass === 'unknown') zeroClass = 'meaningful';\n        binningSuggested = true;\n    }\n\n    return {\n        semanticAnnotation: annotation,\n        defaultVisType,\n        format,\n        tooltipFormat,\n        aggregationDefault,\n        zeroClass,\n        scaleType: scaleType ?? undefined,\n        domainConstraint,\n        canonicalOrder,\n        cyclic,\n        sortDirection,\n        binningSuggested,\n    };\n}\n"
  },
  {
    "path": "src/lib/agents-chart/core/filter-overflow.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * =============================================================================\n * OVERFLOW FILTERING\n * =============================================================================\n *\n * Decides *which* discrete values to keep when there are too many for\n * the available canvas space, then filters the data accordingly.\n *\n * This module does **no layout math**.  Per-channel capacity budgets\n * are computed upstream by `computeChannelBudgets` and passed in as\n * a `ChannelBudgets` object.  This module focuses on:\n *   1. Iterating each discrete channel\n *   2. Applying the overflow strategy (which values to keep)\n *   3. Filtering data rows\n *   4. Producing truncation warnings\n *\n * Runs AFTER computeChannelBudgets and BEFORE computeLayout.\n *\n * VL dependency: **None**\n * =============================================================================\n */\n\nimport type {\n    ChannelSemantics,\n    ChartEncoding,\n    LayoutDeclaration,\n    TruncationWarning,\n    OverflowResult,\n    OverflowStrategy,\n    OverflowStrategyContext,\n    ChannelBudgets,\n} from './types';\nimport type { ChartWarning } from './types';\nimport { inferVisCategory } from './semantic-types';\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Filter data to keep only the values that fit within the canvas.\n *\n * @param channelSemantics  Phase 0 output (field, type per channel)\n * @param declaration       Template layout declaration (resolvedTypes, overflowStrategy)\n * @param encodings         Original user-level encodings (for sort info)\n * @param data              Full data table\n * @param budgets           Per-channel capacity budgets from computeChannelBudgets\n * @param allMarkTypes      Set of all mark types in the template (for connected-mark detection)\n * @returns                 OverflowResult with filtered data, nominal counts, truncations, and warnings\n */\nexport function filterOverflow(\n    channelSemantics: Record<string, ChannelSemantics>,\n    declaration: LayoutDeclaration,\n    encodings: Record<string, ChartEncoding>,\n    data: any[],\n    budgets: ChannelBudgets,\n    allMarkTypes: Set<string>,\n): OverflowResult {\n\n    // --- Build effective channel info from semantics + declaration ---\n\n    const effectiveType = (ch: string): string | undefined =>\n        declaration.resolvedTypes?.[ch] ?? channelSemantics[ch]?.type;\n\n    const effectiveField = (ch: string): string | undefined => {\n        if (channelSemantics[ch]?.field) return channelSemantics[ch].field;\n        return undefined;\n    };\n\n    const isDiscreteType = (t: string | undefined) => t === 'nominal' || t === 'ordinal';\n\n    // --- Filter data ---\n\n    const nominalCounts: Record<string, number> = {\n        x: 0, y: 0, column: 0, row: 0, group: 0,\n    };\n    const truncations: TruncationWarning[] = [];\n    const warnings: ChartWarning[] = [];\n    let filteredData = data;\n\n    // Compute group nominal count\n    const groupField = channelSemantics.group?.field;\n    if (groupField) {\n        nominalCounts.group = new Set(data.map(r => r[groupField])).size;\n    }\n\n    // Strategy context for custom or default overflow\n    const strategyContext: OverflowStrategyContext = {\n        data,\n        channelSemantics,\n        encodings,\n        allMarkTypes,\n    };\n\n    const strategy = declaration.overflowStrategy ?? defaultOverflowStrategy;\n\n    for (const channel of ['x', 'y', 'column', 'row', 'color'] as const) {\n        const fieldName = effectiveField(channel);\n        const type = effectiveType(channel);\n        if (!fieldName) continue;\n\n        // Budget for this channel (Infinity if uncapped)\n        const maxToKeep = budgets.maxValues[channel] ?? Infinity;\n\n        // For non-discrete types on column/row, apply overflow cap —\n        // every unique value becomes a facet panel.\n        if (!isDiscreteType(type)) {\n            if (channel === 'column' || channel === 'row') {\n                const uniqueValues = [...new Set(filteredData.map(r => r[fieldName]))];\n                nominalCounts[channel] = Math.min(uniqueValues.length, maxToKeep);\n\n                if (uniqueValues.length > maxToKeep) {\n                    // For non-discrete facets, keep the first N values (sorted)\n                    const sorted = [...uniqueValues].sort();\n                    const valuesToKeep = sorted.slice(0, maxToKeep);\n\n                    const omittedCount = uniqueValues.length - valuesToKeep.length;\n                    warnings.push({\n                        severity: 'warning',\n                        code: 'overflow',\n                        message: `${omittedCount} of ${uniqueValues.length} values in '${fieldName}' were omitted (showing first ${valuesToKeep.length}).`,\n                        channel,\n                        field: fieldName,\n                    });\n\n                    const keepSet = new Set(valuesToKeep);\n                    filteredData = filteredData.filter(row => keepSet.has(row[fieldName]));\n                }\n            }\n            continue;\n        }\n\n        const uniqueValues = [...new Set(filteredData.map(r => r[fieldName]))];\n        nominalCounts[channel] = Math.min(uniqueValues.length, maxToKeep);\n\n        if (uniqueValues.length > maxToKeep) {\n            const valuesToKeep = strategy(channel, fieldName, uniqueValues, maxToKeep, strategyContext);\n\n            const omittedCount = uniqueValues.length - valuesToKeep.length;\n            const placeholder = `...${omittedCount} items omitted`;\n\n            warnings.push({\n                severity: 'warning',\n                code: 'overflow',\n                message: `${omittedCount} of ${uniqueValues.length} values in '${fieldName}' were omitted (showing top ${valuesToKeep.length}).`,\n                channel,\n                field: fieldName,\n            });\n\n            truncations.push({\n                severity: 'warning',\n                code: 'overflow',\n                message: `${omittedCount} of ${uniqueValues.length} values in '${fieldName}' were omitted (showing top ${valuesToKeep.length}).`,\n                channel,\n                field: fieldName,\n                keptValues: valuesToKeep,\n                omittedCount,\n                placeholder,\n            });\n\n            // Filter data rows (except for color — we keep all rows but style the legend)\n            if (channel !== 'color') {\n                filteredData = filteredData.filter(row => valuesToKeep.includes(row[fieldName]));\n            }\n        }\n    }\n\n    return { filteredData, nominalCounts, truncations, warnings };\n}\n\n// ---------------------------------------------------------------------------\n// Default overflow strategy\n// ---------------------------------------------------------------------------\n\n/**\n * Default overflow strategy: decides which discrete values to keep.\n *\n * - Connected marks (line/area/trail): preserve natural order (first N)\n * - User-specified sort: respect it\n * - Auto-sort: sort by quantitative opposite axis or color, keep top N\n * - Bar charts: sum-aggregate for sort (total bar height matters)\n */\nconst defaultOverflowStrategy: OverflowStrategy = (\n    channel, fieldName, uniqueValues, maxToKeep, context,\n) => {\n    const { data, channelSemantics, encodings, allMarkTypes } = context;\n\n    // Connected marks need chronological/natural order preserved\n    const hasConnectedMark = allMarkTypes.has('line') || allMarkTypes.has('area') || allMarkTypes.has('trail');\n\n    // Determine sort intent from user encodings\n    const encoding = encodings[channel];\n    const sortBy = encoding?.sortBy;\n    const sortOrder = encoding?.sortOrder;\n\n    // Infer sort field and direction\n    let sortField: string | undefined;\n    let sortFieldType: string | undefined;\n    let isDescending = true;\n\n    if (sortBy) {\n        // User explicitly specified sort\n        if (sortBy === 'x' || sortBy === 'y' || sortBy === 'color') {\n            const sortCS = channelSemantics[sortBy];\n            sortField = sortCS?.field;\n            sortFieldType = sortCS?.type;\n            isDescending = sortOrder === 'descending' || (sortOrder !== 'ascending' && sortBy !== channel);\n        } else {\n            // Custom sort list — respect insertion order\n            try {\n                const sortedList = JSON.parse(sortBy);\n                if (Array.isArray(sortedList)) {\n                    const orderedValues = (sortOrder === 'descending') ? sortedList.reverse() : sortedList;\n                    return orderedValues.filter((v: any) => uniqueValues.includes(v)).slice(0, maxToKeep);\n                }\n            } catch {\n                // not a JSON list, fall through\n            }\n            isDescending = sortOrder === 'descending';\n        }\n    } else {\n        // Auto-detect sort: quantitative opposite axis or quantitative color\n        const oppositeChannel = channel === 'x' ? 'y' : channel === 'y' ? 'x' : undefined;\n\n        const colorCS = channelSemantics.color;\n        const oppositeCS = oppositeChannel ? channelSemantics[oppositeChannel] : undefined;\n\n        // For rect marks (heatmaps), color is the primary value — don't auto-sort by it\n        const markType = allMarkTypes.has('rect') ? 'rect' : undefined;\n        if (markType !== 'rect' && colorCS?.type === 'quantitative') {\n            sortField = colorCS.field;\n            sortFieldType = colorCS.type;\n        } else if (oppositeCS?.type === 'quantitative') {\n            sortField = oppositeCS.field;\n            sortFieldType = oppositeCS.type;\n        } else {\n            isDescending = false;\n        }\n    }\n\n    // For quantitative field values treated as nominal, sort numerically\n    const fieldOriginalType = inferVisCategory(data.map(r => r[fieldName]));\n    if (fieldOriginalType === 'quantitative' || channel === 'color') {\n        return uniqueValues.sort((a, b) => a - b)\n            .slice(0, maxToKeep);\n    }\n\n    // Facet channels: first N\n    if (channel === 'column' || channel === 'row') {\n        return uniqueValues.slice(0, maxToKeep);\n    }\n\n    // Connected marks: preserve natural order\n    if (hasConnectedMark) {\n        return uniqueValues.slice(0, maxToKeep);\n    }\n\n    // Sort by aggregate of the quantitative sort field\n    if (sortField && sortFieldType === 'quantitative') {\n        // Bar charts: sum aggregate (total bar height). Others: max.\n        let aggregateOp = Math.max;\n        let initialValue = -Infinity;\n        if (allMarkTypes.has('bar') && sortField !== channelSemantics.color?.field) {\n            aggregateOp = (x: number, y: number) => x + y;\n            initialValue = 0;\n        }\n\n        const valueAggregates = new Map<string, number>();\n        for (const row of data) {\n            const fieldValue = row[fieldName];\n            const sortValue = row[sortField] || 0;\n            if (valueAggregates.has(fieldValue)) {\n                valueAggregates.set(fieldValue, aggregateOp(valueAggregates.get(fieldValue)!, sortValue));\n            } else {\n                valueAggregates.set(fieldValue, aggregateOp(initialValue, sortValue));\n            }\n        }\n\n        return Array.from(valueAggregates.entries())\n            .map(([value, agg]) => ({ value, agg }))\n            .sort((a, b) => isDescending ? b.agg - a.agg : a.agg - b.agg)\n            .slice(0, maxToKeep)\n            .map(v => v.value);\n    }\n\n    // Descending explicit sort: reverse then take first N\n    if (sortOrder === 'descending') {\n        return uniqueValues.reverse().slice(0, maxToKeep);\n    }\n\n    // Default: first N values\n    return uniqueValues.slice(0, maxToKeep);\n};\n"
  },
  {
    "path": "src/lib/agents-chart/core/index.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @module agents-chart/core\n *\n * Target-language-agnostic core of the chart engine.\n *\n * Contains semantic type system, layout computation, overflow filtering,\n * decision functions, and shared type definitions. No Vega-Lite or other\n * rendering-library dependencies.\n */\n\n// Types & constants\nexport {\n    channels,\n    channelGroups,\n    type ChartAssemblyInput,\n    type ChartEncoding,\n    type AssembleOptions,\n    type ChartTemplateDef,\n    type ChartWarning,\n    type ChannelSemantics,\n    type SemanticResult,\n    type MarkCognitiveChannel,\n    type LayoutDeclaration,\n    type TruncationWarning,\n    type LayoutResult,\n    type InstantiateContext,\n    type ChartPropertyDef,\n    type OverflowStrategy,\n    type OverflowStrategyContext,\n    type OverflowResult,\n    type ChannelBudgets,\n} from './types';\n\n// Semantic type system\nexport {\n    SemanticTypes,\n    type SemanticType,\n    type VisCategory,\n    type ZeroClass,\n    type ZeroDecision,\n    getVisCategory,\n    inferVisCategory,\n    getZeroClass,\n    computeZeroDecision,\n    computePaddedDomain,\n    isMeasureType,\n    isTimeSeriesType,\n    isCategoricalType,\n    isOrdinalType,\n    isGeoType,\n    getRecommendedColorScheme,\n    inferOrdinalSortOrder,\n} from './semantic-types';\n\n// Reusable decision functions\nexport {\n    resolveEncodingType,\n    computeElasticBudget,\n    computeAxisStep,\n    computeFacetLayout,\n    computeLabelSizing,\n    computeOverflow,\n    computeGasPressure,\n    DEFAULT_GAS_PRESSURE_PARAMS,\n    type EncodingTypeDecision,\n    type ElasticStretchParams,\n    type ElasticBudget,\n    type AxisStepDecision,\n    type FacetLayoutDecision,\n    type LabelSizingDecision,\n    type OverflowDecision,\n    type GasPressureParams,\n    type GasPressureDecision,\n} from './decisions';\n\n// Phase modules (analysis pipeline — VL-free)\nexport { resolveChannelSemantics, convertTemporalData } from './resolve-semantics';\nexport { filterOverflow } from './filter-overflow';\nexport { computeLayout, computeChannelBudgets } from './compute-layout';\n\n// Recommendation & adaptation engine\nexport {\n    adaptChannels,\n    recommendChannels,\n    type SemanticRole,\n} from './recommendation';\n\n// Field semantics\nexport {\n    type SemanticAnnotation,\n    type FormatSpec,\n    type DomainConstraint,\n    type TickConstraint,\n    type ColorSchemeHint,\n    type DivergingInfo,\n    type FieldSemantics,\n    resolveFieldSemantics,\n    normalizeAnnotation,\n    getRegistryEntry,\n    toTypeString,\n    resolveFormat,\n    resolveDefaultVisType,\n    resolveAggregationDefault,\n    resolveZeroClassFromAnnotation,\n    resolveScaleType,\n    resolveDomainConstraint,\n    resolveTickConstraint,\n    resolveCanonicalOrder,\n    resolveCyclic,\n    resolveReversed,\n    resolveNice,\n    resolveDivergingInfo,\n    resolveColorSchemeHint,\n    resolveBinningSuggested,\n    resolveStackable,\n    resolveSortDirection,\n} from './field-semantics';\n"
  },
  {
    "path": "src/lib/agents-chart/core/recommendation.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * =============================================================================\n * CHART RECOMMENDATION & ADAPTATION ENGINE\n * =============================================================================\n *\n * Backend-agnostic logic for two chart operations:\n *\n *   1. **Adaptation** — remapping encoding channels when switching chart types\n *      (e.g. Bar→Pie: x→color, y→size because the semantic roles differ).\n *\n *   2. **Recommendation** — suggesting which data fields best fit each\n *      encoding channel for a given chart type, using semantic types,\n *      cardinality constraints, and data-fitness tests.\n *\n * Both functions operate on plain field names (string→string maps) with no\n * UI-layer dependencies.  Backend-specific wrappers (vegalite/recommendation.ts\n * etc.) filter results to channels that actually exist in that backend's\n * template registry.\n *\n * =============================================================================\n */\n\nimport {\n    inferVisCategory,\n    getVisCategory,\n    isMeasureType,\n    isTimeSeriesType,\n    isCategoricalType,\n    isOrdinalType,\n    isGeoType,\n    isGeoCoordinateType,\n    isNonMeasureNumeric,\n} from './semantic-types';\n\n// ============================================================================\n// 1. Semantic Role System (used by adaptation)\n// ============================================================================\n\n/**\n * Semantic role of a channel within a specific chart type.\n */\nexport type SemanticRole =\n    | 'category'\n    | 'measure'\n    | 'measure2'\n    | 'series'\n    | 'facetCol'\n    | 'facetRow'\n    | 'auxiliary'\n    | 'geo'\n    | 'price';\n\ntype ChannelRoleMap = Partial<Record<string, SemanticRole>>;\n\n// ── Chart Families ──────────────────────────────────────────────────────\n\n/** Standard x/y charts: x=category, y=measure, color=series */\nconst FAMILY_XY_STANDARD: ChannelRoleMap = {\n    x: 'category', y: 'measure', color: 'series',\n    opacity: 'auxiliary', size: 'auxiliary', shape: 'auxiliary',\n    detail: 'auxiliary', group: 'series',\n    column: 'facetCol', row: 'facetRow',\n};\n\n/** Pie-like charts: color=category, size=measure */\nconst FAMILY_PIE: ChannelRoleMap = {\n    color: 'category', size: 'measure',\n    column: 'facetCol', row: 'facetRow',\n};\n\n/** Rose chart: polar radial bar — x=category, y=measure, color=series */\nconst FAMILY_ROSE: ChannelRoleMap = {\n    x: 'category', y: 'measure', color: 'series',\n    column: 'facetCol', row: 'facetRow',\n};\n\n/** Radar chart */\nconst FAMILY_RADAR: ChannelRoleMap = {\n    x: 'category', y: 'measure', color: 'series',\n    column: 'facetCol', row: 'facetRow',\n};\n\n/** Map charts: latitude/longitude = geo */\nconst FAMILY_MAP: ChannelRoleMap = {\n    latitude: 'geo', longitude: 'geo',\n    color: 'series', size: 'auxiliary', opacity: 'auxiliary',\n};\n\n/** Candlestick: x=category, open/high/low/close=price */\nconst FAMILY_CANDLESTICK: ChannelRoleMap = {\n    x: 'category',\n    open: 'price', high: 'price', low: 'price', close: 'price',\n    column: 'facetCol', row: 'facetRow',\n};\n\n/** Histogram: x=measure (binned) */\nconst FAMILY_HISTOGRAM: ChannelRoleMap = {\n    x: 'measure', color: 'series',\n    column: 'facetCol', row: 'facetRow',\n};\n\n/** Density */\nconst FAMILY_DENSITY: ChannelRoleMap = {\n    x: 'measure', color: 'series',\n    column: 'facetCol', row: 'facetRow',\n};\n\n/** Heatmap: x=category, y=category, color=measure */\nconst FAMILY_HEATMAP: ChannelRoleMap = {\n    x: 'category', y: 'category', color: 'measure',\n    column: 'facetCol', row: 'facetRow',\n};\n\n/** Gauge: size=measure */\nconst FAMILY_GAUGE: ChannelRoleMap = {\n    size: 'measure', column: 'facetCol',\n};\n\n/** Funnel: y=category, size=measure */\nconst FAMILY_FUNNEL: ChannelRoleMap = {\n    y: 'category', size: 'measure',\n};\n\n/** Treemap / Sunburst */\nconst FAMILY_TREEMAP: ChannelRoleMap = {\n    color: 'category', size: 'measure', detail: 'auxiliary',\n};\n\n/** Sankey */\nconst FAMILY_SANKEY: ChannelRoleMap = {\n    x: 'category', y: 'category', size: 'measure',\n};\n\n/** Range charts with x2/y2 */\nconst FAMILY_RANGE: ChannelRoleMap = {\n    x: 'category', y: 'measure', x2: 'measure2', y2: 'measure2',\n    color: 'series', opacity: 'auxiliary',\n    column: 'facetCol', row: 'facetRow',\n};\n\n// ── Chart → Family lookup ───────────────────────────────────────────────\n\nconst CHART_ROLE_MAP: Record<string, ChannelRoleMap> = {\n    // Axis-based (x/y standard)\n    'Bar Chart': FAMILY_XY_STANDARD,\n    'Pyramid Chart': FAMILY_XY_STANDARD,\n    'Grouped Bar Chart': FAMILY_XY_STANDARD,\n    'Stacked Bar Chart': FAMILY_XY_STANDARD,\n    'Lollipop Chart': FAMILY_XY_STANDARD,\n    'Waterfall Chart': FAMILY_XY_STANDARD,\n    'Line Chart': FAMILY_XY_STANDARD,\n    'Dotted Line Chart': FAMILY_XY_STANDARD,\n    'Bump Chart': FAMILY_XY_STANDARD,\n    'Area Chart': FAMILY_XY_STANDARD,\n    'Streamgraph': FAMILY_XY_STANDARD,\n    'Scatter Plot': FAMILY_XY_STANDARD,\n    'Regression': FAMILY_XY_STANDARD,\n    'Ranged Dot Plot': FAMILY_XY_STANDARD,\n    'Boxplot': FAMILY_XY_STANDARD,\n    'Strip Plot': FAMILY_XY_STANDARD,\n    // Custom marks\n    'Custom Point': FAMILY_XY_STANDARD,\n    'Custom Line': FAMILY_XY_STANDARD,\n    'Custom Bar': FAMILY_XY_STANDARD,\n    'Custom Rect': FAMILY_RANGE,\n    'Custom Area': FAMILY_RANGE,\n    // Pie-like\n    'Pie Chart': FAMILY_PIE,\n    // Polar\n    'Rose Chart': FAMILY_ROSE,\n    'Radar Chart': FAMILY_RADAR,\n    // Heatmap\n    'Heatmap': FAMILY_HEATMAP,\n    // Histogram / Density\n    'Histogram': FAMILY_HISTOGRAM,\n    'Density Plot': FAMILY_DENSITY,\n    // Geographic\n    'US Map': FAMILY_MAP,\n    'World Map': FAMILY_MAP,\n    // Financial\n    'Candlestick Chart': FAMILY_CANDLESTICK,\n    // ECharts-only\n    'Gauge Chart': FAMILY_GAUGE,\n    'Funnel Chart': FAMILY_FUNNEL,\n    'Treemap': FAMILY_TREEMAP,\n    'Sunburst Chart': FAMILY_TREEMAP,\n    'Sankey Diagram': FAMILY_SANKEY,\n};\n\n// ── Role helpers ────────────────────────────────────────────────────────\n\nfunction getChannelRole(chartType: string, channel: string): SemanticRole {\n    const roleMap = CHART_ROLE_MAP[chartType];\n    if (roleMap && channel in roleMap) return roleMap[channel]!;\n    if (channel === 'column') return 'facetCol';\n    if (channel === 'row') return 'facetRow';\n    return 'auxiliary';\n}\n\nfunction findChannelsByRole(chartType: string, templateChannels: string[], role: SemanticRole): string[] {\n    return templateChannels.filter(ch => getChannelRole(chartType, ch) === role);\n}\n\n/** Fallback chain when target has no channel with the exact source role. */\nconst FALLBACK_CHAIN: Partial<Record<SemanticRole, SemanticRole[]>> = {\n    measure2: ['measure', 'auxiliary'],\n    series: ['auxiliary'],\n    category: ['series', 'auxiliary'],\n    measure: ['auxiliary'],\n    geo: ['category'],\n    price: ['measure', 'auxiliary'],\n};\n\nconst ROLE_PRIORITY: Record<SemanticRole, number> = {\n    category: 0, measure: 1, series: 2, facetCol: 3, facetRow: 4,\n    measure2: 5, auxiliary: 6, geo: 7, price: 8,\n};\n\n// ============================================================================\n// 2. Adaptation — adapt channel encodings across chart types\n// ============================================================================\n\n/**\n * Adapt encoding channels from one chart type to another.\n *\n * When `data` is provided, uses **recommendation-based adaptation**: re-runs\n * the recommendation engine with a strong preference for the currently-assigned\n * fields, letting the target chart's field-type preferences take effect\n * (e.g. Line Chart prefers temporal on x).  Remaining empty channels are\n * optionally filled from all available fields.\n *\n * When no data is provided, falls back to **structural role-based** adaptation\n * (pure channel remapping by semantic role).\n *\n * @param sourceType      The current chart type name (e.g. \"Bar Chart\")\n * @param targetType      The target chart type name (e.g. \"Pie Chart\")\n * @param targetChannels  Available channels on the target template\n * @param encodings       Current channel→fieldName map (only filled channels)\n * @param data            (optional) Array of data row objects\n * @param semanticTypes   (optional) Field→semantic-type map\n * @returns               New channel→fieldName map for the target\n */\nexport function adaptChannels(\n    sourceType: string,\n    targetType: string,\n    targetChannels: string[],\n    encodings: Record<string, string>,\n    data?: any[],\n    semanticTypes?: Record<string, string>,\n    recommendFn?: RecommendFn,\n): Record<string, string> {\n    // Recommendation-based adaptation when data is available\n    if (data && data.length > 0) {\n        return adaptViaRecommendation(sourceType, targetType, targetChannels, encodings, data, semanticTypes ?? {}, recommendFn ?? getRecommendation);\n    }\n\n    // Fallback: structural role-based adaptation\n    return adaptViaRoles(sourceType, targetType, targetChannels, encodings);\n}\n\n/**\n * Edit-distance-based adaptation: find the minimum-cost mapping from existing\n * field→channel assignments to target chart channels.\n *\n * Cost model:\n *   0    — field stays in the same channel (compatible type)\n *   0.5  — field moves to a channel with the same semantic role\n *            (e.g., color→group — both \"series\" role)\n *   1    — field moves to a channel with a different but compatible role\n *   1.5  — field is dropped (not assigned to any target channel)\n *            (slightly above move-cost so we prefer keeping fields when tied)\n *   ∞    — field type is incompatible with target channel\n *\n * After the minimum-cost assignment, remaining empty target channels are\n * filled via the recommendation engine.\n */\nfunction adaptViaRecommendation(\n    sourceType: string,\n    targetType: string,\n    targetChannels: string[],\n    encodings: Record<string, string>,\n    data: any[],\n    semanticTypes: Record<string, string>,\n    recommendFn: RecommendFn,\n): Record<string, string> {\n    // --- Pre-process: handle facet channels and filter data ---\n    const FACET_CHANNELS = ['column', 'row'];\n    let facetedData = data;\n    const prePinned: Record<string, string> = {};\n    const prePinnedFields = new Set<string>();\n\n    for (const ch of FACET_CHANNELS) {\n        const field = encodings[ch];\n        if (field && targetChannels.includes(ch)) {\n            prePinned[ch] = field;\n            prePinnedFields.add(field);\n            if (facetedData.length > 0) {\n                const firstVal = facetedData[0][field];\n                facetedData = facetedData.filter(row => row[field] === firstVal);\n            }\n        }\n    }\n\n    const tv = buildTableView(facetedData, semanticTypes);\n\n    // --- Type compatibility check ---\n    const isFieldCompatibleWithRole = (role: SemanticRole, field: string): boolean => {\n        const ft = tv.fieldType[field] ?? 'nominal';\n        const st = tv.fieldSemanticType[field] ?? '';\n        const card = tv.fieldLevels[field]?.length ?? 0;\n        switch (role) {\n            case 'category':  return isDiscreteLike(ft, st, card);\n            case 'measure':   return isQuantitativeField(ft, st);\n            case 'series':    return isDiscreteLike(ft, st, card);\n            case 'geo':       return isGeoCoordinateType(st) || ft === 'quantitative';\n            case 'facetCol':  case 'facetRow': return isDiscreteLike(ft, st, card);\n            case 'auxiliary':  return true;\n            default:          return true;\n        }\n    };\n\n    // --- Cost function for assigning field (from srcCh) to targetCh ---\n    const assignCost = (srcCh: string, field: string, targetCh: string): number => {\n        const targetRole = getChannelRole(targetType, targetCh);\n        if (!isFieldCompatibleWithRole(targetRole, field)) return Infinity;\n\n        // Same channel name → free\n        if (srcCh === targetCh) return 0;\n\n        // Same semantic role (e.g., color→group, both \"series\") → small cost\n        const srcRole = getChannelRole(sourceType, srcCh);\n        if (srcRole === targetRole) return 0.5;\n\n        // Different role but type-compatible → higher cost\n        return 1;\n    };\n\n    const COST_DROP = 1.5;  // slightly above move cost to prefer keeping fields\n\n    // --- Collect source entries (excluding pre-pinned facets) ---\n    const entries = Object.entries(encodings)\n        .filter(([ch, f]) => f && !FACET_CHANNELS.includes(ch) && !prePinnedFields.has(f));\n\n    // Available target channels (exclude pre-pinned ones)\n    const availableTargets = targetChannels.filter(ch => !(ch in prePinned));\n\n    // --- Solve minimum-cost assignment via branch-and-bound ---\n    // With typically ≤5 fields and ≤8 channels, this is instant.\n    let bestCost = Infinity;\n    let bestAssignment: Record<string, string> = {};\n\n    const usedTargets = new Set<string>();\n\n    function solve(\n        idx: number,\n        currentCost: number,\n        assignment: Record<string, string>,\n    ): void {\n        if (currentCost >= bestCost) return;  // prune\n\n        if (idx === entries.length) {\n            bestCost = currentCost;\n            bestAssignment = { ...assignment };\n            return;\n        }\n\n        const [srcCh, field] = entries[idx];\n\n        // Option A: assign to each available target channel\n        for (const tch of availableTargets) {\n            if (usedTargets.has(tch)) continue;\n            const cost = assignCost(srcCh, field, tch);\n            if (cost === Infinity) continue;\n\n            usedTargets.add(tch);\n            assignment[tch] = field;\n            solve(idx + 1, currentCost + cost, assignment);\n            delete assignment[tch];\n            usedTargets.delete(tch);\n        }\n\n        // Option B: drop the field\n        solve(idx + 1, currentCost + COST_DROP, assignment);\n    }\n\n    solve(0, 0, {});\n\n    // --- Merge pre-pinned facets + solver result ---\n    const result: Record<string, string> = { ...prePinned, ...bestAssignment };\n    const usedFields = new Set(Object.values(result));\n\n    // --- Fill remaining empty channels via recommendation ---\n    const emptyChannels = targetChannels.filter(ch => !(ch in result));\n    if (emptyChannels.length > 0) {\n        const rec = recommendFn(targetType, buildTableView(facetedData, semanticTypes));\n        for (const ch of emptyChannels) {\n            if (rec[ch] && !usedFields.has(rec[ch])) {\n                result[ch] = rec[ch];\n                usedFields.add(rec[ch]);\n            }\n        }\n    }\n\n    return result;\n}\n\n/**\n * Structural role-based adaptation: remap channels by semantic role when no\n * data is available.  Each field keeps its role (category, measure, series…)\n * and is placed into the target channel that has the same role.\n */\nfunction adaptViaRoles(\n    sourceType: string,\n    targetType: string,\n    targetChannels: string[],\n    encodings: Record<string, string>,\n): Record<string, string> {\n    const result: Record<string, string> = {};\n\n    // Collect filled encodings with their semantic roles\n    const filledEncodings: { channel: string; role: SemanticRole; field: string }[] = [];\n    for (const [ch, field] of Object.entries(encodings)) {\n        if (field) {\n            filledEncodings.push({ channel: ch, role: getChannelRole(sourceType, ch), field });\n        }\n    }\n\n    // Sort by priority: category > measure > series > …\n    filledEncodings.sort((a, b) => ROLE_PRIORITY[a.role] - ROLE_PRIORITY[b.role]);\n\n    const assigned = new Set<string>();\n\n    for (const { channel: srcCh, role: srcRole, field } of filledEncodings) {\n        let placed = false;\n\n        // (a) Direct match: same channel name with same role\n        if (targetChannels.includes(srcCh) && !assigned.has(srcCh)) {\n            if (getChannelRole(targetType, srcCh) === srcRole) {\n                result[srcCh] = field;\n                assigned.add(srcCh);\n                placed = true;\n            }\n        }\n\n        if (!placed) {\n            // (b) Role match: find empty target channel with same role\n            placed = tryAssign(srcRole, field, targetType, targetChannels, result, assigned, srcCh);\n        }\n\n        if (!placed) {\n            // (c) Fallback chain\n            const chain = FALLBACK_CHAIN[srcRole];\n            if (chain) {\n                for (const fallbackRole of chain) {\n                    placed = tryAssign(fallbackRole, field, targetType, targetChannels, result, assigned, srcCh);\n                    if (placed) break;\n                }\n            }\n        }\n        // (d) If not placed, encoding is dropped\n    }\n\n    return result;\n}\n\nfunction tryAssign(\n    role: SemanticRole,\n    field: string,\n    targetType: string,\n    targetChannels: string[],\n    result: Record<string, string>,\n    assigned: Set<string>,\n    preferredName?: string,\n): boolean {\n    const candidates = findChannelsByRole(targetType, targetChannels, role)\n        .filter(ch => !assigned.has(ch));\n    if (candidates.length === 0) return false;\n    const best = preferredName && candidates.includes(preferredName)\n        ? preferredName : candidates[0];\n    result[best] = field;\n    assigned.add(best);\n    return true;\n}\n\n// ============================================================================\n// 3. Internal Table View — field classification from data + semantic types\n// ============================================================================\n\nexport interface InternalTableView {\n    names: string[];\n    fieldType: Record<string, string>;\n    fieldSemanticType: Record<string, string>;\n    fieldLevels: Record<string, any[]>;\n    rows: any[];\n    /** Fields the user has already assigned — preferred during pick(). */\n    preferredFields?: Set<string>;\n}\n\n/**\n * Recommendation function signature — used to inject backend-specific\n * chart type handlers into adaptViaRecommendation.\n */\nexport type RecommendFn = (chartType: string, tv: InternalTableView) => Record<string, string>;\n\nexport function buildTableView(data: any[], semanticTypes: Record<string, string>): InternalTableView {\n    const names = data.length > 0 ? Object.keys(data[0]) : [];\n    const fieldType: Record<string, string> = {};\n    const fieldSemanticType: Record<string, string> = {};\n    const fieldLevels: Record<string, any[]> = {};\n\n    for (const name of names) {\n        const values = data.map(r => r[name]);\n        const semanticType = semanticTypes[name] || '';\n        fieldType[name] = (semanticType && getVisCategory(semanticType)) || inferVisCategory(values);\n        fieldSemanticType[name] = semanticType;\n        fieldLevels[name] = [...new Set(data.map(r => r[name]).filter(v => v != null))];\n    }\n\n    return { names, fieldType, fieldSemanticType, fieldLevels, rows: data };\n}\n\n// ============================================================================\n// 4. Preference-Based Assignment Solver\n// ============================================================================\n\n/** Preference tiers for a (channel, field) pair. */\nexport const Pref = { STRONG: 3, OK: 2, WEAK: 1, EXCLUDE: -Infinity } as const;\nexport type PrefScore = number;\n\n/**\n * A scoring function that returns a preference score for a field being\n * assigned to a particular channel.  Return Pref.EXCLUDE to forbid the\n * assignment.\n */\nexport type ChannelPrefFn = (\n    name: string, type: string, semanticType: string,\n    cardinality: number, hasLevels: boolean,\n) => PrefScore;\n\n/**\n * Solve the assignment problem: given N channels each with a preference\n * scoring function, and a set of candidate fields, find the assignment of\n * distinct fields to channels that maximises total score.\n *\n * Returns the best assignment as a Record<channel, fieldName>, or {} if\n * no valid (all-channels-filled) assignment exists.\n *\n * Complexity: O(C! · F^C) where C = number of channels, F = number of\n * fields.  Fine for C ≤ 5 and typical field counts.\n */\nexport function resolveAssignment(\n    tv: InternalTableView,\n    used: Set<string>,\n    channelPrefs: { channel: string; pref: ChannelPrefFn }[],\n): Record<string, string> {\n    // Build the score matrix: scores[channelIdx][fieldIdx]\n    const candidates: string[] = tv.names.filter(n => !used.has(n) && (!isLikelyIdentifierOrRank(n) || tv.preferredFields?.has(n)));\n    const C = channelPrefs.length;\n    const F = candidates.length;\n    if (F < C) return {};\n\n    // Pre-compute all scores\n    const scores: number[][] = [];\n    for (let ci = 0; ci < C; ci++) {\n        scores[ci] = [];\n        for (let fi = 0; fi < F; fi++) {\n            const name = candidates[fi];\n            const type = tv.fieldType[name] ?? 'nominal';\n            const st = tv.fieldSemanticType[name] ?? '';\n            const card = tv.fieldLevels[name]?.length ?? 0;\n            scores[ci][fi] = channelPrefs[ci].pref(name, type, st, card, card > 0);\n        }\n    }\n\n    // Brute-force search over all C-permutations of F fields\n    let bestScore = -Infinity;\n    let bestAssign: number[] | undefined;\n\n    const perm = new Array<number>(C);\n    const usedF = new Uint8Array(F);\n\n    function search(depth: number, totalScore: number) {\n        if (depth === C) {\n            if (totalScore > bestScore) {\n                bestScore = totalScore;\n                bestAssign = [...perm];\n            }\n            return;\n        }\n        for (let fi = 0; fi < F; fi++) {\n            if (usedF[fi]) continue;\n            const s = scores[depth][fi];\n            if (s === -Infinity) continue;            // excluded\n            if (totalScore + s <= bestScore - (C - depth - 1) * Pref.STRONG) continue; // prune\n            perm[depth] = fi;\n            usedF[fi] = 1;\n            search(depth + 1, totalScore + s);\n            usedF[fi] = 0;\n        }\n    }\n\n    search(0, 0);\n\n    if (!bestAssign) return {};\n\n    const result: Record<string, string> = {};\n    for (let ci = 0; ci < C; ci++) {\n        const fieldName = candidates[bestAssign[ci]];\n        result[channelPrefs[ci].channel] = fieldName;\n        used.add(fieldName);\n    }\n    return result;\n}\n\n// ============================================================================\n// 5. Field Classification Utilities (renumbered)\n// ============================================================================\n\nfunction isTemporalField(type: string, semanticType: string): boolean {\n    return type === 'temporal' || isTimeSeriesType(semanticType);\n}\n\nfunction isQuantitativeField(type: string, semanticType: string): boolean {\n    if (isTemporalField(type, semanticType)) return false;\n    if (type !== 'quantitative') return false;\n    if (isNonMeasureNumeric(semanticType)) return false;\n    return isMeasureType(semanticType) || semanticType === '';\n}\n\nfunction isOrdinalField(type: string, semanticType: string, hasLevels: boolean): boolean {\n    if (hasLevels) return true;\n    return isOrdinalType(semanticType);\n}\n\nfunction isCategoricalFieldCheck(type: string, semanticType: string): boolean {\n    if (isTemporalField(type, semanticType)) return false;\n    if (isQuantitativeField(type, semanticType)) return false;\n    return type === 'nominal' || isCategoricalType(semanticType);\n}\n\nfunction isDiscreteLike(type: string, semanticType: string, cardinality: number, maxCard = 50): boolean {\n    if (isCategoricalFieldCheck(type, semanticType)) return true;\n    if (isTemporalField(type, semanticType)) return true;\n    if (isOrdinalType(semanticType)) return true;\n    if (type === 'quantitative' && cardinality > 0 && cardinality <= maxCard) return true;\n    return false;\n}\n\nexport function nameMatches(name: string, patterns: string[]): boolean {\n    const lower = name.toLowerCase();\n    return patterns.some(p => lower === p) || patterns.some(p => lower.includes(p));\n}\n\nfunction isLikelyIdentifierOrRank(name: string): boolean {\n    const lower = name.toLowerCase();\n    const idPatterns = ['rank', 'id', 'index', 'idx', 'row', 'order', 'position', 'pos'];\n    return idPatterns.some(p => lower === p || lower.endsWith('_' + p) || lower.endsWith(p));\n}\n\n// ============================================================================\n// 6. Field Picker Utilities\n// ============================================================================\n\nexport function pick(\n    tv: InternalTableView,\n    used: Set<string>,\n    predicate: (name: string, type: string, semanticType: string, cardinality: number, hasLevels: boolean) => boolean,\n): string | undefined {\n    const candidates: string[] = [];\n    for (const name of tv.names) {\n        if (used.has(name)) continue;\n        const type = tv.fieldType[name] ?? 'nominal';\n        const semanticType = tv.fieldSemanticType[name] ?? '';\n        const cardinality = tv.fieldLevels[name]?.length ?? 0;\n        const hasLevels = cardinality > 0;\n        if (predicate(name, type, semanticType, cardinality, hasLevels)) {\n            candidates.push(name);\n        }\n    }\n    if (candidates.length === 0) return undefined;\n    // Prefer fields from the user's existing encodings when available\n    if (tv.preferredFields) {\n        const preferred = candidates.filter(n => tv.preferredFields!.has(n));\n        if (preferred.length > 0) {\n            const chosen = preferred[Math.floor(Math.random() * preferred.length)];\n            used.add(chosen);\n            return chosen;\n        }\n    }\n    const chosen = candidates[Math.floor(Math.random() * candidates.length)];\n    used.add(chosen);\n    return chosen;\n}\n\nexport const pickQuantitative = (tv: InternalTableView, u: Set<string>) =>\n    pick(tv, u, (name, ty, st) => isQuantitativeField(ty, st) && (!isLikelyIdentifierOrRank(name) || !!tv.preferredFields?.has(name)));\n\nexport const pickTemporal = (tv: InternalTableView, u: Set<string>) =>\n    pick(tv, u, (_n, ty, st) => isTemporalField(ty, st));\n\nexport const pickNominal = (tv: InternalTableView, u: Set<string>) =>\n    pick(tv, u, (_n, ty, st) => isCategoricalFieldCheck(ty, st));\n\nexport const pickLowCardNominal = (tv: InternalTableView, u: Set<string>, maxCard = 30) =>\n    pick(tv, u, (_n, ty, st, card) => isCategoricalFieldCheck(ty, st) && card > 0 && card <= maxCard);\n\nexport const pickOrdinal = (tv: InternalTableView, u: Set<string>) =>\n    pick(tv, u, (_n, ty, st, _card, hasLevels) => isOrdinalField(ty, st, hasLevels));\n\nexport const pickGeo = (tv: InternalTableView, u: Set<string>) =>\n    pick(tv, u, (_n, _ty, st) => isGeoType(st));\n\nexport const pickDiscrete = (tv: InternalTableView, u: Set<string>) =>\n    pick(tv, u, (name, ty, st, card) => isDiscreteLike(ty, st, card) && (!isLikelyIdentifierOrRank(name) || !!tv.preferredFields?.has(name)));\n\nexport const pickLowCardDiscrete = (tv: InternalTableView, u: Set<string>, maxCard = 30) =>\n    pick(tv, u, (name, ty, st, card) =>\n        isDiscreteLike(ty, st, card, maxCard) && card > 0 && card <= maxCard\n        && (!isLikelyIdentifierOrRank(name) || !!tv.preferredFields?.has(name))\n    );\n\nexport const pickSeriesAxis = (tv: InternalTableView, u: Set<string>) =>\n    pickTemporal(tv, u) ?? pickOrdinal(tv, u) ?? pickNominal(tv, u);\n\nexport const pickQuantitativeByName = (tv: InternalTableView, u: Set<string>, patterns: string[]) =>\n    pick(tv, u, (name, ty, st) => isQuantitativeField(ty, st) && nameMatches(name, patterns));\n\nexport function pickAllQuantitative(tv: InternalTableView, used: Set<string>): string[] {\n    const result: string[] = [];\n    for (const name of tv.names) {\n        if (used.has(name)) continue;\n        const type = tv.fieldType[name] ?? 'nominal';\n        const semanticType = tv.fieldSemanticType[name] ?? '';\n        if (isQuantitativeField(type, semanticType) && (!isLikelyIdentifierOrRank(name) || tv.preferredFields?.has(name))) {\n            result.push(name);\n        }\n    }\n    for (const name of result) used.add(name);\n    return result;\n}\n\n// ============================================================================\n// 7. Data Fitness Tests\n// ============================================================================\n\nexport function hasMultipleValuesPerField(tv: InternalTableView, fieldName: string): boolean {\n    if (!fieldName || !tv.rows || tv.rows.length === 0) return false;\n    const seen = new Set<any>();\n    for (const row of tv.rows) {\n        const val = row[fieldName];\n        if (seen.has(val)) return true;\n        seen.add(val);\n    }\n    return false;\n}\n\nfunction isValidGroupingField(tv: InternalTableView, xField: string, colorField: string): boolean {\n    if (!xField || !colorField || !tv.rows || tv.rows.length === 0) return false;\n    const seen = new Set<string>();\n    for (const row of tv.rows) {\n        const key = `${row[xField]}|||${row[colorField]}`;\n        if (seen.has(key)) return false;\n        seen.add(key);\n    }\n    return true;\n}\n\nexport function pickValidGroupingField(\n    tv: InternalTableView, used: Set<string>, xField: string, maxCard = 20,\n): string | undefined {\n    const candidates: string[] = [];\n    for (const name of tv.names) {\n        if (used.has(name)) continue;\n        const type = tv.fieldType[name] ?? 'nominal';\n        const semanticType = tv.fieldSemanticType[name] ?? '';\n        const cardinality = tv.fieldLevels[name]?.length ?? 0;\n        if (!isDiscreteLike(type, semanticType, cardinality, maxCard)) continue;\n        if (cardinality <= 0 || cardinality > maxCard) continue;\n        if (isLikelyIdentifierOrRank(name) && !tv.preferredFields?.has(name)) continue;\n        if (isValidGroupingField(tv, xField, name)) candidates.push(name);\n    }\n    if (candidates.length === 0) return undefined;\n    // Prefer fields from existing encodings\n    if (tv.preferredFields) {\n        const preferred = candidates.filter(n => tv.preferredFields!.has(n));\n        if (preferred.length > 0) {\n            const chosen = preferred[Math.floor(Math.random() * preferred.length)];\n            used.add(chosen);\n            return chosen;\n        }\n    }\n    const chosen = candidates[Math.floor(Math.random() * candidates.length)];\n    used.add(chosen);\n    return chosen;\n}\n\nexport function isValidLineSeriesData(tv: InternalTableView, xField: string, colorField?: string): boolean {\n    if (!tv.rows || tv.rows.length === 0) return false;\n    const xColorCombinations = new Set<string>();\n    const colorGroupCounts = new Map<string, number>();\n\n    for (const row of tv.rows) {\n        const xVal = row[xField];\n        const colorVal = colorField ? row[colorField] : '__single__';\n        const xColorKey = `${xVal}|||${colorVal}`;\n        if (xColorCombinations.has(xColorKey)) return false;\n        xColorCombinations.add(xColorKey);\n        colorGroupCounts.set(colorVal, (colorGroupCounts.get(colorVal) ?? 0) + 1);\n    }\n\n    let validGroups = 0;\n    let totalGroups = 0;\n    for (const count of colorGroupCounts.values()) {\n        totalGroups++;\n        if (count >= 2) validGroups++;\n    }\n    return totalGroups > 0 && (validGroups / totalGroups) > 0.5;\n}\n\nexport function pickLineChartColorField(\n    tv: InternalTableView, used: Set<string>, xField: string, maxCard = 20,\n): string | undefined {\n    const candidates: string[] = [];\n    for (const name of tv.names) {\n        if (used.has(name)) continue;\n        const type = tv.fieldType[name] ?? 'nominal';\n        const semanticType = tv.fieldSemanticType[name] ?? '';\n        const cardinality = tv.fieldLevels[name]?.length ?? 0;\n        if (!isDiscreteLike(type, semanticType, cardinality, maxCard)) continue;\n        if (cardinality <= 0 || cardinality > maxCard) continue;\n        if (isLikelyIdentifierOrRank(name) && !tv.preferredFields?.has(name)) continue;\n        if (isValidLineSeriesData(tv, xField, name)) candidates.push(name);\n    }\n    if (candidates.length === 0) return undefined;\n    // Prefer fields from existing encodings\n    if (tv.preferredFields) {\n        const preferred = candidates.filter(n => tv.preferredFields!.has(n));\n        if (preferred.length > 0) {\n            const chosen = preferred[Math.floor(Math.random() * preferred.length)];\n            used.add(chosen);\n            return chosen;\n        }\n    }\n    const chosen = candidates[Math.floor(Math.random() * candidates.length)];\n    used.add(chosen);\n    return chosen;\n}\n\nfunction calculateMultiplicity(tv: InternalTableView, xField: string, colorField?: string): number {\n    if (!tv.rows || tv.rows.length === 0) return 1;\n    const groups = new Set<string>();\n    for (const row of tv.rows) {\n        const key = colorField ? `${row[xField]}|||${row[colorField]}` : `${row[xField]}`;\n        groups.add(key);\n    }\n    return tv.rows.length / groups.size;\n}\n\nexport function pickBestGroupingField(\n    tv: InternalTableView, used: Set<string>, xField: string, maxMultiplicity = 5,\n): string | undefined {\n    const baseMultiplicity = calculateMultiplicity(tv, xField);\n    if (baseMultiplicity <= 1.0) return undefined;\n\n    let bestField: string | undefined;\n    let bestMultiplicity = baseMultiplicity;\n\n    for (const name of tv.names) {\n        if (used.has(name)) continue;\n        const type = tv.fieldType[name] ?? 'nominal';\n        const semanticType = tv.fieldSemanticType[name] ?? '';\n        const cardinality = tv.fieldLevels[name]?.length ?? 0;\n        if (!isDiscreteLike(type, semanticType, cardinality)) continue;\n        if (isLikelyIdentifierOrRank(name) && !tv.preferredFields?.has(name)) continue;\n\n        const multiplicity = calculateMultiplicity(tv, xField, name);\n        if (multiplicity < bestMultiplicity) {\n            bestMultiplicity = multiplicity;\n            bestField = name;\n            if (multiplicity <= 1.0) break;\n        }\n    }\n\n    if (bestField && bestMultiplicity < baseMultiplicity && bestMultiplicity <= maxMultiplicity) {\n        used.add(bestField);\n        return bestField;\n    }\n    return undefined;\n}\n\n// ============================================================================\n// 8. Per-Chart-Type Recommendation Heuristics\n// ============================================================================\n\n/**\n * Recommend channel→fieldName assignments for a given chart type.\n *\n * Pure logic: takes raw data rows + semantic type annotations, returns\n * a channel→fieldName map.  Backend wrappers filter to valid channels.\n *\n * @param chartType      Chart template name (e.g. \"Bar Chart\")\n * @param data           Array of row objects\n * @param semanticTypes  Field→semantic-type map (e.g. { weight: \"Quantity\" })\n * @returns              channel→fieldName map\n */\nexport function recommendChannels(\n    chartType: string,\n    data: any[],\n    semanticTypes: Record<string, string>,\n    recommendFn?: RecommendFn,\n): Record<string, string> {\n    const fn = recommendFn ?? getRecommendation;\n    return fn(chartType, buildTableView(data, semanticTypes));\n}\n\n/**\n * Core recommendation engine — handles chart types shared across 2+ backends.\n * Backend-specific chart types should be handled in their own recommendation files\n * by extending this function.\n *\n * Exported so that backend wrappers can call it as a fallback in their own\n * extended `getRecommendation` implementations.\n */\nexport function getRecommendation(chartType: string, tv: InternalTableView): Record<string, string> {\n    const used = new Set<string>();\n    const rec: Record<string, string> = {};\n\n    const assign = (channel: string, fieldName: string | undefined) => {\n        if (fieldName) rec[channel] = fieldName;\n    };\n\n    switch (chartType) {\n        case 'Scatter Plot': {\n            const yField = pickQuantitative(tv, used) ?? pickTemporal(tv, used) ?? pickNominal(tv, used);\n            const xField = pickQuantitative(tv, used) ?? pickTemporal(tv, used) ?? pickNominal(tv, used);\n            if (!xField || !yField) return {};\n            assign('x', xField);\n            assign('y', yField);\n            assign('color', pickLowCardNominal(tv, used));\n            break;\n        }\n\n        case 'Bar Chart':\n        case 'Stacked Bar Chart': {\n            const xField = pickDiscrete(tv, used);\n            const yField = pickQuantitative(tv, used);\n            if (!xField || !yField) return {};\n            assign('x', xField);\n            assign('y', yField);\n            if (hasMultipleValuesPerField(tv, xField)) {\n                assign('color', pickBestGroupingField(tv, used, xField));\n            }\n            break;\n        }\n\n        case 'Grouped Bar Chart': {\n            const xField = pickDiscrete(tv, used);\n            const yField = pickQuantitative(tv, used);\n            if (!xField || !yField) return {};\n            const colorField = pickValidGroupingField(tv, used, xField, 20);\n            if (!colorField) return {};\n            assign('x', xField);\n            assign('y', yField);\n            assign('color', colorField);\n            break;\n        }\n\n        case 'Histogram': {\n            const xField = pickQuantitative(tv, used);\n            if (!xField) return {};\n            assign('x', xField);\n            break;\n        }\n\n        case 'Heatmap': {\n            // Semantic-first preference scoring.\n            // 1. Semantic type determines preference (temporal, categorical, measure)\n            // 2. Data type (ty) is a safeguard for compatibility\n            const heatmapResult = resolveAssignment(tv, used, [\n                {\n                    channel: 'x',\n                    pref: (_n, ty, st, card) => {\n                        // Semantic preference\n                        if (isTimeSeriesType(st))                         return Pref.STRONG;\n                        if (isCategoricalType(st))                        return Pref.OK;\n                        if (isOrdinalType(st))                            return Pref.OK;\n                        if (isNonMeasureNumeric(st))                      return Pref.OK;\n                        // Data type safeguard: allow nominal or low-card continuous\n                        if (ty === 'nominal')                             return Pref.OK;\n                        if (ty === 'temporal')                            return Pref.STRONG;\n                        if (ty === 'quantitative' && card > 0 && card <= 50) return Pref.WEAK;\n                        return Pref.EXCLUDE;\n                    },\n                },\n                {\n                    channel: 'y',\n                    pref: (_n, ty, st, card) => {\n                        // Semantic preference\n                        if (isCategoricalType(st))                        return Pref.STRONG;\n                        if (isTimeSeriesType(st))                         return Pref.OK;\n                        if (isOrdinalType(st))                            return Pref.OK;\n                        if (isNonMeasureNumeric(st))                      return Pref.OK;\n                        // Data type safeguard\n                        if (ty === 'nominal')                             return Pref.STRONG;\n                        if (ty === 'temporal')                            return Pref.OK;\n                        if (ty === 'quantitative' && card > 0 && card <= 50) return Pref.WEAK;\n                        return Pref.EXCLUDE;\n                    },\n                },\n                {\n                    channel: 'color',\n                    pref: (_n, ty, st) => {\n                        // Semantic preference: measures are ideal for heatmap color\n                        if (isMeasureType(st))                            return Pref.STRONG;\n                        if (isOrdinalType(st))                            return Pref.OK;\n                        // Data type safeguard: quantitative with no semantic type\n                        if (ty === 'quantitative' && !st)                 return Pref.STRONG;\n                        if (ty === 'temporal')                            return Pref.WEAK;\n                        if (ty === 'nominal')                             return Pref.WEAK;\n                        return Pref.EXCLUDE;\n                    },\n                },\n            ]);\n            if (!heatmapResult['x'] || !heatmapResult['y'] || !heatmapResult['color']) return {};\n            assign('x', heatmapResult['x']);\n            assign('y', heatmapResult['y']);\n            assign('color', heatmapResult['color']);\n            break;\n        }\n\n        case 'Line Chart': {\n            const xField = pickSeriesAxis(tv, used);\n            const yField = pickQuantitative(tv, used);\n            if (!xField || !yField) return {};\n            assign('x', xField);\n            assign('y', yField);\n            if (!isValidLineSeriesData(tv, xField, undefined)) {\n                const colorField = pickLineChartColorField(tv, used, xField, 20)\n                    ?? pickLineChartColorField(tv, used, xField, 200);\n                if (!colorField) return {};\n                assign('color', colorField);\n            }\n            break;\n        }\n\n        case 'Boxplot': {\n            const xField = pickDiscrete(tv, used);\n            const yField = pickQuantitative(tv, used);\n            if (!xField || !yField) return {};\n            assign('x', xField);\n            assign('y', yField);\n            break;\n        }\n\n        case 'Pie Chart': {\n            const sizeField = pickQuantitative(tv, used);\n            const colorField = pickLowCardDiscrete(tv, used, 12);\n            if (!sizeField || !colorField) return {};\n            assign('size', sizeField);\n            assign('color', colorField);\n            break;\n        }\n\n        case 'Area Chart': {\n            const xField = pickSeriesAxis(tv, used);\n            const yField = pickQuantitative(tv, used);\n            if (!xField || !yField) return {};\n            assign('x', xField);\n            assign('y', yField);\n            assign('color', pickLineChartColorField(tv, used, xField, 20));\n            break;\n        }\n\n        case 'Streamgraph': {\n            // Semantic-first preference scoring.\n            // 1. Semantic type determines preference (temporal→x, measure→y, categorical→color)\n            // 2. Data type (ty) is a safeguard for compatibility\n            const streamResult = resolveAssignment(tv, used, [\n                {\n                    channel: 'x',\n                    pref: (_n, ty, st, card) => {\n                        // Semantic preference: temporal types are ideal series axes\n                        if (isTimeSeriesType(st))                            return Pref.STRONG;\n                        if (isOrdinalType(st))                               return Pref.OK;\n                        if (isCategoricalType(st))                           return Pref.OK;\n                        if (isNonMeasureNumeric(st))                         return Pref.OK;\n                        // Data type safeguard\n                        if (ty === 'temporal')                               return Pref.STRONG;\n                        if (ty === 'nominal')                                return Pref.OK;\n                        if (ty === 'quantitative' && card > 0 && card <= 50) return Pref.OK;\n                        return Pref.EXCLUDE;\n                    },\n                },\n                {\n                    channel: 'y',\n                    pref: (_n, ty, st, card) => {\n                        // Semantic preference: true measures are ideal\n                        if (isMeasureType(st))                               return Pref.STRONG;\n                        // Semantic exclusion: temporal / categorical / non-measure\n                        // numeric types should not be used as y-axis measures\n                        if (isTimeSeriesType(st))                            return Pref.EXCLUDE;\n                        if (isCategoricalType(st))                           return Pref.EXCLUDE;\n                        if (isNonMeasureNumeric(st))                         return Pref.EXCLUDE;\n                        // Data type safeguard: quantitative with no semantic type\n                        if (ty === 'quantitative' && !st)\n                            return card > 20 ? Pref.STRONG : Pref.OK;\n                        return Pref.EXCLUDE;\n                    },\n                },\n                {\n                    channel: 'color',\n                    pref: (_n, ty, st, card) => {\n                        // Semantic preference\n                        if (isCategoricalType(st))                           return Pref.STRONG;\n                        if (isOrdinalType(st))                               return Pref.OK;\n                        if (isTimeSeriesType(st))                            return Pref.OK;\n                        // Data type safeguard\n                        if (ty === 'nominal')                                return Pref.STRONG;\n                        if (ty === 'temporal' || ty === 'ordinal')           return Pref.OK;\n                        if (isDiscreteLike(ty, st, card, 20))                return Pref.WEAK;\n                        return Pref.EXCLUDE;\n                    },\n                },\n            ]);\n            if (!streamResult['x'] || !streamResult['y'] || !streamResult['color']) return {};\n            assign('x', streamResult['x']);\n            assign('y', streamResult['y']);\n            assign('color', streamResult['color']);\n            break;\n        }\n\n        case 'Radar Chart': {\n            const xField = pickDiscrete(tv, used) ?? pickLowCardDiscrete(tv, used, 20);\n            const yField = pickQuantitative(tv, used);\n            if (!xField || !yField) return {};\n            assign('x', xField);\n            assign('y', yField);\n            assign('color', pickLowCardDiscrete(tv, used, 20));\n            break;\n        }\n\n        case 'Candlestick Chart': {\n            const xField = pickTemporal(tv, used)\n                ?? pick(tv, used, (name) => nameMatches(name, ['date', 'time', 'day', 'datetime', 'timestamp', 'period']))\n                ?? pickQuantitativeByName(tv, used, ['date', 'time', 'day'])\n                ?? pickDiscrete(tv, used);\n            if (!xField) return {};\n            assign('x', xField);\n            const openField = pickQuantitativeByName(tv, used, ['open']);\n            const highField = pickQuantitativeByName(tv, used, ['high']);\n            const lowField = pickQuantitativeByName(tv, used, ['low']);\n            const closeField = pickQuantitativeByName(tv, used, ['close']);\n            if (openField && highField && lowField && closeField) {\n                assign('open', openField);\n                assign('high', highField);\n                assign('low', lowField);\n                assign('close', closeField);\n            } else {\n                const quants = pickAllQuantitative(tv, used);\n                if (quants.length >= 4) {\n                    assign('open', quants[0]);\n                    assign('high', quants[1]);\n                    assign('low', quants[2]);\n                    assign('close', quants[3]);\n                }\n            }\n            break;\n        }\n\n        default:\n            break;\n    }\n\n    return rec;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/core/resolve-semantics.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * =============================================================================\n * CHANNEL SEMANTICS RESOLVER\n * =============================================================================\n *\n * Stage 2 of the semantic pipeline:\n *   SemanticAnnotation + data → FieldSemantics → **ChannelSemantics**\n *\n * Takes each channel’s field, builds FieldSemantics (stage 1), then adds\n * channel-specific visualization decisions: encoding type, color scheme,\n * temporal format, ordinal sort, tick constraints, axis reversal, nice\n * rounding, interpolation, and stacking.\n *\n * Zero-baseline is NOT resolved here — it requires template mark knowledge\n * and is finalized by the assembler after this function returns.\n *\n * VL dependency: **None**\n * =============================================================================\n */\n\nimport type {\n    ChartEncoding,\n    ChannelSemantics,\n    SemanticResult,\n} from './types';\nimport {\n    getVisCategory,\n    inferVisCategory,\n    getRecommendedColorScheme,\n    inferOrdinalSortOrder,\n} from './semantic-types';\nimport {\n    resolveEncodingType as resolveEncodingTypeDecision,\n    type EncodingTypeDecision,\n} from './decisions';\nimport {\n    resolveFieldSemantics,\n    normalizeAnnotation,\n    toTypeString,\n    resolveNice,\n    resolveTickConstraint,\n    resolveReversed,\n    resolveStackable,\n    resolveColorSchemeHint,\n    resolveDivergingInfo,\n    type SemanticAnnotation,\n} from './field-semantics';\n\n// ---------------------------------------------------------------------------\n// Internal helpers (moved from assemble.ts)\n// ---------------------------------------------------------------------------\n\n/** Upper bounds for plausible timestamps (~2099-12-31). */\nconst MAX_TIMESTAMP_SEC = 4102444800;\nconst MAX_TIMESTAMP_MS = 4102444800000;\n\nfunction isLikelyTimestamp(val: number): boolean {\n    if (val >= 1e9 && val <= MAX_TIMESTAMP_SEC) return true;\n    if (val > MAX_TIMESTAMP_SEC && val <= MAX_TIMESTAMP_MS) return true;\n    return false;\n}\n\nfunction timestampToMs(val: number): number {\n    return val <= MAX_TIMESTAMP_SEC ? val * 1000 : val;\n}\n\nfunction looksLikeDateString(s: string): boolean {\n    const t = s.trim();\n    return /^\\d|^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i.test(t);\n}\n\n// ---------------------------------------------------------------------------\n// Temporal field analysis\n// ---------------------------------------------------------------------------\n\ninterface TemporalAnalysis {\n    dates: Date[];\n    same: {\n        month: boolean;\n        day: boolean;\n        hour: boolean;\n        minute: boolean;\n        second: boolean;\n    };\n    sameYear: boolean;\n    sameMonth: boolean;\n    sameDay: boolean;\n}\n\nfunction analyzeTemporalField(fieldValues: any[]): TemporalAnalysis | null {\n    const dates: Date[] = [];\n    let nonNull = 0;\n    for (const v of fieldValues.slice(0, 100)) {\n        if (v == null) continue;\n        nonNull++;\n        const d = v instanceof Date ? v : new Date(v);\n        if (!isNaN(d.getTime())) dates.push(d);\n    }\n    if (dates.length < 2 || dates.length < nonNull * 0.5) return null;\n\n    const monthSet  = new Set(dates.map(d => d.getUTCMonth()));\n    const daySet    = new Set(dates.map(d => d.getUTCDate()));\n    const hourSet   = new Set(dates.map(d => d.getUTCHours()));\n    const minuteSet = new Set(dates.map(d => d.getUTCMinutes()));\n    const secondSet = new Set(dates.map(d => d.getUTCSeconds()));\n    const yearSet   = new Set(dates.map(d => d.getUTCFullYear()));\n\n    const isSmallSpread = (s: Set<number>, maxSpread: number = 1) => {\n        if (s.size <= 1) return true;\n        const arr = [...s];\n        return Math.max(...arr) - Math.min(...arr) <= maxSpread;\n    };\n\n    const same = {\n        month:  monthSet.size  === 1,\n        day:    daySet.size    === 1,\n        hour:   isSmallSpread(hourSet, 1),\n        minute: minuteSet.size === 1,\n        second: secondSet.size === 1,\n    };\n\n    const sameYear  = yearSet.size === 1;\n    const sameMonth = sameYear && same.month;\n    const sameDay   = sameMonth && same.day;\n\n    return { dates, same, sameYear, sameMonth, sameDay };\n}\n\nfunction computeDataVotes(same: TemporalAnalysis['same']): number[] {\n    const votes = [0, 0, 0, 0, 0, 0];\n\n    if (same.second)                                                           votes[5] += 1;\n    if (same.minute && same.second)                                            votes[5] += 1;\n    if (same.hour   && same.minute && same.second)                             votes[5] += 1;\n    if (same.day    && same.hour   && same.minute && same.second)              votes[5] += 2;\n    if (same.month  && same.day    && same.hour   && same.minute && same.second) votes[5] += 3;\n\n    if (same.second)                                                           votes[4] += 1;\n    if (same.minute && same.second)                                            votes[4] += 1;\n    if (same.hour   && same.minute && same.second)                             votes[4] += 1;\n    if (same.day    && same.hour   && same.minute && same.second)              votes[4] += 2;\n    if (!same.month && same.day && same.hour && same.minute && same.second)    votes[4] += 3;\n\n    if (same.second)                                                           votes[3] += 1;\n    if (same.minute && same.second)                                            votes[3] += 1;\n    if (same.hour   && same.minute && same.second)                             votes[3] += 1;\n    if (!same.day && same.hour && same.minute && same.second)                  votes[3] += 3;\n\n    if (same.second)                               votes[2] += 1;\n    if (same.minute && same.second)                votes[2] += 1;\n    if (!same.hour && same.minute && same.second)  votes[2] += 3;\n\n    if (same.second)                    votes[1] += 1;\n    if (!same.minute && same.second)    votes[1] += 3;\n\n    if (!same.second) votes[0] += 4;\n\n    return votes;\n}\n\nconst SEMANTIC_LEVEL: Record<string, number> = {\n    Year:        5, Decade:      5,\n    YearMonth:   4, Month:       4, YearQuarter: 4, Quarter: 4,\n    Date:        3, Day:         3,\n    Hour:        2,\n    DateTime:    1,\n    Timestamp:   0,\n};\n\nfunction pickBestLevel(votes: number[]): { level: number; score: number } {\n    let bestLevel = 0;\n    let bestScore = votes[0];\n    for (let i = 1; i <= 5; i++) {\n        if (votes[i] >= bestScore) {\n            bestScore = votes[i];\n            bestLevel = i;\n        }\n    }\n    return { level: bestLevel, score: bestScore };\n}\n\nfunction levelToFormat(level: number, analysis: TemporalAnalysis): string | null {\n    switch (level) {\n        case 5: return '%Y';\n        case 4: return analysis.sameYear ? '%b' : '%b %Y';\n        case 3: return analysis.sameYear ? '%b %d' : '%b %d, %Y';\n        case 2: return analysis.sameDay  ? '%H:00' : '%b %d %H:00';\n        case 1: return analysis.sameDay  ? '%H:%M' : '%b %d %H:%M';\n        case 0: return analysis.sameDay  ? '%H:%M:%S' : '%b %d %H:%M:%S';\n        default: return null;\n    }\n}\n\n/**\n * Resolve temporal format for a field.\n * Used for both temporal and ordinal-temporal fields.\n */\nfunction resolveTemporalFormat(\n    fieldValues: any[],\n    semanticType: string,\n): string | null {\n    const analysis = analyzeTemporalField(fieldValues);\n    if (!analysis) return null;\n\n    const votes = computeDataVotes(analysis.same);\n    const semLevel = SEMANTIC_LEVEL[semanticType];\n    if (semLevel !== undefined) votes[semLevel] += 3;\n    const { level } = pickBestLevel(votes);\n    return levelToFormat(level, analysis);\n}\n\n// ---------------------------------------------------------------------------\n// Temporal data conversion\n// ---------------------------------------------------------------------------\n\n/**\n * Expand a year string to an unambiguous 4-digit representation.\n *\n * - \"98\" → \"1998\",  \"07\" → \"2007\",  \"00\" → \"2000\"\n * - \"1998\" → \"1998\" (already 4+ digits, pass through)\n * - \"FY 2018\" → \"FY 2018\" (non-numeric, pass through)\n *\n * Two-digit cutoff: 0–49 → 2000s, 50–99 → 1900s (same heuristic JS Date uses).\n */\nfunction expandToFullYear(val: string): string {\n    const trimmed = val.trim();\n    if (/^\\d{2}$/.test(trimmed)) {\n        const n = parseInt(trimmed, 10);\n        return String(n <= 49 ? 2000 + n : 1900 + n);\n    }\n    return val;\n}\n\n/**\n * Convert temporal field values in the data table to canonical string\n * representations for Vega-Lite consumption.\n *\n * This is a data-level concern (not VL-specific) — it ensures consistent\n * date parsing across backends.\n */\nexport function convertTemporalData(\n    data: any[],\n    semanticTypes: Record<string, string | SemanticAnnotation>,\n): any[] {\n    if (data.length === 0) return data;\n\n    const keys = Object.keys(data[0]);\n    const temporalKeys = keys.filter((k: string) => {\n        const st = toTypeString(semanticTypes[k]);\n        const vc = inferVisCategory(data.map(r => r[k]));\n        const stCategory = st ? getVisCategory(st) : null;\n        return vc === 'temporal' || stCategory === 'temporal' || st === 'Decade';\n    });\n\n    if (temporalKeys.length === 0) return data;\n\n    const values = structuredClone(data);\n    return values.map((r: any) => {\n        for (const temporalKey of temporalKeys) {\n            const val = r[temporalKey];\n            const st = toTypeString(semanticTypes[temporalKey]);\n\n            if (typeof val === 'number') {\n                if (st === 'Year' || st === 'Decade') {\n                    r[temporalKey] = `${Math.floor(val)}`;\n                } else if (isLikelyTimestamp(val)) {\n                    r[temporalKey] = new Date(timestampToMs(val)).toISOString();\n                } else {\n                    r[temporalKey] = String(val);\n                }\n            } else if (val instanceof Date) {\n                r[temporalKey] = val.toISOString();\n            } else {\n                // For Year/Decade strings, normalise to 4-digit years so\n                // Vega-Lite parses them unambiguously and doesn't auto-tick\n                // at sub-year intervals (e.g. \"98\" → \"1998\").\n                if ((st === 'Year' || st === 'Decade') && typeof val === 'string') {\n                    r[temporalKey] = expandToFullYear(val);\n                } else {\n                    r[temporalKey] = String(val);\n                }\n            }\n        }\n        return r;\n    });\n}\n\n// ---------------------------------------------------------------------------\n// Public API: resolveChannelSemantics\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve all channel-level semantic decisions.\n *\n * For each channel, builds FieldSemantics (data identity) then layers on\n * channel-specific visualization decisions (color scheme, temporal format,\n * tick constraints, axis reversal, interpolation, etc.).\n *\n * Zero-baseline (cs.zero) is NOT resolved here -- it requires template\n * mark knowledge (bar vs point) that belongs to the assembler.\n * The assembler finalizes zero after calling this function.\n *\n * @param encodings       Channel -> ChartEncoding from user / AI agent\n * @param data            Array of data rows (original, unconverted)\n * @param semanticTypes   Field name -> semantic type string\n * @param convertedData   Pre-converted temporal data (from convertTemporalData).\n *                        If omitted, falls back to data for temporal format detection.\n */\nexport function resolveChannelSemantics(\n    encodings: Record<string, ChartEncoding>,\n    data: any[],\n    semanticTypes: Record<string, string | SemanticAnnotation>,\n    convertedData?: any[],\n): SemanticResult {\n    const result: SemanticResult = {};\n\n    // Use pre-converted temporal data for format detection, or fall back to raw data\n    const temporalData = convertedData ?? data;\n\n    for (const [channel, encoding] of Object.entries(encodings)) {\n        const fieldName = encoding.field;\n        if (!fieldName && encoding.aggregate !== 'count') continue;\n\n        // Handle count aggregate without a field\n        if (!fieldName && encoding.aggregate === 'count') {\n            result[channel] = {\n                field: '_count',\n                semanticAnnotation: { semanticType: 'Count' },\n                type: 'quantitative',\n                aggregationDefault: 'sum',\n            };\n            continue;\n        }\n\n        if (!fieldName) continue;\n\n        const rawAnnotation = semanticTypes[fieldName];\n        const semanticType = typeof rawAnnotation === 'string'\n            ? (rawAnnotation || '')\n            : (rawAnnotation?.semanticType ?? '');\n        const fieldValues = data.map(r => r[fieldName]);\n\n        // Resolve encoding type\n        const typeDecision = resolveEncodingTypeDecision(\n            semanticType, fieldValues, channel, data, fieldName,\n        );\n\n        // Apply explicit type override\n        let resolvedType = typeDecision.vlType;\n        if (encoding.type) {\n            resolvedType = encoding.type;\n        } else if (channel === 'column' || channel === 'row') {\n            if (resolvedType !== 'nominal' && resolvedType !== 'ordinal') {\n                resolvedType = 'nominal';\n            }\n        }\n\n        // ISO date hack\n        if (resolvedType === 'quantitative') {\n            const sampleValues = data.slice(0, 15).filter(r => r[fieldName] != undefined).map(r => r[fieldName]);\n            const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})?$/;\n            if (sampleValues.length > 0 && sampleValues.every((val: any) => isoDateRegex.test(`${val}`.trim()))) {\n                resolvedType = 'temporal';\n            }\n        }\n\n        // Build ChannelSemantics entry\n        // Stage 1: resolve field-level semantics (data identity)\n        const fc = resolveFieldSemantics(rawAnnotation, fieldName, fieldValues);\n        const annotation = fc.semanticAnnotation;\n\n        // Stage 2: layer on channel-specific visualization decisions\n        const tickConstraint = resolveTickConstraint(annotation.semanticType, annotation.intrinsicDomain);\n        const reversed = resolveReversed(annotation.semanticType, channel);\n        const nice = resolveNice(annotation.semanticType, fc.domainConstraint);\n        const stackable = resolveStackable(annotation.semanticType);\n\n        const cs: ChannelSemantics = {\n            field: fieldName,\n            semanticAnnotation: annotation,\n            type: resolvedType,\n\n            // From FieldSemantics (data identity)\n            format: fc.format,\n            tooltipFormat: fc.tooltipFormat,\n            aggregationDefault: fc.aggregationDefault,\n            scaleType: fc.scaleType,\n            domainConstraint: fc.domainConstraint,\n            cyclic: fc.cyclic || undefined,\n            sortDirection: fc.sortDirection,\n            binningSuggested: fc.binningSuggested || undefined,\n\n            // Channel-specific visualization decisions\n            nice,\n            tickConstraint,\n            reversed: reversed || undefined,\n            stackable,\n        };\n\n        // Adjust field name for aggregated fields\n        if (encoding.aggregate) {\n            if (encoding.aggregate === 'count') {\n                cs.field = '_count';\n                cs.type = 'quantitative';\n            } else {\n                cs.field = `${fieldName}_${encoding.aggregate}`;\n                cs.type = 'quantitative';\n            }\n        }\n\n        // --- Channel-specific semantic decisions ---\n\n        // Color scheme (color and group channels)\n        if ((channel === 'color' || channel === 'group') && fieldName) {\n            if (encoding.scheme && encoding.scheme !== 'default') {\n                cs.colorScheme = {\n                    scheme: encoding.scheme,\n                    type: 'categorical',\n                    reason: 'explicit user scheme',\n                };\n            } else {\n                const encodingVLType = cs.type as 'nominal' | 'ordinal' | 'quantitative' | 'temporal';\n                // Use design-aligned classification from field-semantics.ts\n                const colorHint = resolveColorSchemeHint(semanticType, annotation, fieldValues);\n                const uniqueValues = [...new Set(fieldValues)];\n                cs.colorScheme = getRecommendedColorScheme(\n                    semanticType, encodingVLType, uniqueValues.length, fieldName,\n                    fieldValues, { type: colorHint.type },\n                );\n                // Apply midpoint from design-aligned diverging analysis\n                if (cs.colorScheme.type === 'diverging' && encodingVLType === 'quantitative') {\n                    const nums = fieldValues.filter((v: any) => typeof v === 'number' && !isNaN(v));\n                    const divInfo = resolveDivergingInfo(semanticType, annotation, nums);\n                    if (divInfo) {\n                        cs.colorScheme.domainMid = divInfo.midpoint;\n                    }\n                }\n            }\n        }\n\n        // Temporal format\n        if (cs.type === 'temporal' || (semanticType && getVisCategory(semanticType) === 'temporal')) {\n            const convertedFieldValues = temporalData.map(r => r[fieldName]);\n            const fmt = resolveTemporalFormat(convertedFieldValues, semanticType);\n            if (fmt) cs.temporalFormat = fmt;\n        }\n\n        // Ordinal sort order (canonical ordering for months, days, quarters, etc.)\n        if (cs.type === 'ordinal' || cs.type === 'nominal') {\n            if (!encoding.sortOrder && !encoding.sortBy) {\n                const ordinalSort = inferOrdinalSortOrder(semanticType, fieldValues);\n                if (ordinalSort) {\n                    cs.ordinalSortOrder = ordinalSort;\n                }\n            }\n        }\n\n        result[channel] = cs;\n    }\n\n    return result;\n}\n\n// Re-export helpers needed by other modules\nexport {\n    analyzeTemporalField,\n    computeDataVotes,\n    pickBestLevel,\n    levelToFormat,\n    looksLikeDateString,\n    SEMANTIC_LEVEL,\n    type TemporalAnalysis,\n};\n"
  },
  {
    "path": "src/lib/agents-chart/core/semantic-types.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { getRegistryEntry, getRegisteredTypes, isRegistered, type VisCategory } from './type-registry';\nexport type { VisCategory } from './type-registry';\n\n/**\n * =============================================================================\n * SEMANTIC TYPE SYSTEM\n * =============================================================================\n * \n * Semantic types classify data fields for intelligent chart recommendations.\n * Uses strings for flexibility and easy JSON serialization.\n * \n * DESIGN GOALS:\n * 1. Comprehensive: Cover common data types seen in real-world datasets\n * 2. Visualization-aware: Map to Vega-Lite encoding types (Q, O, N, T)\n * 3. Hierarchical: Support generalization via lattice structure\n * 4. Simple: Use strings with helper functions, no complex enums\n * \n * =============================================================================\n * SEMANTIC TYPE LATTICE\n * =============================================================================\n * \n *                           ┌─────────────┐\n *                           │   AnyType   │\n *                           └──────┬──────┘\n *            ┌────────────────────┼────────────────────┐\n *            ▼                    ▼                    ▼\n *     ┌──────────┐         ┌──────────┐         ┌───────-───┐\n *     │ Temporal │         │ Numeric  │         │Categorical│\n *     └────┬─────┘         └────┬─────┘         └─────┬────┘\n *          │                    │                     │\n *    ┌─────┴─────┐        ┌─────┴─────┐         ┌─────┴─────┐\n *    │           │        │           │         │           │\n *  Point     Granule    Measure   Discrete    Entity     Coded\n *    │           │        │           │         │           │\n * DateTime    Year     Quantity    Rank      Person     Status\n * Date        Month    Count       Index     Company    Boolean\n * Time        Day      Price       Score     Product    Category\n *             Quarter  Percentage  Rating\n *             Decade   Amount      ID\n *                      Temperature\n *                      Revenue\n * \n * =============================================================================\n */\n\n// ---------------------------------------------------------------------------\n// All Semantic Types (as string constants)\n// ---------------------------------------------------------------------------\n\n/**\n * All recognized semantic types.\n * Use these constants when comparing or assigning types.\n */\nexport const SemanticTypes = {\n    // =========================================================================\n    // TEMPORAL TYPES - Time-related concepts\n    // =========================================================================\n    \n    // Point-in-time (full timestamp precision)\n    DateTime: 'DateTime',       // Full date and time: \"2024-01-15T14:30:00\"\n    Date: 'Date',               // Date only: \"2024-01-15\"\n    Time: 'Time',               // Time only: \"14:30:00\"\n    Timestamp: 'Timestamp',     // Unix timestamp (seconds or milliseconds since epoch)\n    \n    // Temporal granules (discrete time units, inherently ordered)\n    Year: 'Year',               // \"2024\" (as a time unit, not a measure)\n    Quarter: 'Quarter',         // \"Q1\", \"Q2\", \"2024-Q1\"\n    Month: 'Month',             // \"January\", \"Jan\", 1-12\n    Week: 'Week',               // \"Week 1\", 1-52\n    Day: 'Day',                 // \"Monday\", \"Mon\", 1-31\n    Hour: 'Hour',               // 0-23\n    \n    // Combined temporal\n    YearMonth: 'YearMonth',     // \"2024-01\", \"Jan 2024\"\n    YearQuarter: 'YearQuarter', // \"2024-Q1\"\n    YearWeek: 'YearWeek',       // \"2024-W01\"\n    Decade: 'Decade',           // \"1990s\", \"2000s\"\n    \n    // Temporal duration/span\n    Duration: 'Duration',       // Time span: \"2 hours\", \"3 days\", milliseconds\n    \n    // =========================================================================\n    // NUMERIC MEASURE TYPES - Continuous values for aggregation\n    // =========================================================================\n    \n    Quantity: 'Quantity',       // Generic continuous measure\n    Count: 'Count',             // Discrete count of items\n    Amount: 'Amount',           // Monetary or general amounts\n    Price: 'Price',             // Unit price\n    Revenue: 'Revenue',         // Total revenue/sales\n    Cost: 'Cost',               // Expenses/costs\n    Percentage: 'Percentage',   // 0-100% or 0-1 ratio\n    Temperature: 'Temperature', // Degrees\n    \n    // Signed measures (can be positive or negative, zero has meaning)\n    Profit: 'Profit',             // Gain/loss, profit/deficit\n    PercentageChange: 'PercentageChange', // Growth rate, change %\n    Sentiment: 'Sentiment',       // Positive/negative sentiment score\n    Correlation: 'Correlation',   // Positive/negative correlation coefficient\n    \n    // =========================================================================\n    // NUMERIC DISCRETE TYPES - Numbers with ordinal/identifier meaning\n    // =========================================================================\n    \n    Rank: 'Rank',               // Position in ordered list: 1st, 2nd, 3rd\n    Index: 'Index',             // Row number, sequence number\n    ID: 'ID',                   // Unique identifier (not for aggregation!)\n    Score: 'Score',             // Rating score: 1-5, 1-10, 0-100\n    Rating: 'Rating',           // Star rating, letter grade\n    \n    // =========================================================================\n    // GEOGRAPHIC TYPES - Location-based data\n    // =========================================================================\n    \n    Latitude: 'Latitude',       // -90 to 90\n    Longitude: 'Longitude',     // -180 to 180\n    Country: 'Country',         // Country name or code\n    State: 'State',             // State/Province\n    City: 'City',               // City name\n    Region: 'Region',           // Geographic region\n    Address: 'Address',         // Street address\n    ZipCode: 'ZipCode',         // Postal code\n    \n    // =========================================================================\n    // CATEGORICAL ENTITY TYPES - Named entities\n    // =========================================================================\n    \n    PersonName: 'PersonName',   // Full name, first/last name\n    Company: 'Company',         // Company/Organization name\n    Product: 'Product',         // Product name\n    Category: 'Category',       // Product/item category\n    Name: 'Name',               // Generic named entity (fallback)\n    \n    // =========================================================================\n    // CATEGORICAL CODED TYPES - Discrete categories/statuses\n    // =========================================================================\n    \n    Status: 'Status',           // State: \"Active\", \"Pending\", \"Closed\"\n    Type: 'Type',               // Type classification\n    Boolean: 'Boolean',         // True/False, Yes/No\n    Direction: 'Direction',     // Compass direction: \"N\", \"NE\", \"East\", etc.\n    \n    // =========================================================================\n    // BINNED/RANGE TYPES - Discretized continuous values\n    // =========================================================================\n    \n    Range: 'Range',             // Numeric range: \"10000-20000\", \"<50\", \"50+\"\n    AgeGroup: 'AgeGroup',       // Age range: \"18-24\", \"25-34\"\n    \n    // =========================================================================\n    // FALLBACK TYPES\n    // =========================================================================\n    \n    String: 'String',           // Generic string (categorical fallback)\n    Number: 'Number',           // Generic number (measure fallback)\n    Unknown: 'Unknown',         // Cannot determine type\n} as const;\n\n// Type for any semantic type string\nexport type SemanticType = typeof SemanticTypes[keyof typeof SemanticTypes];\n\n// ---------------------------------------------------------------------------\n// Visualization Categories  →  defined in type-registry.ts (single source of truth)\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Type Sets for Classification — derived from type-registry.ts\n// ---------------------------------------------------------------------------\n\n// timeseriesXTypes: REMOVED — derived from type-registry.ts via isTimeSeriesType()\n\n/**\n * Types suitable for quantitative encoding (true continuous measures).\n *\n * Derived from the registry: aggRole ∈ {additive, intensive, signed-additive},\n * excluding Score/Rating (t1='Score') which behave as bounded ordinal scales\n * for vis purposes (e.g., 1–5 star rating). This is an intentional vis-level\n * distinction, not a mathematical one.\n */\nexport const measureTypes = new Set<string>(\n    getRegisteredTypes().filter(t => {\n        const e = getRegistryEntry(t);\n        return ['additive', 'intensive', 'signed-additive'].includes(e.aggRole) && e.t1 !== 'Score';\n    })\n);\n\n/** Numeric types that should NOT be used as measures (don't aggregate) */\nexport const nonMeasureNumericTypes = new Set<string>([\n    'Rank', 'Index', 'ID', 'Score', 'Rating',\n    'Year', 'Month', 'Day', 'Hour',\n    'Latitude', 'Longitude',\n]);\n\n/**\n * Types suitable for categorical color/grouping encoding.\n *\n * Derived from the registry: types that include 'nominal' in visEncodings\n * (at any position — Direction has ['ordinal','nominal']),\n * plus binned types (Range, AgeGroup) which also work as categorical for\n * color/grouping despite having 'ordinal' as their primary encoding.\n * Excludes identifiers (ID) which are nominal but not useful for grouping.\n */\nexport const categoricalTypes = new Set<string>(\n    getRegisteredTypes().filter(t => {\n        const e = getRegistryEntry(t);\n        return (e.visEncodings.includes('nominal') && e.aggRole !== 'identifier') || e.t1 === 'Binned';\n    })\n);\n\n/**\n * Types suitable for ordinal encoding (have inherent order).\n *\n * Derived from the registry: types whose visEncodings include 'ordinal'.\n */\nexport const ordinalTypes = new Set<string>(\n    getRegisteredTypes().filter(t => {\n        const e = getRegistryEntry(t);\n        return e.visEncodings.includes('ordinal');\n    })\n);\n\n// geoTypes, geoCoordinateTypes, geoLocationTypes: REMOVED — derived from type-registry.ts\n// via isGeoType(), isGeoCoordinateType(), isGeoLocationString()\n\n// ---------------------------------------------------------------------------\n// Type Hierarchy — REMOVED\n// ---------------------------------------------------------------------------\n// The typeHierarchy map and its helper functions (getParentType,\n// getAncestorTypes, isSubtypeOf) have been removed. They were unused\n// externally — no consumer ever imported them.\n//\n// The registry's t0/t1 dimensions capture family grouping (e.g., all\n// Amount types share t1='Amount'). If fine-grained parent-child lattice\n// traversal is ever needed in the future, it can be rebuilt from\n// type-registry.ts with an explicit `parent` field per entry.\n// ---------------------------------------------------------------------------\n\n// visCategoryMap: REMOVED — derived from type-registry.ts via getRegistryEntry().visEncodings[0]\n\n// ---------------------------------------------------------------------------\n// Helper Functions\n// ---------------------------------------------------------------------------\n\n/**\n * Get the Vega-Lite visualization category for a semantic type.\n * Derived from the registry's visEncodings[0] (primary encoding).\n * Returns null for unrecognised types so callers can fall back\n * to data-driven inference.\n */\nexport function getVisCategory(semanticType: string): VisCategory | null {\n    // Return null for empty, 'Unknown', or any unregistered type string\n    // so callers fall back to data-driven inference (inferVisCategory).\n    if (!semanticType || !isRegistered(semanticType)) return null;\n    return getRegistryEntry(semanticType).visEncodings[0] ?? null;\n}\n\n\n/**\n * Infer a VisCategory from raw data values when no semantic type is available.\n * Mirrors the DataType → VL encoding type mapping:\n *   number/integer → quantitative, boolean → nominal, date → temporal, string → nominal.\n */\nexport function inferVisCategory(values: any[]): VisCategory {\n    if (values.length === 0) return 'nominal';\n    const isBoolean = (v: any) => v === true || v === false || Object.prototype.toString.call(v) === '[object Boolean]';\n    const isNumber = (v: any) => !isNaN(+v) && !(Object.prototype.toString.call(v) === '[object Date]');\n    // Date.parse is too permissive in V8 — \"FY 2018\", \"hello world 2018\" all parse.\n    // Require the string to start with a digit or a known month-name prefix.\n    const looksLikeDate = (s: string) => /^\\d|^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i.test(s.trim());\n    const isDate = (v: any) => {\n        if (v instanceof Date) return !isNaN(v.getTime());\n        if (typeof v === 'string') return looksLikeDate(v) && !isNaN(Date.parse(v));\n        return !isNaN(Date.parse(v));\n    };\n    const nonNull = values.filter(v => v != null);\n    if (nonNull.length === 0) return 'nominal';\n    if (nonNull.every(isBoolean)) return 'nominal';\n    if (nonNull.every(isNumber)) return 'quantitative';\n    if (nonNull.every(isDate)) return 'temporal';\n    return 'nominal';\n}\n\n/**\n * Check if a semantic type is a true measure (suitable for quantitative encoding).\n */\nexport function isMeasureType(semanticType: string): boolean {\n    return measureTypes.has(semanticType);\n}\n\n/**\n * Check if a semantic type is suitable for time-series X axis.\n * Derived from type-registry: t0 === 'Temporal' but not Duration.\n */\nexport function isTimeSeriesType(semanticType: string): boolean {\n    const entry = getRegistryEntry(semanticType);\n    return entry.t0 === 'Temporal' && entry.t1 !== 'Duration';\n}\n\n/**\n * Check if a semantic type is categorical (suitable for color/grouping).\n */\nexport function isCategoricalType(semanticType: string): boolean {\n    return categoricalTypes.has(semanticType);\n}\n\n/**\n * Check if a semantic type is ordinal (has inherent order).\n */\nexport function isOrdinalType(semanticType: string): boolean {\n    return ordinalTypes.has(semanticType);\n}\n\n/**\n * Check if a semantic type is geographic.\n * Derived from type-registry: t0 === 'Geographic'.\n */\nexport function isGeoType(semanticType: string): boolean {\n    return getRegistryEntry(semanticType).t0 === 'Geographic';\n}\n\n/**\n * Check if a semantic type is a geographic coordinate (lat/lon).\n * Derived from type-registry: t1 === 'GeoCoordinate'.\n */\nexport function isGeoCoordinateType(semanticType: string): boolean {\n    return getRegistryEntry(semanticType).t1 === 'GeoCoordinate';\n}\n\n/**\n * Check if a semantic type is a named geographic location.\n * Derived from type-registry: t1 === 'GeoPlace'.\n */\nexport function isGeoLocationString(semanticType: string): boolean {\n    return getRegistryEntry(semanticType).t1 === 'GeoPlace';\n}\n\n/**\n * Check if a semantic type is numeric but should not be aggregated.\n */\nexport function isNonMeasureNumeric(semanticType: string): boolean {\n    return nonMeasureNumericTypes.has(semanticType);\n}\n\n// ---------------------------------------------------------------------------\n// Zero-Baseline Classification  →  data lives in type-registry.ts (zeroBaseline, zeroPad)\n// ---------------------------------------------------------------------------\n\n/**\n * Classification of whether zero is a meaningful baseline for a semantic type.\n *\n * - `meaningful`: 0 has a real-world interpretation (absence of the measured thing).\n *   Comparisons to zero and ratios between values are meaningful.\n *   Examples: Count, Revenue, Distance, Weight.\n *\n * - `arbitrary`: 0 is either meaningless, doesn't exist, or is an arbitrary\n *   reference point. The data's range is what matters.\n *   Examples: Temperature (0°F is arbitrary), Year (year 0 doesn't exist),\n *   Rank (0th place doesn't exist).\n *\n * - `contextual`: 0 is meaningful but data-fitting may be better when data\n *   is concentrated far from zero and the mark is not bar/area.\n *   Examples: Percentage (0–100% natural, but 48–52% benefits from zoom),\n *   Score (1–5 scale, but 4.2–4.8 benefits from zoom).\n */\nexport type ZeroClass = 'meaningful' | 'arbitrary' | 'contextual';\n\n/**\n * Result of the zero-baseline decision.\n * Encapsulates both the boolean decision and domain padding for non-zero axes.\n */\nexport interface ZeroDecision {\n    /** Whether the axis should include zero */\n    zero: boolean;\n    /**\n     * For non-zero axes: fraction of data range to pad on each side\n     * so edge values aren't crushed against the axis boundary.\n     * e.g. 0.05 = 5% padding on each side.\n     */\n    domainPadFraction: number;\n    /** The zero class that drove this decision */\n    zeroClass: ZeroClass | 'unknown';\n}\n\n// zeroMeaningfulTypes, zeroArbitraryTypes, zeroContextualTypes, zeroPadMap:\n// REMOVED — now stored as zeroBaseline/zeroPad in type-registry.ts\n\n/**\n * Classify a semantic type's relationship to zero.\n * Derived from the registry's zeroBaseline dimension.\n */\nexport function getZeroClass(semanticType: string): ZeroClass | 'unknown' {\n    const baseline = getRegistryEntry(semanticType).zeroBaseline;\n    if (baseline === 'none') return 'unknown';\n    return baseline;\n}\n\n/**\n * Compute whether a quantitative axis should start at zero, based on\n * semantic type, mark type, channel, and data values.\n *\n * Priority: semantic type > mark type > data range > VL default.\n *\n * This is a pure decision function — it returns a ZeroDecision object\n * without modifying any spec. The caller applies the decision to VL.\n *\n * @param semanticType  The semantic type of the field (e.g. 'Revenue', 'Temperature')\n * @param channel       The VL channel ('x', 'y', 'size', etc.)\n * @param markType      The mark type ('bar', 'line', 'point', etc.)\n * @param values        Optional numeric data values for data-range analysis\n */\nexport function computeZeroDecision(\n    semanticType: string,\n    channel: string,\n    markType: string,\n    values?: number[],\n): ZeroDecision {\n    const isBarLike = ['bar', 'area', 'rect'].includes(markType);\n    const isPositional = ['x', 'y'].includes(channel);\n    const entry = getRegistryEntry(semanticType);\n    const zeroClass = getZeroClass(semanticType);\n\n    // --- Zero-meaningful types: always zero ---\n    if (zeroClass === 'meaningful') {\n        return { zero: true, domainPadFraction: 0, zeroClass };\n    }\n\n    // --- Zero-arbitrary types: never zero, apply padding ---\n    if (zeroClass === 'arbitrary') {\n        // Exception: bar/area marks with data that touches/crosses zero\n        if (isBarLike && values && values.length > 0) {\n            const dataMin = Math.min(...values);\n            if (dataMin <= 0) {\n                return { zero: true, domainPadFraction: 0, zeroClass };\n            }\n        }\n        return {\n            zero: false,\n            domainPadFraction: entry.zeroPad || 0.05,\n            zeroClass,\n        };\n    }\n\n    // --- Contextual types: use data range + mark to decide ---\n    if (zeroClass === 'contextual' && values && values.length > 0) {\n        const dataMin = Math.min(...values);\n        const dataMax = Math.max(...values);\n\n        // Data touches/crosses zero → include it\n        if (dataMin <= 0) {\n            return { zero: true, domainPadFraction: 0, zeroClass };\n        }\n\n        // How far is data from zero?\n        const proximity = dataMax > 0 ? dataMin / dataMax : 0;\n\n        // Close to zero → include it\n        if (proximity < 0.3) {\n            return { zero: true, domainPadFraction: 0, zeroClass };\n        }\n\n        // Far from zero + bar/area → still include (bar length integrity)\n        if (isBarLike) {\n            return { zero: true, domainPadFraction: 0, zeroClass };\n        }\n\n        // Far from zero + non-bar → data-fit with padding\n        return { zero: false, domainPadFraction: 0.05, zeroClass };\n    }\n\n    // --- No semantic type or unrecognized → no opinion, let VL decide ---\n    if (isBarLike && isPositional) {\n        return { zero: true, domainPadFraction: 0, zeroClass: 'unknown' };\n    }\n    return { zero: false, domainPadFraction: 0.05, zeroClass: 'unknown' };\n}\n\n/**\n * Compute padded domain bounds for a non-zero axis.\n * Pure computation — returns [paddedMin, paddedMax] without modifying any spec.\n *\n * @param values         Numeric data values\n * @param padFraction    Fraction of data range to pad on each side\n * @returns              [paddedMin, paddedMax] or null if padding is not applicable\n */\nexport function computePaddedDomain(\n    values: number[],\n    padFraction: number,\n): [number, number] | null {\n    if (padFraction <= 0 || values.length < 2) return null;\n\n    const dataMin = Math.min(...values);\n    const dataMax = Math.max(...values);\n    const span = dataMax - dataMin;\n    if (span <= 0) return null;\n\n    const padding = span * padFraction;\n    return [dataMin - padding, dataMax + padding];\n}\n\n// ---------------------------------------------------------------------------\n// Color Scheme Recommendations\n// ---------------------------------------------------------------------------\n\nexport type ColorSchemeType = 'categorical' | 'sequential' | 'diverging';\n\nexport interface ColorSchemeRecommendation {\n    scheme: string;\n    type: ColorSchemeType;\n    reason: string;\n    /** For diverging schemes, the recommended midpoint value */\n    domainMid?: number;\n}\n\n// getDivergingMidpoint: REMOVED — superseded by resolveDivergingInfo() in field-semantics.ts\n// which uses a priority chain (unit → type-intrinsic → domain → data) and\n// distinguishes inherent vs conditional diverging.\n\n/**\n * Vega-Lite color schemes organized by use case\n * See: https://vega.github.io/vega/docs/schemes/\n */\nconst colorSchemes = {\n    // Categorical (nominal) - good for distinct categories\n    categorical: {\n        default: 'category10',\n        large: 'category20',\n        pastel: 'pastel1',\n        accent: 'accent',\n        paired: 'paired',      // Good for paired comparisons\n        set1: 'set1',          // Distinct, saturated\n        set2: 'set2',          // Pastel\n        set3: 'set3',          // Larger set\n        tableau10: 'tableau10',\n        tableau20: 'tableau20',\n    },\n    // Sequential - good for ordered/quantitative data\n    sequential: {\n        blues: 'blues',\n        greens: 'greens',\n        oranges: 'oranges',\n        reds: 'reds',\n        purples: 'purples',\n        greys: 'greys',\n        // Multi-hue sequential\n        viridis: 'viridis',\n        inferno: 'inferno',\n        magma: 'magma',\n        plasma: 'plasma',\n        turbo: 'turbo',\n        // Domain-specific\n        yellowGreen: 'yellowgreen',\n        yellowOrangeBrown: 'yelloworangebrown',\n        goldGreen: 'goldgreen',\n        goldOrange: 'goldorange',\n        goldRed: 'goldred',\n    },\n    // Diverging - good for data with meaningful center point\n    diverging: {\n        redBlue: 'redblue',\n        redGrey: 'redgrey',\n        redYellowBlue: 'redyellowblue',\n        redYellowGreen: 'redyellowgreen',\n        pinkYellowGreen: 'pinkyellowgreen',\n        purpleGreen: 'purplegreen',\n        purpleOrange: 'purpleorange',\n        brownBlueGreen: 'brownbluegreen',\n    },\n};\n\n/**\n * Get recommended color scheme based on semantic type and encoding context.\n * \n * @param semanticType - The semantic type of the field\n * @param encodingType - The Vega-Lite encoding type ('nominal', 'ordinal', 'quantitative')\n * @param uniqueValueCount - Number of unique values (for categorical sizing)\n * @param fieldName - Field name (for consistent hashing)\n * @param values - Optional actual data values (for inspecting data range)\n * @param colorHint - Optional classification from resolveColorSchemeHint().\n *        When provided, the hint's type ('diverging'|'sequential'|'categorical')\n *        overrides inline detection, avoiding duplicate diverging logic.\n */\nexport function getRecommendedColorScheme(\n    semanticType: string | undefined,\n    encodingType: 'nominal' | 'ordinal' | 'quantitative' | 'temporal',\n    uniqueValueCount: number = 10,\n    fieldName: string = '',\n    values: any[] = [],\n    colorHint?: { type: 'categorical' | 'sequential' | 'diverging' },\n): ColorSchemeRecommendation {\n    \n    // Helper for consistent scheme selection from array\n    const pickScheme = (schemes: string[], name: string): string => {\n        let hash = 0;\n        for (let i = 0; i < name.length; i++) {\n            hash = ((hash << 5) - hash) + name.charCodeAt(i);\n            hash = hash & hash;\n        }\n        return schemes[Math.abs(hash) % schemes.length];\n    };\n\n    // If no semantic type, use defaults based on encoding type\n    if (!semanticType) {\n        if (encodingType === 'quantitative') {\n            return { scheme: 'viridis', type: 'sequential', reason: 'default for quantitative' };\n        }\n        if (encodingType === 'ordinal') {\n            return { scheme: 'blues', type: 'sequential', reason: 'default for ordinal' };\n        }\n        // nominal/temporal default to categorical — use saturated schemes for readability\n        return { \n            scheme: uniqueValueCount > 10 ? 'tableau20' : 'tableau10', \n            type: 'categorical', \n            reason: 'default for categorical' \n        };\n    }\n\n    // --- Diverging-capable types ---\n    // When a colorHint is provided (from resolveColorSchemeHint), it drives the\n    // diverging/sequential decision. Without a hint, fall back to sequential.\n    // This avoids duplicating the diverging detection logic from field-semantics.ts.\n\n    // Temperature\n    if (semanticType === 'Temperature') {\n        if (colorHint?.type === 'diverging') {\n            return { scheme: 'redblue', type: 'diverging', reason: 'temperature diverging around freezing point' };\n        }\n        return { scheme: 'reds', type: 'sequential', reason: 'temperature single-direction uses sequential' };\n    }\n\n    // Percentage\n    if (semanticType === 'Percentage') {\n        if (colorHint?.type === 'diverging') {\n            return { scheme: 'redblue', type: 'diverging', reason: 'percentage spans positive and negative' };\n        }\n        return { scheme: 'oranges', type: 'sequential', reason: 'percentage all same sign uses sequential' };\n    }\n\n    // Revenue/Price/Cost/Amount\n    if (['Revenue', 'Price', 'Cost', 'Amount'].includes(semanticType)) {\n        if (colorHint?.type === 'diverging') {\n            return { scheme: 'redblue', type: 'diverging', reason: 'financial data spans positive and negative' };\n        }\n        return { scheme: 'goldgreen', type: 'sequential', reason: 'financial data uses gold-green' };\n    }\n\n    // Score/Rating - evaluation metrics; diverging when hint says so (e.g., domain midpoint)\n    if (['Score', 'Rating'].includes(semanticType)) {\n        if (colorHint?.type === 'diverging') {\n            return { scheme: 'redblue', type: 'diverging', reason: 'score/rating diverging around midpoint' };\n        }\n        return { scheme: 'yelloworangebrown', type: 'sequential', reason: 'scores use warm sequential' };\n    }\n\n    // Rank - use single-hue sequential\n    if (['Rank', 'Index'].includes(semanticType)) {\n        return { scheme: 'purples', type: 'sequential', reason: 'ranks use single-hue sequential' };\n    }\n\n    // Age groups / ranges - use sequential\n    if (['AgeGroup', 'Range'].includes(semanticType)) {\n        return { scheme: 'blues', type: 'sequential', reason: 'age/range groups use sequential' };\n    }\n\n    // Temporal granules (Year, Month, Quarter, etc.) - sequential for continuity\n    if (ordinalTypes.has(semanticType) && ['Year', 'Quarter', 'Month', 'Week', 'Day', 'Hour', 'Decade'].includes(semanticType)) {\n        return { scheme: 'viridis', type: 'sequential', reason: 'temporal granules use perceptually uniform' };\n    }\n\n    // Geographic locations - use geographic-friendly palettes\n    if (getRegistryEntry(semanticType ?? '').t1 === 'GeoPlace') {\n        if (uniqueValueCount <= 10) {\n            return { scheme: 'set2', type: 'categorical', reason: 'geographic regions use distinct pastels' };\n        }\n        return { scheme: 'tableau20', type: 'categorical', reason: 'many regions use large categorical' };\n    }\n\n    // Status/Boolean - use accent colors for clear distinction\n    if (['Status', 'Boolean'].includes(semanticType)) {\n        return { scheme: 'set1', type: 'categorical', reason: 'status uses high-contrast categorical' };\n    }\n\n    // Categories/Types - use standard categorical\n    if (['Category', 'Type'].includes(semanticType)) {\n        return { \n            scheme: uniqueValueCount > 10 ? 'tableau20' : 'tableau10', \n            type: 'categorical', \n            reason: 'categories use standard categorical' \n        };\n    }\n\n    // Companies/Products - use paired for small sets, tableau for large\n    if (['Company', 'Product'].includes(semanticType)) {\n        return { \n            scheme: uniqueValueCount > 10 ? 'tableau20' : 'paired', \n            type: 'categorical', \n            reason: 'entities use distinct categorical' \n        };\n    }\n\n    // Person names - use saturated schemes for readability; only pastel for very small sets\n    if (['Name', 'PersonName'].includes(semanticType)) {\n        return { \n            scheme: uniqueValueCount > 8 ? 'tableau20' : 'set2', \n            type: 'categorical', \n            reason: 'names use readable categorical' \n        };\n    }\n\n    // Duration - use sequential (longer = more intense)\n    if (semanticType === 'Duration') {\n        return { scheme: 'oranges', type: 'sequential', reason: 'duration uses intensity-based sequential' };\n    }\n\n    // Quantity/Count/Distance/etc. - general measures\n    // Check colorHint first — signed measures (Profit, Sentiment, Correlation,\n    // PercentageChange) pass through here and should honor their diverging hint.\n    if (measureTypes.has(semanticType)) {\n        if (colorHint?.type === 'diverging') {\n            return { scheme: 'redblue', type: 'diverging', reason: 'measure with diverging nature' };\n        }\n        const sequentialSchemes = ['viridis', 'blues', 'greens', 'reds', 'yelloworangebrown', 'goldgreen'];\n        return { \n            scheme: pickScheme(sequentialSchemes, fieldName), \n            type: 'sequential', \n            reason: 'measures use perceptually uniform sequential' \n        };\n    }\n\n    // Ordinal types not already handled\n    if (ordinalTypes.has(semanticType) || encodingType === 'ordinal') {\n        const ordinalSchemes = ['blues', 'greens', 'purples', 'oranges'];\n        return { \n            scheme: pickScheme(ordinalSchemes, fieldName), \n            type: 'sequential', \n            reason: 'ordinal data uses sequential scheme' \n        };\n    }\n\n    // Default categorical for nominal\n    if (encodingType === 'nominal' || encodingType === 'temporal') {\n        return { \n            scheme: uniqueValueCount > 10 ? 'tableau20' : 'tableau10', \n            type: 'categorical', \n            reason: 'default categorical palette' \n        };\n    }\n\n    // Fallback\n    return { scheme: 'viridis', type: 'sequential', reason: 'universal fallback' };\n}\n\n// getRecommendedColorSchemeWithMidpoint: REMOVED — diverging midpoint is now\n// resolved via resolveDivergingInfo() in field-semantics.ts and applied directly\n// by the caller in resolve-semantics.ts. See resolveChannelSemantics().\n\n// ===========================================================================\n// Canonical Ordinal Sort Orders\n// ===========================================================================\n\n/**\n * Well-known canonical ordinal sequences.\n *\n * Used to detect when data values belong to a known ordinal domain\n * (months, days of the week, quarters, etc.) and sort them in their\n * natural order instead of alphabetically or by a quantitative axis.\n */\n\n/** Full and abbreviated English month names (case-insensitive lookup). */\nconst MONTH_FULL = ['January','February','March','April','May','June','July','August','September','October','November','December'];\nconst MONTH_ABBR3 = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\nconst MONTH_NUM = ['1','2','3','4','5','6','7','8','9','10','11','12'];\n\n/** Full and abbreviated English day-of-week names. */\nconst DOW_FULL = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'];\nconst DOW_ABBR3 = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'];\nconst DOW_ABBR2 = ['Mo','Tu','We','Th','Fr','Sa','Su'];\n\n/** Sunday-first variant (US convention). */\nconst DOW_FULL_SUN = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];\nconst DOW_ABBR3_SUN = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];\n\n/** Quarter labels. */\nconst QUARTER_LABELS = ['Q1','Q2','Q3','Q4'];\n\n/** Compass directions — clockwise from North (top of chart). */\nconst COMPASS_8 = ['N','NE','E','SE','S','SW','W','NW'];\nconst COMPASS_8_FULL = ['North','Northeast','East','Southeast','South','Southwest','West','Northwest'];\nconst COMPASS_4 = ['N','E','S','W'];\nconst COMPASS_4_FULL = ['North','East','South','West'];\n\ninterface OrdinalSequence {\n    /** Canonical labels in order */\n    labels: string[];\n    /** Case-insensitive matching */\n    caseInsensitive: boolean;\n}\n\n/** All known ordinal sequences, keyed by semantic type. */\nconst ORDINAL_SEQUENCES: Record<string, OrdinalSequence[]> = {\n    Month: [\n        { labels: MONTH_FULL, caseInsensitive: true },\n        { labels: MONTH_ABBR3, caseInsensitive: true },\n        { labels: MONTH_NUM, caseInsensitive: false },\n    ],\n    Day: [\n        { labels: DOW_FULL, caseInsensitive: true },\n        { labels: DOW_ABBR3, caseInsensitive: true },\n        { labels: DOW_ABBR2, caseInsensitive: true },\n        { labels: DOW_FULL_SUN, caseInsensitive: true },\n        { labels: DOW_ABBR3_SUN, caseInsensitive: true },\n    ],\n    Quarter: [\n        { labels: QUARTER_LABELS, caseInsensitive: true },\n    ],\n    Direction: [\n        { labels: COMPASS_8, caseInsensitive: true },\n        { labels: COMPASS_8_FULL, caseInsensitive: true },\n        { labels: COMPASS_4, caseInsensitive: true },\n        { labels: COMPASS_4_FULL, caseInsensitive: true },\n    ],\n};\n\n/**\n * Build a case-insensitive lookup map from a sequence's labels.\n * Returns map: lowercased label → index.\n */\nfunction buildLookup(seq: OrdinalSequence): Map<string, number> {\n    const m = new Map<string, number>();\n    for (let i = 0; i < seq.labels.length; i++) {\n        const key = seq.caseInsensitive ? seq.labels[i].toLowerCase() : seq.labels[i];\n        m.set(key, i);\n    }\n    return m;\n}\n\n/**\n * Try to match a set of data values against a well-known ordinal sequence.\n *\n * Returns the canonical sort order (subset of the sequence, in order) if\n * enough values match, or `undefined` if no match.\n *\n * Matching rules:\n * - At least 60% of unique data values must be found in the sequence\n * - All matched values are returned in canonical order\n * - Unmatched values are appended at the end (preserving data order)\n *\n * @param values     The data values (strings or numbers) on this channel\n * @param sequences  The candidate sequences for the semantic type\n */\nfunction matchSequence(values: any[], sequences: OrdinalSequence[]): string[] | undefined {\n    const uniqueValues = [...new Set(values.map(v => v != null ? String(v) : ''))].filter(v => v !== '');\n    if (uniqueValues.length === 0) return undefined;\n\n    for (const seq of sequences) {\n        const lookup = buildLookup(seq);\n        const matched: { value: string; index: number }[] = [];\n        const unmatched: string[] = [];\n\n        for (const val of uniqueValues) {\n            const key = seq.caseInsensitive ? val.toLowerCase() : val;\n            const idx = lookup.get(key);\n            if (idx !== undefined) {\n                matched.push({ value: val, index: idx });\n            } else {\n                unmatched.push(val);\n            }\n        }\n\n        // Require at least 60% match rate\n        if (matched.length >= uniqueValues.length * 0.6 && matched.length >= 2) {\n            // Sort matched values by canonical index\n            matched.sort((a, b) => a.index - b.index);\n            const result = matched.map(m => m.value);\n            // Append unmatched at the end\n            result.push(...unmatched);\n            return result;\n        }\n    }\n    return undefined;\n}\n\n/**\n * Infer a canonical ordinal sort order for a field based on its semantic type\n * and data values.\n *\n * Works for:\n * - Month names (full/abbreviated/numeric): Jan, Feb, ... or January, February, ...\n * - Day-of-week names (full/abbreviated): Mon, Tue, ... or Monday, Tuesday, ...\n * - Quarter labels: Q1, Q2, Q3, Q4\n *\n * Falls back to `undefined` if no known sequence is detected, letting the\n * caller use its own default sort logic.\n *\n * @param semanticType  The semantic type of the field (e.g. 'Month', 'Day')\n * @param values        The data values on this channel\n * @returns Sorted unique values in canonical order, or undefined\n */\nexport function inferOrdinalSortOrder(\n    semanticType: string,\n    values: any[],\n): string[] | undefined {\n    // 1. Check by explicit semantic type\n    const sequences = ORDINAL_SEQUENCES[semanticType];\n    if (sequences) {\n        return matchSequence(values, sequences);\n    }\n\n    // 2. Auto-detect: try all sequences if semantic type is generic\n    if (!semanticType || semanticType === 'Category' || semanticType === 'String' || semanticType === 'Unknown') {\n        for (const seqs of Object.values(ORDINAL_SEQUENCES)) {\n            const result = matchSequence(values, seqs);\n            if (result) return result;\n        }\n    }\n\n    return undefined;\n}\n\n"
  },
  {
    "path": "src/lib/agents-chart/core/type-registry.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * =============================================================================\n * TYPE REGISTRY — Single Source of Truth\n * =============================================================================\n *\n * Every recognized semantic type is registered here with its orthogonal\n * compilation dimensions. This is the ONLY place where per-type properties\n * are defined. All other files (field-semantics.ts, semantic-types.ts)\n * derive helper functions by querying this registry.\n *\n * To add a new semantic type: add an entry here.\n * To query a type's properties: use `getRegistryEntry()`.\n * =============================================================================\n */\n\n// ---------------------------------------------------------------------------\n// Visualization Categories\n// ---------------------------------------------------------------------------\n\nexport type VisCategory = 'quantitative' | 'ordinal' | 'nominal' | 'temporal' | 'geographic';\n\n// ---------------------------------------------------------------------------\n// Registry Dimension Types\n// ---------------------------------------------------------------------------\n\n/** Top-level type family */\nexport type T0Family = 'Temporal' | 'Measure' | 'Discrete' | 'Geographic' | 'Categorical' | 'Identifier';\n\n/** Mid-level category within a family */\nexport type T1Category =\n    | 'DateTime' | 'DateGranule' | 'Duration'\n    | 'Amount' | 'Physical' | 'Proportion' | 'SignedMeasure' | 'GenericMeasure'\n    | 'Rank' | 'Score' | 'Index'\n    | 'GeoCoordinate' | 'GeoPlace'\n    | 'Entity' | 'Coded' | 'Binned'\n    | 'ID';\n\nexport type DomainShape = 'open' | 'bounded' | 'fixed' | 'cyclic';\nexport type AggRole = 'additive' | 'intensive' | 'signed-additive' | 'dimension' | 'identifier';\nexport type DivergingClass = 'none' | 'inherent' | 'conditional';\nexport type FormatClass = 'currency' | 'percent' | 'signed-percent' | 'signed-currency'\n    | 'signed-decimal' | 'unit-suffix' | 'integer' | 'decimal' | 'plain';\n\n/**\n * Zero-baseline classification for quantitative axes.\n *\n * - `meaningful`: 0 = absence of the measured thing; axis should include 0 (Count, Revenue).\n * - `arbitrary`:  0 is arbitrary or nonexistent; data-fit the axis (Temperature, Year, Rank).\n * - `contextual`: 0 is meaningful but data-fitting may be better when data is far from 0 (Percentage, Score).\n * - `none`:       Not a quantitative type; zero question is irrelevant (all categorical/temporal types).\n */\nexport type ZeroBaseline = 'meaningful' | 'arbitrary' | 'contextual' | 'none';\n\nexport interface TypeRegistryEntry {\n    t0: T0Family;\n    t1: T1Category;\n    visEncodings: VisCategory[];\n    aggRole: AggRole;\n    domainShape: DomainShape;\n    diverging: DivergingClass;\n    formatClass: FormatClass;\n    /** Zero-baseline classification for quantitative axes */\n    zeroBaseline: ZeroBaseline;\n    /** Domain padding fraction for non-zero axes (0 = no padding) */\n    zeroPad: number;\n}\n\n// ---------------------------------------------------------------------------\n// The Registry\n// ---------------------------------------------------------------------------\n\n/**\n * Static registry mapping every recognized semantic type to its\n * tier membership and orthogonal compilation dimensions.\n *\n * Types not in this registry are treated as 'Unknown' → nominal/plain.\n */\nconst TYPE_REGISTRY: Record<string, TypeRegistryEntry> = {\n    // --- Temporal: DateTime ---\n    DateTime:      { t0: 'Temporal', t1: 'DateTime', visEncodings: ['temporal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none', formatClass: 'plain',           zeroBaseline: 'none', zeroPad: 0 },\n    Date:          { t0: 'Temporal', t1: 'DateTime', visEncodings: ['temporal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none', formatClass: 'plain',           zeroBaseline: 'none', zeroPad: 0 },\n    Time:          { t0: 'Temporal', t1: 'DateTime', visEncodings: ['temporal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none', formatClass: 'plain',           zeroBaseline: 'none', zeroPad: 0 },\n    Timestamp:     { t0: 'Temporal', t1: 'DateTime', visEncodings: ['temporal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none', formatClass: 'plain',           zeroBaseline: 'none', zeroPad: 0 },\n\n    // --- Temporal: DateGranule ---\n    Year:          { t0: 'Temporal', t1: 'DateGranule', visEncodings: ['temporal', 'ordinal'], aggRole: 'dimension', domainShape: 'open',    diverging: 'none', formatClass: 'integer',        zeroBaseline: 'arbitrary', zeroPad: 0.03 },\n    Quarter:       { t0: 'Temporal', t1: 'DateGranule', visEncodings: ['ordinal'],            aggRole: 'dimension', domainShape: 'cyclic',  diverging: 'none', formatClass: 'plain',          zeroBaseline: 'none', zeroPad: 0 },\n    Month:         { t0: 'Temporal', t1: 'DateGranule', visEncodings: ['ordinal'],            aggRole: 'dimension', domainShape: 'cyclic',  diverging: 'none', formatClass: 'plain',          zeroBaseline: 'arbitrary', zeroPad: 0 },\n    Week:          { t0: 'Temporal', t1: 'DateGranule', visEncodings: ['ordinal'],            aggRole: 'dimension', domainShape: 'cyclic',  diverging: 'none', formatClass: 'plain',          zeroBaseline: 'none', zeroPad: 0 },\n    Day:           { t0: 'Temporal', t1: 'DateGranule', visEncodings: ['ordinal'],            aggRole: 'dimension', domainShape: 'cyclic',  diverging: 'none', formatClass: 'plain',          zeroBaseline: 'arbitrary', zeroPad: 0 },\n    Hour:          { t0: 'Temporal', t1: 'DateGranule', visEncodings: ['ordinal'],            aggRole: 'dimension', domainShape: 'cyclic',  diverging: 'none', formatClass: 'integer',        zeroBaseline: 'arbitrary', zeroPad: 0 },\n    YearMonth:     { t0: 'Temporal', t1: 'DateGranule', visEncodings: ['temporal', 'ordinal'], aggRole: 'dimension', domainShape: 'open',   diverging: 'none', formatClass: 'plain',          zeroBaseline: 'none', zeroPad: 0 },\n    YearQuarter:   { t0: 'Temporal', t1: 'DateGranule', visEncodings: ['temporal', 'ordinal'], aggRole: 'dimension', domainShape: 'open',   diverging: 'none', formatClass: 'plain',          zeroBaseline: 'none', zeroPad: 0 },\n    YearWeek:      { t0: 'Temporal', t1: 'DateGranule', visEncodings: ['temporal', 'ordinal'], aggRole: 'dimension', domainShape: 'open',   diverging: 'none', formatClass: 'plain',          zeroBaseline: 'none', zeroPad: 0 },\n    Decade:        { t0: 'Temporal', t1: 'DateGranule', visEncodings: ['temporal', 'ordinal'], aggRole: 'dimension', domainShape: 'open',   diverging: 'none', formatClass: 'integer',        zeroBaseline: 'arbitrary', zeroPad: 0.03 },\n\n    // --- Temporal: Duration ---\n    Duration:      { t0: 'Temporal', t1: 'Duration', visEncodings: ['quantitative'],       aggRole: 'additive',   domainShape: 'open',    diverging: 'none', formatClass: 'unit-suffix',     zeroBaseline: 'meaningful', zeroPad: 0 },\n\n    // --- Measure: Amount ---\n    Amount:        { t0: 'Measure', t1: 'Amount', visEncodings: ['quantitative'],          aggRole: 'additive',   domainShape: 'open',    diverging: 'none',        formatClass: 'currency',   zeroBaseline: 'meaningful', zeroPad: 0 },\n    Price:         { t0: 'Measure', t1: 'Amount', visEncodings: ['quantitative'],          aggRole: 'intensive',  domainShape: 'open',    diverging: 'none',        formatClass: 'currency',   zeroBaseline: 'meaningful', zeroPad: 0 },\n    Revenue:       { t0: 'Measure', t1: 'Amount', visEncodings: ['quantitative'],          aggRole: 'additive',   domainShape: 'open',    diverging: 'none',        formatClass: 'currency',   zeroBaseline: 'meaningful', zeroPad: 0 },\n    Cost:          { t0: 'Measure', t1: 'Amount', visEncodings: ['quantitative'],          aggRole: 'additive',   domainShape: 'open',    diverging: 'none',        formatClass: 'currency',   zeroBaseline: 'meaningful', zeroPad: 0 },\n\n    // --- Measure: Physical ---\n    Quantity:      { t0: 'Measure', t1: 'Physical', visEncodings: ['quantitative'],        aggRole: 'additive',   domainShape: 'open',    diverging: 'none',        formatClass: 'unit-suffix', zeroBaseline: 'meaningful', zeroPad: 0 },\n    Temperature:   { t0: 'Measure', t1: 'Physical', visEncodings: ['quantitative'],        aggRole: 'intensive',  domainShape: 'open',    diverging: 'conditional', formatClass: 'unit-suffix', zeroBaseline: 'arbitrary', zeroPad: 0.05 },\n\n    // --- Measure: Proportion ---\n    Percentage:    { t0: 'Measure', t1: 'Proportion', visEncodings: ['quantitative'],      aggRole: 'intensive',  domainShape: 'bounded', diverging: 'none',        formatClass: 'percent',    zeroBaseline: 'contextual', zeroPad: 0 },\n\n    // --- Measure: SignedMeasure ---\n    Profit:             { t0: 'Measure', t1: 'SignedMeasure', visEncodings: ['quantitative'], aggRole: 'signed-additive', domainShape: 'open', diverging: 'conditional', formatClass: 'signed-currency',  zeroBaseline: 'meaningful', zeroPad: 0 },\n    PercentageChange:   { t0: 'Measure', t1: 'SignedMeasure', visEncodings: ['quantitative'], aggRole: 'intensive',       domainShape: 'open', diverging: 'conditional', formatClass: 'signed-percent',   zeroBaseline: 'contextual', zeroPad: 0.05 },\n    Sentiment:          { t0: 'Measure', t1: 'SignedMeasure', visEncodings: ['quantitative'], aggRole: 'intensive',       domainShape: 'open', diverging: 'inherent',    formatClass: 'signed-decimal',   zeroBaseline: 'meaningful', zeroPad: 0 },\n    Correlation:        { t0: 'Measure', t1: 'SignedMeasure', visEncodings: ['quantitative'], aggRole: 'intensive',       domainShape: 'bounded', diverging: 'inherent', formatClass: 'signed-decimal',   zeroBaseline: 'meaningful', zeroPad: 0 },\n\n    // --- Measure: GenericMeasure ---\n    Count:         { t0: 'Measure', t1: 'GenericMeasure', visEncodings: ['quantitative'],  aggRole: 'additive',   domainShape: 'open',    diverging: 'none',        formatClass: 'integer',    zeroBaseline: 'meaningful', zeroPad: 0 },\n    Number:        { t0: 'Measure', t1: 'GenericMeasure', visEncodings: ['quantitative'],  aggRole: 'additive',   domainShape: 'open',    diverging: 'none',        formatClass: 'decimal',    zeroBaseline: 'meaningful', zeroPad: 0 },\n\n    // --- Discrete ---\n    Rank:          { t0: 'Discrete', t1: 'Rank',  visEncodings: ['ordinal'],               aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'integer',    zeroBaseline: 'arbitrary', zeroPad: 0.08 },\n    Score:         { t0: 'Discrete', t1: 'Score', visEncodings: ['quantitative', 'ordinal'], aggRole: 'intensive', domainShape: 'bounded', diverging: 'conditional', formatClass: 'decimal',    zeroBaseline: 'contextual', zeroPad: 0.05 },\n    Rating:        { t0: 'Discrete', t1: 'Score', visEncodings: ['quantitative', 'ordinal'], aggRole: 'intensive', domainShape: 'bounded', diverging: 'conditional', formatClass: 'decimal',    zeroBaseline: 'contextual', zeroPad: 0.05 },\n    Index:         { t0: 'Discrete', t1: 'Index', visEncodings: ['ordinal'],               aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'integer',    zeroBaseline: 'arbitrary', zeroPad: 0.08 },\n    ID:            { t0: 'Identifier', t1: 'ID',  visEncodings: ['nominal'],               aggRole: 'identifier', domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'arbitrary', zeroPad: 0 },\n\n    // --- Geographic ---\n    Latitude:      { t0: 'Geographic', t1: 'GeoCoordinate', visEncodings: ['quantitative', 'geographic'], aggRole: 'dimension', domainShape: 'fixed', diverging: 'none', formatClass: 'decimal',    zeroBaseline: 'arbitrary', zeroPad: 0.02 },\n    Longitude:     { t0: 'Geographic', t1: 'GeoCoordinate', visEncodings: ['quantitative', 'geographic'], aggRole: 'dimension', domainShape: 'fixed', diverging: 'none', formatClass: 'decimal',    zeroBaseline: 'arbitrary', zeroPad: 0.02 },\n    Country:       { t0: 'Geographic', t1: 'GeoPlace', visEncodings: ['nominal'],         aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    State:         { t0: 'Geographic', t1: 'GeoPlace', visEncodings: ['nominal'],         aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    City:          { t0: 'Geographic', t1: 'GeoPlace', visEncodings: ['nominal'],         aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    Region:        { t0: 'Geographic', t1: 'GeoPlace', visEncodings: ['nominal'],         aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    Address:       { t0: 'Geographic', t1: 'GeoPlace', visEncodings: ['nominal'],         aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    ZipCode:       { t0: 'Geographic', t1: 'GeoPlace', visEncodings: ['nominal'],         aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n\n    // --- Categorical: Entity ---\n    PersonName:    { t0: 'Categorical', t1: 'Entity', visEncodings: ['nominal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    Company:       { t0: 'Categorical', t1: 'Entity', visEncodings: ['nominal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    Product:       { t0: 'Categorical', t1: 'Entity', visEncodings: ['nominal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    Category:      { t0: 'Categorical', t1: 'Entity', visEncodings: ['nominal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    Name:          { t0: 'Categorical', t1: 'Entity', visEncodings: ['nominal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n\n    // --- Categorical: Coded ---\n    Status:        { t0: 'Categorical', t1: 'Coded', visEncodings: ['nominal'],            aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    Type:          { t0: 'Categorical', t1: 'Coded', visEncodings: ['nominal'],            aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    Boolean:       { t0: 'Categorical', t1: 'Coded', visEncodings: ['nominal'],            aggRole: 'dimension',  domainShape: 'fixed',   diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    Direction:     { t0: 'Categorical', t1: 'Coded', visEncodings: ['ordinal', 'nominal'], aggRole: 'dimension',  domainShape: 'cyclic',  diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n\n    // --- Categorical: Binned ---\n    Range:         { t0: 'Categorical', t1: 'Binned', visEncodings: ['ordinal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    AgeGroup:      { t0: 'Categorical', t1: 'Binned', visEncodings: ['ordinal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n\n    // --- Fallbacks ---\n    String:        { t0: 'Categorical', t1: 'Entity', visEncodings: ['nominal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n    Unknown:       { t0: 'Categorical', t1: 'Entity', visEncodings: ['nominal'],           aggRole: 'dimension',  domainShape: 'open',    diverging: 'none',        formatClass: 'plain',      zeroBaseline: 'none', zeroPad: 0 },\n};\n\n/** Default entry for unrecognized types */\nconst UNKNOWN_ENTRY: TypeRegistryEntry = {\n    t0: 'Categorical', t1: 'Entity',\n    visEncodings: ['nominal'],\n    aggRole: 'dimension',\n    domainShape: 'open',\n    diverging: 'none',\n    formatClass: 'plain',\n    zeroBaseline: 'none',\n    zeroPad: 0,\n};\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/** Look up a semantic type in the registry. Falls back to UNKNOWN_ENTRY. */\nexport function getRegistryEntry(semanticType: string): TypeRegistryEntry {\n    return TYPE_REGISTRY[semanticType] ?? UNKNOWN_ENTRY;\n}\n\n/** Check whether a semantic type string is explicitly registered. */\nexport function isRegistered(semanticType: string): boolean {\n    return semanticType in TYPE_REGISTRY;\n}\n\n/**\n * Get all registered type names.\n * Useful for validation or iterating over the type system.\n */\nexport function getRegisteredTypes(): string[] {\n    return Object.keys(TYPE_REGISTRY);\n}\n"
  },
  {
    "path": "src/lib/agents-chart/core/types.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ZeroDecision, ColorSchemeRecommendation } from './semantic-types';\nimport type { LabelSizingDecision } from './decisions';\nimport type { SemanticAnnotation, FormatSpec, DomainConstraint, TickConstraint } from './field-semantics';\n\n/**\n * Core types for the chart engine library.\n * No React or UI framework dependencies — pure TypeScript.\n */\n\n// ---------------------------------------------------------------------------\n// Data Types\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Channel & Encoding\n// ---------------------------------------------------------------------------\n\nexport const channels = [\n    \"x\", \"y\", \"x2\", \"y2\", \"id\", \"color\", \"opacity\", \"size\", \"shape\", \"strokeDash\", \"column\",\n    \"row\", \"latitude\", \"longitude\", \"radius\", \"detail\", \"group\",\n    \"open\", \"high\", \"low\", \"close\", \"angle\",\n] as const;\n\nexport const channelGroups: Record<string, string[]> = {\n    \"\": [\"x\", \"x2\", \"y\", \"y2\", \"latitude\", \"longitude\", \"id\", \"radius\", \"detail\"],\n    \"legends\": [\"color\", \"group\", \"size\", \"shape\", \"text\", \"opacity\", \"strokeDash\"],\n    \"price\": [\"open\", \"high\", \"low\", \"close\"],\n    \"facets\": [\"column\", \"row\"],\n};\n\n/**\n * Encoding definition for a single channel, using field names directly.\n * This is the library-level encoding — no fieldID indirection.\n */\nexport interface ChartEncoding {\n    field?: string;\n    type?: \"quantitative\" | \"nominal\" | \"ordinal\" | \"temporal\";\n    aggregate?: 'count' | 'sum' | 'average';\n    sortOrder?: \"ascending\" | \"descending\";\n    sortBy?: string;\n    scheme?: string;\n}\n\n// ============================================================================\n// Phase 0: Semantic Resolution Types\n// ============================================================================\n\n/**\n * Everything Phase 0 decides for a single channel.\n *\n * Combines the original ChartEncoding (user intent) with resolved\n * decisions derived from semantic type, data values, and channel context.\n * All downstream phases (layout, assembly, instantiation) read this —\n * no nested FieldSemantics reference needed.\n */\nexport interface ChannelSemantics {\n    // --- Identity ---\n    /** Field name bound to this channel */\n    field: string;\n    /** The semantic annotation for this field */\n    semanticAnnotation: SemanticAnnotation;\n\n    // --- Encoding type ---\n    /**\n     * Final encoding type for this channel.\n     * Resolved from semantic type + data characteristics + channel rules.\n     */\n    type: 'quantitative' | 'nominal' | 'ordinal' | 'temporal';\n\n    // --- Formatting ---\n    /** Axis/legend number format */\n    format?: FormatSpec;\n    /** Tooltip format (typically higher precision) */\n    tooltipFormat?: FormatSpec;\n    /**\n     * Temporal format string (temporal fields on any channel).\n     * E.g., \"%Y\", \"%b %d\", \"%H:%M\".\n     */\n    temporalFormat?: string;\n\n    // --- Aggregation ---\n    /** Default aggregate function when used as a measure */\n    aggregationDefault?: 'sum' | 'average';\n\n    // --- Scale ---\n    /**\n     * Zero-baseline decision (positional quantitative channels only).\n     * Present only on 'x' and 'y' channels with type 'quantitative'.\n     */\n    zero?: ZeroDecision;\n    /** Recommended scale type */\n    scaleType?: 'linear' | 'log' | 'sqrt' | 'symlog';\n    /** Whether to apply \"nice\" rounding to domain endpoints */\n    nice?: boolean;\n    /** Domain bounds constraint */\n    domainConstraint?: DomainConstraint;\n    /** Tick mark constraints */\n    tickConstraint?: TickConstraint;\n\n    // --- Ordering ---\n    /**\n     * Canonical ordinal sort order for this field's values.\n     * E.g., month names, day-of-week, quarters.\n     */\n    ordinalSortOrder?: string[];\n    /** Whether the canonical order is cyclic (wraps around) */\n    cyclic?: boolean;\n    /** Whether the axis should be reversed (e.g., Rank: 1 at top) */\n    reversed?: boolean;\n    /** Default sort direction */\n    sortDirection?: 'ascending' | 'descending';\n\n    // --- Color ---\n    /** Color scheme recommendation (color channel only) */\n    colorScheme?: ColorSchemeRecommendation;\n\n    // --- Histogram ---\n    /** Whether this field benefits from binning */\n    binningSuggested?: boolean;\n\n    // --- Stacking ---\n    /** Whether values can be stacked, and how */\n    stackable?: 'sum' | 'normalize' | false;\n}\n\n/** Phase 0 output: one entry per channel. */\nexport type SemanticResult = Record<string, ChannelSemantics>;\n\n// ============================================================================\n// Phase 1: Layout Types\n// ============================================================================\n\n/**\n * How the template's primary mark encodes its quantitative value\n * on the positional (value) axis.\n *\n * Grounded in perceptual accuracy ranking:\n *   1. Position along a common scale — most accurate\n *   2. Length from a shared baseline\n *   3. Area\n *   4. Color saturation / luminance\n *\n * Drives zero-baseline, scale tightness, and compression behavior.\n */\nexport type MarkCognitiveChannel = 'position' | 'length' | 'area' | 'color';\n\n/**\n * Template's layout intent — returned by declareLayoutMode().\n */\nexport interface LayoutDeclaration {\n    /**\n     * Which axes allocate fixed bands per data position.\n     * Banded axes use the spring model; non-banded use gas pressure.\n     */\n    axisFlags?: {\n        x?: { banded: boolean };\n        y?: { banded: boolean };\n    };\n\n    /**\n     * Resolved encoding types after any template-driven type conversion.\n     * E.g., detectBandedAxis may convert Q→O for a bar chart axis.\n     * These override the Phase 0 decisions for layout purposes.\n     */\n    resolvedTypes?: Record<string, 'nominal' | 'ordinal' | 'quantitative' | 'temporal'>;\n\n    /**\n     * Template-specific overrides to layout parameters.\n     */\n    paramOverrides?: Partial<AssembleOptions>;\n\n    /**\n     * Which axes use binned encoding (e.g. histogram).\n     * The assembler auto-detects this from template.encoding if not set.\n     */\n    binnedAxes?: Record<string, boolean | { maxbins?: number }>;\n\n    /**\n     * Custom overflow strategy for deciding which discrete values to keep\n     * when a channel overflows. If not provided, the default strategy is used.\n     *\n     * @param channel       The overflowing channel ('x', 'y', 'color', etc.)\n     * @param fieldName     The field on that channel\n     * @param uniqueValues  All unique values in the data for that field\n     * @param maxToKeep     Maximum number of values that fit\n     * @param context       Abstract context with data and channel info\n     * @returns             The values to keep (in display order)\n     */\n    overflowStrategy?: OverflowStrategy;\n}\n\n/**\n * Custom overflow strategy function type.\n * Returns the values to keep when a channel has too many discrete values.\n */\nexport type OverflowStrategy = (\n    channel: string,\n    fieldName: string,\n    uniqueValues: any[],\n    maxToKeep: number,\n    context: OverflowStrategyContext,\n) => any[];\n\n/** Context passed to overflow strategy functions. */\nexport interface OverflowStrategyContext {\n    /** Full data table */\n    data: any[];\n    /** Per-channel semantic info */\n    channelSemantics: Record<string, ChannelSemantics>;\n    /** Original user encodings (for sort info) */\n    encodings: Record<string, ChartEncoding>;\n    /** Mark types present in the template */\n    allMarkTypes: Set<string>;\n}\n\n/**\n * Per-channel maximum values that can fit on the canvas.\n *\n * Computed once by `computeChannelBudgets` using the most conservative\n * assumptions (minStep, minSubplotSize, maxStretch).  Passed to\n * `filterOverflow` so it only needs to decide *which* values to keep\n * and filter rows — no layout math.\n *\n * Pipeline:  computeChannelBudgets → filterOverflow → computeLayout\n */\nexport interface ChannelBudgets {\n    /** Maximum discrete values to keep per channel.\n     *  Channels not present here are uncapped (`Infinity`). */\n    maxValues: Record<string, number>;\n    /** Facet grid decision (if facet channels exist) */\n    facetGrid?: FacetGridResult;\n}\n\n/** Result of overflow filtering. */\nexport interface OverflowResult {\n    /** Data after removing overflow rows */\n    filteredData: any[];\n    /** Nominal value counts per channel (post-overflow) */\n    nominalCounts: Record<string, number>;\n    /** Detailed truncation info for overflow styling */\n    truncations: TruncationWarning[];\n    /** Warning messages for the UI */\n    warnings: ChartWarning[];\n}\n\n/**\n * Result of facet grid computation (from computeFacetGrid).\n *\n * Decides the visual grid layout (including column-only wrapping)\n * and the maximum number of unique values to keep per facet channel.\n *\n * Pipeline:  computeFacetGrid → filterOverflow (uses caps) → computeLayout (uses grid)\n */\nexport interface FacetGridResult {\n    /** Visual columns per row (after wrapping for column-only) */\n    columns: number;\n    /** Visual rows (after wrapping for column-only) */\n    rows: number;\n    /** Max unique values to keep for the column channel */\n    maxColumnValues: number;\n    /** Max unique values to keep for the row channel */\n    maxRowValues: number;\n}\n\n/**\n * Describes one axis that was truncated due to overflow.\n */\nexport interface TruncationWarning {\n    /** Severity level for UI display */\n    severity: 'warning';\n    /** Machine-readable code */\n    code: 'overflow';\n    /** Human-readable message */\n    message: string;\n    /** Which channel overflowed ('x', 'y', 'color', etc.) */\n    channel: string;\n    /** Field name on the overflowing axis */\n    field: string;\n    /** Values retained (in display order) */\n    keptValues: any[];\n    /** Number of items omitted */\n    omittedCount: number;\n    /** Placeholder string to append to the axis domain */\n    placeholder: string;\n}\n\n/**\n * Phase 1 output: all layout decisions.\n *\n * LayoutResult is **target-agnostic** — it describes abstract dimensions\n * and step sizes that any rendering backend can consume.  It is the\n * backend's responsibility to translate these values into its own\n * coordinate system:\n *\n *   subplotWidth / subplotHeight\n *     The intended data-area (plot area) size in pixels.  This does NOT\n *     include axis labels, titles, legends, or margins.  Each backend\n *     must add its own margins/padding around this area.\n *\n *   xStep / yStep\n *     Pixel distance per discrete position on each axis.  A backend\n *     rendering bars should derive bar width from step and stepPadding.\n *     VL uses `width: {step: N}` natively; ECharts must compute\n *     explicit barWidth / barCategoryGap.\n *\n *   stepPadding\n *     Fraction of each step reserved for inter-category spacing (0–1).\n *     Usable bar width = step × (1 − stepPadding).\n *\n *   facet (columns / rows / subplot sizes)\n *     When faceting is active, the subplot dimensions are already\n *     divided for the facet grid.  Each backend is responsible for\n *     facet wrapping (e.g. column-only → wrapped rows), panel\n *     positioning, header labels, and shared/per-panel axis titles.\n *\n * Backends should NOT modify LayoutResult.  They read it and translate\n * to their native format (VL encoding props, ECharts grid/axis config, etc.).\n */\nexport interface LayoutResult {\n    /** Final subplot width in px (after stretch) */\n    subplotWidth: number;\n    /** Final subplot height in px (after stretch) */\n    subplotHeight: number;\n\n    /** Computed step size for X axis (px per discrete position) */\n    xStep: number;\n    /** Computed step size for Y axis (px per discrete position) */\n    yStep: number;\n\n    /** Whether the step size is per-item or per-group. */\n    xStepUnit?: 'item' | 'group';\n    yStepUnit?: 'item' | 'group';\n\n    /** Number of banded continuous items on each axis (0 if not banded-continuous) */\n    xContinuousAsDiscrete: number;\n    yContinuousAsDiscrete: number;\n\n    /** Number of nominal/ordinal items on each axis */\n    xNominalCount: number;\n    yNominalCount: number;\n\n    /** Label sizing decisions per axis */\n    xLabel: LabelSizingDecision;\n    yLabel: LabelSizingDecision;\n\n    /** Facet layout (if applicable) */\n    facet?: {\n        columns: number;\n        rows: number;\n        subplotWidth: number;\n        subplotHeight: number;\n    };\n\n    /**\n     * Gap between facet panels in px, as set by the backend.\n     * Backends use this to configure their own spacing\n     * (VL config.facet.spacing, ECharts GAP, etc.).\n     */\n    effectiveFacetGap: number;\n\n    /**\n     * Inter-category padding fraction (0–1) used by the layout engine.\n     * Renderers (especially ECharts) should use this to size bars:\n     *   barWidth = step × (1 − stepPadding)\n     */\n    stepPadding: number;\n\n    /** Items truncated due to overflow */\n    truncations: TruncationWarning[];\n}\n\n// ============================================================================\n// Phase 2: Instantiation Types\n// ============================================================================\n\n/**\n * Context passed to template instantiate() and to the shared assembler's\n * Phase 2 logic. Combines semantic decisions, layout results, and original\n * inputs.\n */\nexport interface InstantiateContext {\n    /** Per-channel semantic decisions (Phase 0) */\n    channelSemantics: Record<string, ChannelSemantics>;\n\n    /** Layout decisions (Phase 1) */\n    layout: LayoutResult;\n\n    /** The data table (array of row objects, post-overflow filtering) */\n    table: any[];\n\n    /** Resolved VL encoding objects (built by assembler from Phase 0 decisions) */\n    resolvedEncodings: Record<string, any>;\n\n    /** Original user-level encodings */\n    encodings: Record<string, ChartEncoding>;\n\n    /** User-configured chart properties */\n    chartProperties?: Record<string, any>;\n\n    /** Target canvas dimensions */\n    canvasSize: { width: number; height: number };\n\n    /** Field name → semantic type (string or enriched annotation) */\n    semanticTypes: Record<string, string | SemanticAnnotation>;\n\n    /** Chart type name */\n    chartType: string;\n\n    /** Assembly options (layout tuning parameters from the caller) */\n    assembleOptions?: AssembleOptions;\n}\n\n\n\n// ---------------------------------------------------------------------------\n// Chart Template\n// ---------------------------------------------------------------------------\n\n/**\n * Defines a configurable property for a chart template.\n * Describes the value domain; the app decides how to render it.\n */\nexport type ChartPropertyDef = {\n    key: string;\n    label: string;\n} & (\n    | { type: 'continuous'; min: number; max: number; step?: number; defaultValue?: number }\n    | { type: 'discrete';  options: { value: any; label: string }[]; defaultValue?: any }\n    | { type: 'binary';    defaultValue?: boolean }\n);\n\n/**\n * Chart template definition — pure data, no UI/icon dependencies.\n * This is the reusable core that defines chart structure, encoding channels,\n * and processing logic.\n *\n * Three-phase pipeline hooks:\n *   1. declareLayoutMode — declare axis flags, type overrides, param overrides\n *   2. instantiate — build final spec from resolved encodings + layout\n */\nexport interface ChartTemplateDef {\n    /** Display name of the chart type, e.g. \"Scatter Plot\" */\n    chart: string;\n    /** Vega-Lite spec skeleton (mark + encoding structure) */\n    template: any;\n    /** Which encoding channels are available for this chart */\n    channels: string[];\n\n    /**\n     * How the primary mark encodes its quantitative value.\n     * Determines zero-baseline, scale tightness, and compression behavior.\n     *\n     * Examples:\n     *   - Bar, Histogram, Lollipop, Waterfall, Pyramid: 'length'\n     *   - Area, Streamgraph, Density: 'area'\n     *   - Line, Scatter, Boxplot, Candlestick, Strip: 'position'\n     *   - Heatmap: 'color'\n     */\n    markCognitiveChannel: MarkCognitiveChannel;\n\n    /**\n     * Phase 1a: Declare layout intent.\n     * Runs BEFORE layout computation.\n     *\n     * Inspects channel semantics and data to decide:\n     * - Which axes are banded (need spring model)\n     * - Any type conversions (Q→O for banded axis)\n     * - Layout parameter overrides (σ, step multiplier, etc.)\n     * Grouping (from group channel + discrete axis detection)\n     */\n    declareLayoutMode?: (\n        channelSemantics: Record<string, ChannelSemantics>,\n        table: any[],\n        chartProperties?: Record<string, any>,\n    ) => LayoutDeclaration;\n\n    /**\n     * Build the final spec from resolved encodings + layout.\n     * Runs AFTER layout computation.\n     *\n     * Receives the spec skeleton (deep clone of template),\n     * and a context with resolved encodings, semantic decisions,\n     * and layout result. Handles both encoding mapping and mark sizing.\n     *\n     * @param spec       The Vega-Lite spec skeleton (deep clone of template)\n     * @param context    Complete context with all phase outputs\n     */\n    instantiate: (\n        spec: any,\n        context: InstantiateContext,\n    ) => void;\n\n    /** Optional configurable properties for the chart type */\n    properties?: ChartPropertyDef[];\n\n    /**\n     * Optional post-processing hook.\n     * Called after instantiation and layout application, before the final\n     * result is returned.  Receives the assembled spec/option and the\n     * effective canvas size so the template can adjust visual parameters\n     * (e.g. symbol size, line width) proportionally.\n     */\n    postProcess?: (\n        spec: any,\n        context: InstantiateContext,\n    ) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Warnings\n// ---------------------------------------------------------------------------\n\n/** A warning produced during chart assembly */\nexport interface ChartWarning {\n    /** Warning severity */\n    severity: 'info' | 'warning' | 'error';\n    /** Short machine-readable warning code */\n    code: string;\n    /** Human-readable description */\n    message: string;\n    /** Optional: which channel(s) or field(s) triggered the warning */\n    channel?: string;\n    field?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Unified Assembly Input\n// ---------------------------------------------------------------------------\n\n/**\n * Unified input for all chart assembly functions (Vega-Lite, ECharts, Chart.js).\n *\n * Instead of passing multiple positional arguments, callers provide a single\n * JSON-serializable object with four top-level keys:\n *\n * ```ts\n * const result = assembleVegaLite({\n *   data: { values: myRows },\n *   semantic_types: { weight: 'Quantity', origin: 'Country' },\n *   chart_spec: {\n *     chartType: 'Scatter Plot',\n *     encodings: { x: { field: 'weight' }, y: { field: 'mpg' } },\n *     canvasSize: { width: 400, height: 300 },\n *   },\n *   options: { addTooltips: true },\n * });\n * ```\n */\nexport interface ChartAssemblyInput {\n    /**\n     * Data source — either inline rows or a URL to fetch.\n     *\n     * - `{ values: any[] }` — an array of row objects (like Vega-Lite `data.values`).\n     * - `{ url: string }`   — a URL pointing to a JSON or CSV resource.\n     *   The assembler will resolve this internally before processing.\n     *\n     * At least one of `values` or `url` must be provided.\n     */\n    data: { values: any[]; url?: never } | { url: string; values?: never };\n\n    /**\n     * Per-column semantic type annotations.\n     *\n     * Maps field names to semantic type strings (e.g., `\"Quantity\"`, `\"Country\"`,\n     * `\"Year\"`, `\"Percentage\"`). These drive encoding type resolution, zero-baseline\n     * decisions, color schemes, formatting, and more.\n     *\n     * Fields not listed here fall back to `inferVisCategory()` which inspects\n     * raw data values.\n     */\n    semantic_types?: Record<string, string | SemanticAnnotation>;\n\n    /**\n     * Chart specification — describes *what* to draw.\n     */\n    chart_spec: {\n        /** Template name, e.g. `\"Scatter Plot\"`, `\"Bar Chart\"` */\n        chartType: string;\n        /** Channel → encoding map (e.g., `{ x: { field: 'weight' }, y: { field: 'mpg' } }`) */\n        encodings: Record<string, ChartEncoding>;\n        /** Target canvas size in pixels (default: `{ width: 400, height: 320 }`) */\n        canvasSize?: { width: number; height: number };\n        /** Template-specific configurable properties (e.g., bar corner radius, show labels) */\n        chartProperties?: Record<string, any>;\n    };\n\n    /**\n     * Options for the assembler — layout tuning, tooltips, etc.\n     * All fields are optional and have sensible defaults.\n     */\n    options?: AssembleOptions;\n}\n\n// ---------------------------------------------------------------------------\n// Assembly Options\n// ---------------------------------------------------------------------------\n\n/**\n * Options for the chart assembly function.\n * Includes layout tuning parameters — all have sensible defaults.\n */\nexport interface AssembleOptions {\n    /** Whether to add tooltips to the chart (default: false) */\n    addTooltips?: boolean;\n    /**\n     * Fraction of each step reserved for inter-category padding (0–1).\n     * VL pads *inside* the step (band = step × (1 − padding)), so this\n     * value should match VL's paddingInner.  ECharts pads *outside* the\n     * band, so the layout engine passes this through so ECharts can\n     * compute barWidth = step × (1 − stepPadding) explicitly.\n     *\n     * Default: 0.1 (matching VL's default band paddingInner).\n     */\n    stepPadding?: number;\n    /** Power-law exponent for discrete axis stretch (default: 0.5) */\n    elasticity?: number;\n    /**\n     * Maximum total stretch multiplier cap (default: 2).\n     *\n     * This is a **unified** budget: the combined stretch from facet\n     * layout AND discrete/banded axis sizing must stay within this\n     * factor.  For example, with maxStretch=2 and a 400px canvas,\n     * the total chart width never exceeds 800px regardless of how\n     * many facet columns or discrete axis items there are.\n     */\n    maxStretch?: number;\n    /** Power-law exponent for facet subplot stretch — lower = more conservative (default: 0.3) */\n    facetElasticity?: number;\n    /** Minimum pixels per discrete axis item (default: 6) */\n    minStep?: number;\n    /** Maximum number of distinct color values before overflow truncation (default: 24) */\n    maxColorValues?: number;\n    /** Minimum facet subplot size in px (default: 60) */\n    minSubplotSize?: number;\n    /**\n     * Fixed overhead in px for axis labels, titles, legend, etc.\n     * Subtracted once from the total canvas budget (not per-panel).\n     * Each backend sets its own default; core uses { width: 0, height: 0 }.\n     */\n    facetFixedPadding?: { width: number; height: number };\n    /**\n     * Gap in px between adjacent facet panels (spacing, headers).\n     * Used directly by the core layout engine to compute subplot sizes\n     * and max canvas dimensions.\n     * Each backend sets its own value (VL ≈ 10, ECharts ≈ 14); core uses 0.\n     */\n    facetGap?: number;\n    /** Multiplier for the default step size (default: 1). Values >1 give more room per category. */\n    defaultStepMultiplier?: number;\n    /**\n     * When true, continuous X and Y axes stretch together using the\n     * larger of the two per-axis stretch factors. This preserves the\n     * aspect ratio of the data space. (default: false — axes stretch\n     * independently based on their own density.)\n     */\n    maintainContinuousAxisRatio?: boolean;\n    /**\n     * Gas-pressure tuning for continuous axes (default: scatter-plot settings).\n     * - A single number overrides markCrossSection (σ) for both axes.\n     * - An object allows per-axis σ plus optional elasticity / maxStretch:\n     *   `{ x: 100, y: 0, elasticity: 0.7, maxStretch: 2 }`\n     *   x/y = 0 means \"don't stretch this axis\".\n     *   Useful for line/area charts where horizontal crowding matters\n     *   far more than vertical.\n     */\n    continuousMarkCrossSection?: number | {\n        x: number;\n        y: number;\n        /** Per-axis stretch elasticity (default: 0.3). Higher → more responsive. */\n        elasticity?: number;\n        /** Per-axis stretch cap (default: 1.5). */\n        maxStretch?: number;\n        /**\n         * Which axis uses series-count-based pressure instead of pixel counting.\n         * - 'x' or 'y': that axis uses nSeries × σ / dim for pressure.\n         * - 'auto': auto-detect — in 2D (both continuous), defaults to 'y';\n         *   in 1D (one continuous + one discrete), uses the continuous axis.\n         * The σ for the series axis is used directly (not sqrt'd) since series\n         * count is inherently 1D.\n         */\n        seriesCountAxis?: 'x' | 'y' | 'auto';\n    };\n}\n"
  },
  {
    "path": "src/lib/agents-chart/docs/README.md",
    "content": "# Agents-Chart: A Visualization Library for Agent Developers\n\n> You're building an AI agent that creates charts. Every approach you've\n> tried is brittle — prompt-engineered Vega-Lite that breaks when users\n> edit fields, sizing heuristics that fail on new data shapes, retry\n> loops that burn tokens. **Agents-chart** is a library that eliminates\n> this brittleness.\n>\n> For the semantic type system, see\n> [design-semantics.md](design-semantics.md). For the axis layout\n> compression models, see\n> [design-stretch-model.md](design-stretch-model.md).\n\n---\n\n## TL;DR\n\nIf you're building an AI agent that creates visualizations, you face a\nfundamental problem. You can have your agent generate simple chart specs\nthat users can edit — but they look bad (wrong sizing, misleading\nencodings). Or you can have it generate polished specs — but they're\nbrittle (hard-coded values break on every field swap, and every edit\nrequires another LLM call). Either way, you're encoding design knowledge\nin prompts — and **prompts are not a reliable way to encode design\nknowledge.** Your agent may or may not follow them, and the result varies\nacross models, prompt versions, and even runs. Worse, if you need to\nsupport multiple charting backends (Vega-Lite for composition, ECharts\nfor interactivity, Chart.js for lightweight embedding), **every prompt,\nevery example, every post-processing rule must be duplicated per\nbackend** — multiplying the brittleness.\n\n**Agents-chart** is a library that moves design knowledge out of your\nprompts and into deterministic code. Instead of generating low-level\ncharting code, your agent outputs a minimal semantic description: chart\ntype, field assignments, and a **semantic type** per field (e.g.,\n`Revenue`, `Rank`, `CategoryCode`). Agents-chart's compiler\ndeterministically derives all low-level parameters — axis sizing,\nzero-baseline behavior, formatting, color schemes, bespoke mark\ntemplates — producing charts that look good *and* stay editable without\ncalling your agent again. The quality is consistent because it comes from\nthe library, not from the model.\n\nBecause the semantic layer is **library-agnostic**, the same spec compiles\nto multiple rendering backends — Vega-Lite, ECharts, Chart.js, and GoFish\ntoday, with Plotly or D3 tomorrow — without re-deriving any design rules\nand without duplicating any prompts. The expensive work (semantic\nreasoning, layout computation) is done once; only the final instantiation\nstep differs per backend.\n\n---\n\n## The Problem\n\n### What you deal with today\n\nYou're building an agent that needs to create charts. Maybe it's a data\nanalysis copilot, a dashboard generator, or an automated reporting\npipeline. At some point your agent has to produce a visualization — and\nthat's where the brittleness starts.\n\nThe typical approach: your agent generates Vega-Lite (or ECharts options,\nor Plotly traces) directly. You write prompt templates with examples,\nadd post-processing logic for edge cases, build retry loops for malformed\noutput. It works for your demo. Then real users arrive with real data,\nand the charts break in ways you didn't anticipate.\n\nHere is what goes wrong:\n\n1. **Inconsistency across runs.** Your agent produces variable output\n   quality — incorrect encodings, broken layouts, poor aesthetic defaults.\n   You tune prompts for one chart type and break another. Even with\n   detailed prompts specifying exact sizing rules, formatting conventions,\n   and encoding guidelines, **your agent may or may not follow them** —\n   and the degree of compliance varies across models, prompt versions,\n   context length, and even individual runs. Weaker models (the ones you\n   want to use for cost) struggle with anything beyond basic charts; even\n   frontier models fail on composition, faceting, and layered designs.\n   Design knowledge encoded in prompts is inherently unreliable.\n\n2. **The quality–editability trap.** If your agent generates simple code,\n   users can edit it (swap a field, change chart type) — but the chart\n   looks mediocre. If your agent generates polished code, the chart looks\n   great — but every user edit breaks it, forcing another round-trip to\n   your agent. You can't have both, and neither option makes users happy.\n\n3. **Expensive and slow for what it does.** Only frontier models\n   *sometimes* produce correct specs for non-trivial charts, because the\n   parameter space (axis types, domain settings, sizing, formatting, mark\n   config) is large and inter-dependent. Even then, compliance with your\n   design guidelines is probabilistic — you're paying frontier-model\n   prices for output that still needs validation and retry. Your agent is\n   spending its most expensive tokens on visualization plumbing instead of\n   the data computation that actually matters.\n\n4. **Ugly failure modes that you can't catch.** When your agent's output\n   breaks, the chart doesn't degrade gracefully — it produces extreme\n   dimensions (10,000 px wide from high-cardinality facets), crashes the\n   renderer, or silently misrepresents the data. The charting library\n   gives only low-level errors that neither you, your users, nor your\n   agent can act on.\n\n### The brittleness cascade\n\nEvery fix you apply to your agent's visualization pipeline creates new\nproblems:\n\n| What you try | What breaks next |\n|-------------|------------------|\n| Add sizing logic to prompts | Hard-coded for this data shape; breaks on different cardinality |\n| Add more VL examples to prompts | Token count balloons; model cost rises; unrelated examples confuse the model |\n| Post-process the output (fix widths, rotate labels) | You're now maintaining VL manipulation code that couples to every chart type |\n| Validate output and retry on failure | More LLM calls, more latency, more cost; retry loops don't fix *semantic* errors (wrong encoding type) |\n| Constrain output with JSON schema | Schema can enforce structure but not *correctness* — `{\"type\": \"quantitative\"}` is valid JSON for a CategoryCode field but produces a meaningless chart |\n| Support a second charting library (e.g., ECharts for interactivity) | All your prompt templates, post-processing, and validation must be duplicated for the new API |\n\nThis is the **agent developer's treadmill**: you keep patching\nvisualization edge cases instead of building the data analysis features\nthat differentiate your product.\n\n### Why the obvious approaches don't work\n\n#### Approach 1: Have your agent generate minimal VL (rely on defaults)\n\n**Result: The spec is simple and editable, but the charts look bad —\nand bespoke charts are impossible.**\n\nThis is the \"keep it simple\" approach: your agent generates just field\nnames, mark type, and data. The spec is easy for users to edit — swap a\nfield name and the chart re-renders. But the *quality* of what renders is\npoor, because VL's defaults are generic heuristics that ignore both data\ncharacteristics and semantic meaning.\n\n**Sizing failures** — the chart is the wrong size for the data:\n\n| Scenario | VL default | What's wrong |\n|----------|-----------|-------------|\n| **Bar chart, 80 products** | `step: 20` → 1600 px wide | Overflows any container. Forces horizontal scrolling; unusable without a giant monitor. |\n| **Grouped bar, 30 × 5** | 30 × 5 × 20 = 3000 px | Grouped bars multiply the problem: each product group has 5 sub-bars at 20 px each. |\n| **Bars on temporal X (daily)** | VL doesn't auto-band temporal | Bars overlap or collapse to 1 px. Temporal axes are continuous; VL has no step-based sizing for them. |\n| **Line chart, 15 series** | Fixed `height: 300` | 15 lines in 300 px → ~20 px per series. Unreadable spaghetti. |\n| **Scatter, 2000 points** | Fixed 400 × 300 | Total mark area (156K px²) exceeds canvas area (120K px²). A solid blob. |\n| **80 product labels** | No auto-rotation | Labels overlap into an unreadable smear. |\n\n**Composition makes it worse.** These problems compound — every\nsingle-view sizing failure gets multiplied by the number of facets, and\n`xOffset` (grouped bars) adds another multiplicative factor:\n\n| Scenario | VL default | What's wrong |\n|----------|-----------|-------------|\n| **80 products, 4 facets** | 4 × 1600 px subplots | 6400 px total — comparison between facets is impossible because they're screens apart. |\n| **Grouped bar, 30 × 5, faceted × 4** | Facet × xOffset × step all multiply | 4 facets × 30 products × 5 groups × 20 px = 12,000 px. No way to express \"fit everything within 800 px.\" |\n| **Facet columns + subplot width** | Must hard-code both `columns` and `width` | Interdependent: 4 columns → each subplot 190 px (unreadable). 2 columns → wider but taller. VL has no coordination mechanism. |\n\n**Semantic failures** — the chart misrepresents the data:\n\nThe same number can mean completely different things, and VL defaults\ncan't tell the difference.\n\n`17329487239` could be a **Unix timestamp**, a **Customer ID**, **Revenue\n($)**, or a **sensor reading** — each requiring different encoding type,\nzero behavior, formatting, and color scheme. VL sees a number and defaults\nto `quantitative`. If it's a customer ID, you get a continuous axis from\n0 to 17 billion with a single dot. If it's a timestamp, you get raw\nnumbers instead of dates.\n\n`1, 2, 3, 4, 5` could be **Rank**, **Star rating**, **Quantity**,\n**Category code** (1=North, 2=South…), or a **Likert score** — each\nneeding different zero behavior, scale direction, tick formatting, and\nchart compatibility. VL treats all as `quantitative, zero: true,\nascending`. For Rank, this means rank 1 (best) at the bottom, zero\nwasted, ticks at \"2.5\" — absurd.\n\nYou can't solve this in your agent's prompt or in post-processing.\nSimple heuristics don't help: Rank, Rating, Quantity, Category code,\nand Likert are all integers with identical cardinality. The only way to\nknow the correct encoding is to know what the data *means*.\n\n**Bespoke charts are out of reach.** This approach can't produce bump\ncharts, candlestick charts, streamgraphs, waterfall charts, or radar\nplots. Minimal VL generation only covers basic bar / line / scatter / area.\n\n**Bottom line:** The simple approach keeps your agent cheap and fast, but\nyour users get wrong-sized, semantically misleading charts limited to\nbasic types.\n\n#### Approach 2: Have your agent generate polished VL\n\n**Result: The charts look great once, but every user edit breaks them —\nand your agent gets called for every interaction.**\n\nThis is the \"invest tokens in quality\" approach. Your agent generates\ndetailed VL with tuned sizing, formatting, and encoding. It achieves\nquality precisely by **hard-coding values tuned to the current data**:\n\n| Hard-coded value | Breaks when… |\n|------------------|-------------|\n| `\"width\": 800` | User filters to 5 products (massive empty bars) or adds 200 (unreadable) |\n| `\"labelAngle\": -45` | User swaps X to Region (3-letter labels don't need rotation) |\n| `\"domain\": [0, 950000]` | User swaps Y to Temperature (wrong by 6 orders of magnitude) |\n| `\"mark.size\": 8` | User switches to scatter with 1000 points (dots overlap completely) |\n| `\"scale.zero\": true` | User swaps Y to Rank (zero-based rank wastes space, reads inverted) |\n| `\"format\": \"$,.0f\"` | User swaps Y to Percentage (shows \"$48\" instead of \"48%\") |\n\nThe better your agent's output, the *more* hard-coded constants it\ncontains, and the *harder* the chart is to edit. This creates a vicious\ncycle: **high-quality generation → brittle spec → forced regeneration\non every edit → high cost and latency → poor exploration experience.**\nAs the agent developer, you're paying for this cycle in API costs, user\nfrustration, and engineering time spent on retry logic.\n\n**The parameters live at different levels and must coordinate.** A polished\nVL spec scatters its configuration across multiple layers that all couple\nto each other:\n\n| Level | Examples | Coordinates with |\n|-------|---------|-----------------|\n| **Global** | `width`, `height`, `autosize`, `padding` | Step size, facet columns, mark size |\n| **Per-axis** | `scale.zero`, `scale.domain`, `scale.type`, `axis.format`, `axis.labelAngle` | Global width (label overflow), mark type (zero behavior), encoding type |\n| **Per-mark** | `mark.size`, `mark.strokeWidth`, `mark.opacity` | Global dimensions (overlap), data cardinality |\n| **Composition** | `facet.columns`, `resolve.scale`, `xOffset.step` | Global width (subplot size), per-axis step (bar width), label config |\n\nEditing any one parameter without adjusting the others produces a\nbroken chart. Change `width` from 800 to 400? The label angle, step\nsize, and font size were tuned for 800 — now labels overlap. Add a\nfacet column? The per-subplot width halves, so bars become unreadable\nunless you also shrink the step, rotate labels, and adjust font size.\nSwitch from bar to scatter? `scale.zero`, `mark.size`, and `domain`\nall need updating, but `width` and `labelAngle` might also change\nbecause scatter points have different spatial needs than bars.\n\nThis coordination is **the core brittleness problem for agent developers.**\nYou can't encode it in a prompt. A rule-based post-processor would need\nto enumerate the full cross-product of parameter interactions. Neither is\npractical — which is why every edit becomes another LLM call from your\nagent.\n\n**Structural rewrites are the worst case.** Swapping Product→Year and\nRevenue→Rank transforms a bar chart into a bump chart: the mark changes\nfrom bar to line+circle (layered), X type changes from nominal to ordinal,\nY gets reversed with `zero: false` and domain padding, a color channel\nappears, and width/height both change. No single-parameter edit path\nexists — it's a complete structural rewrite.\n\n**The alternative: call your agent for every edit.** This works, but:\n\n- **Expensive for you.** ~500–1000 tokens per call × 10–15 edits in a\n  session = significant API cost. Each call takes 2–5 seconds.\n- **Forces you to use expensive models.** Only frontier models reliably\n  handle bespoke charts with their layered marks, data transforms, and\n  complex scale configurations.\n- **The $F \\times C$ combinatorial problem.** With 15 fields and 5 chart\n  types, there are 75 possible configurations. Your agent handles each one\n  individually — dozens of calls per exploration session.\n\n**Bottom line:** Polished VL generation looks good once, but the spec is\ntoo complex to edit, and regeneration per edit is slow, expensive, and\nrequires frontier models.\n\n---\n\n## The Solution\n\nThe core insight: **design knowledge belongs in the library, not in your\nprompts.** Your agent may or may not follow a detailed prompt — and even\nwhen it does, the result varies across models and runs. Agents-chart\neliminates this uncertainty by encoding all visualization design decisions\nin deterministic code. Your agent generates a minimal spec, and the\nlibrary handles everything else — consistently, every time, regardless of\nwhich model produced the spec.\n\n### What your agent does differently\n\n- **A simple output contract.** Your agent outputs a small JSON: chart\n  type, field assignments, and a semantic type per field. No axis config,\n  no sizing, no formatting, no mark layering. This is easy for any model\n  to produce reliably — even cheap, fast models. The contract is small\n  enough that compliance is near-certain, unlike detailed prompts with\n  dozens of design rules that models follow inconsistently.\n\n- **Automatic, consistent quality.** The library compiles that JSON into\n  a polished chart with correct sizing, formatting, zero-baseline\n  behavior, color schemes, and label handling — every time, deterministically.\n  The design knowledge is built into the compiler, not hoped for from the\n  model. Your agent doesn't need to know Vega-Lite (or ECharts, or\n  Chart.js) at all.\n\n- **User edits without calling your agent.** Users can swap fields, change\n  chart types, add facets — and the chart re-derives all low-level config\n  automatically. **90% of edits need zero LLM calls.** Your agent is only\n  invoked for the initial chart creation and for data transformations.\n\n- **Bespoke charts at no extra prompt cost.** Grouped bars, bump charts,\n  streamgraphs, candlesticks, ridge plots — they all take the same ~7-line\n  spec as a basic bar chart. The templates in the library handle the mark\n  layering, custom transforms, and specialized encodings.\n\n- **Actionable error messages.** When a chart configuration is wrong, the\n  library produces semantic explanations (*\"Pyramid chart requires exactly\n  2 categories; 'Region' has 5\"*) that your agent can read and repair —\n  no VL stack traces, no silent misrepresentation.\n\n- **Multi-backend output from one spec.** The same semantic spec compiles\n  to Vega-Lite, ECharts, Chart.js, or GoFish. Your deployment context\n  picks the backend; your agent and your prompts don't change.\n\n- **The generated output is still accessible.** Agents-chart compiles to\n  standard Vega-Lite (or ECharts options, or Chart.js configs). If a user\n  needs to fine-tune a specific visual detail, they can edit the generated\n  output directly. The library handles the 98% of decisions derivable from\n  semantics; users override the remaining 2%.\n\n### At a glance\n\n| Property | Approach 1 (defaults) | Approach 2 (polished VL) | Agents-chart |\n|----------|-----------------------|--------------------------|--------------|\n| **Looks good** | ✗ | ✓ | ✓ |\n| **Editable** | ✓ (simple spec) | ✗ (brittle, hard-coded) | ✓ (semantic spec) |\n| **Bespoke charts** | ✗ | Sometimes (frontier model) | ✓ (templates) |\n| **Cost per user edit** | 0 (no agent call) | 1 agent call ($, latency) | 0 (no agent call) |\n| **Agent complexity** | Low (just fields + mark) | High (coordinate 10–30 params) | Low (fields + semantic types) |\n| **Model requirement** | N/A | Frontier for bespoke | Any (classification only) |\n\n### How your agent integrates\n\n```\n1. Your agent generates:  chart spec  +  semantic types for each field\n                          (small JSON)    (e.g., Revenue, Year, Company)\n   └─→ This is what your agent's prompt produces. ~7–12 lines.\n   └─→ No VL knowledge, no sizing, no formatting.\n\n2. User edits to explore:  swap field / change chart type / add facet\n   └─→ agents-chart re-derives all config from semantic types  (NO agent call!)\n   └─→ Chart looks good automatically  (98% of edits)\n\n3. (Rare) Fine-tune:  user asks agent to edit underlying VL/ECharts\n                       for detailed style customization  (2% of edits)\n```\n\nThe chart spec is intentionally minimal. In Data Formulator, it's a small\nJSON object returned alongside the data transformation code, so that\nprecious tokens go where they matter most: data computation and\ntransformation, not visualization plumbing.\n\n---\n\n## System Architecture\n\n### Design Principles\n\n1. **VL-free analysis.** Layout computation, overflow filtering, and\n   semantic resolution operate on abstract channel names (`x`, `y`,\n   `color`, `group`, `size`) — never on Vega-Lite encoding objects.\n   This keeps the core logic backend-agnostic.\n\n2. **Minimal spec surface.** The input is: chart type + field assignments +\n   semantic types (~7–12 lines). The compiler derives all low-level\n   parameters deterministically.\n\n3. **Templates absorb VL complexity.** Bespoke charts (lollipop, bump,\n   candlestick, waterfall, etc.) are defined as template skeletons with\n   an `instantiate()` hook. The user/LLM never touches layered marks,\n   custom transforms, or scale configurations.\n\n4. **No UI dependencies.** Zero React, Redux, or framework imports.\n   Pure TypeScript library usable from any context.\n\n### Two-Stage Pipeline\n\nEach backend has its own `assemble*()` entry point (`assembleVegaLite`,\n`assembleECharts`, `assembleChartjs`, `assembleGoFish`), but they all\nfollow the same two-stage structure. The analysis stage is shared;\nonly the instantiation stage is backend-specific.\n\n```\nassembleVegaLite(input: ChartAssemblyInput)   // or assembleECharts, assembleChartjs, assembleGoFish\n       │\n       ▼\n ══ ANALYSIS (backend-free, shared core) ═════════════════════\n       │\n       ├── Phase 0:  resolveSemantics()     → ChannelSemantics\n       │     Infers encoding type, zero-baseline, color scheme,\n       │     format, aggregation default, scale type, domain,\n       │     temporal format for each channel from semantic types\n       │     + data characteristics.\n       │\n       ├── Step 0a:  template.declareLayoutMode()  → LayoutDeclaration\n       │     Template hook: declares axis flags (banded?),\n       │     type overrides, param overrides, overflow strategy.\n       │\n       ├── Step 0b:  convertTemporalData()  → converted data\n       │     Parses temporal string values into Date objects.\n       │\n       ├── Step 0c:  filterOverflow()       → OverflowResult\n       │     Truncates discrete channels that exceed the canvas\n       │     budget. Produces filtered data, nominal counts,\n       │     truncation warnings.\n       │\n       └── Phase 1:  computeLayout()        → LayoutResult\n             Computes subplot width/height, step sizes, label\n             sizing, facet columns/rows. Uses spring model for\n             banded axes, gas-pressure model for continuous axes.\n       │\n       ▼\n ══ INSTANTIATE (backend-specific) ═══════════════════════════\n       │\n       ├── build*Encodings()                        (per backend)\n       │     Translates abstract channel semantics into\n       │     backend encoding objects.\n       │\n       ├── template.instantiate()\n       │     Template-specific spec construction.\n       │     (e.g., pie remaps size→theta, bar adjusts marks)\n       │\n       ├── restructureFacets()                      (VL/ECharts)\n       │     Restructures column/row into facet spec for\n       │     layered charts. Computes facet columns.\n       │\n       ├── applyLayoutToSpec()\n       │     Applies width/height/step/config/formatting from\n       │     LayoutResult to the backend spec.\n       │\n       └── Post-layout adjustments\n             Facet binning, independent y-scales, tooltips.\n       │\n       ▼\n   Return: complete backend spec + warnings\n```\n\nThe compiler operates in three conceptual phases. Phases 0 and 1 contain\n~90% of the design logic and are **identical across all backends**. Phase 2\nis a thin translation layer — typically 50–100 lines per chart type.\n\n```\nPhase 0 (shared):  Resolve semantic types → encoding types, zero behavior,\n                   formatting, color schemes, sort order\nPhase 1 (shared):  Compute layout → spring/pressure model → canvas size,\n                   step sizes, label rotation, overflow warnings\nPhase 2 (per-backend):  Instantiate → translate layout into VL spec,\n                        ECharts option, or Chart.js config\n```\n\nThree design decisions make this architecture work: semantic types as the\ncontract between your agent and the library (Phase 0), parametric physics\nfor layout (Phase 1), and a library-agnostic multi-backend framework\n(Phase 2).\n\n---\n\n## How It Works\n\n### 1. Semantic types as the contract\n\nThe root cause of your agent's brittleness is that charting APIs scatter\nthe semantic contract between data and chart across dozens of low-level\nparameters. Consider a column containing `17234982372` — it could be a\nUnix timestamp, a monetary value, a serial number, or a group ID. Today,\nyour agent must decide the encoding type (`temporal`, `quantitative`,\n`nominal`), set axis formatting, configure zero-baseline behavior, choose\nsizing — and these become hard-coded constants in the output that break\nwhen the user edits anything.\n\n**The fix:** instead of asking your agent to set these low-level details,\nask it to communicate one thing: **what does this data mean?** — expressed\nthrough a fine-grained semantic type system (e.g., `Revenue`, `Rank`,\n`Temperature`, `Year`). From the semantic type plus data characteristics\n(cardinality, range, distribution), agents-chart's compiler automatically\nderives everything:\n\n```\nSemantic type\n    ↓\n    ├── Encoding type     (Revenue → quantitative, Rank → ordinal, Month → ordinal)\n    ├── Zero baseline     (Revenue → true, Temperature → false, Rank → false)\n    ├── Domain padding    (Rank → 8%, Temperature → 5%, Revenue → 0%)\n    ├── Scale direction   (Rank → reversed, others → normal)\n    ├── Axis formatting   (Revenue → \"$,.0f\", Percentage → \".0%\", Year → \"%Y\")\n    ├── Sort order        (Month → calendar order, Product → by value)\n    ├── Color scheme      (Company → categorical, Revenue → sequential)\n    └── Sizing model      (nominal → spring, quantitative → per-axis stretch)\n```\n\nYour agent's only job is **semantic classification** — assigning a type\nlike `\"Revenue\"`, `\"Rank\"`, `\"Temperature\"`, or `\"Month\"` to each data\nfield. This is one of the easiest tasks for any LLM (even small, fast\nmodels do it reliably).\n\n**Semantic types survive user edits.** When the user swaps Y from\nRevenue to Temperature, agents-chart re-derives all parameters from\n`\"Temperature\"` instead of `\"Revenue\"` and gets the right answer. No\nhard-coded constant goes stale because there are no hard-coded constants.\n**Your agent is not called.**\n\n**The $F \\times C$ problem becomes $F + C$.** Your agent classifies each\nfield once ($F$ decisions), the user picks a chart type ($C$ choices),\nand agents-chart handles the cross-product. Instead of 75 configurations\nthat each need an agent call, the system needs 15 type assignments (done\nonce) and handles all 75 deterministically.\n\n→ Full semantic type system details:\n[design-semantics.md](design-semantics.md)\n\n### 2. Parametric physics instead of manual heuristics\n\nThe layout challenge is **coordinating sizing across axes, layers, mark\ntypes, and facets** — parameters that are deeply interdependent (e.g.,\nfacet count affects subplot width, which affects bar width, which affects\nlabel rotation).\n\nThe conventional approach — whether done by your agent, by hand-coded\npost-processing, or by the charting library's defaults — is\n**heuristic-based**: a pile of if/else rules and magic numbers\n(`if bars > 30, rotate labels; if width > 800, shrink step`). These\nheuristics are brittle because they don't compose: every new chart type,\nevery new facet structure, every new mark combination requires new rules.\nYou're always guessing thresholds, and the guesses break on data shapes\nyou didn't anticipate.\n\nAgents-chart replaces this with a **parametric physics-inspired model**.\nInstead of guessing layout constants, you control the system through a\nsmall set of physics parameters with intuitive physical meaning:\n\n| Parameter | Physical meaning | What it controls |\n|-----------|-----------------|------------------|\n| $\\ell_0$ (rest length) | Natural spacing between items when unconstrained | Default bar/cell width before any compression |\n| $k$ (spring stiffness) | Resistance to compression | How aggressively items shrink to fit the canvas |\n| $\\ell_{\\min}$ (min length) | Hard floor — items never compress below this | Minimum readable bar/cell width |\n| $W_{\\max}$ (max canvas) | Maximum allowed canvas width | Upper bound on chart dimensions |\n| $\\beta_f$ (facet stretch) | How much extra canvas a facet adds | Trade-off between subplot density and total chart width |\n| $P$ (pressure) | Outward force from continuous data density | How much a dense scatter/line plot stretches its canvas |\n\nThese parameters **compose naturally**. A faceted grouped bar chart doesn't\nneed special-case rules — the spring model runs per subplot, facet stretch\nadjusts the container, and the parameters interact through the same physics\nequations regardless of chart type. Change one parameter (e.g., raise\n$\\ell_{\\min}$ to guarantee wider bars) and the system re-equilibrates\nautomatically — no cascade of broken heuristics.\n\n**Spring Model (Discrete Axes).** Applies to banded marks (bar, histogram,\nheatmap, boxplot, grouped bar). Models the axis as $N$ springs in a box:\n\n$$\\ell = \\frac{\\kappa \\cdot \\ell_0 + L_0 / N}{1 + \\kappa}$$\n\nThree regimes: **Fits** (items at natural size), **Elastic** (items\ncompress + axis stretches), **Overflow** (items at minimum, excess\ntruncated).\n\n**Gas-Pressure Model (Continuous Axes).** Applies to positional marks\n(scatter, line, area, bump). Each axis stretches based on 1D crowding\npressure:\n\n$$s = \\min\\!\\big(1 + \\beta_c,\\; p^{\\,\\alpha_c}\\big)$$\n\nTwo pressure modes: **positional** (unique pixel positions × √σ / dim)\nand **series-count** (nSeries × σ / dim for line/area Y axes).\n\n**Facet Model.** Second-level stretch for faceted charts. Each subplot\nruns its own sizing model internally; the facet layer determines subplot\ncount, columns, and overall canvas growth.\n\n→ Full layout model details:\n[design-stretch-model.md](design-stretch-model.md)\n\n### 3. Library-agnostic multi-backend architecture\n\nBoth semantic types and physics-based sizing are **library-agnostic** —\nthey reason about data meaning and visual density, not about any\nparticular charting API. This means the same compiler logic targets\nmultiple rendering backends without re-deriving the design rules.\n\nAs an agent developer, you may need to deploy to different contexts —\na lightweight mobile app, a desktop analytics tool, a static report.\nNo single charting library fits all of them:\n\n| Backend | Strengths | Weaknesses |\n|---------|-----------|------------|\n| **Vega-Lite** | Grammar of graphics; declarative composition; strong faceting and layering | Heavy runtime (~400 KB); limited interactivity beyond tooltips; poor mobile performance |\n| **ECharts** | Rich interactivity (zoom, brush, dataZoom); Canvas + SVG dual renderer; strong CJK locale support | Imperative option-bag API; no grammar-of-graphics composition; verbose config for layered designs |\n| **Chart.js** | Lightweight (~60 KB); Canvas-native (fast for large datasets); simple API; massive plugin ecosystem | No faceting; limited statistical charts; no declarative composition |\n| **GoFish** | Imperative rendering; full control over mark placement | No built-in layout or scale system |\n\n**These are not interchangeable APIs with different syntax — they use\nfundamentally different visual representation models and data models.**\nAdapting between them is highly non-trivial:\n\n- **Vega-Lite** is a *grammar of graphics*: a chart is a composition of\n  independent encoding channels (x, y, color, size, shape) bound to data\n  fields through scales. Layering and faceting are declarative\n  compositional operators. Data flows through a transform pipeline into\n  a single flat table.\n\n- **ECharts** is an *option bag*: a chart is a top-level config object\n  with `series[]` arrays, each containing its own data, mark type, and\n  axis bindings. There are no encoding channels — you configure axis\n  objects directly and reference them by index. Layering means adding\n  series entries; faceting has no native concept.\n\n- **Chart.js** is a *dataset-oriented canvas renderer*: a chart has a\n  single chart type, a `labels` array for the categorical axis, and\n  `datasets[]` with parallel value arrays. There is no independent\n  encoding model — color, border, and point style are per-dataset\n  properties, not data-driven channels. Composition beyond basic\n  stacking doesn't exist.\n\nThese differences mean you can't transliterate a spec from one library\nto another — you must *re-think* the chart in each library's conceptual\nmodel. Without a backend-agnostic library, supporting multiple renderers\nmeans **duplicating your entire agent pipeline per backend** — prompts,\nexamples, post-processing, validation, retry logic, sizing heuristics.\nThis is the $B \\times T \\times R$ explosion: $B$ backends × $T$\ntemplates × $R$ rules.\n\n**Agents-chart collapses this to $T + (B \\times I)$.** The $T$ templates\nand $R$ rules live in shared Phases 0–1, and each backend only implements\n$I$ instantiation functions — thin translators that map the\nalready-computed layout into the target library's config format. Adding a\nnew backend means writing instantiation code, not re-implementing the\ndesign system.\n\n**What this means for you:**\n\n- **Deployment flexibility.** A mobile app uses Chart.js (60 KB); a\n  desktop analytics tool uses Vega-Lite (full composition). Your agent\n  generates one spec; the deployment target picks the backend.\n\n- **Capability coverage.** Radar and gauge charts are native in ECharts\n  but missing from Vega-Lite. Faceted compositions are native in Vega-Lite\n  but painful in Chart.js. Agents-chart routes each chart type to the\n  backend that handles it best — your agent doesn't need to know which.\n\n- **Rendering trade-offs handled for you.** Canvas renderers handle 10K+\n  points without DOM pressure; SVG renderers produce crisper output for\n  publication. The choice depends on dataset size — not on your prompts.\n\n- **Vendor independence.** When agents-chart is the contract — not the\n  backend API — swapping or upgrading a renderer is a localized change,\n  not a rewrite of your entire pipeline.\n\n- **New backends are easy to add — even by coding agents.** Adding a\n  backend is a *mechanical translation* task: given the computed layout\n  and a target library's API, write the instantiation functions. This\n  is exactly what coding agents (Copilot, Cursor, Codex) excel at — they\n  can scaffold a new backend from existing ones as reference. Developers\n  and designers then enhance the generated adapters with domain-specific\n  design knowledge: animation defaults, theme integration, accessibility,\n  or library-specific optimizations. The result is a\n  **human-in-the-loop backend pipeline** where the mechanical work is\n  automated and design expertise is applied where it matters most.\n\n### 4. Error handling\n\nWhen your agent generates raw VL and the chart fails, failures are either\n**catastrophic** (the chart crashes or renders at 2000 px × 80 px) or\n**silent** (the chart misrepresents the data). VL gives only low-level\nerrors that neither your agent nor your user can act on.\n\nWith agents-chart, your agent gets **structured, semantic error messages**\nthat it can parse and repair automatically.\n\n**Semantic validation — agents-chart catches errors before rendering:**\n\n| Violation | What agents-chart detects | What raw VL does |\n|-----------|--------------------------|-----------------|\n| **Chart–data incompatibility** | *\"Pyramid chart requires exactly 2 categories; 'Region' has 5\"* | Renders a broken layered bar chart. No error. |\n| **Redundant encoding** | *\"Revenue is mapped to both Y and color — color adds no information\"* | Renders silently with a meaningless gradient legend. |\n| **Field–channel mismatch** | *\"Product has 80 values — too many for a color encoding\"* or *\"Group is a CategoryCode — use nominal, not quantitative\"* | Renders 80 indistinguishable colors, or maps numeric categories to a continuous gradient. No warning. |\n| **Missing required encoding** | *\"Candlestick chart requires Open, High, Low, Close fields\"* | Crashes or renders partial marks. No explanation. |\n\n**Overflow detection — agents-chart explains *why* a chart was clipped:**\n\n| Scenario | Agents-chart response | Raw VL result |\n|----------|----------------------|---------------|\n| **80 products × 4 facets** | *\"X axis clipped: 80 products compressed from 20 px to 8 px per bar; canvas stretched to 800 px (max). Consider filtering to top 20.\"* | 6400 px wide, or 400 px with 5 px bars. No explanation. |\n| **720 temporal cells** | *\"Heatmap X axis: 720 hourly cells compressed to 1.1 px each. Consider aggregating to daily.\"* | 14,400 px wide, or 0.5 px cells — a solid color band. |\n| **50 facets × 10 categories** | *\"Facet overflow: 50 subplots cannot fit readable bars. Showing top 12 facets; 38 truncated.\"* | 50 squished facets with 0.8 px bars. Technically renders but useless. |\n\n---\n\n## Abstract Channels\n\nThe library defines its own channel vocabulary, distinct from VL encoding\nchannels. This decouples user/AI intent from rendering specifics.\n\n| Channel | Purpose | VL translation |\n|---------|---------|----------------|\n| `x`, `y` | Positional axes | Direct mapping |\n| `x2`, `y2` | Range endpoints (ranged dot, waterfall) | Direct mapping |\n| `color` | Color encoding | Direct mapping |\n| `group` | Grouped subdivision (e.g., grouped bar) | VL `color` + `xOffset`/`yOffset` |\n| `size` | Mark size (scatter) or slice weight (pie) | Scatter: VL `size` with sqrt scale; Pie: VL `theta` |\n| `shape` | Mark shape | Direct mapping |\n| `opacity` | Opacity | Direct mapping |\n| `column`, `row` | Faceting | VL `facet`/`column`/`row` |\n| `detail` | Detail level without visual change | Direct mapping |\n| `latitude`, `longitude` | Geo coordinates | Direct mapping |\n| `open`, `high`, `low`, `close` | Candlestick price channels | Layered rule + rect encoding |\n| `radius` | Radar chart radius | VL `radius` with sqrt scale |\n\n### The `group` channel\n\nFirst-class channel for grouped bar charts. The analysis stage resolves\nits semantics (type, color scheme) without any VL knowledge. The grouping\naxis is auto-detected: whichever of `x`/`y` is discrete gets subdivided.\n\nDuring instantiation, `buildVLEncodings()` translates:\n- `group` → VL `color` encoding (for coloring)\n- `group` → VL `xOffset` or `yOffset` encoding (for position subdivision)\n\nThis avoids the old `additionalEncodings` hack and keeps the analysis\nstage completely VL-free.\n\n### The `size` channel\n\nAbstract channel for two distinct visual mappings:\n- **Scatter plot**: maps to VL `size` with adaptive `sqrt` scale range\n  based on canvas area and point count.\n- **Pie chart**: `pie.ts` instantiate remaps `size` → VL `theta`,\n  stripping the sqrt scale (theta is linear area).\n\n---\n\n## Core Types\n\n### `ChannelSemantics`\n\nPhase 0 output for a single channel. Combines user input with resolved\ndecisions. This is the central IR — all four backends read the same\n`ChannelSemantics` record.\n\n```typescript\ninterface ChannelSemantics {\n    // --- Identity ---\n    field: string;\n    semanticAnnotation: SemanticAnnotation;\n\n    // --- Encoding type ---\n    type: 'quantitative' | 'nominal' | 'ordinal' | 'temporal';\n\n    // --- Formatting ---\n    format?: FormatSpec;\n    tooltipFormat?: FormatSpec;\n    temporalFormat?: string;\n\n    // --- Aggregation ---\n    aggregationDefault?: 'sum' | 'average';\n\n    // --- Scale ---\n    zero?: ZeroDecision;\n    scaleType?: 'linear' | 'log' | 'sqrt' | 'symlog';\n    nice?: boolean;\n    domainConstraint?: DomainConstraint;\n    tickConstraint?: TickConstraint;\n\n    // --- Ordering ---\n    ordinalSortOrder?: string[];\n    cyclic?: boolean;\n    reversed?: boolean;\n    sortDirection?: 'ascending' | 'descending';\n\n    // --- Color ---\n    colorScheme?: ColorSchemeRecommendation;\n\n    // --- Histogram ---\n    binningSuggested?: boolean;\n\n    // --- Stacking ---\n    stackable?: 'sum' | 'normalize' | false;\n}\n```\n\n21 fields total (2 required: `field`, `type`; plus `semanticAnnotation`).\n\n### `LayoutDeclaration`\n\nTemplate's layout intent, returned by `declareLayoutMode()`:\n\n```typescript\ninterface LayoutDeclaration {\n    axisFlags?: {\n        x?: { banded: boolean };\n        y?: { banded: boolean };\n    };\n    resolvedTypes?: Record<string, 'nominal' | 'ordinal' | 'quantitative' | 'temporal'>;\n    paramOverrides?: Partial<AssembleOptions>;\n    binnedAxes?: Record<string, boolean | { maxbins?: number }>;\n    overflowStrategy?: OverflowStrategy;\n}\n```\n\nNo `grouping` field — grouping is auto-detected from `channelSemantics.group`\n+ which axis is discrete.\n\nNo `additionalEncodings` — the `group` channel + auto-detection replaces\nthe old approach entirely.\n\n### `LayoutResult`\n\nPhase 1 output — all layout decisions:\n\n```typescript\ninterface LayoutResult {\n    subplotWidth: number;\n    subplotHeight: number;\n    xStep: number;\n    yStep: number;\n    xStepUnit?: 'item' | 'group';\n    yStepUnit?: 'item' | 'group';\n    xContinuousAsDiscrete: number;\n    yContinuousAsDiscrete: number;\n    xNominalCount: number;\n    yNominalCount: number;\n    xLabel: LabelSizingDecision;\n    yLabel: LabelSizingDecision;\n    facet?: { columns: number; rows: number; subplotWidth: number; subplotHeight: number };\n    truncations: TruncationWarning[];\n}\n```\n\n### `InstantiateContext`\n\nEverything a template's `instantiate()` receives:\n\n```typescript\ninterface InstantiateContext {\n    channelSemantics: Record<string, ChannelSemantics>;\n    layout: LayoutResult;\n    table: any[];\n    resolvedEncodings: Record<string, any>;  // VL encoding objects\n    encodings: Record<string, ChartEncoding>;\n    chartProperties?: Record<string, any>;\n    canvasSize: { width: number; height: number };\n    semanticTypes: Record<string, string>;\n    chartType: string;\n}\n```\n\n### `ChartTemplateDef`\n\nTemplate definition — pure data, no UI dependencies:\n\n```typescript\ninterface ChartTemplateDef {\n    chart: string;                           // display name\n    template: any;                           // VL spec skeleton\n    channels: string[];                      // available encoding channels\n    markCognitiveChannel: MarkCognitiveChannel;  // 'position' | 'length' | 'area' | 'color'\n\n    declareLayoutMode?: (cs, data, props) => LayoutDeclaration;\n    instantiate: (spec, context: InstantiateContext) => void;\n    properties?: ChartPropertyDef[];\n}\n```\n\n### `OverflowStrategy`\n\nCustomizable per-template. The default strategy in `filter-overflow.ts` handles:\nconnected marks (keep all for continuity), user sorts, auto-sorts,\nbar sum-aggregate, numeric sort, first-N.\n\n```typescript\ntype OverflowStrategy = (\n    channel: string,\n    fieldName: string,\n    uniqueValues: any[],\n    maxToKeep: number,\n    context: OverflowStrategyContext,\n) => any[];\n```\n\n---\n\n## Semantic Type System\n\nSemantic types classify fields by what they *mean* (not just their data\ntype), organized in a three-tier hierarchy (T0 → T1 → T2):\n\n```\nT0 Family        T1 Category           T2 Types (examples)\n─────────        ───────────           ──────────────────\nTemporal ────┬── DateTime ──────────── DateTime, Date, Time, Timestamp\n             ├── DateGranule ────────── Year, Quarter, Month, Week, Day, Hour, ...\n             └── Duration ──────────── Duration\n\nMeasure ─────┬── Amount ────────────── Amount, Price, Revenue, Cost\n             ├── Physical ──────────── Quantity, Temperature\n             ├── Proportion ────────── Percentage\n             ├── SignedMeasure ──────── Profit, PercentageChange, Sentiment, Correlation\n             └── GenericMeasure ────── Count, Number\n\nDiscrete ────┬── Rank ──────────────── Rank\n             ├── Score ─────────────── Score, Rating\n             └── Index ─────────────── Index\n\nGeographic ──┬── GeoCoordinate ─────── Latitude, Longitude\n             └── GeoPlace ──────────── Country, State, City, Region, ZipCode, Address\n\nCategorical ─┬── Entity ────────────── PersonName, Company, Product, Category, Name, ...\n             ├── Coded ─────────────── Status, Type, Boolean, Direction\n             └── Binned ────────────── Range, AgeGroup\n\nIdentifier ──┴── ID ────────────────── ID\n```\n\n**46 registered types** across 6 T0 families and 17 T1 categories.\n\nEach type entry in the registry carries orthogonal dimensions that drive\nvisualization decisions:\n- **visEncodings** — encoding type candidates (quantitative, ordinal, nominal, temporal)\n- **aggRole** — aggregation role (`additive`, `intensive`, `signed-additive`, `dimension`, `identifier`)\n- **domainShape** — domain shape (`open`, `bounded`, `fixed`, `cyclic`)\n- **diverging** — diverging nature (`none`, `conditional`, `inherent`)\n- **formatClass** — format class (`currency`, `percent`, `unit-suffix`, `date`, `integer`, `plain`, ...)\n- **zeroBaseline** — zero baseline policy (`meaningful`, `arbitrary`, `contextual`, `none`)\n- **zeroPad** — domain padding fraction\n\n→ Full details: [design-semantics.md](design-semantics.md)\n\n---\n\n## Template Catalog\n\n### Vega-Lite (30 chart types)\n\n| Category | Charts |\n|----------|--------|\n| **Scatter & Point** | Scatter Plot, Regression, Ranged Dot Plot, Boxplot, Strip Plot |\n| **Bar** | Bar Chart, Grouped Bar Chart, Stacked Bar Chart, Histogram, Heatmap, Lollipop Chart, Pyramid Chart |\n| **Line & Area** | Line Chart, Dotted Line Chart, Bump Chart, Area Chart, Streamgraph |\n| **Part-to-Whole** | Pie Chart, Rose Chart, Waterfall Chart |\n| **Statistical** | Density Plot, Candlestick Chart, Radar Chart |\n| **Map** | US Map, World Map |\n| **Custom** | Custom Point, Custom Line, Custom Bar, Custom Rect, Custom Area |\n\n### ECharts (28 chart types)\n\n| Category | Charts |\n|----------|--------|\n| **Scatter & Point** | Scatter Plot, Regression, Ranged Dot Plot, Boxplot, Strip Plot |\n| **Bar** | Bar Chart, Grouped Bar Chart, Stacked Bar Chart, Histogram, Heatmap, Lollipop Chart, Pyramid Chart |\n| **Line & Area** | Line Chart, Dotted Line Chart, Bump Chart, Area Chart, Streamgraph |\n| **Part-to-Whole** | Pie Chart, Funnel Chart, Treemap, Sunburst Chart |\n| **Polar** | Radar Chart, Rose Chart |\n| **Financial** | Candlestick Chart |\n| **Indicator** | Gauge Chart |\n| **Flow** | Sankey Diagram |\n| **Other** | Waterfall Chart, Density Plot |\n\n### Chart.js (10 chart types)\n\n| Category | Charts |\n|----------|--------|\n| **Scatter & Point** | Scatter Plot |\n| **Bar** | Bar Chart, Grouped Bar Chart, Stacked Bar Chart, Histogram |\n| **Line & Area** | Line Chart, Area Chart |\n| **Part-to-Whole** | Pie Chart |\n| **Polar** | Radar Chart, Rose Chart |\n\n### GoFish (8 chart types)\n\n| Category | Charts |\n|----------|--------|\n| **Scatter & Point** | Scatter Plot, Scatter Pie Chart |\n| **Bar** | Bar Chart, Grouped Bar Chart, Stacked Bar Chart |\n| **Line & Area** | Line Chart, Area Chart |\n| **Part-to-Whole** | Pie Chart |\n\n**76 template definitions** across 4 backends.\n\nEach template defines:\n1. **`template`** — spec skeleton (mark + encoding structure)\n2. **`channels`** — available encoding channels\n3. **`markCognitiveChannel`** — how the mark encodes value (`position`, `length`, `area`, `color`)\n4. **`declareLayoutMode()`** — optional hook for layout intent\n5. **`instantiate()`** — build final backend spec from resolved context\n\n---\n\n## Public API\n\nAll four backends share the same input type (`ChartAssemblyInput`)\nand follow the same calling convention:\n\n```typescript\nimport { assembleVegaLite, assembleECharts, assembleChartjs, assembleGoFish } from './lib/agents-chart';\n\nconst input: ChartAssemblyInput = {\n    chartType: 'Scatter Plot',\n    encodings: { x: { field: 'weight' }, y: { field: 'mpg' }, color: { field: 'origin' } },\n    table: myData,\n    semanticTypes: { weight: 'Quantity', mpg: 'Quantity', origin: 'Country' },\n    canvasSize: { width: 400, height: 300 },\n};\n\nconst vlSpec   = assembleVegaLite(input);  // → Vega-Lite JSON spec\nconst ecSpec   = assembleECharts(input);   // → ECharts option object\nconst cjsSpec  = assembleChartjs(input);   // → Chart.js config object\nconst gfSpec   = assembleGoFish(input);    // → GoFish imperative spec\n```\n\n**`ChartAssemblyInput` fields:**\n- `chartType` — template name (e.g., `\"Grouped Bar Chart\"`)\n- `encodings` — channel → `ChartEncoding` (field, aggregate, sort, scheme)\n- `table` — array of row objects\n- `semanticTypes` — field name → semantic type string (e.g., `\"Revenue\"`, `\"Year\"`)\n- `canvasSize` — `{ width, height }` in pixels\n- `options` — `AssembleOptions` (layout tuning, all have defaults)\n\n**Output:** Complete backend-specific spec, ready to render.\nMay include `_warnings: ChartWarning[]` for overflow/truncation diagnostics.\n\n---\n\n## Overflow & Warning System\n\nWhen discrete channels overflow the canvas budget, the library:\n\n1. Computes the max items that fit (from spring model equilibrium)\n2. Applies the overflow strategy (default or template-custom) to choose\n   which values to keep\n3. Filters the data to only kept values\n4. Emits `TruncationWarning` with: channel, field, kept values, omitted\n   count, placeholder string\n5. Emits `ChartWarning` for the UI\n\nThe default overflow strategy priority:\n1. Connected marks (line, area) → keep all (truncation breaks continuity)\n2. User-specified sort → keep top/bottom N by sort order\n3. Quantitative opposite axis → sort by opposite, keep top N\n4. Bar with count aggregate → sum-aggregate and keep top N\n5. Numeric field → numeric sort, keep first N\n6. Fallback → keep first N in data order\n\n---\n\n## File Map\n\n### Core (shared across all backends)\n\n| File | Lines | Role |\n|------|-------|------|\n| `core/types.ts` | 686 | All type definitions (ChannelSemantics, ChartAssemblyInput, etc.) |\n| `core/field-semantics.ts` | 1,040 | Field semantic resolution (T0/T1/T2 tiered logic) |\n| `core/semantic-types.ts` | 921 | Semantic type system (hierarchy, zero decisions, color schemes) |\n| `core/type-registry.ts` | 197 | Type registry (46 types, 6 T0 families) |\n| `core/resolve-semantics.ts` | 476 | Phase 0: channel semantic resolution + temporal conversion |\n| `core/compute-layout.ts` | 1,001 | Phase 1: backend-free layout computation |\n| `core/decisions.ts` | 919 | Reusable decision functions (elastic budget, step, facet, label, gas pressure) |\n| `core/filter-overflow.ts` | 296 | Phase 0c: backend-free overflow filtering |\n| `core/recommendation.ts` | 1,178 | Chart recommendation engine |\n| `core/index.ts` | 120 | Core re-exports |\n\n### Vega-Lite backend\n\n| File | Lines | Role |\n|------|-------|------|\n| `vegalite/assemble.ts` | 758 | VL two-stage pipeline coordinator |\n| `vegalite/instantiate-spec.ts` | 719 | `applyLayoutToSpec`, `applyTooltips` |\n| `vegalite/recommendation.ts` | 194 | VL-specific recommendation |\n| `vegalite/templates/*.ts` | ~2,500 | 15 template files (30 chart types) |\n\n### ECharts backend\n\n| File | Lines | Role |\n|------|-------|------|\n| `echarts/assemble.ts` | 710 | ECharts two-stage pipeline coordinator |\n| `echarts/instantiate-spec.ts` | 660 | ECharts spec instantiation |\n| `echarts/facet.ts` | 251 | ECharts facet support |\n| `echarts/recommendation.ts` | 101 | ECharts-specific recommendation |\n| `echarts/templates/*.ts` | ~4,800 | 23 template files (28 chart types) |\n\n### Chart.js backend\n\n| File | Lines | Role |\n|------|-------|------|\n| `chartjs/assemble.ts` | 213 | Chart.js two-stage pipeline coordinator |\n| `chartjs/instantiate-spec.ts` | 158 | Chart.js spec instantiation |\n| `chartjs/recommendation.ts` | 34 | Chart.js recommendation |\n| `chartjs/templates/*.ts` | ~1,400 | 8 template files (10 chart types) |\n\n### GoFish backend\n\n| File | Lines | Role |\n|------|-------|------|\n| `gofish/assemble.ts` | 521 | GoFish imperative rendering pipeline |\n| `gofish/recommendation.ts` | 34 | GoFish recommendation |\n| `gofish/templates/*.ts` | ~850 | 6 template files (8 chart types) |\n\n### Top-level\n\n| File | Lines | Role |\n|------|-------|------|\n| `index.ts` | 60 | Public API re-exports (all 4 backends) |\n\n**Total: ~21,000 lines** across 87 `.ts` files (excluding test-data).\n\n---\n\n## Architectural Boundaries\n\n```\n┌─────────────────────────────────────────────────┐\n│              ANALYSIS (core/ — backend-free)     │\n│                                                  │\n│  resolveSemantics  →  ChannelSemantics           │\n│  declareLayoutMode →  LayoutDeclaration          │\n│  convertTemporalData                             │\n│  filterOverflow    →  OverflowResult             │\n│  computeLayout     →  LayoutResult               │\n│                                                  │\n│  Inputs:  abstract channels, data, semantic types│\n│  Outputs: types, decisions, layout numbers       │\n│  Imports: NO backend-specific syntax             │\n├─────────────────────────────────────────────────┤\n│   INSTANTIATE (vegalite/ | echarts/ | chartjs/ | gofish/)  │\n│                                                  │\n│  Each backend has its own:                       │\n│    build*Encodings  →  backend encoding objects   │\n│    template.instantiate → backend spec            │\n│    restructureFacets → backend facet structure    │\n│    applyLayoutToSpec → backend config/sizing      │\n│                                                  │\n│  Inputs:  ChannelSemantics + LayoutResult + data │\n│  Outputs: complete backend-specific spec         │\n│  Backend code ONLY constructs its own syntax     │\n└─────────────────────────────────────────────────┘\n```\n\nThe boundary is enforced by function signatures: analysis-stage functions\naccept `ChannelSemantics` and `LayoutDeclaration` — never backend encoding\nobjects or spec structures. All four backends (Vega-Lite, ECharts,\nChart.js, GoFish) share the same analysis stage and read the same\n`ChannelSemantics` IR. Adding a new backend only requires implementing\nthe instantiation layer — no analysis code changes.\n\n---\n\n## In Practice: Four Examples\n\nFour examples that progressively demonstrate the gap between your agent\ngenerating charting code directly versus outputting a minimal semantic spec.\nIn every case, the agents-chart spec is the same shape: chart type + field\nassignments + semantic types (~7–12 lines).\n\n### Example 1: Simple bar chart — no advantage yet\n\n**Task:** Bar chart of Revenue by 5 Regions.\n\n**With agents-chart:** Chart type, two field encodings, two semantic types.\n\n**With your agent generating VL directly:** Mark type, two field encodings\nwith explicit `type` annotations.\n\nThe two are nearly identical. VL's defaults happen to work: 5 bars fit\ncomfortably, `zero: true` is correct, alphabetical sort is acceptable.\n**No win here — and that's the point.** Agents-chart isn't designed to help\nwith cases your agent already handles well.\n\n### Example 2: Lollipop chart — templates eliminate prompt complexity\n\n**Task:** Lollipop chart of Revenue by Product (top 10), colored by Group\n(values: 1, 2, 3, 4, 5 — categorical groups encoded as numbers).\n\n**With agents-chart:** Chart type = \"Lollipop Chart\", three field encodings\n(x, y, color), three semantic types (`Revenue`, `Product`,\n`CategoryCode`). Same ~10 lines as any chart.\n\n**What your agent's prompt must produce if generating VL directly:**\n\n| VL parameter | What and why |\n|-------------|-------------|\n| Layered spec structure | Must use `layer: [...]` — a lollipop is two marks, not one |\n| Rule mark config | `mark.type: \"rule\"`, `strokeWidth`, `color` for the stem |\n| Circle mark config | `mark.type: \"circle\"`, `size`, `color` for the dot |\n| Duplicated encoding | Both layers need identical `x`, `y`, and `color` encodings |\n| Sort | `sort: \"-x\"` on the Y axis to rank products by value |\n| Zero baseline | `scale.zero: true` on the X axis (Revenue is zero-meaningful) |\n| Step size | VL default step (20 px) works here for 10 items, but breaks if data grows |\n| Axis formatting | `axis.format: \"~s\"` for compact numbers |\n| Color encoding type | Group values are `1, 2, 3, 4, 5` — VL defaults to `quantitative`, producing a continuous blue gradient. Must set `\"type\": \"nominal\"` for categorical colors. |\n| Color scale scheme | Must override to categorical palette (`\"category10\"`) — but only after fixing the type. |\n\nThe color problem is especially insidious: VL sees numbers and defaults to\n`quantitative` with a sequential color scheme. Groups 1 and 2 get nearly\nidentical shades of blue — visually indistinguishable. The chart *renders*\nwithout error but the color encoding is meaningless. With agents-chart,\n`CategoryCode` → nominal → categorical palette, and groups get distinct\nhues automatically.\n\n### Example 3: Faceted bar chart — physics layout vs. hard-coded sizing\n\n**Task:** Revenue by Product (80 products), faceted by Region (4 regions).\n\n**With agents-chart:** Chart type, three field encodings (x, y, column),\nthree semantic types. Same ~12 lines.\n\n**What your agent must hard-code if generating VL directly:**\n\n| Problem | What VL requires | Why it's hard |\n|---------|-----------------|---------------|\n| **Canvas size** | Hard-code `width` per subplot + `columns` for facet wrap | VL default: 20 px × 80 = 1600 px per subplot → 4 facets = 6400 px total. Must override, but numbers depend on each other. |\n| **Step / bar width** | Hard-code `step` or `width` | With `width: 380` for 80 bars, each bar is ~4.75 px — unreadable. Must add `labelAngle: -90`, `labelLimit: 60`, `labelFontSize: 9`. |\n| **Facet wrapping** | Hard-code `columns` | 4 columns → each subplot 190 px (unreadable). 1 column → page 4× taller. The right choice depends on bar count, label length, container size. |\n| **Scale resolution** | `resolve.scale.x: \"independent\"` | Each facet may have different products — shared scale wastes space. |\n\nYour agent's prompt can't express these dependencies — each value must be\nhard-coded, and they all break when the data changes.\n\nWith agents-chart, the spring model handles all four automatically:\n- Facet stretch ($\\beta_f$) determines overall canvas growth.\n- Each subplot's spring model: 80 products × $\\ell_0 = 20$ px overflows →\n  items compress to $\\ell = 8$ px, subplot stretches to fit.\n- Label rotation and truncation derived from count and string lengths.\n- Result: readable bars (8 px, not 2 px), controlled total width (not\n  6400 px), facet columns balanced. Your agent doesn't touch any of this.\n\n### Example 4: Heatmap with temporal × category — semantic types vs. guessing\n\n**Task:** Heatmap of event counts — UTC timestamps (hourly, 30 days) on X,\nCategory (15 event types) on Y, count as color.\n\n**With agents-chart:** Chart type = \"Heatmap\", three encodings (x, y,\ncolor), three semantic types (`DateTime`, `Category`, `Count`). ~12 lines.\n\n**What your agent must get right if generating VL directly** — 11\ndecisions, all stemming from needing to know what the data *means*:\n\n| Decision | What VL requires | What agents-chart derives |\n|----------|-----------------|--------------------------|\n| X encoding type | `\"type\": \"temporal\"` — must recognize timestamp is a date, not a number | `DateTime` → temporal |\n| Time formatting | `\"format\": \"%m/%d %H:%M\"` — must pick format for hourly granularity | `DateTime` + hourly range → appropriate format |\n| UTC scale | `\"scale\": { \"type\": \"utc\" }` — must know timestamps are UTC | `DateTime` → UTC handling |\n| Time unit | `\"timeUnit\": \"yearmonthdatehoursminutes\"` — verbose, error-prone | Derived from data range + granularity |\n| Label rotation | `\"labelAngle\": -45` — must guess from label width | Auto from label count + string length |\n| Y encoding type | `\"type\": \"nominal\"` — must decide Category isn't quantitative | `Category` → nominal |\n| Color zero baseline | `\"scale.zero\": true` — Count should start from 0 | `Count` → zero-meaningful → `zero: true` |\n| Color scheme | `\"scheme\": \"blues\"` — sequential scheme for counts | `Count` → quantitative sequential → blues |\n| Color format | `\"format\": \"d\"` — integer formatting for counts | `Count` → integer → `\"d\"` |\n| Cell step size | VL default: 720 × 20 = 14,400 px wide. Must hard-code width. | Spring model: 720 cells → equilibrium at ~800 px |\n| Canvas width | Hard-code `\"width\": 800` after manually computing 720 cells | Derived automatically from cell count + compression |\n\nThat's **11 decisions your agent must make correctly**, all derived\nautomatically from three semantic type annotations.\n\nIf the timestamp column contained Unix epoch numbers (e.g., `1739600400`),\nVL would default to `quantitative` — a continuous axis from 0 to 1.7\nbillion. The semantic type `DateTime` tells the compiler to treat it as\ntemporal regardless of the raw data format.\n"
  },
  {
    "path": "src/lib/agents-chart/docs/design-semantics.md",
    "content": "# Design: Semantic-Type-Driven Compilation Context\n\n> **Status:** Draft — for discussion and revision  \n> **Date:** 2026-02-27  \n> **Scope:** Redesign the semantic type system to produce a structured per-field compilation context that drives all visualization property decisions  \n> **Related:** `core/semantic-types.ts`, `core/field-semantics.ts`, `core/type-registry.ts`, `core/resolve-semantics.ts`, `core/decisions.ts`\n\n---\n\n## §0 Semantic Type Inventory\n\n### 0.1 Tiered type system: resolution levels\n\nHaving 80+ fine-grained types is powerful but impractical for every scenario. Different tasks warrant different levels of type specificity. We organize semantic types into **three tiers** so the LLM can annotate at the level of detail appropriate for the cost/quality tradeoff:\n\n| Tier | Count | Purpose | LLM cost | Viz config quality |\n|---|---|---|---|---|\n| **T0 — Family** | 6 | Coarsest. Enough to pick encoding type (Q/O/N/T) and basic defaults | Lowest — can even be rule-based without LLM | Correct encoding, generic formatting |\n| **T1 — Category** | 17 | Mid-level. Enough for format prefix/suffix, aggregation default, zero-baseline, color scheme class | Moderate — small closed list, high accuracy | Good formatting, sensible defaults |\n| **T2 — Specific** | 46 | Finest. Enables diverging midpoints, domain constraints, tick strategies, interpolation hints | Higher — larger vocabulary, needs examples | Full compilation context |\n\n**The key design principle:** the compilation logic works at any tier. If the LLM provides `\"Revenue\"` (T2), we get everything: `$` prefix, sum aggregation, meaningful zero, sequential color, log-scale hint. If it provides `\"Amount\"` (T1), we still get `$` prefix, sum, meaningful zero — but miss the log-scale hint. If it provides `\"Measure\"` (T0), we get quantitative encoding, sum aggregation, meaningful zero — but no format prefix. **Graceful degradation, not failure.**\n\n### 0.2 Tier 0 — Families (6 types)\n\nThese are the broadest categories. They map directly to visualization encoding logic and can be inferred by simple heuristics (no LLM needed):\n\n| T0 Family | Data type | Default vis encoding | What it determines |\n|---|---|---|---|\n| **Temporal** | date/string | temporal | Time axis, date parsing, temporal sort |\n| **Measure** | number | quantitative | Numeric axis, aggregation=sum, meaningful zero |\n| **Discrete** | number | ordinal | Integer ticks, no aggregation, arbitrary zero |\n| **Geographic** | number/string | geographic/nominal | Map layer, geocoding |\n| **Categorical** | string | nominal | Color/shape/facet, no axis ordering |\n| **Identifier** | number/string | nominal | Tooltip only, never encode on axis/color |\n\n**What T0 alone gives you:** correct encoding type, basic aggregation default, zero-baseline class, which channels are appropriate (you wouldn't put a Categorical on Y for a bar chart). This is roughly what a simple rule-based system (no LLM) could produce from data type + cardinality + column-name heuristics.\n\n**What T0 misses:** format prefix/suffix, specific aggregation (sum vs avg), diverging detection, domain constraints, scale type hints, interpolation.\n\n### 0.3 Tier 1 — Categories (17 types)\n\nMid-level types within each family. Each T1 type maps to exactly one T0 family. The LLM picks from a manageable list and gets high accuracy.\n\n| T0 Family | T1 Categories | What T1 adds over T0 |\n|---|---|---|\n| **Temporal** | `DateTime`, `DateGranule`, `Duration` | Point-in-time vs granule (month/year) vs time span; determines temporal parse, ordinal-vs-temporal encoding |\n| **Measure** | `Amount`, `Physical`, `Proportion`, `SignedMeasure`, `GenericMeasure` | Format prefix/suffix class ($, %, °), aggregation (sum vs avg), diverging detection |\n| **Discrete** | `Rank`, `Score`, `Index` | Reversed axis (Rank), integer ticks, domain hints |\n| **Geographic** | `GeoCoordinate`, `GeoPlace` | Lat/lon pairing vs geocodable name; map layer type |\n| **Categorical** | `Entity`, `Coded`, `Binned` | Cardinality expectations, ordinal-ness of binned values |\n| **Identifier** | `ID` | Never aggregate, never encode |\n\n**Full T1 type table:**\n\n| T1 Type | T0 Family | Vis encoding | What it determines |\n|---|---|---|---|\n| `DateTime` | Temporal | temporal | Full date/time parsing, temporal axis |\n| `DateGranule` | Temporal | ordinal or temporal | Month/Year/Quarter/etc. — ordinal sort, built-in canonical order |\n| `Duration` | Temporal | quantitative | Time span, \"2h 30m\" formatting, sum/avg aggregation |\n| `Amount` | Measure | quantitative | Currency prefix ($, €), sum aggregation, meaningful zero |\n| `Physical` | Measure | quantitative | Unit suffix (kg, km, °C, mph), avg aggregation, arbitrary zero for Temperature |\n| `Proportion` | Measure | quantitative | % or ratio formatting, bounded domain [0,1] or [0,100], avg aggregation |\n| `SignedMeasure` | Measure | quantitative | Diverging midpoint (0), signed data, conditional/inherent diverging color |\n| `GenericMeasure` | Measure | quantitative | No special format, sum/avg heuristic from field name |\n| `Rank` | Discrete | ordinal | Reversed axis, integer ticks, not aggregable |\n| `Score` | Discrete | quantitative | Bounded domain, integer ticks, avg aggregation |\n| `Index` | Discrete | ordinal/nominal | Row number, sequence — not aggregable, not for axis |\n| `GeoCoordinate` | Geographic | quantitative | Fixed domain (lat [-90,90], lon [-180,180]), map projection |\n| `GeoPlace` | Geographic | nominal | Geocodable name, choropleth/symbol-map |\n| `Entity` | Categorical | nominal | High cardinality expected, tooltip-friendly |\n| `Coded` | Categorical | nominal | Low cardinality, discrete colors, legend-friendly. Includes Status, Type, Boolean, Direction |\n| `Binned` | Categorical | ordinal | Pre-binned ranges (\"18-24\"), ordinal axis, sequential color |\n| `ID` | Identifier | nominal | Never aggregate, tooltip only |\n\n**What T1 alone gives you:** correct encoding, format class (currency/percent/unit/plain), aggregation default (sum vs avg), zero-baseline class, diverging detection, domain shape (bounded/open/fixed/cyclic).\n\n**What T1 misses:** specific format symbol ($€£¥ vs just \"currency\"), exact domain bounds, unit-specific formatting (°C vs °F), type-specific interpolation hints. Diverging midpoints for domain-specific scales (like pH=7) are derived from `intrinsicDomain` or type-intrinsic logic rather than T2 types.\n\n### 0.4 Tier 2 — Specific types (46 types)\n\nThe full vocabulary. Each T2 type maps to exactly one T1 category. These provide the finest-grained compilation context.\n\nThe T2 inventory is deliberately **pruned to types that change compilation behavior** vs. their T1 parent. Types that compile identically to a sibling are dropped — the LLM can use the T1 name instead. Domain-specific diverging midpoints (e.g., pH=7, NPS=0) are derived from the `intrinsicDomain` midpoint or type-intrinsic logic rather than dedicated T2 types.\n\n| T1 Category | T2 Specific Types |\n|---|---|\n| `DateTime` | DateTime, Date, Time, Timestamp |\n| `DateGranule` | Year, Quarter, Month, Week, Day, Hour, YearMonth, YearQuarter, YearWeek, Decade |\n| `Duration` | Duration |\n| `Amount` | Amount, Price, Revenue, Cost |\n| `Physical` | Quantity, Temperature |\n| `Proportion` | Percentage |\n| `SignedMeasure` | Profit, PercentageChange, Sentiment, Correlation |\n| `GenericMeasure` | Count, Number |\n| `Rank` | Rank |\n| `Score` | Score, Rating |\n| `Index` | Index |\n| `GeoCoordinate` | Latitude, Longitude |\n| `GeoPlace` | Country, State, City, Region, ZipCode, Address |\n| `Entity` | PersonName, Company, Product, Category, Name, String, Unknown |\n| `Coded` | Status, Type, Boolean, Direction |\n| `Binned` | Range, AgeGroup |\n| `ID` | ID |\n\n**What was dropped and why:**\n\n> **Implementation note:** These types are fully removed from both the\n> `TYPE_REGISTRY` (type-registry.ts) and the `SemanticTypes` constant\n> (semantic-types.ts). If the LLM produces a dropped type string, it will\n> hit the `UNKNOWN_ENTRY` fallback (Categorical/Entity/nominal). The LLM\n> prompt should be updated to only offer the \"Use instead\" types.\n\n| Dropped T2 | Use instead | Rationale |\n|---|---|---|\n| TimeRange | Duration | Same compilation (ordinal encoding) |\n| Distance, Area, Volume, Weight, Speed | Quantity (or `Physical` T1) | Unit captured by annotation; same `unit-suffix` format class |\n| Rate | Percentage | Same format + aggregation |\n| Ratio | Number (via `decimal` format) | Open domain, no percent scaling |\n| Level | Score | Same compilation (bounded, avg, integer) |\n| Coordinates | Latitude + Longitude | Ambiguous pair; use specific coordinate types |\n| Location | Country / State / City | Generic fallback; same compilation |\n| Username, Email, Brand, Department | PersonName / Company / Name | Same nominal compilation |\n| Binary, Code | Boolean / Status | Same categorical compilation |\n| Bucket | Range | Same compilation |\n| SKU | ID | Same compilation (identifier role) |\n\n**What T2 adds over T1:**\n- `Revenue` vs `Price` → both `Amount`, but Revenue is `additive` (totals) while Price is `intensive` (per-unit); `Cost` kept for LLM annotation clarity (compiles like Revenue)\n- `Temperature` vs `Quantity` → both `Physical`, but Temperature has conditional diverging (freezing-point midpoint from unit); Quantity is generic with no diverging\n- `Month` vs `Year` vs `Quarter` → all `DateGranule`, but Month has cyclic(12) domain, Quarter has cyclic(4), Year is open-ended\n- `Sentiment` vs `Profit` vs `Correlation` → all `SignedMeasure`, but Sentiment is inherently diverging, Profit is conditionally diverging, Correlation has fixed domain [-1,1]\n\n### 0.5 The hierarchy as a DAG\n\n```\nT0 Family         T1 Category          T2 Specific\n─────────         ───────────          ──────────────────────\n\nTemporal ─────┬── DateTime ──────────── DateTime, Date, Time, Timestamp\n              ├── DateGranule ───────── Year, Quarter, Month, Week, Day, Hour,\n              │                         YearMonth, YearQuarter, YearWeek, Decade\n              └── Duration ─────────── Duration\n\nMeasure ──────┬── Amount ────────────── Amount, Price, Revenue, Cost\n              ├── Physical ─────────── Quantity, Temperature\n              ├── Proportion ────────── Percentage\n              ├── SignedMeasure ─────── Profit, PercentageChange, Sentiment, Correlation\n              └── GenericMeasure ────── Count, Number\n\nDiscrete ─────┬── Rank ─────────────── Rank\n              ├── Score ────────────── Score, Rating\n              └── Index ────────────── Index\n\nGeographic ───┬── GeoCoordinate ────── Latitude, Longitude\n              └── GeoPlace ─────────── Country, State, City, Region, ZipCode, Address\n\nCategorical ──┬── Entity ───────────── PersonName, Company, Product, Category, Name, String, Unknown\n              ├── Coded ────────────── Status, Type, Boolean, Direction\n              └── Binned ───────────── Range, AgeGroup\n\nIdentifier ───┴── ID ───────────────── ID\n```\n\n**Resolution logic:** The builder function `resolveFieldSemantics()` resolves the tier of the provided type and applies progressively more specific logic:\n\n```typescript\nfunction resolveFieldSemantics(annotation, fieldName, values) {\n    const { semanticType } = normalizeAnnotation(annotation);\n\n    // Resolve tier membership\n    const t2 = T2_REGISTRY[semanticType];   // e.g., { t1: 'Amount', t0: 'Measure', ... }\n    const t1 = t2?.t1 ?? T1_REGISTRY[semanticType];  // maybe the input IS a T1 type\n    const t0 = t1?.t0 ?? T0_REGISTRY[semanticType];  // maybe the input IS a T0 type\n\n    // T0 decisions (always available)\n    const encoding = resolveEncoding(t0, values);\n    const aggRole  = resolveAggRole(t0);\n    const zeroBaseline = resolveZeroBaseline_T0(t0);\n\n    // T1 decisions (available if T1 or finer)\n    const formatClass = t1 ? resolveFormatClass(t1) : null;\n    const aggDefault  = t1 ? resolveAggDefault(t1) : resolveAggDefault_fromT0(t0);\n    const diverging   = t1 ? resolveDivergingClass(t1) : null;\n\n    // T2 decisions (available if T2)\n    const formatDetail = t2 ? resolveFormatDetail(t2, annotation) : null;\n    const domainHint   = t2 ? resolveDomainHint(t2, annotation, values) : null;\n    const tickHint     = t2 ? resolveTickHint(t2, annotation) : null;\n    const interpolation = t2 ? resolveInterpolation(t2) : null;\n\n    // Merge: finer overrides coarser, nulls fall back\n    return mergeContext(t0Defaults, t1Refinements, t2Specifics);\n}\n```\n\n### 0.6 LLM annotation strategies\n\nThe tiered system enables different annotation strategies depending on the task:\n\n| Strategy | Types used | When to use | LLM prompt size |\n|---|---|---|---|\n| **Full T2** | All specific types | High-value dashboards, one-time setup | Largest (~46 types in prompt) |\n| **T1 only** | Category-level only | Bulk dataset annotation, cost-sensitive | Medium (~16 types) |\n| **T0 only** | Family-level only | Quick preview, rule-based fallback | Smallest (~6 types), may not need LLM |\n| **Mixed** | T2 for key fields, T1 for rest | Typical interactive session | Adaptive prompt |\n\n**Mixed strategy example:**\n\nThe LLM is given a dataset with 20 columns. The user is building a revenue chart, so the system asks for T2 annotation on the 3-4 likely chart fields (revenue, month, category) and T1 for the remaining 16 columns:\n\n```json\n{\n    \"revenue\": { \"semantic_type\": \"Revenue\", \"unit\": \"USD\" },\n    \"month\":   { \"semantic_type\": \"Month\" },\n    \"product_category\": { \"semantic_type\": \"Coded\" },\n    \"customer_name\":    { \"semantic_type\": \"Entity\" },\n    \"customer_age\":     { \"semantic_type\": \"GenericMeasure\" },\n    \"region\":           { \"semantic_type\": \"GeoPlace\" },\n    \"order_date\":       { \"semantic_type\": \"DateTime\" },\n    \"satisfaction\":     { \"semantic_type\": \"Score\", \"domain\": [1, 5] }\n}\n```\n\nHere `revenue`, `month`, and `satisfaction` get T2 types (fine-grained decisions). `product_category` and `customer_name` get T1 (enough for encoding and format class). When the user later drags `customer_age` onto a chart, the system can re-annotate that one field at T2 level.\n\n### 0.7 Multi-membership dimensions: orthogonal axes that drive visualization\n\nThe tier hierarchy (T0→T1→T2) is ONE axis of the type system — it controls *which* compilation rules fire and at what granularity. But every semantic type also sits at a specific position along several **orthogonal classification dimensions**, each of which directly controls a distinct set of visualization properties. The compilation context is the *product* of tier-derived decisions **and** dimension-derived decisions.\n\n#### 0.7.1 The five orthogonal dimensions\n\n| Dimension | Values | What viz properties it controls |\n|---|---|---|\n| **Vis encoding candidates** | `quantitative`, `ordinal`, `nominal`, `temporal` (one or more, with preference order) | Axis type, scale type, mark compatibility, channel compatibility, sort |\n| **Aggregation role** | `additive`, `intensive`, `signed-additive`, `dimension`, `identifier` | Whether to aggregate, which aggregate function, whether to group-by, tooltip-only |\n| **Domain shape** | `open`, `bounded`, `fixed`, `cyclic` | Scale domain clamping, tick generation, extrapolation, axis extent, radar/polar recommendation |\n| **Diverging nature** | `none`, `conditional`, `inherent` | Color scheme class (sequential vs diverging), midpoint, legend center, bipolar axis |\n| **Format class** | `currency`, `percent`, `unit-suffix`, `date`, `time`, `integer`, `plain` | Axis label format, tooltip format, prefix/suffix, decimal precision |\n\nThese dimensions are NOT derivable from the tier hierarchy alone — they are properties of each type that must be explicitly catalogued. Two types in the same T1 category can differ on multiple dimensions (e.g., `Temperature` and `Weight` are both `Physical` but differ on diverging nature).\n\n#### 0.7.2 Dimension → Visualization property mapping\n\nEach dimension controls a specific, non-overlapping set of downstream visualization decisions:\n\n**Vis encoding candidates** → determines:\n- Whether a field can go on X/Y axis (quantitative/temporal/ordinal) vs only color/shape/facet (nominal)\n- Scale type: `linear`, `log`, `time`, `point`, `band`\n- Compatible mark types: quantitative fields → line/area/bar; nominal → bar/point; temporal → line/area\n- Sort behavior: temporal → chronological; ordinal → canonical order; nominal → data order or alphabetical\n- When a type has multiple valid encodings (e.g., `Rating` → Q or O), the builder picks based on chart type + channel: scatter Y → quantitative; heatmap color → ordinal\n\n**Aggregation role** → determines:\n- Whether the field appears in the `aggregate` vs `groupby` clause\n- Default aggregate function: `additive` → `\"sum\"`, `intensive` → `\"mean\"`, `signed-additive` → `\"sum\"`\n- Whether the field should be offered as a measure or dimension in the UI\n- `identifier` → excluded from aggregation entirely, tooltip-only\n\n**Domain shape** → determines:\n- Scale domain: `open` → auto from data; `bounded` → clamp to known range; `fixed` → hard limits; `cyclic` → modular\n- Tick generation: `bounded [0,100]` → nice ticks within range; `fixed [-90,90]` → constrained; `cyclic` → all cycle values\n- Extrapolation: `cyclic` → no extrapolation beyond period; `open` → allow forecast extension\n- Chart type hints: `cyclic` → radar/polar natural; `bounded` → gauge natural\n- Axis padding: `bounded` → don't pad beyond bounds; `open` → allow padding\n- Color interpolation: `cyclic` → wrap-around palette; `bounded` → clamp at edges\n\n**Diverging nature** → determines:\n- Color scheme: `none` → sequential; `conditional` → sequential by default, diverging if data spans both sides; `inherent` → always diverging\n- Midpoint: `inherent` → fixed center (0 for Profit, 0 for Sentiment); `conditional` → 0 if data crosses zero; `none` → N/A\n- Domain-specific midpoints (e.g., pH=7, NPS=0, custom satisfaction scales) are derived from `annotation.intrinsicDomain` midpoint rather than type-intrinsic logic\n- Legend symmetry: diverging → symmetric around midpoint; sequential → start at min\n- Reference line: diverging → draw reference at midpoint; sequential → no reference\n\n**Format class** → determines:\n- Axis label format string: `currency` → `$,.2f`; `percent` → `.1%`; `unit-suffix` → `,.1f kg`\n- Tooltip format: same prefix/suffix, possibly more precision\n- Number precision: `currency` → 2 decimal; `percent` → 1 decimal; `integer` → 0 decimal\n- Prefix/suffix: `currency` → prefix ($, €, £); `unit-suffix` → suffix (kg, km, °C); `percent` → suffix (%)\n\n#### 0.7.3 Complete multi-membership table\n\nEvery type occupies a position in the tier hierarchy AND a position along each orthogonal dimension. This table shows both:\n\n| Type (T2) | T1 | T0 | Vis encoding (pref order) | Agg role | Domain | Diverging | Format |\n|---|---|---|---|---|---|---|---|\n| Month | DateGranule | Temporal | ordinal, temporal | dimension | cyclic (12) | none | date |\n| Year | DateGranule | Temporal | temporal, ordinal | dimension | open | none | integer |\n| Rating | Score | Discrete | quantitative, ordinal | intensive | bounded [1,N] | conditional | integer |\n| Temperature | Physical | Measure | quantitative | intensive | open | conditional | unit-suffix |\n| Quantity | Physical | Measure | quantitative | intensive | open, ≥0 | none | unit-suffix |\n| Sentiment | SignedMeasure | Measure | quantitative | signed-additive | bounded [-1,1] | inherent | plain |\n| Correlation | SignedMeasure | Measure | quantitative | signed-additive | bounded [-1,1] | inherent | plain |\n| Profit | SignedMeasure | Measure | quantitative | signed-additive | open | conditional | currency |\n| PercentageChange | SignedMeasure | Measure | quantitative | signed-additive | open | conditional | percent |\n| Revenue | Amount | Measure | quantitative | additive | open, ≥0 | none | currency |\n| Price | Amount | Measure | quantitative | intensive | open, ≥0 | none | currency |\n| Percentage | Proportion | Measure | quantitative | intensive | bounded [0,1] or [0,100] (data-inferred) | none | percent |\n| Count | GenericMeasure | Measure | quantitative | additive | open, ≥0 | none | integer |\n| Country | GeoPlace | Geographic | nominal | dimension | open | none | plain |\n| Latitude | GeoCoordinate | Geographic | quantitative | dimension | fixed [-90,90] | none | plain |\n| ZipCode | GeoPlace | Geographic | nominal (NOT quant!) | dimension | open | none | plain |\n| AgeGroup | Binned | Categorical | ordinal | dimension | bounded | none | plain |\n| Duration | Duration | Temporal | quantitative | additive | open, ≥0 | none | time |\n| Rank | Rank | Discrete | ordinal | dimension | open | none | integer |\n| Status | Coded | Categorical | nominal | dimension | fixed | none | plain |\n| Direction | Coded | Categorical | nominal | dimension | cyclic (8/16) | none | plain |\n| Boolean | Coded | Categorical | nominal | dimension | fixed (2) | none | plain |\n\n#### 0.7.4 How the builder uses both axes\n\nThe compilation logic queries **two independent sources** to produce the `FieldSemantics`:\n\n```\n                          ┌─────────── Tier hierarchy ───────────┐\n                          │  T0: encoding type, basic defaults    │\n                          │  T1: format class, agg default, zero  │\n                          │  T2: specific format, interpolation   │\n                          └──────────────┬───────────────────────┘\n                                         │\n                                         ▼\n                              ┌── FieldSemantics ──┐\n                              │  encoding, format, aggregate │\n                              │  domain, scale, color, ticks │\n                              │  zero, diverging, sort, ...  │\n                              └──────────────▲──────────────┘\n                                         │\n                          ┌──────────────┴───────────────────────┐\n                          │  Orthogonal dimensions                │\n                          │  Vis candidates → encoding resolution │\n                          │  Agg role → aggregate function        │\n                          │  Domain shape → scale domain, ticks   │\n                          │  Diverging → color, midpoint, ref     │\n                          │  Format class → label format          │\n                          └──────────────────────────────────────┘\n```\n\nThe tier hierarchy provides **progressive refinement** (more detail at finer tiers). The orthogonal dimensions provide **cross-cutting properties** that apply regardless of tier. Both are stored in the type registry:\n\n```typescript\n// Each type in the registry carries its tier position AND its dimension values.\n// Actual interface from core/type-registry.ts:\ninterface TypeRegistryEntry {\n    // Tier position\n    t0: T0Family;              // 'Temporal' | 'Measure' | 'Discrete' | 'Geographic' | 'Categorical' | 'Identifier'\n    t1: T1Category;            // e.g., 'Amount', 'DateGranule', 'Entity', etc.\n\n    // Orthogonal dimensions (these drive viz properties directly)\n    visEncodings: VisCategory[];         // preference-ordered, e.g., ['quantitative', 'ordinal']\n    aggRole: AggRole;                    // 'additive' | 'intensive' | 'signed-additive' | 'dimension' | 'identifier'\n    domainShape: DomainShape;            // 'open' | 'bounded' | 'fixed' | 'cyclic'\n    diverging: DivergingClass;           // 'none' | 'conditional' | 'inherent'\n    formatClass: FormatClass;            // 'currency' | 'percent' | 'signed-percent' | 'unit-suffix' | 'date' | 'time' | 'integer' | 'plain'\n    zeroBaseline: ZeroBaseline;          // 'meaningful' | 'arbitrary' | 'contextual' | 'none'\n    zeroPad: number;                     // domain padding fraction (e.g., 0.08 for Rank, 0.05 for Temperature)\n}\n```\n\n> **Note on aggRole naming:** The design doc originally proposed `measure-sum` / `measure-avg` terminology.\n> The implementation uses `additive` (summed: Revenue, Count), `intensive` (averaged: Temperature, Price),\n> and `signed-additive` (summed but can go negative: Profit). The mapping is:\n> `measure-sum` → `additive`, `measure-avg` → `intensive`, signed measures → `signed-additive`.\n\nWhen a type is recognized at T1 level, the builder inherits the T1 entry's dimension values. When recognized at T2, the T2 entry's values override. When only T0 is known, the builder uses conservative defaults for each dimension (e.g., `visEncodings: ['quantitative']` for Measure, `domainShape: 'open'`, `diverging: 'none'`).\n\n#### 0.7.5 Key design consequences\n\n1. **Vis encoding is not 1:1 with semantic type.** `Month` can be ordinal (bar chart categories) or temporal (time-series X). `Rating` can be quantitative (scatter Y) or ordinal (heatmap). The `visEncodings` array provides a *preference order* that the builder resolves based on chart type and channel. This is a first-class property of the type, not an afterthought.\n\n2. **Domain shape directly determines scale and tick behavior.** Both `Percentage` (T1: Proportion) and `Latitude` (T1: GeoCoordinate) have bounded domains but are in completely different T0 families. The builder queries `domainShape` independently of the tier — same logic applies to both.\n\n3. **Diverging nature directly determines color scheme.** This is not just a T2-level detail — it's an orthogonal dimension that T1 types can carry too. `SignedMeasure` (T1) carries diverging information; `Physical` (T1) is conditionally diverging (only `Temperature` within it, at T2 level). Domain-specific diverging midpoints (e.g., pH=7) are derived from `intrinsicDomain` midpoint rather than dedicated types.\n\n4. **Aggregation role determines aggregate function — and auto-aggregation.** `Revenue` and `Price` are both `Amount` (T1), but Revenue is `additive` while Price is `intensive`. This distinction lives in the orthogonal dimension, not in the tier hierarchy. Critically, the aggregation role is essential for **auto-aggregation in under-specified charts**: when a user creates a bar chart with X=`Month` and Y=`Revenue` but provides no color encoding, the dataset likely has multiple rows per month (e.g., per-product or per-region rows). Without explicit color to distinguish them, the system must auto-aggregate Y. Knowing Revenue is `additive` lets the instantiator emit `{\"aggregate\": \"sum\", \"field\": \"Revenue\"}` automatically. The same applies to line charts — multiple Y values per X point produce a jagged, unreadable line unless aggregated. The correct aggregate function (sum vs mean vs count) depends entirely on the field's aggregation role: Revenue→sum, Temperature→mean, row-count→count. Getting this wrong (e.g., summing temperatures) produces nonsensical charts. Auto-aggregation should be a **compiler option** — an explicit flag the caller passes to the instantiation phase, since some contexts (e.g., raw data preview, user explicitly wanting per-row marks) should suppress it:\n\n    ```typescript\n    interface CompilerOptions {\n        autoAggregate: boolean;   // when true, instantiator injects aggregate transforms\n                                  // for measure fields when multiple rows map to the same\n                                  // positional encoding (e.g., same X in a bar/line chart)\n        // ... other compiler options ...\n    }\n    ```\n\n5. **The `FieldSemantics` is the resolved product of both axes.** Downstream code never reasons about tiers or dimensions directly — it gets a fully resolved context where encoding, format, aggregation, domain, diverging, etc. are all concrete values.\n\n#### 0.7.6 Intrinsic vs. data-dependent dimension values\n\nThe dimension values in the type registry (§0.7.3, §0.7.4) are **intrinsic** — they reflect the type's nature independent of any specific dataset or chart. But some dimension values are only fully determined when combined with **actual data characteristics**: cardinality, distribution, range, null rate, etc.\n\n**Examples of data-dependent shifts:**\n\n| Intrinsic (from type) | Data signal | Effective (after data) | Reason |\n|---|---|---|---|\n| `Coded` → vis: nominal | Cardinality > 20 | Treat as quantitative or use top-N + \"Other\" | Too many categories → cluttered legend/axis |\n| `Rating` → vis: [quant, ordinal] | Only 5 distinct values | Prefer ordinal | Small discrete set → ordinal ticks natural |\n| `Rating` → vis: [quant, ordinal] | 100-point scale, continuous-looking | Prefer quantitative | Large range → continuous axis cleaner |\n| `Country` → vis: nominal | 150+ countries | Consider top-N filtering or map instead of bar | Nominal with extreme cardinality → unreadable |\n| `Year` → vis: [temporal, ordinal] | Only 3 values: 2022, 2023, 2024 | Prefer ordinal | Sparse temporal → ordinal ticks better |\n| `Percentage` → domain: bounded [0,100] | Actual data range [45, 55] | Narrow domain, zoom in | Bounded but data clustered → auto-zoom |\n| `GenericMeasure` → agg: heuristic | Field name contains \"count\" | additive | Name-based heuristic refines generic role |\n\n**Design decision: where does this happen?**\n\nThis data-dependent resolution happens at **two distinct stages**, not one:\n\n1. **Context determination time** (`resolveFieldSemantics`): The builder can use data statistics (cardinality, min/max, distinct count) to **disambiguate** the intrinsic dimension values. For example, `Rating` has `visEncodings: ['quantitative', 'ordinal']` — the builder picks between them based on distinct-value count. This is a resolution of ambiguity already present in the type registry. The result is a concrete `FieldSemantics` with a single chosen encoding, a resolved domain, etc.\n\n2. **Instantiation time** (spec generation for a specific chart): The instantiation phase may **override** the context's resolved values based on the specific chart type, channel assignment, and visual constraints. For example:\n   - A `Coded` field with 30 values is resolved as `nominal` in the context. But when assigned to a color channel, the instantiator may decide to show only top-10 + \"Other\" to prevent legend clutter — this is a presentation decision, not a type-level one.\n   - A `Month` field resolved as `ordinal` in the context may be re-encoded as `temporal` if placed on X in a line chart — this is a chart-type-driven override.\n   - An ordinal field with high cardinality assigned to color may be treated as quantitative (continuous ramp) to reduce clutter — this is a channel-specific adaptation.\n\n**The boundary:** Context determination resolves *what the field IS* (its preferred encoding, format, domain, etc.). Instantiation resolves *how to render it given the chart constraints*. The context should carry enough information (including data statistics like cardinality) for the instantiator to make informed overrides without re-querying the type registry.\n\n```typescript\ninterface FieldSemantics {\n    // ... resolved dimension values ...\n\n    // Data statistics carried forward for instantiation-time decisions\n    dataStats: {\n        cardinality: number;        // distinct value count\n        nullRate: number;           // fraction of nulls\n        min?: number;               // for numeric fields\n        max?: number;\n        sortedDistinctValues?: string[];  // for ordinal/nominal (if small enough)\n    };\n}\n```\n\nThis way, the instantiator can check `context.dataStats.cardinality` and decide to bin, filter, or re-encode — without the context itself making premature presentation decisions.\n\n### 0.8 Cyclic domain types\n\nA special class of types has **cyclic** (wrap-around) domains:\n\n| Type | Cycle | Values | Visualization concern |\n|---|---|---|---|\n| Month | 12 | Jan–Dec or 1–12 | Axis shouldn't show \"13\"; color interpolation wraps |\n| Day (weekday) | 7 | Mon–Sun | Same |\n| Hour | 24 | 0–23 | Circular charts natural |\n| Direction | 8/16+ | N, NE, E, ... | Polar/radar natural |\n| Quarter | 4 | Q1–Q4 | Axis ordering |\n\nCyclic types need:\n- Built-in canonical sort (not alphabetical)\n- No extrapolation beyond the cycle\n- Cyclic color palettes for color encoding\n- Radar/polar chart recommendations\n\n---\n\n## §1 Motivation\n\n### 1.1 Current state — Four-stage pipeline\n\nThe chart engine uses a four-stage compilation pipeline, analogous to\nLLVM's frontend → IR → middle-end → backend architecture:\n\n| Stage | Function | Input → Output | Concern |\n|-------|----------|---------------|--------|\n| **1. Field Semantics** | `resolveFieldSemantics()` | Annotation + data → `FieldSemantics` | What *is* this field? (data identity) |\n| **2. Channel Semantics** | `resolveChannelSemantics()` | FieldSemantics + channel → `ChannelSemantics` | How should it render on this channel? |\n| **3. Layout** | `computeLayout()` | ChannelSemantics + data → `LayoutResult` | How big? What gets filtered? |\n| **4. Spec Generation** | `assembleVegaLite()` etc. | ChannelSemantics + template → backend spec | Backend-specific output |\n\n**`ChannelSemantics`** is the IR — a flat, target-agnostic interface that\ndecouples all upstream semantics (Stages 1–2) from all downstream\nrendering (Stages 3–4). Four backends (VL, ECharts, ChartJS, GoFish)\nall read the same `ChannelSemantics` record without knowing each other exist.\n\n**Stage boundaries:**\n- Stage 2 does NOT know about template mark types — zero-baseline\n  finalization requires mark knowledge and happens in Stage 4.\n- `convertTemporalData()` runs once before Stage 2; the converted data\n  is passed to Stage 2 for temporal format detection and then reused\n  by Stages 3–4.\n- `FieldSemantics` is internal to Stage 2 — it is never exposed downstream.\n\n`ChannelSemantics` is a flat interface — no nested `FieldSemantics` reference:\n\n| Decision | Source | Output |\n|---|---|---|\n| **From field semantics (data identity)** | | |\n| Semantic annotation | `resolveFieldSemantics()` | `ChannelSemantics.semanticAnnotation` |\n| Number format | `resolveFieldSemantics()` → `resolveFormat()` | `ChannelSemantics.format` |\n| Tooltip format | `resolveFieldSemantics()` → `resolveFormat()` | `ChannelSemantics.tooltipFormat` |\n| Aggregation default | `resolveFieldSemantics()` → `resolveAggregationDefault()` | `ChannelSemantics.aggregationDefault` |\n| Scale type | `resolveFieldSemantics()` → `resolveScaleType()` | `ChannelSemantics.scaleType` |\n| Domain constraint | `resolveFieldSemantics()` → `resolveDomainConstraint()` | `ChannelSemantics.domainConstraint` |\n| Canonical order | `resolveFieldSemantics()` → `resolveCanonicalOrder()` | `FieldSemantics.canonicalOrder` (internal) |\n| Cyclic ordering | `resolveFieldSemantics()` → `resolveCyclic()` | `ChannelSemantics.cyclic` |\n| Sort direction | `resolveFieldSemantics()` → `resolveSortDirection()` | `ChannelSemantics.sortDirection` |\n| Zero baseline | `resolveFieldSemantics()` → `resolveZeroClassFromAnnotation()` | `FieldSemantics.zeroBaseline` (internal) |\n| Binning suggested | `resolveFieldSemantics()` → `resolveBinningSuggested()` | `ChannelSemantics.binningSuggested` |\n| **Channel-specific (visualization)** | | |\n| Encoding type (Q/O/N/T) | `resolveEncodingTypeDecision()` | `ChannelSemantics.type` |\n| Zero-baseline | `computeZeroDecision()` (Stage 4) | `ChannelSemantics.zero` |\n| Color scheme | `getRecommendedColorSchemeWithMidpoint()` | `ChannelSemantics.colorScheme` (color/group only) |\n| Temporal format | `resolveTemporalFormat()` | `ChannelSemantics.temporalFormat` |\n| Ordinal sort order | `inferOrdinalSortOrder()` | `ChannelSemantics.ordinalSortOrder` |\n| Nice rounding | `resolveNice()` | `ChannelSemantics.nice` |\n| Tick constraint | `resolveTickConstraint()` | `ChannelSemantics.tickConstraint` |\n| Axis reversal | `resolveReversed()` | `ChannelSemantics.reversed` |\n| Interpolation | `resolveInterpolation()` | `ChannelSemantics.interpolation` |\n| Stackable | `resolveStackable()` | `ChannelSemantics.stackable` |\n\nThese decisions are effective but they represent only a fraction of the visualization properties that semantic types should influence. Many properties are either hardcoded, delegated to VL defaults, or handled ad-hoc in template instantiation.\n\n### 1.2 Properties not currently driven by semantic type\n\n| Category | Property | Example gap |\n|---|---|---|\n| **Formatting** | Axis tick format, tooltip format, legend label format | `Price` should show \"$1,234\", `Percentage` should show \"45%\" |\n| **Scale behavior** | Scale type (linear/log/sqrt), domain clamping, nice rounding | `Percentage` domain should clamp to [0, 100]; `Revenue` spanning 3 orders of magnitude could use log |\n| **Axis direction** | Reversed axis | `Rank` should have 1 at top (reversed Y axis) |\n| **Tick strategy** | Tick count, tick interval constraints | `Year` must have integer ticks only (no 2018.5); `Rating` 1-5 → exactly 5 ticks |\n| **Aggregation** | Default aggregate function | `Revenue` → `sum`; `Temperature` → `average`; `Count` → `sum` |\n| **Mark behavior** | Line interpolation, binning suitability, stack compatibility | `Rank` → step interpolation; `Age` (continuous) → suggest binning; `Rate` → don't stack |\n| **Display metadata** | Unit labels, axis title suffixes | `Temperature` → \"°C\" or \"°F\"; `Weight` → \"kg\" or \"lbs\" |\n\n### 1.3 Goal\n\nIntroduce a **FieldSemantics** — a structured object that captures all visualization-relevant decisions for a field, derived from its semantic type plus data characteristics. These properties are **promoted** into a flat `ChannelSemantics` struct — the single public interface consumed by all downstream phases (VL assembler, ECharts assembler, recommendation engine, tooltip renderer). `FieldSemantics` itself is an internal type used only inside `resolveChannelSemantics()`.\n\n### 1.4 Non-goals\n\n- Changing Stage 3 (layout/stretch model) — it stays data-driven\n- Building a full \"smart defaults\" system that replaces user configuration — the compilation context provides *defaults* that users and templates can override\n\n> **Note:** While §0 proposes adding new semantic types (Profit, Sentiment, NPS, etc.), the core taxonomy structure and string-based representation remain the same. The new types extend the existing catalog, they don't restructure it.\n\n---\n\n## §2 Design Principles\n\n1. **Semantic type is the source of truth.** The compilation context is a deterministic function of (semanticType, dataValues, channel, markType). No hidden state.\n\n2. **Decisions are structured, not scattered.** Instead of N separate functions that each know about semantic types, one builder produces a typed context object. Downstream code reads fields, never re-inspects the semantic type.\n\n3. **Per-field, then per-channel.** Some decisions are intrinsic to the field (format, aggregation default, scale type) regardless of which channel it's mapped to. Others are channel-dependent (zero-baseline, reversed axis). The context has both layers.\n\n4. **Override-friendly.** Every decision has a default from the semantic type. Users, templates, or the AI agent can override any individual decision without replacing the whole context. Overrides are explicit and traceable.\n\n5. **Backend-agnostic.** The compilation context describes abstract visualization intent (e.g., \"format as currency with 0 decimals\", \"reverse the axis\"). Backend-specific translation (VL `axis.format` vs. ECharts `axisLabel.formatter`) happens in Stage 4 (spec generation).\n\n6. **Semantic type + optional metadata.** The semantic type string alone (e.g., `'Rating'`) is not always sufficient. Certain types carry additional properties (domain, unit) that are critical for correct visualization. This metadata is provided alongside the semantic type as a structured annotation.\n\n---\n\n## §3 Semantic Type Annotation: Enriched Input\n\n### 3.1 The problem with bare semantic type strings\n\nToday, the LLM annotates each field with a single semantic type string:\n\n```json\n{ \"rating\": { \"type\": \"number\", \"semantic_type\": \"Rating\" } }\n```\n\nBut `Rating` alone is ambiguous:\n- Is it 0–5? 1–5? 1–10? 0–100?\n- Should we show exact tick marks [1, 2, 3, 4, 5] or let the renderer choose?\n- Is 0 a valid value (meaningful zero) or is the scale 1-based (arbitrary zero)?\n\nSimilar ambiguity exists for other bounded/scaled types:\n\n| Type | What's missing | Why it matters |\n|---|---|---|\n| **Rating** | Scale range (1–5, 1–10, 0–100) | Tick marks, domain constraint, zero decision |\n| **Score** | Scale range (0–100, 0–10) | Same as Rating |\n| **Percentage** | Representation (0–1 vs 0–100) | Format string: `.1%` vs `.1f` + \"%\" |\n| **Temperature** | Unit (°C, °F, K) | Format suffix, diverging midpoint (0°C vs 32°F) |\n| **Physical measures** (any) | Unit (kg, km, mph, etc.) | Format suffix |\n| **Price/Revenue/Cost/Amount** | Currency (USD, EUR, GBP, JPY) | Format prefix ($, €, £, ¥) |\n| **Duration** | Unit (seconds, minutes, hours, days) | Format strategy (\"2h 30m\" vs \"150 min\") |\n\nNotice this is NOT needed for open-ended measures like `Quantity`, `Count`, `Revenue` (generic), `Rank`, or categorical types like `Country`, `Status`. Those types have no inherent scale or unit ambiguity.\n\n### 3.2 SemanticAnnotation: the enriched input\n\nWe extend the annotation format to carry optional metadata alongside the semantic type:\n\n```typescript\n/**\n * Enriched semantic annotation for a single field.\n *\n * The LLM (or user) provides this when annotating a dataset.\n * Only `semanticType` is required — all other fields are optional\n * hints that improve compilation decisions.\n *\n * Compact form: When no metadata is needed, a bare string is equivalent\n * to `{ semanticType: \"...\"}`. The system accepts both:\n *   \"Rating\"                                        // bare string\n *   { semanticType: \"Rating\" }                      // object, no metadata\n *   { semanticType: \"Rating\", intrinsicDomain: [1, 5] }  // object with metadata\n */\ninterface SemanticAnnotation {\n    /** The semantic type string (e.g., 'Rating', 'Temperature', 'Price') */\n    semanticType: string;\n\n    /**\n     * The intrinsic domain (value range) of this field's scale.\n     * Only for bounded/scaled types — NOT for open-ended measures.\n     *\n     * Examples:\n     *   Rating 1–5:        [1, 5]\n     *   Score 0–100:       [0, 100]\n     *   Percentage 0–1:    [0, 1]\n     *   Percentage 0–100:  [0, 100]\n     *   Level 1–10:        [1, 10]\n     *   Latitude:          [-90, 90]  (always fixed)\n     *\n     * NOT used for: Revenue (open-ended), Count (open-ended),\n     * Quantity (open-ended), Temperature (unit determines meaning,\n     * not a fixed domain).\n     *\n     * When provided, drives:\n     *   - domainConstraint in FieldSemantics\n     *   - tickConstraint.exactTicks (for small discrete scales)\n     *   - zeroBaseline refinement (scale starting at 1 → arbitrary zero)\n     *   - colorSchemeHint.divergingMidpoint (via intrinsicDomain midpoint)\n     */\n    intrinsicDomain?: [number, number];\n\n    /**\n     * The unit of measurement for this field.\n     * Strictly optional — the system works correctly without it.\n     *\n     * When present, provides cosmetic improvements:\n     *   - format.suffix (e.g., \"°C\", \" kg\")\n     *   - format.prefix (e.g., \"$\" for USD, \"€\" for EUR)\n     *   - tooltip display with unit label\n     *   - diverging midpoint hint (0 for °C, 32 for °F)\n     *\n     * When absent, the system still determines encoding, aggregation,\n     * domain, zero-baseline, and color scheme correctly from the\n     * semantic type alone. The only loss is axis/tooltip formatting.\n     *\n     * IMPORTANT: Users often have mixed units within the same field\n     * (e.g., distances in both km and miles, prices in mixed currencies).\n     * When the LLM cannot determine a single consistent unit, it should\n     * omit this field rather than guess. The compilation logic must\n     * never assume unit is present.\n     *\n     * Examples (when unit IS consistent):\n     *   Temperature: \"°C\", \"°F\", \"K\"\n     *   Weight:      \"kg\", \"lbs\", \"g\", \"oz\"\n     *   Distance:    \"km\", \"mi\", \"m\", \"ft\"\n     *   Speed:       \"km/h\", \"mph\", \"m/s\"\n     *   Duration:    \"seconds\", \"minutes\", \"hours\", \"days\"\n     *   Price:       \"USD\", \"EUR\", \"GBP\", \"JPY\"\n     */\n    unit?: string;\n\n    /**\n     * Canonical sort order for ordinal/categorical fields.\n     * The LLM provides this when values have a meaningful non-alphabetical\n     * ordering that cannot be inferred from the semantic type alone.\n     *\n     * For well-known ordinals (Month, DayOfWeek, etc.), the system can\n     * infer the order from the type. But for domain-specific ordinals\n     * the LLM must provide it explicitly.\n     *\n     * Examples:\n     *   Education level:  [\"High School\", \"Bachelor's\", \"Master's\", \"PhD\"]\n     *   Severity:         [\"Low\", \"Medium\", \"High\", \"Critical\"]\n     *   T-shirt size:     [\"XS\", \"S\", \"M\", \"L\", \"XL\", \"XXL\"]\n     *   Satisfaction:     [\"Very Unsatisfied\", \"Unsatisfied\", \"Neutral\", \"Satisfied\", \"Very Satisfied\"]\n     *\n     * NOT needed for: Month (built-in), DayOfWeek (built-in), Year (numeric),\n     * Country (no inherent order), PersonName (no inherent order).\n     *\n     * When provided, drives:\n     *   - canonicalOrder in FieldSemantics\n     *   - axis/legend ordering\n     *   - ordinal scale domain\n     */\n    sortOrder?: string[];\n}\n```\n\n### 3.3 Which types need metadata?\n\n| Type | `intrinsicDomain` | `unit` | `sortOrder` | Why |\n|---|---|---|---|---|\n| **Rating** | **yes** — [1,5], [1,10], [0,100] | no | no | Scale determines ticks, domain, zero |\n| **Score** | **yes** — [0,100], [0,10], [0,1000] | no | no | Same as Rating |\n| **Percentage** | semi — inferred from data (0–1 vs 0–100) | no | no | Representation affects format |\n| **Temperature** | no (open-ended) | optional — °C, °F, K | no | Suffix + diverging midpoint hint; omit if mixed |\n| **Physical** (any) | no | optional — kg, km, mph, etc. | no | Suffix only; omit if mixed |\n| **Duration** | no | optional — sec, min, hr, day | no | Display hint; omit if mixed |\n| **Price** | no | optional — USD, EUR, GBP | no | Prefix ($, €, £); omit if mixed currencies |\n| **Revenue** | no | optional — USD, EUR, GBP | no | Prefix; omit if mixed currencies |\n| **Cost** | no | optional — USD, EUR, GBP | no | Prefix; omit if mixed currencies |\n| **Amount** | no | optional — USD, EUR, GBP | no | Prefix; omit if mixed currencies |\n| **Latitude** | fixed [-90, 90] | no | no | Always known; no annotation needed |\n| **Longitude** | fixed [-180, 180] | no | no | Always known |\n| Count, Quantity, Rank, ID, ... | no | no | no | No ambiguity |\n| **Ordinal categoricals** (Severity, Size, Education) | no | no | **yes** — domain-specific order | LLM provides canonical ordering |\n| Well-known ordinals (Month, DayOfWeek) | no | no | no (built-in) | System infers order; cyclic derived from type |\n| Nominal categoricals (Country, Name, Status) | no | no | no | No inherent order |\n| **Sentiment**, **Correlation**, **Profit** | no | no (or currency) | no | Diverging midpoint inferred from type (see §5.10) |\n| **Domain-specific diverging** (pH, NPS, custom) | **yes** — e.g., [0, 14] for pH | no | no | Diverging midpoint derived from `intrinsicDomain` midpoint |\n\n### 3.4 LLM prompt update\n\nThe annotation prompt changes minimally. The output schema becomes:\n\n```json\n{\n    \"fields\": {\n        \"rating\": { \"type\": \"number\", \"semantic_type\": \"Rating\", \"intrinsic_domain\": [1, 5] },\n        \"temperature\": { \"type\": \"number\", \"semantic_type\": \"Temperature\", \"unit\": \"°F\" },\n        \"price\": { \"type\": \"number\", \"semantic_type\": \"Price\", \"unit\": \"USD\" },\n        \"score\": { \"type\": \"number\", \"semantic_type\": \"Score\", \"intrinsic_domain\": [0, 100] },\n        \"severity\": { \"type\": \"string\", \"semantic_type\": \"Coded\", \"sort_order\": [\"Low\", \"Medium\", \"High\", \"Critical\"] },\n        \"sentiment\": { \"type\": \"number\", \"semantic_type\": \"Sentiment\" },\n        \"ph_level\": { \"type\": \"number\", \"semantic_type\": \"Score\", \"intrinsic_domain\": [0, 14] },\n        \"name\": { \"type\": \"string\", \"semantic_type\": \"PersonName\" },\n        \"revenue\": { \"type\": \"number\", \"semantic_type\": \"Revenue\" },\n        \"season\": { \"type\": \"string\", \"semantic_type\": \"Coded\", \"sort_order\": [\"Spring\", \"Summer\", \"Fall\", \"Winter\"] }\n    }\n}\n```\n\nGuidelines added to the prompt:\n\n```\n- For Rating and Score: provide \"intrinsic_domain\" as [min, max] of the scale\n  (e.g., [1, 5] for 5-star rating, [0, 100] for percentage score)\n- For Temperature and other Physical measures: provide \"unit\"\n  (e.g., \"°C\", \"kg\", \"km\", \"mph\", \"seconds\")\n- For Price, Revenue, Cost, Amount: provide \"unit\" with currency code\n  (e.g., \"USD\", \"EUR\", \"GBP\", \"JPY\")\n- For ordinal categorical fields with a meaningful non-alphabetical order:\n  provide \"sort_order\" as an array from lowest to highest\n  (e.g., [\"Low\", \"Medium\", \"High\"] for severity,\n   [\"XS\", \"S\", \"M\", \"L\", \"XL\"] for clothing size)\n- For well-known ordinals (Month, DayOfWeek): sort_order is NOT needed\n  (the system knows built-in orderings)\n- Cyclic detection (Month, DayOfWeek, Quarter, Hour, Direction, seasons)\n  is handled automatically by the system — no annotation needed\n- For all other types: no additional metadata needed\n```\n\n### 3.5 Types with multiple intrinsic data representations\n\nSome semantic types can appear in fundamentally **different numeric encodings** in the raw data. This is NOT unit ambiguity (kg vs lbs, °C vs °F) — unit differences are already handled by the optional `unit` field (§3.2). Representation ambiguity is about the **same concept encoded at different scales or data types**, which affects format strings, domain bounds, and tick generation.\n\n| Type | Representation A | Representation B | Other representations | How the builder detects |\n|---|---|---|---|---|\n| **Percentage / Rate** | Fractional: 0.48 (0–1 range) | Whole-number: 48 (0–100 range) | Per-mille: 480 (0–1000) | `max(data) ≤ 1.0` → fractional; `max(data) ≤ 100` → whole; or `intrinsicDomain` annotation |\n| **Timestamp** | Unix seconds: 1705312200 | Unix milliseconds: 1705312200000 | ISO string: \"2024-01-15T14:30:00\" | Magnitude: >1e12 → ms; >1e9 → s; string → parse |\n| **Month** | Numeric: 1–12 | Abbreviated string: \"Jan\"–\"Dec\" | Full name: \"January\"–\"December\" | Data type (number vs string); string pattern matching |\n| **Day** | Numeric: 0–6 or 1–7 | Abbreviated: \"Mon\"–\"Sun\" | Full: \"Monday\"–\"Sunday\"; day-of-month: 1–31 | Data type + value range + string pattern |\n| **Year** | Number: 2024 | String: \"2024\" | Two-digit: 24 | Data type; value range (0–99 → two-digit ambiguity) |\n| **Boolean** | Boolean: true/false | Numeric: 0/1 | String: \"Yes\"/\"No\", \"Y\"/\"N\", \"True\"/\"False\" | Data type + distinct values |\n| **Coordinates** | Decimal degrees: 47.6062 | DMS string: \"47°36'22\\\"N\" | [lat, lon] tuple | Data type: number vs string pattern |\n\n**Why this matters — concrete example (Percentage):**\n\n| Concern | Fractional (0–1) | Whole-number (0–100) |\n|---|---|---|\n| Format pattern | `.1%` (d3 auto-multiplies ×100) | `.0f` + suffix `%` |\n| Domain constraint | `[0, 1]` | `[0, 100]` |\n| Tick values | 0, 0.25, 0.5, 0.75, 1.0 | 0, 25, 50, 75, 100 |\n| Tooltip | \"48.3%\" | \"48%\" |\n\nGetting the representation wrong means the axis shows `4800%` instead of `48%`, or domain clips to `[0, 1]` when data is 0–100.\n\n**Why this matters — concrete example (Timestamp):**\n\n| Concern | Unix seconds | Unix milliseconds |\n|---|---|---|\n| Conversion | `new Date(v * 1000)` | `new Date(v)` |\n| Misdetection effect | Dates in 1970 (ms interpreted as s) or year 55970 (s interpreted as ms) | Same |\n\n**Design decision:** The builder resolves representation at context-determination time using a priority chain:\n\n1. **Explicit annotation** — `domain: [0, 1]` disambiguates percentage; `unit: \"milliseconds\"` disambiguates timestamp\n2. **Data inspection** — value range, magnitude, data type, distinct values, string patterns\n3. **Conservative default** — when ambiguous, pick the most common representation\n\nThe resolved representation is baked into the `FieldSemantics` (format, domain, ticks). Downstream consumers never need to reason about which representation was in the data.\n\n### 3.6 Backward compatibility\n\nBare string annotations continue to work:\n\n```typescript\n// Normalize: accept both string and object forms\nfunction normalizeAnnotation(\n    input: string | SemanticAnnotation\n): SemanticAnnotation {\n    if (typeof input === 'string') {\n        return { semanticType: input };\n    }\n    return input;\n}\n```\n\nThe `semantic_types` map in `ChartAssemblyInput` changes type:\n\n```typescript\n// Before:\nsemantic_types?: Record<string, string>;\n\n// After (with backward compat):\nsemantic_types?: Record<string, string | SemanticAnnotation>;\n```\n\n### 3.6 How annotation metadata flows into FieldSemantics\n\nThe `resolveFieldSemantics` function accepts the full annotation:\n\n```\nresolveFieldSemantics(annotation: SemanticAnnotation, fieldName, values)\n    │\n    ├── annotation.intrinsicDomain provided?\n    │     → domainConstraint = mergeIntrinsicWithData(intrinsicDomain, values, soft)\n    │       (effective domain = union of intrinsic bounds and actual data range)\n    │     → tickConstraint.exactTicks (if intrinsic range is small, e.g., [1,5] → [1,2,3,4,5])\n    │     → zeroBaseline: intrinsicDomain[0] > 0 → 'arbitrary' (1-based scale)\n    │     → binningSuggested: false (bounded discrete scale)\n    │     → colorSchemeHint.divergingMidpoint: (intrinsicDomain[0] + intrinsicDomain[1]) / 2\n    │\n    ├── annotation.unit provided?\n    │     → format.suffix or format.prefix (unit → display mapping)\n    │     → tooltipFormat.suffix (more verbose: \"°F\" instead of \"°\")\n    │     → diverging midpoint hint (°C → 0, °F → 32)\n    │\n    ├── annotation.sortOrder provided?\n    │     → canonicalOrder = sortOrder\n    │     → defaultVisType = 'ordinal' (not 'nominal')\n    │\n    └── none provided?\n          → fall back to type-only + data-driven inference\n          → diverging midpoint inferred by resolveDivergingInfo() (see §5.10)\n```\n\n---\n\n## §4 FieldSemantics: The Core Structure\n\n### 4.1 Type definition\n\n```typescript\n/**\n * Complete field semantics for a single data field.\n *\n * Computed once per field during Stage 1 (field semantic resolution).\n * Read-only downstream — backends translate this to their native format.\n *\n * These are FIELD-INTRINSIC properties — they depend on the semantic type,\n * annotation metadata, and data values, NOT on which channel the field is\n * mapped to. Channel-specific decisions (color scheme, axis reversal,\n * interpolation, tick strategy, nice rounding, stacking, zero-baseline)\n * are resolved separately in Stage 2 (resolveChannelSemantics) and live\n * on ChannelSemantics.\n */\ninterface FieldSemantics {\n    // --- Identity ---\n    /** The semantic annotation (normalized from string or object input).\n     *  Contains the semantic type string plus optional metadata\n     *  (intrinsicDomain, unit, sortOrder).\n     */\n    semanticAnnotation: SemanticAnnotation;\n\n    // --- Encoding ---\n    /** Preferred encoding type, disambiguated from registry using data */\n    defaultVisType: 'quantitative' | 'ordinal' | 'nominal' | 'temporal';\n\n    // --- Formatting ---\n    /**\n     * Primary number format spec.\n     * Non-empty only when the semantic type adds value over VL's native\n     * formatting: currency prefix ($), unit suffix (kg), signed prefix (+/-),\n     * percentage (%), abbreviation (1.2M).\n     * For generic decimals (formatClass 'decimal'), format is empty {}\n     * because VL's native formatting adapts precision better.\n     */\n    format: FormatSpec;\n\n    /**\n     * Tooltip format — typically with explicit precision for pop-ups\n     * even when the axis format is left to VL defaults.\n     */\n    tooltipFormat?: FormatSpec;\n\n    // --- Aggregation ---\n    /**\n     * Default aggregate function — intrinsic to the field (additive vs intensive).\n     * 'sum' for additive measures (Revenue, Count), 'average' for intensive\n     * measures (Temperature, Rating). undefined for non-aggregable fields.\n     */\n    aggregationDefault?: 'sum' | 'average';\n\n    // --- Scale ---\n    /**\n     * Zero-baseline classification (meaningful / arbitrary / contextual).\n     * NOT a boolean decision — that requires channel + mark type knowledge\n     * and is finalized as ChannelSemantics.zero in Stage 4.\n     */\n    zeroBaseline: ZeroBaseline | 'unknown';\n\n    /**\n     * Recommended scale type based on data distribution.\n     * Only set for specific semantic types (e.g., Population → 'log' when\n     * data spans ≥ 4 orders of magnitude).\n     */\n    scaleType?: 'linear' | 'log' | 'sqrt' | 'symlog';\n\n    // --- Domain ---\n    /**\n     * Intrinsic domain bounds (from annotation, type-intrinsic, or data-inferred).\n     * E.g., Rating [1, 5], Latitude [-90, 90], Percentage [0, 100].\n     */\n    domainConstraint?: DomainConstraint;\n\n    // --- Ordering ---\n    /**\n     * Canonical ordinal sort order (months, days, seasons, etc.).\n     * Resolved from annotation.sortOrder or well-known type sequences.\n     */\n    canonicalOrder?: string[];\n\n    /** Whether the canonical order is cyclic (wraps around) */\n    cyclic: boolean;\n\n    /** Default sort direction ('descending' for Rank, 'ascending' for rest) */\n    sortDirection: 'ascending' | 'descending';\n\n    // --- Histogram ---\n    /** Whether this field's data distribution benefits from binning */\n    binningSuggested: boolean;\n}\n```\n\n**What is NOT on FieldSemantics (and why):**\n\nThese properties are resolved at the channel level in `resolveChannelSemantics()`\nbecause they depend on which channel the field is mapped to, or need\nchannel-level context:\n\n| Property | Why channel-level | Resolved by |\n|---|---|---|\n| `nice` | Depends on whether `domainConstraint` exists (field-level) but also whether the domain is bounded or fixed — resolved together with domain | `resolveNice()` |\n| `tickConstraint` | Depends on type + annotation domain; resolved alongside channel | `resolveTickConstraint()` |\n| `reversed` | Only meaningful on positional axes (x/y) | `resolveReversed()` |\n| `interpolation` | Only meaningful for line/area marks | `resolveInterpolation()` |\n| `stackable` | Only meaningful for positional channels with compatible marks | `resolveStackable()` |\n| `colorScheme` | Only meaningful on color/group channel; needs VL type + data | `getRecommendedColorSchemeWithMidpoint()` |\n| `zero` | Requires mark type (bar → include zero); finalized in Stage 4 | `computeZeroDecision()` |\n| `temporalFormat` | Needs converted temporal data for format detection | `resolveTemporalFormat()` |\n| `ordinalSortOrder` | Uses `inferOrdinalSortOrder()` with field values, respects user sort overrides | `inferOrdinalSortOrder()` |\n\n### 4.2 Supporting types\n\n```typescript\n/**\n * T0 Family — coarsest tier (§0.2).\n * Used internally by the builder to resolve compilation context.\n * NOT exposed on FieldSemantics — consumers use the\n * materialized properties instead.\n */\ntype T0Family =\n    | 'Temporal'         // DateTime, Year, Month, Duration, etc.\n    | 'Measure'          // Quantity, Price, Revenue, Temperature, etc.\n    | 'Discrete'         // Rank, Score, Rating, Index, etc.\n    | 'Categorical'      // Name, Status, Category, etc.\n    | 'Ordinal'          // Domain-specific ordered categories\n    | 'Geographic'       // Latitude, Country, etc.\n    | 'Identifier';      // ID, SKU — never encode\n\n/**\n * T1 Category — mid-level tier (§0.3).\n * Used internally by the builder. NOT exposed on FieldSemantics.\n */\ntype T1Category =\n    | 'DateTime' | 'DateGranule' | 'Duration'               // Temporal\n    | 'Amount' | 'Physical' | 'Proportion'                   // Measure\n    | 'SignedMeasure' | 'GenericMeasure'                      // Measure\n    | 'Rank' | 'Score' | 'Index'                              // Discrete\n    | 'GeoCoordinate' | 'GeoPlace'                            // Geographic\n    | 'Entity' | 'Coded' | 'Binned'                           // Categorical\n    | 'ID';                                                    // Identifier\n\n/**\n * Format specification — backend-agnostic.\n *\n * Provides the numeric format pattern, optional prefix/suffix, and unit.\n * How these are rendered (tick labels, axis title, tooltip) is the\n * renderer's decision — the context just carries the information.\n */\ninterface FormatSpec {\n    /**\n     * d3-format pattern (used by VL natively; ECharts translates).\n     * Examples: \"$,.0f\", \".1%\", \".2f\", \",d\"\n     */\n    pattern?: string;\n\n    /** Prefix for formatted value. E.g., \"$\", \"€\", \"£\", \"¥\" */\n    prefix?: string;\n\n    /** Suffix for formatted value. E.g., \"%\", \"°C\", \" kg\" */\n    suffix?: string;\n\n    /** Number of decimal places (overrides pattern precision) */\n    decimals?: number;\n\n    /**\n     * Whether to abbreviate large/small numbers.\n     * true → 1234567 → \"1.2M\", 0.00123 → \"1.2m\"\n     */\n    abbreviate?: boolean;\n\n    /**\n     * Temporal format string (strftime-style).\n     * Used when the field is temporal. E.g., \"%Y\", \"%b %d\", \"%H:%M\"\n     */\n    temporalPattern?: string;\n}\n\n/** Aggregate operations */\ntype AggregateOp = 'sum' | 'average' | 'median' | 'min' | 'max' | 'count';\n\n/** Scale types for quantitative axes */\ntype ScaleType = 'linear' | 'log' | 'sqrt' | 'symlog';\n\n/** Hard domain constraints */\ninterface DomainConstraint {\n    min?: number;\n    max?: number;\n    /**\n     * Whether to hard-clamp values outside the constraint.\n     * true: values outside [min, max] are clipped to the boundary.\n     * false: constraint is a suggestion — renderer may extend if data exceeds.\n     */\n    clamp?: boolean;\n}\n\n/** Tick generation constraints */\ninterface TickConstraint {\n    /** Force ticks to be integers only (e.g., Year, Count, Rating) */\n    integersOnly?: boolean;\n\n    /** \n     * Exact set of tick values (e.g., Rating 1-5 → [1, 2, 3, 4, 5]).\n     * When specified, overrides automatic tick calculation.\n     */\n    exactTicks?: number[];\n\n    /**\n     * Suggested tick count. Renderer may adjust based on available space.\n     */\n    suggestedCount?: number;\n\n    /**\n     * Minimum step between ticks (e.g., 1 for integer types).\n     */\n    minStep?: number;\n}\n\n/** Color scheme hint (drives getRecommendedColorScheme) */\ninterface ColorSchemeHint {\n    /** Primary scheme type */\n    type: 'categorical' | 'sequential' | 'diverging';\n\n    /**\n     * Whether to reverse the color scale direction.\n     * true for Rank (1 = best = darkest/most saturated).\n     */\n    reversed?: boolean;\n\n    /**\n     * Natural midpoint for diverging schemes.\n     * This is the semantic center of the data — the value that should\n     * map to the neutral color in diverging palettes.\n     *\n     * Sources (in priority order):\n     *   1. annotation.unit → type lookup (°C → 0, °F → 32)\n     *   2. Type-intrinsic (Profit → 0, Correlation → 0)\n     *   3. Domain midpoint (Rating [1,5] → 3)\n     *   4. Data-driven: spansBothSides(0) → 0, else data midpoint\n     *\n     * Only meaningful when type = 'diverging'.\n     */\n    divergingMidpoint?: number;\n\n    /**\n     * Whether the diverging nature is inherent to the type (true)\n     * or conditional on the data spanning both sides (false).\n     *\n     * Inherent: Sentiment (always has pos/neg meaning),\n     *           Correlation (always -1 to 1)\n     * Conditional: Temperature (diverging only if data crosses 0°C),\n     *              Revenue (diverging only if data has losses),\n     *              Percentage (diverging only if data has negatives)\n     *\n     * When inherentlyDiverging = true:\n     *   - Always use diverging scheme, even if all data is on one side\n     *   - The midpoint carries semantic meaning regardless\n     *\n     * When inherentlyDiverging = false (default):\n     *   - Only use diverging scheme if data actually spans both sides\n     *     of the midpoint\n     *   - Fall back to sequential if all values are on one side\n     */\n    inherentlyDiverging?: boolean;\n}\n\n/** Line interpolation methods */\ntype Interpolation = 'linear' | 'monotone' | 'step' | 'step-after' | 'step-before';\n```\n\n---\n\n## §5 Semantic Type → Context Mapping\n\n### 5.1 Format rules\n\nThe format is the most impactful new capability. The context provides format information (pattern, prefix, suffix); the **renderer** decides how to use them — whether to put the unit on tick labels, in the axis title, or only in tooltips is a rendering concern, not a compilation concern.\n\n**Design principle — only override VL's native formatting when semantic context adds value.**\n\nVL's default axis formatting is excellent — it adapts precision, uses ~s notation for large values, and produces clean integer labels for integer data. We only provide an explicit format when:\n- There's a **prefix** ($, €, +) or **suffix** (%, °C, kg) that VL can't know about\n- There's an **abbreviation** need (1.2M instead of 1200000)\n- There's a **sign** requirement (+12% / -5%) that VL won't add by default\n- There's a **no-comma** override (Year: 2024 not 2,024)\n\nFor generic decimal types (Number, Score, Rating, Ratio, Latitude, Longitude), the format is **empty** — VL handles axis formatting natively and does it better than any hardcoded precision.\n\n**Data-driven precision:** When format IS provided (currency, percent, unit-suffix, etc.), the precision is **data-driven** rather than hardcoded. The `detectPrecision()` helper examines actual data values and returns the maximum meaningful decimal places (0–4, capped to avoid floating-point noise). This means:\n- Revenue data `[120000, 230000]` → `$120K, $230K` (0 decimals)\n- Price data `[12.50, 8.99]` → `$12.50, $8.99` (2 decimals, always for Price)\n- Temperature data `[23.5, 18.2]` → `23.5°C, 18.2°C` (1 decimal)\n\n| Semantic Type | `pattern` | `prefix` | `suffix` | `abbreviate` | Tooltip override | Notes |\n|---|---|---|---|---|---|---|\n| **Count** | `,d` | — | — | — | — | Integer with thousands sep |\n| **Amount** | data-driven precision | `$` | — | yes | `,.2f` + prefix `$` | |\n| **Price** | `,.2f` | `$` | — | yes | — | Always shows cents |\n| **Revenue** | data-driven precision | `$` | — | yes | `,.2f` + prefix `$` | |\n| **Cost** | data-driven precision | `$` | — | yes | `,.2f` + prefix `$` | |\n| **Percentage** (0–1) | `.Xp%` | — | — | — | `.X+1p%` | Auto-detects 0–1 vs 0–100 |\n| **Percentage** (0–100) | data-driven + `d`/`.Xf` | — | `%` | — | same | Suffix, no ×100 |\n| **PercentageChange** | `+.X%` or `+.Xf` | — | `%` (if 0–100) | — | higher-precision | Always-show sign |\n| **Temperature** | data-driven precision | — | from unit (`°C`) | — | higher-precision | Unit from annotation |\n| **Score** | — (empty) | — | — | — | data-driven precision | VL handles axis natively |\n| **Rating** | — (empty) | — | — | — | data-driven precision | VL handles axis natively |\n| **Rank** | `,d` | — | — | — | — | Integer |\n| **Year** | `d` | — | — | — | — | No comma (2024 not 2,024) |\n| **Number** | — (empty) | — | — | — | data-driven precision | VL handles axis natively |\n| **Quantity** | data-driven precision | — | from unit | yes | — | Unit from annotation |\n| **Profit** | `+` + data-driven | `$` | — | yes | `+,.2f` + prefix `$` | Signed currency |\n| **Sentiment** | `+` + data-driven | — | — | — | higher-precision | Signed decimal |\n| **Correlation** | `+` + data-driven | — | — | — | higher-precision | Signed decimal |\n| **Latitude, Longitude** | — (empty) | — | — | — | data-driven precision | VL handles axis natively |\n| **Ratio** | — (empty) | — | — | — | data-driven precision | VL handles axis natively |\n\n**Unit and currency from annotation metadata:** When the LLM provides `unit` in the annotation (e.g., `\"unit\": \"EUR\"` for Price, `\"unit\": \"kg\"` for Weight), the format spec uses that directly. See §3 for the full annotation schema.\n\n**Fallback priority for units:** annotation.unit > column-name heuristics (\"Weight (kg)\") > data-value scanning (\"$1,234\") > type-specific defaults (\"$\" for Price).\n\n### 5.1.1 Parsing\n\nParsing is the **compiler's responsibility**, not part of the compilation context. The semantic type already tells the compiler what the data represents — the compiler decides how to clean it.\n\nFor example, knowing a field is `Amount` tells the compiler to strip `$` and `,` from `\"$1,234.56\"`. Knowing it's `Percentage` with string representation tells it to strip `%`. The semantic type + data representation (§3.5) provide all the information needed; no separate parse hint interface is required.\n\n**Semantic type as parsing guide:**\n\n| Semantic Type | Raw data examples | Compiler knows to... |\n|---|---|---|\n| Amount, Price, Revenue, Cost | `\"$1,234.56\"`, `\"€1.234,56\"` | Strip currency symbol + separators → number |\n| Percentage, PercentageChange | `\"45.2%\"`, `\"+12.3%\"` | Strip `%` and sign → number |\n| Temperature, Quantity (with unit) | `\"23.5°C\"`, `\"75 kg\"` | Strip unit suffix → number |\n| Duration | `\"2h 30m\"`, `\"02:30:00\"` | Parse compound time → seconds |\n| Timestamp | `1705312200`, `\"2024-01-15\"` | Detect epoch vs string → Date |\n| Boolean | `\"Yes\"`, `\"No\"`, `1`, `0` | Normalize → boolean |\n| Month | `\"January\"`, `1` | Normalize → canonical form |\n| Coordinates | `\"47°36'22\"N\"` | DMS → decimal degrees |\n\nThe compiler may provide built-in parsing utilities internally, but that's an implementation detail — not something the compilation context needs to describe.\n\n### 5.2 Aggregation defaults\n\n| Semantic Family | Semantic Types | Default Aggregate | Rationale |\n|---|---|---|---|\n| **Additive measures** | Count, Amount, Revenue, Cost, Quantity, Duration | `sum` | These represent totals — summing is natural |\n| **Intensive measures** | Percentage, PercentageChange, Temperature, Score, Rating, Price, Correlation, Sentiment | `average` | These represent rates/conditions — averaging is natural |\n| **Signed additive** | Profit | `sum` | Additive but can be negative; summing preserves sign semantics |\n| **Discrete numeric** | Rank, Index, ID | — (none) | Aggregation is meaningless |\n| **Temporal** | DateTime, Date, Year, etc. | — (none) | Not aggregable |\n| **Categorical** | Name, Status, Category, etc. | — (none) | Not aggregable |\n\n**When this helps:** When a bar chart is created with Revenue on Y, the system auto-applies `aggregate: 'sum'` (total revenue per category). For Temperature on Y, it auto-applies `aggregate: 'average'` (mean temperature per category). Currently, the AI agent or the user must specify this.\n\n### 5.3 Scale type recommendations\n\n| Condition | Recommended Scale | Example |\n|---|---|---|\n| Measure type + data spans >2 orders of magnitude | `log` | Revenue: $1K to $1B |\n| Measure type + data has long tail (skew > 2) | `sqrt` | Population: most cities small, few very large |\n| Measure type + data spans both positive and negative + wide range | `symlog` | Profit/Loss: -$10M to +$500M |\n| Percentage (0-100) | `linear` (always) | Completion rate |\n| All other quantitative | `linear` | Default |\n\n**Implementation note:** Scale type recommendation requires inspecting data distribution (min, max, skewness). This makes it a **data-dependent** decision that belongs in the compilation context builder, not in a static mapping.\n\n### 5.4 Domain constraints\n\nDomain constraints come from two sources: **annotation metadata** (explicit `intrinsicDomain` from the LLM) and **type-intrinsic knowledge** (geographic bounds, etc.).\n\nThe effective domain stored in `FieldSemantics.domainConstraint` is always the **union** of the intrinsic domain and the actual data range. This ensures data points that exceed the type's natural bounds (e.g., 155% growth for a Percentage type) are never clipped.\n\nTwo categories:\n\n- **Hard domains** (`clamp: true`): physically impossible to exceed — Latitude [-90, 90], Longitude [-180, 180], Correlation [-1, 1]. The intrinsic bounds _are_ the final bounds.\n- **Soft domains** (`clamp: false`): intrinsic bounds describe the _typical_ range, but data can legitimately exceed them. Effective domain = `[min(intrinsic[0], dataMin), max(intrinsic[1], dataMax)]`.\n\n| Source | Semantic Type | Intrinsic Domain | Data Range | Effective Domain | Clamp? |\n|---|---|---|---|---|---|\n| **Annotation** | Rating (domain: [1, 5]) | [1, 5] | [1, 4] | `{ min: 1, max: 5 }` | soft |\n| **Annotation** | Score (domain: [0, 100]) | [0, 100] | [0, 120] | `{ min: 0, max: 120 }` | soft |\n| **Data-inferred** | Percentage (0–100 data) | [0, 100] | [0, 80] | `{ min: 0, max: 100 }` | soft |\n| **Data-inferred** | Percentage (> 100 data) | [0, 100] | [0, 155] | `{ min: 0, max: 155 }` | soft |\n| **Data-inferred** | Percentage (0–1 data) | [0, 1] | [0, 0.8] | `{ min: 0, max: 1 }` | soft |\n| **Type-intrinsic** | Latitude | [-90, 90] | any | `{ min: -90, max: 90 }` | hard |\n| **Type-intrinsic** | Longitude | [-180, 180] | any | `{ min: -180, max: 180 }` | hard |\n| **Type-intrinsic** | Correlation | [-1, 1] | any | `{ min: -1, max: 1 }` | hard |\n\n**Priority:** annotation.intrinsicDomain > type-intrinsic > data-inferred.\n\n**Percentage scale detection:** The representation (0–1 fractional vs 0–100 whole-number) is detected from data: if ≥ 80% of absolute values are ≤ 1, treat as fractional; otherwise whole-number. This works even when values exceed the intrinsic range (e.g., [10, 20, 155] → whole-number → intrinsic [0, 100] → effective [0, 155]).\n\nWhen `annotation.intrinsicDomain` is provided, the builder also derives:\n- **zeroBaseline:** If `intrinsicDomain[0] > 0` (e.g., Rating [1, 5]), zero is arbitrary. If `intrinsicDomain[0] === 0` (e.g., Score [0, 100]), zero is contextual.\n- **tickConstraint:** If the intrinsic domain span is small (≤ 20), generate `exactTicks` for every integer. E.g., Rating [1, 5] → `exactTicks: [1, 2, 3, 4, 5]`.\n- **binningSuggested:** If intrinsic domain span ≤ 20, binning is not useful → `false`.\n- **colorSchemeHint.divergingMidpoint:** `(intrinsicDomain[0] + intrinsicDomain[1]) / 2`. E.g., Score [0, 100] → midpoint 50.\n\n### 5.5 Tick constraints\n\nTick constraints combine type-intrinsic rules with annotation-provided domain:\n\n| Semantic Type | `integersOnly` | `exactTicks` | `minStep` | Source |\n|---|---|---|---|---|\n| Count | true | — | 1 | Type-intrinsic |\n| Year | true | — | 1 | Type-intrinsic |\n| Rank | true | — | 1 | Type-intrinsic |\n| Rating (domain: [1, 5]) | true | [1, 2, 3, 4, 5] | 1 | Annotation domain |\n| Rating (domain: [1, 10]) | true | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | 1 | Annotation domain |\n| Score (domain: [0, 100]) | true | — (too many) | 1 | Annotation domain (span > 20 → no exactTicks) |\n| Month (1-12) | true | [1..12] | 1 | Type-intrinsic |\n| Index | true | — | 1 | Type-intrinsic |\n\n**Rule for exactTicks from annotation domain:** When `domain` is provided and `domain[1] - domain[0] ≤ 20`, generate integer ticks from `domain[0]` to `domain[1]`. When span > 20, use `integersOnly: true` with `minStep: 1` and let the renderer choose tick count.\n\n### 5.6 Reversed axis\n\n| Semantic Type | Reversed? | Rationale |\n|---|---|---|\n| Rank | `true` | 1st place should be at the top (Y axis) or leftmost (X axis) |\n| All others | `false` | Standard direction |\n\n**Note:** Reversed axis is a *default suggestion*. A bump chart template may already handle rank reversal internally (via `scale.reverse`). The compilation context provides the intent; the template decides whether to apply it.\n\n### 5.7 Stack compatibility\n\n| Semantic Type | Stackable | Mode | Rationale |\n|---|---|---|---|\n| Count, Amount, Revenue, Cost, Quantity | `'sum'` | Additive | Parts sum to whole |\n| Percentage | `'normalize'` | Normalize | Show proportion breakdown |\n| Temperature, Score, Rating, PercentageChange, Correlation, Sentiment | `false` | — | Stacking rates/conditions is meaningless |\n| Rank, Index | `false` | — | Not aggregable |\n| Duration, Profit | `'sum'` | Additive | Duration is additive; Profit sums to net |\n\n### 5.8 Interpolation hints\n\n| Semantic Type | Interpolation | Rationale |\n|---|---|---|\n| Rank, Index | `'step'` | Value stays constant until next transition |\n| Rating, Score | `'step'` or `'linear'` | Quasi-continuous; context-dependent |\n| Temperature, Quantity | `'monotone'` | Smooth physical process |\n| Count | `'step-after'` or `'linear'` | Discrete events; depends on context |\n| Revenue, Price, Amount, Profit | `'monotone'` | Smooth trend |\n| Percentage, PercentageChange, Correlation | `'monotone'` | Smooth trend |\n| All others / unknown | `'linear'` | Default |\n\n### 5.9 Binning suitability\n\n| Semantic Type | Suggest Binning? | Rationale |\n|---|---|---|\n| Quantity, Amount, Price, Revenue, Cost | `true` | Continuous, benefits from distribution view |\n| Temperature | `true` | Continuous measure |\n| Percentage, PercentageChange | `true` | Continuous, though bounded |\n| Duration | `true` | Continuous time span |\n| Count | `true` (if high-card) | Many distinct values → bin |\n| Score (continuous range) | `true` | e.g., 0-100 scores |\n| Rating (1-5, 1-10) | `false` | Too few values to bin |\n| Rank | `false` | Ordinal; binning loses identity |\n| Year | `false` | Should use temporal axis, not bins |\n| All categorical | `false` | Not numeric |\n\n### 5.10 Diverging point inference\n\nDiverging treatment (color scheme + axis centering) requires knowing a **midpoint** — the value that separates two opposing meanings. This midpoint can come from multiple sources, resolved in priority order:\n\n**Priority chain for diverging midpoint:**\n\n```\n1. annotation.unit → type lookup        (°C → 0, °F → 32, K → 273.15)\n2. type-intrinsic midpoint              (see table below)\n3. annotation.intrinsicDomain midpoint  (Rating [1,5] → 3)\n4. data-driven: spansBothSides(0)       (data has both neg + pos → midpoint 0)\n5. data-driven: midpoint of data range  (fallback)\n```\n\n**Type-intrinsic midpoints (no annotation needed):**\n\n| Semantic Type | Midpoint | Inherently diverging? | Rationale |\n|---|---|---|---|\n| Temperature | 0 (°C) / 32 (°F) / 273.15 (K) | **conditional** — only when data spans both sides | freezing/thawing boundary; but all-positive temp data is fine as sequential |\n| Profit | 0 | **conditional** | gain vs loss; but all-profitable data doesn't need diverging |\n| Sentiment | 0 | **inherent** — always meaningful | positive vs negative sentiment, even if all values happen to be positive |\n| Correlation | 0 | **inherent** | positive vs negative correlation |\n| PercentageChange | 0 | **conditional** | growth vs decline; but all-growth data is fine as sequential |\n| Score (0–100 scale) | 50 | **conditional** | above/below average; only when data spans both sides |\n| Rating (1–5 scale) | 3 | **conditional** | derived from domain midpoint; rarely used as diverging |\n\n**Key distinction — inherent vs. conditional:**\n\n- **Inherently diverging** types always benefit from a diverging palette because the two sides carry distinct semantic meanings (e.g., positive vs negative sentiment). Even if all data points are positive, the color encodes \"how positive\" vs \"how negative\" relative to the center.\n\n- **Conditionally diverging** types only use a diverging palette when the data actually spans both sides of the midpoint. If Revenue is all positive, a sequential palette (darker = more revenue) is more informative than a diverging palette with an unused half.\n\n**`resolveDivergingInfo()` utility:**\n\n```typescript\ninterface DivergingInfo {\n    /** The midpoint value where the diverging center sits */\n    midpoint: number;\n    /** Whether this type is always diverging or only when data spans both sides */\n    inherent: boolean;\n    /** Source of the midpoint determination */\n    source: 'unit' | 'type-intrinsic' | 'domain' | 'data';\n}\n\n/**\n * Resolve the diverging midpoint and whether the type is inherently diverging.\n *\n * Called by resolveColorSchemeHint() to populate ColorSchemeHint.\n *\n * @param semanticType  - The semantic type string\n * @param annotation    - Full annotation (may have intrinsicDomain, unit)\n * @param values        - Data values for data-driven fallback\n * @returns DivergingInfo or undefined if no diverging treatment applies\n */\nfunction resolveDivergingInfo(\n    semanticType: string,\n    annotation: SemanticAnnotation,\n    values: number[]\n): DivergingInfo | undefined {\n    // 1. Unit-derived (Temperature)\n    if (semanticType === 'Temperature' && annotation.unit) {\n        const unitMidpoints: Record<string, number> = {\n            '°C': 0, '°F': 32, 'K': 273.15, 'C': 0, 'F': 32\n        };\n        if (annotation.unit in unitMidpoints) {\n            return {\n                midpoint: unitMidpoints[annotation.unit],\n                inherent: false,  // only show diverging if data crosses it\n                source: 'unit'\n            };\n        }\n    }\n\n    // 2. Type-intrinsic\n    const intrinsicMap: Record<string, { midpoint: number; inherent: boolean }> = {\n        'Sentiment':        { midpoint: 0, inherent: true },\n        'Correlation':      { midpoint: 0, inherent: true },\n        'Profit':           { midpoint: 0, inherent: false },\n        'PercentageChange': { midpoint: 0, inherent: false },\n    };\n    if (semanticType in intrinsicMap) {\n        return { ...intrinsicMap[semanticType], source: 'type-intrinsic' };\n    }\n\n    // 3. Domain-derived (e.g., Rating [1,5] → midpoint 3)\n    if (annotation.intrinsicDomain) {\n        return {\n            midpoint: (annotation.intrinsicDomain[0] + annotation.intrinsicDomain[1]) / 2,\n            inherent: false,\n            source: 'domain'\n        };\n    }\n\n    // 4. Data-driven: if data spans 0, use 0\n    const min = Math.min(...values);\n    const max = Math.max(...values);\n    if (min < 0 && max > 0) {\n        return { midpoint: 0, inherent: false, source: 'data' };\n    }\n\n    return undefined;  // no diverging treatment\n}\n```\n\n**How it feeds into `resolveColorSchemeHint()`:**\n\n```typescript\nfunction resolveColorSchemeHint(semanticType, annotation, values): ColorSchemeHint {\n    const divInfo = resolveDivergingInfo(semanticType, annotation, values);\n\n    if (divInfo) {\n        const min = Math.min(...values);\n        const max = Math.max(...values);\n        const spansBothSides = min < divInfo.midpoint && max > divInfo.midpoint;\n\n        if (divInfo.inherent || spansBothSides) {\n            return {\n                type: 'diverging',\n                divergingMidpoint: divInfo.midpoint,\n                inherentlyDiverging: divInfo.inherent,\n            };\n        }\n        // Data doesn't span both sides → sequential, but remember the midpoint\n        // in case user explicitly requests diverging later\n    }\n\n    // Default: sequential for measures, categorical for nominals\n    return { type: isQuantitative ? 'sequential' : 'categorical' };\n}\n```\n\n---\n\n## §6 Builder Function\n\n### 6.1 Signature\n\n```typescript\n/**\n * Build the field semantics for a single field.\n *\n * This is the sole entry point for semantic-type-driven decisions.\n * All downstream code reads from the returned context.\n *\n * @param annotation  The semantic type annotation (string or enriched object)\n * @param fieldName   Column name (used for unit detection heuristics)\n * @param values      Sampled data values from this field\n * @returns           Complete field semantics with all defaults resolved\n */\nfunction resolveFieldSemantics(\n    annotation: string | SemanticAnnotation,\n    fieldName: string,\n    values: any[],\n): FieldSemantics;\n```\n\n### 6.2 Internal structure\n\n`resolveFieldSemantics` computes only **field-intrinsic** properties — things\ndetermined by the data alone, without knowing which channel the field is mapped to.\nChannel-specific resolve functions (tickConstraint, reversed, nice, colorScheme,\ninterpolation, stackable) are exported from the same file but called by\n`resolveChannelSemantics()` in Stage 2.\n\n```\nresolveFieldSemantics(annotation, fieldName, values)\n    │\n    ├── normalizeAnnotation(annotation)\n    │     → { semanticType, intrinsicDomain?, unit?, sortOrder? }\n    │\n    ├── resolveTiers(semanticType)           // internal — determines which rules fire\n    │     → { t0: T0Family, t1: T1Category | null }\n    │\n    ├── resolveDefaultVisType(semanticType, values)\n    │     → 'quantitative' | 'ordinal' | 'nominal' | 'temporal'\n    │\n    ├── resolveFormat(semanticType, unit, fieldName, values)\n    │     → { format: FormatSpec, tooltipFormat: FormatSpec }\n    │     ├── resolveCurrencyPrefix(unit, fieldName)\n    │     ├── resolveUnitSuffix(unit, fieldName)\n    │     ├── detectPrecision(values)  → data-driven decimal places (0–4)\n    │     └── precisionFormat(values)  → d3-format pattern from precision\n    │     Note: `decimal` formatClass returns format:{} (empty — VL native)\n    │\n    ├── resolveAggregationDefault(semanticType)\n    │     → 'sum' | 'average' | undefined\n    │\n    ├── resolveZeroBaseline(semanticType, domain)\n    │     → 'meaningful' | 'arbitrary' | 'contextual'\n    │     └── intrinsicDomain[0] > 0? → 'arbitrary' (1-based scale)\n    │\n    ├── resolveScaleType(semanticType, values)\n    │     → 'linear' | 'log' | 'sqrt' | undefined\n    │\n    ├── resolveDomainConstraint(semanticType, domain, values)\n    │     → DomainConstraint | undefined\n    │     ├── annotation.intrinsicDomain provided? → use directly\n    │     ├── type-intrinsic? (Lat/Lon) → use fixed bounds\n    │     └── data-inferred? (Percentage) → detect from values\n    │\n    ├── resolveCanonicalOrder(semanticType, sortOrder, values)\n    │     → string[] | undefined\n    │     ├── annotation.sortOrder provided? → use directly\n    │     ├── well-known type? (Month, DayOfWeek) → built-in order\n    │     └── otherwise → undefined (no canonical order)\n    │\n    ├── resolveCyclic(semanticType, sortOrder)\n    │     → boolean\n    │\n    ├── resolveSortDirection(semanticType)\n    │     → 'ascending' | 'descending' | undefined\n    │\n    └── resolveBinningSuggested(semanticType, domain, values)\n          → boolean\n          └── domain span ≤ 20? → false\n```\n\n**Functions exported from core/field-semantics.ts but called by Stage 2 (`resolveChannelSemantics`):**\n\n```\nresolveTickConstraint(semanticType, domain, values)                → TickConstraint | undefined\nresolveReversed(semanticType)                                       → boolean\nresolveNice(semanticType, domainShape)                              → boolean\ngetRecommendedColorSchemeWithMidpoint(type, vlType, values, field)  → ColorSchemeRecommendation\nresolveInterpolation(semanticType)                                  → Interpolation | undefined\nresolveStackable(semanticType)                                      → 'sum' | 'normalize' | false\n```\n\nThese require channel context (encoding type, axis direction, mark type) and are\ntherefore not part of `FieldSemantics`.\n\n### 6.3 Caching\n\nThe field context is expensive to compute (data scanning for format detection, distribution analysis for scale type). It should be built once per field per dataset and cached:\n\n```typescript\n/** Cache key: `${fieldName}::${semanticType}::${dataHash}` */\nconst contextCache = new Map<string, FieldSemantics>();\n```\n\nThe data hash can be a fast fingerprint of the first 100 values to avoid recomputation when the same data is reused.\n\n---\n\n## §7 Integration: Four-Stage Pipeline\n\nThe chart engine follows a four-stage compilation pipeline inspired by\nLLVM's architecture. `ChannelSemantics` serves as the IR — the stable\ncontract between frontend (semantic resolution) and backend (spec generation).\n\n```\n┌──────────────────────────────────────────────────────────────────────┐\n│  Stage 1: Field Semantics                                            │\n│  resolveFieldSemantics(annotation, fieldName, values)                │\n│  → FieldSemantics (data identity: format, agg, domain, ordering)     │\n│  VL dependency: None                                                 │\n├──────────────────────────────────────────────────────────────────────┤\n│  Stage 2: Channel Semantics                                          │\n│  resolveChannelSemantics(encodings, data, semanticTypes, converted)   │\n│  → ChannelSemantics (encoding type, color scheme, temporal format,    │\n│    tick constraints, axis reversal, nice, interpolation, stacking)    │\n│  Calls Stage 1 internally per field, then promotes into flat struct   │\n│  VL dependency: None                                                 │\n├──────────────────────────────────────────────────────────────────────┤\n│  IR boundary: ChannelSemantics (flat, target-agnostic)               │\n├──────────────────────────────────────────────────────────────────────┤\n│  Stage 3: Layout                                                     │\n│  computeLayout(channelSemantics, declaration, data, canvasSize, opts) │\n│  → LayoutResult (subplot sizes, step widths, facet grid)             │\n│  Also: convertTemporalData, declareLayoutMode, filterOverflow        │\n│  VL dependency: None                                                 │\n├──────────────────────────────────────────────────────────────────────┤\n│  Stage 4: Spec Generation (backend-specific)                         │\n│  assembleVegaLite / assembleECharts / assembleChartjs / assembleGoFish│\n│  → Backend-native spec (VL JSON / ECharts option / CJS config / GF)  │\n│  Also: finalize zero-baseline, template.instantiate, apply layout    │\n│  VL dependency: Yes (only this stage)                                │\n└──────────────────────────────────────────────────────────────────────┘\n```\n\n### 7.1 Stage 1–2: Semantic resolution\n\nStage 2 is the public entry point. It calls Stage 1 internally per field,\nthen layers on channel-specific decisions:\n\n```\nresolveChannelSemantics(encodings, data, semanticTypes, convertedData?)\n    → for each channel:\n\n        // Stage 1: field identity (internal)\n        annotation = normalizeAnnotation(semanticTypes[field])\n        fc = resolveFieldSemantics(annotation, field, values)\n\n        // Stage 2: channel-specific decisions\n        cs = {\n          field, semanticAnnotation: fc.semanticAnnotation,\n          type: resolveEncodingType(...),\n\n          // promoted from FieldSemantics (data identity):\n          format, tooltipFormat, aggregationDefault,\n          scaleType, domainConstraint,\n          canonicalOrder, cyclic, sortDirection, binningSuggested,\n\n          // channel-resolved (NOT from FieldSemantics):\n          nice: resolveNice(semanticType, domainShape),\n          tickConstraint: resolveTickConstraint(semanticType, domain, values),\n          reversed: resolveReversed(semanticType),\n          colorScheme: resolveColorScheme(semanticType, annotation, values),\n          temporalFormat: resolveTemporalFormat(...),\n          ordinalSortOrder: resolveOrdinalSortOrder(...),\n          interpolation: resolveInterpolation(semanticType),\n          stackable: resolveStackable(semanticType),\n        }\n\n    → Record<channel, ChannelSemantics>\n```\n\n**Key design decision:** Stage 2 does NOT resolve `zero` (zero-baseline).\nThe zero decision requires knowing the template's mark type (bar → include\nzero for length integrity; scatter → data-fitted), which is Stage 4\nknowledge. Stage 2 provides `zeroBaseline` (from FieldSemantics) as a hint;\nStage 4 finalizes `cs.zero` using `computeZeroDecision()`.\n\n**Temporal data conversion:** `convertTemporalData()` runs once in the\nassembler, before calling `resolveChannelSemantics()`. The converted data\nis passed as the optional `convertedData` parameter for temporal format\ndetection, and reused by Stages 3–4 for filtering and layout.\n\n`FieldSemantics` is internal — never exposed downstream. All properties\nare promoted into the flat `ChannelSemantics` interface.\n\n### 7.2 ChannelSemantics: the IR\n\n`ChannelSemantics` is the **sole public interface** consumed by all\nassemblers, templates, layout, and recommendation. Field-level properties\nare **promoted** directly into the struct during Stage 2.\n\n```typescript\ninterface ChannelSemantics {\n    // --- Identity ---\n    field: string;\n    semanticAnnotation: SemanticAnnotation;\n\n    // --- Encoding type ---\n    type: 'quantitative' | 'nominal' | 'ordinal' | 'temporal';\n\n    // --- Formatting ---\n    format?: FormatSpec;\n    tooltipFormat?: FormatSpec;\n    temporalFormat?: string;\n\n    // --- Aggregation ---\n    aggregationDefault?: 'sum' | 'average';\n\n    // --- Scale ---\n    zero?: ZeroDecision;           // finalized by Stage 4, not Stage 2\n    scaleType?: 'linear' | 'log' | 'sqrt' | 'symlog';\n    nice?: boolean;\n    domainConstraint?: DomainConstraint;\n    tickConstraint?: TickConstraint;\n\n    // --- Ordering ---\n    ordinalSortOrder?: string[];\n    cyclic?: boolean;\n    reversed?: boolean;\n    sortDirection?: 'ascending' | 'descending';\n\n    // --- Color ---\n    colorScheme?: ColorSchemeRecommendation;\n\n    // --- Line chart ---\n    interpolation?: 'linear' | 'step' | 'step-after' | 'monotone';\n\n    // --- Histogram ---\n    binningSuggested?: boolean;\n\n    // --- Stacking ---\n    stackable?: 'sum' | 'normalize' | false;\n}\n```\n\n### 7.3 Stage 3: Layout (target-agnostic)\n\nStage 3 operates entirely on `ChannelSemantics` and data — no backend knowledge:\n\n```\n// Pre-stage: once per assembly\nconvertedData = convertTemporalData(data, semanticTypes)\n\n// Template hook (narrow interface for backend → layout communication)\ndeclaration = chartTemplate.declareLayoutMode(channelSemantics, data, props)\n\n// Overflow filtering\nbudgets = computeChannelBudgets(channelSemantics, declaration, convertedData, ...)\noverflowResult = filterOverflow(channelSemantics, declaration, encodings, convertedData, ...)\n\n// Layout sizing\nlayoutResult = computeLayout(channelSemantics, declaration, filteredData, canvasSize, ...)\n```\n\n`declareLayoutMode` is a template hook analogous to LLVM's `TargetTransformInfo` —\nit lets the backend (Stage 4) influence middle-end (Stage 3) decisions through\na narrow, well-defined interface (e.g., \"I use binned axes\" → affects layout sizing).\n\n### 7.4 Stage 4: Spec generation (backend-specific)\n\nEach backend assembler performs:\n\n1. **Zero-baseline finalization** — reads `zeroBaseline` from `ChannelSemantics`,\n   combines with template mark type, calls `computeZeroDecision()`:\n   ```typescript\n   // In each assembler, after resolveChannelSemantics():\n   const effectiveMarkType = templateMarkType || 'point';\n   for (const [channel, cs] of Object.entries(channelSemantics)) {\n       if ((channel === 'x' || channel === 'y') && cs.type === 'quantitative') {\n           cs.zero = computeZeroDecision(\n               cs.semanticAnnotation.semanticType, channel,\n               effectiveMarkType, numericValues,\n           );\n       }\n   }\n   ```\n\n2. **Encoding translation** — `buildVLEncodings()` / ECharts series config / etc.\n3. **Template instantiation** — `template.instantiate(vgObj, context)`\n4. **Layout application** — `vlApplyLayoutToSpec()` / `ecApplyLayoutToSpec()` / etc.\n5. **Post-layout adjustments** — facet refinement, tooltips, independent scales\n\nThe `InstantiateContext` passed to templates contains `channelSemantics`,\n`layout`, `table`, `resolvedEncodings`, `canvasSize`, and `assembleOptions`.\nTemplates read the flat `ChannelSemantics` directly — no nested types.\n\n### 7.5 Recommendation engine impact\n\nThe recommendation engine (`recommendation.ts`) currently uses:\n- `isMeasureType()`, `isTimeSeriesType()`, `isCategoricalType()`, etc.\n\nWith the flat `ChannelSemantics`, recommendation can also use:\n- `cs.aggregationDefault` to auto-populate aggregate in encodings\n- `cs.stackable` to decide whether to suggest stacked variants\n- `cs.binningSuggested` to suggest histogram for continuous fields\n- `cs.semanticAnnotation` for type identity when needed\n\nThese don't require API changes — the recommendation functions can optionally\naccept channel semantics and use them for better scoring.\n\n---\n\n## §8 SemanticResult: Updated Structure\n\n```typescript\n/**\n * Stage 2 output.\n *\n * A flat Record<channel, ChannelSemantics>.  Each entry contains all\n * resolved decisions — no separate FieldSemantics map needed because\n * those properties are promoted directly into the struct.\n */\ntype SemanticResult = Record<string, ChannelSemantics>;\n```\n\n---\n\n## §9 Worked Examples\n\n### Example 1: Revenue bar chart (with currency annotation)\n\n**Input:**\n- Field: `revenue`, Annotation: `{ semanticType: \"Revenue\", unit: \"EUR\" }`\n- Data: [124500, 89200, 450000, 312000, ...]\n- Channel: Y, Mark: bar\n\n**resolveFieldSemantics output:**\n```json\n{\n    \"semanticAnnotation\": { \"semanticType\": \"Revenue\", \"unit\": \"EUR\" },\n    \"defaultVisType\": \"quantitative\",\n    \"format\": { \"pattern\": \"€,.0f\", \"prefix\": \"€\", \"abbreviate\": true },\n    \"tooltipFormat\": { \"pattern\": \"€,.2f\", \"prefix\": \"€\" },\n    \"aggregationDefault\": \"sum\",\n    \"zeroBaseline\": \"meaningful\",\n    \"scaleType\": \"linear\",\n    \"domainConstraint\": null,\n    \"canonicalOrder\": null,\n    \"cyclic\": false,\n    \"sortDirection\": null,\n    \"binningSuggested\": true\n}\n```\n\n**Channel-resolved additions (by resolveChannelSemantics):**\n`nice: true`, `reversed: false`, `tickConstraint: null`,\n`colorScheme: { type: 'sequential', scheme: 'goldgreen' }`,\n`interpolation: 'monotone'`, `stackable: 'sum'`\n\n**Result:** Y axis shows \"€0\", \"€100K\", \"€200K\", ...; zero-baseline included; tooltip shows \"€124,500.00\"; bars are summable via stacking. Note: `unit: \"EUR\"` → `prefix: \"€\"` mapping. Precision is data-driven: `detectPrecision([124500, 89200, ...])` → 0 → `€,.0f`.\n\n### Example 2: Temperature line chart (with unit annotation)\n\n**Input:**\n- Field: `avg_temp`, Annotation: `{ semanticType: \"Temperature\", unit: \"°C\" }`\n- Data: [16.8, 18.4, 22.1, 25.8, 29.6, 31.7, 33.1, 31.5, ...]\n- Channel: Y, Mark: line\n\n**resolveFieldSemantics output:**\n```json\n{\n    \"semanticAnnotation\": { \"semanticType\": \"Temperature\", \"unit\": \"°C\" },\n    \"defaultVisType\": \"quantitative\",\n    \"format\": { \"pattern\": \".1f\", \"suffix\": \"°C\" },\n    \"tooltipFormat\": { \"pattern\": \".2f\", \"suffix\": \"°C\" },\n    \"aggregationDefault\": \"average\",\n    \"zeroBaseline\": \"arbitrary\",\n    \"scaleType\": \"linear\",\n    \"domainConstraint\": null,\n    \"canonicalOrder\": null,\n    \"cyclic\": false,\n    \"sortDirection\": null,\n    \"binningSuggested\": true\n}\n```\n\n**Channel-resolved additions:**\n`nice: true`, `reversed: false`, `tickConstraint: null`,\n`colorScheme: { type: 'diverging', midpoint: 0, scheme: 'blueorange' }`,\n`interpolation: 'monotone'`, `stackable: false`\n\n**Result:** Y axis data-fitted (no 0°C baseline — zero is arbitrary for temperature); ticks show \"16°C\", \"20°C\", \"25°C\", \"30°C\"; tooltip shows \"16.80°C\"; diverging color midpoint at 0°C (freezing point, meaningful for Celsius); smooth monotone interpolation. Precision data-driven: `detectPrecision([16.8, 18.4, ...])` → 1 → `.1f`.\n\n### Example 3: Rank bump chart\n\n**Input:**\n- Field: `rank`, SemanticType: `Rank`\n- Data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n- Channel: Y, Mark: line (bump)\n\n**resolveFieldSemantics output:**\n```json\n{\n    \"semanticAnnotation\": { \"semanticType\": \"Rank\" },\n    \"defaultVisType\": \"ordinal\",\n    \"format\": { \"pattern\": \"d\" },\n    \"tooltipFormat\": { \"pattern\": \"d\" },\n    \"aggregationDefault\": null,\n    \"zeroBaseline\": \"arbitrary\",\n    \"scaleType\": \"linear\",\n    \"domainConstraint\": null,\n    \"canonicalOrder\": null,\n    \"cyclic\": false,\n    \"sortDirection\": \"ascending\",\n    \"binningSuggested\": false\n}\n```\n\n**Channel-resolved additions:**\n`nice: false`, `reversed: true`, `tickConstraint: { integersOnly: true, minStep: 1 }`,\n`colorScheme: { type: 'sequential', reversed: true }`,\n`interpolation: 'step'`, `stackable: false`\n\n**Result:** Y axis reversed (1 at top); integer ticks only; no zero; step interpolation; no stacking.\n\n### Example 4: Month categorical axis\n\n**Input:**\n- Field: `month`, SemanticType: `Month`\n- Data: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", ...]\n- Channel: X, Mark: bar\n\n**resolveFieldSemantics output:**\n```json\n{\n    \"semanticAnnotation\": { \"semanticType\": \"Month\" },\n    \"defaultVisType\": \"ordinal\",\n    \"format\": {},\n    \"tooltipFormat\": {},\n    \"aggregationDefault\": null,\n    \"zeroBaseline\": null,\n    \"scaleType\": null,\n    \"domainConstraint\": null,\n    \"canonicalOrder\": [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n                       \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n    \"cyclic\": true,\n    \"sortDirection\": \"ascending\",\n    \"binningSuggested\": false\n}\n```\n\n**Channel-resolved additions:**\n`reversed: false`, `ordinalSortOrder: [\"Jan\", \"Feb\", ...]` (from canonicalOrder),\n`colorScheme: null`, `interpolation: null`, `stackable: false`\n\n**Result:** X axis sorts months in calendar order (not alphabetical); ordinal type; cyclic; no binning.\n\n### Example 5: Percentage in scatter plot (with representation detection)\n\nPercentage data comes in two common representations that require different formatting:\n- **Fractional (0–1):** values like 0.48, 0.51 — d3's `.%` format multiplies by 100 automatically\n- **Whole-number (0–100):** values like 48, 51 — need `.f` + \"%\" suffix, no multiplication\n\nThe builder **infers the representation from data values**: if `max(values) ≤ 1.0` (and most values are in [0,1]), it's fractional; if values are in [0,100] range, it's whole-number. The LLM can also provide `domain: [0, 1]` or `domain: [0, 100]` to disambiguate explicitly.\n\n**Example 5a: Fractional percentage (0–1)**\n\n**Input:**\n- Field: `completion_rate`, SemanticType: `Percentage`\n- Data: [0.48, 0.49, 0.51, 0.52, 0.50, 0.47, ...]\n- Channel: Y, Mark: point\n\n**resolveFieldSemantics output:**\n```json\n{\n    \"semanticAnnotation\": { \"semanticType\": \"Percentage\" },\n    \"defaultVisType\": \"quantitative\",\n    \"format\": { \"pattern\": \".1p%\" },\n    \"tooltipFormat\": { \"pattern\": \".2p%\" },\n    \"aggregationDefault\": \"average\",\n    \"zeroBaseline\": \"contextual\",\n    \"scaleType\": \"linear\",\n    \"domainConstraint\": { \"min\": 0, \"max\": 1, \"clamp\": false },\n    \"canonicalOrder\": null,\n    \"cyclic\": false,\n    \"sortDirection\": null,\n    \"binningSuggested\": true\n}\n```\n\n**Channel-resolved additions:**\n`nice: true`, `reversed: false`, `colorScheme: { type: 'sequential' }`,\n`interpolation: 'monotone'`, `stackable: 'normalize'`\n\nNote: d3's `.1%` format handles the ×100 conversion: `0.48` → `\"48.0%\"`. Precision data-driven.\n\n**Example 5b: Whole-number percentage (0–100)**\n\n**Input:**\n- Field: `pass_rate`, SemanticType: `Percentage`\n- Data: [85, 92, 78, 91, 88, ...]\n- Channel: Y, Mark: bar\n\n**resolveFieldSemantics output:**\n```json\n{\n    \"semanticAnnotation\": { \"semanticType\": \"Percentage\" },\n    \"defaultVisType\": \"quantitative\",\n    \"format\": { \"pattern\": \"d\", \"suffix\": \"%\" },\n    \"tooltipFormat\": { \"pattern\": \".1f\", \"suffix\": \"%\" },\n    \"aggregationDefault\": \"average\",\n    \"zeroBaseline\": \"contextual\",\n    \"scaleType\": \"linear\",\n    \"domainConstraint\": { \"min\": 0, \"max\": 100, \"clamp\": false },\n    \"canonicalOrder\": null,\n    \"cyclic\": false,\n    \"sortDirection\": null,\n    \"binningSuggested\": false\n}\n```\n\n**Channel-resolved additions:**\n`nice: true`, `reversed: false`, `colorScheme: { type: 'sequential' }`,\n`interpolation: null`, `stackable: 'normalize'`\n\nNote: here `suffix: \"%\"` is explicit and the pattern is plain `d` (integer, no ×100). `85` → `\"85%\"`. Precision data-driven: `detectPrecision([85, 92, ...])` → 0.\n\n**Channel override (5a):** Since data is clustered at 0.47–0.52 (proximity = 0.47/0.52 ≈ 0.90 > 0.3) and mark is point (not bar), `computeZeroDecision` returns `zero: false`. Axis zooms to ~46%–53%.\n\n### Example 6: Rating bar chart (with domain annotation)\n\n**Input:**\n- Field: `rating`, Annotation: `{ semanticType: \"Rating\", domain: [1, 5] }`\n- Data: [4, 3, 5, 2, 4, 5, 3, 4, ...]\n- Channel: Y, Mark: bar\n\n**resolveFieldSemantics output:**\n```json\n{\n    \"semanticAnnotation\": { \"semanticType\": \"Rating\", \"intrinsicDomain\": [1, 5] },\n    \"defaultVisType\": \"quantitative\",\n    \"format\": {},\n    \"tooltipFormat\": { \"pattern\": \".1f\" },\n    \"aggregationDefault\": \"average\",\n    \"zeroBaseline\": \"arbitrary\",\n    \"scaleType\": \"linear\",\n    \"domainConstraint\": { \"min\": 1, \"max\": 5, \"clamp\": false },\n    \"canonicalOrder\": null,\n    \"cyclic\": false,\n    \"sortDirection\": null,\n    \"binningSuggested\": false\n}\n```\n\n**Channel-resolved additions:**\n`nice: false` (bounded domainShape), `reversed: false`,\n`tickConstraint: { integersOnly: true, exactTicks: [1, 2, 3, 4, 5], minStep: 1 }`,\n`colorScheme: { type: 'sequential' }`, `interpolation: null`, `stackable: false`\n\nNote: `format: {}` (empty) — VL handles axis formatting natively for Rating.\n`tooltipFormat` uses data-driven precision for the popup.\n\n**Key derivations from `domain: [1, 5]`:**\n- `domainConstraint`: axis range fixed to 1–5\n- `zeroBaseline: \"arbitrary\"`: domain starts at 1 (not 0), so zero is not meaningful\n- `tickConstraint.exactTicks: [1,2,3,4,5]`: span = 4 ≤ 20, so every integer gets a tick (channel-resolved)\n- `binningSuggested: false`: only 5 possible values, binning is useless\n- `nice: false`: bounded domain shape → don't extend to \"nice\" numbers (channel-resolved)\n- **Mark-aware zero**: For bar marks, despite `zeroBaseline: 'arbitrary'`, the Stage 4 assembler\n  keeps `scale.zero = true` for proportional bar lengths (bars grow from 0, VL auto-extends to [0,5]).\n  For scatter/line marks, `scale.zero` is cleared and the axis stays [1,5].\n\n---\n\n## §10 Migration Plan\n\n### Phase A: Type system foundation (non-breaking)\n\n1. Define `SemanticAnnotation` interface in `types.ts` (see §3.2)\n2. Add `normalizeAnnotation()` to accept both bare strings and enriched objects\n3. Update `semantic_types` field type in `ChartAssemblyInput` to `Record<string, string | SemanticAnnotation>`\n4. Implement `resolveFieldSemantics()` in `field-semantics.ts` (Stage 1)\n5. Implement all `resolve*()` sub-functions, with annotation.intrinsicDomain / annotation.unit flowing in\n6. Add `FieldSemantics` to `types.ts`\n7. Promote `FieldSemantics` properties into flat `ChannelSemantics`\n8. In `resolveChannelSemantics` (Stage 2), call `resolveFieldSemantics` and promote properties into each channel\n\n**Phase A also includes updating the Python-side LLM prompt:**\n9. Update `generate_semantic_types_prompt()` in `semantic_types.py` to request `intrinsic_domain` and `unit` for applicable types\n10. Update `SYSTEM_PROMPT` in `agent_data_load.py` to show the enriched JSON format\n11. Add backward-compatible parsing: accept both old `\"Rating\"` and new `{ \"semantic_type\": \"Rating\", \"domain\": [1, 5] }` formats\n\n**No existing behavior changes.** The context is computed but not yet consumed.\n\n### Phase B: Consume context in VL assembler (Stage 4)\n\n1. In `vlApplyLayoutToSpec`, read `cs.format` → apply `axis.format`\n2. Read `cs.tickConstraint` → apply `axis.tickMinStep`, `axis.values`\n3. Read `cs.reversed` → apply `scale.reverse`\n4. Read `cs.domainConstraint` → apply `scale.domain` + `scale.clamp`\n5. Read `cs.nice` → apply `scale.nice`\n\n**Existing zero/color/temporal/sort logic continues to work.** New properties layer on top.\n\n### Phase C: Consume context in ECharts assembler (Stage 4)\n\nSame as Phase B but translating to ECharts API (`axisLabel.formatter`, `yAxis.inverse`, etc.).\n\n### Phase D: Consume context in recommendation engine\n\n1. Use `cs.aggregationDefault` when auto-populating encodings\n2. Use `cs.stackable` in stacked chart suitability checks\n3. Use `cs.binningSuggested` in histogram recommendation\n\n### Phase E: Consolidate existing decisions\n\n1. `computeZeroDecision` reads `zeroBaseline` from `ChannelSemantics`; finalized in Stage 4 by each assembler\n2. Move `getRecommendedColorScheme` to read from `cs.colorScheme` (promoted from FieldSemantics)\n3. Move `inferOrdinalSortOrder` to read from `cs.ordinalSortOrder` (promoted from FieldSemantics)\n4. Move temporal format resolution to `cs.temporalFormat` (promoted from FieldSemantics)\n\nAfter this phase, all semantic-type-driven decisions flow through the flat `ChannelSemantics` IR. No downstream code directly imports `isMeasureType()`, `isTimeSeriesType()`, etc. for decision-making.\n\n---\n\n## §11 Open Questions\n\n1. **Unit/domain annotation reliability.** How reliably will the LLM provide `domain` and `unit`? Mitigation strategies:\n   - (a) Require domain/unit for a small set of types (Rating, Score, Temperature, Price) — reject annotations without them\n   - (b) Treat domain/unit as best-effort hints — fall back gracefully to data-inferred or type-intrinsic defaults (current proposal)\n   - (c) Prompt the user to confirm/correct LLM-provided annotations in certain cases\n   - Fallback priority: annotation.unit > column-name heuristics (\"Weight (kg)\") > data scan (\"$1,234\") > type defaults\n   - Note: `intrinsicDomain` replaces the old `domain` property for clarity\n\n2. **Scale type auto-detection.** Should we auto-switch to log scale when data spans >2 orders of magnitude? This is powerful but can surprise users. Options:\n   - (a) Never auto-switch; provide `scaleType` as a hint for recommendation only\n   - (b) Auto-switch with a prominent UI indicator (\"Log scale applied\")\n   - (c) Auto-switch only for specific types (Revenue, Population) where log is commonly expected\n\n3. **Reversed axis scope.** Rank reversal on Y makes sense, but what about X? A horizontal bump chart with rank on X should also reverse. Should `reversed` be axis-aware or axis-agnostic?\n   - Current proposal: axis-agnostic (template/backend decides how to apply)\n\n4. **Format vs. LLM context.** Should the compilation context's format information be passed to the LLM when generating chart code? This could help the LLM produce better Python/JS code that formats values correctly. But it adds token overhead.\n\n5. **Interaction with explicit user overrides.** When the user manually sets an axis format or domain, how does that interact with the compilation context?\n   - Proposed: User overrides always win. The context provides defaults; any explicit setting in `ChartEncoding` or `chartProperties` takes precedence.\n\n6. **Where does `resolveFieldSemantics` live?** *(Resolved)*\n   - Lives in `field-semantics.ts` (Option B) — clean separation; `semantic-types.ts` stays lean.\n   - Called internally by `resolveChannelSemantics()` in `resolve-semantics.ts` (Stage 2).\n\n---\n\n## §12 Summary\n\nThe compilation context is a structured bridge between semantic type knowledge and visualization property configuration. Instead of sprinkling `if (semanticType === 'Revenue') { ... }` across 6 files, we build a single typed context object per field and let all downstream consumers read from it.\n\n**What changes:**\n- One new type: `SemanticAnnotation` (enriched input with optional `intrinsicDomain`, `unit`, `sortOrder`)\n- One new type: `FieldSemantics` (structured output)\n- One new builder: `resolveFieldSemantics(annotation, fieldName, values)`\n- `ChannelSemantics` becomes flat — promotes field-semantics properties directly (no nested `fieldSemantics`)\n- Dead properties removed: `aggregate`, `sortOrder`, `sortBy`, `typeReason`\n- `semantic_types` map accepts both bare strings and annotation objects\n- VL/ECharts assemblers gain a `vlApplyFieldContext()` step\n- LLM prompts updated to request `intrinsic_domain`/`unit` for applicable types\n\n**What stays the same:**\n- The semantic type string taxonomy\n- The four-stage pipeline structure (Stage 1: Field Semantics → Stage 2: Channel Semantics → Stage 3: Layout → Stage 4: Spec Generation)\n- The existing zero/color/temporal/sort decisions (they migrate to read from `ChannelSemantics`)\n- The recommendation engine API\n\n**What's new:**\n- Enriched semantic type annotation with optional `intrinsicDomain`, `unit`, and `sortOrder` metadata\n- Field-aware formatting (axis ticks, tooltips, data labels) driven by annotation\n- Aggregation defaults per semantic type\n- Tick constraints (integer-only, exact ticks)\n- Reversed axes for rank-like types\n- Domain clamping for bounded types\n- Scale type hints (log, sqrt)\n- Interpolation hints for line charts\n- Binning and stacking compatibility flags\n- Diverging midpoint resolution from unit, type, intrinsicDomain, or data\n- Cyclic domain support for wrap-around ordinals (seasons, compass directions)\n"
  },
  {
    "path": "src/lib/agents-chart/docs/design-stretch-model.md",
    "content": "# Design: Axis Layout Compression\n\n> **Physics-based models for automatically sizing chart axes when data\n> overflows the available canvas.**\n\nFour models cover the four geometric contexts in which layout pressure arises:\n\n| § | Model | Geometry | Chart types |\n|---|---|---|---|\n| [§1](#1-discrete-axis-elastic-budget-model) | Elastic Budget | 1D banded axis | Bar, Histogram, Heatmap, Boxplot |\n| [§2](#2-continuous-axis-gas-pressure-model) | Gas Pressure | 2D point cloud | Scatter, Line, Area |\n| [§3](#3-circumference-radial-pressure-model) | Circumference | 1D closed loop | Pie, Rose, Sunburst, Radar, Gauge |\n| [§4](#4-area-layout-2d-pressure-model) | Area (2D) | 2D filled space | Treemap |\n\nAll four share a common pattern:\n\n1. **Pressure = demand / supply.** Items need space; the base canvas provides it. Pressure > 1 means overflow.\n2. **Elastic stretch.** `stretch = min(maxStretch, pressure ^ elasticity)`. The power-law exponent controls how aggressively the chart grows.\n3. **Per-dimension cap.** No axis grows beyond `maxStretch × base`. For radial/area models this becomes a radius or area cap.\n\n---\n\n## Table of Contents\n\n- [§0 Layout Mode Classification](#0-layout-mode-classification)\n  - [§0.1 Banded vs Non-Banded](#01-banded-vs-non-banded)\n  - [§0.2 Decision Tree](#02-decision-tree)\n  - [§0.3 Vega-Lite Implementation Notes](#03-vega-lite-implementation-notes)\n- [§1 Discrete Axis (Elastic Budget Model)](#1-discrete-axis-elastic-budget-model)\n  - [§1.1 Problem](#11-problem)\n  - [§1.2 Parameters](#12-parameters)\n  - [§1.3 Three Regimes](#13-three-regimes)\n  - [§1.4 Power-Law Elastic Budget](#14-power-law-elastic-budget)\n  - [§1.5 Linear Spring Model (Theoretical Foundation)](#15-linear-spring-model-theoretical-foundation)\n  - [§1.6 Relationship Between Formulations](#16-relationship-between-formulations)\n  - [§1.7 Grouped Items](#17-grouped-items)\n  - [§1.8 Per-Mark-Type Guidelines](#18-per-mark-type-guidelines)\n  - [§1.9 Faceted Charts](#19-faceted-charts)\n  - [§1.10 Summary](#110-summary)\n- [§2 Continuous Axis (Gas Pressure Model)](#2-continuous-axis-gas-pressure-model)\n  - [§2.1 Problem](#21-problem)\n  - [§2.2 Parameters](#22-parameters)\n  - [§2.3 Per-Axis Stretch](#23-per-axis-stretch)\n  - [§2.4 Positional ≥ Series Constraint](#24-positional--series-constraint)\n  - [§2.5 Parameter Table](#25-parameter-table)\n  - [§2.6 Worked Examples](#26-worked-examples)\n  - [§2.7 Summary](#27-summary)\n- [§3 Circumference (Radial Pressure Model)](#3-circumference-radial-pressure-model)\n  - [§3.1 Problem](#31-problem)\n  - [§3.2 Parameters](#32-parameters)\n  - [§3.3 Effective Item Count](#33-effective-item-count)\n  - [§3.4 Pressure and Stretch](#34-pressure-and-stretch)\n  - [§3.5 Canvas Sizing](#35-canvas-sizing)\n  - [§3.6 Gauge Faceting](#36-gauge-faceting)\n  - [§3.7 Parameter Table](#37-parameter-table)\n  - [§3.8 Summary](#38-summary)\n- [§4 Area Layout (2D Pressure Model)](#4-area-layout-2d-pressure-model)\n  - [§4.1 Problem](#41-problem)\n  - [§4.2 Parameters](#42-parameters)\n  - [§4.3 Effective Item Count](#43-effective-item-count)\n  - [§4.4 Pressure and Biased Split](#44-pressure-and-biased-split)\n  - [§4.5 Worked Examples](#45-worked-examples)\n  - [§4.6 Summary](#46-summary)\n- [§5 Unified Summary](#5-unified-summary)\n\n---\n\n# §0 Layout Mode Classification\n\n## §0.1 Banded vs Non-Banded\n\nThe layout model needs to decide **how** to allocate space for each positional axis. This depends on two independent properties:\n\n1. **Scale type** — the Vega-Lite encoding type of the field.\n2. **Mark geometry** — whether the mark occupies a fixed-width band or a point-like position.\n\n### Banded layout\n\nA **banded** axis allocates a fixed-width slot (band) per data position. The layout model controls the step size per slot. Items are read by the width/area of their band.\n\n| Condition | Example |\n|---|---|\n| **Discrete scale** (nominal / ordinal) | Categories on a bar chart, ordinal months |\n| **Continuous scale + band mark** | Bar chart with quantitative or temporal X (years as numbers) |\n| **Binned axis** (`bin: true`) | Histogram bins — each bin is a band regardless of scale |\n\n### Non-banded layout\n\nA **non-banded** axis places items at data-determined positions within a continuous range. The layout model controls the overall canvas size but does **not** allocate per-item slots.\n\n| Condition | Example |\n|---|---|\n| **Continuous scale + point mark** | Scatter plot, line chart, area chart |\n\n### Summary matrix\n\n|  | Band mark (bar, rect, boxplot) | Point mark (circle, line, area) |\n|---|---|---|\n| **Discrete scale** (N/O) | Banded — §1 | Banded — §1 (*) |\n| **Continuous scale** (Q/T) | Banded — §1 | Non-banded — §2 |\n\n(*) Discrete scales are always banded regardless of mark type — VL allocates a band per category.\n\n## §0.2 Decision Tree\n\n```\nFor each positional axis (x, y):\n\n1. Is the VL encoding type nominal or ordinal?\n   → YES: Banded (discrete). Use §1 directly.\n\n2. Is the axis binned (enc.bin = true)?\n   → YES: Banded (continuous). Use §1 with bin count as N.\n\n3. Does the template declare this axis as banded?\n   (axisFlags.banded = true, e.g. bar/rect/boxplot marks)\n   → YES: Banded (continuous). Use §1 with field cardinality as N.\n\n4. Otherwise:\n   → Non-banded (continuous). Use §2.\n```\n\n> **Implementation:** The decision is made in `compute-layout.ts` via `axisFlags.x.banded` / `axisFlags.y.banded` and `isDiscreteType()` checks. See `computeLayout()` lines ~155–230.\n\n## §0.3 Vega-Lite Implementation Notes\n\nThe §1 elastic budget model applies to both discrete-banded and continuous-banded axes, but the **Vega-Lite implementation differs**:\n\n### Discrete banded (nominal / ordinal)\n\nVL natively supports step-based sizing:\n\n```json\n{ \"width\": { \"step\": ℓ } }\n```\n\nVL creates a band scale, allocates $\\ell$ pixels per category, and sizes the chart to $N \\times \\ell$.\n\nFor grouped bars (xOffset / yOffset):\n\n```json\n{ \"width\": { \"step\": ℓ_group, \"for\": \"position\" } }\n```\n\n### Continuous banded (quantitative / temporal + band mark)\n\nVL does **not** support `{ \"step\": N }` on continuous scales. We handle this in two phases:\n\n**Phase 1 — Canvas sizing (assemble.ts):**\n\n```\ncontinuousWidth = stepSize × (N + 1)\n```\n\nThe `+1` adds half-step padding on each side. The scale domain is extended by ±halfStep so positions align as they would on a discrete band scale.\n\n**Phase 2 — Mark sizing (postProcessing):**\n\nSince VL won't auto-size bars on a continuous scale:\n1. Sort unique field values; find `minGap` (smallest consecutive difference).\n2. Convert to pixels: `pixelsPerUnit = subplotDim × (N−1) / (dataRange × N)`.\n3. `markSize = min(stepSize × 0.9, floor(minGap × pixelsPerUnit))`.\n4. Apply via `{ \"mark\": { \"size\": markSize } }` (or `width`/`height` for rect with 0.98 fill ratio).\n\n### Comparison\n\n| Aspect | Discrete banded | Continuous banded |\n|---|---|---|\n| VL scale type | `nominal` / `ordinal` (band scale) | `quantitative` / `temporal` (linear/time scale) |\n| Step control | `{ \"step\": ℓ }` on width/height | Manual: `config.view.continuousWidth = ℓ × (N+1)` |\n| Mark sizing | Automatic (VL fills bands) | Manual: `mark.size` from min-gap calculation |\n| Domain padding | Automatic (band scale) | Manual: extend domain by ±halfStep |\n| Sort control | `encoding.sort` | Data-determined (continuous scale) |\n\n### When to prefer continuous banded\n\n- The data has **natural ordering and arithmetic meaning** (years, dates, prices).\n- The data has **irregular spacing** — a continuous scale preserves proportional positions.\n- The template declares `axisFlags.banded = true` while keeping the VL encoding type as Q/T.\n\nThe `detectBandedAxis` function in `templates/utils.ts` handles this decision.\n\n---\n\n# §1 Discrete Axis (Elastic Budget Model)\n\n## §1.1 Problem\n\nA discrete axis displays $N$ banded items (categories, bins, groups) along a 1D segment of length $L_0$ pixels. Each item ideally occupies $\\ell_0$ pixels (the natural length). When $N \\cdot \\ell_0 > L_0$, the items overflow.\n\nTwo competing goals must be balanced:\n\n1. **Items resist compression** — each item pushes outward to maintain $\\ell_0$, and cannot shrink below $\\ell_{\\min}$.\n2. **The axis resists expansion** — the axis can stretch beyond $L_0$ but has a hard maximum $L_{\\max}$.\n\n## §1.2 Parameters\n\n| Symbol | Meaning | Code mapping | Default |\n|---|---|---|---|\n| $L_0$ | Natural axis length | `width` / `height` (canvas size) | 400 px |\n| $L_{\\max}$ | Maximum axis length | `width × maxStretch` | 800 px |\n| $N$ | Number of banded items | Field cardinality | data-dependent |\n| $\\ell_0$ | Natural length per item | `defaultStepSize` | ~20 px |\n| $\\ell_{\\min}$ | Minimum length per item | `minStep` option | 6 px |\n| $\\alpha$ | Elasticity exponent | `elasticity` option | 0.5 |\n| $\\beta$ | Maximum stretch multiplier | `maxStretch` option | 2.0 |\n\n> **Code defaults:** `ElasticStretchParams` in `core/decisions.ts` — `elasticity: 0.5`, `maxStretch: 2`, `minStep: 6`. The `defaultStepSize` is computed dynamically based on canvas size: `round(20 × max(1, sizeRatio) × defaultStepMultiplier)`.\n\n## §1.3 Three Regimes\n\n### Regime 1: No compression needed\n\n**Condition:** $N \\cdot \\ell_0 \\leq L_0$\n\nAll items fit at their natural length:\n\n$$\\ell = \\ell_0, \\quad L = N \\cdot \\ell_0$$\n\n### Regime 2: Overflow beyond recovery\n\n**Condition:** $N \\cdot \\ell_{\\min} \\geq L_{\\max}$\n\nEven at minimum item length and maximum stretch, not all items fit. Excess items are truncated:\n\n$$N' = \\left\\lfloor \\frac{L_{\\max}}{\\ell_{\\min}} \\right\\rfloor, \\quad \\ell = \\ell_{\\min}, \\quad L = L_{\\max}$$\n\n### Regime 3: Elastic equilibrium\n\n**Condition:** $N \\cdot \\ell_0 > L_0$ and $N \\cdot \\ell_{\\min} < L_{\\max}$\n\nItems overflow but can be accommodated by compressing items and/or stretching the axis. This is where the elastic model applies.\n\n## §1.4 Power-Law Elastic Budget\n\nThis is the **implemented model**. The axis stretches using a power-law of the pressure ratio:\n\n**Pressure:**\n\n$$p = \\frac{N \\cdot \\ell_0}{L_0}$$\n\n**Stretch factor:**\n\n$$s = \\min(\\beta,\\; p^{\\alpha})$$\n\n**Resulting step size:**\n\n$$\\ell = \\frac{L_0 \\cdot s}{N} = \\frac{L_0 \\cdot p^{\\alpha}}{N}$$\n\nWith $\\alpha = 0.5$, doubling the overflow only increases the stretch by $\\sqrt{2} \\approx 1.41\\times$ — a naturally progressive response.\n\n**Clamping:** The step is clamped to $[\\ell_{\\min},\\; \\ell_0]$ and the axis length to $[L_0,\\; L_{\\max}]$.\n\n> **Implementation:** `computeElasticBudget()` in `core/decisions.ts` (lines ~549–569). Called by `computeAxisStep()` which handles both nominal and continuous-as-discrete cases.\n\n## §1.5 Linear Spring Model (Theoretical Foundation)\n\nThe power-law model can be motivated by a physical analogy: $N$ identical springs packed inside a box.\n\n**Setup:**\n- Each spring (item) has natural length $\\ell_0$, solid length $\\ell_{\\min}$, spring constant $k_1$.\n- The box (axis) has natural length $L_0$, max length $L_{\\max}$, spring constant $k_2$.\n\n**Force balance at equilibrium:**\n\n$$N \\cdot k_1 \\cdot (\\ell_0 - \\ell) = k_2 \\cdot (N \\cdot \\ell - L_0)$$\n\n**Equilibrium step size** (using stiffness ratio $\\kappa = k_1 / k_2$):\n\n$$\\boxed{\\ell = \\frac{\\kappa \\cdot \\ell_0 + L_0 / N}{1 + \\kappa}}$$\n\n**Interpretation of $\\kappa$:**\n- $\\kappa \\to \\infty$: items don't compress; the wall absorbs everything ($\\ell \\to \\ell_0$).\n- $\\kappa \\to 0$: items compress to fit the fixed axis ($\\ell \\to L_0 / N$).\n- $\\kappa = 1$: compression is split evenly ($\\ell = (\\ell_0 + L_0/N) / 2$).\n\nThe linear spring model is more physically intuitive and allows independent tuning of item vs. wall stiffness ($\\kappa$). It is presented here as the theoretical motivation for the power-law model.\n\n**Nonlinear (progressive-rate) variant:** Replacing the linear spring with a hardening spring $F_1(\\ell) = k_1 \\cdot ((\\ell_0 - \\ell) / (\\ell_0 - \\ell_{\\min}))^{\\gamma}$ leads directly to the power-law formulation used in the implementation.\n\n## §1.6 Relationship Between Formulations\n\n| Linear spring model | Power-law implementation |\n|---|---|\n| $\\kappa$ (stiffness ratio $k_1/k_2$) | $\\alpha$ (elasticity exponent) |\n| $\\ell = (\\kappa \\cdot \\ell_0 + L_0/N) / (1 + \\kappa)$ | $s = \\min(\\beta, p^{\\alpha})$; $\\ell = L_0 \\cdot s / N$ |\n| Uniform interpolation between $\\ell_0$ and $L_0/N$ | Power-curve interpolation favoring $\\ell_0$ |\n| Two parameters ($k_1$, $k_2$) | One parameter ($\\alpha$) |\n| More physically intuitive | More compact; naturally progressive |\n\n## §1.7 Grouped Items\n\nGrouped items (e.g., grouped bar with $m$ sub-bars per group) are treated as a special case — the **group** is the unit of compression, not the individual item.\n\n| Parameter | Simple discrete | Grouped bar ($m$ sub-bars) |\n|---|---|---|\n| $\\ell_0$ (natural) | `defaultStepSize` | $m \\times$ `defaultStepSize` |\n| $\\ell_{\\min}$ (solid) | `minStep` (6 px) | $2m$ px (2 px per sub-bar) |\n| $N$ (item count) | Field cardinality | Number of **groups** |\n\nThe elastic budget formula is unchanged — only the parameter values change.\n\n**Example:** 15 groups × 3 sub-bars on a 400 px axis:\n- $N = 15$, $\\ell_0 = 60$, ideal $= 900 > 400$ → Regime 3.\n- With $\\alpha = 0.5$: $p = 900/400 = 2.25$, $s = \\min(2, 2.25^{0.5}) = 1.50$.\n- Budget $= 400 \\times 1.5 = 600$, step $= 600/15 = 40$ px per group.\n\n> **Implementation:** In `computeLayout()`, grouping is detected via the `group` channel. When `xHasGrouping` is true, step is computed per-group with `xStepUnit = 'group'` and a minimum group gap of 3 px is enforced.\n\n## §1.8 Per-Mark-Type Guidelines\n\nDifferent mark types have different visual footprints and compression tolerances. Templates can tune behavior via `defaultStepMultiplier` and `overrideDefaultSettings`.\n\n**Design guidelines** (for a 300 px reference canvas, `defaultStepSize` ≈ 20 px):\n\n| Mark type | $\\ell_0$ | $\\ell_{\\min}$ | Compression tolerance | Rationale |\n|---|---|---|---|---|\n| **Bar** | 20 px | 6 px | Moderate | Width encodes the item — can't shrink too much |\n| **Stacked bar** | 20 px | 6 px | Low | Stacked segments unreadable when thin |\n| **Grouped bar** ($m$) | $20m$ px | $2m$ px | Low | Losing sub-bar distinction is costly |\n| **Lollipop** | 14 px | 4 px | High | Dot (position) carries encoding, not width |\n| **Heatmap / rect** | 20 px | 8 px | Very low | Color cell needs area for color to be perceivable |\n| **Boxplot** | 24 px | 10 px | Low | Internal structure (box/whiskers/median) lost early |\n| **Strip / jitter** | 24 px | 6 px | Moderate | Points collapse into a line when too narrow |\n| **Histogram** | 16 px | 4 px | High | Distribution shape survives compression well |\n| **Candlestick** | 18 px | 8 px | Low | Open/close body + wicks need room |\n\n**Design principles:**\n1. Marks encoding value by **width/area** (bar, rect) → higher $\\ell_0$, lower compression tolerance.\n2. Marks encoding value by **position** (lollipop, bump) → higher compression tolerance.\n3. Marks with **internal structure** (boxplot, candlestick) → higher $\\ell_{\\min}$.\n4. Marks showing **distribution shape** (histogram) → can be narrower.\n\n> **Note:** Currently, templates primarily adjust layout via `defaultStepMultiplier` (scales $\\ell_0$ proportionally) and `overrideDefaultSettings`. Per-mark-type spring stiffness ($\\kappa$) is a design aspiration, not yet individually parameterized in the code.\n\n## §1.9 Faceted Charts\n\nFaceting splits one chart into a grid of subplots. This introduces an additional layer of layout compression: the canvas must accommodate $F$ panels, each containing its own axis.\n\n### §1.9.1 Facet stretch factor\n\nThe total canvas stretches to accommodate facets:\n\n$$\\lambda_f = \\min(\\beta,\\; F^{\\alpha_f})$$\n\nwhere $\\alpha_f$ = `facetElasticity` (default 0.3) and $\\beta$ = `maxStretch` (default 2.0).\n\nThe facet stretch uses a **gentler exponent** ($\\alpha_f = 0.3$ vs $\\alpha = 0.5$ for discrete items) because each subplot is a self-contained chart — even a small subplot can be readable, whereas a 3 px bar cannot.\n\n> **Implementation:** `computeLayout()` lines ~256–270 in `compute-layout.ts`. Uses `facetElasticityVal = 0.3` and `maxStretchVal = 2`.\n\n### §1.9.2 Subplot sizing\n\nEach subplot gets a share of the stretched canvas:\n\n$$W_{\\text{sub}} = \\max\\!\\left(S_{\\min},\\; \\frac{W_0 \\cdot \\lambda_f - \\text{fixedPad}}{F_c} - \\text{gap}\\right)$$\n\n| Symbol | Meaning | Default |\n|---|---|---|\n| $F_c, F_r$ | Facet columns / rows | data-dependent |\n| $\\alpha_f$ | Facet elasticity | 0.3 |\n| $S_{\\min}$ | Minimum subplot size (continuous axis) | 60 px |\n\n### §1.9.3 Facet-mode shrink limits\n\nUnder faceting, axes can shrink **further** than in single-chart mode because the reader compares patterns across panels rather than reading individual values precisely.\n\n| Mark type | $\\ell_{\\min}^{f}$ (banded) | $S_{\\min}$ (continuous) |\n|---|---|---|\n| Bar / stacked bar | 3 px | 60 px |\n| Heatmap / rect | 4 px | 40 px |\n| Boxplot | 6 px | 60 px |\n| Line / area | — | 40 px |\n| Ridge / density | — | 20 px |\n| Scatter | — | 60 px |\n\n### §1.9.4 Faceted discrete axis\n\nThe spring model runs **per subplot**: $W_{\\text{sub}}$ becomes $L_0$ and $N_{\\text{items}}$ is the per-panel count. If items still overflow, they are truncated to $N' = \\lfloor W_{\\text{sub}} / \\ell_{\\min} \\rfloor$.\n\n### §1.9.5 Faceted continuous axis\n\nThe gas pressure model (§2) runs within each subplot using $W_{\\text{sub}} \\times H_{\\text{sub}}$ as the container. Subplot dimensions are uniform across panels for visual consistency.\n\n### §1.9.6 Facet wrap (column-only folding)\n\nWhen only a column facet is specified and $F$ is large, panels wrap into a 2D grid:\n\n1. **Determine columns:** $F_c = \\min(F,\\; \\lfloor (W_0 \\cdot \\beta) / S_{\\min} \\rfloor)$, further constrained by internal discrete pressure.\n2. **Compute rows:** $F_r = \\lceil F / F_c \\rceil$.\n3. **Size subplots:** Each dimension uses $\\lambda_f = \\min(\\beta, F^{\\alpha_f})$.\n\nWrapping transfers pressure from horizontal to vertical — fewer columns give each subplot more width, but total chart height grows.\n\n> **Implementation:** `computeFacetGrid()` and `computeChannelBudgets()` in `compute-layout.ts`. The facet grid is computed **before** `computeLayout()` to break the circularity between wrapping and banded axis sizing.\n\n## §1.10 Summary\n\n| Symbol | Meaning | Default |\n|---|---|---|\n| $N$ | Number of discrete items | data-dependent |\n| $\\ell_0$ | Natural step size | ~20 px |\n| $\\ell_{\\min}$ | Minimum step size | 6 px |\n| $\\alpha$ | Elasticity exponent | 0.5 |\n| $\\beta$ | Maximum stretch | 2.0 |\n\n```\nGiven: N items, natural length ℓ₀, solid length ℓ_min,\n       axis rest length L₀, maxStretch β, elasticity α\n\npressure = N · ℓ₀ / L₀\n\nif pressure ≤ 1:\n    ℓ = ℓ₀                              # Regime 1: fits\n\nelif N · ℓ_min ≥ β · L₀:\n    ℓ = ℓ_min, truncate to N' items      # Regime 2: overflow\n\nelse:\n    stretch = min(β, pressure^α)          # Regime 3: elastic\n    ℓ = L₀ · stretch / N\n    ℓ = clamp(ℓ, ℓ_min, ℓ₀)\n```\n\n> **Key functions:** `computeElasticBudget()`, `computeAxisStep()` in `core/decisions.ts`; `computeLayout()` in `core/compute-layout.ts`.\n\n---\n\n# §2 Continuous Axis (Gas Pressure Model)\n\n## §2.1 Problem\n\nA continuous axis displays $N$ point-like items (scatter dots, line vertices) across a 2D canvas. Unlike discrete items, these marks do not occupy fixed bands — they float at data-determined positions. Each mark has a visual cross-section $\\sigma$ (px²).\n\n**Why springs don't apply:** Continuous marks don't own slots. A scatter plot with 100 points and one with 10 can both fit in the same canvas — the difference is **density**, not per-item allocation. This is the domain of gas physics.\n\n## §2.2 Parameters\n\n| Symbol | Meaning | Code mapping | Default |\n|---|---|---|---|\n| $W_0, H_0$ | Natural canvas dimensions | `subplotWidth`, `subplotHeight` | 400 × 320 px |\n| $\\sigma$ | Mark cross-section (px²) | `markCrossSection` | 30 px² |\n| $\\sigma_x, \\sigma_y$ | Per-axis cross-sections | `markCrossSectionX/Y` | chart-type specific |\n| $\\alpha_c$ | Elasticity exponent | `elasticity` | 0.3 |\n| $\\beta_c$ | Maximum stretch | `maxStretch` | 1.5 |\n\n> **Code defaults:** `DEFAULT_GAS_PRESSURE_PARAMS` in `core/decisions.ts` — `markCrossSection: 30`, `elasticity: 0.3`, `maxStretch: 1.5`.\n\n**Why $\\beta_c$ is smaller than discrete $\\beta$:** Continuous axes encode by **position along a scale** — the most perceptually robust channel (Cleveland & McGill, 1984). A scatter plot remains readable even when compressed because relative positions are preserved. Discrete axes encode by **length/area of bands**, which degrades faster.\n\n| | Discrete axis | Continuous axis |\n|---|---|---|\n| Primary encoding | Length / area of band | Position along scale |\n| Recommended $\\beta$ | 2.0 | 1.5 |\n\n## §2.3 Per-Axis Stretch\n\nCrowding is almost always asymmetric — e.g., on a line chart, X is driven by time points while Y is driven by overlapping series. Each axis is stretched independently.\n\n### Mode 1: Positional (default)\n\nCount unique pixel positions along the axis (bucketed at ~1 px resolution). Each position needs $\\sigma_{1d} = \\sqrt{\\sigma}$ pixels:\n\n$$p_{1d} = \\frac{\\text{uniquePos} \\cdot \\sigma_{1d}}{\\text{dim}_0}$$\n\n$$s = \\begin{cases}\n1 & \\text{if } p_{1d} \\leq 1 \\\\\n\\min(\\beta_c,\\; p_{1d}^{\\,\\alpha_c}) & \\text{if } p_{1d} > 1\n\\end{cases}$$\n\n### Mode 2: Series-count (`seriesCountAxis`)\n\nWhen `seriesCountAxis` is set (`'x'`, `'y'`, or `'auto'`), the designated axis uses the number of distinct series (color ∪ detail fields) for pressure. `'auto'` resolves to:\n- 2D path (both axes continuous): Y axis.\n- 1D path (one continuous + one discrete): the continuous axis.\n\n$$p_{\\text{series}} = \\frac{n_{\\text{series}} \\cdot \\sigma}{\\text{dim}_0}$$\n\nHere $\\sigma$ is used **directly** (not square-rooted) since series count is inherently 1D.\n\n> **Implementation:** `computeGasPressure()` in `core/decisions.ts` (lines ~442–508). The 2D path (both axes continuous) and 1D path (one axis continuous) are handled separately in `computeLayout()` lines ~275–425.\n\n## §2.4 Positional ≥ Series Constraint\n\nFor charts where both axes are continuous (line, area), stretching the positional axis also reduces visual overlap between series. So:\n\n$$s_{\\text{positional}} = \\max(s_{\\text{positional}},\\; s_{\\text{series}})$$\n\nWhen `maintainContinuousAxisRatio` is set, both axes use the maximum of the two stretches.\n\n## §2.5 Parameter Table\n\n| Chart type | $\\sigma_x$ | $\\sigma_y$ | $\\alpha_c$ | $\\beta_c$ | seriesCountAxis |\n|---|---|---|---|---|---|\n| Scatter | 30 | 30 | 0.3 | 1.5 | — |\n| Line | 100 | 20 | 0.3 | 1.5 | auto (→ Y) |\n| Dotted Line | 100 | 20 | 0.3 | 1.5 | auto (→ Y) |\n| Area | 100 | 20 | 0.3 | 1.5 | auto (→ Y) |\n| Streamgraph | 100 | 20 | 0.3 | 1.5 | auto (→ Y) |\n| Bump | 80 | 20 | 0.3 | 1.5 | auto (→ Y) |\n| Stacked Bar | 20 | 20 | 0.3 | 1.5 | auto (→ Y*) |\n\n\\* For stacked bar, X is discrete (§1), Y is continuous. `auto` resolves to Y via the 1D path.\n\n## §2.6 Worked Examples\n\n### Series-axis stretch ($\\sigma = 20$, $\\text{dim}_0 = 300$, $\\alpha_c = 0.3$, $\\beta_c = 1.5$)\n\n| Scenario | nSeries | pressure | stretch | Final dim |\n|---|---|---|---|---|\n| 8 series (typical) | 8 | 0.53 | 1.0 | 300 |\n| 15 series (moderate) | 15 | 1.0 | 1.0 | 300 |\n| 20 series (busy) | 20 | 1.33 | 1.09 | 328 |\n| 40 series (extreme) | 40 | 2.67 | 1.35 | 406 |\n\n### Combined positional + series (positional ≥ series constraint)\n\n| Scenario | nDates | nSeries | raw X | raw Y | final X | final Y |\n|---|---|---|---|---|---|---|\n| 12 dates × 20 series | 12 | 20 | 1.0 | 1.09 | **1.09** | 1.09 |\n| 100 dates × 40 series | 100 | 40 | 1.32 | 1.35 | **1.35** | 1.35 |\n| 100 dates × 60 series | 100 | 60 | 1.32 | 1.50 | **1.50** | 1.50 |\n| 200 dates × 3 series | 200 | 3 | 1.50 | 1.0 | 1.50 | 1.0 |\n| 200 dates × 20 series | 200 | 20 | 1.50 | 1.09 | 1.50 | 1.09 |\n\n## §2.7 Summary\n\n| Symbol | Meaning | Default |\n|---|---|---|\n| $\\sigma$ | 2D mark cross-section (px²) | 30 |\n| $\\sigma_{1d}$ | 1D projection: $\\sqrt{\\sigma}$ | ~5.5 |\n| $\\alpha_c$ | Elasticity exponent | 0.3 |\n| $\\beta_c$ | Max stretch | 1.5 |\n\n```\nGiven: data points with x/y values, per-axis cross-sections σ_x σ_y,\n       canvas W₀×H₀, elasticity αc, maxStretch βc,\n       optional seriesCountAxis\n\nFor each axis (X, Y):\n    if seriesCountAxis resolves to this axis:\n        nSeries = |distinct color ∪ detail values|\n        pressure = nSeries · σ / dim₀\n    else:\n        uniquePos = |{ round(v · px_per_unit) : v ∈ data }|\n        σ_1d = √σ\n        pressure = uniquePos · σ_1d / dim₀\n\n    if pressure ≤ 1:\n        stretch = 1\n    else:\n        stretch = min(βc, pressure^αc)\n\n# Positional ≥ Series constraint (when seriesCountAxis is set):\nstretch_positional = max(stretch_positional, stretch_series)\n\nW = W₀ · stretch_x\nH = H₀ · stretch_y\n```\n\n> **Key functions:** `computeGasPressure()` in `core/decisions.ts`; gas-pressure integration in `computeLayout()` in `core/compute-layout.ts`.\n\n---\n\n# §3 Circumference (Radial Pressure Model)\n\n## §3.1 Problem\n\nRadial charts (pie, rose, sunburst, radar) arrange data items around a **circle**. The relevant dimension is the **circumference**. When many items crowd the circumference, the chart must grow to keep slices/spokes legible.\n\n**Why axis models don't apply:**\n- **§1 (Spring):** Assumes a 1D axis with endpoints. Radial charts have a closed loop — growing means increasing the **radius**, which increases circumference as $C = 2\\pi r$.\n- **§2 (Gas):** Assumes 2D free-floating points. Radial items are angularly constrained to their slice/spoke positions.\n\nThe circumference model maps the spring intuition to polar geometry: treat the circumference as a \"bent axis\" and stretch the radius.\n\n## §3.2 Parameters\n\n| Symbol | Meaning | Default |\n|---|---|---|\n| $r_0$ | Base radius: $\\max(r_{\\min},\\; \\min(W_0, H_0)/2 - m)$ | derived |\n| $C_0$ | Base circumference: $2\\pi r_0$ | derived |\n| $N_{\\text{eff}}$ | Effective item count (§3.3) | data-dependent |\n| $\\ell_{\\text{arc}}$ | Minimum arc-length per item (px) | 45 |\n| $\\alpha$ | Elasticity exponent | 0.5 |\n| $\\beta$ | Per-dimension max stretch | 2.0 |\n| $r_{\\min}$ | Minimum radius | 60 px |\n| $r_{\\max}$ | Maximum radius (absolute cap) | 400 px |\n| $m$ | Margin around circle (px) | 20 |\n\n> **Code defaults:** `CircumferencePressureParams` in `core/decisions.ts` — `minArcPx: 45`, `minRadius: 60`, `maxRadius: 400`, `elasticity: 0.5`, `maxStretch: 2.0`, `margin: 20`.\n\n## §3.3 Effective Item Count\n\nDifferent radial chart types have different crowding dynamics, abstracted into a single number $N_{\\text{eff}}$.\n\n**Uniform slices/spokes** (rose, radar): $N_{\\text{eff}} = N$.\n\n**Variable-width slices** (pie, sunburst):\n\n$$N_{\\text{eff}} = \\frac{\\sum v_i}{\\min(v_i)}$$\n\nThis answers: \"how many of the smallest slice would fill the entire circle?\" Capped at 100 to prevent degenerate cases.\n\n**Sunburst:** Compute $N_{\\text{eff}}$ on the **outer ring** (leaf nodes only) — the most crowded ring.\n\n> **Implementation:** `computeEffectiveBarCount()` in `core/decisions.ts` (lines ~906–920).\n\n## §3.4 Pressure and Stretch\n\n**Pressure:**\n\n$$p = \\frac{N_{\\text{eff}} \\cdot \\ell_{\\text{arc}}}{C_0} = \\frac{N_{\\text{eff}} \\cdot \\ell_{\\text{arc}}}{2\\pi r_0}$$\n\n**Effective max stretch** (respects per-dimension canvas cap):\n\n$$s_{\\max} = \\min\\!\\left(\\frac{r_{\\max}}{r_0},\\; \\frac{\\min(W_0 \\cdot \\beta,\\; H_0 \\cdot \\beta) - 2m}{2 r_0}\\right)$$\n\n**Stretch:**\n\n$$s = \\begin{cases}\n1 & \\text{if } p \\leq 1 \\\\\n\\min(s_{\\max},\\; p^{\\alpha}) & \\text{if } p > 1\n\\end{cases}$$\n\n**Radius:** $r = \\text{clamp}(r_0 \\cdot s,\\; r_{\\min},\\; r_{\\max})$\n\n> **Implementation:** `computeCircumferencePressure()` in `core/decisions.ts` (lines ~850–893).\n\n## §3.5 Canvas Sizing\n\nAfter computing the final radius $r$:\n\n$$W = \\max(W_0,\\; 2r + 2m), \\quad H = \\max(H_0,\\; 2r + 2m)$$\n\nBoth canvas dimensions grow equally (maintaining circular aspect ratio).\n\n## §3.6 Gauge Faceting\n\nGauge charts are a special case: each gauge is a single-item radial chart. Multiple gauges are laid out in a facet-style grid computed by the template (since the assembler's facet path doesn't apply to axis-less charts).\n\nAll gauge element sizes scale **continuously** with the computed radius:\n\n$$\\text{elementSize} = \\text{baseline} \\times (r / r_{\\text{ref}})$$\n\nwhere $r_{\\text{ref}} = 100$ px. Each element is clamped to a minimum. This avoids threshold artifacts.\n\n## §3.7 Parameter Table\n\n| Chart type | $N_{\\text{eff}}$ source | $\\ell_{\\text{arc}}$ | $\\alpha$ | $\\beta$ | $m$ |\n|---|---|---|---|---|---|\n| **Pie** | `total / min(values)` | 45 | 0.5 | 2.0 | 50 |\n| **Rose** | N categories | 45 | 0.5 | 2.0 | 20 |\n| **Sunburst** | outer-ring `total / min` | 45 | 0.5 | 2.0 | 20 |\n| **Radar** | N spokes | 45 | 0.5 | 2.0 | 20 |\n| **Gauge** | N dials (facet grid) | — | — | 2.0 | 20 |\n\n## §3.8 Summary\n\n```\nGiven: N_eff items, minArc ℓ_arc, base canvas W₀×H₀,\n       margin m, elasticity α, maxStretch β, minRadius, maxRadius\n\nr₀ = max(minRadius, (min(W₀, H₀) / 2) - m)\nC₀ = 2π · r₀\np  = N_eff · ℓ_arc / C₀\n\n# Effective max stretch on radius (per-dimension cap)\ns_max = min(maxRadius / r₀,\n            (min(W₀·β, H₀·β) - 2m) / (2·r₀))\n\nif p ≤ 1:\n    r = r₀\nelse:\n    r = r₀ · min(s_max, p^α)\n\nr = clamp(r, minRadius, maxRadius)\nW = max(W₀, 2r + 2m)\nH = max(H₀, 2r + 2m)\n```\n\n> **Key functions:** `computeCircumferencePressure()`, `computeEffectiveBarCount()` in `core/decisions.ts`.\n\n---\n\n# §4 Area Layout (2D Pressure Model)\n\n## §4.1 Problem\n\nArea-filling charts (treemap) divide a 2D canvas into rectangles whose area encodes value. Unlike Cartesian charts, the fundamental resource is **total area**. When many items crowd the space, every item ends up too small to display labels or be visually distinguishable.\n\n**Why other models don't apply:**\n- **§1 / §2:** Reason about 1D axes independently. Treemap items don't have stable positions on either axis — the squarify algorithm decides the partition on-the-fly.\n- **§3:** Reasons about a closed loop. Treemap items occupy 2D area, not angular sectors.\n\n## §4.2 Parameters\n\n| Symbol | Meaning | Default |\n|---|---|---|\n| $W_0, H_0$ | Base canvas dimensions | from context |\n| $A_0$ | Base canvas area: $W_0 \\times H_0$ | derived |\n| $N_{\\text{eff}}$ | Effective item count (§4.3) | data-dependent |\n| $\\ell_{\\min}$ | Minimum width per effective item (px) | 30 |\n| $\\alpha$ | Elasticity exponent | 0.5 |\n| $\\beta$ | Per-dimension max stretch | 2.0 |\n| $b$ | X-bias factor | 1.5 |\n\n> **Implementation note:** The area model is currently implemented **inline** in `echarts/templates/treemap.ts` (lines ~91–115), not as a shared core function in `decisions.ts`. The formulas and defaults match this document exactly.\n\n## §4.3 Effective Item Count\n\nUses the same formula as §3.3:\n\n$$N_{\\text{eff}} = \\min\\!\\left(100,\\; \\frac{\\sum v_i}{\\min(v_i)}\\right)$$\n\nThis captures the worst case: how many of the smallest item would fill the entire space.\n\n> **Implementation:** Calls `computeEffectiveBarCount()` from `core/decisions.ts`.\n\n## §4.4 Pressure and Biased Split\n\n### Step 1: 1D Pressure\n\nImagine all treemap items laid out as vertical bars along X. Pressure is measured against the base width:\n\n$$p = \\frac{N_{\\text{eff}} \\cdot \\ell_{\\min}}{W_0}$$\n\n### Step 2: Area stretch\n\n$$A_{\\text{stretch}} = \\begin{cases}\n1 & \\text{if } p \\leq 1 \\\\\n\\min(\\beta^2,\\; p^{\\alpha}) & \\text{if } p > 1\n\\end{cases}$$\n\nThe cap is $\\beta^2$ because $A = W \\times H$ and each dimension is capped at $\\beta$.\n\n### Step 3: Biased split to X and Y\n\nX gets more stretch because most reading happens left-to-right and labels are horizontal.\n\nGiven X-bias factor $b$:\n\n$$s_x = \\min(\\beta,\\; A_{\\text{stretch}}^{\\,b/(b+1)})$$\n$$s_y = \\min(\\beta,\\; A_{\\text{stretch}}^{\\,1/(b+1)})$$\n\n**Invariant:** $s_x \\times s_y = A_{\\text{stretch}}$.\n\n| $b$ | X share | Y share | Effect |\n|---|---|---|---|\n| 1.0 | 50% | 50% | Uniform: $s_x = s_y = \\sqrt{A_{\\text{stretch}}}$ |\n| 1.5 (default) | 60% | 40% | X takes more |\n| 2.0 | 67% | 33% | Strongly X-biased |\n\n### Step 4: Canvas sizing\n\n$$W = \\lfloor W_0 \\cdot s_x \\rceil, \\quad H = \\lfloor H_0 \\cdot s_y \\rceil$$\n\n## §4.5 Worked Examples\n\nBase canvas 400×300, $\\ell_{\\min} = 30$, $\\alpha = 0.5$, $\\beta = 2.0$, $b = 1.5$:\n\n| Scenario | $N_{\\text{eff}}$ | Pressure | $A_{\\text{stretch}}$ | $s_x$ | $s_y$ | W | H |\n|---|---|---|---|---|---|---|---|\n| 5 equal items | 5 | 0.38 | 1.0 | 1.0 | 1.0 | 400 | 300 |\n| 10 equal items | 10 | 0.75 | 1.0 | 1.0 | 1.0 | 400 | 300 |\n| 20 equal items | 20 | 1.50 | 1.22 | 1.13 | 1.08 | 452 | 324 |\n| 50 equal items | 50 | 3.75 | 1.94 | 1.52 | 1.27 | 608 | 381 |\n| Skewed (1 large + 20 tiny) | 100 | 7.50 | 2.74 | 1.87 | 1.46 | 748 | 438 |\n\n**Why biased split?** Treemap squarify algorithms produce nearly square cells when the canvas is square. Giving X more stretch prioritizes horizontal readability: labels inside treemap cells are horizontal, so extra width is more valuable for label fitting.\n\n## §4.6 Summary\n\n| Symbol | Meaning | Default |\n|---|---|---|\n| $N_{\\text{eff}}$ | Effective item count ($\\sum v / \\min v$, cap 100) | data-dependent |\n| $\\ell_{\\min}$ | Minimum width per effective item (px) | 30 |\n| $\\alpha$ | Elasticity exponent | 0.5 |\n| $\\beta$ | Per-dimension max stretch | 2.0 |\n| $b$ | X-bias factor (1 = uniform, >1 = X takes more) | 1.5 |\n\n```\nGiven: leaf values, base canvas W₀×H₀,\n       minBarPx, elasticity α, maxStretch β, xBias b\n\nN_eff = min(100, sum(values) / min(values))\np     = N_eff · minBarPx / W₀\n\nif p ≤ 1:\n    A_stretch = 1\nelse:\n    A_stretch = min(β², p^α)\n\ns_x = min(β, A_stretch^(b/(b+1)))\ns_y = min(β, A_stretch^(1/(b+1)))\n\nW = round(W₀ · s_x)\nH = round(H₀ · s_y)\n```\n\n> **Key function:** Inline in `echarts/templates/treemap.ts`. Uses `computeEffectiveBarCount()` from `core/decisions.ts`.\n\n---\n\n# §5 Unified Summary\n\nThe four models adapt the same core idea — **pressure → elastic stretch → clamped output** — to different geometric contexts:\n\n| § | Model | Geometry | Pressure formula | Stretch dimension(s) | Chart types |\n|---|---|---|---|---|---|\n| §1 | Elastic Budget | 1D axis | $N \\cdot \\ell_0 / L_0$ | 1D (axis length) | Bar, Histogram, Heatmap, Boxplot |\n| §2 | Gas Pressure | 2D point cloud | $\\text{uniquePos} \\cdot \\sigma_{1d} / \\text{dim}$ | Per-axis (X, Y independent) | Scatter, Line, Area |\n| §3 | Circumference | 1D closed loop | $N_{\\text{eff}} \\cdot \\ell_{\\text{arc}} / C_0$ | Radius (both W, H equally) | Pie, Rose, Sunburst, Radar, Gauge |\n| §4 | Area | 2D filled space | $N_{\\text{eff}} \\cdot \\ell_{\\min} / W_0$ | Area (biased X/Y split) | Treemap |\n\n### Shared concepts\n\n1. **Pressure = demand / supply.** Items need space; the base canvas provides it. Pressure > 1 means overflow.\n2. **Elastic stretch.** $s = \\min(\\beta,\\; p^\\alpha)$. The power-law exponent $\\alpha$ controls how aggressively the chart grows (0.3 for gas, 0.5 for discrete/radial/area).\n3. **Per-dimension cap $\\beta$.** No axis grows beyond $\\beta \\times$ base. For radial/area models this translates to radius or area caps.\n4. **Effective item count.** For variable-width items (pie, treemap), $N_{\\text{eff}} = \\sum v_i / \\min(v_i)$ measures worst-case crowding.\n\n### Decision tree\n\n```\nIs the chart axis-based?\n├── YES: Does it have banded (discrete) axes?\n│   ├── YES → §1 Elastic Budget Model\n│   └── NO  → §2 Gas Pressure Model\n└── NO:  Is the layout radial (items around a circle)?\n    ├── YES → §3 Circumference Model\n    └── NO  → §4 Area Model (2D space-filling)\n```\n\n### Implementation map\n\n| Function | File | Model |\n|---|---|---|\n| `computeElasticBudget()` | `core/decisions.ts` | §1 |\n| `computeAxisStep()` | `core/decisions.ts` | §1 |\n| `computeGasPressure()` | `core/decisions.ts` | §2 |\n| `computeCircumferencePressure()` | `core/decisions.ts` | §3 |\n| `computeEffectiveBarCount()` | `core/decisions.ts` | §3, §4 |\n| `computeLayout()` | `core/compute-layout.ts` | §1, §2 orchestration |\n| `computeFacetGrid()` | `core/compute-layout.ts` | §1.9 faceting |\n| `computeChannelBudgets()` | `core/compute-layout.ts` | §1.9 overflow budgets |\n| Area pressure (inline) | `echarts/templates/treemap.ts` | §4 |\n"
  },
  {
    "path": "src/lib/agents-chart/docs/test_plan.md",
    "content": "# Chart Engine Test Plan\n\n## Overview\n\nTest data lives in `test-data/` as fixture generators (not executable test suites).\nEach file exports generator functions that produce `TestCase[]` arrays. The gallery\nUI (`ChartGallery.tsx`) uses `TEST_GENERATORS` and `GALLERY_SECTIONS` from\n`test-data/index.ts` to render all tests interactively.\n\n**20 test-data files**, **~11,100 lines**, **53 named test generators**.\n\n### Test categories\n\n| Category | Files | Description |\n|----------|-------|-------------|\n| **VL chart matrices** | scatter-tests, line-tests, bar-tests, area-tests | Matrix-driven tests for core VL chart types |\n| **Distribution charts** | distribution-tests | Histogram, Boxplot, Density, Strip Plot |\n| **Specialized charts** | specialized-tests | Pie, Heatmap, Lollipop, Candlestick, Waterfall, Ranged Dot, Bump, Radar, Pyramid, Rose, Custom |\n| **Semantic context** | semantic-tests | 39 tests validating semantic type → ChannelSemantics resolution |\n| **ECharts backend** | echarts-tests | All ECharts chart types (reuses VL inputs + ECharts-only types) |\n| **Chart.js backend** | chartjs-tests | Chart.js chart types |\n| **GoFish backend** | gofish-tests | GoFish imperative rendering |\n| **Facets** | facet-tests | Column, row, col+row, wrap, clip, overflow faceting |\n| **Stress/sizing** | stress-tests, gas-pressure-tests, line-area-stretch-tests, discrete-axis-tests | Overflow, elasticity, pressure model, discrete axis sizing |\n| **Temporal** | date-tests | Year, Month, YearMonth, Decade, DateTime, Hours parsing/formatting |\n| **Line/area variants** | line-area-tests | Dotted Line, Bump Chart |\n\n---\n\n## Scatter Plot\n\nA scatter plot places marks (points/bubbles) in a 2D space. The core axes are continuous (quantitative), but one or both axes can be discrete (nominal), which changes how the engine computes layout, step sizing, and overflow.\n\nTemporal axes are omitted from scatter tests because T behaves identically to Q in scatter layout — no special handling. Temporal is still tested as a color channel (`color: 'T'`).\n\nDefault test canvas: 300 × 300 px.\n\n### Matrix-driven approach\n\nTests are generated from a **declarative matrix** (`SCATTER_MATRIX` in `scatter-tests.ts`). Each row describes one test via its axis types, optional third channels, cardinality, and special flags. A generator function converts each matrix entry into a full `TestCase`.\n\n### Matrix dimensions\n\n| Dimension | Values | Notes |\n|-----------|--------|-------|\n| **x axis type** | Q, N | Quantitative, Nominal |\n| **y axis type** | Q, N | Same |\n| **color channel** | —, Q, T, N | Optional 3rd encoding |\n| **size channel** | —, Q, N | Optional 4th encoding |\n| **n (density)** | 10–500 | Or 0 for N×N grid mode |\n| **cardinality** | xCard, yCard, colorCard, sizeCard | Cardinality of nominal dims |\n| **flags** | hugeRange | Special data distributions |\n\n### Full test matrix (25 tests)\n\n#### Q × Q — 15 tests\n\n| # | color | size | n | flags | what it tests |\n|---|-------|------|---|-------|---------------|\n| 1 | — | — | 20 | | Baseline scatter |\n| 2 | N(3) | — | 20 | | Nominal color groups |\n| 3 | Q | — | 20 | | Continuous color gradient |\n| 4 | T | — | 30 | | Temporal color gradient |\n| 5 | — | Q | 50 | | Bubble chart |\n| 6 | — | N(4) | 20 | | Ordinal size — 4 ranked levels |\n| 7 | N(3) | Q | 15 | | Gapminder-style |\n| 8 | Q | Q | 30 | | Dual continuous (4D) |\n| 9 | N(20) | Q | 20 | hugeRange | Size 1K–1B, sqrt scale |\n| 10 | — | — | 100 | | Moderate density |\n| 11 | — | — | 500 | | High density |\n| 12 | N(20) | — | 200 | | Dense, many groups |\n| 13 | N(50) | — | 100 | | Legend overflow |\n| 14 | — | Q | 10 | | Sparse bubbles |\n| 15 | — | Q | 200 | | Dense bubbles |\n\n#### N × Q — 4 tests\n\n| # | xCard | color | size | n | what it tests |\n|---|-------|-------|------|---|---------------|\n| 1 | 5 | Q | — | 25 | Strip + continuous color |\n| 2 | 5 | — | Q | 25 | Bubble strip |\n| 3 | 2 | — | — | 30 | Binary category strip (edge) |\n| 4 | 60 | — | — | 60 | 60 cats — overflow |\n\n#### Q × N — 3 tests (mirrors N×Q with flipped orientation)\n\n| # | yCard | color | size | n | what it tests |\n|---|-------|-------|------|---|---------------|\n| 1 | 5 | Q | — | 25 | Horizontal strip + continuous color |\n| 2 | 5 | — | Q | 25 | Horizontal bubble strip |\n| 3 | 60 | — | — | 60 | Horizontal 60-cat overflow |\n\n#### N × N — 3 tests\n\n| # | xCard | yCard | color | size | what it tests |\n|---|-------|-------|-------|------|---------------|\n| 1 | 5 | 6 | — | Q | Bubble grid |\n| 2 | 5 | 4 | Q | — | Heatmap-like grid |\n| 3 | 15 | 12 | — | Q | Large grid — overflow |\n\n### Coverage summary\n\nAxis combos: Q×Q, N×Q, Q×N, N×N. Third-channel variants (color and size, typed Q/T/N) crossed with Q×Q. Density from 10 to 500. Edge cases: binary categories, legend overflow, huge value ranges.\n\n### How to add a test\n\nAdd one row to `SCATTER_MATRIX` in `scatter-tests.ts`:\n\n```typescript\n{ x: 'N', y: 'Q', n: 40, xCard: 8, color: 'Q', desc: 'Strip + continuous color, moderate density' },\n```\n\nThe generator handles field naming, data synthesis, metadata, tags, and title automatically.\n\n---\n\n## Line Chart\n\nA line chart connects data points with lines. Lines imply sequential progression, so axes use T (temporal), O (ordinal), or Q (quantitative) — never purely nominal. N (nominal) is used only for color groups.\n\nChannels: `x, y, color, opacity, column, row`\n\n### Matrix-driven approach\n\nTests are generated from `LINE_MATRIX` in `line-tests.ts`. Each row specifies axis types, optional color channel, point count, and flags like `sparse` (20% dropout).\n\n### Full test matrix (16 tests)\n\n#### T × Q — 6 tests (core time series)\n\n| # | color | n | flags | what it tests |\n|---|-------|---|-------|---------------|\n| 1 | — | 30 | | Simple time series |\n| 2 | N(4) | 200 | | 4 series × 50 dates |\n| 3 | N(8) | 800 | | 8 series crowded |\n| 4 | N(20) | 4000 | stress | 20 series spaghetti |\n| 5 | N(3) | 180 | sparse | 3 series, ~20% missing |\n| 6 | Q | 30 | | Continuous color gradient |\n\n#### O × Q — 4 tests (ordinal x)\n\n| # | xCard | color | n | what it tests |\n|---|-------|-------|---|---------------|\n| 7 | 5 | — | 5 | Ordinal line |\n| 8 | 12 | N(4) | 48 | 12 ordinal × 4 series |\n| 9 | 30 | — | 30 | Label overflow |\n| 10 | 5 | Q | 5 | Ordinal + gradient |\n\n#### Q × Q — 3 tests\n\n| # | color | n | what it tests |\n|---|-------|---|---------------|\n| 11 | — | 30 | Quantitative x line |\n| 12 | N(3) | 150 | 3 parametric curves |\n| 13 | — | 200 | Dense single curve |\n\n#### Q × O — 3 tests (mirror)\n\n| # | yCard | color | n | what it tests |\n|---|-------|-------|---|---------------|\n| 14 | 5 | — | 5 | Horizontal ordinal |\n| 15 | 12 | N(4) | 48 | Horizontal 12 ordinal × 4 |\n| 16 | 30 | — | 30 | Horizontal 30 ordinal overflow |\n\n#### Excluded combos\n\n- **T×T, Q×T** — date-pair data (start vs end date) doesn't suit line charts. Each row is an independent event, not a sequential series; lines connect points in data order producing random zig-zags. Better served by scatter or dumbbell charts.\n- **O×O** — ordinal×ordinal lines are degenerate.\n- **N×N, T×N, N×T** — purely nominal axes don't suit line charts. Lines imply sequence/progression; connecting unordered categories is misleading.\n\n### Coverage summary\n\nAxis combos: T×Q, O×Q, Q×Q, Q×O. Color variants (N, Q) crossed with primary combos. Density from 5 to 4000 (stress). Sparse dropout tests irregular gaps. Total **16 tests**.\n\n---\n\n## Bar Chart / Stacked Bar Chart / Grouped Bar Chart\n\nBar charts encode values as rectangular bars. Three variants share a common matrix format in `bar-tests.ts`:\n- **Bar Chart**: `x, y, color, opacity` — basic bars with optional color\n- **Stacked Bar Chart**: `x, y, color` — bars stacked by color dimension\n- **Grouped Bar Chart**: `x, y, group` — bars side-by-side by group dimension\n\n### Matrix-driven approach\n\nThree matrices (`BAR_MATRIX`, `STACKED_BAR_MATRIX`, `GROUPED_BAR_MATRIX`) share one generator function `barMatrixToTestCase`. The third channel key is `'color'` for bar/stacked and `'group'` for grouped.\n\n### Bar Chart matrix (19 tests)\n\n#### N × Q — 6 tests (classic vertical)\n\n| # | xCard | color | n | what it tests |\n|---|-------|-------|---|---------------|\n| 1 | 5 | — | 5 | Basic 5 bars |\n| 2 | 20 | — | 20 | Label rotation |\n| 3 | 30 | — | 30 | Thin bar handling |\n| 4 | 100 | — | 100 | Discrete cutoff |\n| 5 | 5 | N(3) | 15 | 5 cats × 3 colors |\n| 6 | 5 | N(20) | 100 | Color saturation |\n\n#### Q × N — 3 tests (horizontal)\n\n| # | yCard | color | n | what it tests |\n|---|-------|-------|---|---------------|\n| 7 | 10 | — | 10 | Horizontal 10 bars |\n| 8 | 100 | — | 100 | Horizontal cutoff |\n| 9 | 10 | N(3) | 30 | Horizontal + 3 colors |\n\n#### T × Q — 3 tests (temporal)\n\n| # | color | n | what it tests |\n|---|-------|---|---------------|\n| 10 | — | 24 | Temporal bars |\n| 11 | — | 100 | 100 dates — dynamic sizing |\n| 12 | N(3) | 72 | Temporal + 3 colors |\n\n#### Q × T — 2 tests (horizontal temporal)\n\n| # | color | n | what it tests |\n|---|-------|---|---------------|\n| 13 | — | 18 | Horizontal temporal |\n| 14 | N(3) | 54 | Horizontal temporal + color |\n\n#### Q × Q — 2 tests (continuous banded)\n\n| # | n | what it tests |\n|---|---|---------------|\n| 15 | 20 | Both quant — dynamic resizing |\n| 16 | 30 | Equally spaced 1..30 |\n\n#### Edge combos — 3 tests\n\n| # | x | y | n | what it tests |\n|---|---|---|---|---------------|\n| 17 | N | N | grid | Cat × cat (degenerate) |\n| 18 | T | T | 20 | Date × date (degenerate) |\n| 19 | T | N | 25 | Temporal × categorical |\n\n### Stacked Bar Chart matrix (12 tests)\n\n| # | x | y | color | n | what it tests |\n|---|---|---|-------|---|---------------|\n| 1 | N | Q | N(3) | 12 | Basic stack 4×3 |\n| 2 | N | Q | N(5) | 75 | Large 15×5 |\n| 3 | N | Q | N(3) | 240 | Very large 80×3 (cutoff) |\n| 4 | N | Q | Q(4) | 24 | Numeric color (1–4) |\n| 5 | N | Q | Q(30) | 150 | Numeric color (1–30) |\n| 6 | T | Q | N(3) | 30 | Temporal stack |\n| 7 | T | Q | N(4) | 80 | 20 dates × 4 |\n| 8 | Q | Q | N(3) | 30 | Both quant stacked |\n| 9 | Q | N | N(3) | 24 | Horizontal stack |\n| 10 | Q | T | N(3) | 45 | Horizontal temporal stack |\n| 11 | N | N | N(3) | grid | Cat×cat stacked (edge) |\n| 12 | T | T | N(3) | 30 | Date×date stacked (edge) |\n\n### Grouped Bar Chart matrix (12 tests)\n\n| # | x | y | group | n | what it tests |\n|---|---|---|-------|---|---------------|\n| 1 | N | Q | N(3) | 12 | Basic grouped 4×3 |\n| 2 | N | Q | — | 8 | No group — fallback |\n| 3 | N | Q | N(3) | 270 | Very large 90×3 (cutoff) |\n| 4 | N | Q | Q(5) | 30 | Numeric group (1–5) |\n| 5 | T | Q | N(3) | 36 | Temporal grouped |\n| 6 | Q | Q | N(4) | 20 | Both quant + group |\n| 7 | Q | N | N(4) | 24 | Horizontal grouped |\n| 8 | Q | T | N(3) | 30 | Horizontal temporal grouped |\n| 9 | N | Q | Q(50) | 400 | Numeric group (1–50) |\n| 10 | N | Q | Q | 50 | Continuous float on group |\n| 11 | N | N | N(3) | grid | Cat×cat grouped (edge) |\n| 12 | T | T | N(3) | 30 | Date×date grouped (edge) |\n\n### Coverage summary\n\nAll three bar variants cover common xy-type combinations. Bar Chart has 19 tests, Stacked Bar has 12, Grouped Bar has 12 — total **43 bar tests**. Covers horizontal/vertical orientation, discrete cutoff, numeric/continuous color, edge combos.\n\n## Area Chart & Streamgraph\n\n**File:** `area-tests.ts`\n**Approach:** Matrix-driven — `AREA_MATRIX` (17 entries) + `STREAMGRAPH_MATRIX` (6 entries).\n**Shared generator:** `areaMatrixToTestCase(entry, chartType, rand)` — same infrastructure for both chart types.\n**Data characteristic:** Uses `genAreaTrend()` with upward drift (natural for cumulative / stacked-area metrics).\n\nArea charts use O (ordinal) for categorical axes (like line charts) — area fills imply continuity. N (nominal) is used only for color groups. Purely nominal axis combos are excluded.\n\n### Area Chart matrix (17 tests)\n\n#### T × Q — 7 tests (core stacked / layered area)\n\n| # | color | n | flags | what it tests |\n|---|-------|---|-------|---------------|\n| 1 | — | 30 | | Simple time-series area |\n| 2 | N(4) | 96 | | 4 stacked series |\n| 3 | N(8) | 480 | | 8 series large stacked |\n| 4 | N(15) | 1800 | stress | 15 series stress |\n| 5 | N(3) | 120 | | 3 layered/overlapping |\n| 6 | N(3) | 180 | sparse | 3 series, ~20% missing |\n| 7 | Q | 30 | | Continuous color gradient |\n\n#### O × Q — 4 tests (ordinal x)\n\n| # | xCard | color | n | what it tests |\n|---|-------|-------|---|---------------|\n| 8 | 5 | — | 5 | Ordinal area 5 cats |\n| 9 | 12 | N(4) | 48 | 12 ordinal × 4 stacked |\n| 10 | 30 | — | 30 | 30 ordinal overflow |\n| 11 | 5 | Q | 5 | Ordinal + continuous color |\n\n#### Q × O — 3 tests (mirror)\n\n| # | yCard | color | n | what it tests |\n|---|-------|-------|---|---------------|\n| 12 | 5 | — | 5 | Horizontal ordinal 5 cats |\n| 13 | 12 | N(4) | 48 | Horizontal 12 ordinal × 4 |\n| 14 | 30 | — | 30 | Horizontal 30 ordinal overflow |\n\n#### Q × Q — 3 tests\n\n| # | color | n | what it tests |\n|---|-------|---|---------------|\n| 15 | — | 30 | Quantitative x area |\n| 16 | N(3) | 150 | 3 stacked curves |\n| 17 | — | 200 | Dense single-series |\n\n#### Excluded combos\n\n- **T×T, Q×T** — date-pair data doesn't suit area charts. Area fills imply sequential progression; T×T/Q×T lack monotonic relationships.\n- **N×N, T×N, N×T** — purely nominal axes don't suit area charts. Area fills imply continuity/progression; nominal axes lack this.\n\n### Streamgraph matrix (6 tests)\n\n| # | x | y | color | n | what it tests |\n|---|---|---|-------|---|---------------|\n| 1 | T | Q | N(5) | 200 | 5 genres basic streamgraph |\n| 2 | T | Q | N(10) | 800 | 10 industries large |\n| 3 | T | Q | N(20) | 3000 | 20 series stress |\n| 4 | T | Q | N(5) | 200 | 5 series ~20% sparse |\n| 5 | O | Q | N(5) | 60 | Ordinal streamgraph |\n| 6 | Q | Q | N(3) | 150 | Quant-x streamgraph |\n\n### Coverage summary\n\nArea Chart covers T×Q, O×Q, Q×O, Q×Q axis combos (17 tests). Streamgraph adds 6 tests exercising T×Q, O×Q, and Q×Q with multi-series color. Total **23 area/streamgraph tests**.\n\n---\n\n## Grand total (matrix-driven chart tests)\n\n| Chart type | Tests |\n|------------|-------|\n| Scatter | 25 |\n| Line | 16 |\n| Bar | 19 |\n| Stacked Bar | 12 |\n| Grouped Bar | 12 |\n| Area | 17 |\n| Streamgraph | 6 |\n| **Matrix subtotal** | **107** |\n\nPlus additional non-matrix test generators:\n- Distribution charts (Histogram, Boxplot, Density, Strip)\n- Specialized charts (Pie, Heatmap, Lollipop, Candlestick, Waterfall, etc.)\n- Semantic context (39 tests)\n- Facets (9 generators)\n- Stress/sizing (4 generators)\n- Temporal (7 generators)\n- ECharts backend (24 generators)\n- Chart.js backend (11 generators)\n- GoFish backend (10 generators)\n\n**53 named test generators** total across all categories.\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/README.md",
    "content": "# ECharts Backend\n\nCompiles the core semantic layer into [Apache ECharts](https://echarts.apache.org/) option objects. Uses a series-based data model rather than VL's encoding-channel approach.\n\n## Output Format\n\n```jsonc\n{ \"xAxis\": {...}, \"yAxis\": {...}, \"series\": [{ \"type\": \"bar\", \"data\": [...] }], \"tooltip\": {...}, \"legend\": {...}, \"grid\": {...} }\n```\n\nAn ECharts option object with `_width`/`_height` hints and optional `_warnings`. Consumed by `echarts.init(dom).setOption(spec)`.\n\n## Assembly Pipeline\n\n| Phase | Step | Description |\n|-------|------|-------------|\n| **0** | `resolveSemantics` | Shared — resolve field types, aggregates, sort orders |\n| 0a | `declareLayoutMode` | Template layout declaration |\n| 0b | `convertTemporalData` | Shared — temporal parsing |\n| 0c | `filterOverflow` | Shared — category truncation |\n| **1** | `computeLayout` | Shared — step sizes, subplot dimensions |\n| **2** | Build `resolvedEncodings` → `template.instantiate` → `ecApplyLayoutToSpec` → `ecCombineFacetPanels` → tooltips | Final ECharts option |\n\n**Key difference from VL:** No `buildVLEncodings` step. ECharts templates read `channelSemantics` directly and produce series/axis config themselves.\n\n## File Structure\n\n```\necharts/\n  assemble.ts          – assembleECharts(): Phase 2 assembly\n  instantiate-spec.ts  – ecApplyLayoutToSpec(), ecApplyTooltips()\n  facet.ts             – ecCombineFacetPanels(): synthetic multi-grid faceting\n  index.ts             – barrel exports\n  templates/\n    index.ts           – template registry (13 templates, 6 categories)\n    scatter.ts         – Scatter Plot\n    bar.ts             – Bar, Grouped Bar, Stacked Bar\n    line.ts            – Line Chart\n    area.ts            – Area, Streamgraph\n    pie.ts             – Pie Chart\n    histogram.ts       – Histogram\n    heatmap.ts         – Heatmap\n    boxplot.ts         – Boxplot\n    candlestick.ts     – Candlestick Chart\n    radar.ts           – Radar Chart\n    rose.ts            – Rose Chart\n    streamgraph.ts     – Streamgraph (themeRiver)\n    utils.ts           – shared utilities\n```\n\n## Template Definitions (13 templates)\n\n| Category | Charts |\n|----------|--------|\n| Scatter & Point | Scatter Plot, Boxplot |\n| Bar | Bar Chart, Grouped Bar, Stacked Bar, Histogram, Heatmap |\n| Line & Area | Line Chart, Area Chart, Streamgraph |\n| Part-to-Whole | Pie Chart |\n| Financial | Candlestick Chart |\n| Polar | Radar Chart, Rose Chart |\n\n## Known Issues & Notes\n\n- **Custom faceting module** (`facet.ts`, 252 lines): ECharts has no native faceting, so this module synthesizes multi-grid layouts with `grid[]`, `xAxis[]`, `yAxis[]`, `series[]` (indexed), and `graphic[]` for header labels. Only axis-based charts support faceting — pie, radar, and themeRiver do not.\n- Bar sizing uses explicit `barWidth`, `barCategoryGap`, `barGap` pixel values rather than VL's declarative `step` sizing.\n- Zero-baseline uses `axis.min` / `scale: true` instead of VL's `scale.zero`.\n- Axis-less charts (pie, radar) are detected separately in `instantiate-spec.ts` — they skip axis/grid config entirely.\n- ECharts Streamgraph uses `themeRiver` series type, which has different data shape requirements.\n- The `ecCombineFacetPanels` step is unique to ECharts — it converts separate facet panel specs into a single multi-grid option.\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/assemble.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts chart assembly — Two-Stage Pipeline Coordinator.\n *\n * Reuses the **same core analysis pipeline** as Vega-Lite:\n *   Phase 0:  resolveChannelSemantics  → ChannelSemantics\n *   Step 0a:  declareLayoutMode    → LayoutDeclaration\n *   Step 0b:  convertTemporalData  → converted data\n *   Step 0c:  filterOverflow       → filtered data, nominalCounts\n *   Phase 1:  computeLayout        → LayoutResult\n *\n * Then diverges for Phase 2 (ECharts-specific):\n *   template.instantiate → builds ECharts option structure\n *   ecApplyLayoutToSpec  → applies layout decisions to option\n *\n * ── Backend Translation Responsibilities ────────────────────────────\n * The LayoutResult from Phase 1 is target-agnostic.  This assembler is\n * responsible for translating it into ECharts-specific structures:\n *\n *   subplotWidth / subplotHeight\n *     → ECharts `grid.width` / `grid.height` (the inner plot area).\n *       The assembler adds ECharts-specific margins (CANVAS_BUFFER,\n *       axis label space, legend width) to compute the outer canvas\n *       `_width` / `_height`.\n *\n *   xStep / yStep / stepPadding\n *     → ECharts `barWidth`, `barCategoryGap`, `barGap` on series.\n *       VL handles this via `width: {step: N}` natively; ECharts has\n *       no such declarative feature, so we compute explicit pixel\n *       values from the layout numbers.\n *\n *   Facet wrapping\n *     → Column wrapping is decided by filterOverflow (shared with VL).\n *       This assembler reads `overflowResult.facetGrid` for the grid\n *       dimensions, restructures the flat 1×N panels into a wrapped\n *       2D grid, and passes the result to ecCombineFacetPanels.\n *       The combiner itself has NO wrapping logic — it renders\n *       whatever grid it receives.\n *\n *   Per-panel vs shared axis titles\n *     → The facet combiner keeps Y-axis titles on the left column only\n *       and renders the X-axis title as a shared centered element.\n *\n * Key structural differences from Vega-Lite output:\n *   VL: { mark, encoding, data: {values}, width, height }\n *   EC: { xAxis, yAxis, series: [{type, data}], tooltip, legend, grid }\n *\n * This module has NO React, Redux, or UI framework dependencies.\n */\n\nimport {\n    ChartEncoding,\n    ChartTemplateDef,\n    ChartAssemblyInput,\n    AssembleOptions,\n    LayoutDeclaration,\n    InstantiateContext,\n} from '../core/types';\nimport type { ChartWarning } from '../core/types';\nimport { ecGetTemplateDef } from './templates';\nimport { resolveChannelSemantics, convertTemporalData } from '../core/resolve-semantics';\nimport { toTypeString, type SemanticAnnotation } from '../core/field-semantics';\nimport { filterOverflow } from '../core/filter-overflow';\nimport { computeLayout, computeChannelBudgets } from '../core/compute-layout';\nimport { ecApplyLayoutToSpec, ecApplyTooltips } from './instantiate-spec';\nimport { ecCombineFacetPanels } from './facet';\nimport { DEFAULT_COLORS } from './templates/utils';\nimport { inferVisCategory, computeZeroDecision } from '../core/semantic-types';\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Assemble an ECharts option object.\n *\n * ```ts\n * const option = assembleECharts({\n *   data: { values: myRows },\n *   semantic_types: { weight: 'Quantity' },\n *   chart_spec: { chartType: 'Bar Chart', encodings: { x: { field: 'category' }, y: { field: 'value' } } },\n *   options: { addTooltips: true },\n * });\n * ```\n *\n * @returns An ECharts option object with optional `_warnings` and `_width`/`_height` hints\n */\nexport function assembleECharts(input: ChartAssemblyInput): any {\n    const chartType = input.chart_spec.chartType;\n    const encodings = input.chart_spec.encodings;\n    const data = input.data.values ?? [];\n    const semanticTypes = input.semantic_types ?? {};\n    const canvasSize = input.chart_spec.canvasSize ?? { width: 400, height: 320 };\n    const chartProperties = input.chart_spec.chartProperties;\n    const options = input.options ?? {};\n    const chartTemplate = ecGetTemplateDef(chartType) as ChartTemplateDef;\n    if (!chartTemplate) {\n        throw new Error(`Unknown ECharts chart type: ${chartType}. Use ecAllTemplateDefs to see available types.`);\n    }\n\n    const warnings: ChartWarning[] = [];\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // PHASE 0: Resolve Semantics (shared with VL — completely target-agnostic)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    // Extract mark type from template (for zero finalization)\n    // ECharts templates still use VL-style `template.mark` for compatibility\n    const tplMark = chartTemplate.template?.mark;\n    const templateMarkType = typeof tplMark === 'string' ? tplMark : tplMark?.type;\n\n    // Convert temporal data once — feeds semantic resolution and all downstream stages\n    const convertedData = convertTemporalData(data, semanticTypes);\n\n    const channelSemantics = resolveChannelSemantics(\n        encodings, data, semanticTypes, convertedData,\n    );\n\n    // Finalize zero-baseline (requires template mark knowledge)\n    const effectiveMarkType = templateMarkType || 'point';\n    for (const [channel, cs] of Object.entries(channelSemantics)) {\n        if ((channel === 'x' || channel === 'y') && cs.type === 'quantitative') {\n            const numericValues = data\n                .map(r => r[cs.field])\n                .filter((v: any) => v != null && typeof v === 'number' && !isNaN(v));\n            cs.zero = computeZeroDecision(\n                cs.semanticAnnotation.semanticType, channel, effectiveMarkType, numericValues,\n            );\n        }\n    }\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // STEP 0a: declareLayoutMode (shared hook)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const declaration: LayoutDeclaration = chartTemplate.declareLayoutMode\n        ? chartTemplate.declareLayoutMode(channelSemantics, data, chartProperties)\n        : {};\n\n    // Merge paramOverrides into effective options\n    const effectiveOptions: AssembleOptions = {\n        ...options,\n        ...(declaration.paramOverrides || {}),\n    };\n\n    // ECharts facet overhead:\n    //   Fixed: mLeft (~35-55px width) + mBottom (~22px height).\n    //   Gap:   GAP + PAD between panels (ref 14px at 400px canvas,\n    //          core scales proportionally).\n    if (effectiveOptions.facetFixedPadding == null) {\n        effectiveOptions.facetFixedPadding = { width: 55, height: 22 };\n    }\n    if (effectiveOptions.facetGap == null) {\n        effectiveOptions.facetGap = 14;   // reference at 400px canvas\n    }\n\n    // Default true so that _encodingTooltip is applied and all charts get encoding-style tooltips\n    const {\n        addTooltips: addTooltipsOpt = true,\n    } = effectiveOptions;\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // STEP 0b: filterOverflow (shared)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const allMarkTypes = new Set<string>();\n    if (templateMarkType) allMarkTypes.add(templateMarkType);\n\n    // ── Channel budgets (shared, in layout module) ─────────────────────\n    const budgets = computeChannelBudgets(\n        channelSemantics, declaration, convertedData, canvasSize, effectiveOptions,\n    );\n    const facetGridResult = budgets.facetGrid;\n\n    const overflowResult = filterOverflow(\n        channelSemantics, declaration, encodings, convertedData,\n        budgets, allMarkTypes,\n    );\n\n    let values = overflowResult.filteredData;\n    warnings.push(...overflowResult.warnings);\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // PHASE 1: Compute Layout (shared — completely target-agnostic)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const layoutResult = computeLayout(\n        channelSemantics,\n        declaration,\n        values,\n        canvasSize,\n        effectiveOptions,\n        facetGridResult,\n    );\n\n    layoutResult.truncations = overflowResult.truncations;\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // PHASE 2: Instantiate ECharts Option (EC-specific)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    // --- Build resolved encodings (EC analogue of VL buildVLEncodings) ---\n    const resolvedEncodings = buildECEncodings(\n        encodings,\n        channelSemantics,\n        declaration,\n        values,\n        canvasSize,\n        semanticTypes,\n        templateMarkType,\n        chartTemplate,\n    );\n\n    // --- Template instantiate ---\n\n    const instantiateContext: InstantiateContext = {\n        channelSemantics,\n        layout: layoutResult,\n        table: values,\n        resolvedEncodings,\n        encodings,\n        chartProperties,\n        canvasSize,\n        semanticTypes,\n        chartType,\n        assembleOptions: effectiveOptions,\n    };\n\n    // --- Detect faceting (column / row channels) ---\n\n    const colField = channelSemantics.column?.field;\n    const rowField = channelSemantics.row?.field;\n    const hasFacet = !!(colField || rowField);\n\n    // Multi-grid faceting only works for axis-based charts.\n    // Pie, radar, themeRiver use different positioning.\n    const hasAxes = chartTemplate.channels.includes('x') || chartTemplate.channels.includes('y');\n\n    let ecOption: any;\n\n    if (hasFacet && hasAxes) {\n        // ── Faceted rendering — multi-grid layout ────────────────────────\n        const maxFacetCols = facetGridResult?.columns ?? 1;\n        const maxFacetRows = facetGridResult?.rows ?? 1;\n        const maxFacetNominalValues = maxFacetCols * maxFacetRows;\n\n        // Bin quantitative facet channels when unique values exceed grid capacity (VL enc.bin = true)\n        let colValues: string[];\n        let rowValues: string[];\n        if (colField && channelSemantics.column?.type === 'quantitative') {\n            const raw = values.map((r: any) => r[colField]).filter((v: any) => v != null && typeof v === 'number' && !isNaN(v));\n            const uniques = new Set(raw);\n            if (uniques.size > maxFacetNominalValues) {\n                const numBins = Math.min(maxFacetNominalValues, 20);\n                const minVal = Math.min(...raw);\n                const maxVal = Math.max(...raw);\n                const step = (maxVal - minVal) / numBins || 1;\n                const getColBin = (v: number) => Math.min(numBins - 1, Math.floor((v - minVal) / step));\n                values = values.map((r: any) => {\n                    const v = r[colField];\n                    const bin = (v != null && typeof v === 'number' && !isNaN(v)) ? getColBin(v) : 0;\n                    return { ...r, _ecColumnBin: bin };\n                });\n                colValues = Array.from({ length: numBins }, (_, i) => String(i));\n            } else {\n                colValues = [...new Set(values.map((r: any) => String(r[colField])))];\n            }\n        } else {\n            colValues = colField ? [...new Set(values.map((r: any) => String(r[colField])))] : [];\n        }\n        if (rowField && channelSemantics.row?.type === 'quantitative') {\n            const raw = values.map((r: any) => r[rowField]).filter((v: any) => v != null && typeof v === 'number' && !isNaN(v));\n            const uniques = new Set(raw);\n            if (uniques.size > maxFacetNominalValues) {\n                const numBins = Math.min(maxFacetNominalValues, 20);\n                const minVal = Math.min(...raw);\n                const maxVal = Math.max(...raw);\n                const step = (maxVal - minVal) / numBins || 1;\n                const getRowBin = (v: number) => Math.min(numBins - 1, Math.floor((v - minVal) / step));\n                values = values.map((r: any) => {\n                    const v = r[rowField];\n                    const bin = (v != null && typeof v === 'number' && !isNaN(v)) ? getRowBin(v) : 0;\n                    return { ...r, _ecRowBin: bin };\n                });\n                rowValues = Array.from({ length: numBins }, (_, i) => String(i));\n            } else {\n                rowValues = [...new Set(values.map((r: any) => String(r[rowField])))];\n            }\n        } else {\n            rowValues = rowField ? [...new Set(values.map((r: any) => String(r[rowField])))] : [];\n        }\n\n        // ── Shared layout (facet-aware, same as VL path) ─────────────────\n        const facetLayout = computeLayout(\n            channelSemantics, declaration, values, canvasSize, effectiveOptions,\n            facetGridResult,\n        );\n        facetLayout.truncations = overflowResult.truncations;\n\n        const nRows = rowValues.length || 1;\n        const nCols = colValues.length || 1;\n\n        // ── Column wrapping ─────────────────────────────────────────────\n        // Use the facet grid decided by computeFacetGrid.\n        const maxColsPerRow = facetGridResult?.columns ?? nCols;\n\n        const panels: any[][] = [];\n        const colBinned = colField && values.length > 0 && (values[0] as any)._ecColumnBin !== undefined;\n        const rowBinned = rowField && values.length > 0 && (values[0] as any)._ecRowBin !== undefined;\n\n        for (let ri = 0; ri < nRows; ri++) {\n            const row: any[] = [];\n            for (let ci = 0; ci < nCols; ci++) {\n                const cv = colValues[ci];\n                const rv = rowValues[ri];\n                const panelData = values.filter((r: any) => {\n                    if (colField) {\n                        if (colBinned) { if ((r as any)._ecColumnBin !== ci) return false; }\n                        else if (String(r[colField]) !== cv) return false;\n                    }\n                    if (rowField) {\n                        if (rowBinned) { if ((r as any)._ecRowBin !== ri) return false; }\n                        else if (String(r[rowField]) !== rv) return false;\n                    }\n                    return true;\n                });\n\n                const panelOption: any = structuredClone(chartTemplate.template);\n                const panelCtx: InstantiateContext = {\n                    ...instantiateContext,\n                    table: panelData,\n                    layout: facetLayout,\n                    canvasSize,\n                };\n\n                // Let ecApplyLayoutToSpec compute step-based dimensions\n                // naturally (plotWidth = step × itemCount for discrete,\n                // subplotWidth for continuous).  _width/_height are NOT\n                // pre-set so the computation runs.\n                chartTemplate.instantiate(panelOption, panelCtx);\n                ecApplyLayoutToSpec(panelOption, panelCtx, []);\n                if (addTooltipsOpt) ecApplyTooltips(panelOption);\n                if (chartTemplate.postProcess) chartTemplate.postProcess(panelOption, panelCtx);\n\n                // Extract pure plot-area dimensions for facet.ts.\n                // ecApplyLayoutToSpec set: _width = plotArea + margins (with\n                // CANVAS_BUFFER).  facet.ts needs only the plot area so it\n                // can set grid.width/height exactly — not derived from\n                // panelW − margins, which would inflate when margins are\n                // scaled down for non-edge panels.\n                const g = panelOption.grid || {};\n                panelOption._plotWidth = Math.max(20,\n                    (panelOption._width || 200) - (g.left || 0) - (g.right || 0));\n                panelOption._plotHeight = Math.max(20,\n                    (panelOption._height || 150) - (g.top || 0) - (g.bottom || 0));\n\n                // Attach facet header labels for the combiner\n                if (colField) panelOption._colHeader = cv;\n                if (rowField) panelOption._rowHeader = rv;\n\n                row.push(panelOption);\n            }\n            panels.push(row);\n        }\n\n        // ── Wrap column-only facets into a proper 2D grid ────────────────\n        // The wrapping decision was already computed above (maxColsPerRow).\n        // Restructure the flat 1×N panels into displayCols×wrapRows so\n        // that ecCombineFacetPanels receives a plain grid with no\n        // wrapping logic of its own.\n        let finalPanels = panels;\n        let colHeaderPerRow = false;\n\n        if (colField && !rowField && maxColsPerRow < nCols) {\n            const displayCols = maxColsPerRow;\n            const wrapRows = Math.ceil(nCols / displayCols);\n            finalPanels = [];\n            for (let wr = 0; wr < wrapRows; wr++) {\n                const wrapRow: any[] = [];\n                for (let vc = 0; vc < displayCols; vc++) {\n                    const origCi = wr * displayCols + vc;\n                    if (origCi < nCols) {\n                        wrapRow.push(panels[0][origCi]);\n                    }\n                }\n                if (wrapRow.length > 0) finalPanels.push(wrapRow);\n            }\n            colHeaderPerRow = true;\n        }\n\n        ecOption = ecCombineFacetPanels(finalPanels, {\n            colField, rowField, colHeaderPerRow,\n        });\n    } else {\n        // ── Standard single-panel rendering ──────────────────────────────\n        ecOption = structuredClone(chartTemplate.template);\n\n        chartTemplate.instantiate(ecOption, instantiateContext);\n\n        // --- Apply layout decisions (EC-specific) ---\n\n        ecApplyLayoutToSpec(ecOption, instantiateContext, warnings);\n\n        // --- Tooltips ---\n\n        if (addTooltipsOpt) {\n            ecApplyTooltips(ecOption);\n        }\n\n        // --- ECharts-specific post-processing ---\n\n        // Template-specific post-processing (e.g. scatter symbolSize)\n        if (chartTemplate.postProcess) {\n            chartTemplate.postProcess(ecOption, instantiateContext);\n        }\n    }\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // RESULT\n    // ═══════════════════════════════════════════════════════════════════════\n\n    // Attach metadata\n    if (warnings.length > 0) {\n        ecOption._warnings = warnings;\n    }\n\n    // Store data reference (unlike VL which embeds data.values,\n    // ECharts data is embedded directly in series[].data)\n    ecOption._dataLength = values.length;\n\n    // Clean internal-only props\n    delete ecOption._legendWidth;\n\n    return ecOption;\n}\n\n// ===========================================================================\n// buildECEncodings — Translate abstract semantics → EC-resolved encodings\n// ===========================================================================\n// Analogous to VegaLite's buildVLEncodings in vegalite/assemble.ts. Output is\n// passed as context.resolvedEncodings so ecApplyLayoutToSpec and templates\n// read colorPalette, ordinalSortOrder, sizeRange, etc. from one place.\n\ninterface ECResolvedChannelEncoding {\n    field?: string;\n    type?: 'quantitative' | 'nominal' | 'ordinal' | 'temporal';\n    aggregate?: string;\n    colorPalette?: string[];\n    /** Diverging scale mid value (from Phase 0 colorScheme.domainMid). */\n    colorDomainMid?: number;\n    ordinalSortOrder?: string[];\n    /** Explicit sort order when sortBy is a JSON array of values (e.g. custom order). */\n    sortValues?: string[];\n    /** When true, discrete axis should preserve data encounter order (no alphabetical sort). */\n    preserveDataOrder?: boolean;\n    sortOrder?: 'ascending' | 'descending';\n    sortBy?: string;\n    sizeRange?: [number, number];\n    /** For radius channel: ECharts can use sqrt scale for area-proportional radius. */\n    radiusScale?: { type: 'sqrt'; zero: boolean };\n    /** When true, quantitative x axis should not \"nice\" the domain (line/area/point). */\n    scaleNice?: boolean;\n    /** High-cardinality legend: suggest smaller symbol/label (EC legend itemStyle.symbolSize, etc.). */\n    legendSymbolSize?: number;\n    legendLabelFontSize?: number;\n    groupAxis?: 'x' | 'y';\n    offsetChannel?: 'xOffset' | 'yOffset';\n}\n\nconst TABLEAU10 = [\n    '#4e79a7', '#f28e2b', '#e15759', '#76b7b2', '#59a14f',\n    '#edc948', '#b07aa1', '#ff9da7', '#9c755f', '#bab0ac',\n];\nconst TABLEAU20 = [\n    '#4e79a7', '#a0cbe8', '#f28e2b', '#ffbe7d', '#59a14f', '#8cd17d',\n    '#b6992d', '#f1ce63', '#499894', '#86bcb6', '#e15759', '#ff9d9a',\n    '#79706e', '#bab0ac', '#d37295', '#fabfd2', '#b07aa1', '#d4a6c8',\n    '#9d7660', '#cee0b4',\n];\nconst SET1 = [\n    '#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00',\n    '#ffff33', '#a65628', '#f781bf', '#999999',\n];\nconst SET2 = [\n    '#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854',\n    '#ffd92f', '#e5c494', '#b3b3b3',\n];\nconst CATEGORY10 = [\n    '#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd',\n    '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf',\n];\n\nconst SCHEME_TO_PALETTE: Record<string, string[]> = {\n    tableau10: TABLEAU10,\n    tableau20: TABLEAU20,\n    set1: SET1,\n    set2: SET2,\n    set3: SET2.concat(SET1),\n    category10: CATEGORY10,\n    category20: TABLEAU20,\n    pastel1: SET2,\n    accent: SET1,\n    paired: TABLEAU20,\n    default: DEFAULT_COLORS,\n};\n\nfunction schemeToPalette(schemeName: string): string[] {\n    const key = schemeName.toLowerCase().replace(/[- ]/g, '');\n    for (const [name, palette] of Object.entries(SCHEME_TO_PALETTE)) {\n        if (key === name.toLowerCase()) return palette;\n    }\n    return DEFAULT_COLORS;\n}\n\n/**\n * Translate Phase 0 channel semantics + declaration overrides into\n * ECharts-resolved encodings. Mirrors Vega-Lite buildVLEncodings logic\n * but outputs EC-specific fields (colorPalette, sizeRange, ordinalSortOrder,\n * etc.) for template.instantiate and ecApplyLayoutToSpec.\n */\nfunction buildECEncodings(\n    encodings: Record<string, ChartEncoding>,\n    channelSemantics: Record<string, import('../core/types').ChannelSemantics>,\n    declaration: LayoutDeclaration,\n    data: any[],\n    canvasSize: { width: number; height: number },\n    semanticTypes: Record<string, string | SemanticAnnotation>,\n    templateMarkType: string | undefined,\n    chartTemplate: ChartTemplateDef,\n): Record<string, ECResolvedChannelEncoding> {\n    const resolved: Record<string, ECResolvedChannelEncoding> = {};\n    const encodingsEntries = Object.entries(encodings);\n\n    for (const [channel, encoding] of encodingsEntries) {\n        const entry: ECResolvedChannelEncoding = {};\n        const fieldName = encoding.field;\n        const cs = channelSemantics[channel];\n\n        // --- Radius: ECharts can use sqrt scale for area-proportional radius (mirror VL) ---\n        if (channel === 'radius') {\n            entry.radiusScale = { type: 'sqrt', zero: true };\n        }\n\n        // --- Count aggregate without a field (mirror VL) ---\n        if (!fieldName && encoding.aggregate === 'count') {\n            entry.field = '_count';\n            entry.type = 'quantitative';\n        }\n\n        if (fieldName) {\n            entry.field = fieldName;\n            entry.type = (cs?.type ?? 'nominal') as ECResolvedChannelEncoding['type'];\n\n            // Explicit type override; column/row forced to nominal when not discrete (mirror VL)\n            if (encoding.type) {\n                entry.type = encoding.type as ECResolvedChannelEncoding['type'];\n            } else if (channel === 'column' || channel === 'row') {\n                if (entry.type !== 'nominal' && entry.type !== 'ordinal') {\n                    entry.type = 'nominal';\n                }\n            }\n\n            if (encoding.aggregate) {\n                if (encoding.aggregate === 'count') {\n                    entry.field = '_count';\n                    entry.type = 'quantitative';\n                } else {\n                    entry.field = `${fieldName}_${encoding.aggregate}`;\n                    entry.type = 'quantitative';\n                }\n            }\n\n            // Quantitative X axis: no \"nice\" for line/area/point (mirror VL scale.nice: false)\n            if (entry.type === 'quantitative' && channel === 'x') {\n                if (templateMarkType === 'line' || templateMarkType === 'area' ||\n                    templateMarkType === 'trail' || templateMarkType === 'point') {\n                    entry.scaleNice = false;\n                }\n            }\n\n            // High-cardinality nominal color/group: suggest smaller legend (mirror VL)\n            if (entry.type === 'nominal' && (channel === 'color' || channel === 'group')) {\n                const actualDomain = [...new Set(data.map((r: any) => r[fieldName]))];\n                if (actualDomain.length >= 16) {\n                    entry.legendSymbolSize = 12;\n                    entry.legendLabelFontSize = 8;\n                }\n            }\n        }\n\n        // --- Size channel: pixel range for ECharts symbolSize (mirror VL size scale logic) ---\n        if (channel === 'size') {\n            const EC_SIZE_MIN_PX = 10;\n            const EC_SIZE_MAX_PX = 50;\n            const plotArea = canvasSize.width * canvasSize.height;\n            const n = Math.max(data.length, 1);\n            const fairShare = plotArea / n;\n            const targetPct = 0.05;\n            const idealDiameterPx = Math.sqrt(fairShare * targetPct);\n            const isQuant = entry.type === 'quantitative' || entry.type === 'temporal';\n            const maxSize = Math.round(Math.max(EC_SIZE_MIN_PX, Math.min(EC_SIZE_MAX_PX, idealDiameterPx)));\n            const minSize = isQuant ? Math.max(EC_SIZE_MIN_PX, Math.round(maxSize / 3)) : Math.round(maxSize / 4);\n            entry.sizeRange = [Math.max(EC_SIZE_MIN_PX, minSize), Math.max(minSize, maxSize)];\n        }\n\n        // --- Sorting (mirror VL: sortBy/sortOrder + custom sortValues + auto ordinal/preserve order) ---\n        if (encoding.sortBy || encoding.sortOrder) {\n            entry.sortOrder = encoding.sortOrder as 'ascending' | 'descending';\n            entry.sortBy = encoding.sortBy;\n            if (encoding.sortBy) {\n                if (encoding.sortBy === 'x' || encoding.sortBy === 'y' || encoding.sortBy === 'color') {\n                    // Stored for templates to apply axis/series order\n                } else {\n                    try {\n                        if (fieldName) {\n                            const fieldSemType = toTypeString(semanticTypes[fieldName]);\n                            const fieldVisCat = inferVisCategory(data.map((r: any) => r[fieldName]));\n                            let sortedValues = JSON.parse(encoding.sortBy) as any[];\n                            if (fieldVisCat === 'temporal' || fieldSemType === 'Year' || fieldSemType === 'Decade') {\n                                sortedValues = sortedValues.map((v: any) => String(v));\n                            }\n                            entry.sortValues = (encoding.sortOrder === 'descending')\n                                ? [...sortedValues].reverse() : sortedValues;\n                        }\n                    } catch {\n                        // ignore invalid sortBy JSON\n                    }\n                }\n            }\n        } else {\n            const isDiscrete = entry.type === 'nominal' || entry.type === 'ordinal';\n            if (isDiscrete) {\n                if (cs?.ordinalSortOrder?.length) {\n                    entry.ordinalSortOrder = cs.ordinalSortOrder;\n                } else {\n                    entry.preserveDataOrder = true;\n                }\n            }\n        }\n\n        // --- Color / group: palette + diverging domainMid (mirror VL) ---\n        if (channel === 'color' || channel === 'group') {\n            const schemeSource = encoding.scheme && encoding.scheme !== 'default'\n                ? encoding.scheme\n                : (fieldName && cs?.colorScheme?.scheme) ? cs.colorScheme.scheme : undefined;\n            if (schemeSource) {\n                entry.colorPalette = schemeToPalette(schemeSource);\n            }\n            if (fieldName && cs?.colorScheme?.type === 'diverging' && cs.colorScheme.domainMid !== undefined) {\n                entry.colorDomainMid = cs.colorScheme.domainMid;\n            }\n        }\n\n        if (Object.keys(entry).length > 0) {\n            resolved[channel] = entry;\n        }\n    }\n\n    // --- Declaration overrides (mirror VL) ---\n    if (declaration.resolvedTypes) {\n        for (const [ch, type] of Object.entries(declaration.resolvedTypes)) {\n            if (resolved[ch]) {\n                resolved[ch].type = type as ECResolvedChannelEncoding['type'];\n            }\n        }\n    }\n\n    // --- Group → color + offset (mirror VL: ensure color exists from group; keep group for EC offset) ---\n    const groupCS = channelSemantics.group;\n    if (groupCS?.field && resolved.group) {\n        const xType = resolved.x?.type;\n        const yType = resolved.y?.type;\n        const isDiscrete = (t: string | undefined) => t === 'nominal' || t === 'ordinal';\n        const groupAxis = isDiscrete(xType) ? 'x' : isDiscrete(yType) ? 'y' : 'x';\n        const offsetChannel = groupAxis === 'x' ? 'xOffset' : 'yOffset';\n        resolved.group.groupAxis = groupAxis;\n        resolved.group.offsetChannel = offsetChannel;\n        if (!resolved.color) {\n            resolved.color = {\n                field: groupCS.field,\n                type: (groupCS.type ?? 'nominal') as ECResolvedChannelEncoding['type'],\n                colorPalette: resolved.group.colorPalette ?? (groupCS.colorScheme?.scheme ? schemeToPalette(groupCS.colorScheme.scheme) : undefined),\n                colorDomainMid: resolved.group.colorDomainMid,\n                ordinalSortOrder: resolved.group.ordinalSortOrder,\n                sortOrder: resolved.group.sortOrder,\n                sortBy: resolved.group.sortBy,\n                sortValues: resolved.group.sortValues,\n                preserveDataOrder: resolved.group.preserveDataOrder,\n                legendSymbolSize: resolved.group.legendSymbolSize,\n                legendLabelFontSize: resolved.group.legendLabelFontSize,\n            };\n        } else if (!resolved.color.colorPalette && groupCS.colorScheme?.scheme) {\n            resolved.color.colorPalette = schemeToPalette(groupCS.colorScheme.scheme);\n        }\n    }\n\n    // --- Merge template encoding defaults (mirror VL: template encoding as base) ---\n    const templateEncoding = chartTemplate.template?.encoding as Record<string, any> | undefined;\n    if (templateEncoding && typeof templateEncoding === 'object') {\n        for (const [ch, enc] of Object.entries(templateEncoding)) {\n            if (enc && typeof enc === 'object' && Object.keys(enc).length > 0 && resolved[ch]) {\n                resolved[ch] = { ...enc, ...resolved[ch] };\n            }\n        }\n    }\n\n    return resolved;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/facet.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Facet Support — Multi-grid layout for column/row channels.\n *\n * ECharts has no native faceting like VL's column/row encodings.\n * This module transforms per-panel single-grid options into one\n * combined multi-grid option:\n *\n *   - grid[]     one positioned grid per facet panel\n *   - xAxis[]    per-grid, labels only on bottom-row panels\n *   - yAxis[]    per-grid, labels only on left-column panels\n *   - series[]   assigned to grids via xAxisIndex/yAxisIndex\n *   - graphic[]  column/row facet header text labels\n *\n * Only axis-based charts (bar, scatter, line, area, etc.) are supported.\n * Pie, radar, and themeRiver charts use different positioning and cannot\n * be faceted with multi-grid.\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface FacetConfig {\n    colField?: string;\n    rowField?: string;\n    /** When true, each visual row shows its own column-header row.\n     *  Set by the assembler when column-only facets are wrapped. */\n    colHeaderPerRow?: boolean;\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Combine per-panel single-grid ECharts options into a multi-grid faceted layout.\n *\n * The assembler is responsible for wrapping column-only facets into a proper\n * 2D panels array before calling this function.  Each panel may carry\n * `_colHeader` / `_rowHeader` strings for facet header labels.\n *\n * @param panels  2D array `panels[rowIdx][colIdx]` of single-panel ECharts options.\n *                Each panel is a complete option with xAxis, yAxis, grid, series, etc.\n * @param config  Facet field names and layout hints.\n * @returns       Combined ECharts option with multi-grid layout.\n */\nexport function ecCombineFacetPanels(\n    panels: any[][],\n    config: FacetConfig,\n): any {\n    const nRows = panels.length;\n    const nCols = Math.max(1, ...panels.map(r => r.length));\n    const ref = panels[0]?.[0];\n    if (!ref) return {};\n\n    // ── Plot-area dimensions (extracted by assembler) ─────────────────────\n    const plotW = ref._plotWidth || ref._width || 200;\n    const plotH = ref._plotHeight || ref._height || 150;\n\n    // ── Simple spacing constants ─────────────────────────────────────────\n    const GAP = 6;                                        // between panels\n    const COL_HEADER_H = config.colField ? 18 : 0;       // facet column headers\n    const ROW_HEADER_W = config.rowField ? 18 : 0;       // facet row headers\n    const colHeaderPerRow = config.colHeaderPerRow ?? false;\n\n    const refX = ref.xAxis || {};\n    const refY = ref.yAxis || {};\n    const hasYTitle = !!(refY.name);\n\n    // Shared axis titles — rendered once as graphic elements\n    const sharedXTitle = refX.name || '';\n    const sharedYTitle = (config.rowField && hasYTitle) ? (refY.name || '') : '';\n    const SHARED_X_H = sharedXTitle ? 18 : 0;\n    const SHARED_Y_W = sharedYTitle ? 18 : 0;\n\n    // ── Uniform cell size ────────────────────────────────────────────────\n    // ── Facet-specific margins ─────────────────────────────────────────\n    // The assembler's refGrid margins include CANVAS_BUFFER (16px) meant\n    // for standalone charts.  In a faceted layout the grids are internal\n    // elements — no buffer needed. Use tighter margins based on content.\n    const mLeft   = hasYTitle && !sharedYTitle ? 55 : 35;  // y-axis labels (+ title if not shared)\n    const mBottom = 22;                                     // x-axis labels\n    const PAD = 4;                                          // minimal padding for inner panels\n\n    // Cell widths differ: first column includes y-axis label margin,\n    // inner columns use minimal padding.  Row heights differ: only the\n    // bottom row reserves mBottom for x-axis labels.\n    const col0W     = mLeft + plotW + PAD;\n    const colInnerW = PAD + plotW + PAD;\n    const rowInnerH = PAD + plotH + PAD;       // non-bottom rows: compact\n    const rowBottomH = PAD + plotH + mBottom;  // bottom row: x-axis labels\n\n    // ── Overall dimensions ───────────────────────────────────────────────\n    const baseLeft = SHARED_Y_W + ROW_HEADER_W;\n    const innerRowBlock = colHeaderPerRow ? COL_HEADER_H + rowInnerH : rowInnerH;\n    const bottomRowBlock = colHeaderPerRow ? COL_HEADER_H + rowBottomH : rowBottomH;\n    const totalW = baseLeft + col0W + (nCols > 1 ? (nCols - 1) * (colInnerW + GAP) : 0);\n    const totalH = (colHeaderPerRow ? 0 : COL_HEADER_H)\n        + (nRows > 1 ? (nRows - 1) * (innerRowBlock + GAP) : 0)\n        + bottomRowBlock\n        + SHARED_X_H;\n\n    // ── Combined option ──────────────────────────────────────────────────\n    const combined: any = {\n        grid: [], xAxis: [], yAxis: [], series: [],\n        _width: totalW, _height: totalH,\n    };\n    if (ref.tooltip) combined.tooltip = { ...ref.tooltip };\n    if (ref.color) combined.color = ref.color;\n\n    const fontSize = Math.max(8, Math.round(10 * Math.min(1, plotW / 200)));\n    const headerFontSize = Math.max(9, Math.round(11 * Math.min(1, plotW / 200)));\n\n    // ── Place grids & axes ───────────────────────────────────────────────\n    const gridMap: number[][] = [];\n    let gridIdx = 0;\n\n    for (let ri = 0; ri < nRows; ri++) {\n        gridMap[ri] = [];\n        for (let ci = 0; ci < nCols; ci++) {\n            const panel = panels[ri]?.[ci];\n            if (!panel) { gridMap[ri][ci] = -1; continue; }\n            gridMap[ri][ci] = gridIdx;\n\n            const isLeft = ci === 0;\n            const isBottom = ri === nRows - 1;\n\n            // Cell position — row height depends on whether it's the bottom row\n            const cx = baseLeft + (ci === 0\n                ? 0\n                : col0W + GAP + (ci - 1) * (colInnerW + GAP));\n            let cy: number;\n            if (colHeaderPerRow) {\n                const rowOff = ri * (innerRowBlock + GAP);\n                cy = rowOff + COL_HEADER_H;\n            } else {\n                const rowOff = COL_HEADER_H + ri * (innerRowBlock + GAP);\n                cy = rowOff;\n            }\n\n            // Grid — position the plot area inside the cell.\n            const pLeft = ci === 0 ? mLeft : PAD;\n            combined.grid.push({\n                left: cx + pLeft,\n                top: cy + PAD,\n                width: plotW,\n                height: plotH,\n            });\n\n            // xAxis\n            const srcX = panel.xAxis ? { ...panel.xAxis } : { type: 'category' };\n            combined.xAxis.push({\n                ...srcX,\n                gridIndex: gridIdx,\n                name: undefined, nameGap: 0,\n                axisLabel: { ...(srcX.axisLabel || {}), show: isBottom, fontSize },\n                axisTick: { ...(srcX.axisTick || {}), show: isBottom },\n                axisLine: { show: true },\n            });\n\n            // yAxis — per-panel name only when row facet is absent\n            const srcY = panel.yAxis ? { ...panel.yAxis } : { type: 'value' };\n            const showYName = isLeft && !sharedYTitle;\n            combined.yAxis.push({\n                ...srcY,\n                gridIndex: gridIdx,\n                name: showYName ? srcY.name : undefined,\n                nameGap: showYName ? (srcY.nameGap ?? 4) : 0,\n                axisLabel: { ...(srcY.axisLabel || {}), show: isLeft, fontSize },\n                axisTick: { ...(srcY.axisTick || {}), show: isLeft },\n                axisLine: { show: true },\n            });\n\n            // Series\n            if (Array.isArray(panel.series)) {\n                for (const s of panel.series) {\n                    combined.series.push({ ...s, xAxisIndex: gridIdx, yAxisIndex: gridIdx });\n                }\n            }\n            gridIdx++;\n        }\n    }\n\n    // ── Helpers: grid center from placed grids ───────────────────────────\n    const gridOf = (ri: number, ci: number) => {\n        const gi = gridMap[ri]?.[ci];\n        return gi != null && gi >= 0 ? combined.grid[gi] : null;\n    };\n    const gCX = (g: any) => g.left + g.width / 2;\n    const gCY = (g: any) => g.top + g.height / 2;\n\n    // ── Facet headers — positioned from actual grids ─────────────────────\n    const graphics: any[] = [];\n    const hStyle = { fontSize: headerFontSize, fontWeight: 'bold' as const, fill: '#555',\n                     textAlign: 'center' as const, textVerticalAlign: 'middle' as const };\n\n    // Column headers\n    if (config.colField) {\n        const hRows = colHeaderPerRow ? nRows : 1;\n        for (let ri = 0; ri < hRows; ri++) {\n            for (let ci = 0; ci < nCols; ci++) {\n                const p = panels[ri]?.[ci], g = gridOf(ri, ci);\n                if (!p?._colHeader || !g) continue;\n                graphics.push({\n                    type: 'text', left: gCX(g), top: g.top - COL_HEADER_H / 2,\n                    style: { ...hStyle, text: String(p._colHeader) },\n                });\n            }\n        }\n    }\n\n    // Row headers\n    if (config.rowField) {\n        for (let ri = 0; ri < nRows; ri++) {\n            const p = panels[ri]?.[0], g = gridOf(ri, 0);\n            if (!p?._rowHeader || !g) continue;\n            graphics.push({\n                type: 'text', left: SHARED_Y_W + ROW_HEADER_W / 2, top: gCY(g),\n                style: { ...hStyle, text: String(p._rowHeader) },\n                rotation: Math.PI / 2,\n            });\n        }\n    }\n\n    // Shared Y-axis title\n    if (sharedYTitle) {\n        const first = gridOf(0, 0), last = gridOf(nRows - 1, 0);\n        if (first && last) {\n            graphics.push({\n                type: 'text', left: SHARED_Y_W / 2, top: (gCY(first) + gCY(last)) / 2,\n                style: { text: sharedYTitle, fontSize: headerFontSize, fill: '#333',\n                         textAlign: 'center', textVerticalAlign: 'middle' },\n                rotation: Math.PI / 2,\n            });\n        }\n    }\n\n    // Shared X-axis title\n    if (sharedXTitle) {\n        graphics.push({\n            type: 'text', left: totalW / 2, top: totalH - SHARED_X_H + 4,\n            style: { text: sharedXTitle, fontSize: headerFontSize, fill: '#333', textAlign: 'center' },\n        });\n    }\n\n    if (graphics.length > 0) combined.graphic = graphics;\n    return combined;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/index.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @module agents-chart/echarts\n *\n * ECharts backend for agents-chart.\n *\n * Compiles the core semantic layer into ECharts option objects.\n * Contains EC-specific assembly, spec instantiation, and chart templates.\n *\n * Architecture contrast with Vega-Lite backend:\n *   VL: encoding-channel-based — { encoding: { x: { field, type }, y: ... } }\n *   EC: series-based           — { series: [{ type, data }], xAxis, yAxis }\n *\n * Same core pipeline (Phase 0 + Phase 1), different Phase 2 output.\n */\n\n// EC assembly function\nexport { assembleECharts } from './assemble';\n\n// EC spec instantiation (Phase 2)\nexport { ecApplyLayoutToSpec, ecApplyTooltips } from './instantiate-spec';\n\n// EC template registry\nexport {\n    ecTemplateDefs,\n    ecAllTemplateDefs,\n    ecGetTemplateDef,\n    ecGetTemplateChannels,\n} from './templates';\n\n// EC recommendation & adaptation\nexport { ecAdaptChart, ecRecommendEncodings } from './recommendation';\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/instantiate-spec.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * =============================================================================\n * PHASE 2: INSTANTIATE SPEC — ECharts backend\n * =============================================================================\n *\n * Translates semantic decisions (Phase 0) and layout dimensions (Phase 1)\n * into ECharts-specific option properties.\n *\n * Key differences from Vega-Lite instantiation:\n *   - VL uses declarative encoding width: {step: N} — EC uses explicit pixel widths\n *   - VL color schemes are strings — EC uses explicit color arrays\n *   - VL handles zero-baseline via scale.zero — EC uses axis.min / scale=true\n *   - VL temporal formatting uses timeUnit — EC uses axisLabel.formatter\n *   - VL label rotation is axis.labelAngle — EC uses axisLabel.rotate\n *\n * EC dependency: **Yes — this is where ECharts-specific syntax lives**\n * =============================================================================\n */\n\nimport type {\n    ChannelSemantics,\n    LayoutResult,\n    InstantiateContext,\n    ChartWarning,\n} from '../core/types';\nimport { computePaddedDomain } from '../core/semantic-types';\nimport { getVisCategory } from '../core/semantic-types';\nimport { toTypeString } from '../core/field-semantics';\nimport {\n    looksLikeDateString,\n    analyzeTemporalField,\n    computeDataVotes,\n    pickBestLevel,\n    levelToFormat,\n    SEMANTIC_LEVEL,\n} from '../core/resolve-semantics';\n\n/**\n * Phase 2: Apply layout and semantic decisions to the ECharts option object.\n *\n * Handles common ECharts plumbing across all templates:\n *   - Grid/canvas sizing\n *   - Axis label rotation and sizing\n *   - Overflow truncation markers\n *   - Color scheme application\n *   - Temporal format application\n */\nexport function ecApplyLayoutToSpec(\n    option: any,\n    context: InstantiateContext,\n    warnings: ChartWarning[],\n): void {\n    const { channelSemantics, layout, canvasSize } = context;\n\n    // ── Axis-less chart types (pie, radar) ────────────────────────────────\n    // These set their own _width/_height and need no grid/axis processing.\n    const hasAxes = !!(option.xAxis || option.yAxis);\n\n    // ── Zero-baseline and domain padding (value axes) ───────────────────────\n    // Unify zero-baseline and domainPadFraction for all axis-based charts\n    // (including bar); VL does this in vlApplyLayoutToSpec.\n    for (const axis of ['x', 'y'] as const) {\n        const axisObj = option[`${axis}Axis`];\n        if (!axisObj || axisObj.type !== 'value') continue;\n        const cs = channelSemantics[axis];\n        if (!cs?.zero) continue;\n        const decision = cs.zero;\n        if (axisObj.scale === undefined) {\n            axisObj.scale = !decision.zero; // false = include zero, true = data-fit\n        }\n        if (!decision.zero && decision.domainPadFraction > 0 && cs.field) {\n            const numericValues = context.table\n                .map((r: any) => r[cs.field])\n                .filter((v: any) => v != null && typeof v === 'number' && !isNaN(v));\n            const padded = computePaddedDomain(numericValues, decision.domainPadFraction);\n            if (padded) {\n                axisObj.min = padded[0];\n                axisObj.max = padded[1];\n            }\n        }\n    }\n\n    // ── Banded continuous axis domain (e.g. heatmap) ──────────────────────\n    // Half-step padding so edge cells are not clipped.\n    // Only apply to value axes — category/time axes (e.g. bar with temporal\n    // categories) should not receive numeric min/max, otherwise ECharts will\n    // window the category index range and hide all bars.\n    for (const axis of ['x', 'y'] as const) {\n        const bandedCount = axis === 'x' ? layout.xContinuousAsDiscrete : layout.yContinuousAsDiscrete;\n        if (bandedCount <= 1) continue;\n        const axisObj = option[`${axis}Axis`];\n        if (!axisObj || axisObj.type !== 'value' || axisObj.min != null) continue;\n        const cs = channelSemantics[axis];\n        if (!cs?.field || (cs.type !== 'quantitative' && cs.type !== 'temporal')) continue;\n        const isTemporal = cs.type === 'temporal';\n        const numericVals = context.table\n            .map((r: any) => {\n                const raw = r[cs.field];\n                if (raw == null) return NaN;\n                return isTemporal ? +new Date(raw) : +raw;\n            })\n            .filter((v: number) => !isNaN(v));\n        if (numericVals.length <= 1) continue;\n        const minVal = Math.min(...numericVals);\n        const maxVal = Math.max(...numericVals);\n        const dataRange = maxVal - minVal;\n        if (dataRange === 0) continue;\n        const pad = dataRange / (bandedCount - 1) / 2;\n        axisObj.min = minVal - pad;\n        axisObj.max = maxVal + pad;\n    }\n\n    // ── Axis title positioning ───────────────────────────────────────────\n    // Ensure axis names are centered (VL default), not at the endpoint.\n    if (option.xAxis) {\n        if (option.xAxis.name) {\n            option.xAxis.nameLocation = option.xAxis.nameLocation || 'middle';\n            option.xAxis.nameGap = option.xAxis.nameGap || 25;\n            option.xAxis.nameTextStyle = { fontSize: 12, ...(option.xAxis.nameTextStyle || {}) };\n        }\n    }\n    if (option.yAxis) {\n        if (option.yAxis.name) {\n            option.yAxis.nameLocation = option.yAxis.nameLocation || 'middle';\n            option.yAxis.nameGap = option.yAxis.nameGap || 45;\n            option.yAxis.nameTextStyle = { fontSize: 12, ...(option.yAxis.nameTextStyle || {}) };\n        }\n    }\n\n    // ── singleAxis title styling (themeRiver / streamgraph) ──────────────\n    if (option.singleAxis) {\n        if (option.singleAxis.name) {\n            option.singleAxis.nameLocation = option.singleAxis.nameLocation || 'middle';\n            option.singleAxis.nameGap = option.singleAxis.nameGap || 25;\n            option.singleAxis.nameTextStyle = { fontSize: 12, ...(option.singleAxis.nameTextStyle || {}) };\n        }\n        if (!option.singleAxis.axisLabel) option.singleAxis.axisLabel = {};\n        option.singleAxis.axisLabel.fontSize = option.singleAxis.axisLabel.fontSize || 11;\n    }\n\n    // ── Legend positioning ────────────────────────────────────────────────\n    const hasLegend = !!option.legend;\n    const hasVisualMap = !!option.visualMap;\n    // Dual legend: when both a categorical legend and a visualMap (continuous\n    // size/color legend) coexist, move the categorical legend to the bottom\n    // to avoid crowding the right side of the chart.\n    const isDualLegend = hasLegend && hasVisualMap;\n    if (hasLegend) {\n        // If the template already fully positioned the legend (e.g. pie),\n        // skip repositioning — detect by checking if orient was already set.\n        const alreadyPositioned = option.legend.orient && (option.legend.right !== undefined || option.legend.left !== undefined);\n        const legendTitle = option._legendTitle as string | undefined;\n        if (legendTitle != null) delete option._legendTitle;\n        if (!alreadyPositioned) {\n            const rawLegendData = option.legend.data || [];\n            const legendLabels: string[] = rawLegendData.map((d: any) => typeof d === 'string' ? d : (d?.name ?? ''));\n\n            if (isDualLegend) {\n                const highCardinality = legendLabels.length >= 16;\n                option._legendWidth = 0; // no right-side space needed for the legend\n                option.legend = {\n                    ...option.legend,\n                    bottom: 0,\n                    left: 'center',\n                    orient: 'horizontal',\n                    textStyle: {\n                        fontSize: highCardinality ? 8 : 11,\n                        ...(option.legend.textStyle || {}),\n                    },\n                    ...(legendLabels.length > 10 ? { type: 'scroll' } : {}),\n                    ...(highCardinality ? { itemWidth: 12, itemHeight: 12 } : {}),\n                };\n                if (legendTitle != null) {\n                    const titleGraphic = {\n                        type: 'text' as const,\n                        bottom: 22,\n                        left: 'center',\n                        z: 100,\n                        style: {\n                            text: legendTitle,\n                            fontSize: 11,\n                            fontWeight: 'bold',\n                            fill: '#333',\n                            textAlign: 'center',\n                        },\n                    };\n                    const existing = option.graphic;\n                    option.graphic = Array.isArray(existing) ? [...existing, titleGraphic] : (existing ? [existing, titleGraphic] : [titleGraphic]);\n                }\n            } else {\n                // Single legend: use left positioning so title and legend circles share the same left edge\n                const maxLabelLen = Math.max(...legendLabels.map((l: string) => l.length), 3);\n                const highCardinality = legendLabels.length >= 16;\n                const legendSymbolWidth = highCardinality ? 12 : 14;\n                const legendItemGap = 5;\n                const estimatedTextWidth = Math.min(120, maxLabelLen * 7 + 30);\n                option._legendWidth = legendSymbolWidth + legendItemGap + estimatedTextWidth;\n                const LEGEND_GAP = 12;\n                const CANVAS_BUFFER = 16;\n                const rightMarginPx = option._legendWidth + LEGEND_GAP + CANVAS_BUFFER;\n                const hasYTitle = !!option.yAxis?.name;\n                const gridLeft = (hasYTitle ? 70 : 50) + CANVAS_BUFFER;\n                // Use same effective width as later (plotWidth + grid.left + grid.right) so legend aligns with grid\n                const plotW = layout?.subplotWidth ?? canvasSize?.width ?? 400;\n                const effectiveChartWidth = plotW + gridLeft + rightMarginPx;\n                const legendLeftPx = Math.max(0, effectiveChartWidth - rightMarginPx);\n                option.legend = {\n                    ...option.legend,\n                    top: legendTitle != null ? 20 : 0,\n                    left: legendLeftPx,\n                    orient: option.legend.orient || 'vertical',\n                    align: 'left', // icon on left, text on right\n                    textStyle: {\n                        fontSize: highCardinality ? 8 : 11,\n                        ...(option.legend.textStyle || {}),\n                    },\n                    ...(legendLabels.length > 10 ? { type: 'scroll' } : {}),\n                    ...(highCardinality ? { itemWidth: 12, itemHeight: 12 } : {}),\n                };\n                if (legendTitle != null) {\n                    const titleGraphic = {\n                        type: 'text' as const,\n                        left: legendLeftPx,\n                        top: 4,\n                        z: 100,\n                        style: {\n                            text: legendTitle,\n                            fontSize: 11,\n                            fontWeight: 'bold',\n                            fill: '#333',\n                            textAlign: 'left',\n                        },\n                    };\n                    const existing = option.graphic;\n                    option.graphic = Array.isArray(existing) ? [...existing, titleGraphic] : (existing ? [existing, titleGraphic] : [titleGraphic]);\n                }\n            }\n        } else {\n            // Already positioned — estimate width for grid margin\n            const rawData = option.legend.data || [];\n            const legendLabels = rawData.map((d: any) => typeof d === 'string' ? d : (d?.name ?? ''));\n            const maxLabelLen = Math.max(...legendLabels.map((l: string) => l.length), 3);\n            option._legendWidth = Math.min(150, maxLabelLen * 7 + 30);\n        }\n    }\n\n    // ── Grid sizing ──────────────────────────────────────────────────────\n    // ECharts uses an explicit grid with left/right/top/bottom margins.\n    // Unlike VL where width/height set the *plot area* and the SVG wraps\n    // around it, ECharts' width/height set the *total canvas* and the grid\n    // sits inside.  We define explicit grid margins and inflate the canvas\n    // so that the inner plot area matches the intended subplot dimensions.\n    //\n    // Skip grid processing for axis-less charts (pie, radar) which handle\n    // their own sizing in their template instantiate() methods.\n    const hasXTitle = !!option.xAxis?.name;\n    const hasYTitle = !!option.yAxis?.name;\n    // ECharts init() creates an internal div with overflow:hidden at the\n    // exact _width × _height pixel dimensions.  Adding a small buffer to\n    // each grid margin keeps the plot area unchanged but gives breathing\n    // room for axis labels / legends / ticks that extend to the canvas edge.\n    const CANVAS_BUFFER = 16;\n    const LEGEND_GAP = 12; // gap between plot and legend/visualMap so they don't overlap\n    const VISUALMAP_GAP = 18; // extra gap between plot and visualMap bar when only visualMap (no legend)\n    const VISUALMAP_RIGHT_OFFSET = 10; // must match scatter (and other templates) visualMap right position\n    const legendWidth = (hasLegend ? (option._legendWidth || 120) : 20);\n    const visualMapWidth = (option._visualMapWidth as number) || 0;\n    if (visualMapWidth) delete option._visualMapWidth;\n    // When dual legend (segment at bottom + size/color bar on right), reserve right space so plot does not overlap visualMap\n    const rightMargin =\n        isDualLegend\n            ? (hasVisualMap ? VISUALMAP_RIGHT_OFFSET + visualMapWidth + VISUALMAP_GAP : 10)\n            : (hasLegend ? legendWidth : (hasVisualMap ? visualMapWidth + VISUALMAP_GAP : 10)) + LEGEND_GAP;\n    const bottomLegendExtra = isDualLegend ? 30 : 0;\n    const gridMargin = {\n        left: (hasYTitle ? 70 : 50) + CANVAS_BUFFER,\n        right: rightMargin + CANVAS_BUFFER,\n        top: 20 + CANVAS_BUFFER,\n        bottom: (hasXTitle ? 45 : 30) + CANVAS_BUFFER + bottomLegendExtra,\n    };\n    if (hasAxes) {\n        if (!option.grid) option.grid = {};\n        option.grid.left = gridMargin.left;\n        option.grid.right = gridMargin.right;\n        option.grid.top = gridMargin.top;\n        option.grid.bottom = gridMargin.bottom;\n    }\n\n    // ── Canvas dimensions ────────────────────────────────────────────────\n    // For axis-less charts (pie, radar), _width/_height are set by the\n    // template itself.  Only compute for axis-based charts.\n    if ((hasAxes || option.singleAxis) && !option._width) {\n        // For discrete axes, VL uses width:{step:N} which auto-sizes the plot.\n        // ECharts has no such feature — we derive the plot size from layout.\n        //\n        // For non-grouped discrete axes: plotWidth = xStep × categoryCount\n        // For grouped discrete axes (stepUnit='group'): the step already\n        //   accounts for multiple bars per category, but xNominalCount includes\n        //   the group multiplier.  Use subplotWidth which is already correct.\n        // For continuous axes: use subplotWidth directly.\n        const xIsDiscrete = layout.xNominalCount > 0 || layout.xContinuousAsDiscrete > 0;\n        const yIsDiscrete = layout.yNominalCount > 0 || layout.yContinuousAsDiscrete > 0;\n\n        let plotWidth: number;\n        let plotHeight: number;\n\n        if (xIsDiscrete && layout.xStepUnit !== 'group') {\n            const xItemCount = layout.xNominalCount || layout.xContinuousAsDiscrete || 0;\n            plotWidth = xItemCount > 0 ? layout.xStep * xItemCount : (layout.subplotWidth || canvasSize.width);\n        } else {\n            // Continuous axis or group-stepped axis — subplotWidth is already correct\n            plotWidth = layout.subplotWidth || canvasSize.width;\n        }\n\n        if (yIsDiscrete && layout.yStepUnit !== 'group') {\n            const yItemCount = layout.yNominalCount || layout.yContinuousAsDiscrete || 0;\n            plotHeight = yItemCount > 0 ? layout.yStep * yItemCount : (layout.subplotHeight || canvasSize.height);\n        } else {\n            plotHeight = layout.subplotHeight || canvasSize.height;\n        }\n\n        option._width = plotWidth + gridMargin.left + gridMargin.right;\n        option._height = plotHeight + gridMargin.top + gridMargin.bottom;\n    }\n\n    // ── Bar sizing ───────────────────────────────────────────────────────\n    // ECharts needs barCategoryGap / barWidth to match the step layout.\n    // VL pads *inside* the step (bandwidth = step × (1 − paddingInner)),\n    // while ECharts uses barCategoryGap as a percentage of the category\n    // slot.  For single/stacked bars we use barCategoryGap only —\n    // letting ECharts auto-size bars proportionally to the grid width.\n    // For grouped bars we need explicit barWidth per series.\n    if (option.series && Array.isArray(option.series)) {\n        const barSeries = option.series.filter((s: any) => s.type === 'bar');\n        if (barSeries.length > 0) {\n            const catAxis = option.xAxis?.type === 'category' ? 'x' : 'y';\n            const step = catAxis === 'x' ? layout.xStep : layout.yStep;\n            const stepUnit = catAxis === 'x' ? layout.xStepUnit : layout.yStepUnit;\n            const isStacked = barSeries.some((s: any) => s.stack != null);\n\n            if (step > 0) {\n                const bandPadding = layout.stepPadding;\n                const catGapPct = `${Math.round(bandPadding * 100)}%`;\n\n                if (!isStacked && (stepUnit === 'group' || barSeries.length > 1)) {\n                    // Grouped: each bar gets an equal share of the usable band\n                    const usableStep = step * (1 - bandPadding);\n                    const barW = Math.max(1, Math.floor(usableStep / barSeries.length));\n                    for (const s of barSeries) {\n                        s.barWidth = barW;\n                        s.barGap = '0%';\n                    }\n                    barSeries[0].barCategoryGap = catGapPct;\n                } else {\n                    // Single series or stacked: let ECharts auto-size bars.\n                    // barCategoryGap controls the fraction of each slot\n                    // reserved for inter-category gap.\n                    for (const s of barSeries) {\n                        s.barCategoryGap = catGapPct;\n                    }\n                }\n            }\n        }\n    }\n\n    // ── X-axis label sizing ──────────────────────────────────────────────\n    if (option.xAxis && layout.xLabel) {\n        if (!option.xAxis.axisLabel) option.xAxis.axisLabel = {};\n\n        // ECharts uses degrees (positive = counter-clockwise). Don't override category axis rotate (template set it for scatter).\n        if (layout.xLabel.labelAngle && layout.xLabel.labelAngle !== 0 && option.xAxis.type !== 'category') {\n            option.xAxis.axisLabel.rotate = -layout.xLabel.labelAngle;  // VL convention → EC convention\n        }\n\n        if (layout.xLabel.fontSize) {\n            option.xAxis.axisLabel.fontSize = layout.xLabel.fontSize;\n        }\n\n        if (layout.xLabel.labelLimit && layout.xLabel.labelLimit < 100) {\n            const maxLen = layout.xLabel.labelLimit;\n            option.xAxis.axisLabel.formatter = (value: string) => {\n                if (typeof value === 'string' && value.length > maxLen) {\n                    return value.substring(0, maxLen) + '…';\n                }\n                return value;\n            };\n        }\n    }\n\n    // ── Y-axis label sizing ──────────────────────────────────────────────\n    if (option.yAxis && layout.yLabel) {\n        if (!option.yAxis.axisLabel) option.yAxis.axisLabel = {};\n\n        // Don't override category axis rotate — scatter keeps y labels horizontal (0) to avoid overlap.\n        if (layout.yLabel.labelAngle && layout.yLabel.labelAngle !== 0 && option.yAxis.type !== 'category') {\n            option.yAxis.axisLabel.rotate = -layout.yLabel.labelAngle;\n        }\n        if (layout.yLabel.fontSize) {\n            option.yAxis.axisLabel.fontSize = layout.yLabel.fontSize;\n        }\n    }\n\n    // ── Ordinal temporal: category axes with date-like labels ──────────────\n    // VL applyOrdinalTemporalFormat: format nominal/ordinal axis as dates when data looks like dates.\n    for (const axis of ['x', 'y'] as const) {\n        const axisObj = option[`${axis}Axis`];\n        if (!axisObj || axisObj.type !== 'category') continue;\n        const cs = channelSemantics[axis];\n        if (!cs?.field || (cs.type !== 'nominal' && cs.type !== 'ordinal')) continue;\n        const semanticType = toTypeString(context.semanticTypes[cs.field]);\n        if (getVisCategory(semanticType) !== 'temporal') continue;\n        const fieldVals = context.table.map((r: any) => r[cs.field]).filter((v: any) => v != null);\n        const datelikeCnt = fieldVals.filter((v: any) =>\n            typeof v !== 'string' || looksLikeDateString(String(v))\n        ).length;\n        if (datelikeCnt < fieldVals.length * 0.5) continue;\n        const analysis = analyzeTemporalField(fieldVals);\n        if (!analysis) continue;\n        const votes = computeDataVotes(analysis.same);\n        const semLevel = SEMANTIC_LEVEL[semanticType];\n        if (semLevel !== undefined) votes[semLevel] += 3;\n        const { level, score } = pickBestLevel(votes);\n        if (score < 5) continue;\n        const fmt = levelToFormat(level, analysis);\n        if (!fmt) continue;\n        if (!axisObj.axisLabel) axisObj.axisLabel = {};\n        const existingFormatter = axisObj.axisLabel.formatter;\n        axisObj.axisLabel.formatter = (value: string) => {\n            const formatted = formatCategoryTemporal(value, fmt);\n            return typeof existingFormatter === 'function' ? existingFormatter(formatted) : formatted;\n        };\n    }\n\n    // ── Temporal format (time / value axes) ──────────────────────────────\n    for (const axis of ['x', 'y'] as const) {\n        const cs = channelSemantics[axis];\n        if (cs?.temporalFormat && option[`${axis}Axis`]) {\n            const axisObj = option[`${axis}Axis`];\n            if (axisObj.type === 'time') {\n                if (!axisObj.axisLabel) axisObj.axisLabel = {};\n                axisObj.axisLabel.formatter = convertTemporalFormat(cs.temporalFormat);\n            }\n            if (axisObj.type === 'value' && cs.type === 'temporal') {\n                if (!axisObj.axisLabel) axisObj.axisLabel = {};\n                const fmt = cs.temporalFormat;\n                axisObj.axisLabel.formatter = (val: number) => formatTimestamp(val, fmt);\n            }\n        }\n    }\n\n    // ── Color scheme ─────────────────────────────────────────────────────\n    // Use palette from buildECEncodings when present (VL scheme → EC hex array).\n    const colorPalette = context.resolvedEncodings?.color?.colorPalette\n        ?? context.resolvedEncodings?.group?.colorPalette;\n    if (colorPalette?.length) {\n        option.color = [...colorPalette];\n    }\n\n    // ── Overflow truncation markers ──────────────────────────────────────\n    if (layout.truncations && layout.truncations.length > 0) {\n        const axisPlaceholders: Record<string, Set<string>> = { xAxis: new Set(), yAxis: new Set() };\n        for (const trunc of layout.truncations) {\n            warnings.push({\n                severity: 'warning',\n                code: 'overflow',\n                message: trunc.message,\n                channel: trunc.channel,\n                field: trunc.field,\n            });\n            const axisKey = trunc.channel === 'x' ? 'xAxis' : 'yAxis';\n            if (trunc.channel === 'x' || trunc.channel === 'y') {\n                axisPlaceholders[axisKey].add(trunc.placeholder);\n                if (option[axisKey]?.data && Array.isArray(option[axisKey].data)) {\n                    option[axisKey].data.push(trunc.placeholder);\n                }\n            }\n        }\n        // Grey styling for placeholder labels (VL labelColor equivalent)\n        for (const axisKey of ['xAxis', 'yAxis'] as const) {\n            const placeholders = axisPlaceholders[axisKey];\n            if (placeholders.size === 0 || !option[axisKey]) continue;\n            if (!option[axisKey].axisLabel) option[axisKey].axisLabel = {};\n            const existingColor = option[axisKey].axisLabel.color;\n            option[axisKey].axisLabel.color = (params: string) =>\n                placeholders.has(params) ? '#999999' : (typeof existingColor === 'function' ? existingColor(params) : (existingColor ?? '#000'));\n        }\n    }\n}\n\n/**\n * Convert a d3-style temporal format string to an ECharts template string.\n * Only suitable for ECharts 'time' type axes which support {yyyy}, {MM}, etc.\n *\n * d3: %Y → 2024, %b → Jan, %d → 01, %H → 14, %M → 30\n * EC uses {yyyy}, {MM}, {dd}, {HH}, {mm} in templates\n */\nfunction convertTemporalFormat(d3Format: string): string {\n    return d3Format\n        .replace(/%Y/g, '{yyyy}')\n        .replace(/%y/g, '{yy}')\n        .replace(/%b/g, '{MMM}')\n        .replace(/%B/g, '{MMMM}')\n        .replace(/%m/g, '{MM}')\n        .replace(/%d/g, '{dd}')\n        .replace(/%H/g, '{HH}')\n        .replace(/%M/g, '{mm}')\n        .replace(/%S/g, '{ss}');\n}\n\nconst MONTH_ABBR = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst MONTH_FULL = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n\n/**\n * Format a category-axis label as date when it parses as valid date.\n * Used for ordinal temporal (nominal/ordinal channel with date-like strings).\n */\nfunction formatCategoryTemporal(value: string, d3Format: string): string {\n    const d = new Date(value);\n    if (isNaN(d.getTime())) return value;\n    return formatTimestamp(d.getTime(), d3Format);\n}\n\n/**\n * Format a numeric timestamp using a d3-style format string.\n * Used for 'value' axes that hold temporal data (timestamps).\n * Exported for scatter (temporal color visualMap labels).\n */\nexport function formatTimestamp(val: number, d3Format: string): string {\n    const d = new Date(val);\n    const pad = (n: number) => n < 10 ? '0' + n : String(n);\n    return d3Format\n        .replace(/%Y/g, String(d.getFullYear()))\n        .replace(/%y/g, String(d.getFullYear()).slice(-2))\n        .replace(/%B/g, MONTH_FULL[d.getMonth()])\n        .replace(/%b/g, MONTH_ABBR[d.getMonth()])\n        .replace(/%m/g, pad(d.getMonth() + 1))\n        .replace(/%d/g, pad(d.getDate()))\n        .replace(/%H/g, pad(d.getHours()))\n        .replace(/%M/g, pad(d.getMinutes()))\n        .replace(/%S/g, pad(d.getSeconds()));\n}\n\nfunction fmtNumForTooltip(v: unknown): string {\n    if (v == null) return '';\n    const n = Number(v);\n    return isNaN(n) ? String(v) : (Number.isInteger(n) ? String(n) : n.toFixed(1));\n}\n\n/**\n * Build a single encoding-style tooltip formatter from _encodingTooltip.\n * Supports item trigger (parts from data/series) and axis trigger (category + series values).\n */\nfunction buildEncodingTooltipFormatter(option: any): ((params: any) => string) | null {\n    const enc = option._encodingTooltip as any;\n    if (!enc) return null;\n\n    if (enc.trigger === 'axis' && enc.categoryLabel != null) {\n        const categoryLabel = enc.categoryLabel;\n        const valueLabel = enc.valueLabel ?? 'Value';\n        return (params: any) => {\n            const list = Array.isArray(params) ? params : [params];\n            if (list.length === 0) return '';\n            const p = list[0];\n            const cat = p.axisValue ?? p.name ?? '';\n            const parts = [`${categoryLabel}: ${cat}`];\n            for (const item of list) {\n                const name = item.seriesName ?? valueLabel;\n                const val = item.value != null ? item.value : (Array.isArray(item.data) ? item.data[item.dataIndex] : item.data);\n                parts.push(`${name}: ${fmtNumForTooltip(val)}`);\n            }\n            return parts.join('<br/>');\n        };\n    }\n\n    const parts = enc.parts as Array<{ from: string; index?: number; label: string; format?: string; temporalFormat?: string; categoryNames?: string[] }>;\n    if (!parts || !Array.isArray(parts) || parts.length === 0) return null;\n\n    return (params: any) => {\n        if (params == null) return '';\n        const d = Array.isArray(params.data) ? params.data : (params.data != null ? [params.data] : []);\n        const out: string[] = [];\n        for (const p of parts) {\n            let val: unknown;\n            if (p.from === 'series') {\n                val = params.seriesName ?? params.name;\n            } else if (p.from === 'name') {\n                val = params.name;\n            } else if (p.from === 'value') {\n                val = params.value;\n            } else {\n                const idx = p.index ?? 0;\n                val = d[idx];\n                if (val != null && typeof val === 'object' && 'value' in val) val = (val as any).value;\n            }\n            if (val == null && p.from !== 'series' && p.from !== 'name') continue;\n            let str: string;\n            if (p.format === 'temporal') {\n                str = formatTimestamp(Number(val), p.temporalFormat ?? '%b %d, %Y');\n            } else if (p.format === 'category' && p.categoryNames) {\n                const i = Number(val);\n                str = Number.isInteger(i) && p.categoryNames[i] != null ? p.categoryNames[i] : String(val ?? '');\n            } else if (p.format === 'number' || (p.from === 'data' && p.format !== 'category')) {\n                str = fmtNumForTooltip(val);\n            } else {\n                str = String(val ?? '');\n            }\n            out.push(`${p.label}: ${str}`);\n        }\n        return out.join('<br/>');\n    };\n}\n\n/**\n * Apply tooltips to an ECharts option.\n * ECharts tooltip is typically configured at the top level.\n * When option._encodingTooltip is set, a Vega-Lite–style formatter (label: value per encoding) is applied.\n */\nexport function ecApplyTooltips(option: any): void {\n    if (!option.tooltip) {\n        option.tooltip = {};\n    }\n\n    const encodingFormatter = buildEncodingTooltipFormatter(option);\n    if (encodingFormatter) {\n        delete option._encodingTooltip;\n        option.tooltip.formatter = encodingFormatter;\n    }\n\n    // Ensure trigger is set\n    if (!option.tooltip.trigger) {\n        const hasScatter = option.series?.some((s: any) => s.type === 'scatter');\n        const hasPie = option.series?.some((s: any) => s.type === 'pie');\n        const hasRadar = option.series?.some((s: any) => s.type === 'radar');\n        const hasCandlestick = option.series?.some((s: any) => s.type === 'candlestick');\n        const hasThemeRiver = option.series?.some((s: any) => s.type === 'themeRiver');\n        option.tooltip.trigger = (hasScatter || hasPie || hasRadar || hasThemeRiver)\n            ? 'item'\n            : 'axis';\n        // Candlestick charts benefit from crosshair pointer\n        if (hasCandlestick && !option.tooltip.axisPointer) {\n            option.tooltip.axisPointer = { type: 'cross' };\n        }\n\n        // ThemeRiver default tooltip shows raw template tokens — provide a\n        // custom formatter.  ThemeRiver params: { data: [date, value, name], color }\n        if (hasThemeRiver && !option.tooltip.formatter) {\n            option.tooltip.formatter = (params: any) => {\n                if (!params || !params.data) return '';\n                const [date, value, name] = params.data;\n                const color = params.color || '#333';\n                const dateStr = date instanceof Date ? date.toLocaleDateString() : String(date);\n                return `<span style=\"display:inline-block;width:10px;height:10px;border-radius:50%;background:${color};margin-right:6px;\"></span>`\n                    + `<b>${name}</b><br/>${dateStr}: ${value}`;\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/recommendation.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts recommendation & adaptation wrappers.\n *\n * Extends core/recommendation.ts with ECharts-only chart types\n * (Gauge, Funnel, Treemap, Sunburst, Sankey).\n */\n\nimport {\n    adaptChannels,\n    recommendChannels,\n    getRecommendation,\n    type InternalTableView,\n    type RecommendFn,\n    pickQuantitative,\n    pickDiscrete,\n    pickLowCardDiscrete,\n} from '../core/recommendation';\nimport { ecGetTemplateChannels } from './templates';\n\n// ── EC-extended recommendation ──────────────────────────────────────────\n\nfunction ecGetRecommendation(chartType: string, tv: InternalTableView): Record<string, string> {\n    const used = new Set<string>();\n    const rec: Record<string, string> = {};\n    const assign = (channel: string, fieldName: string | undefined) => {\n        if (fieldName) rec[channel] = fieldName;\n    };\n\n    switch (chartType) {\n        case 'Gauge Chart': {\n            const valueField = pickQuantitative(tv, used);\n            if (!valueField) return {};\n            assign('value', valueField);\n            assign('color', pickLowCardDiscrete(tv, used, 10));\n            return rec;\n        }\n\n        case 'Funnel Chart': {\n            const valueField = pickQuantitative(tv, used);\n            const colorField = pickLowCardDiscrete(tv, used, 15);\n            if (!valueField || !colorField) return {};\n            assign('value', valueField);\n            assign('color', colorField);\n            return rec;\n        }\n\n        case 'Treemap':\n        case 'Sunburst Chart': {\n            const sizeField = pickQuantitative(tv, used);\n            const colorField = pickLowCardDiscrete(tv, used, 20);\n            if (!sizeField || !colorField) return {};\n            assign('size', sizeField);\n            assign('color', colorField);\n            return rec;\n        }\n\n        case 'Sankey Diagram': {\n            const sourceField = pickDiscrete(tv, used);\n            const targetField = pickDiscrete(tv, used);\n            const valueField = pickQuantitative(tv, used);\n            if (!sourceField || !targetField || !valueField) return {};\n            assign('source', sourceField);\n            assign('target', targetField);\n            assign('value', valueField);\n            return rec;\n        }\n\n        default:\n            return getRecommendation(chartType, tv);\n    }\n}\n\n// ── Public API ──────────────────────────────────────────────────────────\n\nexport function ecAdaptChart(\n    sourceType: string,\n    targetType: string,\n    encodings: Record<string, string>,\n    data?: any[],\n    semanticTypes?: Record<string, string>,\n): Record<string, string> {\n    const targetChannels = ecGetTemplateChannels(targetType);\n    return adaptChannels(sourceType, targetType, targetChannels, encodings, data, semanticTypes, ecGetRecommendation);\n}\n\nexport function ecRecommendEncodings(\n    chartType: string,\n    data: any[],\n    semanticTypes: Record<string, string>,\n): Record<string, string> {\n    const rec = recommendChannels(chartType, data, semanticTypes, ecGetRecommendation);\n    const validChannels = ecGetTemplateChannels(chartType);\n    const result: Record<string, string> = {};\n    for (const [ch, field] of Object.entries(rec)) {\n        if (validChannels.includes(ch)) result[ch] = field;\n    }\n    return result;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/area.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Area Chart template (single + multi-series, stacked / layered).\n *\n * Contrast with VL:\n *   VL: mark = \"area\" with encoding; stacking via y.stack property\n *   EC: line series with areaStyle; stacking via series[].stack property\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, groupBy, DEFAULT_COLORS, getCategoryOrder } from './utils';\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\nexport const ecAreaChartDef: ChartTemplateDef = {\n    chart: 'Area Chart',\n    template: { mark: 'area', encoding: {} },\n    channels: ['x', 'y', 'color', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'area',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xCS = channelSemantics.x;\n        const yCS = channelSemantics.y;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xCS?.field || !yCS?.field) return;\n        const xField = xCS.field;\n        const yField = yCS.field;\n\n        const xIsDiscrete = isDiscrete(xCS.type);\n        const xIsTemporal = xCS.type === 'temporal';\n        const categories = xIsDiscrete\n            ? extractCategories(table, xField, getCategoryOrder(ctx, 'x'))\n            : undefined;\n\n        const option: any = {\n            tooltip: { trigger: 'axis' },\n            xAxis: {\n                type: xIsDiscrete ? 'category' : xIsTemporal ? 'time' : 'value',\n                name: xField,\n                nameLocation: 'middle',\n                nameGap: 30,\n                boundaryGap: xIsDiscrete,\n                ...(categories ? { data: categories } : {}),\n            },\n            yAxis: {\n                type: 'value',\n                name: yField,\n                nameLocation: 'middle',\n                nameGap: 40,\n            },\n            series: [],\n        };\n        option._encodingTooltip = { trigger: 'axis', categoryLabel: xField, valueLabel: yField };\n\n        // ECharts: scale=true means \"data-fit\", scale=false means \"include zero\"\n        if (channelSemantics.y?.zero) {\n            option.yAxis.scale = !channelSemantics.y.zero.zero;\n        }\n\n        // Stack / layer mode\n        const stackMode = chartProperties?.stackMode;\n        const stackGroup = stackMode === 'layered' ? undefined : 'total';\n\n        // Opacity\n        const opacity = chartProperties?.opacity ?? 0.7;\n\n        // Interpolation / smooth\n        const interpolate = chartProperties?.interpolate;\n        const smooth = interpolate === 'monotone' || interpolate === 'basis' ||\n                        interpolate === 'cardinal' || interpolate === 'catmull-rom';\n        const step = interpolate === 'step' ? 'middle'\n                   : interpolate === 'step-before' ? 'start'\n                   : interpolate === 'step-after' ? 'end'\n                   : undefined;\n\n        if (colorField) {\n            const groups = groupBy(table, colorField);\n            option.legend = { data: [...groups.keys()] };\n\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const seriesData = xIsDiscrete\n                    ? buildCategoryAlignedData(rows, xField, yField, categories!)\n                    : rows.map(r => [r[xField], r[yField]]);\n\n                const series: any = {\n                    name,\n                    type: 'line',\n                    data: seriesData,\n                    areaStyle: { opacity },\n                    itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length] },\n                };\n                if (stackGroup) series.stack = stackGroup;\n                if (smooth) series.smooth = true;\n                if (step) series.step = step;\n\n                option.series.push(series);\n                colorIdx++;\n            }\n        } else {\n            const seriesData = xIsDiscrete\n                ? categories!.map(cat => {\n                    const row = table.find(r => String(r[xField]) === cat);\n                    return row ? row[yField] : null;\n                })\n                : table.map(r => [r[xField], r[yField]]);\n\n            const series: any = {\n                type: 'line',\n                data: seriesData,\n                areaStyle: { opacity },\n            };\n            if (smooth) series.smooth = true;\n            if (step) series.step = step;\n            option.series.push(series);\n        }\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'interpolate', label: 'Curve', type: 'discrete', options: [\n                { value: undefined, label: 'Default (linear)' },\n                { value: 'linear', label: 'Linear' },\n                { value: 'monotone', label: 'Monotone (smooth)' },\n                { value: 'step', label: 'Step' },\n                { value: 'step-before', label: 'Step Before' },\n                { value: 'step-after', label: 'Step After' },\n            ],\n        } as ChartPropertyDef,\n        { key: 'opacity', label: 'Opacity', type: 'continuous', min: 0.1, max: 1, step: 0.05, defaultValue: 0.7 } as ChartPropertyDef,\n        {\n            key: 'stackMode', label: 'Stack', type: 'discrete', options: [\n                { value: undefined, label: 'Stacked (default)' },\n                { value: 'normalize', label: 'Normalize (100%)' },\n                { value: 'center', label: 'Center' },\n                { value: 'layered', label: 'Layered (overlap)' },\n            ],\n        } as ChartPropertyDef,\n    ],\n};\n\n/** Align series data to category array, returning y values by category position. */\nfunction buildCategoryAlignedData(\n    rows: any[],\n    xField: string,\n    yField: string,\n    categories: string[],\n): (number | null)[] {\n    const map = new Map<string, number>();\n    for (const row of rows) {\n        map.set(String(row[xField]), row[yField]);\n    }\n    return categories.map(cat => map.get(cat) ?? null);\n}\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/bar.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Bar Chart templates: Bar, Stacked Bar, Grouped Bar.\n *\n * Key contrast with Vega-Lite:\n *   VL: encoding channels determine stacking/grouping implicitly\n *       - stacked bar:  color channel → auto-stacks\n *       - grouped bar:  xOffset/group channel → side-by-side\n *   EC: explicit series[] with stack property for stacking,\n *       and barGap/barCategoryGap for grouped layout\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport {\n    extractCategories, groupBy, detectAxes, DEFAULT_COLORS, getCategoryOrder,\n} from './utils';\nimport {\n    detectBandedAxisFromSemantics, detectBandedAxisForceDiscrete,\n} from '../../vegalite/templates/utils';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\n/**\n * For a category-axis bar chart, build an array of values aligned to the\n * category array. Each entry is the sum of values for that category in the\n * given rows (to handle pre-aggregated or raw data).\n */\nfunction buildCategoryValues(\n    rows: any[],\n    categoryField: string,\n    valueField: string,\n    categories: string[],\n): (number | null)[] {\n    const map = new Map<string, number>();\n    for (const row of rows) {\n        const cat = String(row[categoryField] ?? '');\n        const val = row[valueField];\n        if (val != null && !isNaN(val)) {\n            map.set(cat, (map.get(cat) ?? 0) + Number(val));\n        }\n    }\n    return categories.map(cat => map.get(cat) ?? null);\n}\n\n/** Count rows per category (when value axis has no numeric field, e.g. temporal). */\nfunction buildCategoryCounts(\n    rows: any[],\n    categoryField: string,\n    categories: string[],\n): number[] {\n    const map = new Map<string, number>();\n    for (const row of rows) {\n        const cat = String(row[categoryField] ?? '');\n        map.set(cat, (map.get(cat) ?? 0) + 1);\n    }\n    return categories.map(cat => map.get(cat) ?? 0);\n}\n\n/** When both x and y are discrete: count per (category, group). Returns one row per group. */\nfunction buildCategoryGroupCounts(\n    rows: any[],\n    categoryField: string,\n    groupField: string,\n    categories: string[],\n    groups: string[],\n): number[][] {\n    return groups.map(group =>\n        categories.map(cat =>\n            rows.filter(r => String(r[categoryField] ?? '') === cat && String(r[groupField] ?? '') === group).length,\n        ),\n    );\n}\n\n// ─── Bar Chart ──────────────────────────────────────────────────────────────\n\nexport const ecBarChartDef: ChartTemplateDef = {\n    chart: 'Bar Chart',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'y', 'color', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisFromSemantics(cs, table, { preferAxis: 'x' });\n        return {\n            axisFlags: result ? { [result.axis]: { banded: true } } : { x: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n        };\n    },\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const { categoryAxis, valueAxis } = detectAxes(channelSemantics);\n\n        const catField = channelSemantics[categoryAxis]?.field;\n        const valField = channelSemantics[valueAxis]?.field;\n        if (!catField || !valField) return;\n\n        const catCS = channelSemantics[categoryAxis];\n        const bothDiscrete =\n            isDiscrete(channelSemantics.x?.type) && isDiscrete(channelSemantics.y?.type);\n\n        if (bothDiscrete) {\n            // x=Category, y=Group both nominal → heatmap: cell color = count per (Category, Group)\n            const categories = extractCategories(table, catField, getCategoryOrder(ctx, categoryAxis));\n            const groups = extractCategories(table, valField, getCategoryOrder(ctx, valueAxis));\n            const countMatrix = buildCategoryGroupCounts(table, catField, valField, categories, groups);\n\n            const heatData: [number, number, number][] = [];\n            let minVal = Infinity;\n            let maxVal = -Infinity;\n            for (let yi = 0; yi < groups.length; yi++) {\n                for (let xi = 0; xi < categories.length; xi++) {\n                    const v = countMatrix[yi][xi];\n                    heatData.push([xi, yi, v]);\n                    if (v < minVal) minVal = v;\n                    if (v > maxVal) maxVal = v;\n                }\n            }\n            if (minVal === Infinity) minVal = 0;\n            if (maxVal === -Infinity) maxVal = 1;\n\n            const option: any = {\n                tooltip: {\n                    position: 'top',\n                    formatter: (params: any) => {\n                        const d = params.data;\n                        return `${categories[d[0]]}, ${groups[d[1]]}: ${d[2]}`;\n                    },\n                },\n                xAxis: {\n                    type: 'category',\n                    data: categories,\n                    name: catField,\n                    splitArea: { show: true },\n                    axisLabel: { rotate: 90 },\n                },\n                yAxis: {\n                    type: 'category',\n                    data: groups,\n                    name: valField,\n                    splitArea: { show: true },\n                },\n                visualMap: {\n                    min: minVal,\n                    max: maxVal,\n                    calculable: true,\n                    orient: 'vertical',\n                    right: 10,\n                    top: 'center',\n                    itemGap: 15,\n                    inRange: { color: ['#f0f9ff', '#0ea5e9', '#0369a1'] },\n                },\n                _visualMapWidth: 50,\n                series: [{\n                    type: 'heatmap',\n                    data: heatData,\n                    label: { show: heatData.length <= 100 },\n                    emphasis: {\n                        itemStyle: { shadowBlur: 10, shadowColor: 'rgba(0, 0, 0, 0.5)' },\n                    },\n                }],\n            };\n            Object.assign(spec, option);\n            delete spec.mark;\n            delete spec.encoding;\n            return;\n        }\n\n        const valCS = channelSemantics[valueAxis];\n        let categories = extractCategories(table, catField, getCategoryOrder(ctx, categoryAxis));\n        let values: (number | null)[];\n        if (valCS?.type === 'temporal') {\n            // Value axis is date — use count per category (no numeric to sum)\n            values = buildCategoryCounts(table, catField, categories);\n        } else {\n            values = buildCategoryValues(table, catField, valField, categories);\n        }\n        if (catCS?.type === 'temporal') {\n            const pairs: [string, number | null][] = categories.map((c, i) => [c, values[i]]);\n            pairs.sort((a, b) => new Date(a[0]).getTime() - new Date(b[0]).getTime());\n            categories = pairs.map(p => p[0]);\n            values = pairs.map(p => p[1]);\n        }\n\n        const isHorizontal = categoryAxis === 'y';\n        const valueLabel = valCS?.type === 'temporal' ? 'Count' : valField;\n\n        const option: any = {\n            tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },\n            xAxis: isHorizontal\n                ? { type: 'value', name: valueLabel }\n                : {\n                    type: 'category',\n                    data: categories,\n                    name: catField,\n                    // Numeric categories: keep labels horizontal so numbers read left-to-right.\n                    axisLabel: { rotate: catCS?.type === 'quantitative' ? 0 : 90 },\n                    axisTick: { show: true, alignWithLabel: true },\n                    axisLine: { show: true },\n                },\n            yAxis: isHorizontal\n                ? { type: 'category', data: categories, name: catField }\n                : { type: 'value', name: valueLabel },\n            series: [{\n                type: 'bar',\n                data: values,\n                itemStyle: {\n                    borderRadius: chartProperties?.cornerRadius ?? 0,\n                },\n            }],\n        };\n        option._encodingTooltip = { trigger: 'axis', categoryLabel: catField, valueLabel };\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'cornerRadius', label: 'Corners', type: 'continuous', min: 0, max: 15, step: 1, defaultValue: 0 },\n    ] as ChartPropertyDef[],\n};\n\n// ─── Stacked Bar Chart ──────────────────────────────────────────────────────\n\nexport const ecStackedBarChartDef: ChartTemplateDef = {\n    chart: 'Stacked Bar Chart',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'y', 'color', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisFromSemantics(cs, table, { preferAxis: 'x' });\n        return {\n            axisFlags: result ? { [result.axis]: { banded: true } } : { x: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n            paramOverrides: { continuousMarkCrossSection: { x: 20, y: 20, seriesCountAxis: 'auto' } },\n        };\n    },\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const { categoryAxis, valueAxis } = detectAxes(channelSemantics);\n        const colorField = channelSemantics.color?.field;\n\n        const catField = channelSemantics[categoryAxis]?.field;\n        const valField = channelSemantics[valueAxis]?.field;\n        if (!catField || !valField) return;\n\n        const catCS = channelSemantics[categoryAxis];\n        let categories = extractCategories(table, catField, getCategoryOrder(ctx, categoryAxis));\n        if (catCS?.type === 'temporal') {\n            categories = [...categories].sort((a, b) => new Date(a).getTime() - new Date(b).getTime());\n        }\n        const isHorizontal = categoryAxis === 'y';\n\n        const option: any = {\n            tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },\n            xAxis: isHorizontal\n                ? { type: 'value', name: valField }\n                : {\n                    type: 'category',\n                    data: categories,\n                    name: catField,\n                    axisLabel: { rotate: catCS?.type === 'quantitative' ? 0 : 90 },\n                    axisTick: { show: true, alignWithLabel: true },\n                    axisLine: { show: true },\n                },\n            yAxis: isHorizontal\n                ? { type: 'category', data: categories, name: catField }\n                : { type: 'value', name: valField },\n            series: [],\n        };\n        option._encodingTooltip = { trigger: 'axis', categoryLabel: catField, valueLabel: valField };\n\n        // Stack mode from chart properties\n        const stackMode = chartProperties?.stackMode;\n        // In ECharts, stack is a group name; normalize maps to '%' formatting\n        const stackGroup = stackMode === 'layered' ? undefined : 'total';\n\n        if (colorField) {\n            const groups = groupBy(table, colorField);\n            option.legend = { data: [...groups.keys()] };\n\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const data = buildCategoryValues(rows, catField, valField, categories);\n                const series: any = {\n                    name,\n                    type: 'bar',\n                    data,\n                    itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length] },\n                };\n                if (stackGroup) {\n                    series.stack = stackGroup;\n                }\n                // Normalize: ECharts doesn't have a built-in \"normalize\" stack,\n                // but we can signal it via a custom label format\n                if (stackMode === 'normalize') {\n                    series.stack = 'total';\n                    // Note: true normalize requires computing percentages;\n                    // for now we just stack — full normalize would need data transform\n                }\n                option.series.push(series);\n                colorIdx++;\n            }\n        } else {\n            // Single series stacked (no color = just a regular bar)\n            const data = buildCategoryValues(table, catField, valField, categories);\n            option.series.push({ type: 'bar', data, stack: stackGroup });\n        }\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'stackMode', label: 'Stack', type: 'discrete', options: [\n                { value: undefined, label: 'Stacked (default)' },\n                { value: 'normalize', label: 'Normalize (100%)' },\n                { value: 'layered', label: 'Layered (overlap)' },\n            ],\n        },\n    ] as ChartPropertyDef[],\n};\n\n// ─── Grouped Bar Chart ──────────────────────────────────────────────────────\n\nexport const ecGroupedBarChartDef: ChartTemplateDef = {\n    chart: 'Grouped Bar Chart',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'y', 'group', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisForceDiscrete(cs, table, { preferAxis: 'x' });\n        const axis = result?.axis || 'x';\n        return {\n            axisFlags: { [axis]: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n        };\n    },\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table } = ctx;\n        const { categoryAxis, valueAxis } = detectAxes(channelSemantics);\n\n        // The \"group\" channel in the core maps to color in ECharts\n        const groupField = channelSemantics.group?.field || channelSemantics.color?.field;\n\n        const catField = channelSemantics[categoryAxis]?.field;\n        const valField = channelSemantics[valueAxis]?.field;\n        if (!catField || !valField) return;\n\n        const catCS = channelSemantics[categoryAxis];\n        let categories = extractCategories(table, catField, getCategoryOrder(ctx, categoryAxis));\n        if (catCS?.type === 'temporal') {\n            categories = [...categories].sort((a, b) => new Date(a).getTime() - new Date(b).getTime());\n        }\n        const isHorizontal = categoryAxis === 'y';\n\n        const option: any = {\n            tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },\n            xAxis: isHorizontal\n                ? { type: 'value', name: valField }\n                : {\n                    type: 'category',\n                    data: categories,\n                    name: catField,\n                    axisLabel: { rotate: catCS?.type === 'quantitative' ? 0 : 90 },\n                    axisTick: { show: true, alignWithLabel: true },\n                    axisLine: { show: true },\n                },\n            yAxis: isHorizontal\n                ? { type: 'category', data: categories, name: catField }\n                : { type: 'value', name: valField },\n            series: [],\n        };\n        option._encodingTooltip = { trigger: 'axis', categoryLabel: catField, valueLabel: valField };\n\n        if (groupField) {\n            // Each group becomes a separate series — ECharts places them\n            // side-by-side within each category automatically\n            const groups = groupBy(table, groupField);\n            option.legend = { data: [...groups.keys()] };\n\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const data = buildCategoryValues(rows, catField, valField, categories);\n                option.series.push({\n                    name,\n                    type: 'bar',\n                    data,\n                    itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length] },\n                });\n                colorIdx++;\n            }\n        } else {\n            // No grouping — single series\n            const data = buildCategoryValues(table, catField, valField, categories);\n            option.series.push({ type: 'bar', data });\n        }\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/boxplot.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Boxplot template.\n *\n * Contrast with VL:\n *   VL: mark = \"boxplot\" — VL computes quartiles automatically from raw data\n *   EC: series type = 'boxplot' — we compute quartiles client-side and pass\n *       [min, Q1, median, Q3, max] per category.\n *       Optionally an \"outlier\" scatter series.\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { extractCategories, groupBy, DEFAULT_COLORS } from './utils';\nimport { detectBandedAxisForceDiscrete } from '../../vegalite/templates/utils';\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\n/** Compute the five-number summary for an array of values. */\nfunction fiveNumberSummary(values: number[]): [number, number, number, number, number] {\n    const sorted = [...values].sort((a, b) => a - b);\n    const n = sorted.length;\n    if (n === 0) return [0, 0, 0, 0, 0];\n    if (n === 1) return [sorted[0], sorted[0], sorted[0], sorted[0], sorted[0]];\n\n    const median = quantile(sorted, 0.5);\n    const q1 = quantile(sorted, 0.25);\n    const q3 = quantile(sorted, 0.75);\n    const iqr = q3 - q1;\n\n    // Whisker extent: min/max within 1.5×IQR\n    const lowerFence = q1 - 1.5 * iqr;\n    const upperFence = q3 + 1.5 * iqr;\n    const whiskerLow = sorted.find(v => v >= lowerFence) ?? sorted[0];\n    const whiskerHigh = [...sorted].reverse().find(v => v <= upperFence) ?? sorted[n - 1];\n\n    return [whiskerLow, q1, median, q3, whiskerHigh];\n}\n\nfunction quantile(sorted: number[], p: number): number {\n    const n = sorted.length;\n    const idx = p * (n - 1);\n    const lo = Math.floor(idx);\n    const hi = Math.ceil(idx);\n    const frac = idx - lo;\n    return sorted[lo] * (1 - frac) + sorted[hi] * frac;\n}\n\n/** Find outliers outside 1.5×IQR fences. */\nfunction findOutliers(values: number[]): number[] {\n    const sorted = [...values].sort((a, b) => a - b);\n    const q1 = quantile(sorted, 0.25);\n    const q3 = quantile(sorted, 0.75);\n    const iqr = q3 - q1;\n    const lo = q1 - 1.5 * iqr;\n    const hi = q3 + 1.5 * iqr;\n    return values.filter(v => v < lo || v > hi);\n}\n\nexport const ecBoxplotDef: ChartTemplateDef = {\n    chart: 'Boxplot',\n    template: { mark: 'boxplot', encoding: {} },\n    channels: ['x', 'y', 'color', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: (cs, table) => {\n        if (!cs.x?.field || !cs.y?.field) return {};\n        const result = detectBandedAxisForceDiscrete(cs, table, { preferAxis: 'x' });\n        if (!result) return {};\n        return {\n            axisFlags: { [result.axis]: { banded: true } },\n            resolvedTypes: result.resolvedTypes,\n        };\n    },\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table } = ctx;\n        const xCS = channelSemantics.x;\n        const yCS = channelSemantics.y;\n\n        if (!xCS?.field || !yCS?.field) return;\n\n        // Determine which axis is categorical and which is quantitative\n        const xIsDiscrete = isDiscrete(xCS.type);\n        const yIsDiscrete = isDiscrete(yCS.type);\n\n        // Default: x is category, y is value\n        let catAxis: 'x' | 'y' = 'x';\n        let valAxis: 'x' | 'y' = 'y';\n        if (yIsDiscrete && !xIsDiscrete) {\n            catAxis = 'y';\n            valAxis = 'x';\n        }\n\n        const catField = channelSemantics[catAxis]!.field!;\n        const valField = channelSemantics[valAxis]!.field!;\n        const catCS = channelSemantics[catAxis];\n        const categories = extractCategories(table, catField, catCS?.ordinalSortOrder);\n\n        // Group data by category\n        const catGroups = groupBy(table, catField);\n\n        // Compute boxplot data per category\n        const boxData: [number, number, number, number, number][] = [];\n        const outlierData: [number, number][] = [];\n\n        for (let i = 0; i < categories.length; i++) {\n            const cat = categories[i];\n            const rows = catGroups.get(cat) || [];\n            const values = rows.map(r => Number(r[valField])).filter(v => isFinite(v));\n            boxData.push(fiveNumberSummary(values));\n\n            const outliers = findOutliers(values);\n            for (const o of outliers) {\n                outlierData.push([i, o]);\n            }\n        }\n\n        const isHorizontal = catAxis === 'y';\n\n        const option: any = {\n            tooltip: { trigger: 'item' },\n            [isHorizontal ? 'yAxis' : 'xAxis']: {\n                type: 'category',\n                data: categories,\n                name: catField,\n                boundaryGap: true,\n            },\n            [isHorizontal ? 'xAxis' : 'yAxis']: {\n                type: 'value',\n                name: valField,\n            },\n            series: [\n                {\n                    type: 'boxplot',\n                    data: boxData,\n                    itemStyle: {\n                        borderColor: '#5470c6',\n                    },\n                },\n            ],\n        };\n\n        // Add outlier scatter series if there are outliers\n        if (outlierData.length > 0) {\n            option.series.push({\n                name: 'Outliers',\n                type: 'scatter',\n                data: outlierData,\n                symbolSize: 4,\n                itemStyle: { color: '#ee6666' },\n            });\n        }\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/candlestick.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Candlestick Chart template.\n *\n * Contrast with VL:\n *   VL: layered spec with rule (high→low) + bar (open→close) + conditional color\n *   EC: native `candlestick` series type — OHLC data format built-in\n *\n * ECharts candlestick is one of its strongest native chart types:\n *   - Built-in up/down coloring\n *   - Automatic tooltip with OHLC labels\n *   - Integrated with dataZoom for pan/zoom\n *\n * Channels: x (date/category), open, high, low, close\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories } from './utils';\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\nexport const ecCandlestickDef: ChartTemplateDef = {\n    chart: 'Candlestick Chart',\n    template: { mark: 'candlestick', encoding: {} },\n    channels: ['x', 'open', 'high', 'low', 'close', 'column', 'row'],\n    markCognitiveChannel: 'position',\n\n    declareLayoutMode: () => ({\n        axisFlags: { x: { banded: true } },\n    }),\n\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xCS = channelSemantics.x;\n        const openCS = channelSemantics.open;\n        const highCS = channelSemantics.high;\n        const lowCS = channelSemantics.low;\n        const closeCS = channelSemantics.close;\n\n        if (!xCS?.field) return;\n        const xField = xCS.field;\n        const openField = openCS?.field;\n        const highField = highCS?.field;\n        const lowField = lowCS?.field;\n        const closeField = closeCS?.field;\n\n        // Need at least open+close for a meaningful candlestick\n        if (!openField || !closeField) return;\n\n        const xIsDiscrete = isDiscrete(xCS.type);\n        const xIsTemporal = xCS.type === 'temporal';\n        const categories = xIsDiscrete\n            ? extractCategories(table, xField, xCS.ordinalSortOrder)\n            : undefined;\n\n        // ── Build OHLC data ──────────────────────────────────────────────\n        // ECharts candlestick data format: [open, close, low, high]\n        // (note: EC ordering is open, close, low, high — NOT the typical OHLC)\n        const candleData: [number, number, number, number][] = [];\n        const xValues: string[] = [];\n\n        for (const row of table) {\n            const o = Number(row[openField]);\n            const c = Number(row[closeField]);\n            const h = highField ? Number(row[highField]) : Math.max(o, c);\n            const l = lowField ? Number(row[lowField]) : Math.min(o, c);\n            candleData.push([o, c, l, h]);\n            xValues.push(String(row[xField]));\n        }\n\n        // ── Build option ─────────────────────────────────────────────────\n        const option: any = {\n            tooltip: {\n                trigger: 'axis',\n                axisPointer: { type: 'cross' },\n            },\n            xAxis: {\n                type: xIsDiscrete ? 'category' : xIsTemporal ? 'category' : 'category',\n                data: categories || xValues,\n                name: xField,\n                nameLocation: 'middle',\n                nameGap: 30,\n                boundaryGap: true,\n                axisLine: { onZero: false },\n            },\n            yAxis: {\n                type: 'value',\n                scale: true,  // candlestick charts should never start at zero\n                name: 'Price',\n                nameLocation: 'middle',\n                nameGap: 50,\n            },\n            series: [{\n                type: 'candlestick',\n                data: candleData,\n                itemStyle: {\n                    color: '#06982d',        // bullish (close > open) — green\n                    color0: '#ae1325',        // bearish (close < open) — red\n                    borderColor: '#06982d',\n                    borderColor0: '#ae1325',\n                },\n            }],\n        };\n\n        // ── Optional MA overlay ──────────────────────────────────────────\n        if (chartProperties?.showMA) {\n            const maWindow = chartProperties.maWindow ?? 5;\n            const closePrices = table.map((r: any) => Number(r[closeField]));\n            const maData = computeMA(closePrices, maWindow);\n            option.series.push({\n                name: `MA${maWindow}`,\n                type: 'line',\n                data: maData,\n                smooth: true,\n                lineStyle: { width: 1.5, opacity: 0.7 },\n                symbol: 'none',\n            });\n            option.legend = { data: [`MA${maWindow}`] };\n        }\n\n        // ── DataZoom for large datasets ──────────────────────────────────\n        if (table.length > 60) {\n            const startPercent = Math.max(0, 100 - Math.round(60 / table.length * 100));\n            option.dataZoom = [\n                { type: 'inside', start: startPercent, end: 100 },\n                { type: 'slider', start: startPercent, end: 100, bottom: 5, height: 20 },\n            ];\n            // Extra grid bottom padding so axis title + slider don't overlap\n            option._dataZoomExtra = 35;\n        }\n\n        // ── Bar width auto-sizing ────────────────────────────────────────\n        const plotWidth = ctx.canvasSize?.width || 400;\n        const barWidth = Math.max(2, Math.min(20, Math.round(plotWidth * 0.6 / table.length)));\n        option.series[0].barWidth = barWidth;\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n\n    postProcess: (option) => {\n        // Grow canvas to fit dataZoom slider below the axis title\n        const extra = option._dataZoomExtra ?? 0;\n        if (extra > 0) {\n            if (!option.grid) option.grid = {};\n            const curBottom = typeof option.grid.bottom === 'number' ? option.grid.bottom : 45;\n            option.grid.bottom = curBottom + extra;\n            if (typeof option._height === 'number') {\n                option._height += extra;\n            }\n            delete option._dataZoomExtra;\n        }\n    },\n\n    properties: [\n        {\n            key: 'showMA', label: 'Show Moving Avg', type: 'binary', defaultValue: false,\n        } as ChartPropertyDef,\n        {\n            key: 'maWindow', label: 'MA Window', type: 'continuous',\n            min: 3, max: 30, step: 1, defaultValue: 5,\n        } as ChartPropertyDef,\n    ],\n};\n\n/**\n * Compute simple moving average.\n * Returns null for the first (window-1) entries.\n */\nfunction computeMA(prices: number[], window: number): (number | null)[] {\n    const result: (number | null)[] = [];\n    for (let i = 0; i < prices.length; i++) {\n        if (i < window - 1) {\n            result.push(null);\n        } else {\n            let sum = 0;\n            for (let j = i - window + 1; j <= i; j++) {\n                sum += prices[j];\n            }\n            result.push(Math.round(sum / window * 100) / 100);\n        }\n    }\n    return result;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/density.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Density Plot — area from binned distribution (mirror vegalite/templates/density.ts).\n * Single channel x; optional color. Uses histogram bins then area chart as approximation.\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { groupBy, DEFAULT_COLORS } from './utils';\n\nfunction binData(values: number[], numBins: number): { x: number[]; y: number[] } {\n    if (values.length === 0) return { x: [], y: [] };\n    const min = Math.min(...values);\n    const max = Math.max(...values);\n    const step = (max - min) / numBins || 1;\n    const bins = new Array(numBins + 1).fill(0);\n    const edges = new Array(numBins + 1).fill(0).map((_, i) => min + i * step);\n\n    for (const v of values) {\n        const i = Math.min(Math.floor((v - min) / step), numBins - 1);\n        bins[i]++;\n    }\n\n    const total = values.length;\n    const x = edges.slice(0, -1).map((e, i) => (e + edges[i + 1]) / 2);\n    const y = bins.slice(0, -1).map(c => c / total);\n    return { x, y };\n}\n\nexport const ecDensityPlotDef: ChartTemplateDef = {\n    chart: 'Density Plot',\n    template: { mark: 'area', encoding: {} },\n    channels: ['x', 'color', 'column', 'row'],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xField = channelSemantics.x?.field;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xField) return;\n\n        const numBins = Math.min(40, Math.max(10, Math.ceil(Math.sqrt(table.length))));\n        const bandwidth = chartProperties?.bandwidth ?? 0.4;\n        const bins = Math.max(10, Math.round(numBins / (1 + bandwidth)));\n\n        const option: any = {\n            tooltip: { trigger: 'axis' },\n            xAxis: { type: 'value', name: xField, nameLocation: 'middle', nameGap: 30 },\n            yAxis: { type: 'value', name: 'Density', nameLocation: 'middle', nameGap: 40 },\n            series: [],\n        };\n        option._encodingTooltip = { trigger: 'axis', categoryLabel: xField, valueLabel: 'Density' };\n\n        if (colorField) {\n            const groups = groupBy(table, colorField);\n            option.legend = { data: [...groups.keys()] };\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const values = rows.map((r: any) => Number(r[xField])).filter((v: number) => !isNaN(v));\n                const { x, y } = binData(values, bins);\n                const data = x.map((xi, i) => [xi, y[i]]);\n                option.series.push({\n                    name,\n                    type: 'line',\n                    data,\n                    areaStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length], opacity: 0.5 },\n                    itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length] },\n                });\n                colorIdx++;\n            }\n        } else {\n            const values = table.map((r: any) => Number(r[xField])).filter((v: number) => !isNaN(v));\n            const { x, y } = binData(values, bins);\n            const data = x.map((xi, i) => [xi, y[i]]);\n            option.series.push({\n                type: 'line',\n                data,\n                areaStyle: { opacity: 0.5 },\n            });\n        }\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/funnel.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Funnel Chart template.\n *\n * Unique to ECharts — no Vega-Lite equivalent.\n * Displays a funnel (descending trapezoids) showing sequential stage values,\n * commonly used for conversion pipelines (e.g., visits → signups → purchases).\n *\n * Data model:\n *   y    (nominal): stage name / category — drives vertical sizing via spring model\n *   size (quantitative): value for each stage — drives trapezoid width\n *\n * Each row represents one stage. Multiple rows per stage are aggregated (sum).\n *\n * Scaling: the `y` channel is declared as banded, so the spring model in\n * `computeLayout` decides `yStep` (px per stage).  Height = yStep × stageCount.\n * The `defaultStepMultiplier: 2.5` gives each stage generous vertical space\n * (≈50-67px default vs 20-27px for bars).\n *\n * The template does NOT create yAxis/xAxis in the ECharts option, so\n * `ecApplyLayoutToSpec` correctly skips grid processing.\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, DEFAULT_COLORS } from './utils';\n\nexport const ecFunnelChartDef: ChartTemplateDef = {\n    chart: 'Funnel Chart',\n    template: { mark: 'rect', encoding: {} },\n    channels: ['y', 'size'],\n    markCognitiveChannel: 'area',\n    declareLayoutMode: () => ({\n        axisFlags: { y: { banded: true } },\n        paramOverrides: {\n            defaultStepMultiplier: 2.5,  // taller bands for funnel stages\n        },\n    }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties, layout } = ctx;\n        const stageField = channelSemantics.y?.field;\n        const valField = channelSemantics.size?.field;\n\n        if (!stageField) return;\n\n        // Extract stages (categories from y channel)\n        const stages = extractCategories(\n            table, stageField, channelSemantics.y?.ordinalSortOrder,\n        );\n        if (stages.length === 0) return;\n\n        // Aggregate values per stage\n        const funnelData: { name: string; value: number }[] = [];\n        if (valField) {\n            const agg = new Map<string, number>();\n            for (const row of table) {\n                const stage = String(row[stageField] ?? '');\n                const val = Number(row[valField]) || 0;\n                agg.set(stage, (agg.get(stage) ?? 0) + val);\n            }\n            for (const stage of stages) {\n                funnelData.push({ name: stage, value: agg.get(stage) ?? 0 });\n            }\n        } else {\n            // No value field — count occurrences per stage\n            const counts = new Map<string, number>();\n            for (const row of table) {\n                const stage = String(row[stageField] ?? '');\n                counts.set(stage, (counts.get(stage) ?? 0) + 1);\n            }\n            for (const stage of stages) {\n                funnelData.push({ name: stage, value: counts.get(stage) ?? 0 });\n            }\n        }\n\n        // Sort by value (largest first) for funnel shape\n        const sortOrder = chartProperties?.sort ?? 'descending';\n        if (sortOrder === 'descending') {\n            funnelData.sort((a, b) => b.value - a.value);\n        } else if (sortOrder === 'ascending') {\n            funnelData.sort((a, b) => a.value - b.value);\n        }\n        // 'none' preserves original stage order\n\n        // ── Layout-driven sizing ─────────────────────────────────────────\n        // Use spring model results: yStep × stageCount → funnel body height\n        const stageCount = layout.yNominalCount || stages.length;\n        const yStep = layout.yStep;\n        const funnelBodyH = Math.max(120, yStep * stageCount);\n\n        const topMargin = 30;\n        const bottomMargin = 20;\n        const canvasH = funnelBodyH + topMargin + bottomMargin;\n\n        // Estimate legend width from label text\n        const maxLabelLen = Math.max(...funnelData.map(d => d.name.length), 3);\n        const estimatedLegendWidth = Math.min(150, maxLabelLen * 7 + 30);\n\n        const canvasW = Math.max(ctx.canvasSize.width, 300);\n\n        // Leave room for legend on the right\n        const funnelLeft = 40;\n        const funnelRight = estimatedLegendWidth + 30;\n        const funnelWidth = `${Math.max(100, canvasW - funnelLeft - funnelRight)}px`;\n\n        const orient = chartProperties?.orient ?? 'vertical';\n\n        const option: any = {\n            tooltip: {\n                trigger: 'item',\n                formatter: '{b}: {c} ({d}%)',\n            },\n            legend: {\n                data: funnelData.map(d => d.name),\n                type: funnelData.length > 8 ? 'scroll' : 'plain',\n                orient: 'vertical',\n                right: 10,\n                top: 'middle',\n                textStyle: { fontSize: 11 },\n            },\n            series: [{\n                type: 'funnel',\n                left: funnelLeft,\n                top: topMargin,\n                bottom: bottomMargin,\n                width: funnelWidth,\n                sort: sortOrder,\n                orient,\n                gap: chartProperties?.gap ?? 2,\n                data: funnelData,\n                label: {\n                    show: true,\n                    position: 'inside',\n                    formatter: '{b}\\n{c}',\n                    fontSize: 11,\n                },\n                emphasis: {\n                    label: {\n                        fontSize: 13,\n                    },\n                },\n                itemStyle: {\n                    borderColor: '#fff',\n                    borderWidth: 1,\n                },\n            }],\n            color: DEFAULT_COLORS,\n            _width: canvasW,\n            _height: canvasH,\n        };\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'sort', label: 'Sort', type: 'discrete', options: [\n                { value: 'descending', label: 'Descending (default)' },\n                { value: 'ascending', label: 'Ascending' },\n                { value: 'none', label: 'Original order' },\n            ],\n        } as ChartPropertyDef,\n        {\n            key: 'orient', label: 'Orient', type: 'discrete', options: [\n                { value: 'vertical', label: 'Vertical (default)' },\n                { value: 'horizontal', label: 'Horizontal' },\n            ],\n        } as ChartPropertyDef,\n        { key: 'gap', label: 'Gap', type: 'continuous', min: 0, max: 20, step: 1, defaultValue: 2 } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/gauge.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Gauge Chart template.\n *\n * Unique to ECharts — no Vega-Lite equivalent.\n * Displays numeric KPI values on speedometer-style dials.\n *\n * Data model:\n *   size   (quantitative): the value to display\n *   column (nominal, optional): splits into separate gauge subplots with\n *          facet-style wrapping — each unique value creates one gauge dial\n *\n * When multiple rows share the same column value, the size values are\n * averaged.  With no column channel, all rows are averaged into a single\n * gauge.\n *\n * Scaling: uses facet-style wrapping — the template computes a grid layout\n * internally (since gauge is axis-less, the assembler's facet path doesn't\n * apply).  The grid respects a minimum gauge cell size and wraps to multiple\n * rows when there are too many dials for a single row.\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, groupBy, DEFAULT_COLORS } from './utils';\n\nexport const ecGaugeChartDef: ChartTemplateDef = {\n    chart: 'Gauge Chart',\n    template: { mark: 'point', encoding: {} },\n    channels: ['size', 'column'],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const valueField = channelSemantics.size?.field;\n        const columnField = channelSemantics.column?.field;\n\n        if (!valueField) return;\n\n        // Compute data range for axis scaling\n        const allValues = table.map(r => Number(r[valueField])).filter(v => isFinite(v));\n        const dataMax = allValues.length > 0 ? Math.max(...allValues) : 100;\n\n        const scaleMin = chartProperties?.min ?? 0;\n        const scaleMax = chartProperties?.max ?? niceGaugeMax(dataMax);\n\n        // ── Build gauge items: one per column category, or single ────────\n        const gaugeItems: { name: string; value: number; color?: string }[] = [];\n\n        if (columnField) {\n            const groups = groupBy(table, columnField);\n            const categories = extractCategories(\n                table, columnField, channelSemantics.column?.ordinalSortOrder,\n            );\n            categories.forEach((cat, idx) => {\n                const rows = groups.get(cat) || [];\n                const vals = rows.map(r => Number(r[valueField])).filter(v => isFinite(v));\n                const avg = vals.length > 0\n                    ? Math.round(vals.reduce((a, b) => a + b, 0) / vals.length * 100) / 100\n                    : 0;\n                gaugeItems.push({\n                    name: cat,\n                    value: avg,\n                    color: DEFAULT_COLORS[idx % DEFAULT_COLORS.length],\n                });\n            });\n        } else {\n            const avg = allValues.length > 0\n                ? Math.round(allValues.reduce((a, b) => a + b, 0) / allValues.length * 100) / 100\n                : 0;\n            gaugeItems.push({ name: valueField, value: avg });\n        }\n\n        // ── Facet-style grid wrapping ────────────────────────────────────\n        const n = gaugeItems.length;\n        const baseW = ctx.canvasSize.width;\n        const baseH = ctx.canvasSize.height;\n        const minCellDim = 180;       // minimum px per gauge cell\n        const maxStretchFactor = ctx.assembleOptions?.maxStretch ?? 2.0;  // max canvas stretch\n\n        let gridCols: number, gridRows: number;\n        if (n === 1) {\n            gridCols = 1;\n            gridRows = 1;\n        } else {\n            const maxCols = Math.max(1,\n                Math.floor(baseW * maxStretchFactor / minCellDim));\n            if (n <= maxCols) {\n                gridCols = n;\n                gridRows = 1;\n            } else {\n                gridRows = Math.ceil(n / maxCols);\n                gridCols = Math.ceil(n / gridRows);\n            }\n        }\n\n        const canvasW = Math.max(baseW, gridCols * minCellDim);\n        const canvasH = Math.max(baseH, gridRows * (minCellDim + 20));\n        const cellW = canvasW / gridCols;\n        const cellH = canvasH / gridRows;\n        const gaugeRadius = Math.max(40,\n            Math.round(Math.min(cellW * 0.38, cellH * 0.38)));\n\n        // Scale all gauge element sizes proportionally to the radius.\n        // Reference radius ~100px maps to baseline sizes.\n        const s = gaugeRadius / 100;\n        const progressWidth = Math.max(4, Math.round(12 * s));\n        const pointerWidth = Math.max(2, Math.round(5 * s));\n        const detailFontSize = Math.max(10, Math.round(20 * s));\n        const titleFontSize = Math.max(8, Math.round(14 * s));\n        const axisLabelFontSize = Math.max(6, Math.round(9 * s));\n        const tickLength = Math.max(3, Math.round(5 * s));\n        const tickDistance = -Math.round(16 * s);\n        const splitLength = Math.max(5, Math.round(12 * s));\n        const splitDistance = -Math.round(20 * s);\n        const labelDistance = -Math.round(24 * s);\n\n        const showProgress = chartProperties?.showProgress !== false;\n\n        // ── Build one ECharts gauge series per item ──────────────────────\n        const series = gaugeItems.map((item, i) => {\n            const col = i % gridCols;\n            const row = Math.floor(i / gridCols);\n            const cx = Math.round((col + 0.5) * cellW);\n            const cy = Math.round((row + 0.5) * cellH);\n\n            return {\n                type: 'gauge' as const,\n                min: scaleMin,\n                max: scaleMax,\n                center: [`${cx}px`, `${cy}px`],\n                radius: `${gaugeRadius}px`,\n                data: [{\n                    name: item.name,\n                    value: item.value,\n                    ...(item.color ? { itemStyle: { color: item.color } } : {}),\n                }],\n                detail: {\n                    formatter: '{value}',\n                    fontSize: detailFontSize,\n                    offsetCenter: [0, '70%'],\n                },\n                title: {\n                    fontSize: titleFontSize,\n                    offsetCenter: [0, '85%'],\n                },\n                axisLine: {\n                    lineStyle: { width: progressWidth },\n                },\n                progress: {\n                    show: showProgress,\n                    width: progressWidth,\n                    ...(item.color ? { itemStyle: { color: item.color } } : {}),\n                },\n                pointer: {\n                    length: '60%',\n                    width: pointerWidth,\n                    ...(item.color ? { itemStyle: { color: item.color } } : {}),\n                },\n                axisTick: {\n                    distance: tickDistance,\n                    length: tickLength,\n                    lineStyle: { color: '#999', width: 1 },\n                },\n                splitLine: {\n                    distance: splitDistance,\n                    length: splitLength,\n                    lineStyle: { color: '#999', width: 2 },\n                },\n                axisLabel: {\n                    distance: labelDistance,\n                    fontSize: axisLabelFontSize,\n                    color: '#666',\n                },\n            };\n        });\n\n        const option: any = {\n            tooltip: { trigger: 'item', formatter: '{b}: {c}' },\n            series,\n            color: DEFAULT_COLORS,\n            _width: canvasW,\n            _height: canvasH,\n        };\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'min', label: 'Min', type: 'continuous', min: 0, max: 1000, step: 10, defaultValue: 0 } as ChartPropertyDef,\n        { key: 'max', label: 'Max', type: 'continuous', min: 0, max: 10000, step: 100, defaultValue: 100 } as ChartPropertyDef,\n        {\n            key: 'showProgress', label: 'Progress', type: 'discrete', options: [\n                { value: true, label: 'Show (default)' },\n                { value: false, label: 'Hide' },\n            ],\n        } as ChartPropertyDef,\n    ],\n};\n\n/** Round up to a nice gauge maximum. */\nfunction niceGaugeMax(v: number): number {\n    if (v <= 0) return 100;\n    const pow = Math.pow(10, Math.floor(Math.log10(v)));\n    const mantissa = v / pow;\n    const nice = mantissa <= 1 ? 1\n        : mantissa <= 2 ? 2\n        : mantissa <= 5 ? 5\n        : 10;\n    return nice * pow;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/heatmap.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Heatmap template.\n *\n * Contrast with VL:\n *   VL: mark = \"rect\" with x (nominal), y (nominal), color (quantitative)\n *   EC: series type = 'heatmap' with data = [[xIdx, yIdx, value], ...]\n *       and a visualMap component for the color scale.\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, DEFAULT_COLORS } from './utils';\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\n/** Map VL-style scheme names to ECharts built-in color ranges. */\nconst SCHEME_COLORS: Record<string, string[]> = {\n    viridis:     ['#440154', '#3b528b', '#21918c', '#5ec962', '#fde725'],\n    inferno:     ['#000004', '#420a68', '#932667', '#dd513a', '#fca50a', '#fcffa4'],\n    magma:       ['#000004', '#3b0f70', '#8c2981', '#de4968', '#fe9f6d', '#fcfdbf'],\n    plasma:      ['#0d0887', '#6a00a8', '#b12a90', '#e16462', '#fca636', '#f0f921'],\n    turbo:       ['#30123b', '#4662d7', '#35abed', '#1ae4b6', '#72fe5e', '#c8ef34', '#faba39', '#f66b19', '#d23105', '#7a0403'],\n    blues:       ['#f7fbff', '#6baed6', '#08519c'],\n    reds:        ['#fff5f0', '#fb6a4a', '#a50f15'],\n    greens:      ['#f7fcf5', '#74c476', '#00441b'],\n    oranges:     ['#fff5eb', '#fd8d3c', '#7f2704'],\n    purples:     ['#fcfbfd', '#9e9ac8', '#3f007d'],\n    greys:       ['#ffffff', '#969696', '#252525'],\n    blueorange:  ['#08519c', '#f7fbff', '#ff7f00'],\n    redblue:     ['#a50f15', '#ffffff', '#08519c'],\n};\n\nexport const ecHeatmapDef: ChartTemplateDef = {\n    chart: 'Heatmap',\n    template: { mark: 'rect', encoding: {} },\n    channels: ['x', 'y', 'color', 'column', 'row'],\n    markCognitiveChannel: 'color',\n    declareLayoutMode: () => ({\n        axisFlags: { x: { banded: true }, y: { banded: true } },\n        paramOverrides: {\n            minStep: 20,               // heatmap cells need room for value labels\n            defaultStepMultiplier: 2,  // inflate default step so cells aren't cramped\n        },\n    }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xCS = channelSemantics.x;\n        const yCS = channelSemantics.y;\n        const colorCS = channelSemantics.color;\n\n        const xField = xCS?.field;\n        const yField = yCS?.field;\n        const colorField = colorCS?.field;\n        if (!xField || !yField) return;\n\n        const xCategories = extractCategories(table, xField, xCS?.ordinalSortOrder);\n        const yCategories = extractCategories(table, yField, yCS?.ordinalSortOrder);\n\n        // Build heatmap data: [xIndex, yIndex, value]\n        const xIndexMap = new Map(xCategories.map((c, i) => [c, i]));\n        const yIndexMap = new Map(yCategories.map((c, i) => [c, i]));\n\n        const heatData: [number, number, number][] = [];\n        let minVal = Infinity;\n        let maxVal = -Infinity;\n\n        // Aggregate if multiple rows per cell (sum)\n        const cellMap = new Map<string, number>();\n        for (const row of table) {\n            const xKey = String(row[xField]);\n            const yKey = String(row[yField]);\n            const val = colorField ? (Number(row[colorField]) || 0) : 1;\n            const cellKey = `${xKey}|||${yKey}`;\n            cellMap.set(cellKey, (cellMap.get(cellKey) ?? 0) + val);\n        }\n\n        for (const [cellKey, val] of cellMap) {\n            const [xKey, yKey] = cellKey.split('|||');\n            const xi = xIndexMap.get(xKey);\n            const yi = yIndexMap.get(yKey);\n            if (xi !== undefined && yi !== undefined) {\n                heatData.push([xi, yi, val]);\n                if (val < minVal) minVal = val;\n                if (val > maxVal) maxVal = val;\n            }\n        }\n\n        if (minVal === Infinity) minVal = 0;\n        if (maxVal === -Infinity) maxVal = 1;\n\n        // Color scheme\n        const schemeName = chartProperties?.colorScheme || 'viridis';\n        const schemeColors = SCHEME_COLORS[schemeName] || SCHEME_COLORS.viridis;\n\n        const option: any = {\n            tooltip: {\n                position: 'top',\n                formatter: (params: any) => {\n                    const d = params.data;\n                    return `${xCategories[d[0]]}, ${yCategories[d[1]]}: ${d[2]}`;\n                },\n            },\n            xAxis: {\n                type: 'category',\n                data: xCategories,\n                name: xField,\n                splitArea: { show: true },\n            },\n            yAxis: {\n                type: 'category',\n                data: yCategories,\n                name: yField,\n                splitArea: { show: true },\n            },\n            visualMap: {\n                min: minVal,\n                max: maxVal,\n                calculable: true,\n                orient: 'horizontal',\n                left: 'center',\n                bottom: 0,\n                inRange: {\n                    color: schemeColors,\n                },\n            },\n            series: [{\n                type: 'heatmap',\n                data: heatData,\n                label: {\n                    show: heatData.length <= 100,  // Show labels for small heatmaps\n                },\n                emphasis: {\n                    itemStyle: {\n                        shadowBlur: 10,\n                        shadowColor: 'rgba(0, 0, 0, 0.5)',\n                    },\n                },\n            }],\n        };\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    postProcess: (option, ctx) => {\n        // Scale heatmap label font size based on cell dimensions\n        const heatSeries = option.series?.find((s: any) => s.type === 'heatmap');\n\n        const { layout } = ctx;\n        const cellW = layout.xStep || 50;\n        const cellH = layout.yStep || 50;\n        const minDim = Math.min(cellW, cellH);\n\n        if (heatSeries?.label) {\n            // Scale font: 12px at 60px cell, down to 8px at 35px, hide below 30px\n            if (minDim < 30) {\n                heatSeries.label.show = false;\n            } else {\n                const fontSize = Math.max(8, Math.min(12, Math.round(minDim * 0.2)));\n                heatSeries.label.fontSize = fontSize;\n                // If cell is narrow, truncate displayed value\n                if (cellW < 50) {\n                    const maxChars = Math.max(2, Math.floor(cellW / (fontSize * 0.6)));\n                    heatSeries.label.formatter = (params: any) => {\n                        const val = params.data[2];\n                        const s = String(val);\n                        return s.length > maxChars ? s.slice(0, maxChars) : s;\n                    };\n                }\n            }\n        }\n\n        // Make room for the visualMap bar below the chart\n        // The bottom stack is: grid → x-axis labels → x-axis title → visualMap\n        if (option.visualMap && option.grid) {\n            const vmHeight = 50; // space for visualMap below the x-axis title\n            option.grid.bottom = (option.grid.bottom || 30) + vmHeight;\n            // Position visualMap at absolute bottom with a small margin\n            option.visualMap.bottom = 5;\n            if (option._height) {\n                option._height += vmHeight;\n            }\n        }\n    },\n    properties: [\n        {\n            key: 'colorScheme', label: 'Scheme', type: 'discrete', options: [\n                { value: undefined, label: 'Default (Viridis)' },\n                { value: 'viridis', label: 'Viridis' },\n                { value: 'inferno', label: 'Inferno' },\n                { value: 'magma', label: 'Magma' },\n                { value: 'plasma', label: 'Plasma' },\n                { value: 'turbo', label: 'Turbo' },\n                { value: 'blues', label: 'Blues' },\n                { value: 'reds', label: 'Reds' },\n                { value: 'greens', label: 'Greens' },\n                { value: 'oranges', label: 'Oranges' },\n                { value: 'purples', label: 'Purples' },\n                { value: 'greys', label: 'Greys' },\n                { value: 'blueorange', label: 'Blue-Orange (diverging)' },\n                { value: 'redblue', label: 'Red-Blue (diverging)' },\n            ],\n        } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/histogram.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Histogram template.\n *\n * Contrast with VL:\n *   VL: encoding.x.bin = true + encoding.y.aggregate = \"count\"\n *       (VL handles binning internally)\n *   EC: No built-in bin transform — we compute bins client-side and render\n *       as a bar chart with contiguous bars (barCategoryGap: 0).\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { DEFAULT_COLORS } from './utils';\n\nexport const ecHistogramDef: ChartTemplateDef = {\n    chart: 'Histogram',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'color', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xField = channelSemantics.x?.field;\n        const colorField = channelSemantics.color?.field;\n        if (!xField) return;\n\n        const binCount = chartProperties?.binCount ?? 10;\n\n        // Extract numeric values\n        const values = table\n            .map(r => Number(r[xField]))\n            .filter(v => isFinite(v));\n\n        if (values.length === 0) return;\n\n        const minVal = Math.min(...values);\n        const maxVal = Math.max(...values);\n        const range = maxVal - minVal;\n        const binWidth = range > 0 ? range / binCount : 1;\n\n        if (!colorField) {\n            // Simple histogram — single series\n            const counts = new Array(binCount).fill(0);\n            for (const v of values) {\n                let idx = Math.floor((v - minVal) / binWidth);\n                if (idx >= binCount) idx = binCount - 1;\n                counts[idx]++;\n            }\n\n            const categories = counts.map((_, i) => {\n                const lo = (minVal + i * binWidth).toFixed(1);\n                const hi = (minVal + (i + 1) * binWidth).toFixed(1);\n                return `${lo}–${hi}`;\n            });\n\n            const option: any = {\n                tooltip: {\n                    trigger: 'axis',\n                    axisPointer: { type: 'shadow' },\n                },\n                xAxis: {\n                    type: 'category',\n                    data: categories,\n                    name: xField,\n                    nameLocation: 'middle',\n                    nameGap: 25,\n                    axisLabel: { rotate: categories.length > 10 ? 45 : 0 },\n                },\n                yAxis: {\n                    type: 'value',\n                    name: 'Count',\n                    nameLocation: 'middle',\n                    nameGap: 40,\n                },\n                series: [{\n                    type: 'bar',\n                    data: counts,\n                    barCategoryGap: '0%',   // contiguous bars\n                    itemStyle: {\n                        borderColor: '#fff',\n                        borderWidth: 0.5,\n                    },\n                }],\n            };\n            option._encodingTooltip = { trigger: 'axis', categoryLabel: xField, valueLabel: 'Count' };\n\n            Object.assign(spec, option);\n        } else {\n            // Stacked histogram — one series per color group\n            const groupValues = new Map<string, number[]>();\n            for (const row of table) {\n                const v = Number(row[xField]);\n                if (!isFinite(v)) continue;\n                const g = String(row[colorField] ?? '');\n                if (!groupValues.has(g)) groupValues.set(g, []);\n                groupValues.get(g)!.push(v);\n            }\n\n            const categories = Array.from({ length: binCount }, (_, i) => {\n                const lo = (minVal + i * binWidth).toFixed(1);\n                const hi = (minVal + (i + 1) * binWidth).toFixed(1);\n                return `${lo}–${hi}`;\n            });\n\n            const series: any[] = [];\n            let colorIdx = 0;\n            const legendData: string[] = [];\n\n            for (const [name, vals] of groupValues) {\n                const counts = new Array(binCount).fill(0);\n                for (const v of vals) {\n                    let idx = Math.floor((v - minVal) / binWidth);\n                    if (idx >= binCount) idx = binCount - 1;\n                    counts[idx]++;\n                }\n                legendData.push(name);\n                series.push({\n                    name,\n                    type: 'bar',\n                    data: counts,\n                    stack: 'total',\n                    barCategoryGap: '0%',\n                    itemStyle: {\n                        color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length],\n                        borderColor: '#fff',\n                        borderWidth: 0.5,\n                    },\n                });\n                colorIdx++;\n            }\n\n            const option: any = {\n                tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },\n                legend: { data: legendData },\n                xAxis: {\n                    type: 'category',\n                    data: categories,\n                    name: xField,\n                    nameLocation: 'middle',\n                    nameGap: 25,\n                    axisLabel: { rotate: categories.length > 10 ? 45 : 0 },\n                },\n                yAxis: {\n                    type: 'value',\n                    name: 'Count',\n                    nameLocation: 'middle',\n                    nameGap: 40,\n                },\n                series,\n            };\n            option._encodingTooltip = { trigger: 'axis', categoryLabel: xField, valueLabel: 'Count' };\n\n            Object.assign(spec, option);\n        }\n\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'binCount', label: 'Bins', type: 'continuous', min: 5, max: 50, step: 1, defaultValue: 10 } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/index.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts template registry.\n *\n * Mirrors the structure of vegalite/templates/index.ts but with ECharts\n * template definitions.\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { ecScatterPlotDef, ecRegressionDef } from './scatter';\nimport { ecBarChartDef, ecStackedBarChartDef, ecGroupedBarChartDef } from './bar';\nimport { ecLineChartDef, ecDottedLineChartDef, ecBumpChartDef } from './line';\nimport { ecAreaChartDef } from './area';\nimport { ecPieChartDef } from './pie';\nimport { ecHeatmapDef } from './heatmap';\nimport { ecHistogramDef } from './histogram';\nimport { ecBoxplotDef } from './boxplot';\nimport { ecRadarChartDef } from './radar';\nimport { ecCandlestickDef } from './candlestick';\nimport { ecStreamgraphDef } from './streamgraph';\nimport { ecRoseChartDef } from './rose';\nimport { ecGaugeChartDef } from './gauge';\nimport { ecFunnelChartDef } from './funnel';\nimport { ecTreemapDef } from './treemap';\nimport { ecSunburstDef } from './sunburst';\nimport { ecSankeyDef } from './sankey';\nimport { ecLollipopChartDef } from './lollipop';\nimport { ecStripPlotDef } from './jitter';\nimport { ecWaterfallChartDef } from './waterfall';\nimport { ecPyramidChartDef } from './pyramid';\nimport { ecRangedDotPlotDef } from './ranged-dot';\nimport { ecDensityPlotDef } from './density';\n\n/**\n * ECharts chart template definitions, grouped by category.\n * Mirrors vegalite/templates/index.ts so VegaLite test cases can run through ECharts.\n */\nexport const ecTemplateDefs: { [key: string]: ChartTemplateDef[] } = {\n    'Scatter & Point': [ecScatterPlotDef, ecRegressionDef, ecRangedDotPlotDef, ecBoxplotDef, ecStripPlotDef],\n    'Bar':             [ecBarChartDef, ecGroupedBarChartDef, ecStackedBarChartDef, ecHistogramDef, ecLollipopChartDef, ecPyramidChartDef, ecHeatmapDef],\n    'Line & Area':     [ecLineChartDef, ecDottedLineChartDef, ecBumpChartDef, ecAreaChartDef, ecStreamgraphDef],\n    'Part-to-Whole':   [ecPieChartDef, ecFunnelChartDef, ecTreemapDef, ecSunburstDef],\n    'Statistical':     [ecDensityPlotDef],\n    'Financial':       [ecCandlestickDef],\n    'Other':           [ecWaterfallChartDef],\n    'Polar':           [ecRadarChartDef, ecRoseChartDef],\n    'Indicator':       [ecGaugeChartDef],\n    'Flow':            [ecSankeyDef],\n};\n\n/**\n * Flat list of all ECharts chart template definitions.\n */\nexport const ecAllTemplateDefs: ChartTemplateDef[] = Object.values(ecTemplateDefs).flat();\n\n/**\n * Look up an ECharts chart template definition by chart type name.\n */\nexport function ecGetTemplateDef(chartType: string): ChartTemplateDef | undefined {\n    return ecAllTemplateDefs.find(t => t.chart === chartType);\n}\n\n/**\n * Get the available channels for an ECharts chart type.\n */\nexport function ecGetTemplateChannels(chartType: string): string[] {\n    return ecGetTemplateDef(chartType)?.channels || [];\n}\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/jitter.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Strip Plot — scatter with jitter on categorical axis (mirror vegalite/templates/jitter.ts).\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { extractCategories, groupBy, DEFAULT_COLORS } from './utils';\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\n/** Seeded jitter for reproducible strip plot. */\nfunction jitter(seed: number): () => number {\n    let s = seed;\n    return () => {\n        s = (s * 1103515245 + 12345) & 0x7fffffff;\n        return (s / 0x7fffffff) * 2 - 1;\n    };\n}\n\nexport const ecStripPlotDef: ChartTemplateDef = {\n    chart: 'Strip Plot',\n    template: { mark: 'circle', encoding: {} },\n    channels: ['x', 'y', 'color', 'size', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: () => ({\n        paramOverrides: { defaultStepMultiplier: 2, minStep: 16 },\n    }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xCS = channelSemantics.x;\n        const yCS = channelSemantics.y;\n        const xField = xCS?.field;\n        const yField = yCS?.field;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xField || !yField) return;\n\n        const xIsDiscrete = isDiscrete(xCS?.type);\n        const yIsDiscrete = isDiscrete(yCS?.type);\n        const catAxis = xIsDiscrete ? 'x' : yIsDiscrete ? 'y' : 'x';\n        const contAxis = catAxis === 'x' ? 'y' : 'x';\n        const catField = catAxis === 'x' ? xField : yField;\n        const contField = contAxis === 'x' ? xField : yField;\n\n        const categories = extractCategories(table, catField!, (catAxis === 'x' ? xCS : yCS)?.ordinalSortOrder);\n        const catToIndex = new Map(categories.map((c, i) => [c, i]));\n        const jitterWidth = (chartProperties?.stepWidth ?? 20) * 0.8;\n        const rand = jitter(42);\n\n        const option: any = {\n            tooltip: { trigger: 'item' },\n            xAxis: {\n                type: 'category',\n                data: categories,\n                name: catField,\n                nameLocation: 'middle',\n                nameGap: 30,\n            },\n            yAxis: {\n                type: 'value',\n                name: contField,\n                nameLocation: 'middle',\n                nameGap: 40,\n            },\n            series: [],\n        };\n\n        if (catAxis === 'y') {\n            option.xAxis = { type: 'value', name: contField, nameLocation: 'middle', nameGap: 30 };\n            option.yAxis = { type: 'category', data: categories, name: catField, nameLocation: 'middle', nameGap: 40 };\n        }\n\n        const buildPoint = (row: any) => {\n            const cat = String(row[catField!] ?? '');\n            const idx = catToIndex.get(cat) ?? 0;\n            const offset = rand() * jitterWidth;\n            const x = catAxis === 'x' ? idx + offset : row[contField];\n            const y = catAxis === 'y' ? idx + offset : row[contField];\n            return [x, y];\n        };\n\n        if (colorField) {\n            const groups = groupBy(table, colorField);\n            option.legend = { data: [...groups.keys()] };\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                option.series.push({\n                    name,\n                    type: 'scatter',\n                    data: rows.map(buildPoint),\n                    itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length], opacity: 0.7 },\n                    symbolSize: 8,\n                });\n                colorIdx++;\n            }\n        } else {\n            option.series.push({\n                type: 'scatter',\n                data: table.map(buildPoint),\n                itemStyle: { opacity: 0.7 },\n                symbolSize: 8,\n            });\n        }\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/line.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Line Chart template (supports multi-series).\n *\n * Contrast with VL:\n *   VL: encoding.x + encoding.y + encoding.color → auto-groups into separate lines\n *   EC: explicit series[] with each series.data = [v1, v2, ...] aligned to xAxis.data\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, groupBy, DEFAULT_COLORS, getCategoryOrder } from './utils';\nimport { toTypeString } from '../../core/field-semantics';\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\nconst interpolateMap: Record<string, string> = {\n    'linear': 'linear',       // default\n    'monotone': 'monotone',   // ECharts smooth: true approximates this\n    'step': 'step',\n    'step-before': 'stepBefore',   // Not directly supported; mapped\n    'step-after': 'stepAfter',     // Not directly supported; mapped\n    'basis': 'smooth',\n    'cardinal': 'smooth',\n    'catmull-rom': 'smooth',\n};\n\nexport const ecLineChartDef: ChartTemplateDef = {\n    chart: 'Line Chart',\n    template: { mark: 'line', encoding: {} },\n    channels: ['x', 'y', 'color', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xCS = channelSemantics.x;\n        const yCS = channelSemantics.y;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xCS?.field || !yCS?.field) return;\n        const xField = xCS.field;\n        const yField = yCS.field;\n\n        // Determine x-axis type\n        const xIsDiscrete = isDiscrete(xCS.type);\n        const xIsTemporal = xCS.type === 'temporal';\n\n        // Build x-axis categories for discrete/temporal axes\n        const categories = xIsDiscrete ? extractCategories(table, xField, getCategoryOrder(ctx, 'x')) : undefined;\n\n        const option: any = {\n            tooltip: {\n                trigger: 'axis',\n            },\n            xAxis: {\n                type: xIsDiscrete ? 'category' : xIsTemporal ? 'time' : 'value',\n                name: xField,\n                nameLocation: 'middle',\n                nameGap: 30,\n                ...(categories ? { data: categories } : {}),\n            },\n            yAxis: {\n                type: 'value',\n                name: yField,\n                nameLocation: 'middle',\n                nameGap: 40,\n            },\n            series: [],\n        };\n        option._encodingTooltip = { trigger: 'axis', categoryLabel: xField, valueLabel: yField };\n\n        // Apply zero-baseline\n        // ECharts: scale=true means \"data-fit\", scale=false means \"include zero\"\n        if (channelSemantics.y?.zero) {\n            option.yAxis.scale = !channelSemantics.y.zero.zero;\n        }\n\n        // Interpolation / smooth\n        const interpolate = chartProperties?.interpolate;\n        const smooth = interpolate === 'monotone' || interpolate === 'basis' ||\n                        interpolate === 'cardinal' || interpolate === 'catmull-rom';\n        const step = interpolate === 'step' ? 'middle'\n                   : interpolate === 'step-before' ? 'start'\n                   : interpolate === 'step-after' ? 'end'\n                   : undefined;\n\n        if (colorField) {\n            // Multi-series line chart\n            const groups = groupBy(table, colorField);\n            option.legend = { data: [...groups.keys()] };\n\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const seriesData = xIsDiscrete\n                    ? buildCategoryAlignedData(rows, xField, yField, categories!)\n                    : rows.map(r => [r[xField], r[yField]]);\n\n                const series: any = {\n                    name,\n                    type: 'line',\n                    data: seriesData,\n                    itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length] },\n                };\n                if (smooth) series.smooth = true;\n                if (step) series.step = step;\n\n                option.series.push(series);\n                colorIdx++;\n            }\n        } else {\n            // Single series\n            const seriesData = xIsDiscrete\n                ? categories!.map(cat => {\n                    const row = table.find(r => String(r[xField]) === cat);\n                    return row ? row[yField] : null;\n                })\n                : table.map(r => [r[xField], r[yField]]);\n\n            const series: any = { type: 'line', data: seriesData };\n            if (smooth) series.smooth = true;\n            if (step) series.step = step;\n\n            option.series.push(series);\n        }\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'interpolate', label: 'Curve', type: 'discrete', options: [\n                { value: undefined, label: 'Default (linear)' },\n                { value: 'linear', label: 'Linear' },\n                { value: 'monotone', label: 'Monotone (smooth)' },\n                { value: 'step', label: 'Step' },\n                { value: 'step-before', label: 'Step Before' },\n                { value: 'step-after', label: 'Step After' },\n            ],\n        } as ChartPropertyDef,\n    ],\n};\n\n/**\n * For category-axis line charts, align series data to the shared category array.\n * Returns an array of y-values (or null) indexed by category position.\n */\nfunction buildCategoryAlignedData(\n    rows: any[],\n    xField: string,\n    yField: string,\n    categories: string[],\n): (number | null)[] {\n    // Build a map: category → y value\n    const map = new Map<string, number>();\n    for (const row of rows) {\n        map.set(String(row[xField]), row[yField]);\n    }\n    return categories.map(cat => map.get(cat) ?? null);\n}\n\n/** RANK_SEMANTIC_TYPES: used to detect rank axis for Bump Chart (mirror vegalite/templates/bump.ts). */\nconst RANK_SEMANTIC_TYPES = new Set(['Rank', 'Index', 'Score', 'Rating', 'Level']);\n\n/**\n * Dotted Line Chart — same as Line Chart with showSymbol and dashed line (mirror vegalite Dotted Line).\n */\nexport const ecDottedLineChartDef: ChartTemplateDef = {\n    chart: 'Dotted Line Chart',\n    template: { mark: 'line', encoding: {} },\n    channels: ['x', 'y', 'color', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xCS = channelSemantics.x;\n        const yCS = channelSemantics.y;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xCS?.field || !yCS?.field) return;\n        const xField = xCS.field;\n        const yField = yCS.field;\n\n        const xIsDiscrete = isDiscrete(xCS.type);\n        const xIsTemporal = xCS.type === 'temporal';\n        const categories = xIsDiscrete ? extractCategories(table, xField, getCategoryOrder(ctx, 'x')) : undefined;\n\n        const option: any = {\n            tooltip: { trigger: 'axis' },\n            xAxis: {\n                type: xIsDiscrete ? 'category' : xIsTemporal ? 'time' : 'value',\n                name: xField,\n                nameLocation: 'middle',\n                nameGap: 30,\n                ...(categories ? { data: categories } : {}),\n            },\n            yAxis: {\n                type: 'value',\n                name: yField,\n                nameLocation: 'middle',\n                nameGap: 40,\n            },\n            series: [],\n        };\n        option._encodingTooltip = { trigger: 'axis', categoryLabel: xField, valueLabel: yField };\n\n        if (channelSemantics.y?.zero) {\n            option.yAxis.scale = !channelSemantics.y.zero.zero;\n        }\n\n        const interpolate = chartProperties?.interpolate;\n        const smooth = interpolate === 'monotone' || interpolate === 'basis' ||\n                        interpolate === 'cardinal' || interpolate === 'catmull-rom';\n\n        const baseSeriesOpt = {\n            showSymbol: true,\n            symbol: 'circle',\n            symbolSize: 6,\n            lineStyle: { type: 'dashed' as const },\n            smooth: !!smooth,\n        };\n\n        if (colorField) {\n            const groups = groupBy(table, colorField);\n            option.legend = { data: [...groups.keys()] };\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const seriesData = xIsDiscrete\n                    ? buildCategoryAlignedData(rows, xField, yField, categories!)\n                    : rows.map(r => [r[xField], r[yField]]);\n                option.series.push({\n                    name,\n                    type: 'line',\n                    data: seriesData,\n                    ...baseSeriesOpt,\n                    itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length] },\n                });\n                colorIdx++;\n            }\n        } else {\n            const seriesData = xIsDiscrete\n                ? categories!.map(cat => {\n                    const row = table.find(r => String(r[xField]) === cat);\n                    return row ? row[yField] : null;\n                })\n                : table.map(r => [r[xField], r[yField]]);\n            option.series.push({ type: 'line', data: seriesData, ...baseSeriesOpt });\n        }\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n\n/**\n * Bump Chart — line with points, rank axis reversed when y is rank-like (mirror vegalite/templates/bump.ts).\n */\nexport const ecBumpChartDef: ChartTemplateDef = {\n    chart: 'Bump Chart',\n    template: { mark: 'line', encoding: {} },\n    channels: ['x', 'y', 'color', 'detail', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 80, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, semanticTypes } = ctx;\n        const xCS = channelSemantics.x;\n        const yCS = channelSemantics.y;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xCS?.field || !yCS?.field) return;\n        const xField = xCS.field;\n        const yField = yCS.field;\n\n        const ySemType = toTypeString(semanticTypes?.[yField]);\n        const xSemType = toTypeString(semanticTypes?.[xField]);\n        const yIsRank = RANK_SEMANTIC_TYPES.has(ySemType);\n        const xIsRank = RANK_SEMANTIC_TYPES.has(xSemType);\n        const rankOnY = yIsRank && !xIsRank;\n        const rankOnX = xIsRank && !yIsRank;\n\n        const xIsDiscrete = isDiscrete(xCS.type);\n        const categories = xIsDiscrete ? extractCategories(table, xField, getCategoryOrder(ctx, 'x')) : undefined;\n\n        const option: any = {\n            tooltip: { trigger: 'axis' },\n            xAxis: {\n                type: xIsDiscrete ? 'category' : 'value',\n                name: xField,\n                nameLocation: 'middle',\n                nameGap: 30,\n                ...(categories ? { data: categories } : {}),\n            },\n            yAxis: {\n                type: 'value',\n                name: yField,\n                nameLocation: 'middle',\n                nameGap: 40,\n                inverse: !!rankOnY,\n            },\n            series: [],\n        };\n        option._encodingTooltip = { trigger: 'axis', categoryLabel: xField, valueLabel: yField };\n\n        const baseSeriesOpt = { showSymbol: true, symbolSize: 6, smooth: true };\n\n        if (colorField) {\n            const groups = groupBy(table, colorField);\n            option.legend = { data: [...groups.keys()] };\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const seriesData = xIsDiscrete\n                    ? buildCategoryAlignedData(rows, xField, yField, categories!)\n                    : (rankOnX ? [...rows].sort((a, b) => Number(a[xField]) - Number(b[xField])) : rows)\n                        .map(r => [r[xField], r[yField]]);\n                option.series.push({\n                    name,\n                    type: 'line',\n                    data: seriesData,\n                    ...baseSeriesOpt,\n                    itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length] },\n                });\n                colorIdx++;\n            }\n        } else {\n            let rows = table;\n            if (rankOnX) rows = [...rows].sort((a, b) => Number(a[xField]) - Number(b[xField]));\n            const seriesData = xIsDiscrete\n                ? categories!.map(cat => {\n                    const row = rows.find(r => String(r[xField]) === cat);\n                    return row ? row[yField] : null;\n                })\n                : rows.map(r => [r[xField], r[yField]]);\n            option.series.push({ type: 'line', data: seriesData, ...baseSeriesOpt });\n        }\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/lollipop.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Lollipop Chart — rule from 0 to value + dot at end (mirror vegalite/templates/lollipop.ts).\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, DEFAULT_COLORS } from './utils';\nimport { detectAxes } from './utils';\nimport { detectBandedAxisFromSemantics } from '../../vegalite/templates/utils';\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\nexport const ecLollipopChartDef: ChartTemplateDef = {\n    chart: 'Lollipop Chart',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'y', 'color', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisFromSemantics(cs, table, { preferAxis: 'x' });\n        return {\n            axisFlags: result ? { [result.axis]: { banded: true } } : { x: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n        };\n    },\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const { categoryAxis, valueAxis } = detectAxes(channelSemantics);\n\n        const catField = channelSemantics[categoryAxis]?.field;\n        const valField = channelSemantics[valueAxis]?.field;\n        if (!catField || !valField) return;\n\n        const catCS = channelSemantics[categoryAxis];\n        const categories = extractCategories(table, catField, catCS?.ordinalSortOrder);\n\n        const valueMap = new Map<string, number>();\n        for (const row of table) {\n            const cat = String(row[catField] ?? '');\n            const val = row[valField];\n            if (val != null && !isNaN(val)) {\n                valueMap.set(cat, (valueMap.get(cat) ?? 0) + Number(val));\n            }\n        }\n        const values = categories.map(cat => valueMap.get(cat) ?? null);\n\n        const isHorizontal = categoryAxis === 'y';\n        const dotSize = chartProperties?.dotSize ?? 80;\n        const barWidth = Math.max(2, Math.min(8, dotSize / 10));\n\n        const option: any = {\n            tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },\n            xAxis: isHorizontal\n                ? { type: 'value', name: valField }\n                : { type: 'category', data: categories, name: catField },\n            yAxis: isHorizontal\n                ? { type: 'category', data: categories, name: catField }\n                : { type: 'value', name: valField },\n            series: [\n                {\n                    type: 'bar',\n                    data: values,\n                    barWidth,\n                    itemStyle: { color: '#5470c6' },\n                },\n                {\n                    type: 'scatter',\n                    data: categories.map((cat, i) => {\n                        const v = values[i];\n                        return isHorizontal ? [v, cat] : [cat, v];\n                    }),\n                    symbolSize: Math.min(20, dotSize / 4),\n                    itemStyle: { color: '#5470c6', borderColor: '#fff', borderWidth: 1 },\n                    z: 2,\n                },\n            ],\n        };\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'dotSize', label: 'Dot Size', type: 'continuous', min: 20, max: 300, step: 10, defaultValue: 80 },\n    ] as ChartPropertyDef[],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/pie.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Pie Chart template.\n *\n * Contrast with VL:\n *   VL: mark = \"arc\" with theta (angular extent) + color (slice groups)\n *   EC: series type = 'pie' with data = [{ name, value }, ...]\n *\n * Pie charts have no axes — a fundamentally different layout from bar/line/scatter.\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, DEFAULT_COLORS, computeCircumferencePressure, computeEffectiveBarCount } from './utils';\n\nexport const ecPieChartDef: ChartTemplateDef = {\n    chart: 'Pie Chart',\n    template: { mark: 'arc', encoding: {} },\n    channels: ['size', 'color', 'column', 'row'],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const colorField = channelSemantics.color?.field;\n        const sizeField = channelSemantics.size?.field;\n\n        // Build pie data: { name, value } pairs\n        const pieData: { name: string; value: number }[] = [];\n\n        if (colorField && sizeField) {\n            // color = category (slice label), size = measure (slice value)\n            // Aggregate: sum values per category\n            const agg = new Map<string, number>();\n            for (const row of table) {\n                const cat = String(row[colorField] ?? '');\n                const val = Number(row[sizeField]) || 0;\n                agg.set(cat, (agg.get(cat) ?? 0) + val);\n            }\n            // Preserve ordinal sort if available\n            const categories = extractCategories(table, colorField, channelSemantics.color?.ordinalSortOrder);\n            for (const cat of categories) {\n                pieData.push({ name: cat, value: agg.get(cat) ?? 0 });\n            }\n        } else if (colorField) {\n            // No size field → count occurrences per category\n            const counts = new Map<string, number>();\n            for (const row of table) {\n                const cat = String(row[colorField] ?? '');\n                counts.set(cat, (counts.get(cat) ?? 0) + 1);\n            }\n            const categories = extractCategories(table, colorField, channelSemantics.color?.ordinalSortOrder);\n            for (const cat of categories) {\n                pieData.push({ name: cat, value: counts.get(cat) ?? 0 });\n            }\n        } else if (sizeField) {\n            // Only size field, no categories\n            for (const row of table) {\n                const val = Number(row[sizeField]) || 0;\n                pieData.push({ name: String(val), value: val });\n            }\n        }\n\n        const innerRadius = chartProperties?.innerRadius ?? 0;\n\n        // ── Circumference-pressure sizing (spring model) ──────────────\n        // Pie slices have variable width — use effective bar count based\n        // on the smallest slice to determine worst-case pressure.\n        const sliceValues = pieData.map(d => d.value);\n        const effectiveCount = computeEffectiveBarCount(sliceValues);\n        const { radius: pressureRadius, canvasW: rawCanvasW, canvasH }\n            = computeCircumferencePressure(effectiveCount, ctx.canvasSize, {\n                minArcPx: 45,\n                minRadius: 60,\n                maxStretch: ctx.assembleOptions?.maxStretch,\n                margin: 50,   // extra room for pie label lines + text\n            });\n\n        const canvasW = rawCanvasW;\n\n        // ── Adaptive label sizing ─────────────────────────────────────\n        // Scale font size and label width based on slice count so that\n        // labels stay readable without crowding.\n        const n = pieData.length;\n        const labelFontSize = n <= 4 ? 13 : n <= 8 ? 11 : n <= 15 ? 10 : 9;\n\n        // Label width budget: available space outside the pie on each side.\n        // Shrink pie more when there are many slices to leave label room.\n        const radiusFraction = n <= 4 ? 0.70 : n <= 8 ? 0.60 : n <= 15 ? 0.55 : 0.50;\n        const labelBudget = Math.max(40, Math.round((canvasW - 40) / 2 * (1 - radiusFraction)));\n\n        // Pie radius\n        const outerRadiusPx = Math.max(60, Math.round(\n            Math.min(pressureRadius,\n                (canvasW - 40) / 2 * radiusFraction,\n                (canvasH - 40) / 2 * radiusFraction)));\n        const outerRadius = `${outerRadiusPx}px`;\n\n        const categoryLabel = colorField ?? 'Category';\n        const valueLabel = sizeField ?? 'Value';\n        const option: any = {\n            tooltip: { trigger: 'item' },\n            _encodingTooltip: {\n                trigger: 'item',\n                parts: [\n                    { from: 'name', label: categoryLabel },\n                    { from: 'value', label: valueLabel, format: 'number' },\n                ],\n            },\n            series: [{\n                type: 'pie',\n                radius: innerRadius > 0\n                    ? [`${Math.round(outerRadiusPx * innerRadius / 100)}px`, outerRadius]\n                    : ['0%', outerRadius],\n                center: ['50%', '50%'],\n                data: pieData,\n                emphasis: {\n                    itemStyle: {\n                        shadowBlur: 10,\n                        shadowOffsetX: 0,\n                        shadowColor: 'rgba(0, 0, 0, 0.5)',\n                    },\n                },\n                label: {\n                    show: true,\n                    formatter: '{b}: {d}%',\n                    fontSize: labelFontSize,\n                    width: labelBudget,\n                    overflow: 'break',     // word-wrap long labels\n                },\n                labelLine: {\n                    show: true,\n                },\n                itemStyle: {\n                    borderRadius: chartProperties?.cornerRadius ?? 0,\n                },\n            }],\n            // Assign colors\n            color: DEFAULT_COLORS,\n        };\n\n        // Canvas size from context\n        option._width = canvasW;\n        option._height = canvasH;\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'innerRadius', label: 'Donut', type: 'continuous', min: 0, max: 60, step: 5, defaultValue: 0 } as ChartPropertyDef,\n        { key: 'cornerRadius', label: 'Corners', type: 'continuous', min: 0, max: 10, step: 1, defaultValue: 0 } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/pyramid.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Pyramid Chart — horizontal bar symmetric (mirror vegalite/templates/bar.ts pyramidChartDef).\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { extractCategories } from './utils';\n\nexport const ecPyramidChartDef: ChartTemplateDef = {\n    chart: 'Pyramid Chart',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'y', 'color'],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: () => ({ axisFlags: { y: { banded: true } } }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table } = ctx;\n        const xCS = channelSemantics.x;\n        const yCS = channelSemantics.y;\n        const xField = xCS?.field;\n        const yField = yCS?.field;\n        if (!xField || !yField) return;\n\n        const yDiscrete = yCS?.type === 'nominal' || yCS?.type === 'ordinal';\n        const catField = yDiscrete ? yField : xField;\n        const valField = yDiscrete ? xField : yField;\n\n        const categories = extractCategories(table, catField, yCS?.ordinalSortOrder);\n        const valueMap = new Map<string, number>();\n        for (const row of table) {\n            const cat = String(row[catField] ?? '');\n            const v = row[valField];\n            if (v != null && !isNaN(v)) valueMap.set(cat, (valueMap.get(cat) ?? 0) + Number(v));\n        }\n        const values = categories.map(cat => valueMap.get(cat) ?? 0);\n\n        const option: any = {\n            tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },\n            xAxis: {\n                type: 'value',\n                name: valField,\n                axisLabel: { formatter: (v: number) => Math.abs(v).toString() },\n            },\n            yAxis: { type: 'category', data: categories, name: catField },\n            series: [\n                { type: 'bar', data: values.map(v => -v), itemStyle: { color: '#4e79a7' }, barGap: '-100%' },\n                { type: 'bar', data: values, itemStyle: { color: '#e15759' } },\n            ],\n        };\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/radar.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Radar Chart template.\n *\n * Contrast with VL:\n *   VL: No native radar — the VL template manually computes polar coordinates\n *       using trig and draws with layered point/line/rule marks.\n *   EC: Native radar series with polar coordinate system — much simpler.\n *       ECharts handles the axis spokes, grid rings, and polar projection natively.\n *\n * Data model (long format):\n *   x (nominal): metric / axis name\n *   y (quantitative): value for that metric\n *   color (nominal): entity / group\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, groupBy, DEFAULT_COLORS, computeCircumferencePressure } from './utils';\n\n/** Round up to a nice ceiling for radar axis max. */\nfunction niceMax(v: number): number {\n    if (v <= 0) return 1;\n    const pow = Math.pow(10, Math.floor(Math.log10(v)));\n    const mantissa = v / pow;\n    const nice = mantissa <= 1 ? 1\n        : mantissa <= 2 ? 2\n        : mantissa <= 2.5 ? 2.5\n        : mantissa <= 5 ? 5\n        : 10;\n    return nice * pow;\n}\n\nexport const ecRadarChartDef: ChartTemplateDef = {\n    chart: 'Radar Chart',\n    template: { mark: 'point', encoding: {} },\n    channels: ['x', 'y', 'color', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const axisField = channelSemantics.x?.field;   // metric names\n        const valueField = channelSemantics.y?.field;   // metric values\n        const groupField = channelSemantics.color?.field; // entities\n\n        if (!axisField || !valueField) return;\n\n        // Extract unique metrics (radar axes)\n        const metrics = extractCategories(table, axisField, channelSemantics.x?.ordinalSortOrder);\n        if (metrics.length < 2) return;\n\n        // Compute max value per metric for axis scaling\n        const metricMax = new Map<string, number>();\n        for (const m of metrics) {\n            const vals = table\n                .filter(r => String(r[axisField]) === m)\n                .map(r => Number(r[valueField]))\n                .filter(v => isFinite(v));\n            metricMax.set(m, niceMax(vals.length > 0 ? Math.max(...vals) : 1));\n        }\n\n        // Build radar indicator (axis) definitions\n        const indicator = metrics.map(m => ({\n            name: m,\n            max: metricMax.get(m) || 1,\n        }));\n\n        // Build series data\n        const filled = chartProperties?.filled !== false;\n        const fillOpacity = chartProperties?.fillOpacity ?? 0.3;\n\n        const seriesData: any[] = [];\n        const legendData: string[] = [];\n\n        if (groupField) {\n            // Multi-group: one polygon per group\n            const groups = groupBy(table, groupField);\n\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                legendData.push(name);\n\n                // Aggregate: mean per metric\n                const metricVals = new Map<string, { sum: number; count: number }>();\n                for (const row of rows) {\n                    const m = String(row[axisField]);\n                    const v = Number(row[valueField]) || 0;\n                    if (!metricVals.has(m)) metricVals.set(m, { sum: 0, count: 0 });\n                    const entry = metricVals.get(m)!;\n                    entry.sum += v;\n                    entry.count++;\n                }\n\n                const values = metrics.map(m => {\n                    const entry = metricVals.get(m);\n                    return entry ? Math.round((entry.sum / entry.count) * 100) / 100 : 0;\n                });\n\n                seriesData.push({\n                    name,\n                    value: values,\n                    itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length] },\n                    areaStyle: filled ? { opacity: fillOpacity } : undefined,\n                });\n                colorIdx++;\n            }\n        } else {\n            // Single group\n            const metricVals = new Map<string, { sum: number; count: number }>();\n            for (const row of table) {\n                const m = String(row[axisField]);\n                const v = Number(row[valueField]) || 0;\n                if (!metricVals.has(m)) metricVals.set(m, { sum: 0, count: 0 });\n                const entry = metricVals.get(m)!;\n                entry.sum += v;\n                entry.count++;\n            }\n\n            const values = metrics.map(m => {\n                const entry = metricVals.get(m);\n                return entry ? Math.round((entry.sum / entry.count) * 100) / 100 : 0;\n            });\n\n            seriesData.push({\n                value: values,\n                areaStyle: filled ? { opacity: fillOpacity } : undefined,\n            });\n        }\n\n        // ── Circumference-pressure sizing (spring model) ──────────────\n        // Radar: uniform spokes — each metric is one \"bar\".\n        // Spokes need more spacing for axis labels than pie/rose.\n        const { radius: pressureRadius, canvasW, canvasH }\n            = computeCircumferencePressure(metrics.length, ctx.canvasSize, {\n                minArcPx: 60,  // spokes need more spacing for axis labels\n                minRadius: 80,\n                maxStretch: ctx.assembleOptions?.maxStretch,\n            });\n\n        const option: any = {\n            tooltip: { trigger: 'item' },\n            radar: {\n                indicator,\n                shape: chartProperties?.shape === 'circle' ? 'circle' : 'polygon',\n                radius: pressureRadius,\n            },\n            series: [{\n                type: 'radar',\n                data: seriesData,\n                emphasis: {\n                    lineStyle: { width: 3 },\n                },\n            }],\n            // Enforce minimum canvas for radar readability\n            _width: canvasW,\n            _height: canvasH,\n        };\n\n        if (legendData.length > 0) {\n            option.legend = { data: legendData };\n        }\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'shape', label: 'Grid', type: 'discrete', options: [\n                { value: undefined, label: 'Polygon (default)' },\n                { value: 'circle', label: 'Circle' },\n            ],\n        } as ChartPropertyDef,\n        {\n            key: 'filled', label: 'Fill', type: 'discrete', options: [\n                { value: true, label: 'Filled (default)' },\n                { value: false, label: 'Outline only' },\n            ],\n        } as ChartPropertyDef,\n        { key: 'fillOpacity', label: 'Opacity', type: 'continuous', min: 0.05, max: 0.8, step: 0.05, defaultValue: 0.3 } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/ranged-dot.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Ranged Dot Plot — line segments + points (mirror vegalite/templates/scatter.ts rangedDotPlotDef).\n * Expects x (e.g. category), y (value); optional color. Renders as line + scatter.\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { extractCategories, groupBy, DEFAULT_COLORS } from './utils';\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\nexport const ecRangedDotPlotDef: ChartTemplateDef = {\n    chart: 'Ranged Dot Plot',\n    template: { mark: 'line', encoding: {} },\n    channels: ['x', 'y', 'color'],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table } = ctx;\n        const xField = channelSemantics.x?.field;\n        const yField = channelSemantics.y?.field;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xField || !yField) return;\n\n        const xIsDiscrete = isDiscrete(channelSemantics.x?.type);\n        const categories = xIsDiscrete ? extractCategories(table, xField, channelSemantics.x?.ordinalSortOrder) : undefined;\n\n        const option: any = {\n            tooltip: { trigger: 'item' },\n            xAxis: {\n                type: xIsDiscrete ? 'category' : 'value',\n                name: xField,\n                nameLocation: 'middle',\n                nameGap: 30,\n                ...(categories ? { data: categories } : {}),\n            },\n            yAxis: { type: 'value', name: yField, nameLocation: 'middle', nameGap: 40 },\n            series: [],\n        };\n\n        if (colorField) {\n            const groups = groupBy(table, colorField);\n            option.legend = { data: [...groups.keys()] };\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const lineData = xIsDiscrete\n                    ? categories!.map(cat => {\n                        const row = rows.find((r: any) => String(r[xField]) === cat);\n                        return row ? row[yField] : null;\n                    })\n                    : rows.map((r: any) => [r[xField], r[yField]]);\n                const scatterData = xIsDiscrete\n                    ? categories!.map((cat, i) => [cat, lineData[i]])\n                    : lineData;\n                option.series.push({ name, type: 'line', data: lineData, showSymbol: false, itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length] } });\n                option.series.push({ name: `${name} pts`, type: 'scatter', data: scatterData, symbolSize: 8, itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length] } });\n                colorIdx++;\n            }\n        } else {\n            const lineData = xIsDiscrete\n                ? categories!.map(cat => {\n                    const row = table.find((r: any) => String(r[xField]) === cat);\n                    return row ? row[yField] : null;\n                })\n                : table.map((r: any) => [r[xField], r[yField]]);\n            const scatterData = xIsDiscrete\n                ? categories!.map((cat, i) => [cat, lineData[i]])\n                : lineData;\n            option.series.push({ type: 'line', data: lineData, showSymbol: false });\n            option.series.push({ type: 'scatter', data: scatterData, symbolSize: 8 });\n        }\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/rose.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Rose Chart (Nightingale / Coxcomb) template.\n *\n * Contrast with VL:\n *   VL: mark = \"arc\" with theta (angular extent fixed per slice) + radius (value)\n *   EC: series type = 'bar' with coordinateSystem = 'polar',\n *       angleAxis (categorical — directions/categories) +\n *       radiusAxis (value — the measure mapped to wedge radius).\n *\n * Data model (long format):\n *   x (nominal): angular category (direction, month, etc.)\n *   y (quantitative): value mapped to wedge radius\n *   color (nominal, optional): stack / group variable\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, groupBy, DEFAULT_COLORS, computeCircumferencePressure } from './utils';\n\nexport const ecRoseChartDef: ChartTemplateDef = {\n    chart: 'Rose Chart',\n    template: { mark: 'arc', encoding: {} },\n    channels: ['x', 'y', 'color', 'column', 'row'],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table } = ctx;\n        const catField = channelSemantics.x?.field;   // angular categories\n        const valField = channelSemantics.y?.field;    // wedge radius value\n        const colorField = channelSemantics.color?.field; // stack groups\n\n        if (!catField || !valField) return;\n\n        // Extract unique angular categories (directions, months, etc.)\n        const categories = extractCategories(table, catField, channelSemantics.x?.ordinalSortOrder);\n        if (categories.length === 0) return;\n\n        // Build series data\n        const seriesArr: any[] = [];\n        const legendData: string[] = [];\n\n        if (colorField) {\n            // Stacked rose: one series per color group\n            const groups = groupBy(table, colorField);\n\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                legendData.push(name);\n\n                // Aggregate: sum per category\n                const catAgg = new Map<string, number>();\n                for (const row of rows) {\n                    const cat = String(row[catField] ?? '');\n                    const val = Number(row[valField]) || 0;\n                    catAgg.set(cat, (catAgg.get(cat) ?? 0) + val);\n                }\n\n                const values = categories.map(c => catAgg.get(c) ?? 0);\n\n                seriesArr.push({\n                    type: 'bar',\n                    name,\n                    data: values,\n                    coordinateSystem: 'polar',\n                    stack: 'rose',\n                    itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length] },\n                    emphasis: { focus: 'series' },\n                });\n                colorIdx++;\n            }\n        } else {\n            // Single series: one value per category\n            const catAgg = new Map<string, number>();\n            for (const row of table) {\n                const cat = String(row[catField] ?? '');\n                const val = Number(row[valField]) || 0;\n                catAgg.set(cat, (catAgg.get(cat) ?? 0) + val);\n            }\n\n            const values = categories.map(c => catAgg.get(c) ?? 0);\n\n            seriesArr.push({\n                type: 'bar',\n                data: values,\n                coordinateSystem: 'polar',\n                itemStyle: { color: DEFAULT_COLORS[0] },\n            });\n        }\n\n        // Alignment: 'center' puts wedge center at 12 o'clock,\n        // 'left' puts wedge left edge at 12 o'clock.\n        const alignment = ctx.chartProperties?.alignment ?? 'left';\n        const n = categories.length;\n        // ECharts angleAxis: startAngle is where the first wedge's LEFT edge begins,\n        // and categories proceed clockwise (decreasing angle).\n        // Left alignment: startAngle=90 → left edge at top.\n        // Center alignment: shift forward (increase) by half a wedge so the center lands at top.\n        const startAngle = alignment === 'center' && n > 0\n            ? 90 + 180 / n\n            : 90;\n\n        const hasLegend = legendData.length > 0;\n\n        // Estimate legend width from label text\n        const maxLabelLen = hasLegend ? Math.max(...legendData.map(d => d.length), 3) : 0;\n        const estimatedLegendWidth = hasLegend ? Math.min(150, maxLabelLen * 7 + 40) : 0;\n\n        // ── Circumference-pressure sizing (spring model) ──────────────\n        // Rose: uniform angular width — each petal is one \"bar\".\n        const { radius: pressureRadius, canvasW: rawCanvasW, canvasH }\n            = computeCircumferencePressure(categories.length, ctx.canvasSize, {\n                minArcPx: 45,\n                minRadius: 80,\n                maxStretch: ctx.assembleOptions?.maxStretch,\n            });\n\n        // Canvas size — grow width to fit legend without squeezing the chart\n        const canvasW = rawCanvasW + (hasLegend ? estimatedLegendWidth : 0);\n\n        // Shrink polar radius and shift center left to leave room for legend\n        const polarRadius = hasLegend\n            ? Math.min(pressureRadius, (canvasW - estimatedLegendWidth - 40) / 2, (canvasH - 40) / 2)\n            : pressureRadius;\n        const polarCenter = hasLegend\n            ? [`${Math.round((canvasW - estimatedLegendWidth) / 2)}px`, '50%']\n            : undefined;\n\n        const option: any = {\n            tooltip: {\n                trigger: 'item',\n            },\n            angleAxis: {\n                type: 'category',\n                data: categories,\n                startAngle,\n            },\n            radiusAxis: {\n                // hide axis line for cleaner look\n                axisLine: { show: false },\n                axisTick: { show: false },\n            },\n            polar: {\n                radius: polarRadius,\n                ...(polarCenter != null ? { center: polarCenter } : {}),\n            },\n            series: seriesArr,\n            color: DEFAULT_COLORS,\n            // Canvas size\n            _width: canvasW,\n            _height: canvasH,\n        };\n\n        if (hasLegend) {\n            option.legend = {\n                data: legendData,\n                type: legendData.length > 8 ? 'scroll' : 'plain',\n                orient: 'vertical',\n                right: 10,\n                top: 'middle',\n                textStyle: { fontSize: 11 },\n            };\n        }\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'alignment', label: 'Alignment', type: 'discrete', options: [\n                { value: 'left', label: 'Left (default)' },\n                { value: 'center', label: 'Center' },\n            ],\n        } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/sankey.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Sankey Diagram template.\n *\n * Unique to ECharts — no Vega-Lite equivalent.\n * Displays flow/transfer data as a node-link diagram where link width\n * encodes flow magnitude.\n *\n * Data model (each row = one flow link):\n *   x    (nominal): source node name\n *   y    (nominal): target node name\n *   size (quantitative): flow value / weight\n *\n * Nodes are auto-derived from unique source/target values.\n * Multiple rows with the same source→target pair are aggregated (sum).\n *\n * Scaling: uses the spring model separately for x and y, treating each\n * node block as a spring.  The x-axis counts source nodes (proxy for\n * layer width), y-axis counts target nodes (proxy for vertical stacking).\n * Large step multipliers ensure adequate space for edge routing between\n * node columns.\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { DEFAULT_COLORS } from './utils';\n\nexport const ecSankeyDef: ChartTemplateDef = {\n    chart: 'Sankey Diagram',\n    template: { mark: 'rect', encoding: {} },\n    channels: ['x', 'y', 'size'],\n    markCognitiveChannel: 'area',\n    declareLayoutMode: () => ({\n        axisFlags: {\n            x: { banded: true },\n            y: { banded: true },\n        },\n        paramOverrides: {\n            // Each node block needs generous space:\n            // x-step covers node width (~20px) + edge routing gap (~60px)\n            // y-step covers node height + nodeGap\n            defaultStepMultiplier: 3,\n        },\n    }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties, layout } = ctx;\n        const sourceField = channelSemantics.x?.field;   // source node\n        const targetField = channelSemantics.y?.field;    // target node\n        const valueField = channelSemantics.size?.field;  // flow value\n\n        if (!sourceField || !targetField) return;\n\n        // Aggregate links: source→target → sum(value)\n        const linkAgg = new Map<string, number>();\n        for (const row of table) {\n            const src = String(row[sourceField] ?? '');\n            const tgt = String(row[targetField] ?? '');\n            if (!src || !tgt || src === tgt) continue; // skip self-links\n            const key = `${src}\\x00${tgt}`;\n            const val = valueField ? (Number(row[valueField]) || 0) : 1;\n            linkAgg.set(key, (linkAgg.get(key) ?? 0) + val);\n        }\n\n        // Build links & collect unique nodes\n        const nodeSet = new Set<string>();\n        const links: { source: string; target: string; value: number }[] = [];\n        for (const [key, value] of linkAgg) {\n            const [source, target] = key.split('\\x00');\n            nodeSet.add(source);\n            nodeSet.add(target);\n            links.push({ source, target, value });\n        }\n\n        if (links.length === 0) return;\n\n        // Build nodes with colors\n        const nodeArr = [...nodeSet];\n        const nodes = nodeArr.map((name, i) => ({\n            name,\n            itemStyle: { color: DEFAULT_COLORS[i % DEFAULT_COLORS.length] },\n        }));\n\n        // ── Layout-driven sizing ─────────────────────────────────────────\n        // x-step × sourceCount → width (proxy for layer structure)\n        // y-step × targetCount → height (proxy for vertical stacking)\n        const sourceCount = layout.xNominalCount || new Set(table.map(r => String(r[sourceField]))).size;\n        const targetCount = layout.yNominalCount || new Set(table.map(r => String(r[targetField]))).size;\n\n        const nodeGap = chartProperties?.nodeGap ?? 10;\n        const nodeWidth = chartProperties?.nodeWidth ?? 20;\n\n        // Width: need room for source column + target column + edge routing\n        // Use xStep as \"per source node spacing\" — scale by max(2, layerEstimate)\n        const layerEstimate = 2; // typical sankey has at least 2 layers\n        const canvasW = Math.max(300,\n            layout.xStep * Math.max(sourceCount, layerEstimate) + 60);\n        // Height: need room for max stacking of nodes vertically\n        const maxNodesPerColumn = Math.max(sourceCount, targetCount);\n        const canvasH = Math.max(250,\n            layout.yStep * maxNodesPerColumn);\n\n        const orient = chartProperties?.orient ?? 'horizontal';\n\n        const margin = 30;\n        const option: any = {\n            tooltip: {\n                trigger: 'item',\n                triggerOn: 'mousemove',\n                formatter: (params: any) => {\n                    if (params.dataType === 'edge') {\n                        return `${params.data.source} → ${params.data.target}<br/>Value: ${params.data.value}`;\n                    }\n                    return params.name;\n                },\n            },\n            series: [{\n                type: 'sankey',\n                data: nodes,\n                links,\n                orient,\n                emphasis: {\n                    focus: 'adjacency',\n                },\n                lineStyle: {\n                    color: 'gradient',\n                    curveness: 0.5,\n                },\n                nodeWidth,\n                nodeGap,\n                label: {\n                    show: true,\n                    fontSize: 11,\n                },\n                left: margin,\n                right: margin,\n                top: 20,\n                bottom: 20,\n            }],\n            color: DEFAULT_COLORS,\n            _width: canvasW,\n            _height: canvasH,\n        };\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'orient', label: 'Orient', type: 'discrete', options: [\n                { value: 'horizontal', label: 'Horizontal (default)' },\n                { value: 'vertical', label: 'Vertical' },\n            ],\n        } as ChartPropertyDef,\n        { key: 'nodeWidth', label: 'Node Width', type: 'continuous', min: 5, max: 40, step: 5, defaultValue: 20 } as ChartPropertyDef,\n        { key: 'nodeGap', label: 'Node Gap', type: 'continuous', min: 2, max: 30, step: 2, defaultValue: 10 } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/scatter.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Scatter Plot template.\n *\n * Maps scatter semantics to ECharts series-based config:\n *   VL: encoding.x.field + encoding.y.field → positional channels\n *   EC: series[].data = [[x, y], [x, y], ...] with type: 'scatter'\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { formatTimestamp } from '../instantiate-spec';\nimport { DEFAULT_COLORS, groupBy, getCategoryOrder, extractCategories } from './utils';\n\n/** Compute a reasonable scatter symbolSize based on canvas area and point count. */\nfunction computeSymbolSize(width: number, height: number, pointCount: number): number {\n    // Target: each point occupies ~0.05% of canvas area (in px²), take sqrt for diameter.\n    // 50pts @ 400×300 → areaPerPt=2400, 2400*0.05=120, √120≈11 → 11\n    // 500pts @ 600×450 → areaPerPt=540,  540*0.05=27,  √27≈5   → 5\n    // 1000pts @ 400×300 → areaPerPt=120, 120*0.05=6,   √6≈2.4  → 3 (min)\n    const canvasArea = width * height;\n    const areaPerPoint = canvasArea / Math.max(1, pointCount);\n    const idealDiameter = Math.sqrt(areaPerPoint * 0.05);\n    return Math.max(3, Math.min(12, Math.round(idealDiameter)));\n}\n\nexport const ecScatterPlotDef: ChartTemplateDef = {\n    chart: 'Scatter Plot',\n    template: { mark: 'circle', encoding: {} },  // skeleton for compatibility\n    channels: ['x', 'y', 'color', 'size', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xField = channelSemantics.x?.field;\n        const yField = channelSemantics.y?.field;\n        const colorField = channelSemantics.color?.field;\n        const sizeField = channelSemantics.size?.field;\n        const sizeRange = (ctx.resolvedEncodings as any)?.size?.sizeRange as [number, number] | undefined;\n        const sizeType = channelSemantics.size?.type;\n\n        if (!xField || !yField) return;\n\n        // ECharts symbolSize is pixel diameter; buildECEncodings outputs sizeRange in pixels [4, 28]\n        const EC_SIZE_MIN = 4;\n        const EC_SIZE_MAX = 30;\n        let rangeMin = Math.max(EC_SIZE_MIN, Math.min(EC_SIZE_MAX, sizeRange?.[0] ?? 6));\n        let rangeMaxClamped = Math.max(EC_SIZE_MIN, Math.min(EC_SIZE_MAX, sizeRange?.[1] ?? 20));\n        rangeMaxClamped = Math.max(rangeMin, rangeMaxClamped);\n        // Fallback: ensure a visible spread if sizeRange was degenerate\n        if (rangeMaxClamped <= rangeMin) {\n            rangeMin = EC_SIZE_MIN;\n            rangeMaxClamped = EC_SIZE_MAX;\n        }\n\n        // VL: ordinal/nominal (Rank, Level, etc.) → ordered domain, map by index. Quantitative/temporal with many unique values → sqrt scale.\n        // When resolved type is quantitative but unique count is small (e.g. 4 levels), treat as discrete priority levels → ordinal by index.\n        // If type is missing/wrong but data are 2–12 discrete non-numeric levels (e.g. \"Low\",\"Medium\",\"High\",\"Critical\"), treat as ordinal.\n        const sizeUniqueCount = sizeField && table.length > 0\n            ? new Set(table.map((r: any) => String(r[sizeField]))).size\n            : 0;\n        const sizeValuesSample = sizeField && table.length > 0\n            ? table.slice(0, 50).map((r: any) => r[sizeField]).filter((v: any) => v != null)\n            : [];\n        const allSizeValuesNumeric = sizeValuesSample.length > 0 && sizeValuesSample.every((v: any) => !isNaN(Number(v)) && String(v).trim() !== '');\n        const useOrdinalSize =\n            sizeType === 'ordinal' ||\n            sizeType === 'nominal' ||\n            (sizeType === 'quantitative' && sizeUniqueCount >= 2 && sizeUniqueCount <= 12) ||\n            (sizeField && sizeUniqueCount >= 2 && sizeUniqueCount <= 12 && !allSizeValuesNumeric);\n\n        let scaleSize: (raw: number | string | null | undefined) => number;\n        let sizeOrderForLegend: string[] | undefined;\n        /** For quantitative size: data domain for size legend (VL-style). */\n        let sizeDomainMin: number | undefined;\n        let sizeDomainMax: number | undefined;\n\n        if (useOrdinalSize && sizeField) {\n            // Discrete levels (Rank, Level, etc.): ordered domain → size by index (VL ordinal scale).\n            // VL: sort = ordinalSortOrder when set, else sort = null → domain order = data encounter order.\n            // We align: getCategoryOrder(ctx, 'size') when present; otherwise extractCategories(..., undefined)\n            // preserves first-occurrence order, matching VL.\n            const sizeOrder = extractCategories(table, sizeField, getCategoryOrder(ctx, 'size'));\n            sizeOrderForLegend = sizeOrder;\n            const orderMap = new Map<string, number>(sizeOrder.map((val, i) => [String(val), i]));\n            const n = sizeOrder.length;\n            scaleSize = (raw: number | string | null | undefined): number => {\n                if (raw == null) return rangeMin;\n                const key = String(raw);\n                const index = orderMap.get(key);\n                if (index === undefined) return rangeMin;\n                const t = n > 1 ? index / (n - 1) : 0;\n                return Math.round(rangeMin + t * (rangeMaxClamped - rangeMin));\n            };\n        } else if (sizeField) {\n            // Continuous quantitative/temporal: sqrt scale over numeric domain (VL size scale type: sqrt, zero: true).\n            const vals = table\n                .map((r: any) => r[sizeField])\n                .map((v: any) => (v != null ? Number(v) : NaN))\n                .filter((v: number) => !isNaN(v));\n            const sizeMin = vals.length ? Math.min(...vals) : 0;\n            const sizeMax = vals.length ? Math.max(...vals) : 1;\n            sizeDomainMin = sizeMin;\n            sizeDomainMax = sizeMax;\n            scaleSize = (raw: number | string | null | undefined): number => {\n                const v = raw != null ? Number(raw) : NaN;\n                if (isNaN(v)) return rangeMin;\n                let t: number;\n                if (sizeMax === sizeMin) t = 0.5;\n                else {\n                    const sqrtMin = Math.sqrt(Math.max(0, sizeMin));\n                    const sqrtMax = Math.sqrt(Math.max(0, sizeMax));\n                    const sqrtV = Math.sqrt(Math.max(0, v));\n                    t = (sqrtV - sqrtMin) / (sqrtMax - sqrtMin);\n                }\n                t = Math.max(0, Math.min(1, t));\n                return Math.round(rangeMin + t * (rangeMaxClamped - rangeMin));\n            };\n        } else {\n            scaleSize = () => rangeMin;\n        }\n\n        // When ordinal size has a discrete order, use piecewise visualMap; when quantity, use continuous visualMap (scatter-aqi-color style).\n        const usePiecewiseSizeVisualMap = sizeOrderForLegend && sizeOrderForLegend.length > 0 && sizeField;\n        const useContinuousSizeVisualMap = sizeField != null && sizeDomainMin !== undefined && sizeDomainMax !== undefined;\n        const useVisualMapForSize = usePiecewiseSizeVisualMap || useContinuousSizeVisualMap;\n\n        // X/Y can be value (quantitative/temporal) or category (nominal/ordinal) — align with VL\n        const xType = channelSemantics.x?.type;\n        const yType = channelSemantics.y?.type;\n        const xIsCategorical = xType === 'nominal' || xType === 'ordinal';\n        const yIsCategorical = yType === 'nominal' || yType === 'ordinal';\n        const xCategories = xIsCategorical ? extractCategories(table, xField, getCategoryOrder(ctx, 'x')) : [];\n        const yCategories = yIsCategorical ? extractCategories(table, yField, getCategoryOrder(ctx, 'y')) : [];\n        const xCategoryToIndex = new Map<string, number>(xCategories.map((c, i) => [String(c), i]));\n        const yCategoryToIndex = new Map<string, number>(yCategories.map((c, i) => [String(c), i]));\n\n        // ECharts scatter uses direct data arrays\n        const option: any = {\n            tooltip: { trigger: 'item' },\n            xAxis: xIsCategorical\n                ? {\n                    type: 'category',\n                    data: xCategories,\n                    name: xField,\n                    nameLocation: 'middle',\n                    nameGap: 30,\n                    axisLabel: { interval: 0, rotate: 90 },\n                    axisTick: { show: true, alignWithLabel: true },\n                    axisLine: { show: true },\n                }\n                : { type: 'value', name: xField, nameLocation: 'middle', nameGap: 30 },\n            yAxis: yIsCategorical\n                ? {\n                    type: 'category',\n                    data: yCategories,\n                    name: yField,\n                    nameLocation: 'middle',\n                    nameGap: 40,\n                    axisLabel: { interval: 0, rotate: 0 },\n                    axisTick: { show: true, alignWithLabel: true },\n                    axisLine: { show: true },\n                }\n                : { type: 'value', name: yField, nameLocation: 'middle', nameGap: 40 },\n            series: [],\n        };\n\n        if (usePiecewiseSizeVisualMap) {\n            // Piecewise visualMap maps dimension 2 to symbolSize; hide default UI and use custom graphic legend (Vega-Lite style: different sized circles, label on the right).\n            option.visualMap = [\n                {\n                    type: 'piecewise',\n                    show: false,\n                    dimension: 2,\n                    pieces: sizeOrderForLegend!.map((name) => ({\n                        value: name,\n                        symbolSize: scaleSize(name),\n                    })),\n                    orient: 'vertical',\n                    right: 10,\n                    top: 'center',\n                    itemGap: 8,\n                    itemSymbol: 'circle',\n                    formatter: (value: string) => value,\n                    title: sizeField,\n                },\n            ];\n            option._visualMapWidth = 88;\n            // One group for the whole legend; all coordinates use left/top so text aligns left\n            const ordLegendRight = 28;\n            const ordGap = 8;\n            const ordRowGap = 6;\n            const ordFontSize = 10;\n            const ordTitleHeight = 20;\n            const ordLabelWidth = 44;\n            const canvasH = ctx.canvasSize?.height ?? 300;\n            const maxCircleR = Math.max(...sizeOrderForLegend!.map((name) => scaleSize(name) / 2));\n            const legendWidth = ordLabelWidth + ordGap + 2 * maxCircleR;\n            const scatterColor = (ctx.resolvedEncodings as any)?.color?.colorPalette?.[0] ?? DEFAULT_COLORS[0];\n            const rowHeights = sizeOrderForLegend!.map((name) => Math.max(scaleSize(name), 16) + ordRowGap);\n            const totalLegendHeight = ordTitleHeight + rowHeights.reduce((a, b) => a + b, 0);\n            const ordLegendTop = Math.max(10, (canvasH - totalLegendHeight) / 2);\n            const legendChildren: any[] = [\n                {\n                    type: 'text' as const,\n                    left: 0,\n                    top: 0,\n                    style: {\n                        text: sizeField,\n                        fontSize: 11,\n                        fontWeight: 'bold',\n                        fill: '#333',\n                        textAlign: 'left',\n                    },\n                },\n            ];\n            let rowTop = ordTitleHeight;\n            for (let i = 0; i < sizeOrderForLegend!.length; i++) {\n                const name = sizeOrderForLegend![i];\n                const r = scaleSize(name) / 2;\n                const rowH = rowHeights[i];\n                const circleTop = rowTop + (rowH - scaleSize(name)) / 2;\n                const textTop = rowTop + (rowH - ordFontSize) / 2;\n                legendChildren.push({\n                    type: 'circle' as const,\n                    left: maxCircleR - r,\n                    top: circleTop - r,\n                    shape: { cx: r, cy: r, r },\n                    style: { fill: scatterColor },\n                });\n                legendChildren.push({\n                    type: 'text' as const,\n                    left: 2 * maxCircleR + ordGap,\n                    top: textTop,\n                    style: {\n                        text: name,\n                        fontSize: ordFontSize,\n                        fill: '#333',\n                        textAlign: 'left',\n                    },\n                });\n                rowTop += rowH;\n            }\n            const ordLegendGraphic = {\n                type: 'group' as const,\n                right: ordLegendRight,\n                top: ordLegendTop,\n                width: legendWidth,\n                z: 100,\n                children: legendChildren,\n            };\n            const existingGraphic = option.graphic;\n            option.graphic = Array.isArray(existingGraphic)\n                ? [...existingGraphic, ordLegendGraphic]\n                : existingGraphic\n                    ? [existingGraphic, ordLegendGraphic]\n                    : [ordLegendGraphic];\n        } else if (useContinuousSizeVisualMap) {\n            // Quantity size: continuous visualMap (scatter-aqi-color style), inRange.symbolSize maps dimension to size.\n            // Enforce a minimum spread so circles are visibly different (ECharts maps data linearly to [min, max]).\n            const SIZE_SPREAD_MIN = 20;\n            const sizeMaxForMap = Math.max(rangeMaxClamped, rangeMin + SIZE_SPREAD_MIN);\n            const fmtSize = (v: number) => (Number.isInteger(v) ? String(v) : v.toFixed(1));\n            const sizeVisualMap = {\n                type: 'continuous' as const,\n                show: true,\n                min: sizeDomainMin!,\n                max: sizeDomainMax!,\n                dimension: 2,\n                inRange: { symbolSize: [rangeMin, sizeMaxForMap] as [number, number] },\n                orient: 'vertical',\n                right: 50,\n                top: '10.0%',\n                bottom: '10.0%',\n                padding: 0,\n                itemGap: 0,\n                text: [fmtSize(sizeDomainMax!), fmtSize(sizeDomainMin!)] as [string, string],\n                textStyle: { fontSize: 10 },\n                seriesIndex: 0,\n                name: sizeField,\n            };\n            if (option.visualMap) {\n                (option.visualMap as any[]).push(sizeVisualMap);\n            } else {\n                option.visualMap = [sizeVisualMap];\n            }\n            option._visualMapWidth = 70;\n            option.graphic = option.graphic || [];\n            const existingGraphic = Array.isArray(option.graphic) ? option.graphic : [option.graphic];\n            option.graphic = [\n                ...existingGraphic,\n                {\n                    type: 'text' as const,\n                    right: 50,\n                    top: 10,\n                    z: 100,\n                    style: {\n                        text: sizeField,\n                        fontSize: 11,\n                        fontWeight: 'bold',\n                        fill: '#333',\n                        textAlign: 'right',\n                    },\n                },\n            ];\n        }\n\n        // Apply zero-baseline decisions (only for value axes)\n        // ECharts: scale=true means \"data-fit, don't force zero\"\n        //          scale=false (default) means \"include zero\"\n        if (!xIsCategorical && channelSemantics.x?.zero) {\n            option.xAxis.scale = !channelSemantics.x.zero.zero;\n        }\n        if (!yIsCategorical && channelSemantics.y?.zero) {\n            option.yAxis.scale = !channelSemantics.y.zero.zero;\n        }\n\n        // Opacity from chart properties\n        const opacity = chartProperties?.opacity ?? 1;\n\n        const xVal = (row: any) => xIsCategorical ? (xCategoryToIndex.get(String(row[xField] ?? '')) ?? 0) : row[xField];\n        const yVal = (row: any) => yIsCategorical ? (yCategoryToIndex.get(String(row[yField] ?? '')) ?? 0) : row[yField];\n        const pointData = (row: any) =>\n            sizeField != null\n                ? [xVal(row), yVal(row), row[sizeField]]\n                : [xVal(row), yVal(row)];\n\n        // Palette from resolvedEncodings (scheme) or fallback to DEFAULT_COLORS\n        const colorPalette = (ctx.resolvedEncodings as any)?.color?.colorPalette\n            ?? (ctx.resolvedEncodings as any)?.group?.colorPalette\n            ?? DEFAULT_COLORS;\n        const legendOpts = (ctx.resolvedEncodings as any)?.color ?? (ctx.resolvedEncodings as any)?.group;\n        const colorType = channelSemantics.color?.type ?? (ctx.resolvedEncodings as any)?.color?.type;\n        const isTemporalColor = colorField && colorType === 'temporal';\n        const isContinuousColor = colorField && (colorType === 'quantitative' || colorType === 'temporal');\n\n        if (isContinuousColor) {\n            // VL: color type quantitative → numeric scale; temporal → timestamp scale (mirror VL type \"temporal\" + legend format \"%b %d, %Y\").\n            const colorDim = sizeField != null ? 3 : 2; // data: [x, y, size?, colorVal]\n            const toColorVal = isTemporalColor\n                ? (v: any) => (v != null ? new Date(v).getTime() : NaN)\n                : (v: any) => (v != null ? Number(v) : NaN);\n            const pointDataWithColor = (row: any) => {\n                const x = xVal(row);\n                const y = yVal(row);\n                const c = toColorVal(row[colorField]);\n                if (sizeField != null) return [x, y, row[sizeField], c];\n                return [x, y, c];\n            };\n            const colorVals = table\n                .map((r: any) => toColorVal(r[colorField]))\n                .filter((v: number) => !isNaN(v));\n            const colorMin = colorVals.length ? Math.min(...colorVals) : (isTemporalColor ? Date.now() : 0);\n            const colorMax = colorVals.length ? Math.max(...colorVals) : (isTemporalColor ? Date.now() : 1);\n            const scheme = (ctx.encodings as any)?.color?.scheme ?? '';\n            // Default visualMap color bar: gray gradient (light → dark)\n            const defaultGrayRange = ['#f5f5f5', '#e0e0e0', '#9e9e9e', '#616161', '#424242'];\n            const greensRange = ['#f7fcf5', '#c7e9c0', '#41ab5d', '#006d2c', '#00441b'];\n            // Continuous colormap: default gray; optional scheme override (e.g. green) or palette.\n            const inRange = /green/i.test(scheme)\n                ? greensRange\n                : colorPalette.length >= 2\n                    ? [colorPalette[colorPalette.length - 1], colorPalette[0]]  // light → dark\n                    : defaultGrayRange;\n            // Layout: when both size and color visualMap exist, place them side by side (size right, color left)\n            const VM_BAR_RIGHT = 50;\n            const VM_BAR_WIDTH = 70;\n            const VM_GAP = 16;\n            const VM_VAL_RIGHT = 28;\n            const VM_TITLE_TOP = 10;\n            const VM_FONT_SIZE = 10;\n            const REF_H = 400;\n            const VM_BAR_TOP_PX = 40;\n            const VM_BAR_BOTTOM_PX = 40;\n            const VM_TOP_PCT = ((VM_BAR_TOP_PX / REF_H) * 100).toFixed(1) + '%';\n            const VM_BOTTOM_PCT = ((VM_BAR_BOTTOM_PX / REF_H) * 100).toFixed(1) + '%';\n            const hasSizeVisualMap = option.visualMap && Array.isArray(option.visualMap)\n                && option.visualMap.some((vm: any) => vm.inRange?.symbolSize != null);\n            const colorBarRight = hasSizeVisualMap ? VM_BAR_RIGHT + VM_BAR_WIDTH + VM_GAP : VM_BAR_RIGHT;\n            const temporalFormat = channelSemantics.color?.temporalFormat ?? '%b %d, %Y';\n            const formatColorLabel = (val: number) =>\n                isTemporalColor ? formatTimestamp(val, temporalFormat) : String(val);\n            // Use visualMap's built-in text for max/min so labels are positioned by ECharts and align with the bar.\n            // text[0] = high (top), text[1] = low (bottom) per ContinuousView.\n            const colorVisualMap = {\n                type: 'continuous' as const,\n                min: colorMin,\n                max: colorMax,\n                dimension: colorDim,\n                inRange: { color: inRange },\n                orient: 'vertical',\n                right: colorBarRight,\n                top: VM_TOP_PCT,\n                bottom: VM_BOTTOM_PCT,\n                padding: 0,\n                itemGap: 0,\n                text: [formatColorLabel(colorMax), formatColorLabel(colorMin)] as [string, string],\n                formatter: formatColorLabel,\n                textStyle: { fontSize: VM_FONT_SIZE },\n                show: true,\n                seriesIndex: 0,\n                name: colorField,\n            };\n            if (option.visualMap) {\n                (option.visualMap as any[]).push(colorVisualMap);\n            } else {\n                option.visualMap = colorVisualMap;\n            }\n            option._visualMapWidth = hasSizeVisualMap ? VM_BAR_WIDTH + VM_GAP + VM_BAR_WIDTH : VM_BAR_WIDTH;\n            // Only the title is custom graphic; max/min come from visualMap.text above.\n            const vmGraphics: any[] = [\n                {\n                    type: 'text' as const,\n                    right: colorBarRight,\n                    top: VM_TITLE_TOP,\n                    z: 100,\n                    style: {\n                        text: colorField,\n                        fontSize: 11,\n                        fontWeight: 'bold',\n                        fill: '#333',\n                        textAlign: 'right',\n                    },\n                },\n            ];\n            const existingGraphic = option.graphic;\n            option.graphic = Array.isArray(existingGraphic)\n                ? [...existingGraphic, ...vmGraphics]\n                : existingGraphic\n                    ? [existingGraphic, ...vmGraphics]\n                    : vmGraphics;\n            const data = table.map((row: any) => pointDataWithColor(row));\n            const seriesOpt: any = {\n                type: 'scatter',\n                data,\n                itemStyle: { opacity },\n            };\n            if (sizeField != null && !useVisualMapForSize) {\n                seriesOpt.symbolSize = (value: number[] | number) => scaleSize(Array.isArray(value) ? value[2] : value);\n            }\n            option.series.push(seriesOpt);\n        } else if (colorField) {\n            // Categorical color: one series per category, legend with category names\n            const colorOrder = extractCategories(table, colorField, getCategoryOrder(ctx, 'color'));\n            const groups = new Map<string, number[][]>();\n            for (const row of table) {\n                const key = String(row[colorField] ?? '');\n                if (!groups.has(key)) groups.set(key, []);\n                groups.get(key)!.push(pointData(row) as number[]);\n            }\n\n            const legendNames = colorOrder.length > 0 ? colorOrder : [...groups.keys()];\n            const hasSizeBySeries = sizeField != null && !useVisualMapForSize;\n            option.legend = {\n                data: legendNames.map((name) => {\n                    const data = groups.get(name) ?? [];\n                    if (!hasSizeBySeries || data.length === 0) return name;\n                    const sizes = data.map((d: number[]) => (d.length >= 3 ? scaleSize(d[2]) : rangeMin));\n                    sizes.sort((a, b) => a - b);\n                    const medianSize = sizes[Math.floor(sizes.length / 2)] ?? rangeMin;\n                    return { name, symbolSize: medianSize, itemStyle: { symbolSize: medianSize } };\n                }),\n                show: true,\n            };\n            option._legendTitle = colorField;\n            if (legendOpts?.legendSymbolSize != null && !hasSizeBySeries) {\n                option.legend.itemWidth = legendOpts.legendSymbolSize;\n                option.legend.itemHeight = legendOpts.legendSymbolSize;\n                option.legend.itemGap = 8;\n            }\n            if (legendOpts?.legendLabelFontSize != null) {\n                option.legend.textStyle = option.legend.textStyle ?? {};\n                option.legend.textStyle.fontSize = legendOpts.legendLabelFontSize;\n            }\n\n            legendNames.forEach((name) => {\n                const data = groups.get(name) ?? [];\n                if (data.length === 0) return;\n                const colorIdx = colorOrder.indexOf(name);\n                const seriesOpt: any = {\n                    name,\n                    type: 'scatter',\n                    data,\n                    itemStyle: {\n                        color: colorPalette[colorIdx % colorPalette.length],\n                        opacity,\n                    },\n                };\n                if (hasSizeBySeries) {\n                    seriesOpt.symbolSize = (value: number[] | number) => scaleSize(Array.isArray(value) ? value[2] : value);\n                }\n                option.series.push(seriesOpt);\n            });\n        } else {\n            const data = table.map((row: any) => pointData(row));\n            const seriesOpt: any = {\n                type: 'scatter',\n                data,\n                itemStyle: { opacity },\n            };\n            if (sizeField != null && !useVisualMapForSize) {\n                seriesOpt.symbolSize = (value: number[] | number) => scaleSize(Array.isArray(value) ? value[2] : value);\n            } else if (useContinuousSizeVisualMap && sizeDomainMin !== undefined && sizeDomainMax !== undefined) {\n                // Apply same linear mapping as visualMap so circles are sized correctly (visualMap may not drive symbolSize in all environments)\n                const SIZE_SPREAD_MIN = 20;\n                const sizeSpread = Math.max(rangeMaxClamped - rangeMin, SIZE_SPREAD_MIN);\n                const sizeMaxMapped = rangeMin + sizeSpread;\n                seriesOpt.symbolSize = (value: number[] | number) => {\n                    const v = Array.isArray(value) ? value[2] : value;\n                    const num = Number(v);\n                    if (v == null || isNaN(num)) return rangeMin;\n                    const span = sizeDomainMax! - sizeDomainMin!;\n                    const t = span <= 0 ? 0.5 : Math.max(0, Math.min(1, (num - sizeDomainMin!) / span));\n                    return Math.round(rangeMin + t * (sizeMaxMapped - rangeMin));\n                };\n            }\n            option.series.push(seriesOpt);\n        }\n\n        // Tooltip: use shared encoding-style formatter (same as bar/line/pie) via _encodingTooltip\n        const xName = option.xAxis?.name ?? xField ?? 'X';\n        const yName = option.yAxis?.name ?? yField ?? 'Y';\n        const sizeName = sizeField ?? null;\n        const colorName = colorField ?? null;\n        const temporalFormat = channelSemantics.color?.temporalFormat ?? '%b %d, %Y';\n        const tooltipParts: Array<{ from: string; index?: number; label: string; format?: string; temporalFormat?: string; categoryNames?: string[] }> = [\n            { from: 'data', index: 0, label: xName, format: xIsCategorical ? 'category' : 'number', categoryNames: xIsCategorical ? xCategories : undefined },\n            { from: 'data', index: 1, label: yName, format: yIsCategorical ? 'category' : 'number', categoryNames: yIsCategorical ? yCategories : undefined },\n        ];\n        if (sizeName != null) tooltipParts.push({ from: 'data', index: 2, label: sizeName, format: 'number' });\n        if (colorName != null) {\n            if (isContinuousColor) {\n                tooltipParts.push({\n                    from: 'data',\n                    index: sizeField != null ? 3 : 2,\n                    label: colorName,\n                    format: isTemporalColor ? 'temporal' : 'number',\n                    temporalFormat,\n                });\n            } else {\n                tooltipParts.push({ from: 'series', label: colorName });\n            }\n        }\n        option.tooltip = option.tooltip ?? {};\n        option._encodingTooltip = { trigger: 'item', parts: tooltipParts };\n\n        // When there are multiple series (e.g. categorical color), size visualMap must apply to all of them\n        const vmList = Array.isArray(option.visualMap) ? option.visualMap : (option.visualMap ? [option.visualMap] : []);\n        const seriesCount = option.series?.length ?? 0;\n        if (seriesCount > 1) {\n            const allIndices = option.series!.map((_: any, i: number) => i);\n            for (const vm of vmList) {\n                if (vm.type === 'continuous' && vm.inRange?.symbolSize != null) {\n                    vm.seriesIndex = allIndices;\n                }\n            }\n        }\n\n        // Write the ECharts option into the spec object\n        Object.assign(spec, option);\n        // Clear VL skeleton\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'opacity', label: 'Opacity', type: 'continuous', min: 0.1, max: 1, step: 0.05, defaultValue: 1 },\n    ],\n    postProcess: (option, ctx) => {\n        if (!option.series || !Array.isArray(option.series)) return;\n        // When visualMap controls symbolSize (piecewise ordinal or continuous quantity), do not override series.symbolSize\n        const vmList = Array.isArray(option.visualMap) ? option.visualMap : (option.visualMap ? [option.visualMap] : []);\n        const visualMapControlsSize = vmList.some(\n            (vm: any) =>\n                (vm.type === 'piecewise' && Array.isArray(vm.pieces) && vm.pieces.some((p: any) => p.symbolSize != null))\n                || (vm.type === 'continuous' && vm.inRange?.symbolSize != null),\n        );\n        if (visualMapControlsSize) return;\n        const w = option._width || ctx.canvasSize.width;\n        const h = option._height || ctx.canvasSize.height;\n        const pointCount = ctx.table.length;\n        const size = computeSymbolSize(w, h, pointCount);\n        for (const series of option.series) {\n            if (series.type !== 'scatter') continue;\n            // Series has size encoding (data is [x, y, size]): keep template-set symbolSize function, do not override\n            const hasSizeEncoding = series.data?.length && Array.isArray(series.data[0]) && (series.data[0] as number[]).length >= 3;\n            if (hasSizeEncoding) continue;\n            if (series.symbolSize == null) {\n                series.symbolSize = size;\n            }\n        }\n    },\n};\n\n/** Simple linear regression: slope and intercept. */\nfunction linearRegression(data: number[][]): { slope: number; intercept: number; xMin: number; xMax: number } {\n    const n = data.length;\n    if (n === 0) return { slope: 0, intercept: 0, xMin: 0, xMax: 0 };\n    let sumX = 0, sumY = 0, sumXY = 0, sumXX = 0;\n    let xMin = data[0][0], xMax = data[0][0];\n    for (const [x, y] of data) {\n        sumX += x;\n        sumY += y;\n        sumXY += x * y;\n        sumXX += x * x;\n        if (x < xMin) xMin = x;\n        if (x > xMax) xMax = x;\n    }\n    const slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX) || 0;\n    const intercept = (sumY - slope * sumX) / n;\n    return { slope, intercept, xMin, xMax };\n}\n\n/** Polynomial regression via least-squares normal equations. */\nfunction polyRegression(data: number[][], order: number): { coeffs: number[]; xMin: number; xMax: number } {\n    const n = data.length;\n    if (n === 0) return { coeffs: [0], xMin: 0, xMax: 0 };\n    let xMin = data[0][0], xMax = data[0][0];\n    for (const [x] of data) { if (x < xMin) xMin = x; if (x > xMax) xMax = x; }\n    const k = order + 1;\n    // Build normal equations: X^T X * a = X^T y\n    const xtx: number[][] = Array.from({ length: k }, () => new Array(k).fill(0));\n    const xty: number[] = new Array(k).fill(0);\n    for (const [x, y] of data) {\n        let xp = 1;\n        for (let i = 0; i < k; i++) {\n            xty[i] += xp * y;\n            let xp2 = xp;\n            for (let j = i; j < k; j++) {\n                xtx[i][j] += xp2;\n                if (i !== j) xtx[j][i] += xp2;\n                xp2 *= x;\n            }\n            xp *= x;\n        }\n    }\n    // Gaussian elimination with partial pivoting\n    const aug = xtx.map((row, i) => [...row, xty[i]]);\n    for (let col = 0; col < k; col++) {\n        let maxRow = col;\n        for (let row = col + 1; row < k; row++) {\n            if (Math.abs(aug[row][col]) > Math.abs(aug[maxRow][col])) maxRow = row;\n        }\n        [aug[col], aug[maxRow]] = [aug[maxRow], aug[col]];\n        const pivot = aug[col][col];\n        if (Math.abs(pivot) < 1e-12) continue;\n        for (let j = col; j <= k; j++) aug[col][j] /= pivot;\n        for (let row = 0; row < k; row++) {\n            if (row === col) continue;\n            const factor = aug[row][col];\n            for (let j = col; j <= k; j++) aug[row][j] -= factor * aug[col][j];\n        }\n    }\n    const coeffs = aug.map(row => row[k]);\n    return { coeffs, xMin, xMax };\n}\n\n/** Evaluate polynomial at x given coefficients [a0, a1, a2, ...] */\nfunction polyEval(coeffs: number[], x: number): number {\n    let result = 0, xp = 1;\n    for (const c of coeffs) { result += c * xp; xp *= x; }\n    return result;\n}\n\n/** Generate regression curve points for a given method. */\nfunction regressionCurvePoints(\n    data: number[][],\n    method: string,\n    order: number,\n    numPoints: number = 50,\n): number[][] {\n    if (data.length === 0) return [];\n    if (method === 'linear' || !method) {\n        const reg = linearRegression(data);\n        return [[reg.xMin, reg.slope * reg.xMin + reg.intercept],\n                [reg.xMax, reg.slope * reg.xMax + reg.intercept]];\n    }\n    // For non-linear methods, transform data, fit linear, then transform back\n    if (method === 'log') {\n        // y = a + b * ln(x)\n        const filtered = data.filter(([x]) => x > 0);\n        if (filtered.length < 2) return [];\n        const logData = filtered.map(([x, y]) => [Math.log(x), y]);\n        const reg = linearRegression(logData);\n        let xMin = Infinity, xMax = -Infinity;\n        for (const [x] of filtered) { if (x < xMin) xMin = x; if (x > xMax) xMax = x; }\n        const pts: number[][] = [];\n        for (let i = 0; i < numPoints; i++) {\n            const x = xMin + (xMax - xMin) * i / (numPoints - 1);\n            pts.push([x, reg.intercept + reg.slope * Math.log(x)]);\n        }\n        return pts;\n    }\n    if (method === 'exp') {\n        // ln(y) = a + b*x  →  y = exp(a) * exp(b*x)\n        const filtered = data.filter(([, y]) => y > 0);\n        if (filtered.length < 2) return [];\n        const logData = filtered.map(([x, y]) => [x, Math.log(y)]);\n        const reg = linearRegression(logData);\n        let xMin = Infinity, xMax = -Infinity;\n        for (const [x] of filtered) { if (x < xMin) xMin = x; if (x > xMax) xMax = x; }\n        const pts: number[][] = [];\n        for (let i = 0; i < numPoints; i++) {\n            const x = xMin + (xMax - xMin) * i / (numPoints - 1);\n            pts.push([x, Math.exp(reg.intercept + reg.slope * x)]);\n        }\n        return pts;\n    }\n    if (method === 'pow') {\n        // ln(y) = a + b*ln(x)  →  y = exp(a) * x^b\n        const filtered = data.filter(([x, y]) => x > 0 && y > 0);\n        if (filtered.length < 2) return [];\n        const logData = filtered.map(([x, y]) => [Math.log(x), Math.log(y)]);\n        const reg = linearRegression(logData);\n        let xMin = Infinity, xMax = -Infinity;\n        for (const [x] of filtered) { if (x < xMin) xMin = x; if (x > xMax) xMax = x; }\n        const pts: number[][] = [];\n        for (let i = 0; i < numPoints; i++) {\n            const x = xMin + (xMax - xMin) * i / (numPoints - 1);\n            pts.push([x, Math.exp(reg.intercept) * Math.pow(x, reg.slope)]);\n        }\n        return pts;\n    }\n    if (method === 'quad') {\n        const reg = polyRegression(data, 2);\n        const pts: number[][] = [];\n        for (let i = 0; i < numPoints; i++) {\n            const x = reg.xMin + (reg.xMax - reg.xMin) * i / (numPoints - 1);\n            pts.push([x, polyEval(reg.coeffs, x)]);\n        }\n        return pts;\n    }\n    if (method === 'poly') {\n        const reg = polyRegression(data, order);\n        const pts: number[][] = [];\n        for (let i = 0; i < numPoints; i++) {\n            const x = reg.xMin + (reg.xMax - reg.xMin) * i / (numPoints - 1);\n            pts.push([x, polyEval(reg.coeffs, x)]);\n        }\n        return pts;\n    }\n    // Fallback to linear\n    const reg = linearRegression(data);\n    return [[reg.xMin, reg.slope * reg.xMin + reg.intercept],\n            [reg.xMax, reg.slope * reg.xMax + reg.intercept]];\n}\n\n/**\n * Regression — scatter + trend line (mirror vegalite/templates/scatter.ts regressionDef).\n */\nexport const ecRegressionDef: ChartTemplateDef = {\n    chart: 'Regression',\n    template: { mark: 'circle', encoding: {} },\n    channels: ['x', 'y', 'size', 'color', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xField = channelSemantics.x?.field;\n        const yField = channelSemantics.y?.field;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xField || !yField) return;\n\n        const method = chartProperties?.regressionMethod ?? 'linear';\n        const polyOrder = chartProperties?.polyOrder ?? 3;\n\n        const option: any = {\n            tooltip: { trigger: 'item' },\n            xAxis: { type: 'value', name: xField, nameLocation: 'middle', nameGap: 30 },\n            yAxis: { type: 'value', name: yField, nameLocation: 'middle', nameGap: 40 },\n            series: [],\n        };\n\n        if (channelSemantics.x?.zero) option.xAxis.scale = !channelSemantics.x.zero.zero;\n        if (channelSemantics.y?.zero) option.yAxis.scale = !channelSemantics.y.zero.zero;\n\n        const opacity = chartProperties?.opacity ?? 1;\n\n        if (colorField) {\n            const groups = groupBy(table, colorField);\n            option.legend = { data: [...groups.keys()] };\n            option._legendTitle = colorField;\n            let colorIdx = 0;\n            for (const [name, rows] of groups) {\n                const data = rows.map((r: any) => [r[xField], r[yField]]);\n                const lineData = regressionCurvePoints(data, method, polyOrder);\n                option.series.push({\n                    name,\n                    type: 'scatter',\n                    data,\n                    itemStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length], opacity },\n                });\n                option.series.push({\n                    name: `${name} (trend)`,\n                    type: 'line',\n                    data: lineData,\n                    showSymbol: false,\n                    smooth: method !== 'linear',\n                    lineStyle: { color: DEFAULT_COLORS[colorIdx % DEFAULT_COLORS.length], width: 2 },\n                });\n                colorIdx++;\n            }\n        } else {\n            const data = table.map((r: any) => [r[xField], r[yField]]);\n            const lineData = regressionCurvePoints(data, method, polyOrder);\n            option.series.push({ type: 'scatter', data, itemStyle: { opacity } });\n            option.series.push({\n                name: 'Trend',\n                type: 'line',\n                data: lineData,\n                showSymbol: false,\n                smooth: method !== 'linear',\n                lineStyle: { color: '#ee6666', width: 2 },\n            });\n        }\n\n        const xName = option.xAxis?.name ?? xField ?? 'X';\n        const yName = option.yAxis?.name ?? yField ?? 'Y';\n        const tooltipParts: Array<{ from: string; index?: number; label: string; format?: string }> = [\n            { from: 'data', index: 0, label: xName, format: 'number' },\n            { from: 'data', index: 1, label: yName, format: 'number' },\n        ];\n        if (colorField) tooltipParts.push({ from: 'series', label: colorField });\n        option._encodingTooltip = { trigger: 'item', parts: tooltipParts };\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'regressionMethod', label: 'Method', type: 'discrete',\n            options: [\n                { value: 'linear', label: 'Linear' },\n                { value: 'log',    label: 'Logarithmic' },\n                { value: 'exp',    label: 'Exponential' },\n                { value: 'pow',    label: 'Power' },\n                { value: 'quad',   label: 'Quadratic' },\n                { value: 'poly',   label: 'Polynomial' },\n            ],\n            defaultValue: 'linear',\n        } as ChartPropertyDef,\n        {\n            key: 'polyOrder', label: 'Poly Order', type: 'continuous',\n            min: 2, max: 10, step: 1, defaultValue: 3,\n        } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/streamgraph.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Streamgraph template — uses native ThemeRiver series.\n *\n * Contrast with VL:\n *   VL: area mark with y.stack = \"center\" and y.axis = null\n *   EC: themeRiver series — purpose-built for streamgraphs\n *\n * ThemeRiver is ECharts' native streamgraph implementation:\n *   - Automatic center-aligned stacking (wiggle / silhouette baseline)\n *   - Built-in legend integration\n *   - Smooth transitions between series\n *\n * Channels: x (temporal/ordinal), y (quantitative), color (series groups)\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { groupBy, DEFAULT_COLORS } from './utils';\n\nexport const ecStreamgraphDef: ChartTemplateDef = {\n    chart: 'Streamgraph',\n    template: { mark: 'area', encoding: {} },\n    channels: ['x', 'y', 'color', 'column', 'row'],\n    markCognitiveChannel: 'area',\n\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' } },\n    }),\n\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const xCS = channelSemantics.x;\n        const yCS = channelSemantics.y;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xCS?.field || !yCS?.field) return;\n        const xField = xCS.field;\n        const yField = yCS.field;\n\n        // ── Build ThemeRiver data ────────────────────────────────────────\n        // ThemeRiver data format: [[date, value, seriesName], ...]\n        // All series must have entries for every x-value (fill with 0 if missing)\n\n        if (!colorField) {\n            // Without a color/series field, fall back to a simple area chart\n            const option: any = {\n                tooltip: { trigger: 'axis' },\n                xAxis: {\n                    type: xCS.type === 'temporal' ? 'time' : 'value',\n                    name: xField,\n                    nameLocation: 'middle',\n                    nameGap: 30,\n                },\n                yAxis: { type: 'value', show: false },\n                series: [{\n                    type: 'line',\n                    data: table.map(r => [r[xField], r[yField]]),\n                    areaStyle: { opacity: 0.85 },\n                    lineStyle: { width: 0.5 },\n                    symbol: 'none',\n                }],\n            };\n            Object.assign(spec, option);\n            delete spec.mark;\n            delete spec.encoding;\n            return;\n        }\n\n        // Collect unique x-values in order (preserving data order)\n        const xValSet = new Set<string>();\n        const xVals: string[] = [];\n        for (const row of table) {\n            const xv = String(row[xField]);\n            if (!xValSet.has(xv)) {\n                xValSet.add(xv);\n                xVals.push(xv);\n            }\n        }\n\n        // Collect series names\n        const groups = groupBy(table, colorField);\n        const seriesNames = [...groups.keys()];\n\n        // Build a lookup: (xVal, seriesName) → value\n        const valMap = new Map<string, number>();\n        for (const row of table) {\n            const key = `${row[xField]}|||${row[colorField]}`;\n            valMap.set(key, row[yField] ?? 0);\n        }\n\n        // Build themeRiver data array — every series must appear at every x-value\n        const riverData: [string, number, string][] = [];\n        for (const xv of xVals) {\n            for (const sn of seriesNames) {\n                const key = `${xv}|||${sn}`;\n                riverData.push([xv, valMap.get(key) ?? 0, sn]);\n            }\n        }\n\n        // ── Build option ─────────────────────────────────────────────────\n        const option: any = {\n            tooltip: {\n                trigger: 'axis',\n                axisPointer: { type: 'line', lineStyle: { color: 'rgba(0,0,0,0.2)', width: 1, type: 'solid' } },\n            },\n            legend: {\n                data: seriesNames,\n            },\n            singleAxis: {\n                type: xCS.type === 'temporal' ? 'time' : 'category',\n                ...(xCS.type !== 'temporal' ? { data: xVals } : {}),\n                bottom: 45,         // enough room for tick labels + axis name below\n                name: xField,\n                nameLocation: 'middle',\n                nameGap: 25,\n                nameTextStyle: { fontSize: 12 },\n                axisLabel: { fontSize: 11 },\n            },\n            series: [{\n                type: 'themeRiver',\n                data: riverData,\n                label: { show: false },\n                emphasis: { focus: 'series' },\n                itemStyle: {\n                    borderWidth: 0.5,\n                    borderColor: 'rgba(255,255,255,0.3)',\n                },\n            }],\n        };\n\n        // Apply color palette\n        option.color = seriesNames.map((_, i) => DEFAULT_COLORS[i % DEFAULT_COLORS.length]);\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n\n    postProcess: (option) => {\n        // ThemeRiver uses singleAxis (not xAxis/yAxis).  The layout engine\n        // now computes _width/_height for singleAxis charts too, but it uses\n        // the grid-based margins (which assume xAxis/yAxis).  We adjust the\n        // singleAxis margins and canvas to match consistently.\n        if (option.singleAxis) {\n            const BUFFER = 15;\n            const hasLegend = !!option.legend;\n            const rightMargin = hasLegend ? 130 : 20;\n\n            // singleAxis positions: left/right control horizontal extent,\n            // top/bottom control vertical extent\n            option.singleAxis.left = option.singleAxis.left || 50;\n            option.singleAxis.right = option.singleAxis.right || rightMargin;\n\n            // Ensure canvas is large enough\n            const minW = 600 + BUFFER;\n            const minH = 350 + BUFFER;\n            if (typeof option._width === 'number' && option._width < minW) {\n                option._width = minW;\n            }\n            if (typeof option._height === 'number' && option._height < minH) {\n                option._height = minH;\n            }\n            if (!option._width) option._width = minW;\n            if (!option._height) option._height = minH;\n\n            // Push the axis up from the canvas bottom to avoid clipping\n            if (typeof option.singleAxis.bottom === 'number') {\n                option.singleAxis.bottom += BUFFER;\n            }\n        }\n    },\n\n    properties: [\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/sunburst.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Sunburst Chart template.\n *\n * Unique to ECharts — no native Vega-Lite equivalent.\n * Displays hierarchical data as concentric rings where angular extent\n * encodes value and ring level encodes hierarchy depth.\n *\n * Data model:\n *   color  (nominal): top-level category (outer ring or first ring)\n *   size   (quantitative): value (mapped to angular extent)\n *   detail (nominal, optional): sub-category for two-level hierarchy\n *\n * If only color + size: single-ring sunburst (same as pie but styled differently).\n * If color + size + detail: two-ring sunburst (color = inner, detail = outer).\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, DEFAULT_COLORS, computeCircumferencePressure, computeEffectiveBarCount } from './utils';\n\nexport const ecSunburstDef: ChartTemplateDef = {\n    chart: 'Sunburst Chart',\n    template: { mark: 'arc', encoding: {} },\n    channels: ['color', 'size', 'detail'],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const catField = channelSemantics.color?.field;\n        const valField = channelSemantics.size?.field;\n        const subCatField = channelSemantics.detail?.field;\n\n        if (!catField) return;\n\n        const categories = extractCategories(table, catField, channelSemantics.color?.ordinalSortOrder);\n        if (categories.length === 0) return;\n\n        // Build sunburst data (hierarchical tree structure)\n        let sunburstData: any[];\n\n        if (subCatField) {\n            // Two-level hierarchy: color (inner ring) → detail (outer ring)\n            sunburstData = categories.map((cat, catIdx) => {\n                const catRows = table.filter(r => String(r[catField]) === cat);\n                const subCats = extractCategories(catRows, subCatField);\n\n                const children = subCats.map(sub => {\n                    const subRows = catRows.filter(r => String(r[subCatField]) === sub);\n                    let value: number;\n                    if (valField) {\n                        value = subRows.reduce((sum, r) => sum + (Number(r[valField]) || 0), 0);\n                    } else {\n                        value = subRows.length;\n                    }\n                    return { name: sub, value };\n                });\n\n                return {\n                    name: cat,\n                    children,\n                    itemStyle: { color: DEFAULT_COLORS[catIdx % DEFAULT_COLORS.length] },\n                };\n            });\n        } else {\n            // Flat: single ring\n            const agg = new Map<string, number>();\n            if (valField) {\n                for (const row of table) {\n                    const cat = String(row[catField] ?? '');\n                    const val = Number(row[valField]) || 0;\n                    agg.set(cat, (agg.get(cat) ?? 0) + val);\n                }\n            } else {\n                for (const row of table) {\n                    const cat = String(row[catField] ?? '');\n                    agg.set(cat, (agg.get(cat) ?? 0) + 1);\n                }\n            }\n\n            sunburstData = categories.map((cat, i) => ({\n                name: cat,\n                value: agg.get(cat) ?? 0,\n                itemStyle: { color: DEFAULT_COLORS[i % DEFAULT_COLORS.length] },\n            }));\n        }\n\n        // ── Circumference-pressure sizing (spring model) ──────────────\n        // Compute effective bar count from outer-ring leaf values.\n        // For two-level hierarchy: use the outer-ring leaves.\n        // For flat: use slice values directly.\n        let outerValues: number[];\n        if (subCatField) {\n            // Outer ring: collect all leaf values\n            outerValues = sunburstData.flatMap(\n                d => d.children?.map((c: any) => c.value as number) ?? []);\n        } else {\n            outerValues = sunburstData.map((d: any) => d.value as number);\n        }\n        const effectiveCount = computeEffectiveBarCount(outerValues);\n\n        const { radius: pressureRadius, canvasW, canvasH }\n            = computeCircumferencePressure(effectiveCount, ctx.canvasSize, {\n                minArcPx: 45,\n                minRadius: 80,\n                maxStretch: ctx.assembleOptions?.maxStretch,\n            });\n\n        const outerRadius = Math.max(80, Math.round(Math.min(pressureRadius, (Math.min(canvasW, canvasH) / 2 - 20))));\n        const innerRadius = chartProperties?.innerRadius ?? Math.round(outerRadius * 0.15);\n\n        const option: any = {\n            tooltip: {\n                trigger: 'item',\n                formatter: (params: any) => {\n                    const { name, value, treePathInfo } = params;\n                    const path = treePathInfo\n                        ? treePathInfo.map((n: any) => n.name).filter(Boolean).join(' → ')\n                        : name;\n                    return `${path}<br/>Value: ${value}`;\n                },\n            },\n            series: [{\n                type: 'sunburst',\n                data: sunburstData,\n                radius: [`${innerRadius}px`, `${outerRadius}px`],\n                center: ['50%', '50%'],\n                label: {\n                    show: true,\n                    rotate: chartProperties?.labelRotate ?? 'radial',\n                    fontSize: 11,\n                },\n                emphasis: {\n                    focus: 'ancestor',\n                },\n                levels: subCatField ? [\n                    {}, // root\n                    {\n                        // Inner ring (top-level categories)\n                        r0: `${innerRadius}px`,\n                        r: `${Math.round(innerRadius + (outerRadius - innerRadius) * 0.5)}px`,\n                        label: { fontSize: 12, fontWeight: 'bold' },\n                        itemStyle: { borderWidth: 2, borderColor: '#fff' },\n                    },\n                    {\n                        // Outer ring (sub-categories)\n                        r0: `${Math.round(innerRadius + (outerRadius - innerRadius) * 0.5)}px`,\n                        r: `${outerRadius}px`,\n                        label: { fontSize: 10 },\n                        itemStyle: { borderWidth: 1, borderColor: 'rgba(255,255,255,0.5)' },\n                    },\n                ] : [\n                    {}, // root\n                    {\n                        label: { fontSize: 12 },\n                        itemStyle: { borderWidth: 2, borderColor: '#fff' },\n                    },\n                ],\n            }],\n            color: DEFAULT_COLORS,\n            _width: canvasW,\n            _height: canvasH,\n        };\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'innerRadius', label: 'Inner R', type: 'continuous', min: 0, max: 80, step: 5, defaultValue: 0 } as ChartPropertyDef,\n        {\n            key: 'labelRotate', label: 'Labels', type: 'discrete', options: [\n                { value: 'radial', label: 'Radial (default)' },\n                { value: 'tangential', label: 'Tangential' },\n                { value: 0, label: 'Horizontal' },\n            ],\n        } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/treemap.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Treemap template.\n *\n * Unique to ECharts — no native Vega-Lite equivalent.\n * Displays hierarchical data as nested rectangles where area encodes value.\n *\n * Data model:\n *   color  (nominal): top-level category\n *   size   (quantitative): value (mapped to rectangle area)\n *   detail (nominal, optional): sub-category for two-level hierarchy\n *\n * If only color + size: flat treemap with one level.\n * If color + size + detail: two-level hierarchy (color → detail → value).\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, DEFAULT_COLORS } from './utils';\nimport { computeEffectiveBarCount } from '../../core/decisions';\n\nexport const ecTreemapDef: ChartTemplateDef = {\n    chart: 'Treemap',\n    template: { mark: 'rect', encoding: {} },\n    channels: ['color', 'size', 'detail'],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, chartProperties } = ctx;\n        const catField = channelSemantics.color?.field;\n        const valField = channelSemantics.size?.field;\n        const subCatField = channelSemantics.detail?.field;\n\n        if (!catField) return;\n\n        const categories = extractCategories(table, catField, channelSemantics.color?.ordinalSortOrder);\n        if (categories.length === 0) return;\n\n        // Build treemap data\n        let treemapData: any[];\n\n        if (subCatField) {\n            // Two-level hierarchy: color → detail → value\n            treemapData = categories.map((cat, catIdx) => {\n                const catRows = table.filter(r => String(r[catField]) === cat);\n                const subCats = extractCategories(catRows, subCatField);\n\n                const children = subCats.map(sub => {\n                    const subRows = catRows.filter(r => String(r[subCatField]) === sub);\n                    let value: number;\n                    if (valField) {\n                        value = subRows.reduce((sum, r) => sum + (Number(r[valField]) || 0), 0);\n                    } else {\n                        value = subRows.length;\n                    }\n                    return { name: sub, value };\n                });\n\n                return {\n                    name: cat,\n                    children,\n                    itemStyle: { color: DEFAULT_COLORS[catIdx % DEFAULT_COLORS.length] },\n                };\n            });\n        } else {\n            // Flat treemap: one level\n            const agg = new Map<string, number>();\n            if (valField) {\n                for (const row of table) {\n                    const cat = String(row[catField] ?? '');\n                    const val = Number(row[valField]) || 0;\n                    agg.set(cat, (agg.get(cat) ?? 0) + val);\n                }\n            } else {\n                for (const row of table) {\n                    const cat = String(row[catField] ?? '');\n                    agg.set(cat, (agg.get(cat) ?? 0) + 1);\n                }\n            }\n\n            treemapData = categories.map((cat, i) => ({\n                name: cat,\n                value: agg.get(cat) ?? 0,\n                itemStyle: { color: DEFAULT_COLORS[i % DEFAULT_COLORS.length] },\n            }));\n        }\n\n        // ── Scaling: treat treemap items as variable-width vertical bars ──\n        // Use effective bar count (total/min) to determine if the treemap\n        // needs more area. Both axes share the area stretch but X takes\n        // a larger share via the xBias factor:\n        //   stretchX = areaStretch^(xBias/(xBias+1))\n        //   stretchY = areaStretch^(1/(xBias+1))\n        //   stretchX × stretchY = areaStretch  (total area preserved)\n        // xBias=1 → uniform, xBias=2 → X gets 2/3 of the log-stretch.\n        const leafValues = treemapData.flatMap((d: any) =>\n            d.children ? d.children.map((c: any) => c.value as number) : [d.value as number]\n        ).filter((v: number) => v > 0);\n\n        const effectiveCount = leafValues.length > 0\n            ? computeEffectiveBarCount(leafValues)\n            : categories.length;\n\n        const baseW = ctx.canvasSize.width;\n        const baseH = ctx.canvasSize.height;\n        const minBarPx = 30;          // minimum width per effective bar\n        const elasticity = 0.5;\n        const maxStretch = ctx.assembleOptions?.maxStretch ?? 2.0;       // max per-axis stretch\n        const xBias = 1.5;            // X takes more of the stretch than Y\n\n        const pressure = (effectiveCount * minBarPx) / baseW;\n        const areaStretch = pressure <= 1 ? 1 : Math.min(maxStretch * maxStretch, Math.pow(pressure, elasticity));\n        const stretchX = Math.min(maxStretch, Math.pow(areaStretch, xBias / (xBias + 1)));\n        const stretchY = Math.min(maxStretch, Math.pow(areaStretch, 1 / (xBias + 1)));\n\n        const canvasW = Math.round(baseW * stretchX);\n        const canvasH = Math.round(baseH * stretchY);\n\n        const showBreadcrumb = chartProperties?.breadcrumb !== false;\n\n        const option: any = {\n            tooltip: {\n                trigger: 'item',\n                formatter: (params: any) => {\n                    const { name, value, treePathInfo } = params;\n                    const path = treePathInfo\n                        ? treePathInfo.map((n: any) => n.name).filter(Boolean).join(' → ')\n                        : name;\n                    return `${path}<br/>Value: ${value}`;\n                },\n            },\n            series: [{\n                type: 'treemap',\n                data: treemapData,\n                width: '90%',\n                height: showBreadcrumb ? '80%' : '90%',\n                top: 10,\n                left: 'center',\n                roam: false,\n                leafDepth: subCatField ? 2 : 1,\n                breadcrumb: {\n                    show: showBreadcrumb,\n                    bottom: 5,\n                },\n                label: {\n                    show: true,\n                    formatter: '{b}',\n                    fontSize: 12,\n                },\n                upperLabel: subCatField ? {\n                    show: true,\n                    height: 20,\n                    fontSize: 11,\n                    color: '#fff',\n                } : undefined,\n                levels: subCatField ? [\n                    {\n                        // Root level (hidden)\n                        itemStyle: { borderWidth: 0, gapWidth: 2 },\n                    },\n                    {\n                        // Top-level categories\n                        itemStyle: {\n                            borderWidth: 2,\n                            borderColor: '#fff',\n                            gapWidth: 2,\n                        },\n                        upperLabel: { show: true },\n                    },\n                    {\n                        // Leaf level (sub-categories)\n                        itemStyle: {\n                            borderWidth: 1,\n                            borderColor: 'rgba(255,255,255,0.5)',\n                            gapWidth: 1,\n                        },\n                        label: { show: true, fontSize: 10 },\n                        colorSaturation: [0.3, 0.6],\n                        colorMappingBy: 'value',\n                    },\n                ] : [\n                    {\n                        itemStyle: {\n                            borderWidth: 2,\n                            borderColor: '#fff',\n                            gapWidth: 2,\n                        },\n                    },\n                ],\n            }],\n            color: DEFAULT_COLORS,\n            _width: canvasW,\n            _height: canvasH,\n        };\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        {\n            key: 'breadcrumb', label: 'Breadcrumb', type: 'discrete', options: [\n                { value: true, label: 'Show (default)' },\n                { value: false, label: 'Hide' },\n            ],\n        } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/utils.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Shared helper functions for ECharts template hooks.\n * Pure logic — no UI dependencies.\n */\n\nimport type { ChannelSemantics, InstantiateContext } from '../../core/types';\n\n/**\n * Get canonical category order for a channel (from buildECEncodings or channelSemantics).\n * Use when calling extractCategories so sort order is consistent across templates.\n */\nexport function getCategoryOrder(ctx: InstantiateContext, channel: string): string[] | undefined {\n    return (ctx.resolvedEncodings as any)?.[channel]?.ordinalSortOrder\n        ?? ctx.channelSemantics?.[channel]?.ordinalSortOrder;\n}\n\n// Re-export circumference-pressure functions from core (shared with VL backend)\nexport {\n    computeCircumferencePressure,\n    computeEffectiveBarCount,\n    type CircumferencePressureParams,\n    type CircumferencePressureResult,\n} from '../../core/decisions';\n\n// ---------------------------------------------------------------------------\n// Discrete-dimension helpers (mirrored from vegalite/templates/utils.ts)\n// ---------------------------------------------------------------------------\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\n/**\n * Get the number of unique non-null values for a field in the data table.\n */\nexport function getFieldCardinality(field: string, table: any[]): number {\n    return new Set(table.map((r: any) => r[field]).filter((v: any) => v != null)).size;\n}\n\n/**\n * Determine the discrete type for a given encoding type.\n */\nexport function resolveDiscreteType(\n    currentType: string,\n    field: string | undefined,\n    table: any[],\n): 'nominal' | 'ordinal' {\n    if (currentType === 'nominal') return 'nominal';\n    if (currentType === 'ordinal') return 'ordinal';\n    if (currentType === 'temporal') return 'ordinal';\n    if (currentType === 'quantitative' && field && table.length > 0) {\n        const cardinality = getFieldCardinality(field, table);\n        return cardinality <= 20 ? 'ordinal' : 'nominal';\n    }\n    return 'nominal';\n}\n\n// ---------------------------------------------------------------------------\n// ECharts-specific helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Extract unique category values from data for a given field, preserving order.\n * If `ordinalSortOrder` is provided, returns values sorted in that canonical order.\n */\nexport function extractCategories(data: any[], field: string, ordinalSortOrder?: string[]): string[] {\n    const seen = new Set<string>();\n    const result: string[] = [];\n    for (const row of data) {\n        const val = row[field];\n        if (val != null) {\n            const key = String(val);\n            if (!seen.has(key)) {\n                seen.add(key);\n                result.push(key);\n            }\n        }\n    }\n\n    // Apply canonical ordinal sort if available\n    if (ordinalSortOrder && ordinalSortOrder.length > 0) {\n        const orderMap = new Map(ordinalSortOrder.map((v, i) => [v, i]));\n        result.sort((a, b) => {\n            const ia = orderMap.get(a);\n            const ib = orderMap.get(b);\n            if (ia !== undefined && ib !== undefined) return ia - ib;\n            if (ia !== undefined) return -1;\n            if (ib !== undefined) return 1;\n            return 0;\n        });\n    }\n\n    return result;\n}\n\n/**\n * Group data by a categorical field.\n * Returns a map: seriesName → rows[].\n */\nexport function groupBy(data: any[], field: string): Map<string, any[]> {\n    const groups = new Map<string, any[]>();\n    for (const row of data) {\n        const key = String(row[field] ?? '');\n        if (!groups.has(key)) groups.set(key, []);\n        groups.get(key)!.push(row);\n    }\n    return groups;\n}\n\n/**\n * Build ECharts axis config from a channel semantic.\n */\nexport function buildAxisConfig(\n    cs: ChannelSemantics | undefined,\n    position: 'x' | 'y',\n    categories?: string[],\n): any {\n    if (!cs) return { type: 'value' };\n\n    const axisType = isDiscrete(cs.type) ? 'category' : cs.type === 'temporal' ? 'time' : 'value';\n    const axis: any = { type: axisType };\n\n    if (axisType === 'category' && categories) {\n        axis.data = categories;\n    }\n\n    // Add field name as axis name\n    if (cs.field) {\n        axis.name = cs.field;\n        axis.nameLocation = 'middle';\n        axis.nameGap = 30;\n    }\n\n    return axis;\n}\n\n/**\n * Pick a default ECharts color palette.\n */\nexport const DEFAULT_COLORS = [\n    '#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de',\n    '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc', '#48b8d0',\n];\n\n/**\n * Detect which axis is the category (banded) axis and which is the value axis.\n * Returns { categoryAxis, valueAxis } with 'x' or 'y'.\n */\nexport function detectAxes(\n    channelSemantics: Record<string, ChannelSemantics>,\n): { categoryAxis: 'x' | 'y'; valueAxis: 'x' | 'y' } {\n    const xCS = channelSemantics.x;\n    const yCS = channelSemantics.y;\n\n    // If x is discrete → x is category\n    if (xCS && isDiscrete(xCS.type)) {\n        return { categoryAxis: 'x', valueAxis: 'y' };\n    }\n    // If y is discrete → y is category (horizontal bars)\n    if (yCS && isDiscrete(yCS.type)) {\n        return { categoryAxis: 'y', valueAxis: 'x' };\n    }\n    // x quantitative + y temporal → horizontal bars (VL: x=bar length, y=dates)\n    if (xCS?.type === 'quantitative' && yCS?.type === 'temporal') {\n        return { categoryAxis: 'y', valueAxis: 'x' };\n    }\n    // x temporal + y quantitative → vertical bars (VL: x=dates, y=bar length)\n    if (xCS?.type === 'temporal' && yCS?.type === 'quantitative') {\n        return { categoryAxis: 'x', valueAxis: 'y' };\n    }\n    // Default: x is category\n    return { categoryAxis: 'x', valueAxis: 'y' };\n}\n\n\n"
  },
  {
    "path": "src/lib/agents-chart/echarts/templates/waterfall.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts Waterfall Chart — cumulative bar with start/delta/end (mirror vegalite/templates/waterfall.ts).\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { extractCategories } from './utils';\n\nexport const ecWaterfallChartDef: ChartTemplateDef = {\n    chart: 'Waterfall Chart',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'y', 'color', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: () => ({ axisFlags: { x: { banded: true } } }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table } = ctx;\n        const xField = channelSemantics.x?.field || 'Category';\n        const yField = channelSemantics.y?.field || 'Amount';\n        const colorField = channelSemantics.color?.field;\n\n        const categories = extractCategories(table, xField, undefined);\n        const rows = categories.map(cat => table.find((r: any) => String(r[xField]) === cat)).filter(Boolean);\n        const values = rows.map((r: any) => Number(r[yField]) || 0);\n\n        const hasTypeCol = !!colorField;\n        let types: string[];\n        if (hasTypeCol) {\n            types = rows.map((r: any) => String(r[colorField] ?? 'delta'));\n        } else {\n            types = values.map((_, i) => i === 0 ? 'start' : i === values.length - 1 ? 'end' : 'delta');\n        }\n\n        let running = 0;\n        const baseData: number[] = [];\n        const deltaData: number[] = [];\n        const colors: string[] = [];\n        for (let i = 0; i < values.length; i++) {\n            const v = values[i];\n            const t = types[i];\n            if (t === 'start') {\n                baseData.push(0);\n                deltaData.push(v);\n                running = v;\n                colors.push('#5470c6');\n            } else if (t === 'end') {\n                baseData.push(running);\n                deltaData.push(v);\n                colors.push('#5470c6');\n            } else {\n                baseData.push(running);\n                running += v;\n                deltaData.push(v);\n                colors.push(v >= 0 ? '#91cc75' : '#ee6666');\n            }\n        }\n\n        const option: any = {\n            tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },\n            xAxis: { type: 'category', data: categories, name: xField },\n            yAxis: { type: 'value', name: yField },\n            series: [\n                { type: 'bar', name: '_base', data: baseData, stack: 'wf', itemStyle: { color: 'transparent' } },\n                {\n                    type: 'bar',\n                    name: 'Delta',\n                    data: deltaData,\n                    stack: 'wf',\n                    itemStyle: { color: (params: any) => colors[params.dataIndex] },\n                },\n            ],\n        };\n\n        Object.assign(spec, option);\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/gofish/README.md",
    "content": "# GoFish Backend\n\nCompiles the core semantic layer into [GoFish Graphics](https://www.npmjs.com/package/gofish-graphics) (v0.0.22) render calls. Unlike the other three backends which produce serializable JSON specs, GoFish renders directly to the DOM via Solid.js using a fluent API.\n\n## Output Format\n\n```typescript\n{\n  _gofish: { type, data, flow, mark, layers?, coord? },  // descriptor\n  render: (container: HTMLElement) => void,                // imperative render function\n  _width: number,\n  _height: number,\n  _specDescription: string,  // human-readable debug string\n}\n```\n\nA `GoFishSpec` object. The `render` function dynamically imports `gofish-graphics` at call time and executes the fluent API chain: `chart(data).flow(...).mark(...).render(el, opts)`.\n\n## Assembly Pipeline\n\n| Phase | Step | Description |\n|-------|------|-------------|\n| **0** | `resolveSemantics` | Shared — resolve field types, aggregates, sort orders |\n| 0a | `declareLayoutMode` | Template layout declaration |\n| 0b | `convertTemporalData` | Shared — temporal parsing |\n| 0c | `filterOverflow` | Shared — category truncation |\n| **1** | `computeLayout` | Shared — step sizes, subplot dimensions |\n| **2** | Build `resolvedEncodings` → `template.instantiate` → optional `postProcess` → compute dimensions → wrap in `GoFishSpec` with `buildRenderFunction` | `GoFishSpec` |\n\n**Key differences from other backends:**\n- No `instantiate-spec.ts` — GoFish templates write the `_gofish` descriptor directly; the assembler wraps it in a render closure.\n- Has a `postProcess` template hook not present in other backends.\n- `buildRenderFunction` translates the JSON-like descriptor into live GoFish API calls at render time.\n\n## File Structure\n\n```\ngofish/\n  assemble.ts    – assembleGoFish(), buildRenderFunction(), buildFlowOp(), buildMark()\n  index.ts       – barrel exports\n  templates/\n    index.ts     – template registry (8 templates, 4 categories)\n    scatter.ts   – Scatter Plot (with optional data-driven color via rect)\n    bar.ts       – Bar, Grouped Bar, Stacked Bar\n    line.ts      – Line Chart (single + multi-series via layers)\n    area.ts      – Area Chart (single + stacked via layers)\n    pie.ts       – Pie Chart (clock() coordinate)\n    scatterpie.ts – Scatter Pie (scatter-positioned mini pies)\n    utils.ts     – detectAxes(), extractCategories(), aggregateByCategory(), groupBy()\n```\n\n## Template Definitions (8 templates)\n\n| Category | Charts |\n|----------|--------|\n| Scatter & Point | Scatter Plot |\n| Bar | Bar Chart, Grouped Bar, Stacked Bar |\n| Line & Area | Line Chart, Area Chart |\n| Part-to-Whole | Pie Chart, Scatter Pie Chart |\n\n## GoFish API Patterns\n\n### Flow Operators\n| Operator | Usage | Description |\n|----------|-------|-------------|\n| `spread(field, opts)` | Categorical axis | Distributes items along an axis by category |\n| `stack(field, opts)` | Stacking | Stacks items by category; `dir: \"x\"` or `\"y\"` |\n| `scatter(key, {x, y})` | Positional | Places items at (x, y) positions keyed by unique ID |\n| `group(field)` | Grouping | Groups data for multi-series marks (line, area) |\n\n### Marks\n| Mark | Usage | Notes |\n|------|-------|-------|\n| `rect({h, w, fill})` | Bar, pie slices | Data-driven fill via field name |\n| `circle({r, fill})` | Scatter (no color) | `fill` accepts literal CSS colors only, NOT field names |\n| `scaffold({h, fill}).name(\"label\")` | Line/area anchor | Creates invisible positioned points; `.name()` only works on configured marks (not bare `scaffold()`) |\n| `line()` / `area({opacity})` | Connect points | Applied after `scaffold` + `select` or `group` |\n\n### Coordinate Transforms\n| Transform | Usage |\n|-----------|-------|\n| `clock()` | Polar coordinates for pie/rose charts. Passed to `chart(data, { coord: clock() })` |\n\n### Rendering Paths in `buildRenderFunction`\n\n1. **Layered charts** (multi-series line/area): Uses named marks + `gf.layer()` + `gf.select()` for cross-layer references.\n2. **Simple charts** (bar, scatter, single-series line/area, pie): Direct `chart(data).flow().mark().render()`.\n3. **Scatterpie**: Mark is a function `(data) => chart(data[0].collection, {coord: clock()}).flow(stack).mark(rect)`.\n\n### Dimension Calculation\n- **Layered charts**: Use `subplotWidth`/`subplotHeight` from layout directly (gas-pressure continuous sizing).\n- **Non-layered discrete-axis charts**: Use `step × count` from layout.\n- **Padding**: 80px added to both width and height for axes/labels.\n\n## Known Issues & Notes\n\n- **ESM-only**: `gofish-graphics` is an ESM-only package. Loaded via dynamic `import()` inside `buildRenderFunction` to avoid bundling issues with CommonJS consumers.\n- **Solid.js dependency**: GoFish renders to DOM via Solid.js — it does not produce a serializable spec. The `_gofish` descriptor is for debugging only.\n- **`scaffold()` bare vs configured**: `scaffold()` with no arguments returns a bare function whose `.name` is `Function.name` (a string, not callable). Always pass options: `scaffold({h: field}).name(\"label\")`.\n- **`circle({fill})` limitation**: GoFish's `circle` mark only accepts literal CSS color strings for `fill`, not data field names. For data-driven scatter color, the template uses `rect({w:8, h:8, fill: field})` as small colored squares instead.\n- **No faceting support**: GoFish has no faceting mechanism. Column/row channels are accepted in template definitions but not implemented.\n- **Multi-series line/area**: Uses `scaffold({h, fill}).name(\"pts\")` + `group(colorField)` + `line()`/`area()`. The assembler tries `mark.name(label)` first, falls back to `spec.as(label)`.\n- **Pie chart**: Uses `chart(data, { coord: clock() })` + `stack(catField, { dir: \"x\" })` + `rect({ w: valField, fill: catField })`. The `transform: { x: w/2, y: h/2 }` render option centers the chart.\n- **Scatter Pie**: Unique to GoFish — scatter-positioned mini pies. The template restructures flat data into `{_key, _x, _y, collection: [...]}` and the mark is a function returning a sub-chart.\n- **`--legacy-peer-deps`**: Required when installing `gofish-graphics` due to Solid.js peer dependency conflicts.\n"
  },
  {
    "path": "src/lib/agents-chart/gofish/assemble.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish chart assembly — Two-Stage Pipeline Coordinator.\n *\n * Reuses the **same core analysis pipeline** as all other backends:\n *   Phase 0:  resolveChannelSemantics  → ChannelSemantics\n *   Step 0a:  declareLayoutMode    → LayoutDeclaration\n *   Step 0b:  convertTemporalData  → converted data\n *   Step 0c:  filterOverflow       → filtered data, nominalCounts\n *   Phase 1:  computeLayout        → LayoutResult\n *\n * Then diverges for Phase 2 (GoFish-specific):\n *   template.instantiate → builds GoFish descriptor (_gofish)\n *   assembler wraps into GoFishSpec with render(container) method\n *\n * ── Backend Translation Responsibilities ────────────────────────────\n * GoFish renders directly to DOM via Solid.js. The assembler produces\n * a GoFishSpec object containing:\n *   - _gofish: descriptor of flow operators, mark shape, data\n *   - render(container): function that creates the GoFish chart\n *   - _width / _height: computed canvas dimensions\n *   - _warnings: any warnings from the pipeline\n *   - _specDescription: human-readable description for debugging\n *\n * Key structural differences from other backends:\n *   VL:  { mark, encoding, data: {values}, width, height }\n *   EC:  { xAxis, yAxis, series: [{type, data}], tooltip, legend, grid }\n *   CJS: { type, data: { labels, datasets[] }, options: { scales, plugins } }\n *   GF:  { _gofish: {type, data, flow, mark}, render: (el) => void }\n *\n * This module has NO React, Redux, or UI framework dependencies.\n */\n\nimport {\n    ChartTemplateDef,\n    ChartAssemblyInput,\n    AssembleOptions,\n    LayoutDeclaration,\n    InstantiateContext,\n} from '../core/types';\nimport type { ChartWarning } from '../core/types';\nimport { gfGetTemplateDef } from './templates';\nimport { resolveChannelSemantics, convertTemporalData } from '../core/resolve-semantics';\nimport { computeZeroDecision } from '../core/semantic-types';\nimport { filterOverflow } from '../core/filter-overflow';\nimport { computeLayout, computeChannelBudgets } from '../core/compute-layout';\n\n// ---------------------------------------------------------------------------\n// GoFish Spec Type\n// ---------------------------------------------------------------------------\n\n/**\n * Output of assembleGoFish — contains the GoFish descriptor and render function.\n */\nexport interface GoFishSpec {\n    /** GoFish descriptor: data, flow operators, mark shape */\n    _gofish: {\n        type: string;\n        data: any[];\n        flow?: any[];\n        mark?: any;\n        layers?: any[];\n        coord?: string;\n    };\n    /** Render the GoFish chart into a DOM container */\n    render: (container: HTMLElement) => void;\n    /** Computed width */\n    _width: number;\n    /** Computed height */\n    _height: number;\n    /** Warnings from assembly pipeline */\n    _warnings?: ChartWarning[];\n    /** Human-readable spec description for debugging */\n    _specDescription: string;\n    /** Length of data used */\n    _dataLength: number;\n}\n\n// ---------------------------------------------------------------------------\n// Render function builder\n// ---------------------------------------------------------------------------\n\n/**\n * Build a render function that calls GoFish's fluent API to render a chart.\n * Dynamically imports gofish-graphics to avoid bundling issues.\n */\nfunction buildRenderFunction(\n    gfDesc: any,\n    width: number,\n    height: number,\n): (container: HTMLElement) => void {\n    return (container: HTMLElement) => {\n        // Dynamic import of gofish-graphics (ESM-only, optional dependency)\n        // @ts-ignore — gofish-graphics may not be installed\n        import('gofish-graphics').then((gf: any) => {\n            // Clear previous content\n            container.innerHTML = '';\n\n            const renderOpts: any = {\n                w: width,\n                h: height,\n                axes: true,\n            };\n\n            if (gfDesc.type === 'todo') {\n                // TODO chart type — show informational message\n                container.innerHTML = `<div style=\"color:#666;padding:16px;font-size:13px;line-height:1.5;\">\n                    <strong>GoFish TODO:</strong><br/>${gfDesc.message || 'Not yet implemented.'}\n                </div>`;\n                return;\n            }\n\n            if (gfDesc.layers) {\n                // Layer-based charts (line, area with multi-series)\n                const layerSpecs: any[] = [];\n\n                for (const layerDef of gfDesc.layers) {\n                    let spec: any;\n\n                    if (layerDef.select) {\n                        // Second layer: select from named marks\n                        spec = gf.chart(gf.select(layerDef.select));\n                    } else {\n                        spec = gf.chart(gfDesc.data);\n                    }\n\n                    // Apply flow operators\n                    if (layerDef.flow && layerDef.flow.length > 0) {\n                        const flowOps = layerDef.flow.map((f: any) => buildFlowOp(gf, f));\n                        spec = spec.flow(...flowOps);\n                    }\n\n                    // Apply mark\n                    if (layerDef.mark) {\n                        const mark = buildMark(gf, layerDef.mark);\n                        const layerName = layerDef.mark.name;\n\n                        if (layerName) {\n                            // Try naming via mark.name() (official docs pattern:\n                            //   scaffold({h:\"count\"}).name(\"points\"))\n                            // Falls back to spec.as() if mark.name isn't callable.\n                            try {\n                                const namedMark = mark.name(layerName);\n                                spec = spec.mark(namedMark);\n                            } catch {\n                                spec = spec.mark(mark);\n                                try {\n                                    spec = spec.as(layerName);\n                                } catch {\n                                    // Layer naming not available — select() may fail\n                                }\n                            }\n                        } else {\n                            spec = spec.mark(mark);\n                        }\n                    }\n\n                    layerSpecs.push(spec);\n                }\n\n                // Apply coordinate transform if specified\n                if (gfDesc.coord === 'clock') {\n                    gf.layer({ coord: gf.clock() }, layerSpecs)\n                        .render(container, renderOpts);\n                } else {\n                    gf.layer(layerSpecs).render(container, renderOpts);\n                }\n            } else {\n                // Simple single-flow charts (bar, scatter, pie)\n                // Pass coord directly to chart() when specified (e.g. clock() for pie)\n                const chartOpts: any = {};\n                if (gfDesc.coord === 'clock') {\n                    chartOpts.coord = gf.clock();\n                }\n                const hasChartOpts = Object.keys(chartOpts).length > 0;\n                let spec = hasChartOpts\n                    ? gf.chart(gfDesc.data, chartOpts)\n                    : gf.chart(gfDesc.data);\n\n                // Apply flow operators\n                if (gfDesc.flow && gfDesc.flow.length > 0) {\n                    const flowOps = gfDesc.flow.map((f: any) => buildFlowOp(gf, f));\n                    spec = spec.flow(...flowOps);\n                }\n\n                // Apply mark\n                if (gfDesc.mark && gfDesc.mark.shape === 'scatterpie') {\n                    // Scatterpie: mark is a function that returns a sub-chart (pie per point)\n                    const { colorField, angleField, pieSize } = gfDesc.mark.options;\n                    spec = spec.mark((data: any) => {\n                        return gf.chart(data[0].collection, { coord: gf.clock() })\n                            .flow(gf.stack(colorField, { dir: 'x', h: pieSize || 20 }))\n                            .mark(gf.rect({ w: angleField, fill: colorField }));\n                    });\n                } else if (gfDesc.mark) {\n                    spec = spec.mark(buildMark(gf, gfDesc.mark));\n                }\n\n                // Render — add centering transform for polar charts\n                if (gfDesc.coord === 'clock') {\n                    spec.render(container, {\n                        ...renderOpts,\n                        transform: { x: width / 2, y: height / 2 },\n                    });\n                } else {\n                    spec.render(container, renderOpts);\n                }\n            }\n        }).catch((err: any) => {\n            container.innerHTML = `<div style=\"color:red;padding:8px;font-size:12px;\">\n                GoFish render error: ${err.message}\n            </div>`;\n        });\n    };\n}\n\n/**\n * Build a GoFish flow operator from descriptor.\n */\nfunction buildFlowOp(gf: any, desc: any): any {\n    switch (desc.op) {\n        case 'spread':\n            return gf.spread(desc.field, desc.options || {});\n        case 'stack':\n            return gf.stack(desc.field, desc.options || {});\n        case 'scatter':\n            return gf.scatter(desc.field, desc.options || {});\n        case 'group':\n            return gf.group(desc.field);\n        case 'derive':\n            return gf.derive(desc.fn);\n        default:\n            throw new Error(`Unknown GoFish flow operator: ${desc.op}`);\n    }\n}\n\n/**\n * Build a GoFish mark from descriptor.\n */\nfunction buildMark(gf: any, desc: any): any {\n    const opts = desc.options;\n    const hasOpts = opts && Object.keys(opts).length > 0;\n    const callMark = (fn: any) => hasOpts ? fn(opts) : fn();\n    switch (desc.shape) {\n        case 'rect':\n            return callMark(gf.rect);\n        case 'circle':\n            return callMark(gf.circle);\n        case 'line':\n            return callMark(gf.line);\n        case 'area':\n            return callMark(gf.area);\n        case 'scaffold':\n            return callMark(gf.scaffold);\n        case 'ellipse':\n            return callMark(gf.ellipse);\n        case 'petal':\n            return callMark(gf.petal);\n        default:\n            return callMark(gf.rect);\n    }\n}\n\n/**\n * Build a human-readable description of the GoFish spec for debugging.\n */\nfunction buildSpecDescription(gfDesc: any): string {\n    const parts: string[] = [`chart(data[${gfDesc.data?.length ?? 0}])`];\n\n    if (gfDesc.layers) {\n        for (const layer of gfDesc.layers) {\n            const layerParts: string[] = [];\n            if (layer.select) layerParts.push(`select(\"${layer.select}\")`);\n            if (layer.flow) {\n                for (const f of layer.flow) {\n                    layerParts.push(`.${f.op}(\"${f.field}\")`);\n                }\n            }\n            if (layer.mark) {\n                layerParts.push(`.mark(${layer.mark.shape}(${JSON.stringify(layer.mark.options)}))`);\n            }\n            parts.push(`  layer: ${layerParts.join('')}`);\n        }\n    } else {\n        if (gfDesc.flow) {\n            for (const f of gfDesc.flow) {\n                parts.push(`.flow(${f.op}(\"${f.field}\", ${JSON.stringify(f.options || {})}))`);\n            }\n        }\n        if (gfDesc.mark) {\n            parts.push(`.mark(${gfDesc.mark.shape}(${JSON.stringify(gfDesc.mark.options || {})}))`);\n        }\n    }\n\n    if (gfDesc.coord) {\n        parts.push(`coord: ${gfDesc.coord}`);\n    }\n\n    return parts.join('\\n');\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Assemble a GoFish spec — a descriptor + render function.\n *\n * ```ts\n * const spec = assembleGoFish({\n *   data: { values: myRows },\n *   semantic_types: { weight: 'Quantity' },\n *   chart_spec: { chartType: 'Bar Chart', encodings: { x: { field: 'category' }, y: { field: 'value' } } },\n * });\n * spec.render(document.getElementById('chart'));\n * ```\n *\n * @returns A GoFishSpec with render function, dimensions, and metadata\n */\nexport function assembleGoFish(input: ChartAssemblyInput): GoFishSpec {\n    const chartType = input.chart_spec.chartType;\n    const encodings = input.chart_spec.encodings;\n    const data = input.data.values ?? [];\n    const semanticTypes = input.semantic_types ?? {};\n    const canvasSize = input.chart_spec.canvasSize ?? { width: 400, height: 320 };\n    const chartProperties = input.chart_spec.chartProperties;\n    const options = input.options ?? {};\n    const chartTemplate = gfGetTemplateDef(chartType) as ChartTemplateDef;\n    if (!chartTemplate) {\n        throw new Error(`Unknown GoFish chart type: ${chartType}. Use gfAllTemplateDefs to see available types.`);\n    }\n\n    const warnings: ChartWarning[] = [];\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // PHASE 0: Resolve Semantics (shared with all backends)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const tplMark = chartTemplate.template?.mark;\n    const templateMarkType = typeof tplMark === 'string' ? tplMark : tplMark?.type;\n\n    // Convert temporal data once — feeds semantic resolution and all downstream stages\n    const convertedData = convertTemporalData(data, semanticTypes);\n\n    const channelSemantics = resolveChannelSemantics(\n        encodings, data, semanticTypes, convertedData,\n    );\n\n    // Finalize zero-baseline (requires template mark knowledge)\n    const effectiveMarkType = templateMarkType || 'point';\n    for (const [channel, cs] of Object.entries(channelSemantics)) {\n        if ((channel === 'x' || channel === 'y') && cs.type === 'quantitative') {\n            const numericValues = data\n                .map(r => r[cs.field])\n                .filter((v: any) => v != null && typeof v === 'number' && !isNaN(v));\n            cs.zero = computeZeroDecision(\n                cs.semanticAnnotation.semanticType, channel, effectiveMarkType, numericValues,\n            );\n        }\n    }\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // STEP 0a: declareLayoutMode (shared hook)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const declaration: LayoutDeclaration = chartTemplate.declareLayoutMode\n        ? chartTemplate.declareLayoutMode(channelSemantics, data, chartProperties)\n        : {};\n\n    const effectiveOptions: AssembleOptions = {\n        ...options,\n        ...(declaration.paramOverrides || {}),\n    };\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // STEP 0b: filterOverflow (shared)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const allMarkTypes = new Set<string>();\n    if (templateMarkType) allMarkTypes.add(templateMarkType);\n\n    // ── Channel budgets (shared, in layout module) ─────────────────────\n    const budgets = computeChannelBudgets(\n        channelSemantics, declaration, convertedData, canvasSize, effectiveOptions,\n    );\n\n    const overflowResult = filterOverflow(\n        channelSemantics, declaration, encodings, convertedData,\n        budgets, allMarkTypes,\n    );\n\n    const values = overflowResult.filteredData;\n    warnings.push(...overflowResult.warnings);\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // PHASE 1: Compute Layout (shared — completely target-agnostic)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const layoutResult = computeLayout(\n        channelSemantics,\n        declaration,\n        values,\n        canvasSize,\n        effectiveOptions,\n    );\n\n    layoutResult.truncations = overflowResult.truncations;\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // PHASE 2: Instantiate GoFish Spec (GF-specific)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    // Build resolved encodings for interface compatibility\n    const resolvedEncodings: Record<string, any> = {};\n    for (const [channel, encoding] of Object.entries(encodings)) {\n        const cs = channelSemantics[channel];\n        if (cs) {\n            resolvedEncodings[channel] = {\n                field: cs.field,\n                type: cs.type,\n                aggregate: encoding.aggregate,\n            };\n        }\n    }\n\n    // Template instantiate\n    const instantiateContext: InstantiateContext = {\n        channelSemantics,\n        layout: layoutResult,\n        table: values,\n        resolvedEncodings,\n        encodings,\n        chartProperties,\n        canvasSize,\n        semanticTypes,\n        chartType,\n        assembleOptions: effectiveOptions,\n    };\n\n    const gfSpec: any = structuredClone(chartTemplate.template);\n\n    chartTemplate.instantiate(gfSpec, instantiateContext);\n\n    // Template-specific post-processing\n    if (chartTemplate.postProcess) {\n        chartTemplate.postProcess(gfSpec, instantiateContext);\n    }\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // Compute dimensions\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const gfDescriptor = gfSpec._gofish;\n    if (!gfDescriptor) {\n        throw new Error(`GoFish template for \"${chartType}\" did not produce a _gofish descriptor`);\n    }\n\n    const PADDING = 80;\n\n    // For layered charts (line, area) GoFish's spread() handles discrete\n    // positioning internally — use the full subplot canvas, not step × count.\n    const isLayered = !!gfDescriptor.layers;\n\n    let plotWidth: number;\n    let plotHeight: number;\n\n    if (isLayered) {\n        // Line / area charts: pass full canvas to GoFish\n        plotWidth = layoutResult.subplotWidth || canvasSize.width;\n        plotHeight = layoutResult.subplotHeight || canvasSize.height;\n    } else {\n        const xIsDiscrete = layoutResult.xNominalCount > 0 || layoutResult.xContinuousAsDiscrete > 0;\n        const yIsDiscrete = layoutResult.yNominalCount > 0 || layoutResult.yContinuousAsDiscrete > 0;\n\n        if (xIsDiscrete) {\n            if (layoutResult.xStepUnit === 'group') {\n                plotWidth = layoutResult.subplotWidth;\n            } else {\n                const xItemCount = layoutResult.xNominalCount || layoutResult.xContinuousAsDiscrete || 0;\n                plotWidth = xItemCount > 0 ? layoutResult.xStep * xItemCount : (layoutResult.subplotWidth || canvasSize.width);\n            }\n        } else {\n            plotWidth = layoutResult.subplotWidth || canvasSize.width;\n        }\n\n        if (yIsDiscrete) {\n            if (layoutResult.yStepUnit === 'group') {\n                plotHeight = layoutResult.subplotHeight;\n            } else {\n                const yItemCount = layoutResult.yNominalCount || layoutResult.yContinuousAsDiscrete || 0;\n                plotHeight = yItemCount > 0 ? layoutResult.yStep * yItemCount : (layoutResult.subplotHeight || canvasSize.height);\n            }\n        } else {\n            plotHeight = layoutResult.subplotHeight || canvasSize.height;\n        }\n    }\n\n    const finalWidth = plotWidth + PADDING;\n    const finalHeight = plotHeight + PADDING;\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // RESULT\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const result: GoFishSpec = {\n        _gofish: gfDescriptor,\n        render: buildRenderFunction(gfDescriptor, finalWidth - PADDING, finalHeight - PADDING),\n        _width: finalWidth,\n        _height: finalHeight,\n        _specDescription: buildSpecDescription(gfDescriptor),\n        _dataLength: values.length,\n    };\n\n    if (warnings.length > 0) {\n        result._warnings = warnings;\n    }\n\n    return result;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/gofish/index.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @module agents-chart/gofish\n *\n * GoFish backend for agents-chart.\n *\n * Compiles the core semantic layer into GoFish render calls.\n * GoFish uses a fluent API: chart(data).flow(...).mark(...).render(el, opts).\n *\n * Unlike VL/EC/CJS which produce JSON specs, GoFish renders directly to the\n * DOM via Solid.js. The assembler produces a GoFishSpec descriptor object\n * containing a `render(container)` function plus metadata for debugging.\n *\n * Architecture contrast with other backends:\n *   VL:  encoding-channel-based — { encoding: { x: { field, type }, y: ... } }\n *   EC:  series-based           — { series: [{ type, data }], xAxis, yAxis }\n *   CJS: dataset-based          — { type, data: { labels, datasets[] }, options }\n *   GF:  flow-based             — chart(data).flow(spread/stack/scatter).mark(rect/circle/line)\n *\n * Same core pipeline (Phase 0 + Phase 1), different Phase 2 output.\n */\n\n// GF assembly function\nexport { assembleGoFish, type GoFishSpec } from './assemble';\n\n// GF template registry\nexport {\n    gfTemplateDefs,\n    gfAllTemplateDefs,\n    gfGetTemplateDef,\n    gfGetTemplateChannels,\n} from './templates';\n\n// GF recommendation & adaptation\nexport { gfAdaptChart, gfRecommendEncodings } from './recommendation';\n"
  },
  {
    "path": "src/lib/agents-chart/gofish/recommendation.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish recommendation & adaptation wrappers.\n */\n\nimport { adaptChannels, recommendChannels } from '../core/recommendation';\nimport { gfGetTemplateChannels } from './templates';\n\nexport function gfAdaptChart(\n    sourceType: string,\n    targetType: string,\n    encodings: Record<string, string>,\n    data?: any[],\n    semanticTypes?: Record<string, string>,\n): Record<string, string> {\n    const targetChannels = gfGetTemplateChannels(targetType);\n    return adaptChannels(sourceType, targetType, targetChannels, encodings, data, semanticTypes);\n}\n\nexport function gfRecommendEncodings(\n    chartType: string,\n    data: any[],\n    semanticTypes: Record<string, string>,\n): Record<string, string> {\n    const rec = recommendChannels(chartType, data, semanticTypes);\n    const validChannels = gfGetTemplateChannels(chartType);\n    const result: Record<string, string> = {};\n    for (const [ch, field] of Object.entries(rec)) {\n        if (validChannels.includes(ch)) result[ch] = field;\n    }\n    return result;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/gofish/templates/area.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish Area Chart template.\n *\n * Official GoFish area chart pattern:\n *   layer([\n *     chart(data).flow(spread(x, {dir:\"x\", spacing})).mark(scaffold({h:y}).name(\"points\")),\n *     chart(select(\"points\")).mark(area({opacity: 0.8})),\n *   ])\n *\n * Multi-series (stacked area) also needs group() — marked TODO.\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { detectAxes } from './utils';\n\nexport const gfAreaChartDef: ChartTemplateDef = {\n    chart: 'Area Chart',\n    template: { mark: 'area', encoding: {} },\n    channels: ['x', 'y', 'color', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'area',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, layout, canvasSize } = ctx;\n        const { categoryAxis, valueAxis } = detectAxes(channelSemantics);\n        const colorField = channelSemantics.color?.field;\n\n        const catField = channelSemantics[categoryAxis]?.field;\n        const valField = channelSemantics[valueAxis]?.field;\n        if (!catField || !valField) return;\n\n        const isHorizontal = categoryAxis === 'y';\n        const spreadDir = isHorizontal ? 'y' : 'x';\n\n        const catCount = new Set(table.map((r: any) => r[catField])).size;\n        const canvasW = isHorizontal\n            ? (layout?.subplotHeight ?? canvasSize.height)\n            : (layout?.subplotWidth ?? canvasSize.width);\n        const spacing = Math.max(10, Math.round(canvasW / Math.max(1, catCount)));\n\n        if (colorField) {\n            // Stacked/layered area: spread + stack + scaffold({h, fill}).name + group + area\n            // Pattern from official GoFish stacked-area-chart example.\n            spec._gofish = {\n                type: 'area-multi',\n                data: table,\n                layers: [\n                    {\n                        flow: [\n                            {\n                                op: 'spread',\n                                field: catField,\n                                options: { dir: spreadDir, spacing },\n                            },\n                            {\n                                op: 'stack',\n                                field: colorField,\n                                options: { dir: isHorizontal ? 'x' : 'y', label: false },\n                            },\n                        ],\n                        mark: {\n                            shape: 'scaffold',\n                            options: isHorizontal\n                                ? { w: valField, fill: colorField }\n                                : { h: valField, fill: colorField },\n                            name: 'bars',\n                        },\n                    },\n                    {\n                        select: 'bars',\n                        flow: [{ op: 'group', field: colorField }],\n                        mark: { shape: 'area', options: { opacity: 0.8 } },\n                    },\n                ],\n            };\n        } else {\n            // Single-series area: spread + scaffold + select + area\n            spec._gofish = {\n                type: 'area',\n                data: table,\n                layers: [\n                    {\n                        flow: [{\n                            op: 'spread',\n                            field: catField,\n                            options: { dir: spreadDir, spacing },\n                        }],\n                        mark: {\n                            shape: 'scaffold',\n                            options: isHorizontal\n                                ? { w: valField }\n                                : { h: valField },\n                            name: 'points',\n                        },\n                    },\n                    {\n                        select: 'points',\n                        flow: [],\n                        mark: { shape: 'area', options: { opacity: 0.8 } },\n                    },\n                ],\n            };\n        }\n\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/gofish/templates/bar.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish Bar Chart templates: Bar, Stacked Bar, Grouped Bar.\n *\n * GoFish approach:\n *   chart(data).flow(spread(catField, { dir: \"x\" })).mark(rect({ h: valField }))\n *   Stacked: add stack(colorField, { dir: \"y\" })\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport {\n    detectBandedAxisFromSemantics,\n    detectBandedAxisForceDiscrete,\n} from '../../vegalite/templates/utils';\nimport { detectAxes, aggregateByCategory, extractCategories, groupBy } from './utils';\n\n// ─── Bar Chart ──────────────────────────────────────────────────────────────\n\nexport const gfBarChartDef: ChartTemplateDef = {\n    chart: 'Bar Chart',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'y', 'color', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisFromSemantics(cs, table, { preferAxis: 'x' });\n        return {\n            axisFlags: result ? { [result.axis]: { banded: true } } : { x: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n        };\n    },\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, layout } = ctx;\n        const { categoryAxis, valueAxis } = detectAxes(channelSemantics);\n\n        const catField = channelSemantics[categoryAxis]?.field;\n        const valField = channelSemantics[valueAxis]?.field;\n        if (!catField || !valField) return;\n\n        const isHorizontal = categoryAxis === 'y';\n\n        // Compute bar width/height and spacing from layout\n        const step = isHorizontal ? layout.yStep : layout.xStep;\n        const barSize = step * (1 - layout.stepPadding);\n        const spacing = step * layout.stepPadding;\n\n        // Aggregate data: one bar per category\n        const catCS = channelSemantics[categoryAxis];\n        const categories = extractCategories(table, catField, catCS?.ordinalSortOrder);\n        const aggData = aggregateByCategory(table, catField, valField, categories);\n\n        // Store GoFish render descriptor\n        spec._gofish = {\n            type: 'bar',\n            data: aggData.map(d => ({ [catField]: d.category, [valField]: d.value })),\n            flow: [{\n                op: 'spread',\n                field: catField,\n                options: { \n                    dir: isHorizontal ? 'y' : 'x',\n                    spacing: spacing,\n                },\n            }],\n            mark: {\n                shape: 'rect',\n                options: isHorizontal\n                    ? { w: valField, h: barSize }\n                    : { h: valField, w: barSize },\n            },\n        };\n\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n\n// ─── Stacked Bar Chart ──────────────────────────────────────────────────────\n\nexport const gfStackedBarChartDef: ChartTemplateDef = {\n    chart: 'Stacked Bar Chart',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'y', 'color', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisFromSemantics(cs, table, { preferAxis: 'x' });\n        return {\n            axisFlags: result ? { [result.axis]: { banded: true } } : { x: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n            paramOverrides: { continuousMarkCrossSection: { x: 20, y: 20, seriesCountAxis: 'auto' } },\n        };\n    },\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, layout } = ctx;\n        const { categoryAxis, valueAxis } = detectAxes(channelSemantics);\n        const colorField = channelSemantics.color?.field;\n\n        const catField = channelSemantics[categoryAxis]?.field;\n        const valField = channelSemantics[valueAxis]?.field;\n        if (!catField || !valField) return;\n\n        const isHorizontal = categoryAxis === 'y';\n        const spreadDir = isHorizontal ? 'y' : 'x';\n        const stackDir = isHorizontal ? 'x' : 'y';\n\n        // Compute bar width/height and spacing from layout\n        const step = isHorizontal ? layout.yStep : layout.xStep;\n        const barSize = step * (1 - layout.stepPadding);\n        const spacing = step * layout.stepPadding;\n\n        const flow: any[] = [\n            { \n                op: 'spread', \n                field: catField, \n                options: { \n                    dir: spreadDir,\n                    spacing: spacing,\n                },\n            },\n        ];\n\n        if (colorField) {\n            flow.push({\n                op: 'stack', field: colorField,\n                options: { dir: stackDir, label: false },\n            });\n        }\n\n        spec._gofish = {\n            type: 'stacked-bar',\n            data: table,\n            flow,\n            mark: {\n                shape: 'rect',\n                options: isHorizontal\n                    ? { w: valField, h: barSize, fill: colorField || undefined }\n                    : { h: valField, w: barSize, fill: colorField || undefined },\n            },\n        };\n\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n\n// ─── Grouped Bar Chart ──────────────────────────────────────────────────────\n\nexport const gfGroupedBarChartDef: ChartTemplateDef = {\n    chart: 'Grouped Bar Chart',\n    template: { mark: 'bar', encoding: {} },\n    channels: ['x', 'y', 'group', 'column', 'row'],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisForceDiscrete(cs, table, { preferAxis: 'x' });\n        const axis = result?.axis || 'x';\n\n        return {\n            axisFlags: { [axis]: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n        };\n    },\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, layout } = ctx;\n        const { categoryAxis, valueAxis } = detectAxes(channelSemantics);\n        const groupField = channelSemantics.group?.field;\n\n        const catField = channelSemantics[categoryAxis]?.field;\n        const valField = channelSemantics[valueAxis]?.field;\n        if (!catField || !valField) return;\n\n        const isHorizontal = categoryAxis === 'y';\n        const spreadDir = isHorizontal ? 'y' : 'x';\n\n        // Compute bar width/height and spacing from layout\n        const step = isHorizontal ? layout.yStep : layout.xStep;\n        const usableStep = step * (1 - layout.stepPadding);\n        const spacing = step * layout.stepPadding;\n\n        // For grouped bars, divide bar size by number of groups (like ECharts does)\n        let barSize = usableStep;\n        if (groupField) {\n            const groupCount = new Set(table.map((r: any) => r[groupField])).size;\n            if (groupCount > 1) {\n                barSize = Math.max(1, Math.floor(usableStep / groupCount));\n            }\n        }\n\n        const flow: any[] = [\n            { \n                op: 'spread', \n                field: catField, \n                options: { \n                    dir: spreadDir,\n                    spacing: spacing,\n                },\n            },\n        ];\n\n        // Group by group field using stack in same direction (side-by-side within each category)\n        if (groupField) {\n            flow.push({\n                op: 'stack', field: groupField,\n                options: { dir: spreadDir, label: false },\n            });\n        }\n\n        spec._gofish = {\n            type: 'grouped-bar',\n            data: table,\n            flow,\n            mark: {\n                shape: 'rect',\n                options: isHorizontal\n                    ? { w: valField, h: barSize, fill: groupField || undefined }\n                    : { h: valField, w: barSize, fill: groupField || undefined },\n            },\n        };\n\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/gofish/templates/index.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish template registry.\n *\n * Mirrors the structure of other backend template registries.\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { gfScatterPlotDef } from './scatter';\nimport { gfBarChartDef, gfStackedBarChartDef, gfGroupedBarChartDef } from './bar';\nimport { gfLineChartDef } from './line';\nimport { gfAreaChartDef } from './area';\nimport { gfPieChartDef } from './pie';\nimport { gfScatterPieChartDef } from './scatterpie';\n\n/**\n * GoFish chart template definitions, grouped by category.\n */\nexport const gfTemplateDefs: { [key: string]: ChartTemplateDef[] } = {\n    'Scatter & Point': [gfScatterPlotDef],\n    'Bar':             [gfBarChartDef, gfGroupedBarChartDef, gfStackedBarChartDef],\n    'Line & Area':     [gfLineChartDef, gfAreaChartDef],\n    'Part-to-Whole':   [gfPieChartDef, gfScatterPieChartDef],\n};\n\n/**\n * Flat list of all GoFish chart template definitions.\n */\nexport const gfAllTemplateDefs: ChartTemplateDef[] = Object.values(gfTemplateDefs).flat();\n\n/**\n * Look up a GoFish chart template definition by chart type name.\n */\nexport function gfGetTemplateDef(chartType: string): ChartTemplateDef | undefined {\n    return gfAllTemplateDefs.find(t => t.chart === chartType);\n}\n\n/**\n * Get the available channels for a GoFish chart type.\n */\nexport function gfGetTemplateChannels(chartType: string): string[] {\n    return gfGetTemplateDef(chartType)?.channels || [];\n}\n"
  },
  {
    "path": "src/lib/agents-chart/gofish/templates/line.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish Line Chart template.\n *\n * Official GoFish line chart pattern:\n *   layer([\n *     chart(data).flow(scatter(key, {x, y})).mark(scaffold().name(\"points\")),\n *     chart(select(\"points\")).mark(line()),\n *   ])\n *\n * For categorical x-axis we use spread() instead of scatter().\n * Multi-series (color) requires group() which needs layer naming — marked TODO.\n */\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { detectAxes } from './utils';\n\nexport const gfLineChartDef: ChartTemplateDef = {\n    chart: 'Line Chart',\n    template: { mark: 'line', encoding: {} },\n    channels: ['x', 'y', 'color', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table, layout, canvasSize } = ctx;\n        const { categoryAxis, valueAxis } = detectAxes(channelSemantics);\n        const colorField = channelSemantics.color?.field;\n\n        const catField = channelSemantics[categoryAxis]?.field;\n        const valField = channelSemantics[valueAxis]?.field;\n        if (!catField || !valField) return;\n\n        const isHorizontal = categoryAxis === 'y';\n        const spreadDir = isHorizontal ? 'y' : 'x';\n\n        const catCount = new Set(table.map((r: any) => r[catField])).size;\n        const canvasW = isHorizontal\n            ? (layout?.subplotHeight ?? canvasSize.height)\n            : (layout?.subplotWidth ?? canvasSize.width);\n        const spacing = Math.max(10, Math.round(canvasW / Math.max(1, catCount)));\n\n        if (colorField) {\n            // Multi-series line: spread + scaffold({h, fill}).name + group + line\n            // scaffold(options).name() works because configured marks have .name().\n            spec._gofish = {\n                type: 'line-multi',\n                data: table,\n                layers: [\n                    {\n                        flow: [{\n                            op: 'spread',\n                            field: catField,\n                            options: { dir: spreadDir, spacing },\n                        }],\n                        mark: {\n                            shape: 'scaffold',\n                            options: isHorizontal\n                                ? { w: valField, fill: colorField }\n                                : { h: valField, fill: colorField },\n                            name: 'points',\n                        },\n                    },\n                    {\n                        select: 'points',\n                        flow: [{ op: 'group', field: colorField }],\n                        mark: { shape: 'line' },\n                    },\n                ],\n            };\n        } else {\n            // Single-series line: spread + scaffold + select + line\n            spec._gofish = {\n                type: 'line',\n                data: table,\n                layers: [\n                    {\n                        flow: [{\n                            op: 'spread',\n                            field: catField,\n                            options: { dir: spreadDir, spacing },\n                        }],\n                        mark: {\n                            shape: 'scaffold',\n                            options: isHorizontal\n                                ? { w: valField }\n                                : { h: valField },\n                            name: 'points',\n                        },\n                    },\n                    {\n                        select: 'points',\n                        flow: [],\n                        mark: { shape: 'line' },\n                    },\n                ],\n            };\n        }\n\n        delete spec.mark;\n        delete spec.encoding;\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/gofish/templates/pie.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish Pie Chart template.\n *\n * GoFish uses spread with polar coordinate transform for pie.\n * However the basic approach is:\n *   chart(data).flow(stack(catField, { dir: \"y\" }))\n *     .mark(rect({ h: valField, fill: catField }))\n * with a clock() coordinate transform on the layer.\n *\n * For simplicity in V1, we'll use spread + rect in polar space.\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { extractCategories, aggregateByCategory } from './utils';\n\nexport const gfPieChartDef: ChartTemplateDef = {\n    chart: 'Pie Chart',\n    template: { mark: 'arc', encoding: {} },\n    channels: ['size', 'color', 'column', 'row'],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table } = ctx;\n        const colorField = channelSemantics.color?.field;\n        const sizeField = channelSemantics.size?.field;\n\n        if (!colorField && !sizeField) return;\n\n        const catField = colorField || sizeField!;\n        const valField = sizeField || colorField!;\n\n        const categories = extractCategories(table, catField, channelSemantics.color?.ordinalSortOrder);\n\n        let pieData: any[];\n        if (sizeField && colorField && sizeField !== colorField) {\n            // color = category, size = measure\n            const aggData = aggregateByCategory(table, catField, valField, categories);\n            pieData = aggData.map(d => ({ [catField]: d.category, [valField]: d.value }));\n        } else if (colorField && !sizeField) {\n            // Count occurrences per category\n            const counts = new Map<string, number>();\n            for (const row of table) {\n                const cat = String(row[catField] ?? '');\n                counts.set(cat, (counts.get(cat) ?? 0) + 1);\n            }\n            pieData = categories.map(cat => ({\n                [catField]: cat,\n                _count: counts.get(cat) ?? 0,\n            }));\n        } else {\n            pieData = table;\n        }\n\n        const measureField = (sizeField && colorField && sizeField !== colorField)\n            ? valField\n            : (sizeField || '_count');\n\n        spec._gofish = {\n            type: 'pie',\n            data: pieData,\n            coord: 'clock',\n            flow: [{\n                op: 'stack',\n                field: catField,\n                options: { dir: 'x' },\n            }],\n            mark: {\n                shape: 'rect',\n                options: {\n                    w: measureField,\n                    fill: catField,\n                },\n            },\n        };\n\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'innerRadius', label: 'Donut', type: 'continuous', min: 0, max: 60, step: 5, defaultValue: 0 } as ChartPropertyDef,\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/gofish/templates/scatter.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish Scatter Plot template.\n *\n * GoFish approach:\n *   chart(data).flow(scatter(field, { x: xField, y: yField })).mark(circle({ r: N }))\n */\n\nimport { ChartTemplateDef } from '../../core/types';\n\nexport const gfScatterPlotDef: ChartTemplateDef = {\n    chart: 'Scatter Plot',\n    template: { mark: 'circle', encoding: {} },\n    channels: ['x', 'y', 'color', 'size', 'opacity', 'column', 'row'],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table } = ctx;\n        const xField = channelSemantics.x?.field;\n        const yField = channelSemantics.y?.field;\n        const colorField = channelSemantics.color?.field;\n\n        if (!xField || !yField) return;\n\n        // For GoFish scatter, we need a unique id per row.\n        const dataWithId = table.map((row, i) => ({ ...row, _gf_id: `p${i}` }));\n\n        // GoFish circle({fill}) only accepts literal CSS colors, not data fields.\n        // For data-driven color, use rect({fill: field}) with small fixed size,\n        // matching how stacked/grouped bar use rect({fill}) for data-driven fill.\n        const markShape = colorField ? 'rect' : 'circle';\n        const markOptions: Record<string, any> = colorField\n            ? { w: 8, h: 8, fill: colorField }\n            : { r: 5 };\n\n        spec._gofish = {\n            type: 'scatter',\n            data: dataWithId,\n            flow: [{\n                op: 'scatter',\n                field: '_gf_id',\n                options: { x: xField, y: yField },\n            }],\n            mark: {\n                shape: markShape,\n                options: markOptions,\n            },\n        };\n\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [\n        { key: 'opacity', label: 'Opacity', type: 'continuous', min: 0.1, max: 1, step: 0.05, defaultValue: 1 },\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/gofish/templates/scatterpie.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish Scatter Pie template.\n *\n * Scatter-positioned pie charts.  Each (x, y) location shows a small pie\n * chart whose slices are coloured by `color` and sized by `angle`.\n *\n * GoFish pattern:\n *   chart(scatterData)\n *     .flow(scatter(\"_key\", { x: \"_x\", y: \"_y\" }))\n *     .mark((data) =>\n *       chart(data[0].collection, { coord: clock() })\n *         .flow(stack(colorField, { dir: \"x\", h: pieSize }))\n *         .mark(rect({ w: angleField, fill: colorField }))\n *     )\n *\n * Channels: x (position), y (position), color (category), angle (value).\n */\n\nimport { ChartTemplateDef } from '../../core/types';\n\nexport const gfScatterPieChartDef: ChartTemplateDef = {\n    chart: 'Scatter Pie Chart',\n    template: { mark: 'arc', encoding: {} },\n    channels: ['x', 'y', 'color', 'angle'],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => {\n        const { channelSemantics, table } = ctx;\n        const xField = channelSemantics.x?.field;\n        const yField = channelSemantics.y?.field;\n        const colorField = channelSemantics.color?.field;\n        const angleField = channelSemantics.angle?.field\n            || channelSemantics.size?.field;   // fallback to size channel\n\n        if (!xField || !yField || !colorField) return;\n\n        // -----------------------------------------------------------------\n        // Restructure flat table into scatter-of-pies data.\n        //\n        // Input rows: { x: 10, y: 20, cat: \"A\", val: 5 }, ...\n        // Output:\n        //   [{ _key:\"10|20\", _x:10, _y:20,\n        //      collection: [{cat:\"A\",val:5}, {cat:\"B\",val:3}] }, …]\n        // -----------------------------------------------------------------\n\n        const positionMap = new Map<string, {\n            _x: any;\n            _y: any;\n            collection: Record<string, any>[];\n        }>();\n\n        for (const row of table) {\n            const xv = row[xField];\n            const yv = row[yField];\n            const key = `${xv}|${yv}`;\n\n            if (!positionMap.has(key)) {\n                positionMap.set(key, { _x: xv, _y: yv, collection: [] });\n            }\n\n            const entry: Record<string, any> = { [colorField]: row[colorField] };\n            if (angleField) entry[angleField] = row[angleField];\n            positionMap.get(key)!.collection.push(entry);\n        }\n\n        const scatterData = Array.from(positionMap.entries()).map(\n            ([key, val]) => ({\n                _key: key,\n                _x: val._x,\n                _y: val._y,\n                collection: val.collection,\n            }),\n        );\n\n        // Determine measure field for slice width\n        const measureField = angleField || '_count';\n\n        // If no angle field, add counts per category in each collection\n        if (!angleField) {\n            for (const pt of scatterData) {\n                const counts = new Map<string, number>();\n                for (const item of pt.collection) {\n                    const cat = String(item[colorField] ?? '');\n                    counts.set(cat, (counts.get(cat) ?? 0) + 1);\n                }\n                pt.collection = Array.from(counts.entries()).map(\n                    ([cat, cnt]) => ({ [colorField]: cat, _count: cnt }),\n                );\n            }\n        }\n\n        // Pie radius — reasonable default relative to chart size\n        const pieSize = 20;\n\n        spec._gofish = {\n            type: 'scatterpie',\n            data: scatterData,\n            flow: [{\n                op: 'scatter',\n                field: '_key',\n                options: { x: '_x', y: '_y' },\n            }],\n            mark: {\n                shape: 'scatterpie',\n                options: {\n                    colorField,\n                    angleField: measureField,\n                    pieSize,\n                },\n            },\n        };\n\n        delete spec.mark;\n        delete spec.encoding;\n    },\n    properties: [],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/gofish/templates/utils.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Shared helper functions for GoFish template hooks.\n * Pure logic — no UI dependencies.\n */\n\nimport type { ChannelSemantics } from '../../core/types';\n\n// ---------------------------------------------------------------------------\n// Discrete-dimension helpers\n// ---------------------------------------------------------------------------\n\nconst isDiscrete = (type: string | undefined) => type === 'nominal' || type === 'ordinal';\n\n/**\n * Detect which axis is the category (banded) axis and which is the value axis.\n */\nexport function detectAxes(\n    channelSemantics: Record<string, ChannelSemantics>,\n): { categoryAxis: 'x' | 'y'; valueAxis: 'x' | 'y' } {\n    const xCS = channelSemantics.x;\n    const yCS = channelSemantics.y;\n\n    if (xCS && isDiscrete(xCS.type)) {\n        return { categoryAxis: 'x', valueAxis: 'y' };\n    }\n    if (yCS && isDiscrete(yCS.type)) {\n        return { categoryAxis: 'y', valueAxis: 'x' };\n    }\n    return { categoryAxis: 'x', valueAxis: 'y' };\n}\n\n/**\n * Extract unique category values from data for a given field, preserving order.\n * If `ordinalSortOrder` is provided, returns values sorted in that canonical order.\n */\nexport function extractCategories(data: any[], field: string, ordinalSortOrder?: string[]): string[] {\n    const seen = new Set<string>();\n    const result: string[] = [];\n    for (const row of data) {\n        const val = row[field];\n        if (val != null) {\n            const key = String(val);\n            if (!seen.has(key)) {\n                seen.add(key);\n                result.push(key);\n            }\n        }\n    }\n\n    if (ordinalSortOrder && ordinalSortOrder.length > 0) {\n        const orderMap = new Map(ordinalSortOrder.map((v, i) => [v, i]));\n        result.sort((a, b) => {\n            const ia = orderMap.get(a);\n            const ib = orderMap.get(b);\n            if (ia !== undefined && ib !== undefined) return ia - ib;\n            if (ia !== undefined) return -1;\n            if (ib !== undefined) return 1;\n            return 0;\n        });\n    }\n\n    return result;\n}\n\n/**\n * Group data by a categorical field.\n * Returns a map: seriesName → rows[].\n */\nexport function groupBy(data: any[], field: string): Map<string, any[]> {\n    const groups = new Map<string, any[]>();\n    for (const row of data) {\n        const key = String(row[field] ?? '');\n        if (!groups.has(key)) groups.set(key, []);\n        groups.get(key)!.push(row);\n    }\n    return groups;\n}\n\n/**\n * Aggregate data by category field, summing the value field.\n * Returns [{category, value}, ...] with one row per unique category.\n */\nexport function aggregateByCategory(\n    data: any[],\n    catField: string,\n    valField: string,\n    categories: string[],\n): { category: string; value: number }[] {\n    const map = new Map<string, number>();\n    for (const row of data) {\n        const key = String(row[catField] ?? '');\n        const val = Number(row[valField]) || 0;\n        map.set(key, (map.get(key) ?? 0) + val);\n    }\n    return categories.map(cat => ({\n        category: cat,\n        value: map.get(cat) ?? 0,\n    }));\n}\n"
  },
  {
    "path": "src/lib/agents-chart/index.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @module agents-chart\n *\n * Semantic-level chart assembly library.\n *\n * Given data, semantic types, encoding definitions, and a canvas size,\n * generates a chart specification. No React/Redux/UI dependencies.\n *\n * Architecture:\n *   core/       — Target-agnostic: semantic types, layout, decisions, types\n *   vegalite/   — Vega-Lite backend: assembly, templates, spec instantiation\n *   echarts/    — ECharts backend: assembly, templates, spec instantiation\n *   chartjs/    — Chart.js backend: assembly, templates, spec instantiation\n *   gofish/     — GoFish backend: assembly, templates, imperative rendering\n *\n * Assembly functions:\n *   assembleVegaLite(input)  — Vega-Lite spec\n *   assembleECharts(input)   — ECharts option object\n *   assembleChartjs(input)   — Chart.js config object\n *   assembleGoFish(input)    — GoFish spec with render() function\n *\n * Template registries:\n *   vlTemplateDefs / vlGetTemplateDef / vlGetTemplateChannels\n *   ecTemplateDefs / ecGetTemplateDef / ecGetTemplateChannels\n *   cjsTemplateDefs / cjsGetTemplateDef / cjsGetTemplateChannels\n *   gfTemplateDefs / gfGetTemplateDef / gfGetTemplateChannels\n *\n * Usage:\n * ```ts\n * import { assembleVegaLite } from './lib/agents-chart';\n *\n * const spec = assembleVegaLite({\n *   data: { values: myData },\n *   semantic_types: { weight: 'Quantity', mpg: 'Quantity', origin: 'Country' },\n *   chart_spec: {\n *     chartType: 'Scatter Plot',\n *     encodings: { x: { field: 'weight' }, y: { field: 'mpg' }, color: { field: 'origin' } },\n *     canvasSize: { width: 400, height: 300 },\n *   },\n * });\n * ```\n */\n\n// Core: types, semantic types, decisions, layout, overflow\nexport * from './core';\n\n// Vega-Lite backend: assembleVegaLite, templates, spec instantiation\nexport * from './vegalite';\n\n// ECharts backend: assembleECharts, templates, spec instantiation\nexport * from './echarts';\n\n// Chart.js backend: assembleChartjs, templates, spec instantiation\nexport * from './chartjs';\n\n// GoFish backend: assembleGoFish, templates, imperative rendering\nexport * from './gofish';\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/area-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genDates, genCategories, genOrdinalLabels, ORDINAL_PREFIXES } from './generators';\n\n// ============================================================================\n// Area Chart & Streamgraph Tests — Matrix-driven\n//\n// Each test is defined as a compact row in AREA_MATRIX / STREAMGRAPH_MATRIX.\n// A shared generator converts matrix entries into full TestCase objects.\n//\n// Matrix dimensions:\n//   x axis type:  Q (quantitative), T (temporal), O (ordinal)\n//   y axis type:  same\n//   color channel: — | N (nominal, multi-series) | Q (gradient)\n//   n:             total data points\n//   sparse:        ~20% random dropout\n//\n// Ordinal (O) is used for axes — area charts require a meaningful\n// sequential order.  Nominal (N) is used for unordered color groups.\n// Purely nominal axes are excluded (area fills imply continuity).\n//\n// Default test canvas: 300 × 300 px.\n// ============================================================================\n\ntype DimType = 'Q' | 'T' | 'N' | 'O';\n\ninterface AreaMatrixEntry {\n    x: DimType;\n    y: DimType;\n    n: number;           // total data points (0 → grid)\n    color?: DimType;\n    xCard?: number;\n    yCard?: number;\n    colorCard?: number;\n    sparse?: boolean;\n    desc?: string;\n    extraTags?: string[];\n}\n\n// ============================================================================\n// AREA CHART MATRIX — one row per test case (23 tests)\n//\n// Note: O (ordinal) is used for categorical axes — area charts require\n// a meaningful sequential order.  N (nominal) is used for color groups.\n// Purely nominal axis combinations are excluded because connecting\n// unordered categories with area fills is visually misleading.\n// ============================================================================\n\nconst AREA_MATRIX: AreaMatrixEntry[] = [\n    // ── T × Q (7 tests) — core stacked / layered area ───────────────\n    { x: 'T', y: 'Q', n: 30,   desc: 'Simple time-series area — 30 dates' },\n    { x: 'T', y: 'Q', n: 96,   color: 'N', colorCard: 4,  desc: '4 stacked series × 24 dates' },\n    { x: 'T', y: 'Q', n: 480,  color: 'N', colorCard: 8,  desc: '8 series × 60 dates — large stacked' },\n    { x: 'T', y: 'Q', n: 1800, color: 'N', colorCard: 15, desc: '15 series × 120 dates — stress', extraTags: ['stress'] },\n    { x: 'T', y: 'Q', n: 120,  color: 'N', colorCard: 3,  desc: '3 layered/overlapping series' },\n    { x: 'T', y: 'Q', n: 180,  color: 'N', colorCard: 3,  sparse: true, desc: '3 series, ~20% missing values' },\n    { x: 'T', y: 'Q', n: 30,   color: 'Q', desc: 'Continuous color gradient on area' },\n\n    // ── O × Q (4 tests) — ordered categories on x ───────────────────\n    //    Area charts with ordinal x make sense when categories have an\n    //    inherent sequence (e.g. stages, ranked items, ordered groups).\n    { x: 'O', y: 'Q', n: 5,  xCard: 5,  desc: 'Ordinal area — 5 ordered categories' },\n    { x: 'O', y: 'Q', n: 48, xCard: 12, color: 'N', colorCard: 4, desc: '12 ordinal × 4 stacked series' },\n    { x: 'O', y: 'Q', n: 30, xCard: 30, desc: '30 ordinal categories — label overflow', extraTags: ['overflow'] },\n    { x: 'O', y: 'Q', n: 5,  xCard: 5,  color: 'Q', desc: 'Ordinal + continuous color gradient' },\n\n    // ── Q × O (3 tests) — mirror ────────────────────────────────────\n    { x: 'Q', y: 'O', n: 5,  yCard: 5,  desc: 'Horizontal ordinal — 5 ordered cats on y' },\n    { x: 'Q', y: 'O', n: 48, yCard: 12, color: 'N', colorCard: 4, desc: 'Horizontal 12 ordinal × 4 series' },\n    { x: 'Q', y: 'O', n: 30, yCard: 30, desc: 'Horizontal 30 ordinal overflow', extraTags: ['overflow'] },\n\n    // ── Q × Q (3 tests) — quantitative both axes ────────────────────\n    { x: 'Q', y: 'Q', n: 30,  desc: 'Quantitative x area — 30 pts' },\n    { x: 'Q', y: 'Q', n: 150, color: 'N', colorCard: 3, desc: '3 stacked curves × 50 pts' },\n    { x: 'Q', y: 'Q', n: 200, desc: 'Dense single-series area — 200 pts' },\n\n    // Excluded: T×T, Q×T — date-pair data doesn't suit area charts.\n    // Area fills imply sequential progression; T×T/Q×T lack monotonic relationships.\n    // Excluded: N×N, T×N, N×T — purely nominal axes don't suit area charts.\n    // Area fills imply continuity/progression; nominal axes lack this.\n];\n\n// ============================================================================\n// STREAMGRAPH MATRIX — one row per test case (6 tests)\n//\n// Streamgraphs are centre-stacked areas — always multi-series (color\n// required).  Primarily T×Q but we exercise a few other combos.\n// ============================================================================\n\nconst STREAMGRAPH_MATRIX: AreaMatrixEntry[] = [\n    { x: 'T', y: 'Q', n: 200,  color: 'N', colorCard: 5,  desc: '5 genres × 40 dates — basic streamgraph' },\n    { x: 'T', y: 'Q', n: 800,  color: 'N', colorCard: 10, desc: '10 industries × 80 dates — large' },\n    { x: 'T', y: 'Q', n: 3000, color: 'N', colorCard: 20, desc: '20 series × 150 dates — stress', extraTags: ['stress'] },\n    { x: 'T', y: 'Q', n: 200,  color: 'N', colorCard: 5,  sparse: true, desc: '5 series ~20% missing' },\n    { x: 'O', y: 'Q', n: 60,   xCard: 12, color: 'N', colorCard: 5, desc: 'Ordinal streamgraph — 12 cats × 5 series' },\n    { x: 'Q', y: 'Q', n: 150,  color: 'N', colorCard: 3, desc: 'Quant-x streamgraph — 3 series × 50 pts' },\n];\n\n// ============================================================================\n// Generator internals\n// ============================================================================\n\ninterface AreaCh {\n    role: 'x' | 'y' | 'color';\n    dimType: DimType;\n    fieldName: string;\n    card?: number;\n    levels?: string[];\n    dates?: string[];\n}\n\nconst AREA_NAMES: Record<string, Record<DimType, string>> = {\n    x:     { Q: 'X',        T: 'Date',      N: 'Series',    O: 'Stage' },\n    y:     { Q: 'Value',    T: 'EndDate',   N: 'Group',     O: 'Step' },\n    color: { Q: 'ColorVal', T: 'Timestamp', N: 'Series',    O: 'Level' },\n};\n\nconst AREA_FALLBACKS: Record<DimType, string[]> = {\n    Q: ['X', 'Value', 'Measure', 'Score'],\n    T: ['Date', 'EndDate', 'StartDate', 'Timestamp'],\n    N: ['Series', 'Group', 'Category', 'Type'],\n    O: ['Stage', 'Step', 'Phase', 'Level', 'Round'],\n};\n\nconst AREA_CAT_POOLS = ['Category', 'Country', 'Department', 'Product', 'Company'];\nconst AREA_T_STARTS  = [2020, 2023, 2019, 2022];\n\nfunction buildAreaChannels(entry: AreaMatrixEntry, nPerSeries: number): AreaCh[] {\n    const used = new Set<string>();\n    const channels: AreaCh[] = [];\n    let tIdx = 0;\n    let cIdx = 0;\n    let oIdx = 0;\n\n    function pickName(dim: DimType, role: string): string {\n        const primary = AREA_NAMES[role]?.[dim];\n        if (primary && !used.has(primary)) { used.add(primary); return primary; }\n        for (const n of AREA_FALLBACKS[dim]) {\n            if (!used.has(n)) { used.add(n); return n; }\n        }\n        return `${role}_field`;\n    }\n\n    const specs: { role: 'x' | 'y' | 'color'; dim: DimType; card?: number }[] = [\n        { role: 'x', dim: entry.x, card: entry.xCard },\n        { role: 'y', dim: entry.y, card: entry.yCard },\n    ];\n    if (entry.color) specs.push({ role: 'color', dim: entry.color, card: entry.colorCard });\n\n    for (const { role, dim, card } of specs) {\n        const ch: AreaCh = { role, dimType: dim, fieldName: pickName(dim, role) };\n\n        if (dim === 'N') {\n            const c = card || 3;\n            ch.card = c;\n            ch.levels = genCategories(AREA_CAT_POOLS[cIdx % AREA_CAT_POOLS.length], c);\n            cIdx++;\n        }\n\n        if (dim === 'O') {\n            const c = card || 5;\n            ch.card = c;\n            ch.levels = genOrdinalLabels(ORDINAL_PREFIXES[oIdx % ORDINAL_PREFIXES.length], c);\n            oIdx++;\n        }\n\n        if (dim === 'T') {\n            ch.dates = genDates(nPerSeries, AREA_T_STARTS[tIdx % AREA_T_STARTS.length]);\n            tIdx++;\n        }\n\n        channels.push(ch);\n    }\n\n    return channels;\n}\n\n// ---------------------------------------------------------------------------\n// Data generation\n// ---------------------------------------------------------------------------\n\n/** Smooth random walk with upward drift — natural for cumulative / area metrics. */\nfunction genAreaTrend(n: number, base: number, drift: number, volatility: number, rand: () => number): number[] {\n    const values: number[] = [base];\n    let momentum = 0;\n    for (let i = 1; i < n; i++) {\n        momentum = 0.6 * momentum + (rand() - 0.45) * volatility + drift;\n        values.push(Math.round(Math.max(0, values[i - 1] + momentum)));\n    }\n    return values;\n}\n\nfunction genAreaSeriesData(\n    entry: AreaMatrixEntry, channels: AreaCh[], rand: () => number,\n): Record<string, any>[] {\n    const xCh = channels.find(c => c.role === 'x')!;\n    const yCh = channels.find(c => c.role === 'y')!;\n    const colorCh = channels.find(c => c.role === 'color');\n\n    const nSeries = (colorCh?.dimType === 'N' ? (entry.colorCard || 3) : 1);\n    const nPerSeries = Math.max(1, Math.floor(entry.n / nSeries));\n\n    // Shared x-positions\n    let xPositions: any[];\n    if (xCh.dimType === 'T') {\n        xPositions = genDates(nPerSeries, 2020);\n    } else if (xCh.dimType === 'O') {\n        xPositions = xCh.levels!;\n    } else { // Q\n        xPositions = Array.from({ length: nPerSeries }, (_, i) =>\n            Math.round(i * 100 / Math.max(1, nPerSeries - 1) * 10) / 10);\n    }\n\n    const data: Record<string, any>[] = [];\n\n    for (let s = 0; s < nSeries; s++) {\n        const base = 50 + Math.round(rand() * 200);\n        const drift = 0.5 + rand() * 2;\n        const vol = 10 + rand() * 30;\n\n        // Generate y-values\n        let yValues: any[];\n        if (yCh.dimType === 'Q') {\n            yValues = genAreaTrend(xPositions.length, base, drift, vol, rand);\n        } else if (yCh.dimType === 'T') {\n            yValues = genDates(xPositions.length, 2023 + s);\n        } else { // O\n            yValues = xPositions.map((_, i) => yCh.levels![i % yCh.levels!.length]);\n        }\n\n        for (let i = 0; i < xPositions.length; i++) {\n            if (entry.sparse && rand() < 0.2) continue;\n\n            const row: Record<string, any> = {\n                [xCh.fieldName]: xPositions[i],\n                [yCh.fieldName]: yValues[i],\n            };\n\n            if (colorCh) {\n                if (colorCh.dimType === 'N') {\n                    row[colorCh.fieldName] = colorCh.levels![s];\n                } else if (colorCh.dimType === 'Q') {\n                    row[colorCh.fieldName] = Math.round(rand() * 100) / 10;\n                }\n            }\n\n            data.push(row);\n        }\n    }\n\n    return data;\n}\n\nfunction genAreaGridData(channels: AreaCh[], rand: () => number): Record<string, any>[] {\n    const xCh = channels.find(c => c.role === 'x')!;\n    const yCh = channels.find(c => c.role === 'y')!;\n    const colorCh = channels.find(c => c.role === 'color');\n    const data: Record<string, any>[] = [];\n\n    for (const xVal of xCh.levels!) {\n        for (const yVal of yCh.levels!) {\n            if (rand() > 0.3) {\n                const row: Record<string, any> = { [xCh.fieldName]: xVal, [yCh.fieldName]: yVal };\n                if (colorCh?.dimType === 'N')\n                    row[colorCh.fieldName] = colorCh.levels![Math.floor(rand() * colorCh.levels!.length)];\n                data.push(row);\n            }\n        }\n    }\n\n    return data;\n}\n\nfunction genAreaDatePairData(n: number, channels: AreaCh[], rand: () => number): Record<string, any>[] {\n    const data: Record<string, any>[] = [];\n    for (let i = 0; i < n; i++) {\n        const row: Record<string, any> = {};\n        const startDay = Math.floor(rand() * 365);\n        const duration = Math.floor(10 + rand() * 180);\n        const start = new Date(2023, 0, 1);\n        start.setDate(start.getDate() + startDay);\n        const end = new Date(start);\n        end.setDate(end.getDate() + duration);\n\n        for (const ch of channels) {\n            if (ch.dimType === 'T' && ch.role === 'x')\n                row[ch.fieldName] = start.toISOString().slice(0, 10);\n            else if (ch.dimType === 'T' && ch.role === 'y')\n                row[ch.fieldName] = end.toISOString().slice(0, 10);\n            else if (ch.dimType === 'N')\n                row[ch.fieldName] = ch.levels![i % ch.levels!.length];\n            else if (ch.dimType === 'Q')\n                row[ch.fieldName] = Math.round(rand() * 1000) / 10;\n        }\n        data.push(row);\n    }\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Title & tags\n// ---------------------------------------------------------------------------\n\nfunction buildAreaTitle(entry: AreaMatrixEntry): string {\n    const xLabel = entry.x === 'O' && entry.xCard ? `O(${entry.xCard})` : entry.x;\n    const yLabel = entry.y === 'O' && entry.yCard ? `O(${entry.yCard})` : entry.y;\n    const parts = [`${xLabel}×${yLabel}`];\n    if (entry.color) {\n        parts.push(`+color(${entry.color === 'N' ? `N,${entry.colorCard || 3}` : entry.color})`);\n    }\n    if (entry.sparse) parts.push('sparse');\n    if (entry.n === 0) parts.push('grid');\n    else parts.push(`(${entry.n} pts)`);\n    return parts.join(' ');\n}\n\nfunction buildAreaTags(entry: AreaMatrixEntry, dataLen: number): string[] {\n    const tags: string[] = [];\n    const dims = new Set<DimType>([entry.x, entry.y]);\n    if (entry.color) dims.add(entry.color);\n    if (dims.has('Q')) tags.push('quantitative');\n    if (dims.has('T')) tags.push('temporal');\n    if (dims.has('N')) tags.push('nominal');\n    if (dims.has('O')) tags.push('ordinal');\n    if (entry.color) tags.push('color');\n    if (entry.color === 'Q') tags.push('continuous-color');\n    if (entry.sparse) tags.push('sparse');\n    const n = dataLen;\n    if (n <= 25) tags.push('small');\n    else if (n <= 100) tags.push('medium');\n    else { tags.push('large'); if (n > 500) tags.push('scaling'); }\n    if (entry.extraTags) tags.push(...entry.extraTags);\n    return [...new Set(tags)];\n}\n\n// ---------------------------------------------------------------------------\n// Matrix entry → TestCase\n// ---------------------------------------------------------------------------\n\nfunction areaMatrixToTestCase(\n    entry: AreaMatrixEntry, chartType: string, rand: () => number,\n): TestCase {\n    const nSeries = entry.colorCard || 1;\n    const effectiveN = entry.n || (entry.xCard || 5) * (entry.yCard || 5);\n    const nPerSeries = Math.max(1, Math.floor(effectiveN / nSeries));\n    const channels = buildAreaChannels(entry, nPerSeries);\n\n    const isGrid = entry.x === 'O' && entry.y === 'O' && entry.n === 0;\n    const isTT   = entry.x === 'T' && entry.y === 'T';\n\n    let data: Record<string, any>[];\n    if (isGrid) {\n        data = genAreaGridData(channels, rand);\n    } else if (isTT) {\n        data = genAreaDatePairData(entry.n, channels, rand);\n    } else {\n        data = genAreaSeriesData(entry, channels, rand);\n    }\n\n    const typeMap: Record<DimType, Type> = { Q: Type.Number, T: Type.Date, N: Type.String, O: Type.String };\n    const semMap: Record<DimType, string> = { Q: 'Quantity', T: 'Date', N: 'Category', O: 'Category' };\n\n    const fields = channels.map(ch => makeField(ch.fieldName));\n    const metadata: Record<string, { type: Type; semanticType: string; levels: any[] }> = {};\n    const encodingMap: Partial<Record<string, any>> = {};\n\n    for (const ch of channels) {\n        metadata[ch.fieldName] = {\n            type: typeMap[ch.dimType],\n            semanticType: semMap[ch.dimType],\n            levels: ch.levels || [],\n        };\n        encodingMap[ch.role] = makeEncodingItem(ch.fieldName);\n    }\n\n    return {\n        title: buildAreaTitle(entry),\n        description: entry.desc || buildAreaTitle(entry),\n        tags: buildAreaTags(entry, data.length),\n        chartType,\n        data,\n        fields,\n        metadata,\n        encodingMap,\n    };\n}\n\n// ============================================================================\n// Public exports\n// ============================================================================\n\nexport function genAreaTests(): TestCase[] {\n    const rand = seededRandom(910);\n    return AREA_MATRIX.map(entry => areaMatrixToTestCase(entry, 'Area Chart', rand));\n}\n\nexport function genStreamgraphTests(): TestCase[] {\n    const rand = seededRandom(920);\n    return STREAMGRAPH_MATRIX.map(entry => areaMatrixToTestCase(entry, 'Streamgraph', rand));\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/bar-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genDates, genCategories, genRandomNames } from './generators';\n\n// ============================================================================\n// Bar Chart Tests — Matrix-driven\n//\n// Three bar chart variants share a common matrix entry type and generator:\n//   - Bar Chart:         x, y, optional color\n//   - Stacked Bar Chart: x, y, required color (stacking dimension)\n//   - Grouped Bar Chart: x, y, required group (encoding key = 'group')\n//\n// Matrix dimensions:\n//   x axis type:  Q (quantitative), T (temporal), N (nominal)\n//   y axis type:  same\n//   color/group:  — | N (nominal) | Q (discrete numeric or continuous)\n//   n:            total data points (0 → N×N grid mode)\n//\n// Note: Bar charts don't distinguish nominal from ordinal visually —\n// all categorical channels use N (nominal).\n//\n// Default test canvas: 300 × 300 px.\n// ============================================================================\n\ntype DimType = 'Q' | 'T' | 'N';\n\ninterface BarMatrixEntry {\n    x: DimType;\n    y: DimType;\n    n: number;           // total data points (0 → C×C grid)\n    color?: DimType;     // third channel (mapped to 'color' or 'group')\n    xCard?: number;\n    yCard?: number;\n    colorCard?: number;  // cardinality; omit for continuous Q color\n    desc?: string;\n    extraTags?: string[];\n}\n\n// ============================================================================\n// THE MATRICES\n// ============================================================================\n\nconst BAR_MATRIX: BarMatrixEntry[] = [\n    // ── N × Q (6 tests) — classic vertical bars ─────────────────────\n    { x: 'N', y: 'Q', n: 5,   xCard: 5,   desc: 'Basic bar — 5 categories' },\n    { x: 'N', y: 'Q', n: 20,  xCard: 20,  desc: '20 bars — label rotation' },\n    { x: 'N', y: 'Q', n: 30,  xCard: 30,  desc: '30 bars — thin bar handling' },\n    { x: 'N', y: 'Q', n: 100, xCard: 100, desc: '100 bars — discrete cutoff', extraTags: ['overflow', 'cutoff'] },\n    { x: 'N', y: 'Q', n: 15,  xCard: 5,   color: 'N', colorCard: 3, desc: '5 cats × 3 color groups' },\n    { x: 'N', y: 'Q', n: 100, xCard: 5,   color: 'N', colorCard: 20, desc: '5 cats × 20 colors — saturation', extraTags: ['overflow'] },\n\n    // ── Q × N (3 tests) — horizontal bars ───────────────────────────\n    { x: 'Q', y: 'N', n: 10,  yCard: 10,  desc: 'Horizontal — 10 bars' },\n    { x: 'Q', y: 'N', n: 100, yCard: 100, desc: 'Horizontal — 100 bars cutoff', extraTags: ['overflow', 'cutoff'] },\n    { x: 'Q', y: 'N', n: 30,  yCard: 10,  color: 'N', colorCard: 3, desc: 'Horizontal + 3 color groups' },\n\n    // ── T × Q (3 tests) — temporal bars ─────────────────────────────\n    { x: 'T', y: 'Q', n: 24,  desc: 'Temporal bars — 24 dates' },\n    { x: 'T', y: 'Q', n: 100, desc: '100 dates — dynamic bar sizing', extraTags: ['overflow'] },\n    { x: 'T', y: 'Q', n: 72,  color: 'N', colorCard: 3, desc: '24 dates × 3 cats — temporal + color' },\n\n    // ── Q × T (2 tests) — horizontal temporal ──────────────────────\n    { x: 'Q', y: 'T', n: 18,  desc: 'Horizontal temporal — 18 dates on y' },\n    { x: 'Q', y: 'T', n: 54,  color: 'N', colorCard: 3, desc: 'Horizontal temporal + 3 colors' },\n\n    // ── Q × Q (2 tests) — continuous banded ─────────────────────────\n    { x: 'Q', y: 'Q', n: 20,  desc: 'Both quantitative — dynamic mark resizing' },\n    { x: 'Q', y: 'Q', n: 30,  desc: 'Equally spaced 1..30 — continuous banded', extraTags: ['equally-spaced'] },\n\n    // ── Edge combos (3 tests) ───────────────────────────────────────\n    { x: 'N', y: 'N', n: 0,  xCard: 5, yCard: 5, desc: 'Cat × cat bars (degenerate)', extraTags: ['edge-case'] },\n    { x: 'T', y: 'N', n: 25, yCard: 5,  desc: 'Temporal x, categorical y' },\n    { x: 'N', y: 'T', n: 25, xCard: 5,  desc: 'Categorical x, temporal y' },\n];\n\nconst STACKED_BAR_MATRIX: BarMatrixEntry[] = [\n    // ── N × Q + color (5 tests) ─────────────────────────────────────\n    { x: 'N', y: 'Q', n: 12,  xCard: 4,  color: 'N', colorCard: 3, desc: 'Basic stack — 4 cats × 3 colors' },\n    { x: 'N', y: 'Q', n: 75,  xCard: 15, color: 'N', colorCard: 5, desc: 'Large — 15 cats × 5 colors' },\n    { x: 'N', y: 'Q', n: 240, xCard: 80, color: 'N', colorCard: 3, desc: 'Very large — 80 cats × 3 (cutoff)', extraTags: ['overflow', 'cutoff'] },\n    { x: 'N', y: 'Q', n: 24,  xCard: 6,  color: 'Q', colorCard: 4, desc: 'Numeric color (1–4) — small' },\n    { x: 'N', y: 'Q', n: 150, xCard: 5,  color: 'Q', colorCard: 30, desc: 'Numeric color (1–30) — large' },\n\n    // ── T × Q + color (2 tests) ─────────────────────────────────────\n    { x: 'T', y: 'Q', n: 30,  color: 'N', colorCard: 3, desc: 'Temporal stack — 10 dates × 3' },\n    { x: 'T', y: 'Q', n: 80,  color: 'N', colorCard: 4, desc: '20 dates × 4 fuels — temporal stacked' },\n\n    // ── Q × Q + color (1 test) ──────────────────────────────────────\n    { x: 'Q', y: 'Q', n: 30,  color: 'N', colorCard: 3, desc: 'Both quant + 3 types — stacked' },\n\n    // ── Horizontal (2 tests) ────────────────────────────────────────\n    { x: 'Q', y: 'N', n: 24,  yCard: 8,  color: 'N', colorCard: 3, desc: 'Horizontal stack — 8 cats × 3' },\n    { x: 'Q', y: 'T', n: 45,  color: 'N', colorCard: 3, desc: 'Horizontal temporal stack — 15 dates × 3' },\n\n    // ── Edge combos (2 tests) ───────────────────────────────────────\n    { x: 'N', y: 'N', n: 0,  xCard: 5, yCard: 5, color: 'N', colorCard: 3, desc: 'Cat × cat stacked (degenerate)', extraTags: ['edge-case'] },\n    { x: 'T', y: 'N', n: 20, yCard: 5,  color: 'N', colorCard: 4, desc: 'Temporal × cat stacked' },\n];\n\nconst GROUPED_BAR_MATRIX: BarMatrixEntry[] = [\n    // ── N × Q + group (4 tests) ─────────────────────────────────────\n    { x: 'N', y: 'Q', n: 12,  xCard: 4,  color: 'N', colorCard: 3, desc: 'Basic grouped — 4 cats × 3 groups' },\n    { x: 'N', y: 'Q', n: 8,   xCard: 8,  desc: 'No group field — fallback to simple bar' },\n    { x: 'N', y: 'Q', n: 270, xCard: 90, color: 'N', colorCard: 3, desc: 'Very large — 90 cats × 3 (cutoff)', extraTags: ['overflow', 'cutoff'] },\n    { x: 'N', y: 'Q', n: 30,  xCard: 6,  color: 'Q', colorCard: 5, desc: 'Numeric group (1–5) — small' },\n\n    // ── T × Q + group (1 test) ──────────────────────────────────────\n    { x: 'T', y: 'Q', n: 36,  color: 'N', colorCard: 3, desc: 'Temporal grouped — 12 dates × 3' },\n\n    // ── Q × Q + group (1 test) ──────────────────────────────────────\n    { x: 'Q', y: 'Q', n: 20,  color: 'N', colorCard: 4, desc: 'Both quant + group — ensureNominalAxis' },\n\n    // ── Horizontal (2 tests) ────────────────────────────────────────\n    { x: 'Q', y: 'N', n: 24,  yCard: 6,  color: 'N', colorCard: 4, desc: 'Horizontal grouped — 6 × 4' },\n    { x: 'Q', y: 'T', n: 30,  color: 'N', colorCard: 3, desc: 'Horizontal temporal grouped — 10 dates × 3' },\n\n    // ── Numeric & continuous group (2 tests) ────────────────────────\n    { x: 'N', y: 'Q', n: 400, xCard: 8,  color: 'Q', colorCard: 50, desc: 'Numeric group (1–50) — large' },\n    { x: 'N', y: 'Q', n: 50,  xCard: 5,  color: 'Q', desc: 'Continuous float on group — gradient' },\n\n    // ── Edge combos (2 tests) ───────────────────────────────────────\n    { x: 'N', y: 'N', n: 0,  xCard: 5, yCard: 5, color: 'N', colorCard: 3, desc: 'Cat × cat grouped (degenerate)', extraTags: ['edge-case'] },\n    { x: 'T', y: 'N', n: 20, yCard: 5,  color: 'N', colorCard: 4, desc: 'Temporal × cat grouped' },\n];\n\n// ============================================================================\n// Generator internals\n// ============================================================================\n\ninterface BarCh {\n    role: 'x' | 'y' | 'color';\n    dimType: DimType;\n    fieldName: string;\n    card?: number;\n    levels?: any[];\n    dates?: string[];\n}\n\nconst BAR_NAMES: Record<string, Record<DimType, string>> = {\n    x:     { Q: 'X',        T: 'Date',    N: 'Category' },\n    y:     { Q: 'Value',    T: 'EndDate', N: 'Group' },\n    color: { Q: 'ColorVal', T: 'DateCol', N: 'Segment' },\n};\n\nconst BAR_FALLBACKS: Record<DimType, string[]> = {\n    Q: ['X', 'Value', 'Score', 'Amount', 'Measure'],\n    T: ['Date', 'EndDate', 'Time', 'Timestamp'],\n    N: ['Category', 'Group', 'Segment', 'Type', 'Level'],\n};\n\nconst BAR_CAT_POOLS = ['Product', 'Country', 'Department', 'Category', 'Company'];\nconst BAR_T_STARTS = [2020, 2023, 2019, 2022];\n\nfunction buildBarChannels(entry: BarMatrixEntry): BarCh[] {\n    const used = new Set<string>();\n    const channels: BarCh[] = [];\n    let tIdx = 0;\n    let cIdx = 0;\n    let cSeed = 500;\n\n    function pickName(dim: DimType, role: string): string {\n        const primary = BAR_NAMES[role]?.[dim];\n        if (primary && !used.has(primary)) { used.add(primary); return primary; }\n        for (const n of BAR_FALLBACKS[dim]) {\n            if (!used.has(n)) { used.add(n); return n; }\n        }\n        return `${role}_field`;\n    }\n\n    const effectiveN = entry.n || (entry.xCard || 5) * (entry.yCard || 5);\n\n    const specs: { role: 'x' | 'y' | 'color'; dim: DimType; card?: number }[] = [\n        { role: 'x', dim: entry.x, card: entry.xCard },\n        { role: 'y', dim: entry.y, card: entry.yCard },\n    ];\n    if (entry.color) specs.push({ role: 'color', dim: entry.color, card: entry.colorCard });\n\n    for (const { role, dim, card } of specs) {\n        const ch: BarCh = { role, dimType: dim, fieldName: pickName(dim, role) };\n\n        if (dim === 'N') {\n            const c = card || (role === 'color' ? 3 : 5);\n            ch.card = c;\n            if (c > 30) {\n                ch.levels = genRandomNames(c, cSeed);\n                cSeed += 100;\n            } else {\n                ch.levels = genCategories(BAR_CAT_POOLS[cIdx % BAR_CAT_POOLS.length], c);\n            }\n            cIdx++;\n        }\n\n        if (dim === 'T') {\n            ch.dates = genDates(effectiveN, BAR_T_STARTS[tIdx % BAR_T_STARTS.length]);\n            tIdx++;\n        }\n\n        if (dim === 'Q' && role === 'color' && card) {\n            // Discrete numeric values 1..card\n            ch.card = card;\n            ch.levels = Array.from({ length: card }, (_, i) => i + 1);\n        }\n\n        channels.push(ch);\n    }\n\n    return channels;\n}\n\n// ---------------------------------------------------------------------------\n// Data generation\n// ---------------------------------------------------------------------------\n\nfunction genBarYValue(yCh: BarCh, rand: () => number): any {\n    if (yCh.dimType === 'Q') return Math.round(10 + rand() * 990);\n    if (yCh.dimType === 'T') {\n        const d = Math.floor(rand() * 365);\n        const dt = new Date(2023, 0, 1);\n        dt.setDate(dt.getDate() + d);\n        return dt.toISOString().slice(0, 10);\n    }\n    // N\n    return yCh.levels![Math.floor(rand() * yCh.levels!.length)];\n}\n\nfunction genBarData(\n    entry: BarMatrixEntry, channels: BarCh[], rand: () => number,\n): Record<string, any>[] {\n    const xCh = channels.find(c => c.role === 'x')!;\n    const yCh = channels.find(c => c.role === 'y')!;\n    const colorCh = channels.find(c => c.role === 'color');\n\n    // Grid mode for N×N\n    if (entry.x === 'N' && entry.y === 'N' && entry.n === 0) {\n        const data: Record<string, any>[] = [];\n        for (const xVal of xCh.levels!) {\n            for (const yVal of yCh.levels!) {\n                if (rand() > 0.3) {\n                    const row: Record<string, any> = { [xCh.fieldName]: xVal, [yCh.fieldName]: yVal };\n                    if (colorCh?.dimType === 'N')\n                        row[colorCh.fieldName] = colorCh.levels![Math.floor(rand() * colorCh.levels!.length)];\n                    data.push(row);\n                }\n            }\n        }\n        return data;\n    }\n\n    // T×T date-pair mode\n    if (entry.x === 'T' && entry.y === 'T') {\n        const data: Record<string, any>[] = [];\n        for (let i = 0; i < entry.n; i++) {\n            const startDay = Math.floor(rand() * 365);\n            const duration = Math.floor(10 + rand() * 180);\n            const start = new Date(2023, 0, 1);\n            start.setDate(start.getDate() + startDay);\n            const end = new Date(start);\n            end.setDate(end.getDate() + duration);\n            const row: Record<string, any> = {\n                [xCh.fieldName]: start.toISOString().slice(0, 10),\n                [yCh.fieldName]: end.toISOString().slice(0, 10),\n            };\n            if (colorCh?.dimType === 'N')\n                row[colorCh.fieldName] = colorCh.levels![i % colorCh.levels!.length];\n            data.push(row);\n        }\n        return data;\n    }\n\n    // Standard mode\n    const data: Record<string, any>[] = [];\n    const isContinuousColor = colorCh && !colorCh.levels;\n\n    // Determine x-positions\n    let xPositions: any[];\n    if (xCh.dimType === 'N') {\n        xPositions = xCh.levels!;\n    } else if (xCh.dimType === 'T') {\n        const nGroups = colorCh?.levels ? colorCh.levels.length : 1;\n        const nDates = Math.max(1, Math.floor(entry.n / nGroups));\n        xPositions = genDates(nDates, 2020);\n    } else { // Q\n        const nGroups = colorCh?.levels ? colorCh.levels.length : 1;\n        const nPts = Math.max(1, Math.floor(entry.n / nGroups));\n        xPositions = Array.from({ length: nPts }, (_, i) => i + 1);\n    }\n\n    if (isContinuousColor) {\n        // Continuous color: multiple rows per x, each with a random color float\n        const rowsPerX = Math.max(1, Math.floor(entry.n / xPositions.length));\n        for (const xVal of xPositions) {\n            for (let r = 0; r < rowsPerX; r++) {\n                const row: Record<string, any> = { [xCh.fieldName]: xVal };\n                row[yCh.fieldName] = genBarYValue(yCh, rand);\n                row[colorCh!.fieldName] = Math.round(rand() * 4000) / 100;\n                data.push(row);\n            }\n        }\n    } else if (colorCh?.levels) {\n        // Discrete color: one row per (x × color)\n        for (const xVal of xPositions) {\n            for (const cVal of colorCh.levels) {\n                const row: Record<string, any> = { [xCh.fieldName]: xVal };\n                row[yCh.fieldName] = genBarYValue(yCh, rand);\n                row[colorCh.fieldName] = cVal;\n                data.push(row);\n            }\n        }\n    } else {\n        // No color\n        for (const xVal of xPositions) {\n            const row: Record<string, any> = { [xCh.fieldName]: xVal };\n            row[yCh.fieldName] = genBarYValue(yCh, rand);\n            data.push(row);\n        }\n    }\n\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Title & tags\n// ---------------------------------------------------------------------------\n\nfunction buildBarTitle(entry: BarMatrixEntry): string {\n    const xLabel = entry.x === 'N' && entry.xCard ? `N(${entry.xCard})` : entry.x;\n    const yLabel = entry.y === 'N' && entry.yCard ? `N(${entry.yCard})` : entry.y;\n    const parts = [`${xLabel}×${yLabel}`];\n    if (entry.color) {\n        const cLabel = entry.color === 'N'\n            ? `N,${entry.colorCard || 3}`\n            : entry.colorCard ? `Q,${entry.colorCard}` : 'Q';\n        parts.push(`+color(${cLabel})`);\n    }\n    if (entry.n === 0) parts.push('grid');\n    else parts.push(`(${entry.n} pts)`);\n    return parts.join(' ');\n}\n\nfunction buildBarTags(entry: BarMatrixEntry, dataLen: number): string[] {\n    const tags: string[] = [];\n    const dims = new Set<DimType>([entry.x, entry.y]);\n    if (entry.color) dims.add(entry.color);\n    if (dims.has('Q')) tags.push('quantitative');\n    if (dims.has('T')) tags.push('temporal');\n    if (dims.has('N')) tags.push('nominal');\n    if (entry.color) tags.push('color');\n    if (entry.color === 'Q') tags.push('numeric-color');\n    const n = dataLen;\n    if (n <= 25) tags.push('small');\n    else if (n <= 100) tags.push('medium');\n    else tags.push('large');\n    if (entry.extraTags) tags.push(...entry.extraTags);\n    return [...new Set(tags)];\n}\n\n// ---------------------------------------------------------------------------\n// Matrix entry → TestCase\n// ---------------------------------------------------------------------------\n\nfunction barMatrixToTestCase(\n    entry: BarMatrixEntry,\n    chartType: string,\n    thirdChannelKey: string,\n    rand: () => number,\n): TestCase {\n    const channels = buildBarChannels(entry);\n    const data = genBarData(entry, channels, rand);\n\n    const typeMap: Record<DimType, Type> = { Q: Type.Number, T: Type.Date, N: Type.String };\n    const semMap: Record<DimType, string> = { Q: 'Quantity', T: 'Date', N: 'Category' };\n\n    const fields = channels.map(ch => makeField(ch.fieldName));\n    const metadata: Record<string, { type: Type; semanticType: string; levels: any[] }> = {};\n    const encodingMap: Partial<Record<string, any>> = {};\n\n    for (const ch of channels) {\n        let semanticType = semMap[ch.dimType];\n        if (ch.dimType === 'Q' && ch.levels) semanticType = 'Rank'; // discrete numeric\n        metadata[ch.fieldName] = {\n            type: typeMap[ch.dimType],\n            semanticType,\n            levels: ch.levels || [],\n        };\n        const encKey = ch.role === 'color' ? thirdChannelKey : ch.role;\n        encodingMap[encKey] = makeEncodingItem(ch.fieldName);\n    }\n\n    return {\n        title: buildBarTitle(entry),\n        description: entry.desc || buildBarTitle(entry),\n        tags: buildBarTags(entry, data.length),\n        chartType,\n        data,\n        fields,\n        metadata,\n        encodingMap,\n    };\n}\n\n// ============================================================================\n// Public exports\n// ============================================================================\n\nexport function genBarTests(): TestCase[] {\n    const rand = seededRandom(100);\n    return BAR_MATRIX.map(entry => barMatrixToTestCase(entry, 'Bar Chart', 'color', rand));\n}\n\nexport function genStackedBarTests(): TestCase[] {\n    const rand = seededRandom(200);\n    return STACKED_BAR_MATRIX.map(entry => barMatrixToTestCase(entry, 'Stacked Bar Chart', 'color', rand));\n}\n\nexport function genGroupedBarTests(): TestCase[] {\n    const rand = seededRandom(300);\n    return GROUPED_BAR_MATRIX.map(entry => barMatrixToTestCase(entry, 'Grouped Bar Chart', 'group', rand));\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/chartjs-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js backend comparison tests.\n *\n * Runs the same test inputs through ALL THREE backends:\n *   assembleVegaLite (Vega-Lite), assembleECharts (ECharts), assembleChartjs (Chart.js)\n *\n * Covers: Scatter Plot, Line Chart, Bar Chart, Stacked Bar Chart,\n *         Grouped Bar Chart, Area Chart, Pie Chart, Histogram, Radar Chart\n */\n\nimport { Type } from '../../../data/types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genCategories, genMonths } from './generators';\n\n// ---------------------------------------------------------------------------\n// Test data generators\n// ---------------------------------------------------------------------------\n\nfunction genScatterData(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        Weight: Math.round((40 + rand() * 60) * 10) / 10,\n        Height: Math.round((150 + rand() * 50) * 10) / 10,\n    }));\n}\n\nfunction genScatterColorData(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    const categories = ['Alpha', 'Beta', 'Gamma'];\n    return Array.from({ length: n }, (_, i) => ({\n        X: Math.round(rand() * 100 * 10) / 10,\n        Y: Math.round(rand() * 100 * 10) / 10,\n        Group: categories[i % categories.length],\n    }));\n}\n\nfunction genBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const products = ['Apples', 'Bananas', 'Cherries', 'Dates', 'Elderberries'];\n    return products.map(p => ({\n        Product: p,\n        Sales: Math.round(100 + rand() * 900),\n    }));\n}\n\nfunction genLineData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'];\n    return months.map(m => ({\n        Month: m,\n        Revenue: Math.round(1000 + rand() * 5000),\n    }));\n}\n\nfunction genMultiSeriesLineData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'];\n    const series = ['ProductA', 'ProductB', 'ProductC'];\n    const data: any[] = [];\n    for (const m of months) {\n        for (const s of series) {\n            data.push({\n                Month: m,\n                Sales: Math.round(500 + rand() * 2000),\n                Product: s,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genStackedBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n    const regions = ['North', 'South', 'East', 'West'];\n    const data: any[] = [];\n    for (const q of quarters) {\n        for (const r of regions) {\n            data.push({\n                Quarter: q,\n                Revenue: Math.round(200 + rand() * 800),\n                Region: r,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genGroupedBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const years = ['2022', '2023', '2024'];\n    const departments = ['Sales', 'Engineering', 'Marketing'];\n    const data: any[] = [];\n    for (const y of years) {\n        for (const d of departments) {\n            data.push({\n                Year: y,\n                Budget: Math.round(10000 + rand() * 50000),\n                Department: d,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genAreaData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'];\n    const series = ['Web', 'Mobile', 'Desktop'];\n    const data: any[] = [];\n    for (const m of months) {\n        for (const s of series) {\n            data.push({\n                Month: m,\n                Users: Math.round(500 + rand() * 3000),\n                Platform: s,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genPieData(seed: number) {\n    const rand = seededRandom(seed);\n    const segments = ['Mobile', 'Desktop', 'Tablet', 'Other'];\n    return segments.map(s => ({\n        Device: s,\n        Visits: Math.round(100 + rand() * 1000),\n    }));\n}\n\nfunction genHistogramData(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        Score: Math.round(rand() * 100),\n    }));\n}\n\nfunction genRadarData(seed: number) {\n    const rand = seededRandom(seed);\n    const metrics = ['Speed', 'Power', 'Defense', 'Stamina', 'Accuracy', 'Agility'];\n    const entities = ['Player A', 'Player B', 'Player C'];\n    const data: any[] = [];\n    for (const e of entities) {\n        for (const m of metrics) {\n            data.push({\n                Metric: m,\n                Score: Math.round(30 + rand() * 70),\n                Player: e,\n            });\n        }\n    }\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Test case builders\n// ---------------------------------------------------------------------------\n\nexport function genChartJsScatterTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic scatter\n    {\n        const data = genScatterData(50, 42);\n        tests.push({\n            title: 'CJS: Scatter — Basic Q×Q',\n            description: '50 points, two quantitative axes.',\n            tags: ['chartjs', 'scatter', 'quantitative'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('Weight'), makeField('Height')],\n            metadata: {\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Weight'), y: makeEncodingItem('Height') },\n        });\n    }\n\n    // 2. Scatter with color grouping\n    {\n        const data = genScatterColorData(90, 77);\n        tests.push({\n            title: 'CJS: Scatter — Color Groups',\n            description: '90 points, 3 groups. CJS: 3 datasets with different colors.',\n            tags: ['chartjs', 'scatter', 'color', 'multi-series'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('X'), makeField('Y'), makeField('Group')],\n            metadata: {\n                X: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Y: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Group: { type: Type.String, semanticType: 'Category', levels: ['Alpha', 'Beta', 'Gamma'] },\n            },\n            encodingMap: { x: makeEncodingItem('X'), y: makeEncodingItem('Y'), color: makeEncodingItem('Group') },\n        });\n    }\n\n    // 3. Dense scatter\n    {\n        const data = genScatterData(500, 99);\n        tests.push({\n            title: 'CJS: Scatter — Dense (500 pts)',\n            description: 'Dense scatter plot. CJS adjusts pointRadius automatically.',\n            tags: ['chartjs', 'scatter', 'dense'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('Weight'), makeField('Height')],\n            metadata: {\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Weight'), y: makeEncodingItem('Height') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsLineTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Single series line\n    {\n        const data = genLineData(200);\n        tests.push({\n            title: 'CJS: Line — Single Series',\n            description: 'Ordinal x-axis, single line.',\n            tags: ['chartjs', 'line', 'single-series'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Revenue')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan','Feb','Mar','Apr','May','Jun'] },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Revenue') },\n        });\n    }\n\n    // 2. Multi-series line\n    {\n        const data = genMultiSeriesLineData(300);\n        tests.push({\n            title: 'CJS: Line — Multi-Series (3 products)',\n            description: 'Color channel → multiple datasets.',\n            tags: ['chartjs', 'line', 'multi-series', 'color'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Sales'), makeField('Product')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug'] },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Product: { type: Type.String, semanticType: 'Category', levels: ['ProductA','ProductB','ProductC'] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Product') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Simple bar\n    {\n        const data = genBarData(100);\n        tests.push({\n            title: 'CJS: Bar — Basic',\n            description: '5 products, single dataset.',\n            tags: ['chartjs', 'bar', 'simple'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Product'), makeField('Sales')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Category', levels: ['Apples','Bananas','Cherries','Dates','Elderberries'] },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Product'), y: makeEncodingItem('Sales') },\n        });\n    }\n\n    // 2. Many categories\n    {\n        const rand = seededRandom(150);\n        const cities = genCategories('City', 20);\n        const data = cities.map(c => ({\n            City: c,\n            Population: Math.round(10000 + rand() * 900000),\n        }));\n        tests.push({\n            title: 'CJS: Bar — 20 categories',\n            description: 'Many categories — tests layout and label rotation.',\n            tags: ['chartjs', 'bar', 'many-categories'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('City'), makeField('Population')],\n            metadata: {\n                City: { type: Type.String, semanticType: 'Category', levels: cities },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('City'), y: makeEncodingItem('Population') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsStackedBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genStackedBarData(500);\n        tests.push({\n            title: 'CJS: Stacked Bar — Regions × Quarters',\n            description: 'Stacked bar chart with 4 quarters and 4 regions.',\n            tags: ['chartjs', 'stacked-bar', 'color'],\n            chartType: 'Stacked Bar Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Revenue'), makeField('Region')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Category', levels: ['Q1','Q2','Q3','Q4'] },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: ['North','South','East','West'] },\n            },\n            encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Revenue'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsGroupedBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genGroupedBarData(600);\n        tests.push({\n            title: 'CJS: Grouped Bar — 3 Years × 3 Departments',\n            description: 'Grouped (side-by-side) bar chart.',\n            tags: ['chartjs', 'grouped-bar', 'color'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Year'), makeField('Budget'), makeField('Department')],\n            metadata: {\n                Year: { type: Type.String, semanticType: 'Category', levels: ['2022','2023','2024'] },\n                Budget: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Department: { type: Type.String, semanticType: 'Category', levels: ['Sales','Engineering','Marketing'] },\n            },\n            encodingMap: { x: makeEncodingItem('Year'), y: makeEncodingItem('Budget'), group: makeEncodingItem('Department') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsAreaTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genAreaData(700);\n        tests.push({\n            title: 'CJS: Area — Stacked (3 Platforms)',\n            description: 'Stacked area chart with fill.',\n            tags: ['chartjs', 'area', 'stacked', 'color'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Month'), makeField('Users'), makeField('Platform')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug'] },\n                Users: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Platform: { type: Type.String, semanticType: 'Category', levels: ['Web','Mobile','Desktop'] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Users'), color: makeEncodingItem('Platform') },\n        });\n    }\n\n    // Single series area\n    {\n        const data = genLineData(701);\n        tests.push({\n            title: 'CJS: Area — Single Series',\n            description: 'Single series area chart.',\n            tags: ['chartjs', 'area', 'single-series'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Month'), makeField('Revenue')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan','Feb','Mar','Apr','May','Jun'] },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Revenue') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsPieTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic pie\n    {\n        const data = genPieData(800);\n        tests.push({\n            title: 'CJS: Pie — Device Breakdown',\n            description: 'Pie chart: color=Device, size=Visits.',\n            tags: ['chartjs', 'pie'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Device'), makeField('Visits')],\n            metadata: {\n                Device: { type: Type.String, semanticType: 'Category', levels: ['Mobile','Desktop','Tablet','Other'] },\n                Visits: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Device'), size: makeEncodingItem('Visits') },\n        });\n    }\n\n    // 2. Doughnut\n    {\n        const data = genPieData(801);\n        tests.push({\n            title: 'CJS: Doughnut — Device Breakdown',\n            description: 'Doughnut chart with innerRadius.',\n            tags: ['chartjs', 'doughnut', 'pie'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Device'), makeField('Visits')],\n            metadata: {\n                Device: { type: Type.String, semanticType: 'Category', levels: ['Mobile','Desktop','Tablet','Other'] },\n                Visits: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Device'), size: makeEncodingItem('Visits') },\n            chartProperties: { innerRadius: 40 },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsHistogramTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genHistogramData(200, 900);\n        tests.push({\n            title: 'CJS: Histogram — Scores (200 pts)',\n            description: 'Histogram with 10 bins.',\n            tags: ['chartjs', 'histogram'],\n            chartType: 'Histogram',\n            data,\n            fields: [makeField('Score')],\n            metadata: {\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Score') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsRadarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genRadarData(1000);\n        tests.push({\n            title: 'CJS: Radar — 3 Players × 6 Metrics',\n            description: 'Radar chart with multiple groups.',\n            tags: ['chartjs', 'radar', 'multi-group'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Metric'), makeField('Score'), makeField('Player')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: ['Speed','Power','Defense','Stamina','Accuracy','Agility'] },\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Player: { type: Type.String, semanticType: 'Category', levels: ['Player A','Player B','Player C'] },\n            },\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Score'), color: makeEncodingItem('Player') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsStressTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // Large scatter\n    {\n        const data = genScatterData(1000, 1100);\n        tests.push({\n            title: 'CJS: Stress — 1000pt Scatter',\n            description: '1000-point scatter plot performance test.',\n            tags: ['chartjs', 'stress', 'scatter'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('Weight'), makeField('Height')],\n            metadata: {\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Weight'), y: makeEncodingItem('Height') },\n        });\n    }\n\n    // Many categories bar\n    {\n        const rand = seededRandom(1200);\n        const items = genCategories('Item', 50);\n        const data = items.map(i => ({\n            Item: i,\n            Value: Math.round(rand() * 1000),\n        }));\n        tests.push({\n            title: 'CJS: Stress — 50 Cat Bar',\n            description: '50-category bar chart — tests overflow and label rotation.',\n            tags: ['chartjs', 'stress', 'bar', 'overflow'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Item'), makeField('Value')],\n            metadata: {\n                Item: { type: Type.String, semanticType: 'Category', levels: items },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Item'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Rose Chart tests\n// ===========================================================================\n\nexport function genChartJsRoseTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1500);\n\n    // 1. Basic rose — wind directions × speed\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const data = directions.map(d => ({ Direction: d, Speed: Math.round(5 + rand() * 25) }));\n        tests.push({\n            title: 'CJS: Rose — 8 Directions',\n            description: 'Wind speed by compass direction. CJS: polarArea chart type.',\n            tags: ['chartjs', 'rose', 'basic'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Category', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 2. Stacked rose — directions × season\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const seasons = ['Spring', 'Summer', 'Autumn', 'Winter'];\n        const data: any[] = [];\n        for (const d of directions) {\n            for (const s of seasons) {\n                data.push({ Direction: d, Speed: Math.round(3 + rand() * 20), Season: s });\n            }\n        }\n        tests.push({\n            title: 'CJS: Stacked Rose — 8 dirs × 4 seasons',\n            description: 'Stacked wind rose by season.',\n            tags: ['chartjs', 'rose', 'stacked'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed'), makeField('Season')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Category', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Season: { type: Type.String, semanticType: 'Category', levels: seasons },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed'), color: makeEncodingItem('Season') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 3. Rose — 12 months\n    {\n        const months = genMonths(12);\n        const data = months.map(m => ({ Month: m, Rainfall: Math.round(20 + rand() * 150) }));\n        tests.push({\n            title: 'CJS: Rose — 12 Months Rainfall',\n            description: 'Monthly rainfall as a rose chart.',\n            tags: ['chartjs', 'rose', 'medium'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Month'), makeField('Rainfall')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Rainfall: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Rainfall') },\n        });\n    }\n\n    return tests;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/date-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\nimport { Channel, EncodingItem } from '../../../components/ComponentType';\nimport { TestCase, DateFormat, makeField, makeEncodingItem } from './types';\nimport { seededRandom } from './generators';\n\n// ---------------------------------------------------------------------------\n// Shared helper: generate test cases from date format definitions × chart types\n// ---------------------------------------------------------------------------\nexport function genDateTests(dateFormats: DateFormat[], seed: number): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(seed);\n\n    const chartConfigs: { chartType: string; needsColor: boolean }[] = [\n        { chartType: 'Bar Chart', needsColor: false },\n        { chartType: 'Line Chart', needsColor: false },\n        { chartType: 'Scatter Plot', needsColor: false },\n        { chartType: 'Area Chart', needsColor: false },\n        { chartType: 'Stacked Bar Chart', needsColor: true },\n    ];\n    const colorCategories = ['Alpha', 'Beta', 'Gamma'];\n\n    for (const fmt of dateFormats) {\n        for (const cfg of chartConfigs) {\n            const data: Record<string, any>[] = [];\n            for (const v of fmt.values) {\n                if (cfg.needsColor) {\n                    for (const cat of colorCategories) {\n                        data.push({ [fmt.fieldName]: v, Value: Math.round(50 + rand() * 500), Category: cat });\n                    }\n                } else {\n                    data.push({ [fmt.fieldName]: v, Value: Math.round(50 + rand() * 500) });\n                }\n            }\n\n            const fields = [makeField(fmt.fieldName), makeField('Value')];\n            const metadata: Record<string, { type: Type; semanticType: string; levels: any[] }> = {\n                [fmt.fieldName]: { type: fmt.expectedType, semanticType: fmt.semanticType, levels: fmt.values },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            };\n            const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n                x: makeEncodingItem(fmt.fieldName),\n                y: makeEncodingItem('Value'),\n            };\n\n            if (cfg.needsColor) {\n                fields.push(makeField('Category'));\n                metadata.Category = { type: Type.String, semanticType: 'Category', levels: colorCategories };\n                encodingMap.color = makeEncodingItem('Category');\n            }\n\n            tests.push({\n                title: `${fmt.label} → ${cfg.chartType}`,\n                description: `${fmt.description} (${fmt.values.length} values)`,\n                tags: ['date-format', fmt.semanticType.toLowerCase(), cfg.chartType.toLowerCase().replace(/ /g, '-')],\n                chartType: cfg.chartType,\n                data,\n                fields,\n                metadata,\n                encodingMap,\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// 1. Year — all representations\n// ---------------------------------------------------------------------------\nexport function genDateYearTests(): TestCase[] {\n    return genDateTests([\n        {\n            label: 'Year (string)',\n            description: 'Years as 4-digit strings: \"2000\", \"2001\", …',\n            values: Array.from({ length: 12 }, (_, i) => String(2000 + i)),\n            fieldName: 'Year',\n            expectedType: Type.String,\n            semanticType: 'Year',\n        },\n        {\n            label: 'Year (number)',\n            description: 'Years as integers: 2000, 2001, …',\n            values: Array.from({ length: 12 }, (_, i) => 2000 + i),\n            fieldName: 'Year',\n            expectedType: Type.Number,\n            semanticType: 'Year',\n        },\n        {\n            label: 'Year (ISO date)',\n            description: 'Years as ISO strings: \"2000-01-01\", \"2001-01-01\", …',\n            values: Array.from({ length: 12 }, (_, i) => `${2000 + i}-01-01`),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Year (UTC ms)',\n            description: 'Years as UTC timestamps in ms: 946684800000, …',\n            values: Array.from({ length: 12 }, (_, i) => new Date(2000 + i, 0, 1).getTime()),\n            fieldName: 'Timestamp',\n            expectedType: Type.Number,\n            semanticType: 'Timestamp',\n        },\n        {\n            label: 'Year (2-digit string)',\n            description: 'Two-digit years: \"98\", \"99\", \"00\", \"01\", …',\n            values: Array.from({ length: 10 }, (_, i) => String((98 + i) % 100).padStart(2, '0')),\n            fieldName: 'Year',\n            expectedType: Type.String,\n            semanticType: 'Year',\n        },\n        {\n            label: 'Fiscal Year (FY YYYY)',\n            description: 'Fiscal years: \"FY 2018\", \"FY 2019\", …',\n            values: Array.from({ length: 8 }, (_, i) => `FY ${2018 + i}`),\n            fieldName: 'FiscalYear',\n            expectedType: Type.String,\n            semanticType: 'Year',\n        },\n    ], 8801);\n}\n\n// ---------------------------------------------------------------------------\n// 2. Month only\n// ---------------------------------------------------------------------------\nexport function genDateMonthTests(): TestCase[] {\n    return genDateTests([\n        {\n            label: 'Month (English)',\n            description: 'Month short names: \"Jan\", \"Feb\", …',\n            values: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n            fieldName: 'Month',\n            expectedType: Type.String,\n            semanticType: 'Month',\n        },\n        {\n            label: 'Month (full English)',\n            description: 'Full month names: \"January\", \"February\", …',\n            values: ['January', 'February', 'March', 'April', 'May', 'June',\n                'July', 'August', 'September', 'October', 'November', 'December'],\n            fieldName: 'Month',\n            expectedType: Type.String,\n            semanticType: 'Month',\n        },\n        {\n            label: 'Month (number)',\n            description: 'Months as integers: 1, 2, …, 12',\n            values: Array.from({ length: 12 }, (_, i) => i + 1),\n            fieldName: 'Month',\n            expectedType: Type.Number,\n            semanticType: 'Month',\n        },\n    ], 8802);\n}\n\n// ---------------------------------------------------------------------------\n// 3. Year-Month\n// ---------------------------------------------------------------------------\nexport function genDateYearMonthTests(): TestCase[] {\n    return genDateTests([\n        {\n            label: 'Year-Month (YYYY-MM, 1 year)',\n            description: 'Year-month strings within one year: \"2020-01\", …, \"2020-12\"',\n            values: Array.from({ length: 12 }, (_, i) => `2020-${String(i + 1).padStart(2, '0')}`),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Year-Month (YYYY-MM, 3 years)',\n            description: 'Year-month strings spanning 3 years: \"2020-01\", …, \"2022-12\"',\n            values: (() => {\n                const vals: string[] = [];\n                for (let y = 2020; y <= 2022; y++)\n                    for (let m = 1; m <= 12; m++)\n                        vals.push(`${y}-${String(m).padStart(2, '0')}`);\n                return vals;\n            })(),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Year-Month (Mon YYYY, 1 year)',\n            description: 'Natural year-month within one year: \"Jan 2020\", …, \"Dec 2020\"',\n            values: (() => {\n                const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n                return months.map(m => `${m} 2020`);\n            })(),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Year-Month (Mon YYYY, 5 years)',\n            description: 'Natural year-month spanning 5 years: \"Jan 2018\", …, \"Dec 2022\"',\n            values: (() => {\n                const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n                const vals: string[] = [];\n                for (let y = 2018; y <= 2022; y++)\n                    for (const m of months) vals.push(`${m} ${y}`);\n                return vals;\n            })(),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Quarter (Q# YYYY)',\n            description: 'Quarter strings: \"Q1 2020\", \"Q2 2020\", …',\n            values: (() => {\n                const quarters: string[] = [];\n                for (let y = 2018; y <= 2023; y++) {\n                    for (let q = 1; q <= 4; q++) quarters.push(`Q${q} ${y}`);\n                }\n                return quarters;\n            })(),\n            fieldName: 'Quarter',\n            expectedType: Type.String,\n            semanticType: 'Quarter',\n        },\n        {\n            label: 'Week (Wk ##)',\n            description: 'Week labels: \"Wk 01\", \"Wk 02\", …, \"Wk 24\"',\n            values: Array.from({ length: 24 }, (_, i) => `Wk ${String(i + 1).padStart(2, '0')}`),\n            fieldName: 'Week',\n            expectedType: Type.String,\n            semanticType: 'Week',\n        },\n    ], 8803);\n}\n\n// ---------------------------------------------------------------------------\n// 4. Decade\n// ---------------------------------------------------------------------------\nexport function genDateDecadeTests(): TestCase[] {\n    return genDateTests([\n        {\n            label: 'Decade (XXXXs)',\n            description: 'Decades as strings with \"s\": \"1950s\", \"1960s\", …',\n            values: Array.from({ length: 8 }, (_, i) => `${1950 + i * 10}s`),\n            fieldName: 'Decade',\n            expectedType: Type.String,\n            semanticType: 'Decade',\n        },\n        {\n            label: 'Decade (string)',\n            description: 'Decades as plain strings: \"1950\", \"1960\", …',\n            values: Array.from({ length: 8 }, (_, i) => String(1950 + i * 10)),\n            fieldName: 'Decade',\n            expectedType: Type.String,\n            semanticType: 'Decade',\n        },\n        {\n            label: 'Decade (number)',\n            description: 'Decades as integers: 1950, 1960, …',\n            values: Array.from({ length: 8 }, (_, i) => 1950 + i * 10),\n            fieldName: 'Decade',\n            expectedType: Type.Number,\n            semanticType: 'Decade',\n        },\n    ], 8804);\n}\n\n// ---------------------------------------------------------------------------\n// 5. Date / DateTime\n// ---------------------------------------------------------------------------\nexport function genDateDateTimeTests(): TestCase[] {\n    return genDateTests([\n        {\n            label: 'Date (ISO YYYY-MM-DD, 1 year)',\n            description: 'ISO date strings within one year: \"2020-01-15\", \"2020-02-15\", …',\n            values: Array.from({ length: 12 }, (_, i) => `2020-${String(i + 1).padStart(2, '0')}-15`),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Date (ISO YYYY-MM-DD, 3 years)',\n            description: 'ISO date strings spanning 3 years: \"2020-01-15\", …, \"2022-12-15\"',\n            values: (() => {\n                const vals: string[] = [];\n                for (let y = 2020; y <= 2022; y++)\n                    for (let m = 1; m <= 12; m++)\n                        vals.push(`${y}-${String(m).padStart(2, '0')}-15`);\n                return vals;\n            })(),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Date (Mon DD YYYY)',\n            description: 'Natural date: \"Jan 15 2020\", \"Feb 15 2020\", …',\n            values: (() => {\n                const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n                return months.map(m => `${m} 15 2020`);\n            })(),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Date (MM/DD/YYYY)',\n            description: 'US date format: \"01/15/2020\", \"02/15/2020\", …',\n            values: Array.from({ length: 12 }, (_, i) => `${String(i + 1).padStart(2, '0')}/15/2020`),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Date (DD.MM.YYYY)',\n            description: 'European date: \"15.01.2020\", \"15.02.2020\", …',\n            values: Array.from({ length: 12 }, (_, i) => `15.${String(i + 1).padStart(2, '0')}.2020`),\n            fieldName: 'Date',\n            expectedType: Type.String,\n            semanticType: 'Date',\n        },\n        {\n            label: 'DateTime (ISO 8601)',\n            description: 'Full datetime: \"2020-01-01T08:00:00\", …',\n            values: Array.from({ length: 10 }, (_, i) => `2020-01-${String(i + 1).padStart(2, '0')}T${String(8 + i).padStart(2, '0')}:00:00`),\n            fieldName: 'DateTime',\n            expectedType: Type.Date,\n            semanticType: 'DateTime',\n        },\n    ], 8805);\n}\n\n// ---------------------------------------------------------------------------\n// 6. Hours — within a day and across days\n// ---------------------------------------------------------------------------\nexport function genDateHoursTests(): TestCase[] {\n    return genDateTests([\n        {\n            label: 'Hours (same day)',\n            description: 'Hourly data within one day: \"2020-01-15T00:00\", …, \"2020-01-15T23:00\"',\n            values: Array.from({ length: 24 }, (_, i) => `2020-01-15T${String(i).padStart(2, '0')}:00:00`),\n            fieldName: 'DateTime',\n            expectedType: Type.Date,\n            semanticType: 'DateTime',\n        },\n        {\n            label: 'Hours (across days)',\n            description: 'Hourly data across 3 days: \"2020-01-01T00:00\", …',\n            values: Array.from({ length: 24 }, (_, i) => {\n                const day = Math.floor(i / 8) + 1;\n                const hour = i % 8 + 8;\n                return `2020-01-${String(day).padStart(2, '0')}T${String(hour).padStart(2, '0')}:00:00`;\n            }),\n            fieldName: 'DateTime',\n            expectedType: Type.Date,\n            semanticType: 'DateTime',\n        },\n        {\n            label: 'Hours (UTC ms, same day)',\n            description: 'Hourly timestamps in ms for one day',\n            values: Array.from({ length: 24 }, (_, i) => new Date(2020, 0, 15, i).getTime()),\n            fieldName: 'Timestamp',\n            expectedType: Type.Number,\n            semanticType: 'Timestamp',\n        },\n        {\n            label: 'Minutes (same hour)',\n            description: 'Per-minute data within one hour: \"2020-01-15T10:00\", …, \"2020-01-15T10:59\"',\n            values: Array.from({ length: 30 }, (_, i) => `2020-01-15T10:${String(i * 2).padStart(2, '0')}:00`),\n            fieldName: 'DateTime',\n            expectedType: Type.Date,\n            semanticType: 'DateTime',\n        },\n    ], 8806);\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/debug-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Debug Test Cases\n *\n * Regression tests derived from real evaluation failures. Each test\n * reproduces a case that scored poorly in the rec-agent evaluation.\n * Data is sampled (max 200 rows) from the original datasets.\n *\n * Auto-generated from inspect_output/ — do not edit manually.\n */\n\nimport { Type } from '../../../data/types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\n\nfunction gen_agenciesQ4RecGpt41(): TestCase {\n    // Which counties have the highest number of law enforcement agencies, and how do these counts compare across states?\n    // Score: 10/20 | The visualization partially answers which counties have more agencies but fails to compare across st\n    return {\n        title: 'agencies_q4_rec-gpt-4.1',\n        description: 'Show number of agencies per county, faceted by state',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'county': 'LINN', 'state_abbr': 'OR', 'agency_count': 5 },\n        { 'county': 'EMANUEL', 'state_abbr': 'GA', 'agency_count': 7 },\n        { 'county': 'CHEROKEE, DEKALB', 'state_abbr': 'AL', 'agency_count': 1 },\n        { 'county': 'KENDALL', 'state_abbr': 'TX', 'agency_count': 6 },\n        { 'county': 'SHERMAN', 'state_abbr': 'KS', 'agency_count': 2 },\n        { 'county': 'BLACKFORD', 'state_abbr': 'IN', 'agency_count': 2 },\n        { 'county': 'BOND, MADISON', 'state_abbr': 'IL', 'agency_count': 1 },\n        { 'county': 'JEFF DAVIS', 'state_abbr': 'GA', 'agency_count': 2 },\n        { 'county': 'JEFFERSON', 'state_abbr': 'TX', 'agency_count': 8 },\n        { 'county': 'DIXIE', 'state_abbr': 'FL', 'agency_count': 7 },\n        { 'county': 'CHARLESTON, DORCHESTER', 'state_abbr': 'SC', 'agency_count': 2 },\n        { 'county': 'BOSQUE', 'state_abbr': 'TX', 'agency_count': 6 },\n        { 'county': 'WAYNE', 'state_abbr': 'WV', 'agency_count': 8 },\n        { 'county': 'UNION', 'state_abbr': 'NJ', 'agency_count': 26 },\n        { 'county': 'WASHINGTON', 'state_abbr': 'CO', 'agency_count': 1 },\n        { 'county': 'SANDUSKY', 'state_abbr': 'OH', 'agency_count': 6 },\n        { 'county': 'HARRISON', 'state_abbr': 'MO', 'agency_count': 2 },\n        { 'county': 'POPE', 'state_abbr': 'AR', 'agency_count': 7 },\n        { 'county': 'WHITE', 'state_abbr': 'AR', 'agency_count': 12 },\n        { 'county': 'BAY', 'state_abbr': 'FL', 'agency_count': 14 },\n        { 'county': 'WAYNE', 'state_abbr': 'IL', 'agency_count': 3 },\n        { 'county': 'HAMILTON', 'state_abbr': 'IN', 'agency_count': 8 },\n        { 'county': 'DICKEY', 'state_abbr': 'ND', 'agency_count': 3 },\n        { 'county': 'ASHLAND, HOLMES', 'state_abbr': 'OH', 'agency_count': 1 },\n        { 'county': 'FAYETTE, MARION', 'state_abbr': 'AL', 'agency_count': 1 },\n        { 'county': 'MINERAL', 'state_abbr': 'NV', 'agency_count': 1 },\n        { 'county': 'HENRY', 'state_abbr': 'IL', 'agency_count': 12 },\n        { 'county': 'HICKMAN', 'state_abbr': 'TN', 'agency_count': 2 },\n        { 'county': 'ERIE', 'state_abbr': 'PA', 'agency_count': 23 },\n        { 'county': 'PUTNAM', 'state_abbr': 'TN', 'agency_count': 6 },\n        { 'county': 'GLOUCESTER', 'state_abbr': 'NJ', 'agency_count': 28 },\n        { 'county': 'CEDAR', 'state_abbr': 'MO', 'agency_count': 2 },\n        { 'county': 'CLAY', 'state_abbr': 'IL', 'agency_count': 2 },\n        { 'county': 'MONTGOMERY', 'state_abbr': 'MS', 'agency_count': 2 },\n        { 'county': 'HIGHLAND', 'state_abbr': 'OH', 'agency_count': 6 },\n        { 'county': 'GREENWOOD', 'state_abbr': 'KS', 'agency_count': 1 },\n        { 'county': 'DUCHESNE', 'state_abbr': 'UT', 'agency_count': 2 },\n        { 'county': 'POLK', 'state_abbr': 'WI', 'agency_count': 6 },\n        { 'county': 'BALDWIN', 'state_abbr': 'AL', 'agency_count': 14 },\n        { 'county': 'COMANCHE', 'state_abbr': 'TX', 'agency_count': 3 },\n        { 'county': 'SALT LAKE', 'state_abbr': 'UT', 'agency_count': 19 },\n        { 'county': 'DES MOINES', 'state_abbr': 'IA', 'agency_count': 4 },\n        { 'county': 'GIBSON', 'state_abbr': 'TN', 'agency_count': 8 },\n        { 'county': 'LAFAYETTE, SALINE', 'state_abbr': 'MO', 'agency_count': 2 },\n        { 'county': 'CHARLES', 'state_abbr': 'MD', 'agency_count': 3 },\n        { 'county': 'GREELEY', 'state_abbr': 'KS', 'agency_count': 1 },\n        { 'county': 'HAWAII', 'state_abbr': 'HI', 'agency_count': 1 },\n        { 'county': 'EDWARDS', 'state_abbr': 'IL', 'agency_count': 3 },\n        { 'county': 'REEVES', 'state_abbr': 'TX', 'agency_count': 3 },\n        { 'county': 'CARROLL', 'state_abbr': 'MD', 'agency_count': 7 },\n        { 'county': 'DESOTO', 'state_abbr': 'FL', 'agency_count': 7 },\n        { 'county': 'ORANGE', 'state_abbr': 'FL', 'agency_count': 20 },\n        { 'county': 'MILLE LACS', 'state_abbr': 'MN', 'agency_count': 4 },\n        { 'county': 'INDIAN RIVER', 'state_abbr': 'FL', 'agency_count': 10 },\n        { 'county': 'DELTA', 'state_abbr': 'MI', 'agency_count': 4 },\n        { 'county': 'WINCHESTER CITY', 'state_abbr': 'VA', 'agency_count': 1 },\n        { 'county': 'FRANKLIN', 'state_abbr': 'ME', 'agency_count': 7 },\n        { 'county': 'CLERMONT, HAMILTON, WARREN', 'state_abbr': 'OH', 'agency_count': 1 },\n        { 'county': 'LYON', 'state_abbr': 'KS', 'agency_count': 4 },\n        { 'county': 'IRON', 'state_abbr': 'UT', 'agency_count': 7 },\n        { 'county': 'LITTLE RIVER', 'state_abbr': 'AR', 'agency_count': 2 },\n        { 'county': 'TRAVIS', 'state_abbr': 'TX', 'agency_count': 17 },\n        { 'county': 'BEAVERHEAD', 'state_abbr': 'MT', 'agency_count': 2 },\n        { 'county': 'MCPHERSON', 'state_abbr': 'NE', 'agency_count': 2 },\n        { 'county': 'WORTH', 'state_abbr': 'GA', 'agency_count': 4 },\n        { 'county': 'BROWN', 'state_abbr': 'MN', 'agency_count': 4 },\n        { 'county': 'YUMA', 'state_abbr': 'CO', 'agency_count': 3 },\n        { 'county': 'BERNALILLO', 'state_abbr': 'NM', 'agency_count': 3 },\n        { 'county': 'BOURBON', 'state_abbr': 'KY', 'agency_count': 3 },\n        { 'county': 'BUCKINGHAM', 'state_abbr': 'VA', 'agency_count': 2 },\n        { 'county': 'JOHNSTON', 'state_abbr': 'OK', 'agency_count': 2 },\n        { 'county': 'POTTAWATOMIE', 'state_abbr': 'OK', 'agency_count': 5 },\n        { 'county': 'MENOMINEE', 'state_abbr': 'WI', 'agency_count': 1 },\n        { 'county': 'SKAMANIA', 'state_abbr': 'WA', 'agency_count': 1 },\n        { 'county': 'WEXFORD', 'state_abbr': 'MI', 'agency_count': 4 },\n        { 'county': 'FULTON, HERKIMER', 'state_abbr': 'NY', 'agency_count': 1 },\n        { 'county': 'POWER', 'state_abbr': 'ID', 'agency_count': 2 },\n        { 'county': 'JEFFERSON', 'state_abbr': 'TN', 'agency_count': 5 },\n        { 'county': 'ARAPAHOE', 'state_abbr': 'CO', 'agency_count': 9 },\n        { 'county': 'SEARCY', 'state_abbr': 'AR', 'agency_count': 2 },\n        { 'county': 'ALLEGHENY, WASHINGTON', 'state_abbr': 'PA', 'agency_count': 1 },\n        { 'county': 'HANCOCK, HENDERSON', 'state_abbr': 'IL', 'agency_count': 1 },\n        { 'county': 'FRANKLIN', 'state_abbr': 'TX', 'agency_count': 2 },\n        { 'county': 'MCCRACKEN', 'state_abbr': 'KY', 'agency_count': 4 },\n        { 'county': 'BOULDER, WELD', 'state_abbr': 'CO', 'agency_count': 2 },\n        { 'county': 'KITTITAS', 'state_abbr': 'WA', 'agency_count': 5 },\n        { 'county': 'KOSCIUSKO', 'state_abbr': 'IN', 'agency_count': 8 },\n        { 'county': 'ST CROIX', 'state_abbr': 'WI', 'agency_count': 7 },\n        { 'county': 'OSCEOLA', 'state_abbr': 'FL', 'agency_count': 8 },\n        { 'county': 'CHOCTAW, WEBSTER', 'state_abbr': 'MS', 'agency_count': 1 },\n        { 'county': 'NOT SPECIFIED', 'state_abbr': 'OR', 'agency_count': 11 },\n        { 'county': 'MATHEWS', 'state_abbr': 'VA', 'agency_count': 2 },\n        { 'county': 'CLARE', 'state_abbr': 'MI', 'agency_count': 2 },\n        { 'county': 'HARDIN', 'state_abbr': 'IA', 'agency_count': 3 },\n        { 'county': 'LAPEER, SANILAC', 'state_abbr': 'MI', 'agency_count': 1 },\n        { 'county': 'NEWAYGO', 'state_abbr': 'MI', 'agency_count': 6 },\n        { 'county': 'EDGAR', 'state_abbr': 'IL', 'agency_count': 4 },\n        { 'county': 'WILLIAMSBURG', 'state_abbr': 'SC', 'agency_count': 10 },\n        { 'county': 'NEOSHO', 'state_abbr': 'KS', 'agency_count': 3 },\n        { 'county': 'RUTHERFORD', 'state_abbr': 'TN', 'agency_count': 6 },\n        { 'county': 'TURNER', 'state_abbr': 'SD', 'agency_count': 3 },\n        { 'county': 'NORTHAMPTON', 'state_abbr': 'PA', 'agency_count': 35 },\n        { 'county': 'ADAMS', 'state_abbr': 'CO', 'agency_count': 5 },\n        { 'county': 'NOBLE', 'state_abbr': 'OH', 'agency_count': 1 },\n        { 'county': 'MARION', 'state_abbr': 'OR', 'agency_count': 12 },\n        { 'county': 'GREENE', 'state_abbr': 'IA', 'agency_count': 2 },\n        { 'county': 'HARLAN', 'state_abbr': 'NE', 'agency_count': 2 },\n        { 'county': 'HUNT', 'state_abbr': 'TX', 'agency_count': 17 },\n        { 'county': 'BENTON', 'state_abbr': 'IN', 'agency_count': 2 },\n        { 'county': 'LEE', 'state_abbr': 'IA', 'agency_count': 3 },\n        { 'county': 'PARK', 'state_abbr': 'MT', 'agency_count': 2 },\n        { 'county': 'HOUSTON', 'state_abbr': 'MN', 'agency_count': 4 },\n        { 'county': 'GRAHAM', 'state_abbr': 'KS', 'agency_count': 2 },\n        { 'county': 'TILLAMOOK', 'state_abbr': 'OR', 'agency_count': 5 },\n        { 'county': 'ROBERTS', 'state_abbr': 'SD', 'agency_count': 2 },\n        { 'county': 'RIO ARRIBA', 'state_abbr': 'NM', 'agency_count': 1 },\n        { 'county': 'BROWN', 'state_abbr': 'IL', 'agency_count': 2 },\n        { 'county': 'CODINGTON', 'state_abbr': 'SD', 'agency_count': 2 },\n        { 'county': 'BEAUREGARD', 'state_abbr': 'LA', 'agency_count': 2 },\n        { 'county': 'MARTINSVILLE CITY', 'state_abbr': 'VA', 'agency_count': 1 },\n        { 'county': 'CHEROKEE, SMITH', 'state_abbr': 'TX', 'agency_count': 2 },\n        { 'county': 'MAVERICK', 'state_abbr': 'TX', 'agency_count': 2 },\n        { 'county': 'FRESNO', 'state_abbr': 'CA', 'agency_count': 28 },\n        { 'county': 'LA SALLE, LIVINGSTON', 'state_abbr': 'IL', 'agency_count': 1 },\n        { 'county': 'WYTHE', 'state_abbr': 'VA', 'agency_count': 4 },\n        { 'county': 'BAXTER', 'state_abbr': 'AR', 'agency_count': 6 },\n        { 'county': 'THROCKMORTON', 'state_abbr': 'TX', 'agency_count': 1 },\n        { 'county': 'EAST BATON ROUGE', 'state_abbr': 'LA', 'agency_count': 7 },\n        { 'county': 'NEW MADRID', 'state_abbr': 'MO', 'agency_count': 10 },\n        { 'county': 'SALINE', 'state_abbr': 'KS', 'agency_count': 3 },\n        { 'county': 'MODOC', 'state_abbr': 'CA', 'agency_count': 4 },\n        { 'county': 'LEE', 'state_abbr': 'IL', 'agency_count': 4 },\n        { 'county': 'CHENANGO', 'state_abbr': 'NY', 'agency_count': 9 },\n        { 'county': 'WASHBURN', 'state_abbr': 'WI', 'agency_count': 3 },\n        { 'county': 'MORGAN', 'state_abbr': 'TN', 'agency_count': 2 },\n        { 'county': 'TANGIPAHOA', 'state_abbr': 'LA', 'agency_count': 9 },\n        { 'county': 'PIATT', 'state_abbr': 'IL', 'agency_count': 4 },\n        { 'county': 'CLEARFIELD', 'state_abbr': 'PA', 'agency_count': 11 },\n        { 'county': 'EDGECOMBE, NASH, WILSON', 'state_abbr': 'NC', 'agency_count': 1 },\n        { 'county': 'LE SUEUR, SCOTT', 'state_abbr': 'MN', 'agency_count': 1 },\n        { 'county': 'JEFFERSON, WALWORTH', 'state_abbr': 'WI', 'agency_count': 1 },\n        { 'county': 'LAKE', 'state_abbr': 'OR', 'agency_count': 3 },\n        { 'county': 'MISSOULA', 'state_abbr': 'MT', 'agency_count': 3 },\n        { 'county': 'SCHLEY', 'state_abbr': 'GA', 'agency_count': 2 },\n        { 'county': 'MIAMI', 'state_abbr': 'KS', 'agency_count': 4 },\n        { 'county': 'FULTON', 'state_abbr': 'IN', 'agency_count': 2 },\n        { 'county': 'BASTROP', 'state_abbr': 'TX', 'agency_count': 5 },\n        { 'county': 'NYE', 'state_abbr': 'NV', 'agency_count': 1 },\n        { 'county': 'THOMAS', 'state_abbr': 'NE', 'agency_count': 2 },\n        { 'county': 'POTTAWATOMIE', 'state_abbr': 'KS', 'agency_count': 5 },\n        { 'county': 'LEON', 'state_abbr': 'TX', 'agency_count': 5 },\n        { 'county': 'ATHENS', 'state_abbr': 'OH', 'agency_count': 9 },\n        { 'county': 'CRAWFORD, FRANKLIN', 'state_abbr': 'MO', 'agency_count': 1 },\n        { 'county': 'SUMMERS', 'state_abbr': 'WV', 'agency_count': 5 },\n        { 'county': 'CLERMONT', 'state_abbr': 'OH', 'agency_count': 11 },\n        { 'county': 'PLATTE', 'state_abbr': 'MO', 'agency_count': 15 },\n        { 'county': 'ALGER', 'state_abbr': 'MI', 'agency_count': 3 },\n        { 'county': 'BOONE, WINNEBAGO', 'state_abbr': 'IL', 'agency_count': 2 },\n        { 'county': 'HART', 'state_abbr': 'GA', 'agency_count': 2 },\n        { 'county': 'PIERCE', 'state_abbr': 'ND', 'agency_count': 2 },\n        { 'county': 'PERSON', 'state_abbr': 'NC', 'agency_count': 2 },\n        { 'county': 'KENT, SUSSEX', 'state_abbr': 'DE', 'agency_count': 1 },\n        { 'county': 'SABINE', 'state_abbr': 'TX', 'agency_count': 4 },\n        { 'county': 'BENTON, WASHINGTON', 'state_abbr': 'AR', 'agency_count': 1 },\n        { 'county': 'KING, SNOHOMISH', 'state_abbr': 'WA', 'agency_count': 1 },\n        { 'county': 'CLAYTON', 'state_abbr': 'GA', 'agency_count': 10 },\n        { 'county': 'MONTGOMERY, TOOMBS', 'state_abbr': 'GA', 'agency_count': 1 },\n        { 'county': 'CRAIG', 'state_abbr': 'OK', 'agency_count': 2 },\n        { 'county': 'JACKSON', 'state_abbr': 'IA', 'agency_count': 4 },\n        { 'county': 'ELLIS, JOHNSON, TARRANT', 'state_abbr': 'TX', 'agency_count': 1 },\n        { 'county': 'LINCOLN', 'state_abbr': 'SD', 'agency_count': 5 },\n        { 'county': 'HOWARD', 'state_abbr': 'MO', 'agency_count': 2 },\n        { 'county': 'MORROW', 'state_abbr': 'OH', 'agency_count': 3 },\n        { 'county': 'KINGS', 'state_abbr': 'CA', 'agency_count': 7 },\n        { 'county': 'OLMSTED', 'state_abbr': 'MN', 'agency_count': 3 },\n        { 'county': 'CARLTON', 'state_abbr': 'MN', 'agency_count': 3 },\n        { 'county': 'MADISON', 'state_abbr': 'OH', 'agency_count': 3 },\n        { 'county': 'PRAIRIE', 'state_abbr': 'MT', 'agency_count': 1 },\n        { 'county': 'SHERIDAN', 'state_abbr': 'NE', 'agency_count': 3 },\n        { 'county': 'BLACKFORD, JAY', 'state_abbr': 'IN', 'agency_count': 1 },\n        { 'county': 'SAN MIGUEL', 'state_abbr': 'NM', 'agency_count': 3 },\n        { 'county': 'FERRY', 'state_abbr': 'WA', 'agency_count': 1 },\n        { 'county': 'TALLAPOOSA', 'state_abbr': 'AL', 'agency_count': 7 },\n        { 'county': 'LAWRENCE', 'state_abbr': 'SD', 'agency_count': 5 },\n        { 'county': 'CARTER, SULLIVAN, WASHINGTON', 'state_abbr': 'TN', 'agency_count': 1 },\n        { 'county': 'WALKER', 'state_abbr': 'GA', 'agency_count': 6 },\n        { 'county': 'BROWN', 'state_abbr': 'SD', 'agency_count': 3 },\n        { 'county': 'KENOSHA, WALWORTH', 'state_abbr': 'WI', 'agency_count': 1 },\n        { 'county': 'PAWNEE', 'state_abbr': 'NE', 'agency_count': 2 },\n        { 'county': 'FREESTONE', 'state_abbr': 'TX', 'agency_count': 4 },\n        { 'county': 'HARPER', 'state_abbr': 'KS', 'agency_count': 3 },\n        { 'county': 'CHILDRESS', 'state_abbr': 'TX', 'agency_count': 2 },\n        { 'county': 'JEFFERSON', 'state_abbr': 'OR', 'agency_count': 4 },\n        { 'county': 'BRACKEN', 'state_abbr': 'KY', 'agency_count': 3 },\n        { 'county': 'RANKIN', 'state_abbr': 'MS', 'agency_count': 8 },\n        { 'county': 'BLACK HAWK', 'state_abbr': 'IA', 'agency_count': 5 },\n        { 'county': 'FORREST, LAMAR', 'state_abbr': 'MS', 'agency_count': 1 },\n        { 'county': 'HOONAH-ANGOON', 'state_abbr': 'AK', 'agency_count': 1 },\n        { 'county': 'FAYETTE, HARDEMAN', 'state_abbr': 'TN', 'agency_count': 1 },\n        { 'county': 'PEPIN', 'state_abbr': 'WI', 'agency_count': 3 },\n        ],\n        fields: [makeField('county'), makeField('state_abbr'), makeField('agency_count')],\n        metadata: {\n            'county': { type: Type.String, semanticType: 'String', levels: ['ADAMS', 'ALGER', 'ALLEGHENY, WASHINGTON', 'ARAPAHOE', 'ASHLAND, HOLMES', 'ATHENS', 'BALDWIN', 'BASTROP', 'BAXTER', 'BAY', 'BEAUREGARD', 'BEAVERHEAD', 'BENTON', 'BENTON, WASHINGTON', 'BERNALILLO', 'BLACK HAWK', 'BLACKFORD', 'BLACKFORD, JAY', 'BOND, MADISON', 'BOONE, WINNEBAGO', 'BOSQUE', 'BOULDER, WELD', 'BOURBON', 'BRACKEN', 'BROWN', 'BUCKINGHAM', 'CARLTON', 'CARROLL', 'CARTER, SULLIVAN, WASHINGTON', 'CEDAR', 'CHARLES', 'CHARLESTON, DORCHESTER', 'CHENANGO', 'CHEROKEE, DEKALB', 'CHEROKEE, SMITH', 'CHILDRESS', 'CHOCTAW, WEBSTER', 'CLARE', 'CLAY', 'CLAYTON', 'CLEARFIELD', 'CLERMONT', 'CLERMONT, HAMILTON, WARREN', 'CODINGTON', 'COMANCHE', 'CRAIG', 'CRAWFORD, FRANKLIN', 'DELTA', 'DES MOINES', 'DESOTO'] },\n            'state_abbr': { type: Type.String, semanticType: 'State', levels: ['AK', 'AL', 'AR', 'CA', 'CO', 'DE', 'FL', 'GA', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MD', 'ME', 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'WA', 'WI', 'WV'] },\n            'agency_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('county'),\n            y: makeEncodingItem('agency_count'),\n            column: makeEncodingItem('state_abbr'),\n        },\n        chartProperties: { cornerRadius: 3 },\n    };\n}\n\nfunction gen_agenciesQ4RecGpt51(): TestCase {\n    // Which counties have the highest number of law enforcement agencies, and how do these counts compare across states?\n    // Score: 8/20 | The visualization partially addresses the question but is undermined by an apparent aggregation erro\n    return {\n        title: 'agencies_q4_rec-gpt-5.1',\n        description: 'Compute **agency** counts by **county** and **state_abbr**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'state_abbr': 'NE', 'state': 'Nebraska', 'county': 'BOYD', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'KS', 'state': 'Kansas', 'county': 'BUTLER', 'agency_count': 9, 'overall_rank': 50 },\n        { 'state_abbr': 'PA', 'state': 'Pennsylvania', 'county': 'ERIE', 'agency_count': 23, 'overall_rank': 36 },\n        { 'state_abbr': 'IA', 'state': 'Iowa', 'county': 'WORTH', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'MO', 'state': 'Missouri', 'county': 'AUDRAIN', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'WV', 'state': 'West Virginia', 'county': 'HAMPSHIRE', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'NY', 'state': 'New York', 'county': 'SCHOHARIE', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'MI', 'state': 'Michigan', 'county': 'ST JOSEPH', 'agency_count': 8, 'overall_rank': 51 },\n        { 'state_abbr': 'IA', 'state': 'Iowa', 'county': 'HANCOCK', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'SAN PATRICIO', 'agency_count': 10, 'overall_rank': 49 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'DELTA', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'IA', 'state': 'Iowa', 'county': 'TAYLOR', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'VA', 'state': 'Virginia', 'county': 'NORTON CITY', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'GA', 'state': 'Georgia', 'county': 'HART', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'ANGELINA', 'agency_count': 11, 'overall_rank': 48 },\n        { 'state_abbr': 'KY', 'state': 'Kentucky', 'county': 'DAVIESS', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'IA', 'state': 'Iowa', 'county': 'CERRO GORDO', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'FL', 'state': 'Florida', 'county': 'ORANGE', 'agency_count': 20, 'overall_rank': 39 },\n        { 'state_abbr': 'PA', 'state': 'Pennsylvania', 'county': 'BLAIR', 'agency_count': 21, 'overall_rank': 38 },\n        { 'state_abbr': 'MO', 'state': 'Missouri', 'county': 'DUNKLIN', 'agency_count': 10, 'overall_rank': 49 },\n        { 'state_abbr': 'NC', 'state': 'North Carolina', 'county': 'HARNETT', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'TN', 'state': 'Tennessee', 'county': 'SEVIER', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'TN', 'state': 'Tennessee', 'county': 'UNION', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'MA', 'state': 'Massachusetts', 'county': 'NOT SPECIFIED', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'OH', 'state': 'Ohio', 'county': 'TRUMBULL', 'agency_count': 22, 'overall_rank': 37 },\n        { 'state_abbr': 'IA', 'state': 'Iowa', 'county': 'PALO ALTO', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'AZ', 'state': 'Arizona', 'county': 'YUMA', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'AZ', 'state': 'Arizona', 'county': 'COCONINO, YAVAPAI', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'NV', 'state': 'Nevada', 'county': 'CHURCHILL', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'WI', 'state': 'Wisconsin', 'county': 'SHAWANO', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'GA', 'state': 'Georgia', 'county': 'HANCOCK', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'GA', 'state': 'Georgia', 'county': 'TAYLOR', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'ND', 'state': 'North Dakota', 'county': 'NOT SPECIFIED', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'LA', 'state': 'Louisiana', 'county': 'ST HELENA', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'KY', 'state': 'Kentucky', 'county': 'CARROLL', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'NC', 'state': 'North Carolina', 'county': 'IREDELL', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'NC', 'state': 'North Carolina', 'county': 'HARNETT, WAKE', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'ELLIS, JOHNSON, TARRANT', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'MA', 'state': 'Massachusetts', 'county': 'ESSEX', 'agency_count': 42, 'overall_rank': 20 },\n        { 'state_abbr': 'KS', 'state': 'Kansas', 'county': 'HASKELL', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'NC', 'state': 'North Carolina', 'county': 'CLAY', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'CA', 'state': 'California', 'county': 'KINGS', 'agency_count': 7, 'overall_rank': 52 },\n        { 'state_abbr': 'WI', 'state': 'Wisconsin', 'county': 'BUFFALO', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'IA', 'state': 'Iowa', 'county': 'HARDIN', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'KY', 'state': 'Kentucky', 'county': 'OLDHAM', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'NC', 'state': 'North Carolina', 'county': 'HENDERSON', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'WV', 'state': 'West Virginia', 'county': 'WOOD', 'agency_count': 8, 'overall_rank': 51 },\n        { 'state_abbr': 'MO', 'state': 'Missouri', 'county': 'IRON', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'KY', 'state': 'Kentucky', 'county': 'BOURBON, NICHOLAS', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'KS', 'state': 'Kansas', 'county': 'MIAMI', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'NAVARRO', 'agency_count': 10, 'overall_rank': 49 },\n        { 'state_abbr': 'MI', 'state': 'Michigan', 'county': 'VAN BUREN', 'agency_count': 10, 'overall_rank': 49 },\n        { 'state_abbr': 'TN', 'state': 'Tennessee', 'county': 'MONTGOMERY', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'OH', 'state': 'Ohio', 'county': 'ALLEN', 'agency_count': 10, 'overall_rank': 49 },\n        { 'state_abbr': 'MS', 'state': 'Mississippi', 'county': 'WASHINGTON', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'SD', 'state': 'South Dakota', 'county': 'HYDE', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'LA', 'state': 'Louisiana', 'county': 'SABINE', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'MI', 'state': 'Michigan', 'county': 'LAKE', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'KS', 'state': 'Kansas', 'county': 'DOUGLAS', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'NC', 'state': 'North Carolina', 'county': 'DAVIE', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'OH', 'state': 'Ohio', 'county': 'LUCAS', 'agency_count': 17, 'overall_rank': 42 },\n        { 'state_abbr': 'GA', 'state': 'Georgia', 'county': 'HARRIS, MERIWETHER', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'MO', 'state': 'Missouri', 'county': 'ADAIR', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'AZ', 'state': 'Arizona', 'county': 'MARICOPA, PINAL', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'GONZALES', 'agency_count': 9, 'overall_rank': 50 },\n        { 'state_abbr': 'TN', 'state': 'Tennessee', 'county': 'HUMPHREYS', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'FL', 'state': 'Florida', 'county': 'GADSDEN', 'agency_count': 11, 'overall_rank': 48 },\n        { 'state_abbr': 'GA', 'state': 'Georgia', 'county': 'WILKES', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'BASTROP', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'OH', 'state': 'Ohio', 'county': 'FAIRFIELD, FRANKLIN, LICKING', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'MT', 'state': 'Montana', 'county': 'VALLEY', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'MS', 'state': 'Mississippi', 'county': 'GEORGE', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'UT', 'state': 'Utah', 'county': 'SUMMIT, WASATCH', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'BURNET, LLANO', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'NC', 'state': 'North Carolina', 'county': 'CALDWELL', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'IN', 'state': 'Indiana', 'county': 'SHELBY', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'VA', 'state': 'Virginia', 'county': 'GILES', 'agency_count': 7, 'overall_rank': 52 },\n        { 'state_abbr': 'AK', 'state': 'Alaska', 'county': 'BRISTOL BAY', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'IL', 'state': 'Illinois', 'county': 'HENRY', 'agency_count': 12, 'overall_rank': 47 },\n        { 'state_abbr': 'CT', 'state': 'Connecticut', 'county': 'SOUTH CENTRAL CONNECTICUT PLANNING REGION', 'agency_count': 16, 'overall_rank': 43 },\n        { 'state_abbr': 'SD', 'state': 'South Dakota', 'county': 'HAND', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'OR', 'state': 'Oregon', 'county': 'BENTON', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'MI', 'state': 'Michigan', 'county': 'BAY, MIDLAND', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'OR', 'state': 'Oregon', 'county': 'TILLAMOOK', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'IL', 'state': 'Illinois', 'county': 'DEKALB', 'agency_count': 11, 'overall_rank': 48 },\n        { 'state_abbr': 'TN', 'state': 'Tennessee', 'county': 'GIBSON, OBION', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'TN', 'state': 'Tennessee', 'county': 'SULLIVAN', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'DALLAS, ELLIS, TARRANT', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'SC', 'state': 'South Carolina', 'county': 'LAURENS', 'agency_count': 10, 'overall_rank': 49 },\n        { 'state_abbr': 'MI', 'state': 'Michigan', 'county': 'PRESQUE ISLE', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'ND', 'state': 'North Dakota', 'county': 'LAMOURE', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'OK', 'state': 'Oklahoma', 'county': 'CHEROKEE, MUSKOGEE', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'NE', 'state': 'Nebraska', 'county': 'CEDAR', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'FL', 'state': 'Florida', 'county': 'HOLMES', 'agency_count': 7, 'overall_rank': 52 },\n        { 'state_abbr': 'OH', 'state': 'Ohio', 'county': 'GUERNSEY', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'MO', 'state': 'Missouri', 'county': 'MISSISSIPPI', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'KY', 'state': 'Kentucky', 'county': 'FLOYD', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'ANDERSON', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'KY', 'state': 'Kentucky', 'county': 'BOYD', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'WY', 'state': 'Wyoming', 'county': 'CAMPBELL', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'SHERMAN', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'NM', 'state': 'New Mexico', 'county': 'GUADALUPE', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'MO', 'state': 'Missouri', 'county': 'CASS', 'agency_count': 12, 'overall_rank': 47 },\n        { 'state_abbr': 'MO', 'state': 'Missouri', 'county': 'CAMDEN, MILLER', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'ND', 'state': 'North Dakota', 'county': 'DUNN', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'LA', 'state': 'Louisiana', 'county': 'OUACHITA', 'agency_count': 7, 'overall_rank': 52 },\n        { 'state_abbr': 'AR', 'state': 'Arkansas', 'county': 'PIKE', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'GA', 'state': 'Georgia', 'county': 'GWINNETT, WALTON', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'WV', 'state': 'West Virginia', 'county': 'GRANT', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'FL', 'state': 'Florida', 'county': 'NASSAU', 'agency_count': 7, 'overall_rank': 52 },\n        { 'state_abbr': 'MO', 'state': 'Missouri', 'county': 'DALLAS', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'TN', 'state': 'Tennessee', 'county': 'MAURY', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'ME', 'state': 'Maine', 'county': 'LINCOLN', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'NE', 'state': 'Nebraska', 'county': 'DEUEL', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'VA', 'state': 'Virginia', 'county': 'AUGUSTA', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'IA', 'state': 'Iowa', 'county': 'FLOYD', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'NC', 'state': 'North Carolina', 'county': 'RANDOLPH', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'VICTORIA', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'IA', 'state': 'Iowa', 'county': 'JACKSON', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'SC', 'state': 'South Carolina', 'county': 'CHEROKEE, SPARTANBURG', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'LA', 'state': 'Louisiana', 'county': 'CATAHOULA', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'MI', 'state': 'Michigan', 'county': 'OAKLAND, WAYNE', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'NJ', 'state': 'New Jersey', 'county': 'SUSSEX', 'agency_count': 14, 'overall_rank': 45 },\n        { 'state_abbr': 'PA', 'state': 'Pennsylvania', 'county': 'PERRY', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'NV', 'state': 'Nevada', 'county': 'LANDER', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'IN', 'state': 'Indiana', 'county': 'LAKE', 'agency_count': 20, 'overall_rank': 39 },\n        { 'state_abbr': 'NC', 'state': 'North Carolina', 'county': 'CASWELL', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'CO', 'state': 'Colorado', 'county': 'MOFFAT', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'AL', 'state': 'Alabama', 'county': 'LIMESTONE', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'LA', 'state': 'Louisiana', 'county': 'EVANGELINE', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'WV', 'state': 'West Virginia', 'county': 'HARRISON', 'agency_count': 13, 'overall_rank': 46 },\n        { 'state_abbr': 'LA', 'state': 'Louisiana', 'county': 'ST LANDRY', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'ID', 'state': 'Idaho', 'county': 'OWYHEE', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'KINNEY', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'CO', 'state': 'Colorado', 'county': 'CHEYENNE', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'CO', 'state': 'Colorado', 'county': 'CLEAR CREEK', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'MD', 'state': 'Maryland', 'county': 'CECIL', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'OK', 'state': 'Oklahoma', 'county': 'COTTON', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'SC', 'state': 'South Carolina', 'county': 'LEXINGTON, RICHLAND', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'WI', 'state': 'Wisconsin', 'county': 'GREEN LAKE', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'UT', 'state': 'Utah', 'county': 'PIUTE', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'NE', 'state': 'Nebraska', 'county': 'HITCHCOCK', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'MN', 'state': 'Minnesota', 'county': 'WABASHA', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'NY', 'state': 'New York', 'county': 'BROOME', 'agency_count': 8, 'overall_rank': 51 },\n        { 'state_abbr': 'KS', 'state': 'Kansas', 'county': 'ELLIS', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'WY', 'state': 'Wyoming', 'county': 'LINCOLN', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'IL', 'state': 'Illinois', 'county': 'CLINTON, ST CLAIR', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'IA', 'state': 'Iowa', 'county': 'PLYMOUTH', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'CO', 'state': 'Colorado', 'county': 'KIT CARSON', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'IN', 'state': 'Indiana', 'county': 'VIGO', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'IL', 'state': 'Illinois', 'county': 'DOUGLAS, MOULTRIE', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'KS', 'state': 'Kansas', 'county': 'RUSSELL', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'IL', 'state': 'Illinois', 'county': 'DUPAGE, WILL', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'WA', 'state': 'Washington', 'county': 'FERRY', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'KS', 'state': 'Kansas', 'county': 'RAWLINS', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'AL', 'state': 'Alabama', 'county': 'BUTLER', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'NC', 'state': 'North Carolina', 'county': 'CLEVELAND', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'NC', 'state': 'North Carolina', 'county': 'PITT', 'agency_count': 6, 'overall_rank': 53 },\n        { 'state_abbr': 'LA', 'state': 'Louisiana', 'county': 'CALCASIEU', 'agency_count': 8, 'overall_rank': 51 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'KNOX', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'OH', 'state': 'Ohio', 'county': 'WYANDOT', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'GA', 'state': 'Georgia', 'county': 'COBB', 'agency_count': 10, 'overall_rank': 49 },\n        { 'state_abbr': 'IN', 'state': 'Indiana', 'county': 'RIPLEY', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'MI', 'state': 'Michigan', 'county': 'SAGINAW', 'agency_count': 16, 'overall_rank': 43 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'BRAZORIA, FORT BEND, HARRIS', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'FL', 'state': 'Florida', 'county': 'MARTIN', 'agency_count': 9, 'overall_rank': 50 },\n        { 'state_abbr': 'WA', 'state': 'Washington', 'county': 'LEWIS', 'agency_count': 8, 'overall_rank': 51 },\n        { 'state_abbr': 'MT', 'state': 'Montana', 'county': 'POWELL', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'CA', 'state': 'California', 'county': 'TEHAMA', 'agency_count': 7, 'overall_rank': 52 },\n        { 'state_abbr': 'MO', 'state': 'Missouri', 'county': 'SHANNON, TEXAS', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'MARTIN', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'IA', 'state': 'Iowa', 'county': 'DICKINSON', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'KY', 'state': 'Kentucky', 'county': 'OWEN', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'OK', 'state': 'Oklahoma', 'county': 'LE FLORE', 'agency_count': 13, 'overall_rank': 46 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'JACKSON', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'COLEMAN', 'agency_count': 4, 'overall_rank': 55 },\n        { 'state_abbr': 'KY', 'state': 'Kentucky', 'county': 'MORGAN', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'MS', 'state': 'Mississippi', 'county': 'HANCOCK', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'AL', 'state': 'Alabama', 'county': 'HALE', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'CA', 'state': 'California', 'county': 'LASSEN', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'IA', 'state': 'Iowa', 'county': 'BUENA VISTA', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'BORDEN', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'NY', 'state': 'New York', 'county': 'ORANGE', 'agency_count': 33, 'overall_rank': 27 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'LA SALLE', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'CO', 'state': 'Colorado', 'county': 'SAGUACHE', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'NY', 'state': 'New York', 'county': 'CATTARAUGUS', 'agency_count': 9, 'overall_rank': 50 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'OCHILTREE', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'UT', 'state': 'Utah', 'county': 'RICH', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'CO', 'state': 'Colorado', 'county': 'ADAMS, JEFFERSON', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'IL', 'state': 'Illinois', 'county': 'MERCER, WARREN', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'KS', 'state': 'Kansas', 'county': 'POTTAWATOMIE', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'LA', 'state': 'Louisiana', 'county': 'FRANKLIN', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'NE', 'state': 'Nebraska', 'county': 'FRANKLIN', 'agency_count': 2, 'overall_rank': 57 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'ERATH', 'agency_count': 5, 'overall_rank': 54 },\n        { 'state_abbr': 'IN', 'state': 'Indiana', 'county': 'JASPER', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'AL', 'state': 'Alabama', 'county': 'WALKER', 'agency_count': 7, 'overall_rank': 52 },\n        { 'state_abbr': 'MI', 'state': 'Michigan', 'county': 'SCHOOLCRAFT', 'agency_count': 3, 'overall_rank': 56 },\n        { 'state_abbr': 'PA', 'state': 'Pennsylvania', 'county': 'CHESTER', 'agency_count': 52, 'overall_rank': 14 },\n        { 'state_abbr': 'DE', 'state': 'Delaware', 'county': 'KENT, NEW CASTLE', 'agency_count': 1, 'overall_rank': 58 },\n        { 'state_abbr': 'TX', 'state': 'Texas', 'county': 'KENT', 'agency_count': 1, 'overall_rank': 58 },\n        ],\n        fields: [makeField('state_abbr'), makeField('state'), makeField('county'), makeField('agency_count'), makeField('overall_rank')],\n        metadata: {\n            'state_abbr': { type: Type.String, semanticType: 'State', levels: ['AK', 'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DE', 'FL', 'GA', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'WA', 'WI', 'WV', 'WY'] },\n            'state': { type: Type.String, semanticType: 'Category', levels: ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'] },\n            'county': { type: Type.String, semanticType: 'String', levels: ['ADAIR', 'ADAMS, JEFFERSON', 'ALLEN', 'ANDERSON', 'ANGELINA', 'AUDRAIN', 'AUGUSTA', 'BASTROP', 'BAY, MIDLAND', 'BENTON', 'BLAIR', 'BORDEN', 'BOURBON, NICHOLAS', 'BOYD', 'BRAZORIA, FORT BEND, HARRIS', 'BRISTOL BAY', 'BROOME', 'BUENA VISTA', 'BUFFALO', 'BURNET, LLANO', 'BUTLER', 'CALCASIEU', 'CALDWELL', 'CAMDEN, MILLER', 'CAMPBELL', 'CARROLL', 'CASS', 'CASWELL', 'CATAHOULA', 'CATTARAUGUS', 'CECIL', 'CEDAR', 'CERRO GORDO', 'CHEROKEE, MUSKOGEE', 'CHEROKEE, SPARTANBURG', 'CHESTER', 'CHEYENNE', 'CHURCHILL', 'CLAY', 'CLEAR CREEK', 'CLEVELAND', 'CLINTON, ST CLAIR', 'COBB', 'COCONINO, YAVAPAI', 'COLEMAN', 'COTTON', 'DALLAS', 'DALLAS, ELLIS, TARRANT', 'DAVIE', 'DAVIESS'] },\n            'agency_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n            'overall_rank': { type: Type.String, semanticType: 'Category', levels: ['14', '20', '27', '36', '37', '38', '39', '42', '43', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58'] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('county'),\n            y: makeEncodingItem('agency_count'),\n            color: makeEncodingItem('state_abbr'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_apiLogosQ4RecGpt41(): TestCase {\n    // What are the top 15 logo host domains (extracted from the url field) by number of APIs using them?\n    // Score: 6/20 | The visualization has major data extraction and design issues: it appears to plot URL schemes rather\n    return {\n        title: 'api_logos_q4_rec-gpt-4.1',\n        description: 'Show top 15 **logo host domains** by API count',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'host_domain': 'https', 'api_count': 2495 },\n        { 'host_domain': 'http', 'api_count': 29 },\n        { 'host_domain': '', 'api_count': 4 },\n        { 'host_domain': '..', 'api_count': 1 },\n        ],\n        fields: [makeField('host_domain'), makeField('api_count')],\n        metadata: {\n            'host_domain': { type: Type.String, semanticType: 'String', levels: ['', '..', 'http', 'https'] },\n            'api_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('host_domain'),\n            y: makeEncodingItem('api_count'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_apiLogosQ4RecGpt51(): TestCase {\n    // What are the top 15 logo host domains (extracted from the url field) by number of APIs using them?\n    // Score: 4/20 | The visualization suffers from major data extraction and scaling errors and does not correctly prese\n    return {\n        title: 'api_logos_q4_rec-gpt-5.1',\n        description: 'Count APIs per **logo_host_domain** and show top 15',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'logo_host_domain': '..', 'api_count': 1 },\n        { 'logo_host_domain': 'http', 'api_count': 29 },\n        { 'logo_host_domain': 'https', 'api_count': 2495 },\n        ],\n        fields: [makeField('logo_host_domain'), makeField('api_count')],\n        metadata: {\n            'logo_host_domain': { type: Type.String, semanticType: 'String', levels: ['..', 'http', 'https'] },\n            'api_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('logo_host_domain'),\n            y: makeEncodingItem('api_count'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_apisguruApisQ3RecGpt41(): TestCase {\n    // Among APIs with multiple versions in the catalog, which API names have the highest number of versions listed?\n    // Score: 2/20 | The chart is essentially empty, with only axis labels visible. It does not display version counts by\n    return {\n        title: 'apisguru_apis_q3_rec-gpt-4.1',\n        description: 'Show most versioned APIs by count of **version** per **name**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n\n        ],\n        fields: [makeField('name'), makeField('version_count')],\n        metadata: {\n            'name': { type: Type.String, semanticType: 'Name', levels: [] },\n            'version_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('name'),\n            y: makeEncodingItem('version_count'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_apisguruApisQ3RecGpt51(): TestCase {\n    // Among APIs with multiple versions in the catalog, which API names have the highest number of versions listed?\n    // Score: 0/20 | The visualization fails to display any meaningful data related to API version counts, so it does not\n    return {\n        title: 'apisguru_apis_q3_rec-gpt-5.1',\n        description: 'Rank **name** by count of distinct **version** entries',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n\n        ],\n        fields: [makeField('name'), makeField('version_count')],\n        metadata: {\n            'name': { type: Type.String, semanticType: 'Name', levels: [] },\n            'version_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('name'),\n            y: makeEncodingItem('version_count'),\n        },\n        chartProperties: { cornerRadius: 3 },\n    };\n}\n\nfunction gen_careStateQ1RecGpt41(): TestCase {\n    // How do average emergency department time measures vary across states for the most recent reporting period?\n    // Score: 8/20 | The visualization uses the correct data domain (emergency department measures by state) but the stac\n    return {\n        title: 'care_state_q1_rec-gpt-4.1',\n        description: 'Compare average emergency department time by **state** for latest period',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'state': 'GA', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 69.0 },\n        { 'state': 'AR', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 203.0 },\n        { 'state': 'MT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 166.0 },\n        { 'state': 'MN', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 117.0 },\n        { 'state': 'ME', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 198.0 },\n        { 'state': 'ID', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 227.0 },\n        { 'state': 'GA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 160.0 },\n        { 'state': 'DE', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 415.0 },\n        { 'state': 'SC', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 161.0 },\n        { 'state': 'AZ', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 205.0 },\n        { 'state': 'AR', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 72.0 },\n        { 'state': 'FL', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 141.0 },\n        { 'state': 'MD', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 470.0 },\n        { 'state': 'MI', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 140.0 },\n        { 'state': 'WI', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 167.0 },\n        { 'state': 'AR', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 167.0 },\n        { 'state': 'MA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 216.0 },\n        { 'state': 'RI', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 336.0 },\n        { 'state': 'ME', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 174.0 },\n        { 'state': 'TN', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 266.0 },\n        { 'state': 'MT', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 172.0 },\n        { 'state': 'AK', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 182.0 },\n        { 'state': 'IN', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 111.0 },\n        { 'state': 'WV', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 328.0 },\n        { 'state': 'NM', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 296.0 },\n        { 'state': 'WI', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 211.0 },\n        { 'state': 'IN', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 125.0 },\n        { 'state': 'MD', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 526.0 },\n        { 'state': 'NM', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 298.0 },\n        { 'state': 'WY', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 135.0 },\n        { 'state': 'FL', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 158.0 },\n        { 'state': 'OK', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 194.0 },\n        { 'state': 'FL', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 241.0 },\n        { 'state': 'NY', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 335.0 },\n        { 'state': 'SC', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 170.0 },\n        { 'state': 'KS', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 208.0 },\n        { 'state': 'NE', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 114.0 },\n        { 'state': 'IA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 290.0 },\n        { 'state': 'PA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 235.0 },\n        { 'state': 'AR', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 114.0 },\n        { 'state': 'OH', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 156.0 },\n        { 'state': 'ME', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 56.0 },\n        { 'state': 'MS', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 181.0 },\n        { 'state': 'CO', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 70.0 },\n        { 'state': 'VT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 177.0 },\n        { 'state': 'TX', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 270.0 },\n        { 'state': 'LA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 168.0 },\n        { 'state': 'AZ', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 332.0 },\n        { 'state': 'MT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 124.0 },\n        { 'state': 'IL', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 127.0 },\n        { 'state': 'RI', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 255.0 },\n        { 'state': 'NH', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 209.0 },\n        { 'state': 'NE', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 211.0 },\n        { 'state': 'TN', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 198.0 },\n        { 'state': 'SC', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 275.0 },\n        { 'state': 'KY', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 178.0 },\n        { 'state': 'NC', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 380.0 },\n        { 'state': 'FL', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 246.0 },\n        { 'state': 'NV', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 309.0 },\n        { 'state': 'AZ', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 200.0 },\n        { 'state': 'AR', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 149.0 },\n        { 'state': 'NJ', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 296.0 },\n        { 'state': 'HI', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 157.0 },\n        { 'state': 'OR', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 153.0 },\n        { 'state': 'IL', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 173.0 },\n        { 'state': 'VT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 145.0 },\n        { 'state': 'SC', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 256.0 },\n        { 'state': 'HI', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 202.0 },\n        { 'state': 'SD', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 113.0 },\n        { 'state': 'CA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 286.0 },\n        { 'state': 'LA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 110.0 },\n        { 'state': 'WY', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 129.0 },\n        { 'state': 'ME', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 346.0 },\n        { 'state': 'NH', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 210.0 },\n        { 'state': 'RI', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 354.0 },\n        { 'state': 'KY', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 214.0 },\n        { 'state': 'DC', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 26.0 },\n        { 'state': 'KY', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 208.0 },\n        { 'state': 'KY', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 153.0 },\n        { 'state': 'GA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 157.0 },\n        { 'state': 'NM', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 183.0 },\n        { 'state': 'IA', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 69.0 },\n        { 'state': 'NV', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 219.0 },\n        { 'state': 'NM', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 513.0 },\n        { 'state': 'NJ', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 145.0 },\n        { 'state': 'AZ', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 262.0 },\n        { 'state': 'NE', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 155.0 },\n        { 'state': 'TX', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 257.0 },\n        { 'state': 'DE', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 283.0 },\n        { 'state': 'MS', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 184.0 },\n        { 'state': 'VT', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 44.0 },\n        { 'state': 'HI', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 67.0 },\n        { 'state': 'TX', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 230.0 },\n        { 'state': 'MI', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 164.0 },\n        { 'state': 'UT', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 131.0 },\n        { 'state': 'ID', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 152.0 },\n        { 'state': 'NH', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 172.0 },\n        { 'state': 'NV', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 155.0 },\n        { 'state': 'MT', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 185.0 },\n        { 'state': 'GA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 288.0 },\n        { 'state': 'NM', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 41.0 },\n        { 'state': 'IN', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 195.0 },\n        { 'state': 'RI', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 63.0 },\n        { 'state': 'OK', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 252.0 },\n        { 'state': 'OR', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 118.0 },\n        { 'state': 'AR', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 264.0 },\n        { 'state': 'HI', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 84.0 },\n        { 'state': 'PR', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 502.0 },\n        { 'state': 'AL', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 192.0 },\n        { 'state': 'PA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 289.0 },\n        { 'state': 'IN', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 116.0 },\n        { 'state': 'MA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 154.0 },\n        { 'state': 'ID', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 142.0 },\n        { 'state': 'AZ', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 130.0 },\n        { 'state': 'GA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 218.0 },\n        { 'state': 'NC', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 194.0 },\n        { 'state': 'WA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 330.0 },\n        { 'state': 'SC', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 135.0 },\n        { 'state': 'RI', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 358.0 },\n        { 'state': 'NJ', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 358.0 },\n        { 'state': 'MN', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 174.0 },\n        { 'state': 'LA', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 66.0 },\n        { 'state': 'NJ', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 187.0 },\n        { 'state': 'ME', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 451.0 },\n        { 'state': 'CT', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 245.0 },\n        { 'state': 'WA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 131.0 },\n        { 'state': 'CT', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 376.0 },\n        { 'state': 'IA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 120.0 },\n        { 'state': 'OH', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 254.0 },\n        { 'state': 'MT', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 222.0 },\n        { 'state': 'MS', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 211.0 },\n        { 'state': 'IA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 217.0 },\n        { 'state': 'OH', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 240.0 },\n        { 'state': 'NC', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 71.0 },\n        { 'state': 'MD', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 431.0 },\n        { 'state': 'NC', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 312.0 },\n        { 'state': 'MA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 239.0 },\n        { 'state': 'VA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 169.0 },\n        { 'state': 'SD', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 112.0 },\n        { 'state': 'CT', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 277.0 },\n        { 'state': 'MO', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 125.0 },\n        { 'state': 'MN', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 200.0 },\n        { 'state': 'CA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 206.0 },\n        { 'state': 'OK', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 105.0 },\n        { 'state': 'AR', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 206.0 },\n        { 'state': 'CO', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 152.0 },\n        { 'state': 'DC', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 373.0 },\n        { 'state': 'VA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 266.0 },\n        { 'state': 'DC', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 352.0 },\n        { 'state': 'WI', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 171.0 },\n        { 'state': 'MD', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 154.0 },\n        { 'state': 'ND', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 138.0 },\n        { 'state': 'WV', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 267.0 },\n        { 'state': 'LA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 244.0 },\n        { 'state': 'LA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 144.0 },\n        { 'state': 'VA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 318.0 },\n        { 'state': 'MI', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 178.0 },\n        { 'state': 'MS', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 169.0 },\n        { 'state': 'IA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 114.0 },\n        { 'state': 'MT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 178.0 },\n        { 'state': 'AK', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 230.0 },\n        { 'state': 'UT', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 182.0 },\n        { 'state': 'NY', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 212.0 },\n        { 'state': 'CO', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 240.0 },\n        { 'state': 'TN', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 391.0 },\n        { 'state': 'VT', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 257.0 },\n        { 'state': 'TX', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 145.0 },\n        { 'state': 'NH', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 61.0 },\n        { 'state': 'KS', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 164.0 },\n        { 'state': 'CO', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 161.0 },\n        { 'state': 'VA', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 72.0 },\n        { 'state': 'MD', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 347.0 },\n        { 'state': 'DC', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 359.0 },\n        { 'state': 'VT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 244.0 },\n        { 'state': 'AK', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 157.0 },\n        { 'state': 'SC', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 156.0 },\n        { 'state': 'NY', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 326.0 },\n        { 'state': 'WA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 203.0 },\n        { 'state': 'MN', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 336.0 },\n        { 'state': 'DE', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 522.0 },\n        { 'state': 'MO', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 209.0 },\n        { 'state': 'CO', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 135.0 },\n        { 'state': 'NH', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 128.0 },\n        { 'state': 'IL', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 238.0 },\n        { 'state': 'SD', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 164.0 },\n        { 'state': 'NY', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 128.0 },\n        { 'state': 'TN', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 423.0 },\n        { 'state': 'FL', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 228.0 },\n        { 'state': 'OR', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'score': 197.0 },\n        { 'state': 'KY', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'score': 70.0 },\n        { 'state': 'DC', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'score': 446.0 },\n        { 'state': 'MS', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'score': 150.0 },\n        { 'state': 'MS', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 108.0 },\n        { 'state': 'AK', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 140.0 },\n        { 'state': 'ND', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'score': 167.0 },\n        { 'state': 'IN', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'score': 284.0 },\n        { 'state': 'WY', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'score': 194.0 },\n        { 'state': 'AL', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'score': 145.0 },\n        { 'state': 'OH', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'score': 134.0 },\n        { 'state': 'PA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'score': 201.0 },\n        ],\n        fields: [makeField('state'), makeField('measure_name'), makeField('score')],\n        metadata: {\n            'state': { type: Type.String, semanticType: 'State', levels: ['AK', 'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'GA', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'PR', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VT', 'WA', 'WI'] },\n            'measure_name': { type: Type.String, semanticType: 'String', levels: ['Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better'] },\n            'score': { type: Type.Number, semanticType: 'Number', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('state'),\n            y: makeEncodingItem('score'),\n            color: makeEncodingItem('measure_name'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_careStateQ1RecGpt51(): TestCase {\n    // How do average emergency department time measures vary across states for the most recent reporting period?\n    // Score: 9/20 | The visualization is loosely relevant and technically readable, but suffers from methodological and \n    return {\n        title: 'care_state_q1_rec-gpt-5.1',\n        description: 'Compare average **score** for emergency department measures by **state**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'state': 'NV', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 238.0 },\n        { 'state': 'CO', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'end_date': '2024-03-31', 'average_time_minutes': 248.0 },\n        { 'state': 'AL', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 119.0 },\n        { 'state': 'PA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 287.0 },\n        { 'state': 'IL', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 352.0 },\n        { 'state': 'ID', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 142.0 },\n        { 'state': 'HI', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 67.0 },\n        { 'state': 'DC', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 332.5 },\n        { 'state': 'PA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 289.0 },\n        { 'state': 'CO', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 123.0 },\n        { 'state': 'OH', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 163.0 },\n        { 'state': 'WY', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 184.0 },\n        { 'state': 'VT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 244.0 },\n        { 'state': 'ND', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 138.0 },\n        { 'state': 'CA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 291.0 },\n        { 'state': 'NJ', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 187.0 },\n        { 'state': 'MI', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 282.0 },\n        { 'state': 'AL', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 244.0 },\n        { 'state': 'AL', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 192.0 },\n        { 'state': 'CA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'end_date': '2024-03-31', 'average_time_minutes': 286.0 },\n        { 'state': 'HI', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 110.0 },\n        { 'state': 'IA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 158.0 },\n        { 'state': 'MT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 124.0 },\n        { 'state': 'NJ', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 176.0 },\n        { 'state': 'AL', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 168.0 },\n        { 'state': 'NE', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 155.0 },\n        { 'state': 'GA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 228.0 },\n        { 'state': 'OR', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 197.0 },\n        { 'state': 'NY', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 199.0 },\n        { 'state': 'OK', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 230.0 },\n        { 'state': 'WV', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 121.0 },\n        { 'state': 'ME', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 56.0 },\n        { 'state': 'HI', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 221.0 },\n        { 'state': 'MN', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 117.0 },\n        { 'state': 'NH', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 61.0 },\n        { 'state': 'IL', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 337.0 },\n        { 'state': 'TN', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 157.0 },\n        { 'state': 'VA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 318.0 },\n        { 'state': 'AK', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 136.0 },\n        { 'state': 'RI', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 224.0 },\n        { 'state': 'SD', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'end_date': '2024-03-31', 'average_time_minutes': 176.0 },\n        { 'state': 'DE', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 415.0 },\n        { 'state': 'OK', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 289.0 },\n        { 'state': 'WV', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 146.0 },\n        { 'state': 'KY', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 70.0 },\n        { 'state': 'WA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 243.0 },\n        { 'state': 'DE', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 250.5 },\n        { 'state': 'HI', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 207.0 },\n        { 'state': 'RI', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 277.5 },\n        { 'state': 'KY', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 208.0 },\n        { 'state': 'WV', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 267.0 },\n        { 'state': 'WI', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 211.0 },\n        { 'state': 'MA', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 68.0 },\n        { 'state': 'CO', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 133.0 },\n        { 'state': 'LA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'end_date': '2024-03-31', 'average_time_minutes': 335.0 },\n        { 'state': 'TX', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 69.0 },\n        { 'state': 'LA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 244.0 },\n        { 'state': 'NJ', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 328.0 },\n        { 'state': 'IL', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 173.0 },\n        { 'state': 'SD', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 54.0 },\n        { 'state': 'AR', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 114.0 },\n        { 'state': 'PA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 282.0 },\n        { 'state': 'MO', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 155.0 },\n        { 'state': 'ND', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 110.0 },\n        { 'state': 'CT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 204.0 },\n        { 'state': 'MA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'end_date': '2024-03-31', 'average_time_minutes': 354.0 },\n        { 'state': 'CA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 270.0 },\n        { 'state': 'ND', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 60.0 },\n        { 'state': 'IN', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 284.0 },\n        { 'state': 'TX', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 145.0 },\n        { 'state': 'NM', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 41.0 },\n        { 'state': 'NM', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 183.0 },\n        { 'state': 'MA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 216.0 },\n        { 'state': 'NH', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 128.0 },\n        { 'state': 'GA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 116.0 },\n        { 'state': 'OK', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'end_date': '2024-03-31', 'average_time_minutes': 252.0 },\n        { 'state': 'AZ', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 206.0 },\n        { 'state': 'AR', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 149.0 },\n        { 'state': 'NY', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 212.0 },\n        { 'state': 'IA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 201.0 },\n        { 'state': 'RI', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 63.0 },\n        { 'state': 'IN', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 116.0 },\n        { 'state': 'VA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 166.0 },\n        { 'state': 'WI', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 230.0 },\n        { 'state': 'CO', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 148.0 },\n        { 'state': 'VA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 141.0 },\n        { 'state': 'VT', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 176.0 },\n        { 'state': 'MN', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 174.0 },\n        { 'state': 'NV', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 120.0 },\n        { 'state': 'MA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 349.0 },\n        { 'state': 'DE', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'end_date': '2024-03-31', 'average_time_minutes': 522.0 },\n        { 'state': 'MA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 201.0 },\n        { 'state': 'LA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 200.0 },\n        { 'state': 'HI', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 179.5 },\n        { 'state': 'OH', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 252.0 },\n        { 'state': 'IL', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 320.0 },\n        { 'state': 'WA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 266.0 },\n        { 'state': 'OH', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 254.0 },\n        { 'state': 'NV', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 67.0 },\n        { 'state': 'AZ', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 247.0 },\n        { 'state': 'NJ', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 74.0 },\n        { 'state': 'SD', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 146.0 },\n        { 'state': 'FL', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 163.5 },\n        { 'state': 'NC', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 71.0 },\n        { 'state': 'UT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 142.0 },\n        { 'state': 'WY', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 194.0 },\n        { 'state': 'SD', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 112.0 },\n        { 'state': 'MO', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 257.0 },\n        { 'state': 'WA', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 154.0 },\n        { 'state': 'IL', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 127.0 },\n        { 'state': 'WY', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 56.0 },\n        { 'state': 'OK', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 119.0 },\n        { 'state': 'NE', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 161.0 },\n        { 'state': 'WA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 166.0 },\n        { 'state': 'OH', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'end_date': '2024-03-31', 'average_time_minutes': 240.0 },\n        { 'state': 'KY', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 214.0 },\n        { 'state': 'AR', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 72.0 },\n        { 'state': 'IA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 188.5 },\n        { 'state': 'WI', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 78.0 },\n        { 'state': 'KS', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 172.0 },\n        { 'state': 'ME', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 174.0 },\n        { 'state': 'IL', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 228.5 },\n        { 'state': 'AZ', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 148.0 },\n        { 'state': 'HI', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 84.0 },\n        { 'state': 'NE', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'end_date': '2024-03-31', 'average_time_minutes': 211.0 },\n        { 'state': 'OR', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 260.0 },\n        { 'state': 'PA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'end_date': '2024-03-31', 'average_time_minutes': 308.0 },\n        { 'state': 'PA', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 188.0 },\n        { 'state': 'NY', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 128.0 },\n        { 'state': 'MT', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 127.0 },\n        { 'state': 'MD', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 347.0 },\n        { 'state': 'NV', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 219.0 },\n        { 'state': 'MN', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 70.0 },\n        { 'state': 'DC', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 359.0 },\n        { 'state': 'UT', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 212.0 },\n        { 'state': 'WV', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 59.0 },\n        { 'state': 'ID', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 227.0 },\n        { 'state': 'WI', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 194.0 },\n        { 'state': 'ND', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 147.0 },\n        { 'state': 'ID', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 68.0 },\n        { 'state': 'NH', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 357.0 },\n        { 'state': 'MI', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 178.0 },\n        { 'state': 'NH', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 210.0 },\n        { 'state': 'MD', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 67.0 },\n        { 'state': 'TX', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 119.0 },\n        { 'state': 'PR', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 705.0 },\n        { 'state': 'DC', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 361.0 },\n        { 'state': 'MT', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 185.0 },\n        { 'state': 'MS', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 208.0 },\n        { 'state': 'CA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 251.0 },\n        { 'state': 'AR', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 232.0 },\n        { 'state': 'CO', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 277.0 },\n        { 'state': 'DE', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 418.0 },\n        { 'state': 'TX', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 302.0 },\n        { 'state': 'VT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 177.0 },\n        { 'state': 'WV', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 178.0 },\n        { 'state': 'NJ', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 145.0 },\n        { 'state': 'AZ', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 130.0 },\n        { 'state': 'MD', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 250.0 },\n        { 'state': 'MD', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 251.0 },\n        { 'state': 'SC', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 78.0 },\n        { 'state': 'MO', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 177.0 },\n        { 'state': 'NC', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 300.0 },\n        { 'state': 'ID', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 118.0 },\n        { 'state': 'NE', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 114.0 },\n        { 'state': 'AK', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 230.0 },\n        { 'state': 'CO', 'measure_name': 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better', 'end_date': '2024-03-31', 'average_time_minutes': 70.0 },\n        { 'state': 'UT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 171.0 },\n        { 'state': 'SC', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'end_date': '2024-03-31', 'average_time_minutes': 275.0 },\n        { 'state': 'NV', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 236.0 },\n        { 'state': 'VT', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 324.0 },\n        { 'state': 'WY', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 258.0 },\n        { 'state': 'TX', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 257.0 },\n        { 'state': 'MI', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 270.0 },\n        { 'state': 'DE', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 170.0 },\n        { 'state': 'VT', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 576.0 },\n        { 'state': 'AK', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 196.0 },\n        { 'state': 'TX', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 176.0 },\n        { 'state': 'MT', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 172.0 },\n        { 'state': 'FL', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 209.0 },\n        { 'state': 'MT', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 178.0 },\n        { 'state': 'CO', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 269.0 },\n        { 'state': 'IN', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 220.0 },\n        { 'state': 'NM', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 296.0 },\n        { 'state': 'SC', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 135.0 },\n        { 'state': 'WI', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 137.0 },\n        { 'state': 'OH', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 306.0 },\n        { 'state': 'MA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 318.0 },\n        { 'state': 'DE', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 288.0 },\n        { 'state': 'ND', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 188.0 },\n        { 'state': 'NC', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 298.0 },\n        { 'state': 'AK', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 140.0 },\n        { 'state': 'NJ', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 179.0 },\n        { 'state': 'KY', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 153.0 },\n        { 'state': 'MS', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 211.0 },\n        { 'state': 'AL', 'measure_name': 'Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'end_date': '2024-03-31', 'average_time_minutes': 145.0 },\n        { 'state': 'NV', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'end_date': '2024-03-31', 'average_time_minutes': 309.0 },\n        { 'state': 'OK', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'end_date': '2024-03-31', 'average_time_minutes': 105.0 },\n        { 'state': 'KS', 'measure_name': 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'end_date': '2024-03-31', 'average_time_minutes': 154.0 },\n        { 'state': 'IA', 'measure_name': 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'end_date': '2024-03-31', 'average_time_minutes': 217.0 },\n        ],\n        fields: [makeField('state'), makeField('measure_name'), makeField('end_date'), makeField('average_time_minutes')],\n        metadata: {\n            'state': { type: Type.String, semanticType: 'State', levels: ['AK', 'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'GA', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'PR', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VT', 'WA', 'WI'] },\n            'measure_name': { type: Type.String, semanticType: 'String', levels: ['Average (median) time patients spent in the emergency department before leaving from the visit A lower number of minutes is better', 'Average (median) time patients spent in the emergency department before leaving from the visit- Psychiatric/Mental Health Patients.  A lower number of minutes is better', 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (high)', 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (low)', 'Average time patients spent in the emergency department before being sent home A lower number of minutes is better (moderate)', 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (high)', 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (low)', 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (moderate)', 'Average time patients spent in the emergency department before leaving from the visit - Psychiatric/Mental Health Patients.  A lower number of minutes is better (very high)', 'Percentage of patients who came to the emergency department with stroke symptoms who received brain scan results within 45 minutes of arrival Higher percentages are better'] },\n            'end_date': { type: Type.Date, semanticType: 'Date', levels: ['2024-03-31'] },\n            'average_time_minutes': { type: Type.Number, semanticType: 'Number', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('state'),\n            y: makeEncodingItem('average_time_minutes'),\n            column: makeEncodingItem('measure_name'),\n        },\n        chartProperties: { cornerRadius: 2 },\n    };\n}\n\nfunction gen_careStateQ3RecGpt41(): TestCase {\n    // How have sepsis and septic shock bundle performance scores changed over time at the state level?\n    // Score: 5/20 | The visualization is readable at a basic level but is incorrectly specified: the date axis is mispar\n    return {\n        title: 'care_state_q3_rec-gpt-4.1',\n        description: 'Visualize change in **score** for sepsis/septic shock bundles by **state** and time',\n        tags: ['debug', 'line-chart'],\n        chartType: 'Line Chart',\n        data: [\n        { 'state': 'RI', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 93.0 },\n        { 'state': 'DC', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 58.0 },\n        { 'state': 'AL', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 80.0 },\n        { 'state': 'VT', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 84.0 },\n        { 'state': 'KY', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 79.0 },\n        { 'state': 'IN', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 81.0 },\n        { 'state': 'IL', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'DE', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 82.0 },\n        { 'state': 'VT', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 58.0 },\n        { 'state': 'CT', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 77.0 },\n        { 'state': 'TN', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 82.0 },\n        { 'state': 'WY', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 81.0 },\n        { 'state': 'NY', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 84.0 },\n        { 'state': 'CO', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 87.0 },\n        { 'state': 'OR', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 91.0 },\n        { 'state': 'NC', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 70.0 },\n        { 'state': 'AR', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 77.0 },\n        { 'state': 'AL', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 92.0 },\n        { 'state': 'CO', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 95.0 },\n        { 'state': 'ID', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 88.0 },\n        { 'state': 'IL', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 91.0 },\n        { 'state': 'NM', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 75.0 },\n        { 'state': 'PA', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 80.0 },\n        { 'state': 'WY', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 79.0 },\n        { 'state': 'OH', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 91.0 },\n        { 'state': 'IA', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 80.0 },\n        { 'state': 'SC', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 82.0 },\n        { 'state': 'TX', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 92.0 },\n        { 'state': 'WA', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 89.0 },\n        { 'state': 'MT', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 94.0 },\n        { 'state': 'IL', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 71.0 },\n        { 'state': 'ND', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 77.0 },\n        { 'state': 'OR', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 78.0 },\n        { 'state': 'KY', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 93.0 },\n        { 'state': 'AK', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 79.0 },\n        { 'state': 'GA', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 68.0 },\n        { 'state': 'WA', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 70.0 },\n        { 'state': 'ME', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 95.0 },\n        { 'state': 'TN', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 78.0 },\n        { 'state': 'FL', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 94.0 },\n        { 'state': 'WI', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 93.0 },\n        { 'state': 'ME', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 86.0 },\n        { 'state': 'WI', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 85.0 },\n        { 'state': 'WI', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 74.0 },\n        { 'state': 'MO', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'CT', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 63.0 },\n        { 'state': 'MI', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 91.0 },\n        { 'state': 'MI', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 69.0 },\n        { 'state': 'VA', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 86.0 },\n        { 'state': 'KS', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 90.0 },\n        { 'state': 'AR', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 90.0 },\n        { 'state': 'NE', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 89.0 },\n        { 'state': 'NY', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'DC', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 84.0 },\n        { 'state': 'MO', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 66.0 },\n        { 'state': 'CO', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 80.0 },\n        { 'state': 'OH', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 81.0 },\n        { 'state': 'LA', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 93.0 },\n        { 'state': 'MN', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 60.0 },\n        { 'state': 'OK', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 91.0 },\n        { 'state': 'IA', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 80.0 },\n        { 'state': 'CA', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 87.0 },\n        { 'state': 'PR', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 90.0 },\n        { 'state': 'IL', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 80.0 },\n        { 'state': 'LA', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 80.0 },\n        { 'state': 'PA', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 69.0 },\n        { 'state': 'VA', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 93.0 },\n        { 'state': 'CT', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 85.0 },\n        { 'state': 'WY', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 93.0 },\n        { 'state': 'SD', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 80.0 },\n        { 'state': 'NE', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 73.0 },\n        { 'state': 'MN', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 75.0 },\n        { 'state': 'GA', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'MN', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 78.0 },\n        { 'state': 'MI', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 78.0 },\n        { 'state': 'ID', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 84.0 },\n        { 'state': 'KY', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 73.0 },\n        { 'state': 'CA', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 82.0 },\n        { 'state': 'GA', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 86.0 },\n        { 'state': 'WV', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 77.0 },\n        { 'state': 'NV', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 94.0 },\n        { 'state': 'WA', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'IA', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 70.0 },\n        { 'state': 'DE', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 76.0 },\n        { 'state': 'NE', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 80.0 },\n        { 'state': 'MD', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 87.0 },\n        { 'state': 'RI', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 61.0 },\n        { 'state': 'NY', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 79.0 },\n        { 'state': 'WY', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'SD', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'NJ', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 93.0 },\n        { 'state': 'TX', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 81.0 },\n        { 'state': 'MO', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 77.0 },\n        { 'state': 'MO', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 92.0 },\n        { 'state': 'VT', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 80.0 },\n        { 'state': 'DC', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 88.0 },\n        { 'state': 'MT', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 86.0 },\n        { 'state': 'AL', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 70.0 },\n        { 'state': 'MS', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 91.0 },\n        { 'state': 'TN', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 64.0 },\n        { 'state': 'IA', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 93.0 },\n        { 'state': 'NJ', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 77.0 },\n        { 'state': 'VT', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 91.0 },\n        { 'state': 'CT', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 92.0 },\n        { 'state': 'LA', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 73.0 },\n        { 'state': 'RI', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 87.0 },\n        { 'state': 'SD', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 94.0 },\n        { 'state': 'MT', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 77.0 },\n        { 'state': 'MD', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 91.0 },\n        { 'state': 'IN', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 90.0 },\n        { 'state': 'UT', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 87.0 },\n        { 'state': 'MD', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 81.0 },\n        { 'state': 'OK', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 65.0 },\n        { 'state': 'NM', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 73.0 },\n        { 'state': 'DE', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 81.0 },\n        { 'state': 'OK', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 76.0 },\n        { 'state': 'PR', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 38.0 },\n        { 'state': 'NH', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 66.0 },\n        { 'state': 'NM', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'NY', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 72.0 },\n        { 'state': 'UT', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 93.0 },\n        { 'state': 'ID', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 79.0 },\n        { 'state': 'NH', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 92.0 },\n        { 'state': 'PA', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 91.0 },\n        { 'state': 'HI', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 89.0 },\n        { 'state': 'NE', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 89.0 },\n        { 'state': 'OR', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'KS', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 77.0 },\n        { 'state': 'ND', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 89.0 },\n        { 'state': 'OK', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'VA', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 72.0 },\n        { 'state': 'AZ', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 75.0 },\n        { 'state': 'CA', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 93.0 },\n        { 'state': 'OH', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 77.0 },\n        { 'state': 'UT', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'NC', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 93.0 },\n        { 'state': 'OR', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 68.0 },\n        { 'state': 'NJ', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 90.0 },\n        { 'state': 'NJ', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 84.0 },\n        { 'state': 'PR', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 28.0 },\n        { 'state': 'DE', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 57.0 },\n        { 'state': 'WI', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 89.0 },\n        { 'state': 'MA', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 68.0 },\n        { 'state': 'MT', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 87.0 },\n        { 'state': 'VA', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 81.0 },\n        { 'state': 'ND', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 75.0 },\n        { 'state': 'NV', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 81.0 },\n        { 'state': 'MS', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 71.0 },\n        { 'state': 'AR', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 82.0 },\n        { 'state': 'ND', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 57.0 },\n        { 'state': 'AK', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 65.0 },\n        { 'state': 'TX', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 70.0 },\n        { 'state': 'TX', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 87.0 },\n        { 'state': 'CA', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 74.0 },\n        { 'state': 'MI', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 85.0 },\n        { 'state': 'WV', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 91.0 },\n        { 'state': 'MA', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 78.0 },\n        { 'state': 'NV', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 72.0 },\n        { 'state': 'MA', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 81.0 },\n        { 'state': 'MS', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 85.0 },\n        { 'state': 'TN', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 91.0 },\n        { 'state': 'ID', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 66.0 },\n        { 'state': 'UT', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 70.0 },\n        { 'state': 'FL', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'AZ', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 63.0 },\n        { 'state': 'AR', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 87.0 },\n        { 'state': 'SC', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 70.0 },\n        { 'state': 'KY', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 85.0 },\n        { 'state': 'KS', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 60.0 },\n        { 'state': 'NH', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 72.0 },\n        { 'state': 'WV', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 83.0 },\n        { 'state': 'ME', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 86.0 },\n        { 'state': 'MS', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 80.0 },\n        { 'state': 'KS', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 80.0 },\n        { 'state': 'NM', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 63.0 },\n        { 'state': 'PR', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 85.0 },\n        { 'state': 'HI', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 92.0 },\n        { 'state': 'HI', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 78.0 },\n        { 'state': 'SD', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 69.0 },\n        { 'state': 'DC', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 72.0 },\n        { 'state': 'IN', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 82.0 },\n        { 'state': 'AK', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 81.0 },\n        { 'state': 'SC', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 89.0 },\n        { 'state': 'HI', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 88.0 },\n        { 'state': 'AZ', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 88.0 },\n        { 'state': 'OH', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 71.0 },\n        { 'state': 'NH', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 79.0 },\n        { 'state': 'NC', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 79.0 },\n        { 'state': 'FL', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 73.0 },\n        { 'state': 'RI', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 78.0 },\n        { 'state': 'CO', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 90.0 },\n        { 'state': 'AL', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 86.0 },\n        { 'state': 'NC', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 84.0 },\n        { 'state': 'IN', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 66.0 },\n        { 'state': 'AZ', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 79.0 },\n        { 'state': 'GA', 'measure_id': 'SEV_SEP_3HR', 'start_date': '2023-04-01', 'score': 78.0 },\n        { 'state': 'NV', 'measure_id': 'SEP_SH_6HR', 'start_date': '2023-04-01', 'score': 88.0 },\n        { 'state': 'AK', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 89.0 },\n        { 'state': 'MD', 'measure_id': 'SEP_SH_3HR', 'start_date': '2023-04-01', 'score': 82.0 },\n        { 'state': 'SC', 'measure_id': 'SEV_SEP_6HR', 'start_date': '2023-04-01', 'score': 93.0 },\n        ],\n        fields: [makeField('state'), makeField('measure_id'), makeField('start_date'), makeField('score')],\n        metadata: {\n            'state': { type: Type.String, semanticType: 'State', levels: ['AK', 'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'GA', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'PR', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VT', 'WA', 'WI'] },\n            'measure_id': { type: Type.String, semanticType: 'String', levels: ['SEP_SH_3HR', 'SEP_SH_6HR', 'SEV_SEP_3HR', 'SEV_SEP_6HR'] },\n            'start_date': { type: Type.Date, semanticType: 'Date', levels: ['2023-04-01'] },\n            'score': { type: Type.Number, semanticType: 'Score', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('start_date'),\n            y: makeEncodingItem('score'),\n            color: makeEncodingItem('measure_id'),\n            column: makeEncodingItem('state'),\n        },\n        chartProperties: { interpolate: \"linear\" },\n    };\n}\n\nfunction gen_careStateQ3RecGpt51(): TestCase {\n    // How have sepsis and septic shock bundle performance scores changed over time at the state level?\n    // Score: 8/20 | The visualization partially includes relevant measures but fails to show state-level changes over ti\n    return {\n        title: 'care_state_q3_rec-gpt-5.1',\n        description: 'Track **Sepsis Care** bundle scores by **state** over time',\n        tags: ['debug', 'line-chart'],\n        chartType: 'Line Chart',\n        data: [\n        { 'state': 'HI', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 88.0 },\n        { 'state': 'AR', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 87.0 },\n        { 'state': 'ND', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 54.0 },\n        { 'state': 'MS', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 63.0 },\n        { 'state': 'MI', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 91.0 },\n        { 'state': 'DC', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 49.0 },\n        { 'state': 'OR', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 78.0 },\n        { 'state': 'CO', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 80.0 },\n        { 'state': 'NY', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 79.0 },\n        { 'state': 'OR', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 91.0 },\n        { 'state': 'UT', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 87.0 },\n        { 'state': 'NC', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 93.0 },\n        { 'state': 'CA', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 87.0 },\n        { 'state': 'NH', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 66.0 },\n        { 'state': 'ME', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 86.0 },\n        { 'state': 'AL', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 80.0 },\n        { 'state': 'AL', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 86.0 },\n        { 'state': 'CA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 82.0 },\n        { 'state': 'HI', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 71.0 },\n        { 'state': 'HI', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 92.0 },\n        { 'state': 'MS', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 91.0 },\n        { 'state': 'NH', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 92.0 },\n        { 'state': 'AL', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 70.0 },\n        { 'state': 'ND', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 77.0 },\n        { 'state': 'GA', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 57.0 },\n        { 'state': 'OK', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 76.0 },\n        { 'state': 'NV', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 72.0 },\n        { 'state': 'OH', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 91.0 },\n        { 'state': 'WI', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 85.0 },\n        { 'state': 'ME', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 86.0 },\n        { 'state': 'HI', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 78.0 },\n        { 'state': 'WY', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 68.0 },\n        { 'state': 'NH', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 57.0 },\n        { 'state': 'IL', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 71.0 },\n        { 'state': 'SC', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 89.0 },\n        { 'state': 'TX', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 87.0 },\n        { 'state': 'AK', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 65.0 },\n        { 'state': 'PA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 91.0 },\n        { 'state': 'SC', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 70.0 },\n        { 'state': 'DE', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 48.0 },\n        { 'state': 'OH', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 77.0 },\n        { 'state': 'WI', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 69.0 },\n        { 'state': 'KY', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 85.0 },\n        { 'state': 'UT', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 70.0 },\n        { 'state': 'DC', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 84.0 },\n        { 'state': 'WA', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 70.0 },\n        { 'state': 'PR', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 16.0 },\n        { 'state': 'KY', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 73.0 },\n        { 'state': 'WV', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 83.0 },\n        { 'state': 'WA', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 83.0 },\n        { 'state': 'MA', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 81.0 },\n        { 'state': 'CA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 93.0 },\n        { 'state': 'LA', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 73.0 },\n        { 'state': 'KY', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 79.0 },\n        { 'state': 'VT', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 80.0 },\n        { 'state': 'ID', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 84.0 },\n        { 'state': 'AR', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 77.0 },\n        { 'state': 'OR', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 68.0 },\n        { 'state': 'MN', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 75.0 },\n        { 'state': 'NC', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 84.0 },\n        { 'state': 'CT', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 63.0 },\n        { 'state': 'MA', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 68.0 },\n        { 'state': 'CA', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 67.0 },\n        { 'state': 'ND', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 57.0 },\n        { 'state': 'IN', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 59.0 },\n        { 'state': 'NM', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 48.0 },\n        { 'state': 'NJ', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 84.0 },\n        { 'state': 'LA', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 87.0 },\n        { 'state': 'NE', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 89.0 },\n        { 'state': 'FL', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 94.0 },\n        { 'state': 'OK', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 57.0 },\n        { 'state': 'AZ', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 79.0 },\n        { 'state': 'RI', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 78.0 },\n        { 'state': 'NV', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 94.0 },\n        { 'state': 'HI', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 89.0 },\n        { 'state': 'IL', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 91.0 },\n        { 'state': 'PR', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 90.0 },\n        { 'state': 'WA', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 60.0 },\n        { 'state': 'CO', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 73.0 },\n        { 'state': 'SC', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 93.0 },\n        { 'state': 'TN', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 64.0 },\n        { 'state': 'MN', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 60.0 },\n        { 'state': 'NM', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 75.0 },\n        { 'state': 'LA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 80.0 },\n        { 'state': 'DE', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 57.0 },\n        { 'state': 'LA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 93.0 },\n        { 'state': 'LA', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 64.0 },\n        { 'state': 'GA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 78.0 },\n        { 'state': 'NY', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 72.0 },\n        { 'state': 'ID', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 79.0 },\n        { 'state': 'NV', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 65.0 },\n        { 'state': 'AZ', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 75.0 },\n        { 'state': 'NJ', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 69.0 },\n        { 'state': 'OH', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 81.0 },\n        { 'state': 'DE', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 76.0 },\n        { 'state': 'NC', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 70.0 },\n        { 'state': 'IA', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 80.0 },\n        { 'state': 'OH', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 59.0 },\n        { 'state': 'MN', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 78.0 },\n        { 'state': 'WV', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 60.0 },\n        { 'state': 'ID', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 88.0 },\n        { 'state': 'ND', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 75.0 },\n        { 'state': 'UT', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 93.0 },\n        { 'state': 'KS', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 80.0 },\n        { 'state': 'AR', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 90.0 },\n        { 'state': 'OR', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 60.0 },\n        { 'state': 'WA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 89.0 },\n        { 'state': 'KS', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 59.0 },\n        { 'state': 'MD', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 87.0 },\n        { 'state': 'NY', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 58.0 },\n        { 'state': 'AZ', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 63.0 },\n        { 'state': 'GA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 86.0 },\n        { 'state': 'NE', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 64.0 },\n        { 'state': 'NH', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 72.0 },\n        { 'state': 'NE', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 80.0 },\n        { 'state': 'MS', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 85.0 },\n        { 'state': 'MD', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 82.0 },\n        { 'state': 'RI', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 61.0 },\n        { 'state': 'DC', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 58.0 },\n        { 'state': 'RI', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 93.0 },\n        { 'state': 'WV', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 91.0 },\n        { 'state': 'IA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 80.0 },\n        { 'state': 'RI', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 58.0 },\n        { 'state': 'WY', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 79.0 },\n        { 'state': 'ME', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 95.0 },\n        { 'state': 'WI', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 74.0 },\n        { 'state': 'PA', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 85.0 },\n        { 'state': 'NJ', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 90.0 },\n        { 'state': 'VA', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 72.0 },\n        { 'state': 'MT', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 71.0 },\n        { 'state': 'MS', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 71.0 },\n        { 'state': 'SD', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 65.0 },\n        { 'state': 'WY', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 83.0 },\n        { 'state': 'MI', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 59.0 },\n        { 'state': 'NV', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 88.0 },\n        { 'state': 'AZ', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 88.0 },\n        { 'state': 'NE', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 73.0 },\n        { 'state': 'VA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 93.0 },\n        { 'state': 'VT', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 58.0 },\n        { 'state': 'TN', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 82.0 },\n        { 'state': 'PA', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 69.0 },\n        { 'state': 'IN', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 66.0 },\n        { 'state': 'NH', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 79.0 },\n        { 'state': 'PA', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 62.0 },\n        { 'state': 'FL', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 83.0 },\n        { 'state': 'NM', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 63.0 },\n        { 'state': 'OK', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 83.0 },\n        { 'state': 'NM', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 83.0 },\n        { 'state': 'CT', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 85.0 },\n        { 'state': 'IL', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 61.0 },\n        { 'state': 'TX', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 81.0 },\n        { 'state': 'MO', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 58.0 },\n        { 'state': 'MT', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 87.0 },\n        { 'state': 'WY', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 81.0 },\n        { 'state': 'TN', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 78.0 },\n        { 'state': 'UT', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 83.0 },\n        { 'state': 'PR', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 28.0 },\n        { 'state': 'CT', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 92.0 },\n        { 'state': 'MA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 78.0 },\n        { 'state': 'KS', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 77.0 },\n        { 'state': 'RI', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 87.0 },\n        { 'state': 'ME', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 79.0 },\n        { 'state': 'DC', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 88.0 },\n        { 'state': 'SD', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 94.0 },\n        { 'state': 'MO', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 83.0 },\n        { 'state': 'SC', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 64.0 },\n        { 'state': 'AK', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 58.0 },\n        { 'state': 'VA', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 65.0 },\n        { 'state': 'CT', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 77.0 },\n        { 'state': 'IA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 93.0 },\n        { 'state': 'WI', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 89.0 },\n        { 'state': 'WV', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 72.0 },\n        { 'state': 'AR', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 82.0 },\n        { 'state': 'MO', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 77.0 },\n        { 'state': 'DC', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 72.0 },\n        { 'state': 'KS', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 60.0 },\n        { 'state': 'TX', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 70.0 },\n        { 'state': 'IN', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 82.0 },\n        { 'state': 'OK', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 65.0 },\n        { 'state': 'MO', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 92.0 },\n        { 'state': 'FL', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 90.0 },\n        { 'state': 'MA', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 58.0 },\n        { 'state': 'NJ', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 93.0 },\n        { 'state': 'MI', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 85.0 },\n        { 'state': 'OH', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 71.0 },\n        { 'state': 'VA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 81.0 },\n        { 'state': 'NM', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 73.0 },\n        { 'state': 'AK', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 79.0 },\n        { 'state': 'MO', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 66.0 },\n        { 'state': 'FL', 'period': '2023Q2', 'measure_name': 'Septic Shock 3-Hour Bundle', 'avg_score': 73.0 },\n        { 'state': 'TN', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 59.0 },\n        { 'state': 'CT', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 57.0 },\n        { 'state': 'WA', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 79.0 },\n        { 'state': 'MD', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 91.0 },\n        { 'state': 'AR', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 64.0 },\n        { 'state': 'ID', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 59.0 },\n        { 'state': 'IL', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 3-Hour Bundle', 'avg_score': 80.0 },\n        { 'state': 'GA', 'period': '2023Q2', 'measure_name': 'Septic Shock 6-Hour Bundle', 'avg_score': 83.0 },\n        { 'state': 'AK', 'period': '2023Q2', 'measure_name': 'Severe Sepsis 6-Hour Bundle', 'avg_score': 89.0 },\n        { 'state': 'MN', 'period': '2023Q2', 'measure_name': 'Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'avg_score': 57.0 },\n        ],\n        fields: [makeField('state'), makeField('period'), makeField('measure_name'), makeField('avg_score')],\n        metadata: {\n            'state': { type: Type.String, semanticType: 'State', levels: ['AK', 'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'GA', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'PR', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VT', 'WA', 'WI'] },\n            'period': { type: Type.String, semanticType: 'YearQuarter', levels: ['2023Q2'] },\n            'measure_name': { type: Type.String, semanticType: 'Category', levels: ['Percentage of patients who received appropriate care for severe sepsis and septic shock. Higher percentages are better', 'Septic Shock 3-Hour Bundle', 'Septic Shock 6-Hour Bundle', 'Severe Sepsis 3-Hour Bundle', 'Severe Sepsis 6-Hour Bundle'] },\n            'avg_score': { type: Type.Number, semanticType: 'Number', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('period'),\n            y: makeEncodingItem('avg_score'),\n            color: makeEncodingItem('measure_name'),\n            column: makeEncodingItem('state'),\n        },\n        chartProperties: { interpolate: \"monotone\" },\n    };\n}\n\nfunction gen_colorRanksQ1RecGpt41(): TestCase {\n    // How are color popularity ranks distributed across the full range from 1 to 949?\n    // Score: 5/20 | The chart is misleading and unclear: it visually suggests a uniform count across nearly 950 ranks de\n    return {\n        title: 'color_ranks_q1_rec-gpt-4.1',\n        description: 'Visualize count of colors at each **rank**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'rank': 655, 'count': 1 },\n        { 'rank': 115, 'count': 1 },\n        { 'rank': 26, 'count': 1 },\n        { 'rank': 760, 'count': 1 },\n        { 'rank': 282, 'count': 1 },\n        { 'rank': 251, 'count': 1 },\n        { 'rank': 229, 'count': 1 },\n        { 'rank': 143, 'count': 1 },\n        { 'rank': 755, 'count': 1 },\n        { 'rank': 105, 'count': 1 },\n        { 'rank': 693, 'count': 1 },\n        { 'rank': 759, 'count': 1 },\n        { 'rank': 914, 'count': 1 },\n        { 'rank': 559, 'count': 1 },\n        { 'rank': 90, 'count': 1 },\n        { 'rank': 605, 'count': 1 },\n        { 'rank': 433, 'count': 1 },\n        { 'rank': 33, 'count': 1 },\n        { 'rank': 31, 'count': 1 },\n        { 'rank': 96, 'count': 1 },\n        { 'rank': 224, 'count': 1 },\n        { 'rank': 239, 'count': 1 },\n        { 'rank': 518, 'count': 1 },\n        { 'rank': 617, 'count': 1 },\n        { 'rank': 28, 'count': 1 },\n        { 'rank': 575, 'count': 1 },\n        { 'rank': 204, 'count': 1 },\n        { 'rank': 734, 'count': 1 },\n        { 'rank': 666, 'count': 1 },\n        { 'rank': 719, 'count': 1 },\n        { 'rank': 936, 'count': 1 },\n        { 'rank': 430, 'count': 1 },\n        { 'rank': 226, 'count': 1 },\n        { 'rank': 460, 'count': 1 },\n        { 'rank': 604, 'count': 1 },\n        { 'rank': 285, 'count': 1 },\n        { 'rank': 829, 'count': 1 },\n        { 'rank': 891, 'count': 1 },\n        { 'rank': 7, 'count': 1 },\n        { 'rank': 778, 'count': 1 },\n        { 'rank': 826, 'count': 1 },\n        { 'rank': 164, 'count': 1 },\n        { 'rank': 715, 'count': 1 },\n        { 'rank': 933, 'count': 1 },\n        { 'rank': 349, 'count': 1 },\n        { 'rank': 937, 'count': 1 },\n        { 'rank': 160, 'count': 1 },\n        { 'rank': 221, 'count': 1 },\n        { 'rank': 782, 'count': 1 },\n        { 'rank': 345, 'count': 1 },\n        { 'rank': 940, 'count': 1 },\n        { 'rank': 95, 'count': 1 },\n        { 'rank': 390, 'count': 1 },\n        { 'rank': 100, 'count': 1 },\n        { 'rank': 368, 'count': 1 },\n        { 'rank': 868, 'count': 1 },\n        { 'rank': 353, 'count': 1 },\n        { 'rank': 619, 'count': 1 },\n        { 'rank': 271, 'count': 1 },\n        { 'rank': 827, 'count': 1 },\n        { 'rank': 45, 'count': 1 },\n        { 'rank': 748, 'count': 1 },\n        { 'rank': 471, 'count': 1 },\n        { 'rank': 550, 'count': 1 },\n        { 'rank': 128, 'count': 1 },\n        { 'rank': 388, 'count': 1 },\n        { 'rank': 81, 'count': 1 },\n        { 'rank': 566, 'count': 1 },\n        { 'rank': 301, 'count': 1 },\n        { 'rank': 850, 'count': 1 },\n        { 'rank': 644, 'count': 1 },\n        { 'rank': 634, 'count': 1 },\n        { 'rank': 371, 'count': 1 },\n        { 'rank': 592, 'count': 1 },\n        { 'rank': 197, 'count': 1 },\n        { 'rank': 722, 'count': 1 },\n        { 'rank': 72, 'count': 1 },\n        { 'rank': 47, 'count': 1 },\n        { 'rank': 678, 'count': 1 },\n        { 'rank': 234, 'count': 1 },\n        { 'rank': 792, 'count': 1 },\n        { 'rank': 297, 'count': 1 },\n        { 'rank': 82, 'count': 1 },\n        { 'rank': 928, 'count': 1 },\n        { 'rank': 104, 'count': 1 },\n        { 'rank': 897, 'count': 1 },\n        { 'rank': 904, 'count': 1 },\n        { 'rank': 465, 'count': 1 },\n        { 'rank': 651, 'count': 1 },\n        { 'rank': 855, 'count': 1 },\n        { 'rank': 374, 'count': 1 },\n        { 'rank': 167, 'count': 1 },\n        { 'rank': 380, 'count': 1 },\n        { 'rank': 364, 'count': 1 },\n        { 'rank': 215, 'count': 1 },\n        { 'rank': 687, 'count': 1 },\n        { 'rank': 274, 'count': 1 },\n        { 'rank': 920, 'count': 1 },\n        { 'rank': 700, 'count': 1 },\n        { 'rank': 664, 'count': 1 },\n        { 'rank': 74, 'count': 1 },\n        { 'rank': 624, 'count': 1 },\n        { 'rank': 861, 'count': 1 },\n        { 'rank': 176, 'count': 1 },\n        { 'rank': 547, 'count': 1 },\n        { 'rank': 747, 'count': 1 },\n        { 'rank': 944, 'count': 1 },\n        { 'rank': 168, 'count': 1 },\n        { 'rank': 474, 'count': 1 },\n        { 'rank': 389, 'count': 1 },\n        { 'rank': 277, 'count': 1 },\n        { 'rank': 656, 'count': 1 },\n        { 'rank': 705, 'count': 1 },\n        { 'rank': 571, 'count': 1 },\n        { 'rank': 225, 'count': 1 },\n        { 'rank': 702, 'count': 1 },\n        { 'rank': 333, 'count': 1 },\n        { 'rank': 787, 'count': 1 },\n        { 'rank': 795, 'count': 1 },\n        { 'rank': 58, 'count': 1 },\n        { 'rank': 235, 'count': 1 },\n        { 'rank': 932, 'count': 1 },\n        { 'rank': 825, 'count': 1 },\n        { 'rank': 324, 'count': 1 },\n        { 'rank': 411, 'count': 1 },\n        { 'rank': 275, 'count': 1 },\n        { 'rank': 68, 'count': 1 },\n        { 'rank': 217, 'count': 1 },\n        { 'rank': 581, 'count': 1 },\n        { 'rank': 736, 'count': 1 },\n        { 'rank': 323, 'count': 1 },\n        { 'rank': 218, 'count': 1 },\n        { 'rank': 672, 'count': 1 },\n        { 'rank': 512, 'count': 1 },\n        { 'rank': 406, 'count': 1 },\n        { 'rank': 659, 'count': 1 },\n        { 'rank': 470, 'count': 1 },\n        { 'rank': 147, 'count': 1 },\n        { 'rank': 272, 'count': 1 },\n        { 'rank': 942, 'count': 1 },\n        { 'rank': 253, 'count': 1 },\n        { 'rank': 763, 'count': 1 },\n        { 'rank': 924, 'count': 1 },\n        { 'rank': 552, 'count': 1 },\n        { 'rank': 270, 'count': 1 },\n        { 'rank': 765, 'count': 1 },\n        { 'rank': 599, 'count': 1 },\n        { 'rank': 439, 'count': 1 },\n        { 'rank': 598, 'count': 1 },\n        { 'rank': 409, 'count': 1 },\n        { 'rank': 877, 'count': 1 },\n        { 'rank': 835, 'count': 1 },\n        { 'rank': 142, 'count': 1 },\n        { 'rank': 522, 'count': 1 },\n        { 'rank': 506, 'count': 1 },\n        { 'rank': 94, 'count': 1 },\n        { 'rank': 774, 'count': 1 },\n        { 'rank': 49, 'count': 1 },\n        { 'rank': 113, 'count': 1 },\n        { 'rank': 157, 'count': 1 },\n        { 'rank': 643, 'count': 1 },\n        { 'rank': 908, 'count': 1 },\n        { 'rank': 697, 'count': 1 },\n        { 'rank': 906, 'count': 1 },\n        { 'rank': 611, 'count': 1 },\n        { 'rank': 66, 'count': 1 },\n        { 'rank': 395, 'count': 1 },\n        { 'rank': 391, 'count': 1 },\n        { 'rank': 785, 'count': 1 },\n        { 'rank': 480, 'count': 1 },\n        { 'rank': 542, 'count': 1 },\n        { 'rank': 258, 'count': 1 },\n        { 'rank': 567, 'count': 1 },\n        { 'rank': 12, 'count': 1 },\n        { 'rank': 832, 'count': 1 },\n        { 'rank': 739, 'count': 1 },\n        { 'rank': 118, 'count': 1 },\n        { 'rank': 699, 'count': 1 },\n        { 'rank': 886, 'count': 1 },\n        { 'rank': 769, 'count': 1 },\n        { 'rank': 853, 'count': 1 },\n        { 'rank': 657, 'count': 1 },\n        { 'rank': 905, 'count': 1 },\n        { 'rank': 948, 'count': 1 },\n        { 'rank': 881, 'count': 1 },\n        { 'rank': 446, 'count': 1 },\n        { 'rank': 162, 'count': 1 },\n        { 'rank': 862, 'count': 1 },\n        { 'rank': 4, 'count': 1 },\n        { 'rank': 740, 'count': 1 },\n        { 'rank': 737, 'count': 1 },\n        { 'rank': 805, 'count': 1 },\n        { 'rank': 513, 'count': 1 },\n        { 'rank': 183, 'count': 1 },\n        { 'rank': 520, 'count': 1 },\n        { 'rank': 109, 'count': 1 },\n        { 'rank': 641, 'count': 1 },\n        { 'rank': 306, 'count': 1 },\n        { 'rank': 949, 'count': 1 },\n        { 'rank': 941, 'count': 1 },\n        ],\n        fields: [makeField('rank'), makeField('count')],\n        metadata: {\n            'rank': { type: Type.Number, semanticType: 'Rank', levels: [] },\n            'count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('rank'),\n            y: makeEncodingItem('count'),\n        },\n        chartProperties: { cornerRadius: 3 },\n    };\n}\n\nfunction gen_colorRanksQ5RecGpt41(): TestCase {\n    // Across the full rank spectrum, how do the red, green, and blue channel intensities (from the hex codes) trend as rank go\n    // Score: 6/20 | While the chart technically plots rank versus RGB intensities, major axis and overplotting issues ma\n    return {\n        title: 'color_ranks_q5_rec-gpt-4.1',\n        description: 'Plot rank vs R, G, B intensity from hex codes',\n        tags: ['debug', 'line-chart'],\n        chartType: 'Line Chart',\n        data: [\n        { 'rank': 722, 'channel': 'B', 'intensity': 89 },\n        { 'rank': 457, 'channel': 'R', 'intensity': 136 },\n        { 'rank': 103, 'channel': 'R', 'intensity': 237 },\n        { 'rank': 178, 'channel': 'G', 'intensity': 86 },\n        { 'rank': 55, 'channel': 'G', 'intensity': 155 },\n        { 'rank': 915, 'channel': 'R', 'intensity': 194 },\n        { 'rank': 572, 'channel': 'R', 'intensity': 80 },\n        { 'rank': 420, 'channel': 'R', 'intensity': 152 },\n        { 'rank': 874, 'channel': 'B', 'intensity': 34 },\n        { 'rank': 336, 'channel': 'B', 'intensity': 17 },\n        { 'rank': 357, 'channel': 'R', 'intensity': 102 },\n        { 'rank': 521, 'channel': 'B', 'intensity': 5 },\n        { 'rank': 780, 'channel': 'G', 'intensity': 5 },\n        { 'rank': 131, 'channel': 'R', 'intensity': 2 },\n        { 'rank': 123, 'channel': 'R', 'intensity': 127 },\n        { 'rank': 384, 'channel': 'R', 'intensity': 254 },\n        { 'rank': 896, 'channel': 'R', 'intensity': 173 },\n        { 'rank': 4, 'channel': 'G', 'intensity': 129 },\n        { 'rank': 172, 'channel': 'B', 'intensity': 98 },\n        { 'rank': 568, 'channel': 'B', 'intensity': 167 },\n        { 'rank': 109, 'channel': 'R', 'intensity': 214 },\n        { 'rank': 401, 'channel': 'B', 'intensity': 76 },\n        { 'rank': 815, 'channel': 'R', 'intensity': 157 },\n        { 'rank': 764, 'channel': 'B', 'intensity': 142 },\n        { 'rank': 335, 'channel': 'B', 'intensity': 8 },\n        { 'rank': 770, 'channel': 'G', 'intensity': 157 },\n        { 'rank': 903, 'channel': 'R', 'intensity': 255 },\n        { 'rank': 891, 'channel': 'G', 'intensity': 70 },\n        { 'rank': 516, 'channel': 'B', 'intensity': 103 },\n        { 'rank': 191, 'channel': 'G', 'intensity': 46 },\n        { 'rank': 27, 'channel': 'R', 'intensity': 53 },\n        { 'rank': 654, 'channel': 'R', 'intensity': 173 },\n        { 'rank': 783, 'channel': 'G', 'intensity': 2 },\n        { 'rank': 445, 'channel': 'G', 'intensity': 255 },\n        { 'rank': 190, 'channel': 'G', 'intensity': 97 },\n        { 'rank': 637, 'channel': 'R', 'intensity': 187 },\n        { 'rank': 882, 'channel': 'R', 'intensity': 208 },\n        { 'rank': 430, 'channel': 'G', 'intensity': 247 },\n        { 'rank': 419, 'channel': 'R', 'intensity': 138 },\n        { 'rank': 380, 'channel': 'R', 'intensity': 178 },\n        { 'rank': 608, 'channel': 'G', 'intensity': 152 },\n        { 'rank': 397, 'channel': 'R', 'intensity': 152 },\n        { 'rank': 522, 'channel': 'G', 'intensity': 248 },\n        { 'rank': 460, 'channel': 'G', 'intensity': 254 },\n        { 'rank': 575, 'channel': 'B', 'intensity': 122 },\n        { 'rank': 135, 'channel': 'G', 'intensity': 253 },\n        { 'rank': 178, 'channel': 'R', 'intensity': 169 },\n        { 'rank': 933, 'channel': 'G', 'intensity': 155 },\n        { 'rank': 299, 'channel': 'B', 'intensity': 204 },\n        { 'rank': 512, 'channel': 'R', 'intensity': 151 },\n        { 'rank': 602, 'channel': 'G', 'intensity': 183 },\n        { 'rank': 323, 'channel': 'R', 'intensity': 252 },\n        { 'rank': 364, 'channel': 'B', 'intensity': 16 },\n        { 'rank': 252, 'channel': 'G', 'intensity': 76 },\n        { 'rank': 677, 'channel': 'B', 'intensity': 204 },\n        { 'rank': 636, 'channel': 'B', 'intensity': 4 },\n        { 'rank': 533, 'channel': 'G', 'intensity': 155 },\n        { 'rank': 467, 'channel': 'B', 'intensity': 129 },\n        { 'rank': 788, 'channel': 'R', 'intensity': 143 },\n        { 'rank': 285, 'channel': 'R', 'intensity': 194 },\n        { 'rank': 188, 'channel': 'R', 'intensity': 10 },\n        { 'rank': 811, 'channel': 'B', 'intensity': 88 },\n        { 'rank': 934, 'channel': 'R', 'intensity': 239 },\n        { 'rank': 237, 'channel': 'G', 'intensity': 178 },\n        { 'rank': 327, 'channel': 'R', 'intensity': 126 },\n        { 'rank': 5, 'channel': 'G', 'intensity': 55 },\n        { 'rank': 414, 'channel': 'R', 'intensity': 247 },\n        { 'rank': 909, 'channel': 'G', 'intensity': 63 },\n        { 'rank': 706, 'channel': 'B', 'intensity': 52 },\n        { 'rank': 546, 'channel': 'G', 'intensity': 156 },\n        { 'rank': 667, 'channel': 'R', 'intensity': 245 },\n        { 'rank': 568, 'channel': 'G', 'intensity': 127 },\n        { 'rank': 507, 'channel': 'G', 'intensity': 111 },\n        { 'rank': 859, 'channel': 'R', 'intensity': 44 },\n        { 'rank': 848, 'channel': 'B', 'intensity': 78 },\n        { 'rank': 145, 'channel': 'G', 'intensity': 41 },\n        { 'rank': 902, 'channel': 'B', 'intensity': 163 },\n        { 'rank': 757, 'channel': 'B', 'intensity': 251 },\n        { 'rank': 293, 'channel': 'R', 'intensity': 1 },\n        { 'rank': 598, 'channel': 'B', 'intensity': 8 },\n        { 'rank': 703, 'channel': 'B', 'intensity': 230 },\n        { 'rank': 701, 'channel': 'R', 'intensity': 139 },\n        { 'rank': 290, 'channel': 'B', 'intensity': 1 },\n        { 'rank': 54, 'channel': 'G', 'intensity': 21 },\n        { 'rank': 670, 'channel': 'R', 'intensity': 51 },\n        { 'rank': 945, 'channel': 'G', 'intensity': 216 },\n        { 'rank': 606, 'channel': 'G', 'intensity': 79 },\n        { 'rank': 157, 'channel': 'G', 'intensity': 118 },\n        { 'rank': 724, 'channel': 'B', 'intensity': 138 },\n        { 'rank': 921, 'channel': 'B', 'intensity': 137 },\n        { 'rank': 384, 'channel': 'B', 'intensity': 8 },\n        { 'rank': 900, 'channel': 'R', 'intensity': 255 },\n        { 'rank': 907, 'channel': 'B', 'intensity': 165 },\n        { 'rank': 380, 'channel': 'G', 'intensity': 122 },\n        { 'rank': 230, 'channel': 'R', 'intensity': 156 },\n        { 'rank': 939, 'channel': 'R', 'intensity': 252 },\n        { 'rank': 132, 'channel': 'R', 'intensity': 214 },\n        { 'rank': 344, 'channel': 'G', 'intensity': 220 },\n        { 'rank': 695, 'channel': 'G', 'intensity': 47 },\n        { 'rank': 148, 'channel': 'G', 'intensity': 255 },\n        { 'rank': 272, 'channel': 'R', 'intensity': 33 },\n        { 'rank': 865, 'channel': 'R', 'intensity': 182 },\n        { 'rank': 426, 'channel': 'B', 'intensity': 4 },\n        { 'rank': 340, 'channel': 'G', 'intensity': 122 },\n        { 'rank': 871, 'channel': 'R', 'intensity': 253 },\n        { 'rank': 787, 'channel': 'B', 'intensity': 162 },\n        { 'rank': 147, 'channel': 'B', 'intensity': 255 },\n        { 'rank': 672, 'channel': 'G', 'intensity': 255 },\n        { 'rank': 736, 'channel': 'B', 'intensity': 49 },\n        { 'rank': 931, 'channel': 'G', 'intensity': 6 },\n        { 'rank': 586, 'channel': 'R', 'intensity': 36 },\n        { 'rank': 136, 'channel': 'G', 'intensity': 221 },\n        { 'rank': 62, 'channel': 'G', 'intensity': 255 },\n        { 'rank': 402, 'channel': 'B', 'intensity': 43 },\n        { 'rank': 310, 'channel': 'B', 'intensity': 254 },\n        { 'rank': 128, 'channel': 'G', 'intensity': 0 },\n        { 'rank': 497, 'channel': 'B', 'intensity': 127 },\n        { 'rank': 806, 'channel': 'G', 'intensity': 0 },\n        { 'rank': 493, 'channel': 'B', 'intensity': 57 },\n        { 'rank': 687, 'channel': 'G', 'intensity': 71 },\n        { 'rank': 534, 'channel': 'G', 'intensity': 78 },\n        { 'rank': 899, 'channel': 'R', 'intensity': 67 },\n        { 'rank': 567, 'channel': 'R', 'intensity': 239 },\n        { 'rank': 190, 'channel': 'B', 'intensity': 18 },\n        { 'rank': 124, 'channel': 'B', 'intensity': 194 },\n        { 'rank': 373, 'channel': 'R', 'intensity': 111 },\n        { 'rank': 193, 'channel': 'R', 'intensity': 255 },\n        { 'rank': 450, 'channel': 'R', 'intensity': 127 },\n        { 'rank': 627, 'channel': 'R', 'intensity': 1 },\n        { 'rank': 673, 'channel': 'B', 'intensity': 2 },\n        { 'rank': 656, 'channel': 'R', 'intensity': 41 },\n        { 'rank': 890, 'channel': 'B', 'intensity': 0 },\n        { 'rank': 781, 'channel': 'G', 'intensity': 229 },\n        { 'rank': 545, 'channel': 'B', 'intensity': 101 },\n        { 'rank': 261, 'channel': 'R', 'intensity': 183 },\n        { 'rank': 628, 'channel': 'G', 'intensity': 229 },\n        { 'rank': 615, 'channel': 'G', 'intensity': 255 },\n        { 'rank': 543, 'channel': 'B', 'intensity': 254 },\n        { 'rank': 20, 'channel': 'B', 'intensity': 239 },\n        { 'rank': 270, 'channel': 'B', 'intensity': 21 },\n        { 'rank': 81, 'channel': 'G', 'intensity': 255 },\n        { 'rank': 369, 'channel': 'B', 'intensity': 109 },\n        { 'rank': 48, 'channel': 'R', 'intensity': 255 },\n        { 'rank': 889, 'channel': 'B', 'intensity': 121 },\n        { 'rank': 470, 'channel': 'R', 'intensity': 254 },\n        { 'rank': 895, 'channel': 'B', 'intensity': 253 },\n        { 'rank': 302, 'channel': 'B', 'intensity': 3 },\n        { 'rank': 144, 'channel': 'G', 'intensity': 154 },\n        { 'rank': 728, 'channel': 'B', 'intensity': 5 },\n        { 'rank': 254, 'channel': 'G', 'intensity': 255 },\n        { 'rank': 832, 'channel': 'G', 'intensity': 159 },\n        { 'rank': 648, 'channel': 'R', 'intensity': 148 },\n        { 'rank': 910, 'channel': 'G', 'intensity': 126 },\n        { 'rank': 14, 'channel': 'R', 'intensity': 146 },\n        { 'rank': 130, 'channel': 'G', 'intensity': 59 },\n        { 'rank': 153, 'channel': 'B', 'intensity': 204 },\n        { 'rank': 732, 'channel': 'R', 'intensity': 65 },\n        { 'rank': 182, 'channel': 'B', 'intensity': 125 },\n        { 'rank': 436, 'channel': 'R', 'intensity': 118 },\n        { 'rank': 664, 'channel': 'B', 'intensity': 23 },\n        { 'rank': 274, 'channel': 'G', 'intensity': 101 },\n        { 'rank': 720, 'channel': 'B', 'intensity': 9 },\n        { 'rank': 597, 'channel': 'B', 'intensity': 16 },\n        { 'rank': 583, 'channel': 'G', 'intensity': 114 },\n        { 'rank': 662, 'channel': 'R', 'intensity': 1 },\n        { 'rank': 312, 'channel': 'B', 'intensity': 133 },\n        { 'rank': 275, 'channel': 'B', 'intensity': 111 },\n        { 'rank': 3, 'channel': 'R', 'intensity': 3 },\n        { 'rank': 556, 'channel': 'B', 'intensity': 2 },\n        { 'rank': 379, 'channel': 'G', 'intensity': 254 },\n        { 'rank': 104, 'channel': 'B', 'intensity': 8 },\n        { 'rank': 80, 'channel': 'R', 'intensity': 159 },\n        { 'rank': 459, 'channel': 'R', 'intensity': 190 },\n        { 'rank': 538, 'channel': 'G', 'intensity': 191 },\n        { 'rank': 311, 'channel': 'G', 'intensity': 254 },\n        { 'rank': 32, 'channel': 'G', 'intensity': 218 },\n        { 'rank': 238, 'channel': 'R', 'intensity': 213 },\n        { 'rank': 38, 'channel': 'G', 'intensity': 129 },\n        { 'rank': 351, 'channel': 'R', 'intensity': 158 },\n        { 'rank': 93, 'channel': 'B', 'intensity': 193 },\n        { 'rank': 284, 'channel': 'R', 'intensity': 116 },\n        { 'rank': 284, 'channel': 'B', 'intensity': 151 },\n        { 'rank': 516, 'channel': 'R', 'intensity': 83 },\n        { 'rank': 526, 'channel': 'R', 'intensity': 255 },\n        { 'rank': 805, 'channel': 'B', 'intensity': 111 },\n        { 'rank': 49, 'channel': 'B', 'intensity': 117 },\n        { 'rank': 354, 'channel': 'B', 'intensity': 23 },\n        { 'rank': 677, 'channel': 'R', 'intensity': 14 },\n        { 'rank': 137, 'channel': 'G', 'intensity': 30 },\n        { 'rank': 264, 'channel': 'B', 'intensity': 67 },\n        { 'rank': 587, 'channel': 'B', 'intensity': 231 },\n        { 'rank': 785, 'channel': 'G', 'intensity': 1 },\n        { 'rank': 868, 'channel': 'R', 'intensity': 133 },\n        { 'rank': 311, 'channel': 'B', 'intensity': 9 },\n        { 'rank': 928, 'channel': 'B', 'intensity': 199 },\n        { 'rank': 824, 'channel': 'R', 'intensity': 255 },\n        { 'rank': 328, 'channel': 'G', 'intensity': 238 },\n        { 'rank': 686, 'channel': 'G', 'intensity': 72 },\n        { 'rank': 854, 'channel': 'B', 'intensity': 73 },\n        { 'rank': 581, 'channel': 'G', 'intensity': 111 },\n        ],\n        fields: [makeField('rank'), makeField('channel'), makeField('intensity')],\n        metadata: {\n            'rank': { type: Type.Number, semanticType: 'Rank', levels: [] },\n            'channel': { type: Type.String, semanticType: 'Type', levels: ['B', 'G', 'R'] },\n            'intensity': { type: Type.Number, semanticType: 'Number', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('rank'),\n            y: makeEncodingItem('intensity'),\n            color: makeEncodingItem('channel'),\n        },\n        chartProperties: { interpolate: \"linear\" },\n    };\n}\n\nfunction gen_colorRanksQ5RecGpt51(): TestCase {\n    // Across the full rank spectrum, how do the red, green, and blue channel intensities (from the hex codes) trend as rank go\n    // Score: 8/20 | The visualization uses the correct variables (RGB intensities vs. rank) but contains axis/data incon\n    return {\n        title: 'color_ranks_q5_rec-gpt-5.1',\n        description: 'Analyze how **red**, **green**, **blue** intensities change over **rank**',\n        tags: ['debug', 'line-chart'],\n        chartType: 'Line Chart',\n        data: [\n        { 'rank': 722, 'color': 'dark sand', 'hex': '#a88f59', 'channel': 'blue', 'intensity': 89 },\n        { 'rank': 457, 'color': 'poo brown', 'hex': '#885f01', 'channel': 'red', 'intensity': 136 },\n        { 'rank': 103, 'color': 'fuchsia', 'hex': '#ed0dd9', 'channel': 'red', 'intensity': 237 },\n        { 'rank': 178, 'color': 'sienna', 'hex': '#a9561e', 'channel': 'green', 'intensity': 86 },\n        { 'rank': 55, 'color': 'grass green', 'hex': '#3f9b0b', 'channel': 'green', 'intensity': 155 },\n        { 'rank': 915, 'color': 'olive yellow', 'hex': '#c2b709', 'channel': 'red', 'intensity': 194 },\n        { 'rank': 572, 'color': 'mid green', 'hex': '#50a747', 'channel': 'red', 'intensity': 80 },\n        { 'rank': 420, 'color': 'light sea green', 'hex': '#98f6b0', 'channel': 'red', 'intensity': 152 },\n        { 'rank': 874, 'color': 'sun yellow', 'hex': '#ffdf22', 'channel': 'blue', 'intensity': 34 },\n        { 'rank': 336, 'color': 'brown green', 'hex': '#706c11', 'channel': 'blue', 'intensity': 17 },\n        { 'rank': 357, 'color': 'military green', 'hex': '#667c3e', 'channel': 'red', 'intensity': 102 },\n        { 'rank': 521, 'color': 'orangish red', 'hex': '#f43605', 'channel': 'blue', 'intensity': 5 },\n        { 'rank': 780, 'color': 'plum purple', 'hex': '#4e0550', 'channel': 'green', 'intensity': 5 },\n        { 'rank': 131, 'color': 'midnight blue', 'hex': '#020035', 'channel': 'red', 'intensity': 2 },\n        { 'rank': 123, 'color': 'reddish brown', 'hex': '#7f2b0a', 'channel': 'red', 'intensity': 127 },\n        { 'rank': 384, 'color': 'amber', 'hex': '#feb308', 'channel': 'red', 'intensity': 254 },\n        { 'rank': 896, 'color': 'baby shit brown', 'hex': '#ad900d', 'channel': 'red', 'intensity': 173 },\n        { 'rank': 4, 'color': 'pink', 'hex': '#ff81c0', 'channel': 'green', 'intensity': 129 },\n        { 'rank': 172, 'color': 'deep pink', 'hex': '#cb0162', 'channel': 'blue', 'intensity': 98 },\n        { 'rank': 568, 'color': 'carnation pink', 'hex': '#ff7fa7', 'channel': 'blue', 'intensity': 167 },\n        { 'rank': 109, 'color': 'pinkish purple', 'hex': '#d648d7', 'channel': 'red', 'intensity': 214 },\n        { 'rank': 401, 'color': 'coffee', 'hex': '#a6814c', 'channel': 'blue', 'intensity': 76 },\n        { 'rank': 815, 'color': 'dark fuchsia', 'hex': '#9d0759', 'channel': 'red', 'intensity': 157 },\n        { 'rank': 764, 'color': 'metallic blue', 'hex': '#4f738e', 'channel': 'blue', 'intensity': 142 },\n        { 'rank': 335, 'color': 'dark maroon', 'hex': '#3c0008', 'channel': 'blue', 'intensity': 8 },\n        { 'rank': 770, 'color': 'flat green', 'hex': '#699d4c', 'channel': 'green', 'intensity': 157 },\n        { 'rank': 903, 'color': 'orange pink', 'hex': '#ff6f52', 'channel': 'red', 'intensity': 255 },\n        { 'rank': 891, 'color': 'darkish pink', 'hex': '#da467d', 'channel': 'green', 'intensity': 70 },\n        { 'rank': 516, 'color': 'gunmetal', 'hex': '#536267', 'channel': 'blue', 'intensity': 103 },\n        { 'rank': 191, 'color': 'red brown', 'hex': '#8b2e16', 'channel': 'green', 'intensity': 46 },\n        { 'rank': 27, 'color': 'dark purple', 'hex': '#35063e', 'channel': 'red', 'intensity': 53 },\n        { 'rank': 654, 'color': 'lemon green', 'hex': '#adf802', 'channel': 'red', 'intensity': 173 },\n        { 'rank': 783, 'color': 'carmine', 'hex': '#9d0216', 'channel': 'green', 'intensity': 2 },\n        { 'rank': 445, 'color': 'ivory', 'hex': '#ffffcb', 'channel': 'green', 'intensity': 255 },\n        { 'rank': 190, 'color': 'greenish brown', 'hex': '#696112', 'channel': 'green', 'intensity': 97 },\n        { 'rank': 637, 'color': 'yellowgreen', 'hex': '#bbf90f', 'channel': 'red', 'intensity': 187 },\n        { 'rank': 882, 'color': 'sickly yellow', 'hex': '#d0e429', 'channel': 'red', 'intensity': 208 },\n        { 'rank': 430, 'color': 'bright light blue', 'hex': '#26f7fd', 'channel': 'green', 'intensity': 247 },\n        { 'rank': 419, 'color': 'robin egg blue', 'hex': '#8af1fe', 'channel': 'red', 'intensity': 138 },\n        { 'rank': 380, 'color': 'golden brown', 'hex': '#b27a01', 'channel': 'red', 'intensity': 178 },\n        { 'rank': 608, 'color': 'baby poop green', 'hex': '#8f9805', 'channel': 'green', 'intensity': 152 },\n        { 'rank': 397, 'color': 'purpleish', 'hex': '#98568d', 'channel': 'red', 'intensity': 152 },\n        { 'rank': 522, 'color': 'greeny yellow', 'hex': '#c6f808', 'channel': 'green', 'intensity': 248 },\n        { 'rank': 460, 'color': 'bright lime green', 'hex': '#65fe08', 'channel': 'green', 'intensity': 254 },\n        { 'rank': 575, 'color': 'sandy', 'hex': '#f1da7a', 'channel': 'blue', 'intensity': 122 },\n        { 'rank': 135, 'color': 'greenish yellow', 'hex': '#cdfd02', 'channel': 'green', 'intensity': 253 },\n        { 'rank': 178, 'color': 'sienna', 'hex': '#a9561e', 'channel': 'red', 'intensity': 169 },\n        { 'rank': 933, 'color': 'pinkish tan', 'hex': '#d99b82', 'channel': 'green', 'intensity': 155 },\n        { 'rank': 299, 'color': 'true blue', 'hex': '#010fcc', 'channel': 'blue', 'intensity': 204 },\n        { 'rank': 512, 'color': 'warm grey', 'hex': '#978a84', 'channel': 'red', 'intensity': 151 },\n        { 'rank': 602, 'color': 'leafy green', 'hex': '#51b73b', 'channel': 'green', 'intensity': 183 },\n        { 'rank': 323, 'color': 'marigold', 'hex': '#fcc006', 'channel': 'red', 'intensity': 252 },\n        { 'rank': 364, 'color': 'dark gold', 'hex': '#b59410', 'channel': 'blue', 'intensity': 16 },\n        { 'rank': 252, 'color': 'dark mauve', 'hex': '#874c62', 'channel': 'green', 'intensity': 76 },\n        { 'rank': 677, 'color': 'water blue', 'hex': '#0e87cc', 'channel': 'blue', 'intensity': 204 },\n        { 'rank': 636, 'color': 'baby poo', 'hex': '#ab9004', 'channel': 'blue', 'intensity': 4 },\n        { 'rank': 533, 'color': 'ocher', 'hex': '#bf9b0c', 'channel': 'green', 'intensity': 155 },\n        { 'rank': 467, 'color': 'pale olive', 'hex': '#b9cc81', 'channel': 'blue', 'intensity': 129 },\n        { 'rank': 788, 'color': 'icky green', 'hex': '#8fae22', 'channel': 'red', 'intensity': 143 },\n        { 'rank': 285, 'color': 'puke yellow', 'hex': '#c2be0e', 'channel': 'red', 'intensity': 194 },\n        { 'rank': 188, 'color': 'pine green', 'hex': '#0a481e', 'channel': 'red', 'intensity': 10 },\n        { 'rank': 811, 'color': 'rich purple', 'hex': '#720058', 'channel': 'blue', 'intensity': 88 },\n        { 'rank': 934, 'color': 'macaroni and cheese', 'hex': '#efb435', 'channel': 'red', 'intensity': 239 },\n        { 'rank': 237, 'color': 'faded green', 'hex': '#7bb274', 'channel': 'green', 'intensity': 178 },\n        { 'rank': 327, 'color': 'light blue green', 'hex': '#7efbb3', 'channel': 'red', 'intensity': 126 },\n        { 'rank': 5, 'color': 'brown', 'hex': '#653700', 'channel': 'green', 'intensity': 55 },\n        { 'rank': 414, 'color': 'cherry red', 'hex': '#f7022a', 'channel': 'red', 'intensity': 247 },\n        { 'rank': 909, 'color': 'purply', 'hex': '#983fb2', 'channel': 'green', 'intensity': 63 },\n        { 'rank': 706, 'color': 'leaf', 'hex': '#71aa34', 'channel': 'blue', 'intensity': 52 },\n        { 'rank': 546, 'color': 'grassy green', 'hex': '#419c03', 'channel': 'green', 'intensity': 156 },\n        { 'rank': 667, 'color': 'hot magenta', 'hex': '#f504c9', 'channel': 'red', 'intensity': 245 },\n        { 'rank': 568, 'color': 'carnation pink', 'hex': '#ff7fa7', 'channel': 'green', 'intensity': 127 },\n        { 'rank': 507, 'color': 'soft purple', 'hex': '#a66fb5', 'channel': 'green', 'intensity': 111 },\n        { 'rank': 859, 'color': 'radioactive green', 'hex': '#2cfa1f', 'channel': 'red', 'intensity': 44 },\n        { 'rank': 848, 'color': 'camo', 'hex': '#7f8f4e', 'channel': 'blue', 'intensity': 78 },\n        { 'rank': 145, 'color': 'blue purple', 'hex': '#5729ce', 'channel': 'green', 'intensity': 41 },\n        { 'rank': 902, 'color': 'tea green', 'hex': '#bdf8a3', 'channel': 'blue', 'intensity': 163 },\n        { 'rank': 757, 'color': 'light light blue', 'hex': '#cafffb', 'channel': 'blue', 'intensity': 251 },\n        { 'rank': 293, 'color': 'bluegreen', 'hex': '#017a79', 'channel': 'red', 'intensity': 1 },\n        { 'rank': 598, 'color': 'frog green', 'hex': '#58bc08', 'channel': 'blue', 'intensity': 8 },\n        { 'rank': 703, 'color': 'lightish purple', 'hex': '#a552e6', 'channel': 'blue', 'intensity': 230 },\n        { 'rank': 701, 'color': 'lavender blue', 'hex': '#8b88f8', 'channel': 'red', 'intensity': 139 },\n        { 'rank': 290, 'color': 'pea soup', 'hex': '#929901', 'channel': 'blue', 'intensity': 1 },\n        { 'rank': 54, 'color': 'navy', 'hex': '#01153e', 'channel': 'green', 'intensity': 21 },\n        { 'rank': 670, 'color': 'cool green', 'hex': '#33b864', 'channel': 'red', 'intensity': 51 },\n        { 'rank': 945, 'color': 'fresh green', 'hex': '#69d84f', 'channel': 'green', 'intensity': 216 },\n        { 'rank': 606, 'color': 'heliotrope', 'hex': '#d94ff5', 'channel': 'green', 'intensity': 79 },\n        { 'rank': 157, 'color': 'olive drab', 'hex': '#6f7632', 'channel': 'green', 'intensity': 118 },\n        { 'rank': 724, 'color': 'putty', 'hex': '#beae8a', 'channel': 'blue', 'intensity': 138 },\n        { 'rank': 921, 'color': 'strong pink', 'hex': '#ff0789', 'channel': 'blue', 'intensity': 137 },\n        { 'rank': 384, 'color': 'amber', 'hex': '#feb308', 'channel': 'blue', 'intensity': 8 },\n        { 'rank': 900, 'color': 'egg shell', 'hex': '#fffcc4', 'channel': 'red', 'intensity': 255 },\n        { 'rank': 907, 'color': 'light pastel green', 'hex': '#b2fba5', 'channel': 'blue', 'intensity': 165 },\n        { 'rank': 380, 'color': 'golden brown', 'hex': '#b27a01', 'channel': 'green', 'intensity': 122 },\n        { 'rank': 230, 'color': 'brownish', 'hex': '#9c6d57', 'channel': 'red', 'intensity': 156 },\n        { 'rank': 939, 'color': 'yellowish tan', 'hex': '#fcfc81', 'channel': 'red', 'intensity': 252 },\n        { 'rank': 132, 'color': 'light violet', 'hex': '#d6b4fc', 'channel': 'red', 'intensity': 214 },\n        { 'rank': 344, 'color': 'dull yellow', 'hex': '#eedc5b', 'channel': 'green', 'intensity': 220 },\n        { 'rank': 695, 'color': 'lightish red', 'hex': '#fe2f4a', 'channel': 'green', 'intensity': 47 },\n        { 'rank': 148, 'color': 'off white', 'hex': '#ffffe4', 'channel': 'green', 'intensity': 255 },\n        { 'rank': 272, 'color': 'electric green', 'hex': '#21fc0d', 'channel': 'red', 'intensity': 33 },\n        { 'rank': 865, 'color': 'baby puke green', 'hex': '#b6c406', 'channel': 'red', 'intensity': 182 },\n        { 'rank': 426, 'color': 'ocre', 'hex': '#c69c04', 'channel': 'blue', 'intensity': 4 },\n        { 'rank': 340, 'color': 'lightish blue', 'hex': '#3d7afd', 'channel': 'green', 'intensity': 122 },\n        { 'rank': 871, 'color': 'butterscotch', 'hex': '#fdb147', 'channel': 'red', 'intensity': 253 },\n        { 'rank': 787, 'color': 'light khaki', 'hex': '#e6f2a2', 'channel': 'blue', 'intensity': 162 },\n        { 'rank': 147, 'color': 'electric blue', 'hex': '#0652ff', 'channel': 'blue', 'intensity': 255 },\n        { 'rank': 672, 'color': 'eggshell blue', 'hex': '#c4fff7', 'channel': 'green', 'intensity': 255 },\n        { 'rank': 736, 'color': 'dark', 'hex': '#1b2431', 'channel': 'blue', 'intensity': 49 },\n        { 'rank': 931, 'color': 'strong blue', 'hex': '#0c06f7', 'channel': 'green', 'intensity': 6 },\n        { 'rank': 586, 'color': 'tealish', 'hex': '#24bca8', 'channel': 'red', 'intensity': 36 },\n        { 'rank': 136, 'color': 'yellowish green', 'hex': '#b0dd16', 'channel': 'green', 'intensity': 221 },\n        { 'rank': 62, 'color': 'mint green', 'hex': '#8fff9f', 'channel': 'green', 'intensity': 255 },\n        { 'rank': 402, 'color': 'sepia', 'hex': '#985e2b', 'channel': 'blue', 'intensity': 43 },\n        { 'rank': 310, 'color': 'pale lavender', 'hex': '#eecffe', 'channel': 'blue', 'intensity': 254 },\n        { 'rank': 128, 'color': 'dark magenta', 'hex': '#960056', 'channel': 'green', 'intensity': 0 },\n        { 'rank': 497, 'color': 'light yellow green', 'hex': '#ccfd7f', 'channel': 'blue', 'intensity': 127 },\n        { 'rank': 806, 'color': 'vivid purple', 'hex': '#9900fa', 'channel': 'green', 'intensity': 0 },\n        { 'rank': 493, 'color': 'rouge', 'hex': '#ab1239', 'channel': 'blue', 'intensity': 57 },\n        { 'rank': 687, 'color': 'deep rose', 'hex': '#c74767', 'channel': 'green', 'intensity': 71 },\n        { 'rank': 534, 'color': 'milk chocolate', 'hex': '#7f4e1e', 'channel': 'green', 'intensity': 78 },\n        { 'rank': 899, 'color': 'eggplant purple', 'hex': '#430541', 'channel': 'red', 'intensity': 67 },\n        { 'rank': 567, 'color': 'tomato', 'hex': '#ef4026', 'channel': 'red', 'intensity': 239 },\n        { 'rank': 190, 'color': 'greenish brown', 'hex': '#696112', 'channel': 'blue', 'intensity': 18 },\n        { 'rank': 124, 'color': 'cream', 'hex': '#ffffc2', 'channel': 'blue', 'intensity': 194 },\n        { 'rank': 373, 'color': 'steel grey', 'hex': '#6f828a', 'channel': 'red', 'intensity': 111 },\n        { 'rank': 193, 'color': 'tangerine', 'hex': '#ff9408', 'channel': 'red', 'intensity': 255 },\n        { 'rank': 450, 'color': 'medium brown', 'hex': '#7f5112', 'channel': 'red', 'intensity': 127 },\n        { 'rank': 627, 'color': 'peacock blue', 'hex': '#016795', 'channel': 'red', 'intensity': 1 },\n        { 'rank': 673, 'color': 'barf green', 'hex': '#94ac02', 'channel': 'blue', 'intensity': 2 },\n        { 'rank': 656, 'color': 'dark grey blue', 'hex': '#29465b', 'channel': 'red', 'intensity': 41 },\n        { 'rank': 890, 'color': 'deep brown', 'hex': '#410200', 'channel': 'blue', 'intensity': 0 },\n        { 'rank': 781, 'color': 'pale peach', 'hex': '#ffe5ad', 'channel': 'green', 'intensity': 229 },\n        { 'rank': 545, 'color': 'pale lime green', 'hex': '#b1ff65', 'channel': 'blue', 'intensity': 101 },\n        { 'rank': 261, 'color': 'yellow brown', 'hex': '#b79400', 'channel': 'red', 'intensity': 183 },\n        { 'rank': 628, 'color': 'weird green', 'hex': '#3ae57f', 'channel': 'green', 'intensity': 229 },\n        { 'rank': 615, 'color': 'key lime', 'hex': '#aeff6e', 'channel': 'green', 'intensity': 255 },\n        { 'rank': 543, 'color': 'pale grey', 'hex': '#fdfdfe', 'channel': 'blue', 'intensity': 254 },\n        { 'rank': 20, 'color': 'lavender', 'hex': '#c79fef', 'channel': 'blue', 'intensity': 239 },\n        { 'rank': 270, 'color': 'golden yellow', 'hex': '#fec615', 'channel': 'blue', 'intensity': 21 },\n        { 'rank': 81, 'color': 'pastel green', 'hex': '#b0ff9d', 'channel': 'green', 'intensity': 255 },\n        { 'rank': 369, 'color': 'slate green', 'hex': '#658d6d', 'channel': 'blue', 'intensity': 109 },\n        { 'rank': 48, 'color': 'light pink', 'hex': '#ffd1df', 'channel': 'red', 'intensity': 255 },\n        { 'rank': 889, 'color': 'greenish beige', 'hex': '#c9d179', 'channel': 'blue', 'intensity': 121 },\n        { 'rank': 470, 'color': 'fire engine red', 'hex': '#fe0002', 'channel': 'red', 'intensity': 254 },\n        { 'rank': 895, 'color': 'liliac', 'hex': '#c48efd', 'channel': 'blue', 'intensity': 253 },\n        { 'rank': 302, 'color': 'dark olive green', 'hex': '#3c4d03', 'channel': 'blue', 'intensity': 3 },\n        { 'rank': 144, 'color': 'azure', 'hex': '#069af3', 'channel': 'green', 'intensity': 154 },\n        { 'rank': 728, 'color': 'reddy brown', 'hex': '#6e1005', 'channel': 'blue', 'intensity': 5 },\n        { 'rank': 254, 'color': 'ice blue', 'hex': '#d7fffe', 'channel': 'green', 'intensity': 255 },\n        { 'rank': 832, 'color': 'greyish teal', 'hex': '#719f91', 'channel': 'green', 'intensity': 159 },\n        { 'rank': 648, 'color': 'puke brown', 'hex': '#947706', 'channel': 'red', 'intensity': 148 },\n        { 'rank': 910, 'color': 'purpley grey', 'hex': '#947e94', 'channel': 'green', 'intensity': 126 },\n        { 'rank': 14, 'color': 'grey', 'hex': '#929591', 'channel': 'red', 'intensity': 146 },\n        { 'rank': 130, 'color': 'bluish purple', 'hex': '#703be7', 'channel': 'green', 'intensity': 59 },\n        { 'rank': 153, 'color': 'light turquoise', 'hex': '#7ef4cc', 'channel': 'blue', 'intensity': 204 },\n        { 'rank': 732, 'color': 'bright cyan', 'hex': '#41fdfe', 'channel': 'red', 'intensity': 65 },\n        { 'rank': 182, 'color': 'greyish green', 'hex': '#82a67d', 'channel': 'blue', 'intensity': 125 },\n        { 'rank': 436, 'color': 'dusty green', 'hex': '#76a973', 'channel': 'red', 'intensity': 118 },\n        { 'rank': 664, 'color': 'baby shit green', 'hex': '#889717', 'channel': 'blue', 'intensity': 23 },\n        { 'rank': 274, 'color': 'slate grey', 'hex': '#59656d', 'channel': 'green', 'intensity': 101 },\n        { 'rank': 720, 'color': 'saffron', 'hex': '#feb209', 'channel': 'blue', 'intensity': 9 },\n        { 'rank': 597, 'color': 'vivid green', 'hex': '#2fef10', 'channel': 'blue', 'intensity': 16 },\n        { 'rank': 583, 'color': 'pinkish orange', 'hex': '#ff724c', 'channel': 'green', 'intensity': 114 },\n        { 'rank': 662, 'color': 'dark aquamarine', 'hex': '#017371', 'channel': 'red', 'intensity': 1 },\n        { 'rank': 312, 'color': 'purple grey', 'hex': '#866f85', 'channel': 'blue', 'intensity': 133 },\n        { 'rank': 275, 'color': 'teal green', 'hex': '#25a36f', 'channel': 'blue', 'intensity': 111 },\n        { 'rank': 3, 'color': 'blue', 'hex': '#0343df', 'channel': 'red', 'intensity': 3 },\n        { 'rank': 556, 'color': 'chestnut', 'hex': '#742802', 'channel': 'blue', 'intensity': 2 },\n        { 'rank': 379, 'color': 'bright turquoise', 'hex': '#0ffef9', 'channel': 'green', 'intensity': 254 },\n        { 'rank': 104, 'color': 'hunter green', 'hex': '#0b4008', 'channel': 'blue', 'intensity': 8 },\n        { 'rank': 80, 'color': 'mint', 'hex': '#9ffeb0', 'channel': 'red', 'intensity': 159 },\n        { 'rank': 459, 'color': 'celadon', 'hex': '#befdb7', 'channel': 'red', 'intensity': 190 },\n        { 'rank': 538, 'color': 'greenish teal', 'hex': '#32bf84', 'channel': 'green', 'intensity': 191 },\n        { 'rank': 311, 'color': 'acid green', 'hex': '#8ffe09', 'channel': 'green', 'intensity': 254 },\n        { 'rank': 32, 'color': 'beige', 'hex': '#e6daa6', 'channel': 'green', 'intensity': 218 },\n        { 'rank': 238, 'color': 'dusty pink', 'hex': '#d58a94', 'channel': 'red', 'intensity': 213 },\n        { 'rank': 38, 'color': 'light brown', 'hex': '#ad8150', 'channel': 'green', 'intensity': 129 },\n        { 'rank': 351, 'color': 'medium purple', 'hex': '#9e43a2', 'channel': 'red', 'intensity': 158 },\n        { 'rank': 93, 'color': 'light teal', 'hex': '#90e4c1', 'channel': 'blue', 'intensity': 193 },\n        { 'rank': 284, 'color': 'bluish grey', 'hex': '#748b97', 'channel': 'red', 'intensity': 116 },\n        { 'rank': 284, 'color': 'bluish grey', 'hex': '#748b97', 'channel': 'blue', 'intensity': 151 },\n        { 'rank': 516, 'color': 'gunmetal', 'hex': '#536267', 'channel': 'red', 'intensity': 83 },\n        { 'rank': 526, 'color': 'butter yellow', 'hex': '#fffd74', 'channel': 'red', 'intensity': 255 },\n        { 'rank': 805, 'color': 'dark royal blue', 'hex': '#02066f', 'channel': 'blue', 'intensity': 111 },\n        { 'rank': 49, 'color': 'rose', 'hex': '#cf6275', 'channel': 'blue', 'intensity': 117 },\n        { 'rank': 354, 'color': 'pea soup green', 'hex': '#94a617', 'channel': 'blue', 'intensity': 23 },\n        { 'rank': 677, 'color': 'water blue', 'hex': '#0e87cc', 'channel': 'red', 'intensity': 14 },\n        { 'rank': 137, 'color': 'purplish blue', 'hex': '#601ef9', 'channel': 'green', 'intensity': 30 },\n        { 'rank': 264, 'color': 'jungle green', 'hex': '#048243', 'channel': 'blue', 'intensity': 67 },\n        { 'rank': 587, 'color': 'perrywinkle', 'hex': '#8f8ce7', 'channel': 'blue', 'intensity': 231 },\n        { 'rank': 785, 'color': 'dark hot pink', 'hex': '#d90166', 'channel': 'green', 'intensity': 1 },\n        { 'rank': 868, 'color': 'indian red', 'hex': '#850e04', 'channel': 'red', 'intensity': 133 },\n        { 'rank': 311, 'color': 'acid green', 'hex': '#8ffe09', 'channel': 'blue', 'intensity': 9 },\n        { 'rank': 928, 'color': 'blue blue', 'hex': '#2242c7', 'channel': 'blue', 'intensity': 199 },\n        { 'rank': 824, 'color': 'creme', 'hex': '#ffffb6', 'channel': 'red', 'intensity': 255 },\n        { 'rank': 328, 'color': 'yellowish', 'hex': '#faee66', 'channel': 'green', 'intensity': 238 },\n        { 'rank': 686, 'color': 'dusty red', 'hex': '#b9484e', 'channel': 'green', 'intensity': 72 },\n        { 'rank': 854, 'color': 'orangeish', 'hex': '#fd8d49', 'channel': 'blue', 'intensity': 73 },\n        { 'rank': 581, 'color': 'light urple', 'hex': '#b36ff6', 'channel': 'green', 'intensity': 111 },\n        ],\n        fields: [makeField('rank'), makeField('color'), makeField('hex'), makeField('channel'), makeField('intensity')],\n        metadata: {\n            'rank': { type: Type.Number, semanticType: 'Rank', levels: [] },\n            'color': { type: Type.String, semanticType: 'Category', levels: ['acid green', 'amber', 'azure', 'baby poo', 'baby poop green', 'baby puke green', 'baby shit brown', 'baby shit green', 'barf green', 'beige', 'blue', 'blue blue', 'blue purple', 'bluegreen', 'bluish grey', 'bluish purple', 'bright cyan', 'bright light blue', 'bright lime green', 'bright turquoise', 'brown', 'brown green', 'brownish', 'butter yellow', 'butterscotch', 'camo', 'carmine', 'carnation pink', 'celadon', 'cherry red', 'chestnut', 'coffee', 'cool green', 'cream', 'creme', 'dark', 'dark aquamarine', 'dark fuchsia', 'dark gold', 'dark grey blue', 'dark hot pink', 'dark magenta', 'dark maroon', 'dark mauve', 'dark olive green', 'dark purple', 'dark royal blue', 'dark sand', 'darkish pink', 'deep brown'] },\n            'hex': { type: Type.String, semanticType: 'Category', levels: ['#010fcc', '#01153e', '#016795', '#017371', '#017a79', '#020035', '#02066f', '#0343df', '#048243', '#0652ff', '#069af3', '#0a481e', '#0b4008', '#0c06f7', '#0e87cc', '#0ffef9', '#1b2431', '#21fc0d', '#2242c7', '#24bca8', '#25a36f', '#26f7fd', '#29465b', '#2cfa1f', '#2fef10', '#32bf84', '#33b864', '#35063e', '#3ae57f', '#3c0008', '#3c4d03', '#3d7afd', '#3f9b0b', '#410200', '#419c03', '#41fdfe', '#430541', '#4e0550', '#4f738e', '#50a747', '#51b73b', '#536267', '#5729ce', '#58bc08', '#59656d', '#601ef9', '#653700', '#658d6d', '#65fe08', '#667c3e'] },\n            'channel': { type: Type.String, semanticType: 'String', levels: ['blue', 'green', 'red'] },\n            'intensity': { type: Type.Number, semanticType: 'Number', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('rank'),\n            y: makeEncodingItem('intensity'),\n            color: makeEncodingItem('channel'),\n        },\n        chartProperties: { interpolate: \"monotone\" },\n    };\n}\n\nfunction gen_countryListsQ1RecGpt41(): TestCase {\n    // Which origin countries have the highest number of visa‑free destinations, and how do they rank globally?\n    // Score: 3/20 | The visualization appears to be based on an incorrect visa_free_count aggregation, resulting in iden\n    return {\n        title: 'country_lists_q1_rec-gpt-4.1',\n        description: 'show top countries ranked by visa-free destinations',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'country': 'Palestinian Territory', 'code': 'PS', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Hungary', 'code': 'HU', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Honduras', 'code': 'HN', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Haiti', 'code': 'HT', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Guyana', 'code': 'GY', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Guinea-Bissau', 'code': 'GW', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Guinea', 'code': 'GN', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Guatemala', 'code': 'GT', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Grenada', 'code': 'GD', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Greece', 'code': 'GR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Ghana', 'code': 'GH', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Germany', 'code': 'DE', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Georgia', 'code': 'GE', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'The Gambia', 'code': 'GM', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Gabon', 'code': 'GA', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'France', 'code': 'FR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Finland', 'code': 'FI', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Fiji', 'code': 'FJ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Ethiopia', 'code': 'ET', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Estonia', 'code': 'EE', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Eritrea', 'code': 'ER', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Equatorial Guinea', 'code': 'GQ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'El Salvador', 'code': 'SV', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Hong Kong (SAR China)', 'code': 'HK', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Iceland', 'code': 'IS', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Ecuador', 'code': 'EC', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'India', 'code': 'IN', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Libya', 'code': 'LY', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Liberia', 'code': 'LR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Lesotho', 'code': 'LS', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Lebanon', 'code': 'LB', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Latvia', 'code': 'LV', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Laos', 'code': 'LA', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Kyrgyzstan', 'code': 'KG', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Kuwait', 'code': 'KW', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Kosovo', 'code': 'XK', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Kiribati', 'code': 'KI', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Kenya', 'code': 'KE', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Kazakhstan', 'code': 'KZ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Jordan', 'code': 'JO', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Japan', 'code': 'JP', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Jamaica', 'code': 'JM', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Italy', 'code': 'IT', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Israel', 'code': 'IL', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Ireland', 'code': 'IE', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Iraq', 'code': 'IQ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Iran', 'code': 'IR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Indonesia', 'code': 'ID', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Egypt', 'code': 'EG', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Dominican Republic', 'code': 'DO', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Luxembourg', 'code': 'LU', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Brunei', 'code': 'BN', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Botswana', 'code': 'BW', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Bosnia and Herzegovina', 'code': 'BA', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Bolivia', 'code': 'BO', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Bhutan', 'code': 'BT', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Benin', 'code': 'BJ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Belize', 'code': 'BZ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Belgium', 'code': 'BE', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Belarus', 'code': 'BY', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Barbados', 'code': 'BB', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Bangladesh', 'code': 'BD', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Bahrain', 'code': 'BH', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Bahamas', 'code': 'BS', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Azerbaijan', 'code': 'AZ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Austria', 'code': 'AT', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Australia', 'code': 'AU', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Armenia', 'code': 'AM', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Argentina', 'code': 'AR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Antigua and Barbuda', 'code': 'AG', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Angola', 'code': 'AO', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Algeria', 'code': 'DZ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Albania', 'code': 'AL', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Brazil', 'code': 'BR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Bulgaria', 'code': 'BG', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Dominica', 'code': 'DM', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Burkina Faso', 'code': 'BF', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Djibouti', 'code': 'DJ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Denmark', 'code': 'DK', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Czechia', 'code': 'CZ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Cyprus', 'code': 'CY', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Cuba', 'code': 'CU', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Croatia', 'code': 'HR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Cote d\\'Ivoire', 'code': 'CI', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Costa Rica', 'code': 'CR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Congo (Dem. Rep.)', 'code': 'CD', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Congo (Rep.)', 'code': 'CG', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Comoro Islands', 'code': 'KM', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Colombia', 'code': 'CO', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'China', 'code': 'CN', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Chile', 'code': 'CL', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Chad', 'code': 'TD', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Central African Republic', 'code': 'CF', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Cape Verde Islands', 'code': 'CV', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Canada', 'code': 'CA', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Cameroon', 'code': 'CM', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Cambodia', 'code': 'KH', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Burundi', 'code': 'BI', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Lithuania', 'code': 'LT', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Macao (SAR China)', 'code': 'MO', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Andorra', 'code': 'AD', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Togo', 'code': 'TG', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Thailand', 'code': 'TH', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Tanzania', 'code': 'TZ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Tajikistan', 'code': 'TJ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Taiwan (Chinese Taipei)', 'code': 'TW', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Syria', 'code': 'SY', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Switzerland', 'code': 'CH', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Sweden', 'code': 'SE', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'eSwatini', 'code': 'SZ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Suriname', 'code': 'SR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Sudan', 'code': 'SD', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'St. Vincent and the Grenadines', 'code': 'VC', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'St. Lucia', 'code': 'LC', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'St. Kitts and Nevis', 'code': 'KN', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Sri Lanka', 'code': 'LK', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Spain', 'code': 'ES', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'South Sudan', 'code': 'SS', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'South Korea', 'code': 'KR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'South Africa', 'code': 'ZA', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Somalia', 'code': 'SO', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Solomon Islands', 'code': 'SB', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Slovenia', 'code': 'SI', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Timor-Leste', 'code': 'TL', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Tonga', 'code': 'TO', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Singapore', 'code': 'SG', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Trinidad and Tobago', 'code': 'TT', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Vatican City', 'code': 'VA', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'San Marino', 'code': 'SM', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Monaco', 'code': 'MC', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Liechtenstein', 'code': 'LI', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Zimbabwe', 'code': 'ZW', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Zambia', 'code': 'ZM', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Yemen', 'code': 'YE', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Vietnam', 'code': 'VN', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Venezuela', 'code': 'VE', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Vanuatu', 'code': 'VU', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Uzbekistan', 'code': 'UZ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Uruguay', 'code': 'UY', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'United States', 'code': 'US', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'United Kingdom', 'code': 'GB', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'United Arab Emirates', 'code': 'AE', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Ukraine', 'code': 'UA', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Uganda', 'code': 'UG', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Tuvalu', 'code': 'TV', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Turkmenistan', 'code': 'TM', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Türkiye', 'code': 'TR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Tunisia', 'code': 'TN', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Slovakia', 'code': 'SK', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Sierra Leone', 'code': 'SL', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'North Macedonia', 'code': 'MK', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Nicaragua', 'code': 'NI', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Netherlands', 'code': 'NL', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Nepal', 'code': 'NP', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Nauru', 'code': 'NR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Namibia', 'code': null, 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Myanmar', 'code': 'MM', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Mozambique', 'code': 'MZ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Morocco', 'code': 'MA', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Montenegro', 'code': 'ME', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Mongolia', 'code': 'MN', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Moldova', 'code': 'MD', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Micronesia', 'code': 'FM', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Mexico', 'code': 'MX', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Mauritius', 'code': 'MU', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Mauritania', 'code': 'MR', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Marshall Islands', 'code': 'MH', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Malta', 'code': 'MT', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Mali', 'code': 'ML', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Maldives', 'code': 'MV', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Malaysia', 'code': 'MY', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Malawi', 'code': 'MW', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Madagascar', 'code': 'MG', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'New Zealand', 'code': 'NZ', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Niger', 'code': 'NE', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Seychelles', 'code': 'SC', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Nigeria', 'code': 'NG', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Serbia', 'code': 'RS', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Senegal', 'code': 'SN', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Saudi Arabia', 'code': 'SA', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Sao Tome and Principe', 'code': 'ST', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Samoa', 'code': 'WS', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Rwanda', 'code': 'RW', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Russian Federation', 'code': 'RU', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Romania', 'code': 'RO', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Qatar', 'code': 'QA', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Portugal', 'code': 'PT', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Poland', 'code': 'PL', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Philippines', 'code': 'PH', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Peru', 'code': 'PE', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Paraguay', 'code': 'PY', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Papua New Guinea', 'code': 'PG', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Panama', 'code': 'PA', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Palau Islands', 'code': 'PW', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Pakistan', 'code': 'PK', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Oman', 'code': 'OM', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Norway', 'code': 'NO', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'North Korea', 'code': 'KP', 'visa_free_count': 1, 'rank': 1 },\n        { 'country': 'Afghanistan', 'code': 'AF', 'visa_free_count': 1, 'rank': 1 },\n        ],\n        fields: [makeField('country'), makeField('code'), makeField('visa_free_count'), makeField('rank')],\n        metadata: {\n            'country': { type: Type.String, semanticType: 'Country', levels: ['Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola', 'Antigua and Barbuda', 'Argentina', 'Armenia', 'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain', 'Bangladesh', 'Barbados', 'Belarus', 'Belgium', 'Belize', 'Benin', 'Bhutan', 'Bolivia', 'Bosnia and Herzegovina', 'Botswana', 'Brazil', 'Brunei', 'Bulgaria', 'Burkina Faso', 'Burundi', 'Cambodia', 'Cameroon', 'Canada', 'Cape Verde Islands', 'Central African Republic', 'Chad', 'Chile', 'China', 'Colombia', 'Comoro Islands', 'Congo (Dem. Rep.)', 'Congo (Rep.)', 'Costa Rica', 'Cote d\\'Ivoire', 'Croatia', 'Cuba', 'Cyprus', 'Czechia', 'Denmark', 'Djibouti', 'Dominica', 'Dominican Republic'] },\n            'code': { type: Type.String, semanticType: 'Category', levels: ['AD', 'AE', 'AF', 'AG', 'AL', 'AM', 'AO', 'AR', 'AT', 'AU', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BN', 'BO', 'BR', 'BS', 'BT', 'BW', 'BY', 'BZ', 'CA', 'CD', 'CF', 'CG', 'CH', 'CI', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC'] },\n            'visa_free_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n            'rank': { type: Type.String, semanticType: 'Category', levels: ['1'] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('country'),\n            y: makeEncodingItem('visa_free_count'),\n        },\n        chartProperties: { cornerRadius: 5 },\n    };\n}\n\nfunction gen_countryListsQ2RecGpt41(): TestCase {\n    // For each origin country, what is the composition of its outbound travel access by visa type (visa required, visa on arri\n    // Score: 7/20 | The visualization has the right structural idea but appears to be based on incorrect calculations, s\n    return {\n        title: 'country_lists_q2_rec-gpt-4.1',\n        description: 'Show destination access composition for each origin country',\n        tags: ['debug', 'grouped-bar-chart'],\n        chartType: 'Grouped Bar Chart',\n        data: [\n        { 'code': 'GW', 'country': 'Guinea-Bissau', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'TN', 'country': 'Tunisia', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'LI', 'country': 'Liechtenstein', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'DM', 'country': 'Dominica', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'WS', 'country': 'Samoa', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SL', 'country': 'Sierra Leone', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SO', 'country': 'Somalia', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'TZ', 'country': 'Tanzania', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'DO', 'country': 'Dominican Republic', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'TM', 'country': 'Turkmenistan', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GM', 'country': 'The Gambia', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'DM', 'country': 'Dominica', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BZ', 'country': 'Belize', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'KI', 'country': 'Kiribati', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'UA', 'country': 'Ukraine', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'IQ', 'country': 'Iraq', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'MD', 'country': 'Moldova', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'ZW', 'country': 'Zimbabwe', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'ZW', 'country': 'Zimbabwe', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'TV', 'country': 'Tuvalu', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'ZA', 'country': 'South Africa', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SI', 'country': 'Slovenia', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'LR', 'country': 'Liberia', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'IN', 'country': 'India', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'LI', 'country': 'Liechtenstein', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'JO', 'country': 'Jordan', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'LK', 'country': 'Sri Lanka', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GQ', 'country': 'Equatorial Guinea', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GD', 'country': 'Grenada', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'ET', 'country': 'Ethiopia', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'DZ', 'country': 'Algeria', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'MN', 'country': 'Mongolia', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SO', 'country': 'Somalia', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'MH', 'country': 'Marshall Islands', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'IQ', 'country': 'Iraq', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'WS', 'country': 'Samoa', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CL', 'country': 'Chile', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BA', 'country': 'Bosnia and Herzegovina', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AD', 'country': 'Andorra', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CY', 'country': 'Cyprus', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CL', 'country': 'Chile', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CH', 'country': 'Switzerland', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'FJ', 'country': 'Fiji', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AO', 'country': 'Angola', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'PK', 'country': 'Pakistan', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AU', 'country': 'Australia', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SY', 'country': 'Syria', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'ZA', 'country': 'South Africa', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CU', 'country': 'Cuba', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'PW', 'country': 'Palau Islands', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AL', 'country': 'Albania', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'UG', 'country': 'Uganda', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'NL', 'country': 'Netherlands', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'TV', 'country': 'Tuvalu', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'NG', 'country': 'Nigeria', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BF', 'country': 'Burkina Faso', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'OM', 'country': 'Oman', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'IN', 'country': 'India', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SA', 'country': 'Saudi Arabia', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CL', 'country': 'Chile', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'YE', 'country': 'Yemen', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'EC', 'country': 'Ecuador', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'MV', 'country': 'Maldives', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'KW', 'country': 'Kuwait', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'TG', 'country': 'Togo', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'NL', 'country': 'Netherlands', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AE', 'country': 'United Arab Emirates', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'KZ', 'country': 'Kazakhstan', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'QA', 'country': 'Qatar', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CA', 'country': 'Canada', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'HT', 'country': 'Haiti', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'HK', 'country': 'Hong Kong (SAR China)', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BJ', 'country': 'Benin', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BR', 'country': 'Brazil', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'NE', 'country': 'Niger', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'IL', 'country': 'Israel', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'KN', 'country': 'St. Kitts and Nevis', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'EE', 'country': 'Estonia', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'US', 'country': 'United States', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'VN', 'country': 'Vietnam', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GH', 'country': 'Ghana', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SB', 'country': 'Solomon Islands', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CI', 'country': 'Cote d\\'Ivoire', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'RO', 'country': 'Romania', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AE', 'country': 'United Arab Emirates', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BN', 'country': 'Brunei', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AG', 'country': 'Antigua and Barbuda', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BW', 'country': 'Botswana', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'TM', 'country': 'Turkmenistan', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BS', 'country': 'Bahamas', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AZ', 'country': 'Azerbaijan', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'MT', 'country': 'Malta', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GW', 'country': 'Guinea-Bissau', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CM', 'country': 'Cameroon', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'NE', 'country': 'Niger', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SE', 'country': 'Sweden', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'NI', 'country': 'Nicaragua', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'KP', 'country': 'North Korea', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SS', 'country': 'South Sudan', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GE', 'country': 'Georgia', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SA', 'country': 'Saudi Arabia', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AR', 'country': 'Argentina', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GA', 'country': 'Gabon', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GT', 'country': 'Guatemala', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'US', 'country': 'United States', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'IS', 'country': 'Iceland', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BT', 'country': 'Bhutan', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SR', 'country': 'Suriname', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'KW', 'country': 'Kuwait', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'EC', 'country': 'Ecuador', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AL', 'country': 'Albania', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SE', 'country': 'Sweden', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'MV', 'country': 'Maldives', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'NL', 'country': 'Netherlands', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'ST', 'country': 'Sao Tome and Principe', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GN', 'country': 'Guinea', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'FR', 'country': 'France', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'JO', 'country': 'Jordan', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'ZA', 'country': 'South Africa', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'FR', 'country': 'France', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'PG', 'country': 'Papua New Guinea', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BI', 'country': 'Burundi', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'HR', 'country': 'Croatia', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CI', 'country': 'Cote d\\'Ivoire', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'VU', 'country': 'Vanuatu', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SB', 'country': 'Solomon Islands', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CV', 'country': 'Cape Verde Islands', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AO', 'country': 'Angola', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CN', 'country': 'China', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'PE', 'country': 'Peru', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'MZ', 'country': 'Mozambique', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SA', 'country': 'Saudi Arabia', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'UY', 'country': 'Uruguay', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'KR', 'country': 'South Korea', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'JM', 'country': 'Jamaica', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SV', 'country': 'El Salvador', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'PE', 'country': 'Peru', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'KR', 'country': 'South Korea', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GR', 'country': 'Greece', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'LY', 'country': 'Libya', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'MM', 'country': 'Myanmar', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GN', 'country': 'Guinea', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'ML', 'country': 'Mali', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'TJ', 'country': 'Tajikistan', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SA', 'country': 'Saudi Arabia', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AL', 'country': 'Albania', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SL', 'country': 'Sierra Leone', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'DJ', 'country': 'Djibouti', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AR', 'country': 'Argentina', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'XK', 'country': 'Kosovo', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SN', 'country': 'Senegal', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'DJ', 'country': 'Djibouti', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'IE', 'country': 'Ireland', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'FM', 'country': 'Micronesia', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'IE', 'country': 'Ireland', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'MM', 'country': 'Myanmar', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BY', 'country': 'Belarus', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BN', 'country': 'Brunei', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'TZ', 'country': 'Tanzania', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'LS', 'country': 'Lesotho', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'LT', 'country': 'Lithuania', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'UG', 'country': 'Uganda', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CZ', 'country': 'Czechia', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'VN', 'country': 'Vietnam', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'TN', 'country': 'Tunisia', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SY', 'country': 'Syria', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'HT', 'country': 'Haiti', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AT', 'country': 'Austria', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'KM', 'country': 'Comoro Islands', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GA', 'country': 'Gabon', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AT', 'country': 'Austria', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'ID', 'country': 'Indonesia', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'UY', 'country': 'Uruguay', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'NP', 'country': 'Nepal', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'NP', 'country': 'Nepal', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CN', 'country': 'China', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'MY', 'country': 'Malaysia', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'KG', 'country': 'Kyrgyzstan', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SC', 'country': 'Seychelles', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'KZ', 'country': 'Kazakhstan', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'VA', 'country': 'Vatican City', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AT', 'country': 'Austria', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SV', 'country': 'El Salvador', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'TT', 'country': 'Trinidad and Tobago', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GA', 'country': 'Gabon', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BD', 'country': 'Bangladesh', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'DK', 'country': 'Denmark', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BA', 'country': 'Bosnia and Herzegovina', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'HR', 'country': 'Croatia', 'visa_type': 'Visa Online', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'GN', 'country': 'Guinea', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AT', 'country': 'Austria', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'AF', 'country': 'Afghanistan', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BB', 'country': 'Barbados', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'MU', 'country': 'Mauritius', 'visa_type': 'Visa Required', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CH', 'country': 'Switzerland', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'BT', 'country': 'Bhutan', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'PS', 'country': 'Palestinian Territory', 'visa_type': 'Visa Free', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SV', 'country': 'El Salvador', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'SV', 'country': 'El Salvador', 'visa_type': 'Visa on Arrival', 'count': 1, 'percentage': 20.0 },\n        { 'code': 'CV', 'country': 'Cape Verde Islands', 'visa_type': 'Electronic Travel Authorisation', 'count': 1, 'percentage': 20.0 },\n        ],\n        fields: [makeField('code'), makeField('country'), makeField('visa_type'), makeField('count'), makeField('percentage')],\n        metadata: {\n            'code': { type: Type.String, semanticType: 'Category', levels: ['AD', 'AE', 'AF', 'AG', 'AL', 'AO', 'AR', 'AT', 'AU', 'AZ', 'BA', 'BB', 'BD', 'BF', 'BI', 'BJ', 'BN', 'BR', 'BS', 'BT', 'BW', 'BY', 'BZ', 'CA', 'CH', 'CI', 'CL', 'CM', 'CN', 'CU', 'CV', 'CY', 'CZ', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'ET', 'FJ', 'FM', 'FR', 'GA', 'GD', 'GE', 'GH', 'GM', 'GN'] },\n            'country': { type: Type.String, semanticType: 'Country', levels: ['Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola', 'Antigua and Barbuda', 'Argentina', 'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bangladesh', 'Barbados', 'Belarus', 'Belize', 'Benin', 'Bhutan', 'Bosnia and Herzegovina', 'Botswana', 'Brazil', 'Brunei', 'Burkina Faso', 'Burundi', 'Cameroon', 'Canada', 'Cape Verde Islands', 'Chile', 'China', 'Comoro Islands', 'Cote d\\'Ivoire', 'Croatia', 'Cuba', 'Cyprus', 'Czechia', 'Denmark', 'Djibouti', 'Dominica', 'Dominican Republic', 'Ecuador', 'El Salvador', 'Equatorial Guinea', 'Estonia', 'Ethiopia', 'Fiji', 'France', 'Gabon', 'Georgia', 'Ghana', 'Greece', 'Grenada'] },\n            'visa_type': { type: Type.String, semanticType: 'Type', levels: ['Electronic Travel Authorisation', 'Visa Free', 'Visa Online', 'Visa Required', 'Visa on Arrival'] },\n            'count': { type: Type.String, semanticType: 'Category', levels: ['1'] },\n            'percentage': { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('country'),\n            y: makeEncodingItem('percentage'),\n            group: makeEncodingItem('visa_type'),\n        },\n        chartProperties: { cornerRadius: 2 },\n    };\n}\n\nfunction gen_countryListsQ2RecGpt51(): TestCase {\n    // For each origin country, what is the composition of its outbound travel access by visa type (visa required, visa on arri\n    // Score: 5/20 | The visualization uses an appropriate heatmap structure for summarizing visa-type access mixes by co\n    return {\n        title: 'country_lists_q2_rec-gpt-5.1',\n        description: 'Summarize **country** outbound access mix by visa type shares',\n        tags: ['debug', 'heatmap'],\n        chartType: 'Heatmap',\n        data: [\n        { 'code': 'GW', 'country': 'Guinea-Bissau', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'TN', 'country': 'Tunisia', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'LI', 'country': 'Liechtenstein', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'DM', 'country': 'Dominica', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'WS', 'country': 'Samoa', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SL', 'country': 'Sierra Leone', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SO', 'country': 'Somalia', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'TZ', 'country': 'Tanzania', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'DO', 'country': 'Dominican Republic', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'TM', 'country': 'Turkmenistan', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GM', 'country': 'The Gambia', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'DM', 'country': 'Dominica', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BZ', 'country': 'Belize', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'KI', 'country': 'Kiribati', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'UA', 'country': 'Ukraine', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'IQ', 'country': 'Iraq', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'MD', 'country': 'Moldova', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'ZW', 'country': 'Zimbabwe', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'ZW', 'country': 'Zimbabwe', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'TV', 'country': 'Tuvalu', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'ZA', 'country': 'South Africa', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SI', 'country': 'Slovenia', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'LR', 'country': 'Liberia', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'IN', 'country': 'India', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'LI', 'country': 'Liechtenstein', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'JO', 'country': 'Jordan', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'LK', 'country': 'Sri Lanka', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GQ', 'country': 'Equatorial Guinea', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GD', 'country': 'Grenada', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'ET', 'country': 'Ethiopia', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'DZ', 'country': 'Algeria', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'MN', 'country': 'Mongolia', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SO', 'country': 'Somalia', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'MH', 'country': 'Marshall Islands', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'IQ', 'country': 'Iraq', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'WS', 'country': 'Samoa', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CL', 'country': 'Chile', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BA', 'country': 'Bosnia and Herzegovina', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AD', 'country': 'Andorra', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CY', 'country': 'Cyprus', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CL', 'country': 'Chile', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CH', 'country': 'Switzerland', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'FJ', 'country': 'Fiji', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AO', 'country': 'Angola', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'PK', 'country': 'Pakistan', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AU', 'country': 'Australia', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SY', 'country': 'Syria', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'ZA', 'country': 'South Africa', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CU', 'country': 'Cuba', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'PW', 'country': 'Palau Islands', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AL', 'country': 'Albania', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'UG', 'country': 'Uganda', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'NL', 'country': 'Netherlands', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'TV', 'country': 'Tuvalu', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'NG', 'country': 'Nigeria', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BF', 'country': 'Burkina Faso', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'OM', 'country': 'Oman', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'IN', 'country': 'India', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SA', 'country': 'Saudi Arabia', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CL', 'country': 'Chile', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'YE', 'country': 'Yemen', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'EC', 'country': 'Ecuador', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'MV', 'country': 'Maldives', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'KW', 'country': 'Kuwait', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'TG', 'country': 'Togo', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'NL', 'country': 'Netherlands', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AE', 'country': 'United Arab Emirates', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'KZ', 'country': 'Kazakhstan', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'QA', 'country': 'Qatar', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CA', 'country': 'Canada', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'HT', 'country': 'Haiti', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'HK', 'country': 'Hong Kong (SAR China)', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BJ', 'country': 'Benin', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BR', 'country': 'Brazil', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'NE', 'country': 'Niger', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'IL', 'country': 'Israel', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'KN', 'country': 'St. Kitts and Nevis', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'EE', 'country': 'Estonia', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'US', 'country': 'United States', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'VN', 'country': 'Vietnam', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GH', 'country': 'Ghana', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SB', 'country': 'Solomon Islands', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CI', 'country': 'Cote d\\'Ivoire', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'RO', 'country': 'Romania', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AE', 'country': 'United Arab Emirates', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BN', 'country': 'Brunei', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AG', 'country': 'Antigua and Barbuda', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BW', 'country': 'Botswana', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'TM', 'country': 'Turkmenistan', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BS', 'country': 'Bahamas', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AZ', 'country': 'Azerbaijan', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'MT', 'country': 'Malta', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GW', 'country': 'Guinea-Bissau', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CM', 'country': 'Cameroon', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'NE', 'country': 'Niger', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SE', 'country': 'Sweden', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'NI', 'country': 'Nicaragua', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'KP', 'country': 'North Korea', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SS', 'country': 'South Sudan', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GE', 'country': 'Georgia', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SA', 'country': 'Saudi Arabia', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AR', 'country': 'Argentina', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GA', 'country': 'Gabon', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GT', 'country': 'Guatemala', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'US', 'country': 'United States', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'IS', 'country': 'Iceland', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BT', 'country': 'Bhutan', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SR', 'country': 'Suriname', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'KW', 'country': 'Kuwait', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'EC', 'country': 'Ecuador', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AL', 'country': 'Albania', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SE', 'country': 'Sweden', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'MV', 'country': 'Maldives', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'NL', 'country': 'Netherlands', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'ST', 'country': 'Sao Tome and Principe', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GN', 'country': 'Guinea', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'FR', 'country': 'France', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'JO', 'country': 'Jordan', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'ZA', 'country': 'South Africa', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'FR', 'country': 'France', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'PG', 'country': 'Papua New Guinea', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BI', 'country': 'Burundi', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'HR', 'country': 'Croatia', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CI', 'country': 'Cote d\\'Ivoire', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'VU', 'country': 'Vanuatu', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SB', 'country': 'Solomon Islands', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CV', 'country': 'Cape Verde Islands', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AO', 'country': 'Angola', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CN', 'country': 'China', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'PE', 'country': 'Peru', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'MZ', 'country': 'Mozambique', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SA', 'country': 'Saudi Arabia', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'UY', 'country': 'Uruguay', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'KR', 'country': 'South Korea', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'JM', 'country': 'Jamaica', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SV', 'country': 'El Salvador', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'PE', 'country': 'Peru', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'KR', 'country': 'South Korea', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GR', 'country': 'Greece', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'LY', 'country': 'Libya', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'MM', 'country': 'Myanmar', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GN', 'country': 'Guinea', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'ML', 'country': 'Mali', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'TJ', 'country': 'Tajikistan', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SA', 'country': 'Saudi Arabia', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AL', 'country': 'Albania', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SL', 'country': 'Sierra Leone', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'DJ', 'country': 'Djibouti', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AR', 'country': 'Argentina', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'XK', 'country': 'Kosovo', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SN', 'country': 'Senegal', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'DJ', 'country': 'Djibouti', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'IE', 'country': 'Ireland', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'FM', 'country': 'Micronesia', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'IE', 'country': 'Ireland', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'MM', 'country': 'Myanmar', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BY', 'country': 'Belarus', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BN', 'country': 'Brunei', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'TZ', 'country': 'Tanzania', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'LS', 'country': 'Lesotho', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'LT', 'country': 'Lithuania', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'UG', 'country': 'Uganda', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CZ', 'country': 'Czechia', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'VN', 'country': 'Vietnam', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'TN', 'country': 'Tunisia', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SY', 'country': 'Syria', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'HT', 'country': 'Haiti', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AT', 'country': 'Austria', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'KM', 'country': 'Comoro Islands', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GA', 'country': 'Gabon', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AT', 'country': 'Austria', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'ID', 'country': 'Indonesia', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'UY', 'country': 'Uruguay', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'NP', 'country': 'Nepal', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'NP', 'country': 'Nepal', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CN', 'country': 'China', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'MY', 'country': 'Malaysia', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'KG', 'country': 'Kyrgyzstan', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SC', 'country': 'Seychelles', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'KZ', 'country': 'Kazakhstan', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'VA', 'country': 'Vatican City', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AT', 'country': 'Austria', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SV', 'country': 'El Salvador', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'TT', 'country': 'Trinidad and Tobago', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GA', 'country': 'Gabon', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BD', 'country': 'Bangladesh', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'DK', 'country': 'Denmark', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BA', 'country': 'Bosnia and Herzegovina', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'HR', 'country': 'Croatia', 'visa_type': 'Visa online', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'GN', 'country': 'Guinea', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AT', 'country': 'Austria', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'AF', 'country': 'Afghanistan', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BB', 'country': 'Barbados', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'MU', 'country': 'Mauritius', 'visa_type': 'Visa required', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CH', 'country': 'Switzerland', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'BT', 'country': 'Bhutan', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'PS', 'country': 'Palestinian Territory', 'visa_type': 'Visa free', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SV', 'country': 'El Salvador', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'SV', 'country': 'El Salvador', 'visa_type': 'Visa on arrival', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        { 'code': 'CV', 'country': 'Cape Verde Islands', 'visa_type': 'Electronic travel authorisation', 'access_count': 1, 'total_access': 5, 'access_share': 0.2 },\n        ],\n        fields: [makeField('code'), makeField('country'), makeField('visa_type'), makeField('access_count'), makeField('total_access'), makeField('access_share')],\n        metadata: {\n            'code': { type: Type.String, semanticType: 'Category', levels: ['AD', 'AE', 'AF', 'AG', 'AL', 'AO', 'AR', 'AT', 'AU', 'AZ', 'BA', 'BB', 'BD', 'BF', 'BI', 'BJ', 'BN', 'BR', 'BS', 'BT', 'BW', 'BY', 'BZ', 'CA', 'CH', 'CI', 'CL', 'CM', 'CN', 'CU', 'CV', 'CY', 'CZ', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'ET', 'FJ', 'FM', 'FR', 'GA', 'GD', 'GE', 'GH', 'GM', 'GN'] },\n            'country': { type: Type.String, semanticType: 'String', levels: ['Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola', 'Antigua and Barbuda', 'Argentina', 'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bangladesh', 'Barbados', 'Belarus', 'Belize', 'Benin', 'Bhutan', 'Bosnia and Herzegovina', 'Botswana', 'Brazil', 'Brunei', 'Burkina Faso', 'Burundi', 'Cameroon', 'Canada', 'Cape Verde Islands', 'Chile', 'China', 'Comoro Islands', 'Cote d\\'Ivoire', 'Croatia', 'Cuba', 'Cyprus', 'Czechia', 'Denmark', 'Djibouti', 'Dominica', 'Dominican Republic', 'Ecuador', 'El Salvador', 'Equatorial Guinea', 'Estonia', 'Ethiopia', 'Fiji', 'France', 'Gabon', 'Georgia', 'Ghana', 'Greece', 'Grenada'] },\n            'visa_type': { type: Type.String, semanticType: 'Status', levels: ['Electronic travel authorisation', 'Visa free', 'Visa on arrival', 'Visa online', 'Visa required'] },\n            'access_count': { type: Type.String, semanticType: 'Category', levels: ['1'] },\n            'total_access': { type: Type.String, semanticType: 'Category', levels: ['5'] },\n            'access_share': { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('country'),\n            y: makeEncodingItem('visa_type'),\n            color: makeEncodingItem('access_share'),\n        },\n        chartProperties: { colorScheme: \"blues\" },\n    };\n}\n\nfunction gen_countryListsQ3RecGpt41(): TestCase {\n    // Is there a relationship between how many countries a passport can enter visa‑free and how many require a visa for that p\n    // Score: 6/20 | While the chart technically plots the requested variables, incorrect scaling and total overplotting \n    return {\n        title: 'country_lists_q3_rec-gpt-4.1',\n        description: 'Visualize relationship between **visa_free_access_count** and **visa_required_count**',\n        tags: ['debug', 'scatter-plot'],\n        chartType: 'Scatter Plot',\n        data: [\n        { 'code': 'PS', 'country': 'Palestinian Territory', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'AD', 'country': 'Andorra', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'VA', 'country': 'Vatican City', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SM', 'country': 'San Marino', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MC', 'country': 'Monaco', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'LI', 'country': 'Liechtenstein', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'ZW', 'country': 'Zimbabwe', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'ZM', 'country': 'Zambia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'YE', 'country': 'Yemen', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'VN', 'country': 'Vietnam', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'VE', 'country': 'Venezuela', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'VU', 'country': 'Vanuatu', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'UZ', 'country': 'Uzbekistan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'UY', 'country': 'Uruguay', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'US', 'country': 'United States', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'GB', 'country': 'United Kingdom', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'AE', 'country': 'United Arab Emirates', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'UA', 'country': 'Ukraine', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'UG', 'country': 'Uganda', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TV', 'country': 'Tuvalu', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TM', 'country': 'Turkmenistan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TR', 'country': 'Türkiye', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TN', 'country': 'Tunisia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TT', 'country': 'Trinidad and Tobago', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TO', 'country': 'Tonga', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TG', 'country': 'Togo', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TL', 'country': 'Timor-Leste', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TH', 'country': 'Thailand', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TZ', 'country': 'Tanzania', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TJ', 'country': 'Tajikistan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TW', 'country': 'Taiwan (Chinese Taipei)', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SY', 'country': 'Syria', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CH', 'country': 'Switzerland', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SE', 'country': 'Sweden', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SZ', 'country': 'eSwatini', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SR', 'country': 'Suriname', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SD', 'country': 'Sudan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'VC', 'country': 'St. Vincent and the Grenadines', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'LC', 'country': 'St. Lucia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'KN', 'country': 'St. Kitts and Nevis', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'LK', 'country': 'Sri Lanka', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'ES', 'country': 'Spain', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SS', 'country': 'South Sudan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'KR', 'country': 'South Korea', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'ZA', 'country': 'South Africa', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SO', 'country': 'Somalia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SB', 'country': 'Solomon Islands', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SI', 'country': 'Slovenia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SK', 'country': 'Slovakia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SG', 'country': 'Singapore', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SL', 'country': 'Sierra Leone', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SC', 'country': 'Seychelles', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'RS', 'country': 'Serbia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SN', 'country': 'Senegal', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SA', 'country': 'Saudi Arabia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'ST', 'country': 'Sao Tome and Principe', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'WS', 'country': 'Samoa', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'RW', 'country': 'Rwanda', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'RU', 'country': 'Russian Federation', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'RO', 'country': 'Romania', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'QA', 'country': 'Qatar', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'PT', 'country': 'Portugal', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'PL', 'country': 'Poland', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'PH', 'country': 'Philippines', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'PE', 'country': 'Peru', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'PY', 'country': 'Paraguay', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'PG', 'country': 'Papua New Guinea', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'PA', 'country': 'Panama', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'PW', 'country': 'Palau Islands', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'PK', 'country': 'Pakistan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'OM', 'country': 'Oman', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'NO', 'country': 'Norway', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'KP', 'country': 'North Korea', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'NG', 'country': 'Nigeria', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'NE', 'country': 'Niger', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'NI', 'country': 'Nicaragua', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'NZ', 'country': 'New Zealand', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'NL', 'country': 'Netherlands', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'NP', 'country': 'Nepal', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'NR', 'country': 'Nauru', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': null, 'country': 'Namibia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MM', 'country': 'Myanmar', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MZ', 'country': 'Mozambique', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MA', 'country': 'Morocco', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'ME', 'country': 'Montenegro', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MN', 'country': 'Mongolia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MD', 'country': 'Moldova', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'FM', 'country': 'Micronesia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MX', 'country': 'Mexico', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MU', 'country': 'Mauritius', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MR', 'country': 'Mauritania', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MH', 'country': 'Marshall Islands', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MT', 'country': 'Malta', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'ML', 'country': 'Mali', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MV', 'country': 'Maldives', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MY', 'country': 'Malaysia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MW', 'country': 'Malawi', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MG', 'country': 'Madagascar', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MK', 'country': 'North Macedonia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'MO', 'country': 'Macao (SAR China)', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'LU', 'country': 'Luxembourg', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'LT', 'country': 'Lithuania', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'LY', 'country': 'Libya', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'LR', 'country': 'Liberia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'LS', 'country': 'Lesotho', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'LB', 'country': 'Lebanon', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'LV', 'country': 'Latvia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'LA', 'country': 'Laos', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'KG', 'country': 'Kyrgyzstan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'KW', 'country': 'Kuwait', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'XK', 'country': 'Kosovo', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'KI', 'country': 'Kiribati', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'KE', 'country': 'Kenya', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'KZ', 'country': 'Kazakhstan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'JO', 'country': 'Jordan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'JP', 'country': 'Japan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'JM', 'country': 'Jamaica', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'IT', 'country': 'Italy', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'IL', 'country': 'Israel', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'IE', 'country': 'Ireland', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'IQ', 'country': 'Iraq', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'IR', 'country': 'Iran', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'ID', 'country': 'Indonesia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'IN', 'country': 'India', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'IS', 'country': 'Iceland', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'HU', 'country': 'Hungary', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'HK', 'country': 'Hong Kong (SAR China)', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'HN', 'country': 'Honduras', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'HT', 'country': 'Haiti', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'GY', 'country': 'Guyana', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'GW', 'country': 'Guinea-Bissau', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'GN', 'country': 'Guinea', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'GT', 'country': 'Guatemala', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'GD', 'country': 'Grenada', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'GR', 'country': 'Greece', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'GH', 'country': 'Ghana', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'DE', 'country': 'Germany', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'GE', 'country': 'Georgia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'GM', 'country': 'The Gambia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'GA', 'country': 'Gabon', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'FR', 'country': 'France', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'FI', 'country': 'Finland', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'FJ', 'country': 'Fiji', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'ET', 'country': 'Ethiopia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'EE', 'country': 'Estonia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'ER', 'country': 'Eritrea', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'GQ', 'country': 'Equatorial Guinea', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'SV', 'country': 'El Salvador', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'EG', 'country': 'Egypt', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'EC', 'country': 'Ecuador', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'DO', 'country': 'Dominican Republic', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'DM', 'country': 'Dominica', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'DJ', 'country': 'Djibouti', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'DK', 'country': 'Denmark', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CZ', 'country': 'Czechia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CY', 'country': 'Cyprus', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CU', 'country': 'Cuba', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'HR', 'country': 'Croatia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CI', 'country': 'Cote d\\'Ivoire', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CR', 'country': 'Costa Rica', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CD', 'country': 'Congo (Dem. Rep.)', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CG', 'country': 'Congo (Rep.)', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'KM', 'country': 'Comoro Islands', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CO', 'country': 'Colombia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CN', 'country': 'China', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CL', 'country': 'Chile', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'TD', 'country': 'Chad', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CF', 'country': 'Central African Republic', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CV', 'country': 'Cape Verde Islands', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CA', 'country': 'Canada', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'CM', 'country': 'Cameroon', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'KH', 'country': 'Cambodia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BI', 'country': 'Burundi', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BF', 'country': 'Burkina Faso', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BG', 'country': 'Bulgaria', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BN', 'country': 'Brunei', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BR', 'country': 'Brazil', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BW', 'country': 'Botswana', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BA', 'country': 'Bosnia and Herzegovina', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BO', 'country': 'Bolivia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BT', 'country': 'Bhutan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BJ', 'country': 'Benin', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BZ', 'country': 'Belize', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BE', 'country': 'Belgium', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BY', 'country': 'Belarus', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BB', 'country': 'Barbados', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BD', 'country': 'Bangladesh', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BH', 'country': 'Bahrain', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'BS', 'country': 'Bahamas', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'AZ', 'country': 'Azerbaijan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'AT', 'country': 'Austria', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'AU', 'country': 'Australia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'AM', 'country': 'Armenia', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'AR', 'country': 'Argentina', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'AG', 'country': 'Antigua and Barbuda', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'AO', 'country': 'Angola', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'DZ', 'country': 'Algeria', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'AL', 'country': 'Albania', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        { 'code': 'AF', 'country': 'Afghanistan', 'visa_free_access_count': 1, 'visa_required_count': 1 },\n        ],\n        fields: [makeField('code'), makeField('country'), makeField('visa_free_access_count'), makeField('visa_required_count')],\n        metadata: {\n            'code': { type: Type.String, semanticType: 'Category', levels: ['AD', 'AE', 'AF', 'AG', 'AL', 'AM', 'AO', 'AR', 'AT', 'AU', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BN', 'BO', 'BR', 'BS', 'BT', 'BW', 'BY', 'BZ', 'CA', 'CD', 'CF', 'CG', 'CH', 'CI', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC'] },\n            'country': { type: Type.String, semanticType: 'Country', levels: ['Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola', 'Antigua and Barbuda', 'Argentina', 'Armenia', 'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain', 'Bangladesh', 'Barbados', 'Belarus', 'Belgium', 'Belize', 'Benin', 'Bhutan', 'Bolivia', 'Bosnia and Herzegovina', 'Botswana', 'Brazil', 'Brunei', 'Bulgaria', 'Burkina Faso', 'Burundi', 'Cambodia', 'Cameroon', 'Canada', 'Cape Verde Islands', 'Central African Republic', 'Chad', 'Chile', 'China', 'Colombia', 'Comoro Islands', 'Congo (Dem. Rep.)', 'Congo (Rep.)', 'Costa Rica', 'Cote d\\'Ivoire', 'Croatia', 'Cuba', 'Cyprus', 'Czechia', 'Denmark', 'Djibouti', 'Dominica', 'Dominican Republic'] },\n            'visa_free_access_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n            'visa_required_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('visa_free_access_count'),\n            y: makeEncodingItem('visa_required_count'),\n            color: makeEncodingItem('country'),\n        },\n        chartProperties: { opacity: 0.7 },\n    };\n}\n\nfunction gen_countryListsQ4RecGpt41(): TestCase {\n    // How is the number of visa‑free destinations distributed across all passports (are most passports highly restricted or br\n    // Score: 10/20 | The visualization is visually clear but based on an incorrectly computed visa_free_access_count, col\n    return {\n        title: 'country_lists_q4_rec-gpt-4.1',\n        description: 'Show the distribution of **visa_free_access_count** across all passports',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'visa_free_access_count': 1, 'count': 199 },\n        ],\n        fields: [makeField('visa_free_access_count'), makeField('count')],\n        metadata: {\n            'visa_free_access_count': { type: Type.Number, semanticType: 'Number', levels: [] },\n            'count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('visa_free_access_count'),\n            y: makeEncodingItem('count'),\n        },\n        chartProperties: { cornerRadius: 1 },\n    };\n}\n\nfunction gen_endangeredStatusQ1RecGpt41(): TestCase {\n    // What is the distribution of languages across the different endangered status categories?\n    // Score: 10/20 | Conceptually relevant bar chart showing distribution by endangered status, but a serious aggregation\n    return {\n        title: 'endangered_status_q1_rec-gpt-4.1',\n        description: 'Show count of languages per **status_label**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'status_label': 'extinct', 'count': 1341 },\n        { 'status_label': 'moribund', 'count': 461 },\n        { 'status_label': 'nearly extinct', 'count': 353 },\n        { 'status_label': 'not endangered', 'count': 2791 },\n        { 'status_label': 'shifting', 'count': 1933 },\n        { 'status_label': 'threatened', 'count': 1688 },\n        ],\n        fields: [makeField('status_label'), makeField('count')],\n        metadata: {\n            'status_label': { type: Type.String, semanticType: 'Status', levels: ['extinct', 'moribund', 'nearly extinct', 'not endangered', 'shifting', 'threatened'] },\n            'count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('status_label'),\n            y: makeEncodingItem('count'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_familiesQ1RecGpt51(): TestCase {\n    // How is the number of languages per family distributed across all families?\n    // Score: 4/20 | The chart is poorly suited to answering the question about the distribution of languages per family.\n    return {\n        title: 'families_q1_rec-gpt-5.1',\n        description: 'Summarize distribution of languages per **family**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'language_count': 1, 'family_count': 4832 },\n        ],\n        fields: [makeField('language_count'), makeField('family_count')],\n        metadata: {\n            'language_count': { type: Type.Number, semanticType: 'Number', levels: [] },\n            'family_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('language_count'),\n            y: makeEncodingItem('family_count'),\n        },\n        chartProperties: { cornerRadius: 2 },\n    };\n}\n\nfunction gen_familiesQ2RecGpt41(): TestCase {\n    // Which language families have the highest number of languages, and how do the top 15 families compare?\n    // Score: 7/20 | The visualization is technically legible but based on a flawed aggregation that assigns all families\n    return {\n        title: 'families_q2_rec-gpt-4.1',\n        description: 'Show top 15 families by language count',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'family': '!Ui', 'language_count': 1 },\n        { 'family': 'Oroch-Udihe', 'language_count': 1 },\n        { 'family': 'Orkon-West Ambrym', 'language_count': 1 },\n        { 'family': 'Oriya-Gauda-Kamrupa', 'language_count': 1 },\n        { 'family': 'Oriente Quechua', 'language_count': 1 },\n        { 'family': 'Oregon Athabaskan', 'language_count': 1 },\n        { 'family': 'Opon-Yukpan', 'language_count': 1 },\n        { 'family': 'Opata-Eudeve', 'language_count': 1 },\n        { 'family': 'Oninic', 'language_count': 1 },\n        { 'family': 'Onin-based pidgin', 'language_count': 1 },\n        { 'family': 'Ongamo-Maa', 'language_count': 1 },\n        { 'family': 'Ong-Ta\\'oih', 'language_count': 1 },\n        { 'family': 'One', 'language_count': 1 },\n        { 'family': 'Omosan', 'language_count': 1 },\n        { 'family': 'Omo-Tana', 'language_count': 1 },\n        ],\n        fields: [makeField('family'), makeField('language_count')],\n        metadata: {\n            'family': { type: Type.String, semanticType: 'Category', levels: ['!Ui', 'Omo-Tana', 'Omosan', 'One', 'Ong-Ta\\'oih', 'Ongamo-Maa', 'Onin-based pidgin', 'Oninic', 'Opata-Eudeve', 'Opon-Yukpan', 'Oregon Athabaskan', 'Oriente Quechua', 'Oriya-Gauda-Kamrupa', 'Orkon-West Ambrym', 'Oroch-Udihe'] },\n            'language_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('family'),\n            y: makeEncodingItem('language_count'),\n        },\n        chartProperties: { cornerRadius: 3 },\n    };\n}\n\nfunction gen_familiesQ2RecGpt51(): TestCase {\n    // Which language families have the highest number of languages, and how do the top 15 families compare?\n    // Score: 7/20 | The chart is a basic bar plot of language counts per family but fails to correctly aggregate and ran\n    return {\n        title: 'families_q2_rec-gpt-5.1',\n        description: 'Rank **family** values by language **count**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'family': '!Ui', 'language_count': 1 },\n        { 'family': 'Oroch-Udihe', 'language_count': 1 },\n        { 'family': 'Orkon-West Ambrym', 'language_count': 1 },\n        { 'family': 'Oriya-Gauda-Kamrupa', 'language_count': 1 },\n        { 'family': 'Oriente Quechua', 'language_count': 1 },\n        { 'family': 'Oregon Athabaskan', 'language_count': 1 },\n        { 'family': 'Opon-Yukpan', 'language_count': 1 },\n        { 'family': 'Opata-Eudeve', 'language_count': 1 },\n        { 'family': 'Oninic', 'language_count': 1 },\n        { 'family': 'Onin-based pidgin', 'language_count': 1 },\n        { 'family': 'Ongamo-Maa', 'language_count': 1 },\n        { 'family': 'Ong-Ta\\'oih', 'language_count': 1 },\n        { 'family': 'One', 'language_count': 1 },\n        { 'family': 'Omosan', 'language_count': 1 },\n        { 'family': 'Omo-Tana', 'language_count': 1 },\n        ],\n        fields: [makeField('family'), makeField('language_count')],\n        metadata: {\n            'family': { type: Type.String, semanticType: 'Category', levels: ['!Ui', 'Omo-Tana', 'Omosan', 'One', 'Ong-Ta\\'oih', 'Ongamo-Maa', 'Onin-based pidgin', 'Oninic', 'Opata-Eudeve', 'Opon-Yukpan', 'Oregon Athabaskan', 'Oriente Quechua', 'Oriya-Gauda-Kamrupa', 'Orkon-West Ambrym', 'Oroch-Udihe'] },\n            'language_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('family'),\n            y: makeEncodingItem('language_count'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_familiesQ3RecGpt51(): TestCase {\n    // What proportion of all languages is accounted for by the top 10 largest families compared with all other families combin\n    // Score: 10/20 | The chart is conceptually relevant and somewhat readable, but it contains a major error in the compu\n    return {\n        title: 'families_q3_rec-gpt-5.1',\n        description: 'Compare share of languages in **family** top 10 vs others',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'category': 'Other families', 'language_count': 4822, 'proportion': 0.9979304636 },\n        { 'category': 'Top 10 families', 'language_count': 10, 'proportion': 0.0020695364 },\n        ],\n        fields: [makeField('category'), makeField('language_count'), makeField('proportion')],\n        metadata: {\n            'category': { type: Type.String, semanticType: 'String', levels: ['Other families', 'Top 10 families'] },\n            'language_count': { type: Type.String, semanticType: 'Category', levels: ['10', '4822'] },\n            'proportion': { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('category'),\n            y: makeEncodingItem('proportion'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_familiesQ4RecGpt41(): TestCase {\n    // How does the count of languages differ between families with only one language and families with multiple languages?\n    // Score: 9/20 | The chart accurately plots a count for single-language families but fails to show the multiple-langu\n    return {\n        title: 'families_q4_rec-gpt-4.1',\n        description: 'Compare counts of families with only 1 vs multiple languages',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'family_language_count_group': 'Single language', 'count_of_families': 4832 },\n        ],\n        fields: [makeField('family_language_count_group'), makeField('count_of_families')],\n        metadata: {\n            'family_language_count_group': { type: Type.String, semanticType: 'Status', levels: ['Single language'] },\n            'count_of_families': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('family_language_count_group'),\n            y: makeEncodingItem('count_of_families'),\n        },\n        chartProperties: { cornerRadius: 6 },\n    };\n}\n\nfunction gen_familiesQ4RecGpt51(): TestCase {\n    // How does the count of languages differ between families with only one language and families with multiple languages?\n    // Score: 7/20 | The chart is incomplete for the task: it only displays total languages for single-language families,\n    return {\n        title: 'families_q4_rec-gpt-5.1',\n        description: 'Compare total **language** counts for single- vs multi-language **family** groups',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'family': null, 'language_count_per_family': null, 'family_type': 'Single-language families', 'total_languages': 4832, 'family_count': 4832 },\n        ],\n        fields: [makeField('family'), makeField('language_count_per_family'), makeField('family_type'), makeField('total_languages'), makeField('family_count')],\n        metadata: {\n            'family': { type: Type.String, semanticType: 'Category', levels: [] },\n            'language_count_per_family': { type: Type.String, semanticType: 'Category', levels: [] },\n            'family_type': { type: Type.String, semanticType: 'Category', levels: ['Single-language families'] },\n            'total_languages': { type: Type.Number, semanticType: 'Count', levels: [] },\n            'family_count': { type: Type.String, semanticType: 'Category', levels: ['4832'] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('family_type'),\n            y: makeEncodingItem('total_languages'),\n            color: makeEncodingItem('family_type'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_familiesQ5RecGpt41(): TestCase {\n    // Is there a relationship between whether a family name is compound (contains a hyphen) and the number of languages in tha\n    // Score: 5/20 | The chart attempts to compare language counts for compound vs simple family names but appears to hav\n    return {\n        title: 'families_q5_rec-gpt-4.1',\n        description: 'Compare count of languages for compound vs simple family names',\n        tags: ['debug', 'boxplot'],\n        chartType: 'Boxplot',\n        data: [\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': true, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        { 'is_compound': false, 'language_count': 1 },\n        ],\n        fields: [makeField('is_compound'), makeField('language_count')],\n        metadata: {\n            'is_compound': { type: Type.String, semanticType: 'Boolean', levels: ['False', 'True'] },\n            'language_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('is_compound'),\n            y: makeEncodingItem('language_count'),\n        },\n    };\n}\n\nfunction gen_fpiCodesQ5RecGpt51(): TestCase {\n    // For agencies that have multiple program_code ranges (e.g., 000-xxx, 005-xxx, 422-xxx), how do the counts of programs com\n    // Score: 2/20 | The visualization is effectively empty: while axis titles and a legend refer to the correct variable\n    return {\n        title: 'fpi_codes_q5_rec-gpt-5.1',\n        description: 'Compare **program_code** prefix range counts within each **agency_name**',\n        tags: ['debug', 'grouped-bar-chart'],\n        chartType: 'Grouped Bar Chart',\n        data: [\n\n        ],\n        fields: [makeField('agency_name'), makeField('program_range'), makeField('program_count')],\n        metadata: {\n            'agency_name': { type: Type.String, semanticType: 'Category', levels: [] },\n            'program_range': { type: Type.String, semanticType: 'Status', levels: [] },\n            'program_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('agency_name'),\n            y: makeEncodingItem('program_count'),\n            group: makeEncodingItem('program_range'),\n        },\n        chartProperties: { cornerRadius: 2 },\n    };\n}\n\nfunction gen_modelDatQ1RecGpt51(): TestCase {\n    // For a given study (single doi) and model_number, how do point estimates of the outcome vary across comparison groups (re\n    // Score: 10/20 | The chart partially meets the task by displaying point estimates across comparison groups, but it fa\n    return {\n        title: 'model_dat_q1_rec-gpt-5.1',\n        description: 'Filter one **doi**, **model_number**; compute group point estimates and CI widths',\n        tags: ['debug', 'lollipop-chart'],\n        chartType: 'Lollipop Chart',\n        data: [\n        { 'doi': '10.1097/AOG.0000000000003552', 'model_number': 1, 'outcome': 'Sterilization at the time of cesarean delivery', 'group_name': 'Black or African American', 'group_type': 'compare', 'point': 44.5, 'lower': -99.0, 'upper': -99.0, 'ci_width': null },\n        { 'doi': '10.1097/AOG.0000000000003552', 'model_number': 1, 'outcome': 'Sterilization at the time of cesarean delivery', 'group_name': 'White', 'group_type': 'compare', 'point': 34.4, 'lower': -99.0, 'upper': -99.0, 'ci_width': null },\n        { 'doi': '10.1097/AOG.0000000000003552', 'model_number': 1, 'outcome': 'Sterilization at the time of cesarean delivery', 'group_name': 'Hispanic', 'group_type': 'compare', 'point': 16.4, 'lower': -99.0, 'upper': -99.0, 'ci_width': null },\n        { 'doi': '10.1097/AOG.0000000000003552', 'model_number': 1, 'outcome': 'Sterilization at the time of cesarean delivery', 'group_name': 'Asian', 'group_type': 'compare', 'point': 1.6, 'lower': -99.0, 'upper': -99.0, 'ci_width': null },\n        { 'doi': '10.1097/AOG.0000000000003552', 'model_number': 1, 'outcome': 'Sterilization at the time of cesarean delivery', 'group_name': 'Other', 'group_type': 'compare', 'point': 3.1, 'lower': -99.0, 'upper': -99.0, 'ci_width': null },\n        ],\n        fields: [makeField('doi'), makeField('model_number'), makeField('outcome'), makeField('group_name'), makeField('group_type'), makeField('point'), makeField('lower'), makeField('upper'), makeField('ci_width')],\n        metadata: {\n            'doi': { type: Type.String, semanticType: 'Category', levels: ['10.1097/AOG.0000000000003552'] },\n            'model_number': { type: Type.String, semanticType: 'Category', levels: ['1'] },\n            'outcome': { type: Type.String, semanticType: 'Category', levels: ['Sterilization at the time of cesarean delivery'] },\n            'group_name': { type: Type.String, semanticType: 'String', levels: ['Asian', 'Black or African American', 'Hispanic', 'Other', 'White'] },\n            'group_type': { type: Type.String, semanticType: 'Status', levels: ['compare'] },\n            'point': { type: Type.Number, semanticType: 'Number', levels: [] },\n            'lower': { type: Type.String, semanticType: 'Category', levels: ['-99.0'] },\n            'upper': { type: Type.String, semanticType: 'Category', levels: ['-99.0'] },\n            'ci_width': { type: Type.Number, semanticType: 'Number', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('group_name'),\n            y: makeEncodingItem('point'),\n            color: makeEncodingItem('group_type'),\n            size: makeEncodingItem('ci_width'),\n        },\n    };\n}\n\nfunction gen_modelDatQ2RecGpt41(): TestCase {\n    // Among models that are stratified versus not stratified, how does the distribution of point estimates differ for a select\n    // Score: 7/20 | The visualization shows a single boxplot of point estimates for stratified models, but omits non-str\n    return {\n        title: 'model_dat_q2_rec-gpt-4.1',\n        description: 'Compare distributions of **point** by **stratified** for selected outcome/measure',\n        tags: ['debug', 'boxplot'],\n        chartType: 'Boxplot',\n        data: [\n        { 'stratified': 'Yes', 'point': 44.5 },\n        { 'stratified': 'Yes', 'point': 34.4 },\n        { 'stratified': 'Yes', 'point': 16.4 },\n        { 'stratified': 'Yes', 'point': 1.6 },\n        { 'stratified': 'Yes', 'point': 3.1 },\n        ],\n        fields: [makeField('stratified'), makeField('point')],\n        metadata: {\n            'stratified': { type: Type.String, semanticType: 'Boolean', levels: ['Yes'] },\n            'point': { type: Type.Number, semanticType: 'Number', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('stratified'),\n            y: makeEncodingItem('point'),\n        },\n    };\n}\n\nfunction gen_modelDatQ2RecGpt51(): TestCase {\n    // Among models that are stratified versus not stratified, how does the distribution of point estimates differ for a select\n    // Score: 10/20 | The chart partially addresses the task by plotting point estimates against stratified status, but it\n    return {\n        title: 'model_dat_q2_rec-gpt-5.1',\n        description: 'Compare **point** estimate distributions by **stratified** status',\n        tags: ['debug', 'boxplot'],\n        chartType: 'Boxplot',\n        data: [\n        { 'outcome': '2 year survival ovarian cancer', 'measure': 'HR', 'stratified': 'Yes', 'point': 0.9 },\n        { 'outcome': 'Human papillomavirus vaccination rate', 'measure': 'RR', 'stratified': 'No', 'point': 1.35 },\n        { 'outcome': 'D Haplotype frequency', 'measure': 'Percent', 'stratified': 'No', 'point': 12.0 },\n        { 'outcome': 'survival', 'measure': 'median years', 'stratified': 'Yes', 'point': 8.42 },\n        { 'outcome': 'cervical cancer', 'measure': 'RR', 'stratified': 'Yes', 'point': 2.9 },\n        { 'outcome': 'complicated vaginal delivery', 'measure': 'RR', 'stratified': 'Yes', 'point': 1.36 },\n        { 'outcome': 'Self-reported barrier to infertility care: referral source', 'measure': 'OR', 'stratified': 'No', 'point': 1.6 },\n        { 'outcome': 'Ectopic Pregnancy', 'measure': 'RR', 'stratified': 'Yes', 'point': 1.54 },\n        { 'outcome': 'overall mortality: nonendometrioid carcinoma', 'measure': 'HR', 'stratified': 'No', 'point': 1.39 },\n        { 'outcome': 'Number of abortions done in residency rotation', 'measure': 'Percent', 'stratified': 'Yes', 'point': 40.8 },\n        { 'outcome': 'clinical loss', 'measure': 'RR', 'stratified': 'No', 'point': 1.76 },\n        { 'outcome': 'Total cases 1975-2017', 'measure': 'count', 'stratified': 'Yes', 'point': 10548.0 },\n        { 'outcome': 'adherence to national comprehensive cancer network treatment guidelines in treatment recieved', 'measure': '% of adherent cases', 'stratified': 'No', 'point': 4.6 },\n        { 'outcome': 'diagnosed with invasive cervical cancer', 'measure': 'Percent', 'stratified': 'Yes', 'point': 77.1 },\n        { 'outcome': 'Maternal In-Hospital Death', 'measure': 'Incidence', 'stratified': 'Yes', 'point': 13.2 },\n        { 'outcome': 'preterm infant delivery < 34 weeks', 'measure': 'OR', 'stratified': 'No', 'point': 1.61 },\n        { 'outcome': 'Presence of Haplotype DE', 'measure': 'Percent', 'stratified': 'No', 'point': 100.0 },\n        { 'outcome': 'Presence of Haplotype I', 'measure': 'Percent', 'stratified': 'No', 'point': 67.0 },\n        { 'outcome': 'provider has talked with patient about vaccine (no)', 'measure': 'Percent', 'stratified': 'No', 'point': 36.4 },\n        { 'outcome': 'All cause mortality', 'measure': 'HR', 'stratified': 'Yes', 'point': 1.26 },\n        { 'outcome': 'Points of worry and concern in seeking infertility treatment: having a miscarriage', 'measure': 'OR', 'stratified': 'No', 'point': 12.7 },\n        { 'outcome': 'klabunde-modified charlson comorbidity score of 2', 'measure': 'Prevalence', 'stratified': 'Yes', 'point': 12.4 },\n        { 'outcome': 'Any medication to treat opioid use disorder in the year after delivery', 'measure': 'HR', 'stratified': 'No', 'point': 1.53 },\n        { 'outcome': 'J Haplotype frequency', 'measure': 'Percent', 'stratified': 'No', 'point': 4.0 },\n        { 'outcome': 'access to centers with high observed/expected ratios', 'measure': 'OR', 'stratified': 'No', 'point': 1.21 },\n        { 'outcome': 'All-cause mortality', 'measure': 'HR', 'stratified': 'Yes', 'point': 1.4 },\n        { 'outcome': 'Microbiota in endometrial tumors - Tepidimonas genus', 'measure': 'Percent', 'stratified': 'No', 'point': 0.9 },\n        { 'outcome': 'Clinical in vitro fertilization outcomes within state insurance mandate status group, 2014-2019: Live Birth Among Embryo Transfers', 'measure': 'OR', 'stratified': 'Yes', 'point': 0.88 },\n        { 'outcome': 'radiotherapy', 'measure': 'Percent', 'stratified': 'Yes', 'point': 76.6 },\n        { 'outcome': 'correlation coefficients between state-specific maternal demographic and maternal mortality in the united states, 2005-2014', 'measure': 'Simple Pearson\\'s Correlation Coefficient', 'stratified': 'No', 'point': -0.016 },\n        { 'outcome': 'association of race/ethnicity with question responses regarding contraceptive preferences and attitudes - preferences (extremely important): does not contain hormones', 'measure': 'OR', 'stratified': 'No', 'point': 1.72 },\n        { 'outcome': 'All cause mortality', 'measure': 'HR', 'stratified': 'Yes', 'point': 1.31 },\n        { 'outcome': 'abnormal pap test by pap test alone or cotesting', 'measure': 'Prevalence', 'stratified': 'Yes', 'point': 14.13 },\n        { 'outcome': 'cardiovascular severe maternal morbidity at delivery', 'measure': 'OR', 'stratified': 'No', 'point': 1.76 },\n        { 'outcome': 'Total Endometrial cancer', 'measure': 'Incidence', 'stratified': 'No', 'point': 85.57 },\n        { 'outcome': 'Pregnancy-related mortality', 'measure': 'Incidence', 'stratified': 'Yes', 'point': 25.3 },\n        { 'outcome': 'Cervical cancer trial accrual', 'measure': 'Absolute difference', 'stratified': 'No', 'point': 0.7 },\n        { 'outcome': 'MED12 mutations in leiomyoma', 'measure': 'Percent', 'stratified': 'No', 'point': 75.5 },\n        { 'outcome': 'Permanent Contraception Fulfillment at Hospital Discharge', 'measure': 'OR', 'stratified': 'No', 'point': 1.18 },\n        { 'outcome': 'Hysterectomy', 'measure': 'OR', 'stratified': 'Yes', 'point': 1.08 },\n        { 'outcome': 'age-standardized five-year net survival', 'measure': 'Percent', 'stratified': 'Yes', 'point': 46.8 },\n        { 'outcome': 'preterm infant delivery < 34 weeks', 'measure': 'OR', 'stratified': 'No', 'point': 2.02 },\n        { 'outcome': 'Primary cesarean delivery', 'measure': 'RR', 'stratified': 'Yes', 'point': 1.27 },\n        { 'outcome': 'Total Endometrial cancer', 'measure': 'Incidence', 'stratified': 'No', 'point': 86.34 },\n        { 'outcome': 'Insurance coverage', 'measure': 'Percent', 'stratified': 'Yes', 'point': 2.3 },\n        { 'outcome': 'Death', 'measure': 'HR', 'stratified': 'No', 'point': 1.2 },\n        { 'outcome': 'complication occurrence', 'measure': 'OR', 'stratified': 'No', 'point': 1.37 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'measure': 'Percent', 'stratified': 'Yes', 'point': 25.5 },\n        { 'outcome': 'Number of abortions done in residency rotation', 'measure': 'Percent', 'stratified': 'Yes', 'point': 46.8 },\n        { 'outcome': 'provider has talked with patient about vaccine (no)', 'measure': 'Percent', 'stratified': 'No', 'point': 40.9 },\n        { 'outcome': 'assisted reproduction technology outcomes', 'measure': 'OR', 'stratified': 'Yes', 'point': 1.04 },\n        { 'outcome': '5-year overall survival', 'measure': 'Percent', 'stratified': 'No', 'point': 85.0 },\n        { 'outcome': 'endometrial cancer five-year survival', 'measure': 'Percent', 'stratified': 'No', 'point': 80.3 },\n        { 'outcome': 'Primary cesarean delivery', 'measure': 'RR', 'stratified': 'Yes', 'point': 1.15 },\n        { 'outcome': 'Laparoscopic', 'measure': 'OR', 'stratified': 'No', 'point': 0.81 },\n        { 'outcome': 'cesarean delivery', 'measure': 'OR', 'stratified': 'No', 'point': 0.92 },\n        { 'outcome': 'Permanent Contraception Fulfillment at 365 Days Postpartum', 'measure': 'OR', 'stratified': 'No', 'point': 0.68 },\n        { 'outcome': 'Seeking treatment for urinary incontinence in visits 7, 8, or 9', 'measure': 'OR', 'stratified': 'Yes', 'point': 1.85 },\n        { 'outcome': 'endometrial cancer mortality: high-grade endometrioid carcinoma', 'measure': 'HR', 'stratified': 'No', 'point': 1.03 },\n        { 'outcome': 'debris', 'measure': '%', 'stratified': 'No', 'point': 2.6 },\n        { 'outcome': 'pregnancy-related mortality', 'measure': 'rate per 100,000 live births', 'stratified': 'Yes', 'point': 7.2 },\n        { 'outcome': '1 h or more between complete dilation and initiation of pushing', 'measure': 'OR', 'stratified': 'No', 'point': 1.23 },\n        { 'outcome': 'Minimally-invasive surgical approach', 'measure': 'OR', 'stratified': 'No', 'point': 0.6 },\n        { 'outcome': 'observed infant death with anomalies', 'measure': 'Prevalence', 'stratified': 'Yes', 'point': 204.9 },\n        { 'outcome': 'severe maternal morbidity per 10,000 delivery hospitalizations', 'measure': 'Incidence', 'stratified': 'No', 'point': 231.1 },\n        { 'outcome': 'Primary Cesarean Delivery', 'measure': 'RR', 'stratified': 'Yes', 'point': 1.17 },\n        { 'outcome': 'Composite perioperative complication', 'measure': 'OR', 'stratified': 'Yes', 'point': 0.76 },\n        { 'outcome': 'Surgical procedure for endometriosis - Laparoscopic excision or fulguration of pelvic lesions', 'measure': 'Percent', 'stratified': 'No', 'point': 19.7 },\n        { 'outcome': 'high density lipoprotein cholesterol levels (<= 50 mg/dL)', 'measure': 'Prevalence', 'stratified': 'Yes', 'point': 42.9 },\n        { 'outcome': 'receiving national comprehensive cancer network guideline–adherent treatment for gynecologic cancer', 'measure': '%', 'stratified': 'No', 'point': 79.1 },\n        { 'outcome': 'Excessive Gestational Weight Gain', 'measure': 'OR', 'stratified': 'Yes', 'point': 0.85 },\n        { 'outcome': 'overall survival', 'measure': 'HR', 'stratified': 'No', 'point': 1.0 },\n        { 'outcome': 'any method of contraceptive use', 'measure': 'OR', 'stratified': 'Yes', 'point': 0.76 },\n        { 'outcome': 'Seeking treatment for urinary incontinence in visits 7, 8, or 9', 'measure': 'OR', 'stratified': 'Yes', 'point': 0.58 },\n        { 'outcome': 'Indication for oocyte cryopreservation - Fertility preservation (not otherwise specified) or no reason given', 'measure': 'Percent', 'stratified': 'No', 'point': 24.3 },\n        { 'outcome': 'Self-reported barrier to infertility care: ability to bear children rests on', 'measure': 'OR', 'stratified': 'No', 'point': 3.1 },\n        { 'outcome': 'Maternal morbidity composite- Venous thromboembolism', 'measure': 'Percent', 'stratified': 'No', 'point': 0.1 },\n        { 'outcome': 'Primary Cesarean Delivery', 'measure': 'RR', 'stratified': 'Yes', 'point': 1.56 },\n        { 'outcome': 'estimated difference in mortality', 'measure': 'Absolute difference', 'stratified': 'Yes', 'point': 42.1 },\n        { 'outcome': 'Points of worry and concern in seeking infertility treatment: having an ectopic pregnancy', 'measure': 'OR', 'stratified': 'No', 'point': 11.3 },\n        { 'outcome': 'Intention to provide abortion', 'measure': 'OR', 'stratified': 'No', 'point': 1.69 },\n        { 'outcome': 'assisted reproduction technology outcomes', 'measure': 'OR', 'stratified': 'Yes', 'point': 1.47 },\n        { 'outcome': 'Total Endometrial cancer', 'measure': 'Incidence', 'stratified': 'No', 'point': 100.1 },\n        { 'outcome': 'contacting a papanicolaou test referral before 1 month of follow-up', 'measure': 'OR', 'stratified': 'No', 'point': 2.04 },\n        { 'outcome': 'Opportunistic Salpingectomy by Adoption: Hysterectomy Procedures', 'measure': 'RR', 'stratified': 'Yes', 'point': 0.93 },\n        { 'outcome': 'BMI cut-off value sensitivity', 'measure': 'Percent', 'stratified': 'Yes', 'point': 81.3 },\n        { 'outcome': 'Peritoneal excision', 'measure': 'OR', 'stratified': 'Yes', 'point': 0.77 },\n        { 'outcome': 'in hospital mortality', 'measure': 'RR', 'stratified': 'Yes', 'point': 0.94 },\n        { 'outcome': 'Primary cesarean delivery', 'measure': 'RR', 'stratified': 'Yes', 'point': 0.96 },\n        { 'outcome': 'Vulvar cancer mortality', 'measure': 'HR', 'stratified': 'Yes', 'point': 0.66 },\n        { 'outcome': 'Fertility preferences have changed due to the pandemic', 'measure': 'OR', 'stratified': 'No', 'point': 1.1 },\n        { 'outcome': 'Increased Hazard of Death Within 5 Years Among Patients with Advanced Stage Disease', 'measure': 'HR', 'stratified': 'Yes', 'point': 0.8 },\n        { 'outcome': 'systemic therapy', 'measure': 'Percent', 'stratified': 'Yes', 'point': 23.3 },\n        { 'outcome': 'Live birth', 'measure': 'RR', 'stratified': 'Yes', 'point': 1.02 },\n        { 'outcome': 'Clinical in vitro fertilization outcomes within state insurance mandate status group, 2014-2019: Cumulative Live Birth', 'measure': 'OR', 'stratified': 'Yes', 'point': 0.93 },\n        { 'outcome': 'death from other causes', 'measure': 'HR', 'stratified': 'No', 'point': 1.06 },\n        { 'outcome': 'hysterectomy with bilateral oophorectomy', 'measure': 'Incidence', 'stratified': 'Yes', 'point': 18.6 },\n        { 'outcome': 'Opportunistic Salpingectomy by Adoption: Hysterectomy Procedures', 'measure': 'RR', 'stratified': 'Yes', 'point': 0.93 },\n        { 'outcome': 'does not enroll in hospice', 'measure': 'OR', 'stratified': 'No', 'point': 1.44 },\n        { 'outcome': 'low-birth-weight among singletons conceived with assisted reproductive technology', 'measure': 'RR', 'stratified': 'Yes', 'point': 1.26 },\n        { 'outcome': 'endometrial cancer mortality: all histologic subtypes', 'measure': 'HR', 'stratified': 'No', 'point': 1.22 },\n        { 'outcome': 'live birth rate', 'measure': 'RR', 'stratified': 'No', 'point': 0.74 },\n        { 'outcome': 'receiving treatment at a High volume hospital', 'measure': 'OR', 'stratified': 'No', 'point': 0.85 },\n        { 'outcome': 'pregnancy-related mortality ratio', 'measure': 'number of pregnancy-related deaths per 100,000 live births', 'stratified': 'Yes', 'point': 16.1 },\n        { 'outcome': 'assisted reproduction technology outcomes', 'measure': 'OR', 'stratified': 'Yes', 'point': 1.21 },\n        { 'outcome': 'distant cervical cancer', 'measure': 'RR', 'stratified': 'Yes', 'point': 1.6 },\n        { 'outcome': '2 year survival cervical cancer', 'measure': 'HR', 'stratified': 'Yes', 'point': 0.91 },\n        { 'outcome': 'all-cause death', 'measure': 'HR', 'stratified': 'Yes', 'point': 0.68 },\n        { 'outcome': 'association among race and ethnicity and receipt of oxycodone tablet equivalents', 'measure': 'Predicted mean value', 'stratified': 'Yes', 'point': 5.9 },\n        { 'outcome': 'Ovarian cancer mortality', 'measure': 'HR', 'stratified': 'Yes', 'point': 1.29 },\n        { 'outcome': 'Clinical pregnancy', 'measure': 'RR', 'stratified': 'Yes', 'point': 0.97 },\n        { 'outcome': 'endometrial cancer 2-year survival', 'measure': 'Percent', 'stratified': 'Yes', 'point': 51.0 },\n        { 'outcome': 'individual complication occurrence - sepsis', 'measure': 'Percent', 'stratified': 'No', 'point': 0.1 },\n        { 'outcome': 'Cesarean indication- Labor Dystocia', 'measure': 'RR', 'stratified': 'No', 'point': 0.93 },\n        { 'outcome': '5 year disease specific survival', 'measure': 'Percent', 'stratified': 'No', 'point': 47.3 },\n        { 'outcome': 'Self-reported barrier to infertility care: ability to bear children rests on', 'measure': 'OR', 'stratified': 'No', 'point': 0.3 },\n        { 'outcome': 'Gestational diabetes', 'measure': 'average annual percent change', 'stratified': 'Yes', 'point': 4.3 },\n        { 'outcome': 'Absence of Haplotype DE', 'measure': 'Percent', 'stratified': 'No', 'point': 42.0 },\n        { 'outcome': 'Uninsurance at Birth', 'measure': 'OR', 'stratified': 'Yes', 'point': 2.08 },\n        { 'outcome': 'endometrial cancer 2-year survival', 'measure': 'Percent', 'stratified': 'Yes', 'point': 97.4 },\n        { 'outcome': 'no surgery', 'measure': 'OR', 'stratified': 'Yes', 'point': 2.04 },\n        { 'outcome': 'Increased Hazard of Death Within 5 Years Among Patients with Advanced Stage Disease who underwent surgical treatment', 'measure': 'HR', 'stratified': 'Yes', 'point': 1.27 },\n        { 'outcome': 'contraceptive use: any method vs. no method', 'measure': 'OR', 'stratified': 'No', 'point': 0.65 },\n        { 'outcome': 'Ectopic pregnancy rate', 'measure': 'Percent', 'stratified': 'Yes', 'point': 1.19 },\n        { 'outcome': 'insurance status by race-ethnicity', 'measure': 'weighted proportions', 'stratified': 'Yes', 'point': 65.8 },\n        { 'outcome': 'readmission risk among women with endometrial cancer', 'measure': 'OR', 'stratified': 'No', 'point': 1.13 },\n        { 'outcome': 'endometrial cancer 2-year survival', 'measure': 'Percent', 'stratified': 'Yes', 'point': 96.5 },\n        { 'outcome': 'Ectopic pregnancy rate', 'measure': 'Percent', 'stratified': 'Yes', 'point': 1.9 },\n        { 'outcome': 'Clinical in vitro fertilization outcomes within state insurance mandate status group, 2014-2019: Cycle Cancellation', 'measure': 'OR', 'stratified': 'Yes', 'point': 1.09 },\n        { 'outcome': 'death from endometrial cancer', 'measure': 'Prevalence', 'stratified': 'Yes', 'point': 25.1 },\n        { 'outcome': 'grade: unknown', 'measure': 'Percent', 'stratified': 'Yes', 'point': 8.2 },\n        { 'outcome': 'preterm birth', 'measure': 'OR', 'stratified': 'Yes', 'point': 1.45 },\n        { 'outcome': 'funneling', 'measure': '%', 'stratified': 'No', 'point': 0.5 },\n        { 'outcome': 'Vaginal delivery', 'measure': 'OR', 'stratified': 'No', 'point': 0.8 },\n        { 'outcome': 'cesarean delivery', 'measure': 'OR', 'stratified': 'No', 'point': 0.95 },\n        { 'outcome': 'puerperal infection', 'measure': 'RR', 'stratified': 'Yes', 'point': 2.85 },\n        { 'outcome': 'survival', 'measure': 'median years', 'stratified': 'Yes', 'point': 3.25 },\n        { 'outcome': 'access to centers with high observed/expected ratios', 'measure': 'OR', 'stratified': 'No', 'point': 0.91 },\n        { 'outcome': 'odds of cesarean delivery by maternal race and ethnicity in the multiparous cohort', 'measure': 'OR', 'stratified': 'No', 'point': 1.51 },\n        { 'outcome': 'Have ever heard of IUDS', 'measure': 'OR', 'stratified': 'No', 'point': 0.14 },\n        { 'outcome': 'age of diagnosis', 'measure': 'median', 'stratified': 'Yes', 'point': 69.0 },\n        { 'outcome': 'average annual decline in ectopic pregnancy mortality ratio during 1980–2007', 'measure': '%', 'stratified': 'No', 'point': 3.5 },\n        { 'outcome': 'risk for severe morbidity (including transfusion)', 'measure': 'RR', 'stratified': 'No', 'point': 1.14 },\n        { 'outcome': 'associated number of severe maternal morbidity cases', 'measure': 'Product of the excess SMM rate and the number of discharges in the racial and ethnic category', 'stratified': 'No', 'point': 93344.0 },\n        { 'outcome': 'stillbirth', 'measure': 'rate per 10,000 ongoing pregnancies', 'stratified': 'Yes', 'point': 6.2 },\n        { 'outcome': 'glucose (>= 100 mg/dL)', 'measure': 'Prevalence', 'stratified': 'Yes', 'point': 9.0 },\n        { 'outcome': 'All cause mortality', 'measure': 'HR', 'stratified': 'Yes', 'point': 1.39 },\n        { 'outcome': 'Ectopic Pregnancy', 'measure': 'RR', 'stratified': 'Yes', 'point': 1.04 },\n        { 'outcome': 'willingness to participate before and after educational intervention', 'measure': 'Percentage of sample willing to participate in clinical trials', 'stratified': 'No', 'point': 33.0 },\n        { 'outcome': 'medical comorbidities of white and black women undergoing any hysterectomy and laparoscopic hysterectomy', 'measure': 'Comorbidity %', 'stratified': 'Yes', 'point': 25.9 },\n        { 'outcome': 'no vaccination history', 'measure': 'Percent', 'stratified': 'No', 'point': 55.2 },\n        { 'outcome': 'surgery refusal', 'measure': 'OR', 'stratified': 'No', 'point': 1.16 },\n        { 'outcome': 'endometrial cancer survival', 'measure': 'HR', 'stratified': 'Yes', 'point': 1.92 },\n        { 'outcome': 'Association between patient characteristics and missed opportunities', 'measure': 'OR', 'stratified': 'No', 'point': 1.08 },\n        { 'outcome': 'Death from other causes', 'measure': 'HR', 'stratified': 'No', 'point': 0.95 },\n        { 'outcome': 'Composite perioperative complication', 'measure': 'OR', 'stratified': 'No', 'point': 1.09 },\n        { 'outcome': 'Lymphadenectomy', 'measure': 'OR', 'stratified': 'No', 'point': 0.81 },\n        { 'outcome': '5-min Apgar score less than 5', 'measure': 'RR', 'stratified': 'No', 'point': 1.35 },\n        { 'outcome': 'Live birth', 'measure': 'RR', 'stratified': 'No', 'point': 0.97 },\n        { 'outcome': 'preterm infant delivery < 34 weeks', 'measure': 'OR', 'stratified': 'No', 'point': 1.88 },\n        { 'outcome': 'Agreement with the statement regarding the effect of stress on the ability to bear children', 'measure': 'Mean point estimate', 'stratified': 'No', 'point': 52.8 },\n        { 'outcome': 'ovarian cancer treatment', 'measure': 'OR', 'stratified': 'No', 'point': 0.48 },\n        { 'outcome': 'stage: distant', 'measure': 'Percent', 'stratified': 'Yes', 'point': 2.8 },\n        { 'outcome': 'stage: regional', 'measure': 'Percent', 'stratified': 'No', 'point': 13.6 },\n        { 'outcome': 'Agreement with the statement regarding the effect of timing/age on the ability to bear children', 'measure': 'Mean point estimate', 'stratified': 'No', 'point': 30.7 },\n        { 'outcome': 'bilateral oophorectomy alone in 2012', 'measure': 'rate per 10,000 women', 'stratified': 'No', 'point': 1.1 },\n        { 'outcome': 'u.s. women\\'s use of long-acting reversible contraception methods', 'measure': 'OR', 'stratified': 'Yes', 'point': 1.4 },\n        { 'outcome': 'obstetric thrombosis or embolism', 'measure': 'RR', 'stratified': 'Yes', 'point': 0.86 },\n        { 'outcome': 'severe maternal morbidity without blood transfusion per 10,000 delivery', 'measure': 'Incidence', 'stratified': 'No', 'point': 50.2 },\n        { 'outcome': 'Cervical cancer trial accural', 'measure': 'Absolute difference', 'stratified': 'No', 'point': -8.5 },\n        { 'outcome': 'Live birth', 'measure': 'RR', 'stratified': 'No', 'point': 1.05 },\n        { 'outcome': 'readmission risk among women with endometrial cancer', 'measure': 'OR', 'stratified': 'Yes', 'point': 0.96 },\n        { 'outcome': 'Health Professional Shortage Area; Medically Underserved Areas/Populations', 'measure': 'Percent', 'stratified': 'No', 'point': 37.5 },\n        { 'outcome': 'Clinical pregnancy', 'measure': 'RR', 'stratified': 'No', 'point': 0.81 },\n        { 'outcome': 'pregnancy-related mortality', 'measure': 'rate per 100,000 live births', 'stratified': 'Yes', 'point': 10.7 },\n        { 'outcome': 'survival', 'measure': 'median years', 'stratified': 'Yes', 'point': 4.75 },\n        { 'outcome': 'Increased Hazard of Death Within 5 Years Among Patients with Advanced Stage Disease', 'measure': 'HR', 'stratified': 'Yes', 'point': 1.07 },\n        { 'outcome': 'individual complication occurrence - sepsis', 'measure': 'Percent', 'stratified': 'No', 'point': 0.0 },\n        { 'outcome': '2 year survival vulvar cancer', 'measure': 'HR', 'stratified': 'Yes', 'point': 1.18 },\n        { 'outcome': 'Primary cesarean delivery', 'measure': 'RR', 'stratified': 'Yes', 'point': 1.19 },\n        { 'outcome': 'Difference of human papillomavirus vaccination rates before and after the mandate', 'measure': 'Percent difference', 'stratified': 'No', 'point': 5.1 },\n        { 'outcome': 'Primary Cesarean Delivery', 'measure': 'RR', 'stratified': 'Yes', 'point': 1.21 },\n        { 'outcome': 'travel distance over time based on sociodemographic characteristics', 'measure': 'travel distance in miles', 'stratified': 'Yes', 'point': 2.6 },\n        { 'outcome': 'patients receiving ovarian cancer related Surgical procedures', 'measure': 'Percent', 'stratified': 'Yes', 'point': 10.4 },\n        { 'outcome': 'maternal in-hospital mortality', 'measure': 'RR', 'stratified': 'No', 'point': 1.44 },\n        { 'outcome': 'Somatic testing performed', 'measure': 'OR', 'stratified': 'No', 'point': 1.48 },\n        { 'outcome': 'hospitalization for COVID-19', 'measure': 'OR', 'stratified': 'No', 'point': 2.95 },\n        { 'outcome': 'readmission risk among women with endometrial cancer', 'measure': 'OR', 'stratified': 'No', 'point': 0.76 },\n        { 'outcome': 'open compared with minimally invasive surgery', 'measure': 'OR', 'stratified': 'No', 'point': 2.39 },\n        { 'outcome': 'survival rate', 'measure': 'Prevalence', 'stratified': 'Yes', 'point': 97.2 },\n        { 'outcome': '30-Day Major Postoperative Complications', 'measure': 'RR', 'stratified': 'No', 'point': 0.71 },\n        { 'outcome': 'Mean cervical cancer survival', 'measure': 'Months', 'stratified': 'No', 'point': 85.7 },\n        { 'outcome': 'brachytherapy use', 'measure': 'OR', 'stratified': 'No', 'point': 0.87 },\n        { 'outcome': 'Duration of Radiation Therapy', 'measure': 'Percent', 'stratified': 'Yes', 'point': 57.0 },\n        { 'outcome': 'Laparotomy', 'measure': 'OR', 'stratified': 'No', 'point': 1.85 },\n        { 'outcome': 'Primary Cesarean Delivery', 'measure': 'RR', 'stratified': 'Yes', 'point': 0.92 },\n        { 'outcome': '2 year survival ovarian cancer', 'measure': 'HR', 'stratified': 'Yes', 'point': 0.98 },\n        { 'outcome': 'bilateral oophorectomy alone', 'measure': 'Incidence', 'stratified': 'Yes', 'point': 0.7 },\n        { 'outcome': 'Disease-specific mortality', 'measure': 'HR', 'stratified': 'Yes', 'point': 1.4 },\n        { 'outcome': 'baseline BMI', 'measure': 'Percent', 'stratified': 'Yes', 'point': 58.0 },\n        ],\n        fields: [makeField('outcome'), makeField('measure'), makeField('stratified'), makeField('point')],\n        metadata: {\n            'outcome': { type: Type.String, semanticType: 'String', levels: ['1 h or more between complete dilation and initiation of pushing', '2 year survival cervical cancer', '2 year survival ovarian cancer', '2 year survival vulvar cancer', '30-Day Major Postoperative Complications', '5 year disease specific survival', '5-min Apgar score less than 5', '5-year overall survival', 'Absence of Haplotype DE', 'Agreement with the statement regarding the effect of stress on the ability to bear children', 'Agreement with the statement regarding the effect of timing/age on the ability to bear children', 'All cause mortality', 'All-cause mortality', 'Any medication to treat opioid use disorder in the year after delivery', 'Association between patient characteristics and missed opportunities', 'BMI cut-off value sensitivity', 'Cervical cancer trial accrual', 'Cervical cancer trial accural', 'Cesarean indication- Labor Dystocia', 'Clinical in vitro fertilization outcomes within state insurance mandate status group, 2014-2019: Cumulative Live Birth', 'Clinical in vitro fertilization outcomes within state insurance mandate status group, 2014-2019: Cycle Cancellation', 'Clinical in vitro fertilization outcomes within state insurance mandate status group, 2014-2019: Live Birth Among Embryo Transfers', 'Clinical pregnancy', 'Composite perioperative complication', 'D Haplotype frequency', 'Death', 'Death from other causes', 'Difference of human papillomavirus vaccination rates before and after the mandate', 'Disease-specific mortality', 'Duration of Radiation Therapy', 'Ectopic Pregnancy', 'Ectopic pregnancy rate', 'Excessive Gestational Weight Gain', 'Fertility preferences have changed due to the pandemic', 'Gestational diabetes', 'Have ever heard of IUDS', 'Health Professional Shortage Area; Medically Underserved Areas/Populations', 'Human papillomavirus vaccination rate', 'Hysterectomy', 'Increased Hazard of Death Within 5 Years Among Patients with Advanced Stage Disease', 'Increased Hazard of Death Within 5 Years Among Patients with Advanced Stage Disease who underwent surgical treatment', 'Indication for oocyte cryopreservation - Fertility preservation (not otherwise specified) or no reason given', 'Insurance coverage', 'Intention to provide abortion', 'J Haplotype frequency', 'Laparoscopic', 'Laparotomy', 'Live birth', 'Lymphadenectomy', 'MED12 mutations in leiomyoma'] },\n            'measure': { type: Type.String, semanticType: 'String', levels: ['%', '% of adherent cases', 'Absolute difference', 'Comorbidity %', 'HR', 'Incidence', 'Mean point estimate', 'Months', 'OR', 'Percent', 'Percent difference', 'Percentage of sample willing to participate in clinical trials', 'Predicted mean value', 'Prevalence', 'Product of the excess SMM rate and the number of discharges in the racial and ethnic category', 'RR', 'Simple Pearson\\'s Correlation Coefficient', 'average annual percent change', 'count', 'median', 'median years', 'number of pregnancy-related deaths per 100,000 live births', 'rate per 10,000 ongoing pregnancies', 'rate per 10,000 women', 'rate per 100,000 live births', 'travel distance in miles', 'weighted proportions'] },\n            'stratified': { type: Type.String, semanticType: 'Status', levels: ['No', 'Yes'] },\n            'point': { type: Type.Number, semanticType: 'Number', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('stratified'),\n            y: makeEncodingItem('point'),\n            color: makeEncodingItem('stratified'),\n        },\n    };\n}\n\nfunction gen_modelDatQ4RecGpt41(): TestCase {\n    // How do point estimates and their confidence intervals differ between subanalysis groups (subgrp) and the main analysis (\n    // Score: 7/20 | The visualization is technically rendered but conceptually misaligned with the task: it omits confid\n    return {\n        title: 'model_dat_q4_rec-gpt-4.1',\n        description: 'Compare **point** and confidence interval by **subgrp** vs main',\n        tags: ['debug', 'grouped-bar-chart'],\n        chartType: 'Grouped Bar Chart',\n        data: [\n        { 'outcome': 'overall survival', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 2.83, 'lower': 1.4, 'upper': 5.69 },\n        { 'outcome': 'Composite maternal adverse outcome without transfusion', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'Primary Cesarean Deliveries', 'point': 0.95, 'lower': 0.85, 'upper': 1.07 },\n        { 'outcome': 'All-cause mortality', 'compare': 'African American', 'subanalysis': 'No', 'subgrp': null, 'point': 1.03, 'lower': 0.9, 'upper': 1.17 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.15, 'lower': 0.92, 'upper': 1.43 },\n        { 'outcome': 'Ovarian cancer trial accrual', 'compare': 'Uninsured', 'subanalysis': 'Yes', 'subgrp': 'Black', 'point': 1.8, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'No adjuvant treatment', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 1.16, 'lower': 0.95, 'upper': 1.41 },\n        { 'outcome': 'Death', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 0.93, 'lower': 0.67, 'upper': 1.29 },\n        { 'outcome': 'Composite maternal adverse outcome', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 1.0, 'lower': 0.96, 'upper': 1.04 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Asian', 'subanalysis': 'No', 'subgrp': null, 'point': 0.99, 'lower': 0.99, 'upper': 1.0 },\n        { 'outcome': 'clinical pregnancy', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 0.94, 'lower': 0.85, 'upper': 1.04 },\n        { 'outcome': 'Clear understanding that diagnostic testing was optional', 'compare': 'Latina (English speaking)', 'subanalysis': 'Yes', 'subgrp': 'Race, ethnicity and language', 'point': 0.28, 'lower': 0.13, 'upper': 0.61 },\n        { 'outcome': 'live birth', 'compare': 'Asian', 'subanalysis': 'No', 'subgrp': null, 'point': 0.98, 'lower': 0.9, 'upper': 1.07 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': 'multiparous', 'point': 2.1, 'lower': 1.71, 'upper': 2.58 },\n        { 'outcome': 'All-cause mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': '<60 y', 'point': 1.96, 'lower': 1.35, 'upper': 2.85 },\n        { 'outcome': 'All-cause mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': 'All ages', 'point': 0.83, 'lower': 0.64, 'upper': 1.08 },\n        { 'outcome': 'Clear understanding that screening was optional', 'compare': 'African American or Black', 'subanalysis': 'Yes', 'subgrp': 'Race, ethnicity and language', 'point': 0.5, 'lower': 0.28, 'upper': 0.9 },\n        { 'outcome': 'Mortality differences', 'compare': 'us born hispanics', 'subanalysis': 'No', 'subgrp': null, 'point': 1.63, 'lower': 1.49, 'upper': 1.78 },\n        { 'outcome': 'Other and mixed Endometrial cancer', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': '1997-2001', 'point': 0.96, 'lower': 0.64, 'upper': 1.28 },\n        { 'outcome': 'Vulvar cancer mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': '>=60 y', 'point': 0.54, 'lower': 0.41, 'upper': 0.73 },\n        { 'outcome': 'live birth', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'embryos tested with preimplantation genetic testing', 'point': 1.01, 'lower': 0.81, 'upper': 1.26 },\n        { 'outcome': 'All-cause mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': '<60 y', 'point': 1.11, 'lower': 0.69, 'upper': 1.79 },\n        { 'outcome': 'composite maternal adverse outcome', 'compare': 'Non-Hispanic black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.33, 'lower': 1.26, 'upper': 1.41 },\n        { 'outcome': 'Mortality differences', 'compare': 'Foreign born hispanics', 'subanalysis': 'Yes', 'subgrp': '2006-2010', 'point': 2.05, 'lower': 1.76, 'upper': 2.38 },\n        { 'outcome': 'overall survival based on the cox proportional hazard model', 'compare': 'Other', 'subanalysis': 'No', 'subgrp': null, 'point': 0.82, 'lower': 0.74, 'upper': 0.92 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 1.87, 'lower': 1.76, 'upper': 1.99 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': 'multiparous', 'point': 1.67, 'lower': 1.37, 'upper': 2.02 },\n        { 'outcome': 'Mortality differences', 'compare': 'us born hispanics', 'subanalysis': 'No', 'subgrp': null, 'point': 1.57, 'lower': 1.43, 'upper': 1.71 },\n        { 'outcome': 'Total Endometrial cancer', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': '1997-2001', 'point': 87.51, 'lower': 74.0, 'upper': 101.0 },\n        { 'outcome': 'live birth', 'compare': 'Asian', 'subanalysis': 'No', 'subgrp': null, 'point': 0.97, 'lower': 0.9, 'upper': 1.05 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.27, 'lower': 1.14, 'upper': 1.41 },\n        { 'outcome': '30-Day Major Postoperative Complications', 'compare': 'Non-Hispanic Black', 'subanalysis': 'Yes', 'subgrp': 'Healthy sample', 'point': 1.78, 'lower': 1.17, 'upper': 2.69 },\n        { 'outcome': 'High Risk Endometrial cancer', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': '2012-2014', 'point': 50.35, 'lower': 44.23, 'upper': 56.46 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'Treatment', 'point': 1.05, 'lower': 0.72, 'upper': 1.52 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'multiparous', 'point': 0.96, 'lower': 0.79, 'upper': 1.16 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'Diagnosis', 'point': 1.63, 'lower': 1.27, 'upper': 2.11 },\n        { 'outcome': 'High Risk Endometrial cancer', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 51.34, 'lower': 47.3, 'upper': 55.4 },\n        { 'outcome': 'Mortality differences', 'compare': 'us born hispanics', 'subanalysis': 'Yes', 'subgrp': '2006-2010', 'point': 1.16, 'lower': 0.99, 'upper': 1.36 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'multiparous', 'point': 1.5, 'lower': 1.2, 'upper': 1.87 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 1.26, 'lower': 1.18, 'upper': 1.42 },\n        { 'outcome': 'Clear understanding that diagnostic testing was optional', 'compare': 'other (Asian, Pacific Islander, Native American, Mixed, other)', 'subanalysis': 'No', 'subgrp': null, 'point': 0.5, 'lower': 0.25, 'upper': 0.99 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': 'nulliparous', 'point': 0.95, 'lower': 0.84, 'upper': 1.07 },\n        { 'outcome': 'Clear understanding that screening was optional', 'compare': 'Latina (Spanish speaking)', 'subanalysis': 'Yes', 'subgrp': 'Race, ethnicity and language', 'point': 0.8, 'lower': 0.51, 'upper': 1.27 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'No', 'subgrp': null, 'point': 1.16, 'lower': 1.03, 'upper': 1.3 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'multiparous', 'point': 1.43, 'lower': 0.89, 'upper': 2.3 },\n        { 'outcome': 'low birthweight', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.64, 'lower': 1.38, 'upper': 1.96 },\n        { 'outcome': 'Presence of fibroid', 'compare': 'White', 'subanalysis': 'No', 'subgrp': null, 'point': 6.9, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'All-cause mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': '<60 y', 'point': 1.91, 'lower': 1.26, 'upper': 2.91 },\n        { 'outcome': 'Uterine cancer trial accural', 'compare': 'Insured-Medicaid', 'subanalysis': 'Yes', 'subgrp': 'Black', 'point': 8.2, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'clinical pregnancy', 'compare': 'Asian', 'subanalysis': 'No', 'subgrp': null, 'point': 31.4, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'Correct recall of whether screening was done', 'compare': 'African American or Black', 'subanalysis': 'Yes', 'subgrp': 'Race, ethnicity and language', 'point': 0.29, 'lower': 0.12, 'upper': 0.68 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'No', 'subgrp': null, 'point': 1.15, 'lower': 1.05, 'upper': 1.26 },\n        { 'outcome': 'Cervical cancer trial accural', 'compare': 'Privately insured', 'subanalysis': 'Yes', 'subgrp': 'Black', 'point': -22.2, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'clinical pregnancy', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'embryos tested with preimplantation genetic testing', 'point': 1.01, 'lower': 0.84, 'upper': 1.2 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.0, 'lower': 0.87, 'upper': 1.15 },\n        { 'outcome': 'overall mortality', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'women with high-grade endometrioid carcinoma', 'point': 0.355, 'lower': 0.318, 'upper': 0.396 },\n        { 'outcome': 'multiple pregnancy', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'embryos tested with preimplantation genetic testing', 'point': 0.52, 'lower': 0.13, 'upper': 2.07 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'No', 'subgrp': null, 'point': 1.61, 'lower': 1.51, 'upper': 1.71 },\n        { 'outcome': 'endometrial cancer mortality', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'women with high-grade endometrioid carcinoma', 'point': 0.246, 'lower': 0.212, 'upper': 0.28 },\n        { 'outcome': 'Mortality differences', 'compare': 'Birthplace unknown hispanics', 'subanalysis': 'No', 'subgrp': null, 'point': 0.73, 'lower': 0.66, 'upper': 0.81 },\n        { 'outcome': 'Carcinosarcoma Endometrial cancer', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': '1997-2001', 'point': 4.21, 'lower': 3.36, 'upper': 5.05 },\n        { 'outcome': 'All-cause mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': '>=60 y', 'point': 0.82, 'lower': 0.56, 'upper': 1.21 },\n        { 'outcome': 'Other and mixed Endometrial cancer', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': '1997-2001', 'point': 3.49, 'lower': -6.13, 'upper': 13.1 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.07, 'lower': 0.79, 'upper': 1.44 },\n        { 'outcome': 'Cervical cancer trial accural', 'compare': 'Uninsured', 'subanalysis': 'No', 'subgrp': null, 'point': 6.9, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 2.8, 'lower': 2.63, 'upper': 3.0 },\n        { 'outcome': 'Composite maternal adverse outcome', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 1.06, 'lower': 1.02, 'upper': 1.1 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Asian', 'subanalysis': 'No', 'subgrp': null, 'point': 1.25, 'lower': 1.15, 'upper': 1.35 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 17.3, 'lower': 16.2, 'upper': 18.4 },\n        { 'outcome': 'Total Endometrial cancer', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': '1997-2001', 'point': 101.79, 'lower': 96.1, 'upper': 107.4 },\n        { 'outcome': 'overall mortality', 'compare': 'non-Hispanic Black', 'subanalysis': 'Yes', 'subgrp': 'women with nonendometrioid carcinoma', 'point': 0.63, 'lower': 0.6, 'upper': 0.659 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'No', 'subgrp': null, 'point': 1.47, 'lower': 1.36, 'upper': 1.58 },\n        { 'outcome': 'High Risk Endometrial cancer', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': '2002-2006', 'point': 27.83, 'lower': 25.58, 'upper': 30.07 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'No', 'subgrp': null, 'point': 1.77, 'lower': 1.45, 'upper': 2.17 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'No', 'subgrp': null, 'point': 0.3, 'lower': 0.28, 'upper': 0.32 },\n        { 'outcome': 'Mortality differences', 'compare': 'Foreign born hispanics', 'subanalysis': 'No', 'subgrp': null, 'point': 1.61, 'lower': 1.46, 'upper': 1.76 },\n        { 'outcome': 'Presence of fibroid', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': 'Pedunculated', 'point': 0.0, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'Carcinosarcoma Endometrial cancer', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': '2007-2011', 'point': 3.53, 'lower': 3.18, 'upper': 3.89 },\n        { 'outcome': 'low birthweight', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'modified intent to treat', 'point': 2.04, 'lower': 1.23, 'upper': 3.41 },\n        { 'outcome': 'overall survival', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.14, 'lower': 1.05, 'upper': 1.24 },\n        { 'outcome': 'Low Risk Endometrial cancer', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': '1997-2001', 'point': 78.71, 'lower': 73.24, 'upper': 84.18 },\n        { 'outcome': 'clinical loss', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 0.74, 'lower': 0.49, 'upper': 1.12 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 11.0, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'High Risk Endometrial cancer', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': '2007-2011', 'point': 24.71, 'lower': 23.08, 'upper': 26.35 },\n        { 'outcome': 'Uterine cancer trial accural', 'compare': 'Privately insured', 'subanalysis': 'Yes', 'subgrp': 'Black', 'point': -15.3, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'No', 'subgrp': null, 'point': 1.08, 'lower': 0.98, 'upper': 1.19 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.08, 'lower': 0.96, 'upper': 1.21 },\n        { 'outcome': 'composite maternal adverse outcome', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'Gestational Age 24-36 wk', 'point': 0.75, 'lower': 0.63, 'upper': 0.89 },\n        { 'outcome': 'Mortality differences', 'compare': 'us born hispanics', 'subanalysis': 'No', 'subgrp': null, 'point': 1.81, 'lower': 1.65, 'upper': 1.98 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'multiparous', 'point': 1.36, 'lower': 1.02, 'upper': 1.81 },\n        { 'outcome': 'Antenatal depression screen completion', 'compare': 'Black Individuals', 'subanalysis': 'No', 'subgrp': null, 'point': 2.45, 'lower': 1.87, 'upper': 3.21 },\n        { 'outcome': 'Other and mixed Endometrial cancer', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': '2002-2006', 'point': 4.08, 'lower': 2.29, 'upper': 5.87 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'Treatment', 'point': 1.16, 'lower': 0.81, 'upper': 1.66 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'nulliparous', 'point': 1.32, 'lower': 1.2, 'upper': 1.44 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': 'nulliparous', 'point': 1.15, 'lower': 1.03, 'upper': 1.27 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.23, 'lower': 1.17, 'upper': 1.29 },\n        { 'outcome': 'Carcinosarcoma Endometrial cancer', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': '2002-2006', 'point': 10.03, 'lower': 6.15, 'upper': 13.92 },\n        { 'outcome': 'Mortality differences', 'compare': 'us born hispanics', 'subanalysis': 'Yes', 'subgrp': '2006-2010', 'point': 2.09, 'lower': 1.78, 'upper': 2.45 },\n        { 'outcome': 'endometrial cancer five-year survival', 'compare': 'Birthplace-unknown Hispanics', 'subanalysis': 'Yes', 'subgrp': '2006-2010', 'point': 92.3, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'nulliparous', 'point': 1.1, 'lower': 0.62, 'upper': 1.96 },\n        { 'outcome': 'Mortality differences', 'compare': 'us born hispanics', 'subanalysis': 'Yes', 'subgrp': '2006-2010', 'point': 1.57, 'lower': 1.34, 'upper': 1.84 },\n        { 'outcome': 'Vulvar cancer mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': '>=60 y', 'point': 0.32, 'lower': 0.18, 'upper': 0.57 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': 'nulliparous', 'point': 0.96, 'lower': 0.9, 'upper': 1.04 },\n        { 'outcome': 'Uterine cancer trial accural', 'compare': 'Insured-Medicaid', 'subanalysis': 'Yes', 'subgrp': 'White', 'point': -2.5, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'Disease-specific death', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'Surgically treated cases', 'point': 2.15, 'lower': 1.39, 'upper': 3.32 },\n        { 'outcome': 'Presence of fibroid', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': 'Intramural', 'point': 50.0, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 2.74, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'Ovarian cancer trial accrual', 'compare': 'Unknown', 'subanalysis': 'Yes', 'subgrp': 'White', 'point': 0.0, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'excluding blood transfusions', 'point': 1.99, 'lower': 1.17, 'upper': 3.36 },\n        { 'outcome': 'clinical pregnancy', 'compare': 'Asian', 'subanalysis': 'No', 'subgrp': null, 'point': 1.0, 'lower': 0.93, 'upper': 1.06 },\n        { 'outcome': 'Presence of fibroid', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'Pedunculated', 'point': 9.1, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'endometrial cancer mortality', 'compare': 'non-Hispanic Black', 'subanalysis': 'Yes', 'subgrp': 'women with nonendometrioid carcinoma', 'point': 0.471, 'lower': 0.442, 'upper': 0.496 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': 'multiparous', 'point': 0.97, 'lower': 0.8, 'upper': 1.17 },\n        { 'outcome': 'endometrial cancer mortality', 'compare': 'non-Hispanic Black', 'subanalysis': 'Yes', 'subgrp': 'women with high-grade endometrioid carcinoma', 'point': 0.33, 'lower': 0.295, 'upper': 0.365 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': 'nulliparous', 'point': 1.13, 'lower': 1.07, 'upper': 1.2 },\n        { 'outcome': 'peripartum hysterectomy', 'compare': 'Unknown', 'subanalysis': 'Yes', 'subgrp': 'low-risk patients', 'point': 1.36, 'lower': 0.79, 'upper': 2.34 },\n        { 'outcome': 'overall mortality', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 0.429, 'lower': 0.399, 'upper': 0.459 },\n        { 'outcome': 'Death', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 1.2, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'cervical insufficiency', 'compare': 'American Indian/Alaskan Native', 'subanalysis': 'No', 'subgrp': null, 'point': 1.16, 'lower': 0.79, 'upper': 1.7 },\n        { 'outcome': 'Vulvar cancer mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': '>=60 y', 'point': 0.59, 'lower': 0.36, 'upper': 0.96 },\n        { 'outcome': 'Clear understanding that diagnostic testing was optional', 'compare': 'other (Asian, Pacific Islander, Native American, Mixed, other)', 'subanalysis': 'Yes', 'subgrp': 'Race, ethnicity and language', 'point': 0.35, 'lower': 0.19, 'upper': 0.66 },\n        { 'outcome': 'All-cause mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': 'All ages', 'point': 0.82, 'lower': 0.62, 'upper': 1.07 },\n        { 'outcome': 'Composite maternal adverse outcome without transfusion', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 0.99, 'lower': 0.91, 'upper': 1.08 },\n        { 'outcome': 'Endometrial G3 cancer', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': '2002-2006', 'point': 18.2, 'lower': 16.69, 'upper': 19.71 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'Treatment', 'point': 1.53, 'lower': 1.04, 'upper': 2.26 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 25.8, 'lower': 23.5, 'upper': 28.0 },\n        { 'outcome': 'Carcinosarcoma Endometrial cancer', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 11.9, 'lower': 10.5, 'upper': 13.3 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': 'nulliparous', 'point': 1.28, 'lower': 1.09, 'upper': 1.49 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': 'nulliparous', 'point': 1.17, 'lower': 1.1, 'upper': 1.25 },\n        { 'outcome': 'Uterine cancer trial accural', 'compare': 'Unknown', 'subanalysis': 'Yes', 'subgrp': 'Black', 'point': 2.4, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'clinical loss', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.59, 'lower': 1.28, 'upper': 1.99 },\n        { 'outcome': 'Overall death', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'Surgically treated cases', 'point': 1.39, 'lower': 1.11, 'upper': 1.75 },\n        { 'outcome': 'clinical pregnancy', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'embryos tested with preimplantation genetic testing', 'point': 0.99, 'lower': 0.81, 'upper': 1.2 },\n        { 'outcome': 'All-cause mortality', 'compare': 'African American', 'subanalysis': 'No', 'subgrp': null, 'point': 1.3, 'lower': 1.1, 'upper': 1.5 },\n        { 'outcome': 'Composite maternal adverse outcome without transfusion', 'compare': 'Non-Hispanic Black', 'subanalysis': 'Yes', 'subgrp': 'Primary Cesarean Deliveries', 'point': 1.05, 'lower': 0.93, 'upper': 1.19 },\n        { 'outcome': 'preterm birth', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'modified intent to treat', 'point': 1.37, 'lower': 0.84, 'upper': 2.26 },\n        { 'outcome': 'spontaneous preterm birth', 'compare': 'Other', 'subanalysis': 'No', 'subgrp': null, 'point': 6.1, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 16.9, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'spontaneous preterm birth', 'compare': 'Other', 'subanalysis': 'Yes', 'subgrp': null, 'point': 0.72, 'lower': 0.22, 'upper': 2.38 },\n        { 'outcome': 'preterm birth', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.53, 'lower': 1.29, 'upper': 1.82 },\n        { 'outcome': 'Serous Endometrial cancer', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 14.04, 'lower': 12.3, 'upper': 15.8 },\n        { 'outcome': 'High Risk Endometrial cancer', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': '2002-2006', 'point': 45.36, 'lower': 36.79, 'upper': 53.93 },\n        { 'outcome': 'overall survival based on the cox proportional hazard model', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 0.68, 'lower': 0.62, 'upper': 0.74 },\n        { 'outcome': '30-Day Major Postoperative Complications', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'Healthy sample', 'point': 0.72, 'lower': 0.42, 'upper': 1.22 },\n        { 'outcome': 'low birthweight', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'modified intent to treat', 'point': 1.74, 'lower': 0.97, 'upper': 3.13 },\n        { 'outcome': 'Vulvar cancer mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': 'All ages', 'point': 0.65, 'lower': 0.43, 'upper': 0.97 },\n        { 'outcome': 'Mortality differences', 'compare': 'Birthplace unknown hispanics', 'subanalysis': 'Yes', 'subgrp': '2000-2005', 'point': 0.71, 'lower': 0.62, 'upper': 0.81 },\n        { 'outcome': 'Vulvar cancer mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': 'All ages', 'point': 0.67, 'lower': 0.53, 'upper': 0.84 },\n        { 'outcome': 'Composite maternal adverse outcome', 'compare': 'Non-Hispanic Black', 'subanalysis': 'No', 'subgrp': null, 'point': 0.85, 'lower': 0.8, 'upper': 0.89 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'nulliparous', 'point': 1.21, 'lower': 1.06, 'upper': 1.37 },\n        { 'outcome': 'endometrial cancer five-year survival', 'compare': 'Foreign born Hispanics', 'subanalysis': 'Yes', 'subgrp': '2006-2010', 'point': 76.9, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.67, 'lower': 1.3, 'upper': 2.15 },\n        { 'outcome': 'live birth', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 16.9, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'No', 'subgrp': null, 'point': 1.08, 'lower': 0.98, 'upper': 1.18 },\n        { 'outcome': 'High Risk Endometrial cancer', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': '1997-2001', 'point': 31.44, 'lower': 27.99, 'upper': 34.88 },\n        { 'outcome': 'clinical pregnancy', 'compare': 'Asian', 'subanalysis': 'No', 'subgrp': null, 'point': 1.02, 'lower': 0.95, 'upper': 1.1 },\n        { 'outcome': 'clinical loss', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'embryos tested with preimplantation genetic testing', 'point': 1.76, 'lower': 1.0, 'upper': 3.07 },\n        { 'outcome': '30-Day Major Postoperative Complications', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 0.71, 'lower': 0.47, 'upper': 1.09 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'nulliparous', 'point': 0.93, 'lower': 0.8, 'upper': 1.08 },\n        { 'outcome': 'Vulvar cancer mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': 'All ages', 'point': 0.77, 'lower': 0.49, 'upper': 1.22 },\n        { 'outcome': 'All-cause mortality', 'compare': 'African American', 'subanalysis': 'No', 'subgrp': null, 'point': 1.55, 'lower': 1.18, 'upper': 2.03 },\n        { 'outcome': 'endometrial cancer mortality', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'women with nonendometrioid carcinoma', 'point': 0.405, 'lower': 0.364, 'upper': 0.446 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'No', 'subgrp': null, 'point': 1.32, 'lower': 1.24, 'upper': 1.4 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'nulliparous', 'point': 1.17, 'lower': 1.06, 'upper': 1.29 },\n        { 'outcome': 'Ovarian cancer trial accrual', 'compare': 'Privately insured', 'subanalysis': 'No', 'subgrp': null, 'point': 9.7, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'Antenatal depression screen completion', 'compare': 'Black Individuals', 'subanalysis': 'No', 'subgrp': null, 'point': 1.24, 'lower': 0.9, 'upper': 1.7 },\n        { 'outcome': 'Ovarian cancer trial accrual', 'compare': 'Privately insured', 'subanalysis': 'Yes', 'subgrp': 'White', 'point': 14.0, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'preterm birth', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'modified intent to treat', 'point': 1.05, 'lower': 0.62, 'upper': 1.79 },\n        { 'outcome': 'Clear understanding that diagnostic testing was optional', 'compare': 'African American or Black', 'subanalysis': 'Yes', 'subgrp': 'Race, ethnicity and language', 'point': 0.2, 'lower': 0.11, 'upper': 0.36 },\n        { 'outcome': 'Vulvar cancer mortality', 'compare': 'African American', 'subanalysis': 'Yes', 'subgrp': '<60 y', 'point': 0.72, 'lower': 0.26, 'upper': 1.99 },\n        { 'outcome': 'Carcinosarcoma Endometrial cancer', 'compare': 'White', 'subanalysis': 'No', 'subgrp': null, 'point': 3.51, 'lower': 3.3, 'upper': 3.7 },\n        { 'outcome': 'clinical loss', 'compare': 'Hispanic', 'subanalysis': 'No', 'subgrp': null, 'point': 1.03, 'lower': 0.77, 'upper': 1.38 },\n        { 'outcome': 'Correct recall of whether screening was done', 'compare': 'African American or Black', 'subanalysis': 'No', 'subgrp': null, 'point': 0.66, 'lower': 0.23, 'upper': 1.89 },\n        { 'outcome': 'Correct recall of whether screening was done', 'compare': 'Latina (Spanish speaking)', 'subanalysis': 'Yes', 'subgrp': 'Race, ethnicity and language', 'point': 0.58, 'lower': 0.27, 'upper': 1.23 },\n        { 'outcome': 'Vulvar cancer mortality', 'compare': 'African American', 'subanalysis': 'No', 'subgrp': null, 'point': 0.65, 'lower': 0.43, 'upper': 0.97 },\n        { 'outcome': 'Low Risk Endometrial cancer', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 39.08, 'lower': 36.3, 'upper': 41.8 },\n        { 'outcome': 'multiple pregnancy', 'compare': 'Asian', 'subanalysis': 'No', 'subgrp': null, 'point': 21.8, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'clinical loss', 'compare': 'Asian', 'subanalysis': 'Yes', 'subgrp': 'embryos tested with preimplantation genetic testing', 'point': 0.98, 'lower': 0.64, 'upper': 1.31 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': 'multiparous', 'point': 1.19, 'lower': 1.02, 'upper': 1.38 },\n        { 'outcome': 'peripartum hysterectomy', 'compare': 'Unknown', 'subanalysis': 'No', 'subgrp': null, 'point': 0.97, 'lower': 0.88, 'upper': 1.07 },\n        { 'outcome': 'Mortality differences', 'compare': 'Foreign born hispanics', 'subanalysis': 'Yes', 'subgrp': '2006-2010', 'point': 1.61, 'lower': 1.38, 'upper': 1.87 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'nulliparous', 'point': 1.0, 'lower': 0.85, 'upper': 1.18 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 3.02, 'lower': 2.88, 'upper': 3.17 },\n        { 'outcome': 'composite maternal adverse outcome', 'compare': 'Non-Hispanic black', 'subanalysis': 'Yes', 'subgrp': 'Gestational Age 24-36 wk', 'point': 1.19, 'lower': 1.04, 'upper': 1.36 },\n        { 'outcome': 'Serous Endometrial cancer', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': '2007-2011', 'point': 12.82, 'lower': 9.03, 'upper': 16.61 },\n        { 'outcome': 'cervical insufficiency', 'compare': 'Asian/Pacific Islander', 'subanalysis': 'Yes', 'subgrp': 'multiparous women', 'point': 0.97, 'lower': 0.81, 'upper': 1.16 },\n        { 'outcome': 'Total Endometrial cancer', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': '2012-2014', 'point': 101.75, 'lower': 85.8, 'upper': 117.1 },\n        { 'outcome': 'Composite neonatal adverse outcome', 'compare': 'Non-Hispanic Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.12, 'lower': 1.1, 'upper': 1.15 },\n        { 'outcome': 'Ovarian cancer trial accrual', 'compare': 'Unknown', 'subanalysis': 'Yes', 'subgrp': 'Black', 'point': 1.2, 'lower': -99.0, 'upper': -99.0 },\n        { 'outcome': 'No adjuvant treatment', 'compare': 'non-Hispanic Black', 'subanalysis': 'No', 'subgrp': null, 'point': 0.96, 'lower': 0.84, 'upper': 1.11 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'Diagnosis', 'point': 1.17, 'lower': 0.91, 'upper': 1.49 },\n        { 'outcome': 'Primary cesarean delivery', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': 'multiparous', 'point': 3.23, 'lower': 2.52, 'upper': 4.13 },\n        { 'outcome': 'All-cause mortality', 'compare': 'African American', 'subanalysis': 'No', 'subgrp': null, 'point': 0.9, 'lower': 0.71, 'upper': 1.15 },\n        { 'outcome': 'Other and mixed Endometrial cancer', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': '2007-2011', 'point': 6.99, 'lower': 5.28, 'upper': 8.7 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Black', 'subanalysis': 'No', 'subgrp': null, 'point': 1.76, 'lower': 1.69, 'upper': 1.84 },\n        { 'outcome': '30-Day Major Postoperative Complications', 'compare': 'Non-Hispanic Black', 'subanalysis': 'Yes', 'subgrp': 'Healthy sample', 'point': 1.64, 'lower': 1.08, 'upper': 2.5 },\n        { 'outcome': 'Carcinosarcoma Endometrial cancer', 'compare': 'White', 'subanalysis': 'Yes', 'subgrp': '2002-2006', 'point': 3.49, 'lower': 3.0, 'upper': 3.97 },\n        { 'outcome': 'Antenatal depression screen completion', 'compare': 'Black Individuals', 'subanalysis': 'Yes', 'subgrp': 'those with a positive screen for depression', 'point': 0.7, 'lower': 0.3, 'upper': 1.62 },\n        { 'outcome': 'multiple pregnancy', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'embryos tested with preimplantation genetic testing', 'point': 1.9, 'lower': 1.04, 'upper': 3.46 },\n        { 'outcome': 'Carcinosarcoma Endometrial cancer', 'compare': 'Black', 'subanalysis': 'Yes', 'subgrp': '2012-2014', 'point': 12.6, 'lower': 10.51, 'upper': 14.69 },\n        { 'outcome': 'multiple pregnancy', 'compare': 'Hispanic', 'subanalysis': 'Yes', 'subgrp': 'embryos tested with preimplantation genetic testing', 'point': 1.88, 'lower': 1.04, 'upper': 3.38 },\n        ],\n        fields: [makeField('outcome'), makeField('compare'), makeField('subanalysis'), makeField('subgrp'), makeField('point'), makeField('lower'), makeField('upper')],\n        metadata: {\n            'outcome': { type: Type.String, semanticType: 'Category', levels: ['30-Day Major Postoperative Complications', 'All-cause mortality', 'Antenatal depression screen completion', 'Carcinosarcoma Endometrial cancer', 'Cervical cancer trial accural', 'Clear understanding that diagnostic testing was optional', 'Clear understanding that screening was optional', 'Composite maternal adverse outcome', 'Composite maternal adverse outcome without transfusion', 'Composite neonatal adverse outcome', 'Correct recall of whether screening was done', 'Death', 'Disease-specific death', 'Endometrial G3 cancer', 'High Risk Endometrial cancer', 'Low Risk Endometrial cancer', 'Mortality differences', 'No adjuvant treatment', 'Other and mixed Endometrial cancer', 'Ovarian cancer trial accrual', 'Overall death', 'Presence of fibroid', 'Primary cesarean delivery', 'Serous Endometrial cancer', 'Total Endometrial cancer', 'Uterine cancer trial accural', 'Vulvar cancer mortality', 'cervical insufficiency', 'clinical loss', 'clinical pregnancy', 'composite maternal adverse outcome', 'endometrial cancer five-year survival', 'endometrial cancer mortality', 'live birth', 'low birthweight', 'multiple pregnancy', 'overall mortality', 'overall survival', 'overall survival based on the cox proportional hazard model', 'peripartum hysterectomy', 'preterm birth', 'severe maternal morbidity', 'spontaneous preterm birth'] },\n            'compare': { type: Type.String, semanticType: 'Category', levels: ['African American', 'African American or Black', 'American Indian/Alaskan Native', 'Asian', 'Asian/Pacific Islander', 'Birthplace unknown hispanics', 'Birthplace-unknown Hispanics', 'Black', 'Black Individuals', 'Foreign born Hispanics', 'Foreign born hispanics', 'Hispanic', 'Insured-Medicaid', 'Latina (English speaking)', 'Latina (Spanish speaking)', 'Non-Hispanic Black', 'Non-Hispanic black', 'Other', 'Privately insured', 'Uninsured', 'Unknown', 'White', 'non-Hispanic Black', 'other (Asian, Pacific Islander, Native American, Mixed, other)', 'us born hispanics'] },\n            'subanalysis': { type: Type.String, semanticType: 'Status', levels: ['No', 'Yes'] },\n            'subgrp': { type: Type.String, semanticType: 'Category', levels: ['1997-2001', '2000-2005', '2002-2006', '2006-2010', '2007-2011', '2012-2014', '<60 y', '>=60 y', 'All ages', 'Black', 'Diagnosis', 'Gestational Age 24-36 wk', 'Healthy sample', 'Intramural', 'Pedunculated', 'Primary Cesarean Deliveries', 'Race, ethnicity and language', 'Surgically treated cases', 'Treatment', 'White', 'embryos tested with preimplantation genetic testing', 'excluding blood transfusions', 'low-risk patients', 'modified intent to treat', 'multiparous', 'multiparous women', 'nulliparous', 'those with a positive screen for depression', 'women with high-grade endometrioid carcinoma', 'women with nonendometrioid carcinoma'] },\n            'point': { type: Type.Number, semanticType: 'Number', levels: [] },\n            'lower': { type: Type.String, semanticType: 'Category', levels: ['-6.13', '-99.0', '0.11', '0.12', '0.13', '0.18', '0.19', '0.212', '0.22', '0.23', '0.25', '0.26', '0.27', '0.28', '0.295', '0.3', '0.318', '0.36', '0.364', '0.399', '0.41', '0.42', '0.43', '0.442', '0.47', '0.49', '0.51', '0.53', '0.56', '0.6', '0.62', '0.63', '0.64', '0.66', '0.67', '0.69', '0.71', '0.72', '0.74', '0.77', '0.79', '0.8', '0.81', '0.84', '0.85', '0.87', '0.88', '0.89', '0.9', '0.91'] },\n            'upper': { type: Type.String, semanticType: 'Category', levels: ['-99.0', '0.28', '0.32', '0.36', '0.365', '0.396', '0.446', '0.459', '0.496', '0.57', '0.61', '0.659', '0.66', '0.68', '0.73', '0.74', '0.81', '0.84', '0.89', '0.9', '0.92', '0.96', '0.97', '0.99', '1.0', '1.04', '1.05', '1.06', '1.07', '1.08', '1.09', '1.1', '1.11', '1.12', '1.15', '1.16', '1.17', '1.18', '1.19', '1.2', '1.21', '1.22', '1.23', '1.24', '1.25', '1.26', '1.27', '1.28', '1.29', '1.3'] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('compare'),\n            y: makeEncodingItem('point'),\n            group: makeEncodingItem('subanalysis'),\n            column: makeEncodingItem('outcome'),\n        },\n        chartProperties: { cornerRadius: 5 },\n    };\n}\n\nfunction gen_modelDatQ5RecGpt41(): TestCase {\n    // For models reporting percent-type measures, what is the composition of point estimates across race/ethnicity-related com\n    // Score: 10/20 | The visualization is partially relevant and technically sound but conceptually misaligned with the r\n    return {\n        title: 'model_dat_q5_rec-gpt-4.1',\n        description: 'Show distribution of **point** by **compare** for selected **outcome** (percent-type measures)',\n        tags: ['debug', 'boxplot'],\n        chartType: 'Boxplot',\n        data: [\n        { 'outcome': 'individual complication occurrence - reoperation', 'compare': 'Black', 'point': 0.4 },\n        { 'outcome': 'Presence of fibroid', 'compare': 'White', 'point': 50.0 },\n        { 'outcome': 'Eligible, not enrolled among patients with a trial available', 'compare': 'White', 'point': 40.0 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'compare': 'Non-Hispanic: Black', 'point': 55.7 },\n        { 'outcome': 'endometrial cancer 2-year survival difference', 'compare': 'Non-Hispanic: Black', 'point': -10.6 },\n        { 'outcome': 'endometrial cancer 2-year survival', 'compare': 'Non-Hispanic: Black', 'point': 97.0 },\n        { 'outcome': 'Need for 2nd line chemotherapy', 'compare': 'African American', 'point': 26.3 },\n        { 'outcome': 'vaccination in same month as abnormal pap test result', 'compare': 'hispanic', 'point': 0.0 },\n        { 'outcome': 'Gestational diabetes', 'compare': 'American Indian', 'point': 7.7 },\n        { 'outcome': 'Indication for oocyte cryopreservation - diminished ovarian reserve', 'compare': 'Hispanic', 'point': 27.0 },\n        { 'outcome': 'Heard of HPV Vaccine (Yes)', 'compare': 'african american', 'point': 76.0 },\n        { 'outcome': 'Microbiota in endometrial tumors - Firmicutes phylum', 'compare': 'Obese white', 'point': 0.44 },\n        { 'outcome': 'cervical length cutoff > 30 mm', 'compare': 'Black', 'point': 9.0 },\n        { 'outcome': 'Not eligible among patients with a trial available', 'compare': 'Hawaiian/PI', 'point': 0.0 },\n        { 'outcome': 'Not eligible among patients with a trial available', 'compare': 'White', 'point': 14.0 },\n        { 'outcome': 'heard of HPV Vaccine (No)', 'compare': 'non-hispanic', 'point': 12.5 },\n        { 'outcome': 'endometrial cancer 2-year survival difference', 'compare': 'Non-Hispanic: Black', 'point': -3.0 },\n        { 'outcome': 'endometrial cancer 2-year survival', 'compare': 'Non-Hispanic: White', 'point': 86.6 },\n        { 'outcome': 'No complications', 'compare': 'non-Hispanic Black', 'point': 50.0 },\n        { 'outcome': 'Microbiota in endometrial tumors - Dietzia genus', 'compare': 'Obese black', 'point': 0.78 },\n        { 'outcome': 'Eligible, not enrolled among patients with a trial available', 'compare': 'Native American', 'point': 12.5 },\n        { 'outcome': 'age-standardized five-year net survival', 'compare': 'Black', 'point': 56.7 },\n        { 'outcome': 'Seasonal influenza vaccination', 'compare': 'White, non-Hispanic', 'point': 41.0 },\n        { 'outcome': 'Cesarean birth - Labor dystocia', 'compare': 'Hispanic', 'point': 9.2 },\n        { 'outcome': 'cervical length cutoff < 25 mm', 'compare': 'White', 'point': 1.0 },\n        { 'outcome': 'endometrial cancer 2-year survival', 'compare': 'Non-Hispanic: Black', 'point': 96.5 },\n        { 'outcome': 'willingness to participate before and after educational intervention', 'compare': 'Other', 'point': 66.0 },\n        { 'outcome': 'Microbiota in endometrial tumors - Cyanobacteria phylum', 'compare': 'Obese black', 'point': 1.9 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'compare': 'Non-Hispanic: Black', 'point': 58.7 },\n        { 'outcome': 'germline testing performed', 'compare': 'Other/unknown', 'point': 41.18 },\n        { 'outcome': 'Acute renal failure or insufficiency', 'compare': 'Black', 'point': 4.1 },\n        { 'outcome': 'cervical length cutoff > 30 mm', 'compare': 'Hispanic', 'point': 4.5 },\n        { 'outcome': 'histology: endometrioid', 'compare': 'White', 'point': 76.4 },\n        { 'outcome': 'Pulmonary', 'compare': 'Black', 'point': 4.1 },\n        { 'outcome': 'Ectopic pregnancy rate', 'compare': 'American Indian/Alaskan Native', 'point': 3.11 },\n        { 'outcome': 'baseline BMI', 'compare': 'Latina/Hispanic', 'point': 26.7 },\n        { 'outcome': 'Heard of HPV Vaccine (Yes)', 'compare': 'non-hispanic', 'point': 87.5 },\n        { 'outcome': 'grade: moderately differentiated', 'compare': 'White', 'point': 28.2 },\n        { 'outcome': 'vaccination before abnormal pap test result', 'compare': 'african american', 'point': 20.0 },\n        { 'outcome': 'grade: well differentiated', 'compare': 'Black', 'point': 55.6 },\n        { 'outcome': 'stage: regional', 'compare': 'White', 'point': 12.7 },\n        { 'outcome': 'Microbiota in endometrial tumors - Geobacillus genus', 'compare': 'Obese black', 'point': 0.03 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'compare': 'Non-Hispanic: Black', 'point': 87.4 },\n        { 'outcome': '5 year disease specific survival', 'compare': 'white', 'point': 76.9 },\n        { 'outcome': 'hispanic-white disparity in severe maternal morbidity', 'compare': 'Hispanic', 'point': 1.26 },\n        { 'outcome': 'Surgical procedure for endometriosis - Hysterectomy', 'compare': 'Black', 'point': 48.7 },\n        { 'outcome': 'Duration of Radiation Therapy', 'compare': 'Non-Hispanic Black', 'point': 55.0 },\n        { 'outcome': 'stage: unknown', 'compare': 'Black', 'point': 8.7 },\n        { 'outcome': 'diagnosed with invasive cervical cancer', 'compare': 'other', 'point': 0.5 },\n        { 'outcome': 'Indication for oocyte cryopreservation - Fertility perservation, medical reason', 'compare': 'Asian/Pacific Islander', 'point': 0.9 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'compare': 'Non-Hispanic: White', 'point': 65.5 },\n        { 'outcome': 'laparoscopic myomectomy approach', 'compare': 'Other', 'point': 4.5 },\n        { 'outcome': 'Educational Themed Content', 'compare': 'White', 'point': 20.4 },\n        { 'outcome': 'grade: undifferentiated', 'compare': 'White', 'point': 0.8 },\n        { 'outcome': 'cancer-directed surgery', 'compare': 'White', 'point': 19.1 },\n        { 'outcome': 'Amount heard about 2009 H1N1 vaccine', 'compare': 'White, non-Hispanic', 'point': 35.0 },\n        { 'outcome': 'preterm birth', 'compare': 'white', 'point': 62.4 },\n        { 'outcome': '5 year disease specific survival', 'compare': 'asian', 'point': 64.4 },\n        { 'outcome': 'Neonatal outcomes- Small for gestational age', 'compare': 'Hispanic', 'point': 8.5 },\n        { 'outcome': 'endometrial cancer 2-year survival difference', 'compare': 'Non-Hispanic: Black', 'point': -0.5 },\n        { 'outcome': 'endometrial cancer 5-year survival difference', 'compare': 'Non-Hispanic: Black', 'point': -17.1 },\n        { 'outcome': 'diagnosed with invasive cervical cancer', 'compare': 'black', 'point': 16.3 },\n        { 'outcome': 'vaccination before abnormal pap test result', 'compare': 'non-hispanic', 'point': 55.6 },\n        { 'outcome': 'five-year overall survival associated with treatment adherence status', 'compare': 'Surgery/Chemotherapy No/No', 'point': 3.9 },\n        { 'outcome': 'individual complication occurrence - UTI', 'compare': 'Asian', 'point': 0.03 },\n        { 'outcome': 'histology: non-endometrioid', 'compare': 'Black', 'point': 50.0 },\n        { 'outcome': 'Insurance coverage', 'compare': 'Medicare/other govt', 'point': 19.3 },\n        { 'outcome': 'grade: well differentiated', 'compare': 'White', 'point': 43.8 },\n        { 'outcome': 'stage: local', 'compare': 'Black', 'point': 77.8 },\n        { 'outcome': 'Ectopic pregnancy rate', 'compare': 'American Indian/Alaskan Native', 'point': 1.21 },\n        { 'outcome': 'cannabis users advised not to breastfeed', 'compare': 'Non-Hispanic Mixed', 'point': 52.3 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'compare': 'Non-Hispanic: White', 'point': 91.5 },\n        { 'outcome': 'Cesarean birth - Non-reassuring fetal status', 'compare': 'Hispanic', 'point': 11.1 },\n        { 'outcome': 'preterm birth', 'compare': 'native', 'point': 63.9 },\n        { 'outcome': 'Microbiota in endometrial tumors - Prevotella genus', 'compare': 'Obese white', 'point': 0.16 },\n        { 'outcome': 'individual complication occurrence - UTI', 'compare': 'Hispanic', 'point': 0.22 },\n        { 'outcome': 'HDL', 'compare': 'PCOS Black', 'point': 45.5 },\n        { 'outcome': 'Surgical procedure for endometriosis - Myomectomy', 'compare': 'Asian', 'point': 5.0 },\n        { 'outcome': 'Insurance coverage', 'compare': 'Other', 'point': 0.1 },\n        { 'outcome': 'prevalence of human papillomavirus vaccine series completion', 'compare': 'Hispanic', 'point': 38.9 },\n        { 'outcome': 'grade: well differentiated', 'compare': 'Black', 'point': 48.9 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'compare': 'Non-Hispanic: White', 'point': 91.9 },\n        { 'outcome': 'individual complication occurrence - reoperation', 'compare': 'Hispanic', 'point': 0.4 },\n        { 'outcome': 'mature oocytes', 'compare': 'Asian/Pacific Islander', 'point': 78.9 },\n        { 'outcome': 'endometrial cancer 2-year survival', 'compare': 'Non-Hispanic: Black', 'point': 96.4 },\n        { 'outcome': 'BMI cut-off value specificity', 'compare': 'White', 'point': 93.6 },\n        { 'outcome': '5 year disease specific survival', 'compare': 'white', 'point': 38.1 },\n        { 'outcome': 'endometrial cancer 2-year survival', 'compare': 'Non-Hispanic: Black', 'point': 83.5 },\n        { 'outcome': 'endometrial cancer five-year survival', 'compare': 'Birthplace-unknown Hispanics', 'point': 92.3 },\n        { 'outcome': 'grade: unknown', 'compare': 'Black', 'point': 15.7 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'compare': 'Non-Hispanic: White', 'point': 91.3 },\n        { 'outcome': 'preterm birth', 'compare': 'asian', 'point': 3.9 },\n        { 'outcome': 'Ectopic pregnancy rate', 'compare': 'White', 'point': 2.29 },\n        { 'outcome': 'age-standardized five-year net survival', 'compare': 'Black', 'point': 46.8 },\n        { 'outcome': 'endometrial cancer five-year survival', 'compare': 'U.S. born Hispanics', 'point': 78.8 },\n        { 'outcome': 'Ectopic pregnancy rate', 'compare': 'Asian', 'point': 1.99 },\n        { 'outcome': 'Maternal morbidity composite- Transfusion any other products', 'compare': 'Hispanic', 'point': 0.4 },\n        { 'outcome': 'hysterectomy with oophorectomy', 'compare': 'non-Hispanic White', 'point': 57.74 },\n        { 'outcome': 'stage: unknown', 'compare': 'White', 'point': 6.5 },\n        { 'outcome': 'individual complication occurrence - sepsis', 'compare': 'Asian', 'point': 0.0 },\n        { 'outcome': 'severe maternal morbidity', 'compare': 'Hispanic', 'point': 2.74 },\n        { 'outcome': 'national comprehensive cancer network nonadherent care', 'compare': 'Other', 'point': 1.3 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'compare': 'Non-Hispanic: White', 'point': 91.0 },\n        { 'outcome': 'endometrial cancer 2-year survival', 'compare': 'Non-Hispanic: Black', 'point': 79.6 },\n        { 'outcome': 'Minimally Invasive Myomectomy for Uterine Leiomyomas', 'compare': 'Non-Black', 'point': 1.14 },\n        { 'outcome': 'endometrial cancer 2-year survival difference', 'compare': 'Non-Hispanic: Black', 'point': -2.0 },\n        { 'outcome': 'initial National Comprehensive Cancer Network distress score = 0', 'compare': 'Non-Hispanic White', 'point': 19.1 },\n        { 'outcome': 'clinical pregnancy', 'compare': 'Asian', 'point': 31.4 },\n        { 'outcome': 'systemic therapy', 'compare': 'Black', 'point': 57.7 },\n        { 'outcome': 'grade: poorly differentiated', 'compare': 'Black', 'point': 20.0 },\n        { 'outcome': 'grade: undifferentiated', 'compare': 'Black', 'point': 2.8 },\n        { 'outcome': 'Rural', 'compare': 'Other or unknown', 'point': 12.2 },\n        { 'outcome': 'Adjuvant treatment received', 'compare': 'non-Hispanic Black', 'point': 72.0 },\n        { 'outcome': 'Cervical funneling', 'compare': 'Hispanic', 'point': 1.8 },\n        { 'outcome': 'provider has talked with patient about vaccine (no)', 'compare': 'white', 'point': 21.9 },\n        { 'outcome': '5 year disease specific survival', 'compare': 'white', 'point': 9.4 },\n        { 'outcome': 'Cumulative pregnancy', 'compare': 'white female', 'point': 53.6 },\n        { 'outcome': 'Heart failure or MI', 'compare': 'White', 'point': 0.0 },\n        { 'outcome': 'laparoscopic myomectomy approach', 'compare': 'Hispanic', 'point': 3.0 },\n        { 'outcome': 'Insurance coverage', 'compare': 'Medicare/other govt', 'point': 39.7 },\n        { 'outcome': 'Gestational diabetes', 'compare': 'Hispanic', 'point': 4.1 },\n        { 'outcome': 'Microbiota in endometrial tumors - Bradyrhizobium genus', 'compare': 'Obese white', 'point': 0.35 },\n        { 'outcome': 'preterm birth', 'compare': 'asian', 'point': 12.0 },\n        { 'outcome': 'stage: regional', 'compare': 'White', 'point': 10.0 },\n        { 'outcome': 'grade: poorly differentiated', 'compare': 'Black', 'point': 18.5 },\n        { 'outcome': 'Microbiota in endometrial tumors - Bradyrhizobium genus', 'compare': 'Obese black', 'point': 0.02 },\n        { 'outcome': 'preventable pregnancy-related death', 'compare': 'Non-Hispanic other', 'point': 100.0 },\n        { 'outcome': 'Surgical procedure for endometriosis - Oophorectomy', 'compare': 'Native American', 'point': 5.3 },\n        { 'outcome': 'endometrial cancer 2-year survival difference', 'compare': 'Non-Hispanic: Black', 'point': 1.2 },\n        { 'outcome': 'Indication for oocyte cryopreservation - Other', 'compare': 'Non-Hispanic White', 'point': 0.9 },\n        { 'outcome': 'F Haplotype frequency', 'compare': 'African-American', 'point': 8.0 },\n        { 'outcome': 'Number of abortions done in residency rotation', 'compare': 'Black', 'point': 3.2 },\n        { 'outcome': 'Surgical procedure for endometriosis - Hysterectomy', 'compare': 'Asian', 'point': 32.9 },\n        { 'outcome': 'individual complication occurrence - reoperation', 'compare': 'Other', 'point': 0.5 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'compare': 'Non-Hispanic: Black', 'point': 58.5 },\n        { 'outcome': 'live birth', 'compare': 'Hispanic', 'point': 28.5 },\n        { 'outcome': 'Acute renal failure or insufficiency', 'compare': 'White', 'point': 96.9 },\n        { 'outcome': 'five-year overall survival associated with treatment adherence status', 'compare': 'Surgery/Chemotherapy Yes/No', 'point': 40.3 },\n        { 'outcome': 'Nonachievement of sterilization at time of cesarean delivery', 'compare': 'White', 'point': 26.0 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'compare': 'Non-Hispanic: Black', 'point': 84.8 },\n        { 'outcome': 'Intraoperative complication', 'compare': 'non-Hispanic Black', 'point': 8.0 },\n        { 'outcome': 'BMI', 'compare': 'PCOS White', 'point': 51.7 },\n        { 'outcome': 'Adjuvant treatment received', 'compare': 'non-Hispanic White', 'point': 54.0 },\n        { 'outcome': 'recurrence free survival', 'compare': 'Non-African American', 'point': 91.0 },\n        { 'outcome': 'c.130-c.131 missense mutations G>C', 'compare': 'White', 'point': 18.8 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'compare': 'Non-Hispanic: Black', 'point': 20.5 },\n        { 'outcome': 'individual complication occurrence - reoperation', 'compare': 'White', 'point': 0.6 },\n        { 'outcome': 'grade: undifferentiated', 'compare': 'Black', 'point': 0.7 },\n        { 'outcome': 'Insurance coverage', 'compare': 'Other', 'point': 0.0 },\n        { 'outcome': 'Minimally Invasive Myomectomy for Uterine Leiomyomas', 'compare': 'Black', 'point': 1.15 },\n        { 'outcome': 'Surgical procedure for endometriosis - Salpingectomy or tubal ligation', 'compare': 'Black', 'point': 1.1 },\n        { 'outcome': 'Sterilization at the time of cesarean delivery', 'compare': 'White', 'point': 34.4 },\n        { 'outcome': 'Microbiota in endometrial tumors - Candidatus Rhodoluna genus', 'compare': 'Obese black', 'point': 6.53 },\n        { 'outcome': 'BMI cut-off value sensitivity', 'compare': 'Hispanic', 'point': 83.2 },\n        { 'outcome': 'Cervical length < 25 mm', 'compare': 'White', 'point': 1.0 },\n        { 'outcome': 'Presence of Haplotype H', 'compare': 'African-American', 'point': 46.0 },\n        { 'outcome': 'Presence of fibroid', 'compare': 'Black', 'point': 72.7 },\n        { 'outcome': 'grade: unknown', 'compare': 'Black', 'point': 16.7 },\n        { 'outcome': 'endometrial cancer 5-year survival', 'compare': 'Non-Hispanic: Black', 'point': 20.8 },\n        { 'outcome': 'endometrial cancer 2-year survival difference', 'compare': 'Non-Hispanic: Black', 'point': -3.2 },\n        { 'outcome': 'preterm birth', 'compare': 'black', 'point': 5.5 },\n        { 'outcome': 'endometrial cancer 2-year survival', 'compare': 'Non-Hispanic: Black', 'point': 66.9 },\n        { 'outcome': 'no vaccination history', 'compare': 'non-hispanic', 'point': 55.2 },\n        { 'outcome': 'overall projected decline in ectopic pregnancy mortality ratio between 2003–2007 and 2013–2017', 'compare': 'African American', 'point': 24.9 },\n        { 'outcome': 'preterm birth', 'compare': 'native', 'point': 13.4 },\n        { 'outcome': 'Surgical procedure for endometriosis - Myomectomy', 'compare': 'White', 'point': 1.8 },\n        { 'outcome': 'Duration of Radiation Therapy', 'compare': 'Other', 'point': 60.0 },\n        { 'outcome': 'Reason patient did not receive radiation therapy for treatment of cervical cancer', 'compare': 'Other', 'point': 81.0 },\n        { 'outcome': 'Maternal morbidity composite- Venous thromboembolism', 'compare': 'Non-Hispanic Black', 'point': 0.1 },\n        { 'outcome': 'severe maternal morbidity not preventable, improvement needed', 'compare': 'Non-Hispanic Black', 'point': 28.0 },\n        { 'outcome': 'Indication for oocyte cryopreservation - gonadotoxic therapy', 'compare': 'Asian/Pacific Islander', 'point': 3.4 },\n        { 'outcome': 'Metabolic syndrome', 'compare': 'PCOS Black', 'point': 42.1 },\n        { 'outcome': 'Surgical procedure for endometriosis - Oophorectomy', 'compare': 'Black', 'point': 6.7 },\n        { 'outcome': 'Microbiota in endometrial tumors - Paenibacillus genus', 'compare': 'Obese black', 'point': 2.24 },\n        { 'outcome': 'cervical length cutoff > 30 mm', 'compare': 'Other', 'point': 4.5 },\n        { 'outcome': 'Ectopic pregnancy rate', 'compare': 'Black', 'point': 3.12 },\n        { 'outcome': 'Myomectomy', 'compare': 'Whites', 'point': 31.0 },\n        { 'outcome': 'endometrial cancer five-year survival', 'compare': 'Birthplace-unknown Hispanics', 'point': 91.6 },\n        { 'outcome': 'Pregestational diabetes', 'compare': 'American Indian', 'point': 3.1 },\n        { 'outcome': 'grade: undifferentiated', 'compare': 'White', 'point': 0.8 },\n        { 'outcome': 'five-year survival', 'compare': 'African American', 'point': 0.84 },\n        { 'outcome': 'Surgical procedure for endometriosis - Laparoscopic excision or fulguration of pelvic lesions', 'compare': 'Native American', 'point': 19.7 },\n        { 'outcome': 'change in willingness to participate', 'compare': 'Asian', 'point': 57.0 },\n        { 'outcome': 'Number of abortions done in residency rotation', 'compare': 'Other', 'point': 32.1 },\n        { 'outcome': 'endometrial cancer 2-year survival difference', 'compare': 'Non-Hispanic: Black', 'point': -1.7 },\n        { 'outcome': 'endometrial cancer 2-year survival difference', 'compare': 'Non-Hispanic: Black', 'point': -0.4 },\n        { 'outcome': 'preterm birth', 'compare': 'native', 'point': 12.7 },\n        { 'outcome': 'five year survival rate', 'compare': 'White', 'point': 77.1 },\n        { 'outcome': 'Presence of Haplotype J', 'compare': 'African-American', 'point': 64.0 },\n        { 'outcome': 'Microbiota in endometrial tumors - Bacteroidetes phylum', 'compare': 'Obese black', 'point': 22.38 },\n        { 'outcome': 'Indication for oocyte cryopreservation - Other', 'compare': 'Non-Hispanic Black', 'point': 1.3 },\n        { 'outcome': 'endometrial cancer 2-year survival difference', 'compare': 'Non-Hispanic: Black', 'point': -9.5 },\n        { 'outcome': 'Microbiota in endometrial tumors - Bacteroidetes phylum', 'compare': 'Obese white', 'point': 3.09 },\n        { 'outcome': 'Somatic testing performed', 'compare': 'Black', 'point': 27.5 },\n        { 'outcome': 'preterm birth', 'compare': 'asian', 'point': 55.9 },\n        { 'outcome': 'individual complication occurrence - transfusion', 'compare': 'Other', 'point': 4.7 },\n        { 'outcome': 'preterm birth', 'compare': 'asian', 'point': 1.3 },\n        { 'outcome': 'endometrial cancer 2-year survival', 'compare': 'Non-Hispanic: White', 'point': 87.0 },\n        { 'outcome': 'preterm birth', 'compare': 'black', 'point': 21.5 },\n        { 'outcome': 'Not eligible among patients with a trial available', 'compare': 'Native American', 'point': 12.5 },\n        ],\n        fields: [makeField('outcome'), makeField('compare'), makeField('point')],\n        metadata: {\n            'outcome': { type: Type.String, semanticType: 'String', levels: ['5 year disease specific survival', 'Acute renal failure or insufficiency', 'Adjuvant treatment received', 'Amount heard about 2009 H1N1 vaccine', 'BMI', 'BMI cut-off value sensitivity', 'BMI cut-off value specificity', 'Cervical funneling', 'Cervical length < 25 mm', 'Cesarean birth - Labor dystocia', 'Cesarean birth - Non-reassuring fetal status', 'Cumulative pregnancy', 'Duration of Radiation Therapy', 'Ectopic pregnancy rate', 'Educational Themed Content', 'Eligible, not enrolled among patients with a trial available', 'F Haplotype frequency', 'Gestational diabetes', 'HDL', 'Heard of HPV Vaccine (Yes)', 'Heart failure or MI', 'Indication for oocyte cryopreservation - Fertility perservation, medical reason', 'Indication for oocyte cryopreservation - Other', 'Indication for oocyte cryopreservation - diminished ovarian reserve', 'Indication for oocyte cryopreservation - gonadotoxic therapy', 'Insurance coverage', 'Intraoperative complication', 'Maternal morbidity composite- Transfusion any other products', 'Maternal morbidity composite- Venous thromboembolism', 'Metabolic syndrome', 'Microbiota in endometrial tumors - Bacteroidetes phylum', 'Microbiota in endometrial tumors - Bradyrhizobium genus', 'Microbiota in endometrial tumors - Candidatus Rhodoluna genus', 'Microbiota in endometrial tumors - Cyanobacteria phylum', 'Microbiota in endometrial tumors - Dietzia genus', 'Microbiota in endometrial tumors - Firmicutes phylum', 'Microbiota in endometrial tumors - Geobacillus genus', 'Microbiota in endometrial tumors - Paenibacillus genus', 'Microbiota in endometrial tumors - Prevotella genus', 'Minimally Invasive Myomectomy for Uterine Leiomyomas', 'Myomectomy', 'Need for 2nd line chemotherapy', 'Neonatal outcomes- Small for gestational age', 'No complications', 'Nonachievement of sterilization at time of cesarean delivery', 'Not eligible among patients with a trial available', 'Number of abortions done in residency rotation', 'Pregestational diabetes', 'Presence of Haplotype H', 'Presence of Haplotype J'] },\n            'compare': { type: Type.String, semanticType: 'Category', levels: ['African American', 'African-American', 'American Indian', 'American Indian/Alaskan Native', 'Asian', 'Asian/Pacific Islander', 'Birthplace-unknown Hispanics', 'Black', 'Hawaiian/PI', 'Hispanic', 'Latina/Hispanic', 'Medicare/other govt', 'Native American', 'Non-African American', 'Non-Black', 'Non-Hispanic Black', 'Non-Hispanic Mixed', 'Non-Hispanic White', 'Non-Hispanic other', 'Non-Hispanic: Black', 'Non-Hispanic: White', 'Obese black', 'Obese white', 'Other', 'Other or unknown', 'Other/unknown', 'PCOS Black', 'PCOS White', 'Surgery/Chemotherapy No/No', 'Surgery/Chemotherapy Yes/No', 'U.S. born Hispanics', 'White', 'White, non-Hispanic', 'Whites', 'african american', 'asian', 'black', 'hispanic', 'native', 'non-Hispanic Black', 'non-Hispanic White', 'non-hispanic', 'other', 'white', 'white female'] },\n            'point': { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('compare'),\n            y: makeEncodingItem('point'),\n            column: makeEncodingItem('outcome'),\n        },\n    };\n}\n\nfunction gen_ombCodesQ4RecGpt41(): TestCase {\n    // How do treasury codes map to CGAC codes, and are there treasury codes that correspond to multiple CGAC codes or vice ver\n    // Score: 2.5/5 | The visualization is conceptually relevant but suffers from likely data/axis issues, overcrowded lab\n    return {\n        title: 'omb_codes_q4_rec-gpt-4.1',\n        description: 'Summarize mapping from **treasury_code** to **cgac_code**',\n        tags: ['debug', 'heatmap'],\n        chartType: 'Heatmap',\n        data: [\n        { 'treasury_code': '0', 'cgac_code': 0.0, 'count': 3 },\n        { 'treasury_code': '0*', 'cgac_code': 'NaN', 'count': 11 },\n        { 'treasury_code': '1', 'cgac_code': 1.0, 'count': 1 },\n        { 'treasury_code': '10', 'cgac_code': 10.0, 'count': 9 },\n        { 'treasury_code': '11', 'cgac_code': 11.0, 'count': 23 },\n        { 'treasury_code': '12', 'cgac_code': 12.0, 'count': 28 },\n        { 'treasury_code': '13', 'cgac_code': 13.0, 'count': 13 },\n        { 'treasury_code': '14', 'cgac_code': 14.0, 'count': 18 },\n        { 'treasury_code': '15', 'cgac_code': 15.0, 'count': 13 },\n        { 'treasury_code': '16', 'cgac_code': 16.0, 'count': 13 },\n        { 'treasury_code': '17', 'cgac_code': 'NaN', 'count': 1 },\n        { 'treasury_code': '18', 'cgac_code': 18.0, 'count': 1 },\n        { 'treasury_code': '19', 'cgac_code': 19.0, 'count': 4 },\n        { 'treasury_code': '2', 'cgac_code': 2.0, 'count': 1 },\n        { 'treasury_code': '20', 'cgac_code': 20.0, 'count': 14 },\n        { 'treasury_code': '21', 'cgac_code': 21.0, 'count': 1 },\n        { 'treasury_code': '21', 'cgac_code': 'NaN', 'count': 1 },\n        { 'treasury_code': '23', 'cgac_code': 23.0, 'count': 1 },\n        { 'treasury_code': '24', 'cgac_code': 24.0, 'count': 1 },\n        { 'treasury_code': '25', 'cgac_code': 25.0, 'count': 1 },\n        { 'treasury_code': '26', 'cgac_code': 26.0, 'count': 1 },\n        { 'treasury_code': '27', 'cgac_code': 27.0, 'count': 1 },\n        { 'treasury_code': '28', 'cgac_code': 28.0, 'count': 1 },\n        { 'treasury_code': '29', 'cgac_code': 29.0, 'count': 1 },\n        { 'treasury_code': '3', 'cgac_code': 3.0, 'count': 1 },\n        { 'treasury_code': '31', 'cgac_code': 31.0, 'count': 1 },\n        { 'treasury_code': '33', 'cgac_code': 33.0, 'count': 1 },\n        { 'treasury_code': '34', 'cgac_code': 34.0, 'count': 1 },\n        { 'treasury_code': '36', 'cgac_code': 36.0, 'count': 4 },\n        { 'treasury_code': '39', 'cgac_code': 912.0, 'count': 1 },\n        { 'treasury_code': '39', 'cgac_code': 913.0, 'count': 1 },\n        { 'treasury_code': '39', 'cgac_code': 914.0, 'count': 1 },\n        { 'treasury_code': '39', 'cgac_code': 915.0, 'count': 1 },\n        { 'treasury_code': '39', 'cgac_code': 920.0, 'count': 1 },\n        { 'treasury_code': '4', 'cgac_code': 4.0, 'count': 1 },\n        { 'treasury_code': '41', 'cgac_code': 389.0, 'count': 1 },\n        { 'treasury_code': '45', 'cgac_code': 45.0, 'count': 1 },\n        { 'treasury_code': '46', 'cgac_code': 309.0, 'count': 1 },\n        { 'treasury_code': '47', 'cgac_code': 47.0, 'count': 4 },\n        { 'treasury_code': '48', 'cgac_code': 376.0, 'count': 1 },\n        { 'treasury_code': '48', 'cgac_code': 377.0, 'count': 1 },\n        { 'treasury_code': '48', 'cgac_code': 431.0, 'count': 1 },\n        { 'treasury_code': '48', 'cgac_code': 435.0, 'count': 1 },\n        { 'treasury_code': '48', 'cgac_code': 453.0, 'count': 1 },\n        { 'treasury_code': '48', 'cgac_code': 479.0, 'count': 1 },\n        { 'treasury_code': '48', 'cgac_code': 575.0, 'count': 1 },\n        { 'treasury_code': '48', 'cgac_code': 584.0, 'count': 1 },\n        { 'treasury_code': '49', 'cgac_code': 49.0, 'count': 1 },\n        { 'treasury_code': '5', 'cgac_code': 5.0, 'count': 1 },\n        { 'treasury_code': '50', 'cgac_code': 50.0, 'count': 1 },\n        { 'treasury_code': '51', 'cgac_code': 51.0, 'count': 4 },\n        { 'treasury_code': '54', 'cgac_code': 54.0, 'count': 1 },\n        { 'treasury_code': '56', 'cgac_code': 56.0, 'count': 1 },\n        { 'treasury_code': '57', 'cgac_code': 'NaN', 'count': 1 },\n        { 'treasury_code': '59', 'cgac_code': 417.0, 'count': 3 },\n        { 'treasury_code': '60', 'cgac_code': 60.0, 'count': 1 },\n        { 'treasury_code': '61', 'cgac_code': 61.0, 'count': 1 },\n        { 'treasury_code': '62', 'cgac_code': 62.0, 'count': 1 },\n        { 'treasury_code': '63', 'cgac_code': 420.0, 'count': 1 },\n        { 'treasury_code': '64', 'cgac_code': 455.0, 'count': 1 },\n        { 'treasury_code': '65', 'cgac_code': 65.0, 'count': 1 },\n        { 'treasury_code': '68', 'cgac_code': 68.0, 'count': 1 },\n        { 'treasury_code': '69', 'cgac_code': 69.0, 'count': 13 },\n        { 'treasury_code': '70', 'cgac_code': 70.0, 'count': 14 },\n        { 'treasury_code': '71', 'cgac_code': 71.0, 'count': 1 },\n        { 'treasury_code': '72', 'cgac_code': 72.0, 'count': 2 },\n        { 'treasury_code': '72', 'cgac_code': 'NaN', 'count': 1 },\n        { 'treasury_code': '73', 'cgac_code': 73.0, 'count': 1 },\n        { 'treasury_code': '74', 'cgac_code': 74.0, 'count': 1 },\n        { 'treasury_code': '75', 'cgac_code': 75.0, 'count': 14 },\n        { 'treasury_code': '76', 'cgac_code': 465.0, 'count': 1 },\n        { 'treasury_code': '78', 'cgac_code': 352.0, 'count': 2 },\n        { 'treasury_code': '8', 'cgac_code': 8.0, 'count': 1 },\n        { 'treasury_code': '80', 'cgac_code': 80.0, 'count': 1 },\n        { 'treasury_code': '82', 'cgac_code': 82.0, 'count': 1 },\n        { 'treasury_code': '83', 'cgac_code': 83.0, 'count': 1 },\n        { 'treasury_code': '84', 'cgac_code': 84.0, 'count': 1 },\n        { 'treasury_code': '84', 'cgac_code': 'NaN', 'count': 1 },\n        { 'treasury_code': '86', 'cgac_code': 86.0, 'count': 10 },\n        { 'treasury_code': '88', 'cgac_code': 88.0, 'count': 1 },\n        { 'treasury_code': '89', 'cgac_code': 89.0, 'count': 6 },\n        { 'treasury_code': '9', 'cgac_code': 9.0, 'count': 3 },\n        { 'treasury_code': '90', 'cgac_code': 90.0, 'count': 1 },\n        { 'treasury_code': '91', 'cgac_code': 91.0, 'count': 11 },\n        { 'treasury_code': '93', 'cgac_code': 93.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 302.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 306.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 310.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 313.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 323.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 326.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 338.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 339.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 345.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 347.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 349.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 360.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 362.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 368.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 372.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 373.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 381.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 382.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 387.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 394.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 413.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 421.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 424.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 432.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 434.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 456.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 458.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 467.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 471.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 485.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 486.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 487.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 510.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 511.0, 'count': 2 },\n        { 'treasury_code': '95', 'cgac_code': 512.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 513.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 514.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 517.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 519.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 524.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 525.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 534.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 535.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 537.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 539.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 542.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 573.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 579.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 580.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 581.0, 'count': 1 },\n        { 'treasury_code': '95', 'cgac_code': 'NaN', 'count': 11 },\n        { 'treasury_code': '96', 'cgac_code': 96.0, 'count': 1 },\n        { 'treasury_code': '97', 'cgac_code': 17.0, 'count': 1 },\n        { 'treasury_code': '97', 'cgac_code': 97.0, 'count': 3 },\n        { 'treasury_code': '97', 'cgac_code': 'NaN', 'count': 1 },\n        ],\n        fields: [makeField('treasury_code'), makeField('cgac_code'), makeField('count')],\n        metadata: {\n            'treasury_code': { type: Type.String, semanticType: 'String', levels: ['0', '0*', '1', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '2', '20', '21', '23', '24', '25', '26', '27', '28', '29', '3', '31', '33', '34', '36', '39', '4', '41', '45', '46', '47', '48', '49', '5', '50', '51', '54', '56', '57', '59', '60', '61', '62', '63', '64', '65', '68'] },\n            'cgac_code': { type: Type.Number, semanticType: 'Number', levels: [] },\n            'count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('treasury_code'),\n            y: makeEncodingItem('cgac_code'),\n            color: makeEncodingItem('count'),\n        },\n        chartProperties: { colorScheme: \"blueorange\" },\n    };\n}\n\nfunction gen_ombCodesQ5RecGpt41(): TestCase {\n    // For each agency, how do the assigned treasury codes vary across its bureaus, and which agencies show the greatest divers\n    // Score: 10/20 | The visualization partially answers which agencies have more distinct treasury codes but does not ef\n    return {\n        title: 'omb_codes_q5_rec-gpt-4.1',\n        description: 'Show top agencies by diversity of **treasury_code** across bureaus',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'agency_name': 'Legislative Branch', 'treasury_code_count': 9 },\n        { 'agency_name': 'Other Defense Civil Programs', 'treasury_code_count': 5 },\n        { 'agency_name': 'Department of Defense - Military Programs', 'treasury_code_count': 5 },\n        { 'agency_name': 'International Assistance Programs', 'treasury_code_count': 4 },\n        { 'agency_name': 'Department of State', 'treasury_code_count': 2 },\n        { 'agency_name': 'District of Columbia', 'treasury_code_count': 2 },\n        { 'agency_name': 'National Infrastructure Bank', 'treasury_code_count': 1 },\n        { 'agency_name': 'National Credit Union Administration', 'treasury_code_count': 1 },\n        { 'agency_name': 'National Endowment for the Arts', 'treasury_code_count': 1 },\n        { 'agency_name': 'National Endowment for the Humanities', 'treasury_code_count': 1 },\n        { 'agency_name': 'National Mediation Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'National Labor Relations Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'National Capital Planning Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'National Railroad Passenger Corporation Office of Inspector General', 'treasury_code_count': 1 },\n        { 'agency_name': 'National Science Foundation', 'treasury_code_count': 1 },\n        { 'agency_name': 'National Transportation Safety Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'Neighborhood Reinvestment Corporation', 'treasury_code_count': 1 },\n        { 'agency_name': 'National Council on Disability', 'treasury_code_count': 1 },\n        { 'agency_name': 'Access Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'National Archives and Records Administration', 'treasury_code_count': 1 },\n        { 'agency_name': 'Northern Border Regional Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Morris K. Udall and Stewart L. Udall Foundation', 'treasury_code_count': 1 },\n        { 'agency_name': 'Military Compensation and Retirement Modernization Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Merit Systems Protection Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'Marine Mammal Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Legal Services Corporation', 'treasury_code_count': 1 },\n        { 'agency_name': 'Judicial Branch', 'treasury_code_count': 1 },\n        { 'agency_name': 'Japan-United States Friendship Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'James Madison Memorial Fellowship Foundation', 'treasury_code_count': 1 },\n        { 'agency_name': 'International Trade Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Intelligence Community Management Account', 'treasury_code_count': 1 },\n        { 'agency_name': 'Institute of Museum and Library Services', 'treasury_code_count': 1 },\n        { 'agency_name': 'Institute of American Indian and Alaska Native Culture and Arts Development', 'treasury_code_count': 1 },\n        { 'agency_name': 'Indian Law and Order Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'National Aeronautics and Space Administration', 'treasury_code_count': 1 },\n        { 'agency_name': 'Nuclear Regulatory Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Harry S Truman Scholarship Foundation', 'treasury_code_count': 1 },\n        { 'agency_name': 'Nuclear Waste Technical Review Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'United States Interagency Council on Homelessness', 'treasury_code_count': 1 },\n        { 'agency_name': 'United States Institute of Peace', 'treasury_code_count': 1 },\n        { 'agency_name': 'United States Holocaust Memorial Museum', 'treasury_code_count': 1 },\n        { 'agency_name': 'United States Enrichment Corporation Fund', 'treasury_code_count': 1 },\n        { 'agency_name': 'United States Court of Appeals for Veterans Claims', 'treasury_code_count': 1 },\n        { 'agency_name': 'United Mine Workers of America Benefit Funds', 'treasury_code_count': 1 },\n        { 'agency_name': 'Tennessee Valley Authority', 'treasury_code_count': 1 },\n        { 'agency_name': 'State Justice Institute', 'treasury_code_count': 1 },\n        { 'agency_name': 'Standard Setting Body', 'treasury_code_count': 1 },\n        { 'agency_name': 'Social Security Administration', 'treasury_code_count': 1 },\n        { 'agency_name': 'Smithsonian Institution', 'treasury_code_count': 1 },\n        { 'agency_name': 'Small Business Administration', 'treasury_code_count': 1 },\n        { 'agency_name': 'Securities and Exchange Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Securities Investor Protection Corporation', 'treasury_code_count': 1 },\n        { 'agency_name': 'Recovery Act Accountability and Transparency Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'Railroad Retirement Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'Public Defender Service for the District of Columbia', 'treasury_code_count': 1 },\n        { 'agency_name': 'Public Company Accounting Oversight Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'Privacy and Civil Liberties Oversight Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'Presidio Trust', 'treasury_code_count': 1 },\n        { 'agency_name': 'Postal Service', 'treasury_code_count': 1 },\n        { 'agency_name': 'Patient-Centered Outcomes Research Trust Fund', 'treasury_code_count': 1 },\n        { 'agency_name': 'Other Commissions and Boards', 'treasury_code_count': 1 },\n        { 'agency_name': 'Office of the Federal Coordinator for Alaska Natural Gas Transportation Projects', 'treasury_code_count': 1 },\n        { 'agency_name': 'Office of Special Counsel', 'treasury_code_count': 1 },\n        { 'agency_name': 'Office of Personnel Management', 'treasury_code_count': 1 },\n        { 'agency_name': 'Office of Navajo and Hopi Indian Relocation', 'treasury_code_count': 1 },\n        { 'agency_name': 'Office of Government Ethics', 'treasury_code_count': 1 },\n        { 'agency_name': 'Occupational Safety and Health Review Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Independent Payment Advisory Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'General Services Administration', 'treasury_code_count': 1 },\n        { 'agency_name': 'Gulf Coast Ecosystem Restoration Council', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of Housing and Urban Development', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of Health and Human Services', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of Energy', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of Education', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of Commerce', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of Agriculture', 'treasury_code_count': 1 },\n        { 'agency_name': 'Denali Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Delta Regional Authority', 'treasury_code_count': 1 },\n        { 'agency_name': 'Defense Nuclear Facilities Safety Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'Court Services and Offender Supervision Agency for the District of Columbia', 'treasury_code_count': 1 },\n        { 'agency_name': 'Council of the Inspectors General on Integrity and Efficiency', 'treasury_code_count': 1 },\n        { 'agency_name': 'Corps of Engineers - Civil Works', 'treasury_code_count': 1 },\n        { 'agency_name': 'Corporation for Travel Promotion', 'treasury_code_count': 1 },\n        { 'agency_name': 'Corporation for Public Broadcasting', 'treasury_code_count': 1 },\n        { 'agency_name': 'Corporation for National and Community Service', 'treasury_code_count': 1 },\n        { 'agency_name': 'Consumer Product Safety Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Commodity Futures Trading Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Committee for Purchase from People who are Blind or Severely Disabled, activities', 'treasury_code_count': 1 },\n        { 'agency_name': 'Commission on Civil Rights', 'treasury_code_count': 1 },\n        { 'agency_name': 'Commission of Fine Arts', 'treasury_code_count': 1 },\n        { 'agency_name': 'Civilian Property Realignment Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'Christopher Columbus Fellowship Foundation', 'treasury_code_count': 1 },\n        { 'agency_name': 'Chemical Safety and Hazard Investigation Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'Central Intelligence Agency', 'treasury_code_count': 1 },\n        { 'agency_name': 'Bureau of Consumer Financial Protection', 'treasury_code_count': 1 },\n        { 'agency_name': 'Broadcasting Board of Governors', 'treasury_code_count': 1 },\n        { 'agency_name': 'Barry Goldwater Scholarship and Excellence in Education Foundation', 'treasury_code_count': 1 },\n        { 'agency_name': 'Appalachian Regional Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Affordable Housing Program', 'treasury_code_count': 1 },\n        { 'agency_name': 'Advisory Council on Historic Preservation', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of Homeland Security', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of Justice', 'treasury_code_count': 1 },\n        { 'agency_name': 'Administrative Conference of the United States', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of Labor', 'treasury_code_count': 1 },\n        { 'agency_name': 'Financing Vehicles and the Board of Governors of the Federal Reserve', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Trade Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Retirement Thrift Investment Board', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal National Mortgage Association', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Mine Safety and Health Review Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Mediation and Conciliation Service', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Maritime Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Labor Relations Authority', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Housing Finance Agency', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Home Loan Mortgage Corporation', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Home Loan Bank System', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Financial Institutions Examination Council', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Election Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Drug Control Programs', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Deposit Insurance Corporation', 'treasury_code_count': 1 },\n        { 'agency_name': 'Federal Communications Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Farm Credit System Insurance Corporation', 'treasury_code_count': 1 },\n        { 'agency_name': 'Farm Credit System', 'treasury_code_count': 1 },\n        { 'agency_name': 'Farm Credit Administration', 'treasury_code_count': 1 },\n        { 'agency_name': 'Export-Import Bank of the United States', 'treasury_code_count': 1 },\n        { 'agency_name': 'Executive Office of the President', 'treasury_code_count': 1 },\n        { 'agency_name': 'Equal Employment Opportunity Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Environmental Protection Agency', 'treasury_code_count': 1 },\n        { 'agency_name': 'Electric Reliability Organization', 'treasury_code_count': 1 },\n        { 'agency_name': 'Election Assistance Commission', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of the Treasury', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of the Interior', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of Veterans Affairs', 'treasury_code_count': 1 },\n        { 'agency_name': 'Department of Transportation', 'treasury_code_count': 1 },\n        { 'agency_name': 'Vietnam Education Foundation', 'treasury_code_count': 1 },\n        ],\n        fields: [makeField('agency_name'), makeField('treasury_code_count')],\n        metadata: {\n            'agency_name': { type: Type.String, semanticType: 'Entity names', levels: ['Access Board', 'Administrative Conference of the United States', 'Advisory Council on Historic Preservation', 'Affordable Housing Program', 'Appalachian Regional Commission', 'Barry Goldwater Scholarship and Excellence in Education Foundation', 'Broadcasting Board of Governors', 'Bureau of Consumer Financial Protection', 'Central Intelligence Agency', 'Chemical Safety and Hazard Investigation Board', 'Christopher Columbus Fellowship Foundation', 'Civilian Property Realignment Board', 'Commission of Fine Arts', 'Commission on Civil Rights', 'Committee for Purchase from People who are Blind or Severely Disabled, activities', 'Commodity Futures Trading Commission', 'Consumer Product Safety Commission', 'Corporation for National and Community Service', 'Corporation for Public Broadcasting', 'Corporation for Travel Promotion', 'Corps of Engineers - Civil Works', 'Council of the Inspectors General on Integrity and Efficiency', 'Court Services and Offender Supervision Agency for the District of Columbia', 'Defense Nuclear Facilities Safety Board', 'Delta Regional Authority', 'Denali Commission', 'Department of Agriculture', 'Department of Commerce', 'Department of Defense - Military Programs', 'Department of Education', 'Department of Energy', 'Department of Health and Human Services', 'Department of Homeland Security', 'Department of Housing and Urban Development', 'Department of Justice', 'Department of Labor', 'Department of State', 'Department of Transportation', 'Department of Veterans Affairs', 'Department of the Interior', 'Department of the Treasury', 'District of Columbia', 'Election Assistance Commission', 'Electric Reliability Organization', 'Environmental Protection Agency', 'Equal Employment Opportunity Commission', 'Executive Office of the President', 'Export-Import Bank of the United States', 'Farm Credit Administration', 'Farm Credit System'] },\n            'treasury_code_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('agency_name'),\n            y: makeEncodingItem('treasury_code_count'),\n        },\n        chartProperties: { cornerRadius: 2 },\n    };\n}\n\nfunction gen_penguinsRawQ1RecGpt41(): TestCase {\n    // How do average body mass and flipper length differ across penguin species on each island?\n    // Score: 10/20 | The visualization is partially relevant and readable but fails to incorporate the island dimension r\n    return {\n        title: 'penguins_raw_q1_rec-gpt-4.1',\n        description: 'Compare average **Body Mass (g)** and **Flipper Length (mm)** by **Species** for each **Island**',\n        tags: ['debug', 'grouped-bar-chart'],\n        chartType: 'Grouped Bar Chart',\n        data: [\n        { 'Species': 'Adelie Penguin (Pygoscelis adeliae)', 'Island': 'Biscoe', 'mean_body_mass_g': 3709.6590909091, 'mean_flipper_length_mm': 188.7954545455 },\n        { 'Species': 'Adelie Penguin (Pygoscelis adeliae)', 'Island': 'Dream', 'mean_body_mass_g': 3688.3928571429, 'mean_flipper_length_mm': 189.7321428571 },\n        { 'Species': 'Adelie Penguin (Pygoscelis adeliae)', 'Island': 'Torgersen', 'mean_body_mass_g': 3706.3725490196, 'mean_flipper_length_mm': 191.1960784314 },\n        { 'Species': 'Chinstrap penguin (Pygoscelis antarctica)', 'Island': 'Dream', 'mean_body_mass_g': 3733.0882352941, 'mean_flipper_length_mm': 195.8235294118 },\n        { 'Species': 'Gentoo penguin (Pygoscelis papua)', 'Island': 'Biscoe', 'mean_body_mass_g': 5076.0162601626, 'mean_flipper_length_mm': 217.1869918699 },\n        ],\n        fields: [makeField('Species'), makeField('Island'), makeField('mean_body_mass_g'), makeField('mean_flipper_length_mm')],\n        metadata: {\n            'Species': { type: Type.String, semanticType: 'Category', levels: ['Adelie Penguin (Pygoscelis adeliae)', 'Chinstrap penguin (Pygoscelis antarctica)', 'Gentoo penguin (Pygoscelis papua)'] },\n            'Island': { type: Type.String, semanticType: 'Island', levels: ['Biscoe', 'Dream', 'Torgersen'] },\n            'mean_body_mass_g': { type: Type.Number, semanticType: 'Amount', levels: [] },\n            'mean_flipper_length_mm': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('Species'),\n            y: makeEncodingItem('mean_body_mass_g'),\n            group: makeEncodingItem('mean_flipper_length_mm'),\n            column: makeEncodingItem('Island'),\n        },\n        chartProperties: { cornerRadius: 5 },\n    };\n}\n\nfunction gen_penguinsRawQ1RecGpt51(): TestCase {\n    // How do average body mass and flipper length differ across penguin species on each island?\n    // Score: 10/20 | The chart is a readable grouped bar plot by island and species but fails to clearly or correctly rep\n    return {\n        title: 'penguins_raw_q1_rec-gpt-5.1',\n        description: 'Summarize average **Body Mass (g)** and **Flipper Length (mm)** by species and island',\n        tags: ['debug', 'grouped-bar-chart'],\n        chartType: 'Grouped Bar Chart',\n        data: [\n        { 'Island': 'Biscoe', 'Species': 'Adelie Penguin (Pygoscelis adeliae)', 'metric': 'Average Body Mass (g)', 'average_value': 3709.6590909091 },\n        { 'Island': 'Biscoe', 'Species': 'Gentoo penguin (Pygoscelis papua)', 'metric': 'Average Body Mass (g)', 'average_value': 5076.0162601626 },\n        { 'Island': 'Dream', 'Species': 'Adelie Penguin (Pygoscelis adeliae)', 'metric': 'Average Body Mass (g)', 'average_value': 3688.3928571429 },\n        { 'Island': 'Dream', 'Species': 'Chinstrap penguin (Pygoscelis antarctica)', 'metric': 'Average Body Mass (g)', 'average_value': 3733.0882352941 },\n        { 'Island': 'Torgersen', 'Species': 'Adelie Penguin (Pygoscelis adeliae)', 'metric': 'Average Body Mass (g)', 'average_value': 3706.3725490196 },\n        { 'Island': 'Biscoe', 'Species': 'Adelie Penguin (Pygoscelis adeliae)', 'metric': 'Average Flipper Length (mm)', 'average_value': 188.7954545455 },\n        { 'Island': 'Biscoe', 'Species': 'Gentoo penguin (Pygoscelis papua)', 'metric': 'Average Flipper Length (mm)', 'average_value': 217.1869918699 },\n        { 'Island': 'Dream', 'Species': 'Adelie Penguin (Pygoscelis adeliae)', 'metric': 'Average Flipper Length (mm)', 'average_value': 189.7321428571 },\n        { 'Island': 'Dream', 'Species': 'Chinstrap penguin (Pygoscelis antarctica)', 'metric': 'Average Flipper Length (mm)', 'average_value': 195.8235294118 },\n        { 'Island': 'Torgersen', 'Species': 'Adelie Penguin (Pygoscelis adeliae)', 'metric': 'Average Flipper Length (mm)', 'average_value': 191.1960784314 },\n        ],\n        fields: [makeField('Island'), makeField('Species'), makeField('metric'), makeField('average_value')],\n        metadata: {\n            'Island': { type: Type.String, semanticType: 'Region', levels: ['Biscoe', 'Dream', 'Torgersen'] },\n            'Species': { type: Type.String, semanticType: 'Category', levels: ['Adelie Penguin (Pygoscelis adeliae)', 'Chinstrap penguin (Pygoscelis antarctica)', 'Gentoo penguin (Pygoscelis papua)'] },\n            'metric': { type: Type.String, semanticType: 'Category', levels: ['Average Body Mass (g)', 'Average Flipper Length (mm)'] },\n            'average_value': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('Island'),\n            y: makeEncodingItem('average_value'),\n            group: makeEncodingItem('Species'),\n            column: makeEncodingItem('metric'),\n        },\n        chartProperties: { cornerRadius: 3 },\n    };\n}\n\nfunction gen_pixarFilmsQ3RecGpt41(): TestCase {\n    // What is the distribution of Pixar film runtimes, and are there any noticeable clusters or outliers?\n    // Score: 0/20 | The chart is essentially empty, showing only axis labels without any plotted data. As a result, it d\n    return {\n        title: 'pixar_films_q3_rec-gpt-4.1',\n        description: 'Show distribution of **run_time** for Pixar films',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'run_time': '81-85', 'Count': 1 },\n        { 'run_time': '86-90', 'Count': 0 },\n        { 'run_time': '91-95', 'Count': 7 },\n        { 'run_time': '96-100', 'Count': 5 },\n        { 'run_time': '101-105', 'Count': 6 },\n        { 'run_time': '106-110', 'Count': 1 },\n        { 'run_time': '111-115', 'Count': 1 },\n        { 'run_time': '116-120', 'Count': 2 },\n        { 'run_time': '121-125', 'Count': 0 },\n        { 'run_time': '126-130', 'Count': 0 },\n        { 'run_time': '131-135', 'Count': 0 },\n        { 'run_time': '136-140', 'Count': 0 },\n        { 'run_time': '141-145', 'Count': 0 },\n        { 'run_time': '146-150', 'Count': 1 },\n        { 'run_time': '151-155', 'Count': 1 },\n        ],\n        fields: [makeField('run_time'), makeField('Count')],\n        metadata: {\n            'run_time': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            'Count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('run_time'),\n            y: makeEncodingItem('Count'),\n        },\n        chartProperties: { cornerRadius: 3 },\n    };\n}\n\nfunction gen_rankByYearQ3RecGpt41(): TestCase {\n    // What is the distribution of visa-free access counts across all countries in the most recent year, and does it show clear\n    // Score: 2/20 | The chart appears to have failed to render the data, leaving only empty axes. It does not communicat\n    return {\n        title: 'rank_by_year_q3_rec-gpt-4.1',\n        description: 'Show distribution of **visa_free_count** for countries in most recent **year**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'visa_free_count': '(24.999, 30.0]', 'Count': 3 },\n        { 'visa_free_count': '(30.0, 35.0]', 'Count': 3 },\n        { 'visa_free_count': '(35.0, 40.0]', 'Count': 6 },\n        { 'visa_free_count': '(40.0, 45.0]', 'Count': 9 },\n        { 'visa_free_count': '(45.0, 50.0]', 'Count': 9 },\n        { 'visa_free_count': '(50.0, 55.0]', 'Count': 11 },\n        { 'visa_free_count': '(55.0, 60.0]', 'Count': 13 },\n        { 'visa_free_count': '(60.0, 65.0]', 'Count': 9 },\n        { 'visa_free_count': '(65.0, 70.0]', 'Count': 8 },\n        { 'visa_free_count': '(70.0, 75.0]', 'Count': 8 },\n        { 'visa_free_count': '(75.0, 80.0]', 'Count': 5 },\n        { 'visa_free_count': '(80.0, 85.0]', 'Count': 5 },\n        { 'visa_free_count': '(85.0, 90.0]', 'Count': 7 },\n        { 'visa_free_count': '(90.0, 95.0]', 'Count': 5 },\n        { 'visa_free_count': '(95.0, 100.0]', 'Count': 1 },\n        { 'visa_free_count': '(100.0, 105.0]', 'Count': 2 },\n        { 'visa_free_count': '(105.0, 110.0]', 'Count': 0 },\n        { 'visa_free_count': '(110.0, 115.0]', 'Count': 3 },\n        { 'visa_free_count': '(115.0, 120.0]', 'Count': 1 },\n        { 'visa_free_count': '(120.0, 125.0]', 'Count': 7 },\n        { 'visa_free_count': '(125.0, 130.0]', 'Count': 7 },\n        { 'visa_free_count': '(130.0, 135.0]', 'Count': 5 },\n        { 'visa_free_count': '(135.0, 140.0]', 'Count': 2 },\n        { 'visa_free_count': '(140.0, 145.0]', 'Count': 3 },\n        { 'visa_free_count': '(145.0, 150.0]', 'Count': 8 },\n        { 'visa_free_count': '(150.0, 155.0]', 'Count': 3 },\n        { 'visa_free_count': '(155.0, 160.0]', 'Count': 5 },\n        { 'visa_free_count': '(160.0, 165.0]', 'Count': 2 },\n        { 'visa_free_count': '(165.0, 170.0]', 'Count': 5 },\n        { 'visa_free_count': '(170.0, 175.0]', 'Count': 1 },\n        { 'visa_free_count': '(175.0, 180.0]', 'Count': 5 },\n        { 'visa_free_count': '(180.0, 185.0]', 'Count': 17 },\n        { 'visa_free_count': '(185.0, 190.0]', 'Count': 20 },\n        { 'visa_free_count': '(190.0, 195.0]', 'Count': 1 },\n        ],\n        fields: [makeField('visa_free_count'), makeField('Count')],\n        metadata: {\n            'visa_free_count': { type: Type.Number, semanticType: 'Number', levels: [] },\n            'Count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('visa_free_count'),\n            y: makeEncodingItem('Count'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_simpsonsCharactersQ1RecGpt41(): TestCase {\n    // What is the overall distribution of character genders in the dataset?\n    // Score: 2/20 | The visualization is essentially empty and does not show the distribution of character genders. Alth\n    return {\n        title: 'simpsons_characters_q1_rec-gpt-4.1',\n        description: 'Show the count of characters for each **gender**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'character_count': 'Unknown', 'count': 6399 },\n        { 'character_count': 'm', 'count': 252 },\n        { 'character_count': 'f', 'count': 71 },\n        ],\n        fields: [makeField('character_count'), makeField('count')],\n        metadata: {\n            'character_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n            'count': { type: Type.String, semanticType: 'Category', levels: ['252', '6399', '71'] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('gender'),\n            y: makeEncodingItem('character_count'),\n        },\n        chartProperties: { cornerRadius: 5 },\n    };\n}\n\nfunction gen_simpsonsLocationsQ2RecGpt41(): TestCase {\n    // How is the number of locations distributed across the alphabet based on the first letter of the normalized_name?\n    // Score: 9/20 | The visualization conceptually matches the task by showing counts of locations by first letter, but \n    return {\n        title: 'simpsons_locations_q2_rec-gpt-4.1',\n        description: 'Show count of locations by first letter of **normalized_name**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'first_letter': '1', 'location_count': 7 },\n        { 'first_letter': '2', 'location_count': 1 },\n        { 'first_letter': '3', 'location_count': 3 },\n        { 'first_letter': '4', 'location_count': 3 },\n        { 'first_letter': '5', 'location_count': 3 },\n        { 'first_letter': '9', 'location_count': 1 },\n        { 'first_letter': 'A', 'location_count': 207 },\n        { 'first_letter': 'B', 'location_count': 299 },\n        { 'first_letter': 'C', 'location_count': 409 },\n        { 'first_letter': 'D', 'location_count': 199 },\n        { 'first_letter': 'E', 'location_count': 92 },\n        { 'first_letter': 'F', 'location_count': 203 },\n        { 'first_letter': 'G', 'location_count': 151 },\n        { 'first_letter': 'H', 'location_count': 196 },\n        { 'first_letter': 'I', 'location_count': 101 },\n        { 'first_letter': 'J', 'location_count': 50 },\n        { 'first_letter': 'K', 'location_count': 77 },\n        { 'first_letter': 'L', 'location_count': 168 },\n        { 'first_letter': 'M', 'location_count': 302 },\n        { 'first_letter': 'N', 'location_count': 107 },\n        { 'first_letter': 'O', 'location_count': 108 },\n        { 'first_letter': 'P', 'location_count': 226 },\n        { 'first_letter': 'Q', 'location_count': 15 },\n        { 'first_letter': 'R', 'location_count': 201 },\n        { 'first_letter': 'S', 'location_count': 835 },\n        { 'first_letter': 'T', 'location_count': 235 },\n        { 'first_letter': 'U', 'location_count': 43 },\n        { 'first_letter': 'V', 'location_count': 64 },\n        { 'first_letter': 'W', 'location_count': 124 },\n        { 'first_letter': 'X', 'location_count': 1 },\n        { 'first_letter': 'Y', 'location_count': 19 },\n        { 'first_letter': 'Z', 'location_count': 9 },\n        ],\n        fields: [makeField('first_letter'), makeField('location_count')],\n        metadata: {\n            'first_letter': { type: Type.String, semanticType: 'String', levels: ['1', '2', '3', '4', '5', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] },\n            'location_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('first_letter'),\n            y: makeEncodingItem('location_count'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_simpsonsLocationsQ2RecGpt51(): TestCase {\n    // How is the number of locations distributed across the alphabet based on the first letter of the normalized_name?\n    // Score: 1/20 | The figure is essentially empty apart from axis labels and a line, so it fails to show the distribut\n    return {\n        title: 'simpsons_locations_q2_rec-gpt-5.1',\n        description: 'Count **normalized_name** locations by first letter of the alphabet',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'location_count': 'A', 'count': 207 },\n        { 'location_count': 'B', 'count': 299 },\n        { 'location_count': 'C', 'count': 409 },\n        { 'location_count': 'D', 'count': 199 },\n        { 'location_count': 'E', 'count': 92 },\n        { 'location_count': 'F', 'count': 203 },\n        { 'location_count': 'G', 'count': 151 },\n        { 'location_count': 'H', 'count': 196 },\n        { 'location_count': 'I', 'count': 101 },\n        { 'location_count': 'J', 'count': 50 },\n        { 'location_count': 'K', 'count': 77 },\n        { 'location_count': 'L', 'count': 168 },\n        { 'location_count': 'M', 'count': 302 },\n        { 'location_count': 'N', 'count': 107 },\n        { 'location_count': 'O', 'count': 108 },\n        { 'location_count': 'P', 'count': 226 },\n        { 'location_count': 'Q', 'count': 15 },\n        { 'location_count': 'R', 'count': 201 },\n        { 'location_count': 'S', 'count': 835 },\n        { 'location_count': 'T', 'count': 235 },\n        { 'location_count': 'U', 'count': 43 },\n        { 'location_count': 'V', 'count': 64 },\n        { 'location_count': 'W', 'count': 124 },\n        { 'location_count': 'X', 'count': 1 },\n        { 'location_count': 'Y', 'count': 19 },\n        { 'location_count': 'Z', 'count': 9 },\n        ],\n        fields: [makeField('location_count'), makeField('count')],\n        metadata: {\n            'location_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n            'count': { type: Type.String, semanticType: 'Category', levels: ['1', '101', '107', '108', '124', '15', '151', '168', '19', '196', '199', '201', '203', '207', '226', '235', '299', '302', '409', '43', '50', '64', '77', '835', '9', '92'] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('first_letter'),\n            y: makeEncodingItem('location_count'),\n        },\n        chartProperties: { cornerRadius: 3 },\n    };\n}\n\nfunction gen_simpsonsLocationsQ5RecGpt41(): TestCase {\n    // How is the set of locations composed when grouping normalized_name values into high-level place types (e.g., names conta\n    // Score: 10/20 | The chart is conceptually relevant to the task, grouping locations into inferred place types, but ap\n    return {\n        title: 'simpsons_locations_q5_rec-gpt-4.1',\n        description: 'Count locations grouped by inferred place type from **normalized_name**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'place_type': 'Other', 'count': 3277 },\n        { 'place_type': 'House', 'count': 197 },\n        { 'place_type': 'Office', 'count': 147 },\n        { 'place_type': 'Street', 'count': 84 },\n        { 'place_type': 'Apartment', 'count': 71 },\n        { 'place_type': 'School', 'count': 68 },\n        { 'place_type': 'Store', 'count': 67 },\n        { 'place_type': 'Hotel', 'count': 43 },\n        { 'place_type': 'Station', 'count': 38 },\n        { 'place_type': 'Park', 'count': 37 },\n        { 'place_type': 'Hospital', 'count': 33 },\n        { 'place_type': 'Theater', 'count': 32 },\n        { 'place_type': 'Club', 'count': 31 },\n        { 'place_type': 'Airport', 'count': 30 },\n        { 'place_type': 'Home', 'count': 29 },\n        { 'place_type': 'Restaurant', 'count': 28 },\n        { 'place_type': 'Museum', 'count': 27 },\n        { 'place_type': 'Bar', 'count': 22 },\n        { 'place_type': 'Church', 'count': 20 },\n        { 'place_type': 'Factory', 'count': 20 },\n        { 'place_type': 'Arena', 'count': 17 },\n        { 'place_type': 'Mall', 'count': 16 },\n        { 'place_type': 'Bank', 'count': 14 },\n        { 'place_type': 'Auditorium', 'count': 14 },\n        { 'place_type': 'Court', 'count': 13 },\n        { 'place_type': 'Farm', 'count': 12 },\n        { 'place_type': 'Library', 'count': 11 },\n        { 'place_type': 'Bridge', 'count': 11 },\n        { 'place_type': 'Lab', 'count': 10 },\n        { 'place_type': 'Casino', 'count': 8 },\n        { 'place_type': 'Gym', 'count': 8 },\n        { 'place_type': 'Clinic', 'count': 6 },\n        { 'place_type': 'Cafe', 'count': 6 },\n        { 'place_type': 'Zoo', 'count': 5 },\n        { 'place_type': 'Diner', 'count': 4 },\n        { 'place_type': 'Arcade', 'count': 3 },\n        ],\n        fields: [makeField('place_type'), makeField('count')],\n        metadata: {\n            'place_type': { type: Type.String, semanticType: 'Category', levels: ['Airport', 'Apartment', 'Arcade', 'Arena', 'Auditorium', 'Bank', 'Bar', 'Bridge', 'Cafe', 'Casino', 'Church', 'Clinic', 'Club', 'Court', 'Diner', 'Factory', 'Farm', 'Gym', 'Home', 'Hospital', 'Hotel', 'House', 'Lab', 'Library', 'Mall', 'Museum', 'Office', 'Other', 'Park', 'Restaurant', 'School', 'Station', 'Store', 'Street', 'Theater', 'Zoo'] },\n            'count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('place_type'),\n            y: makeEncodingItem('count'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_topicsQ1RecGpt41(): TestCase {\n    // What is the distribution of songs (or lines) across the different lyrical topics?\n    // Score: 10/20 | The chart technically shows a count per lyrical topic, but likely counts topics rather than songs/li\n    return {\n        title: 'topics_q1_rec-gpt-4.1',\n        description: 'Show count of songs per **lyrical_topics**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'lyrical_topics': 'Addiction', 'song_count': 1 },\n        { 'lyrical_topics': 'Jobs', 'song_count': 1 },\n        { 'lyrical_topics': 'Prostitution', 'song_count': 1 },\n        { 'lyrical_topics': 'Poverty', 'song_count': 1 },\n        { 'lyrical_topics': 'Positivity', 'song_count': 1 },\n        { 'lyrical_topics': 'Police', 'song_count': 1 },\n        { 'lyrical_topics': 'Playing Music', 'song_count': 1 },\n        { 'lyrical_topics': 'Partying', 'song_count': 1 },\n        { 'lyrical_topics': 'Pain', 'song_count': 1 },\n        { 'lyrical_topics': 'Paranoia', 'song_count': 1 },\n        { 'lyrical_topics': 'Nudity', 'song_count': 1 },\n        { 'lyrical_topics': 'New York', 'song_count': 1 },\n        { 'lyrical_topics': 'Murder', 'song_count': 1 },\n        { 'lyrical_topics': 'Materialism', 'song_count': 1 },\n        { 'lyrical_topics': 'Masturbation', 'song_count': 1 },\n        { 'lyrical_topics': 'Marriage', 'song_count': 1 },\n        { 'lyrical_topics': 'Magic', 'song_count': 1 },\n        { 'lyrical_topics': 'Lust/Sex', 'song_count': 1 },\n        { 'lyrical_topics': 'Love', 'song_count': 1 },\n        { 'lyrical_topics': 'Lost Innocence', 'song_count': 1 },\n        { 'lyrical_topics': 'Lost Love', 'song_count': 1 },\n        { 'lyrical_topics': 'Longing for Love', 'song_count': 1 },\n        { 'lyrical_topics': 'Lonesomeness', 'song_count': 1 },\n        { 'lyrical_topics': 'Racism', 'song_count': 1 },\n        { 'lyrical_topics': 'Rain', 'song_count': 1 },\n        { 'lyrical_topics': 'Redemption', 'song_count': 1 },\n        { 'lyrical_topics': 'Sin', 'song_count': 1 },\n        { 'lyrical_topics': 'War', 'song_count': 1 },\n        { 'lyrical_topics': 'Violence', 'song_count': 1 },\n        { 'lyrical_topics': 'Utopia/Perfect Places', 'song_count': 1 },\n        { 'lyrical_topics': 'Time', 'song_count': 1 },\n        { 'lyrical_topics': 'Thrift Shopping', 'song_count': 1 },\n        { 'lyrical_topics': 'Survival', 'song_count': 1 },\n        { 'lyrical_topics': 'Surfing/Sailing', 'song_count': 1 },\n        { 'lyrical_topics': 'Superstition', 'song_count': 1 },\n        { 'lyrical_topics': 'Summer', 'song_count': 1 },\n        { 'lyrical_topics': 'Shyness', 'song_count': 1 },\n        { 'lyrical_topics': 'Regret', 'song_count': 1 },\n        { 'lyrical_topics': 'Self-Acceptance', 'song_count': 1 },\n        { 'lyrical_topics': 'Secrets', 'song_count': 1 },\n        { 'lyrical_topics': 'School', 'song_count': 1 },\n        { 'lyrical_topics': 'Sadness', 'song_count': 1 },\n        { 'lyrical_topics': 'Revenge', 'song_count': 1 },\n        { 'lyrical_topics': 'Restraint', 'song_count': 1 },\n        { 'lyrical_topics': 'Restlessness', 'song_count': 1 },\n        { 'lyrical_topics': 'Resilience', 'song_count': 1 },\n        { 'lyrical_topics': 'Respect', 'song_count': 1 },\n        { 'lyrical_topics': 'Life', 'song_count': 1 },\n        { 'lyrical_topics': 'Jewelry', 'song_count': 1 },\n        { 'lyrical_topics': 'Anger', 'song_count': 1 },\n        { 'lyrical_topics': 'Insomnia', 'song_count': 1 },\n        { 'lyrical_topics': 'Empowerment', 'song_count': 1 },\n        { 'lyrical_topics': 'Dystopia', 'song_count': 1 },\n        { 'lyrical_topics': 'Driving', 'song_count': 1 },\n        { 'lyrical_topics': 'Dreaming', 'song_count': 1 },\n        { 'lyrical_topics': 'Doubt', 'song_count': 1 },\n        { 'lyrical_topics': 'Death', 'song_count': 1 },\n        { 'lyrical_topics': 'Dancing', 'song_count': 1 },\n        { 'lyrical_topics': 'Coexistance', 'song_count': 1 },\n        { 'lyrical_topics': 'Childhood', 'song_count': 1 },\n        { 'lyrical_topics': 'Child Birth', 'song_count': 1 },\n        { 'lyrical_topics': 'Christmas', 'song_count': 1 },\n        { 'lyrical_topics': 'Candy', 'song_count': 1 },\n        { 'lyrical_topics': 'Calming Down', 'song_count': 1 },\n        { 'lyrical_topics': 'Bragging', 'song_count': 1 },\n        { 'lyrical_topics': 'Better Times', 'song_count': 1 },\n        { 'lyrical_topics': 'Batman', 'song_count': 1 },\n        { 'lyrical_topics': 'Bands', 'song_count': 1 },\n        { 'lyrical_topics': 'Bad Relationships', 'song_count': 1 },\n        { 'lyrical_topics': 'Bad Behavior', 'song_count': 1 },\n        { 'lyrical_topics': 'Badassery', 'song_count': 1 },\n        { 'lyrical_topics': 'Appreciation', 'song_count': 1 },\n        { 'lyrical_topics': 'Endings/Goodbyes', 'song_count': 1 },\n        { 'lyrical_topics': 'Enlightement', 'song_count': 1 },\n        { 'lyrical_topics': 'Escape', 'song_count': 1 },\n        { 'lyrical_topics': 'God', 'song_count': 1 },\n        { 'lyrical_topics': 'Illigitimacy', 'song_count': 1 },\n        { 'lyrical_topics': 'Infidelity', 'song_count': 1 },\n        { 'lyrical_topics': 'Hypocrisy', 'song_count': 1 },\n        { 'lyrical_topics': 'Hope', 'song_count': 1 },\n        { 'lyrical_topics': 'Homelessness', 'song_count': 1 },\n        { 'lyrical_topics': 'Home', 'song_count': 1 },\n        { 'lyrical_topics': 'Happiness', 'song_count': 1 },\n        { 'lyrical_topics': 'Growing Up', 'song_count': 1 },\n        { 'lyrical_topics': 'Good vs. Evil', 'song_count': 1 },\n        { 'lyrical_topics': 'Ghosts', 'song_count': 1 },\n        { 'lyrical_topics': 'Failure', 'song_count': 1 },\n        { 'lyrical_topics': 'Getting Older', 'song_count': 1 },\n        { 'lyrical_topics': 'Getting Back Together', 'song_count': 1 },\n        { 'lyrical_topics': 'Flying', 'song_count': 1 },\n        { 'lyrical_topics': 'Friendship', 'song_count': 1 },\n        { 'lyrical_topics': 'Forbidden Love', 'song_count': 1 },\n        { 'lyrical_topics': 'Fighting', 'song_count': 1 },\n        { 'lyrical_topics': 'Family', 'song_count': 1 },\n        { 'lyrical_topics': 'Fame', 'song_count': 1 },\n        { 'lyrical_topics': 'Faithfulness', 'song_count': 1 },\n        { 'lyrical_topics': 'Work', 'song_count': 1 },\n        ],\n        fields: [makeField('lyrical_topics'), makeField('song_count')],\n        metadata: {\n            'lyrical_topics': { type: Type.String, semanticType: 'Category', levels: ['Addiction', 'Anger', 'Appreciation', 'Bad Behavior', 'Bad Relationships', 'Badassery', 'Bands', 'Batman', 'Better Times', 'Bragging', 'Calming Down', 'Candy', 'Child Birth', 'Childhood', 'Christmas', 'Coexistance', 'Dancing', 'Death', 'Doubt', 'Dreaming', 'Driving', 'Dystopia', 'Empowerment', 'Endings/Goodbyes', 'Enlightement', 'Escape', 'Failure', 'Faithfulness', 'Fame', 'Family', 'Fighting', 'Flying', 'Forbidden Love', 'Friendship', 'Getting Back Together', 'Getting Older', 'Ghosts', 'God', 'Good vs. Evil', 'Growing Up', 'Happiness', 'Home', 'Homelessness', 'Hope', 'Hypocrisy', 'Illigitimacy', 'Infidelity', 'Insomnia', 'Jewelry', 'Jobs'] },\n            'song_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('lyrical_topics'),\n            y: makeEncodingItem('song_count'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_topicsQ2RecGpt51(): TestCase {\n    // Which lyrical topics are most common versus least common, and how do their counts compare?\n    // Score: 7/20 | The visualization mechanically plots a count for each lyrical topic but appears to just count unique\n    return {\n        title: 'topics_q2_rec-gpt-5.1',\n        description: 'Count how often each **lyrical_topics** category appears',\n        tags: ['debug', 'lollipop-chart'],\n        chartType: 'Lollipop Chart',\n        data: [\n        { 'lyrical_topics': 'Addiction', 'topic_count': 1 },\n        { 'lyrical_topics': 'Anger', 'topic_count': 1 },\n        { 'lyrical_topics': 'Appreciation', 'topic_count': 1 },\n        { 'lyrical_topics': 'Badassery', 'topic_count': 1 },\n        { 'lyrical_topics': 'Bad Behavior', 'topic_count': 1 },\n        { 'lyrical_topics': 'Bad Relationships', 'topic_count': 1 },\n        { 'lyrical_topics': 'Bands', 'topic_count': 1 },\n        { 'lyrical_topics': 'Batman', 'topic_count': 1 },\n        { 'lyrical_topics': 'Better Times', 'topic_count': 1 },\n        { 'lyrical_topics': 'Bragging', 'topic_count': 1 },\n        { 'lyrical_topics': 'Calming Down', 'topic_count': 1 },\n        { 'lyrical_topics': 'Candy', 'topic_count': 1 },\n        { 'lyrical_topics': 'Christmas', 'topic_count': 1 },\n        { 'lyrical_topics': 'Child Birth', 'topic_count': 1 },\n        { 'lyrical_topics': 'Childhood', 'topic_count': 1 },\n        { 'lyrical_topics': 'Coexistance', 'topic_count': 1 },\n        { 'lyrical_topics': 'Dancing', 'topic_count': 1 },\n        { 'lyrical_topics': 'Death', 'topic_count': 1 },\n        { 'lyrical_topics': 'Doubt', 'topic_count': 1 },\n        { 'lyrical_topics': 'Dreaming', 'topic_count': 1 },\n        { 'lyrical_topics': 'Driving', 'topic_count': 1 },\n        { 'lyrical_topics': 'Dystopia', 'topic_count': 1 },\n        { 'lyrical_topics': 'Empowerment', 'topic_count': 1 },\n        { 'lyrical_topics': 'Endings/Goodbyes', 'topic_count': 1 },\n        { 'lyrical_topics': 'Enlightement', 'topic_count': 1 },\n        { 'lyrical_topics': 'Escape', 'topic_count': 1 },\n        { 'lyrical_topics': 'Failure', 'topic_count': 1 },\n        { 'lyrical_topics': 'Faithfulness', 'topic_count': 1 },\n        { 'lyrical_topics': 'Fame', 'topic_count': 1 },\n        { 'lyrical_topics': 'Family', 'topic_count': 1 },\n        { 'lyrical_topics': 'Fighting', 'topic_count': 1 },\n        { 'lyrical_topics': 'Forbidden Love', 'topic_count': 1 },\n        { 'lyrical_topics': 'Friendship', 'topic_count': 1 },\n        { 'lyrical_topics': 'Flying', 'topic_count': 1 },\n        { 'lyrical_topics': 'Getting Back Together', 'topic_count': 1 },\n        { 'lyrical_topics': 'Getting Older', 'topic_count': 1 },\n        { 'lyrical_topics': 'Ghosts', 'topic_count': 1 },\n        { 'lyrical_topics': 'God', 'topic_count': 1 },\n        { 'lyrical_topics': 'Good vs. Evil', 'topic_count': 1 },\n        { 'lyrical_topics': 'Growing Up', 'topic_count': 1 },\n        { 'lyrical_topics': 'Happiness', 'topic_count': 1 },\n        { 'lyrical_topics': 'Home', 'topic_count': 1 },\n        { 'lyrical_topics': 'Homelessness', 'topic_count': 1 },\n        { 'lyrical_topics': 'Hope', 'topic_count': 1 },\n        { 'lyrical_topics': 'Hypocrisy', 'topic_count': 1 },\n        { 'lyrical_topics': 'Infidelity', 'topic_count': 1 },\n        { 'lyrical_topics': 'Illigitimacy', 'topic_count': 1 },\n        { 'lyrical_topics': 'Insomnia', 'topic_count': 1 },\n        { 'lyrical_topics': 'Jewelry', 'topic_count': 1 },\n        { 'lyrical_topics': 'Jobs', 'topic_count': 1 },\n        { 'lyrical_topics': 'Life', 'topic_count': 1 },\n        { 'lyrical_topics': 'Lonesomeness', 'topic_count': 1 },\n        { 'lyrical_topics': 'Longing for Love', 'topic_count': 1 },\n        { 'lyrical_topics': 'Lost Love', 'topic_count': 1 },\n        { 'lyrical_topics': 'Lost Innocence', 'topic_count': 1 },\n        { 'lyrical_topics': 'Love', 'topic_count': 1 },\n        { 'lyrical_topics': 'Lust/Sex', 'topic_count': 1 },\n        { 'lyrical_topics': 'Magic', 'topic_count': 1 },\n        { 'lyrical_topics': 'Marriage', 'topic_count': 1 },\n        { 'lyrical_topics': 'Masturbation', 'topic_count': 1 },\n        { 'lyrical_topics': 'Materialism', 'topic_count': 1 },\n        { 'lyrical_topics': 'Murder', 'topic_count': 1 },\n        { 'lyrical_topics': 'New York', 'topic_count': 1 },\n        { 'lyrical_topics': 'Nudity', 'topic_count': 1 },\n        { 'lyrical_topics': 'Paranoia', 'topic_count': 1 },\n        { 'lyrical_topics': 'Pain', 'topic_count': 1 },\n        { 'lyrical_topics': 'Partying', 'topic_count': 1 },\n        { 'lyrical_topics': 'Playing Music', 'topic_count': 1 },\n        { 'lyrical_topics': 'Police', 'topic_count': 1 },\n        { 'lyrical_topics': 'Positivity', 'topic_count': 1 },\n        { 'lyrical_topics': 'Poverty', 'topic_count': 1 },\n        { 'lyrical_topics': 'Prostitution', 'topic_count': 1 },\n        { 'lyrical_topics': 'Racism', 'topic_count': 1 },\n        { 'lyrical_topics': 'Rain', 'topic_count': 1 },\n        { 'lyrical_topics': 'Redemption', 'topic_count': 1 },\n        { 'lyrical_topics': 'Regret', 'topic_count': 1 },\n        { 'lyrical_topics': 'Respect', 'topic_count': 1 },\n        { 'lyrical_topics': 'Resilience', 'topic_count': 1 },\n        { 'lyrical_topics': 'Restlessness', 'topic_count': 1 },\n        { 'lyrical_topics': 'Restraint', 'topic_count': 1 },\n        { 'lyrical_topics': 'Revenge', 'topic_count': 1 },\n        { 'lyrical_topics': 'Sadness', 'topic_count': 1 },\n        { 'lyrical_topics': 'School', 'topic_count': 1 },\n        { 'lyrical_topics': 'Secrets', 'topic_count': 1 },\n        { 'lyrical_topics': 'Self-Acceptance', 'topic_count': 1 },\n        { 'lyrical_topics': 'Shyness', 'topic_count': 1 },\n        { 'lyrical_topics': 'Sin', 'topic_count': 1 },\n        { 'lyrical_topics': 'Summer', 'topic_count': 1 },\n        { 'lyrical_topics': 'Superstition', 'topic_count': 1 },\n        { 'lyrical_topics': 'Surfing/Sailing', 'topic_count': 1 },\n        { 'lyrical_topics': 'Survival', 'topic_count': 1 },\n        { 'lyrical_topics': 'Thrift Shopping', 'topic_count': 1 },\n        { 'lyrical_topics': 'Time', 'topic_count': 1 },\n        { 'lyrical_topics': 'Utopia/Perfect Places', 'topic_count': 1 },\n        { 'lyrical_topics': 'Violence', 'topic_count': 1 },\n        { 'lyrical_topics': 'War', 'topic_count': 1 },\n        { 'lyrical_topics': 'Work', 'topic_count': 1 },\n        ],\n        fields: [makeField('lyrical_topics'), makeField('topic_count')],\n        metadata: {\n            'lyrical_topics': { type: Type.String, semanticType: 'Category', levels: ['Addiction', 'Anger', 'Appreciation', 'Bad Behavior', 'Bad Relationships', 'Badassery', 'Bands', 'Batman', 'Better Times', 'Bragging', 'Calming Down', 'Candy', 'Child Birth', 'Childhood', 'Christmas', 'Coexistance', 'Dancing', 'Death', 'Doubt', 'Dreaming', 'Driving', 'Dystopia', 'Empowerment', 'Endings/Goodbyes', 'Enlightement', 'Escape', 'Failure', 'Faithfulness', 'Fame', 'Family', 'Fighting', 'Flying', 'Forbidden Love', 'Friendship', 'Getting Back Together', 'Getting Older', 'Ghosts', 'God', 'Good vs. Evil', 'Growing Up', 'Happiness', 'Home', 'Homelessness', 'Hope', 'Hypocrisy', 'Illigitimacy', 'Infidelity', 'Insomnia', 'Jewelry', 'Jobs'] },\n            'topic_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('topic_count'),\n            y: makeEncodingItem('lyrical_topics'),\n        },\n    };\n}\n\nfunction gen_user2025Q1RecGpt41(): TestCase {\n    // How is the number of scheduled sessions distributed across the conference days?\n    // Score: 9/20 | The visualization partially addresses the question of how sessions are distributed across conference\n    return {\n        title: 'user2025_q1_rec-gpt-4.1',\n        description: 'Show count of scheduled **session** per **date**',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'date': '2025-08-01', 'session_count': 31 },\n        { 'date': '2025-08-08', 'session_count': 22 },\n        { 'date': '2025-08-09', 'session_count': 40 },\n        { 'date': '2025-08-10', 'session_count': 35 },\n        ],\n        fields: [makeField('date'), makeField('session_count')],\n        metadata: {\n            'date': { type: Type.Date, semanticType: 'Date', levels: ['2025-08-01', '2025-08-08', '2025-08-09', '2025-08-10'] },\n            'session_count': { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('date'),\n            y: makeEncodingItem('session_count'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_user2025Q5RecGpt51(): TestCase {\n    // How is the composition of virtual vs. in‑person sessions changing over the conference dates, and what proportion of each\n    // Score: 10/20 | The visualization provides a basic comparison of virtual vs in-person sessions across dates but lack\n    return {\n        title: 'user2025_q5_rec-gpt-5.1',\n        description: 'Summarize **session** modality mix and recording rates by **date**',\n        tags: ['debug', 'line-chart'],\n        chartType: 'Line Chart',\n        data: [\n        { 'date': '2025-08-01', 'modality': 'Virtual', 'total_sessions': 31, 'recorded_sessions': 29, 'sessions_per_date': 31, 'metric': 'Share of sessions by modality', 'value': 1.0 },\n        { 'date': '2025-08-08', 'modality': 'In-person', 'total_sessions': 22, 'recorded_sessions': 14, 'sessions_per_date': 22, 'metric': 'Share of sessions by modality', 'value': 1.0 },\n        { 'date': '2025-08-09', 'modality': 'In-person', 'total_sessions': 40, 'recorded_sessions': 40, 'sessions_per_date': 40, 'metric': 'Share of sessions by modality', 'value': 1.0 },\n        { 'date': '2025-08-10', 'modality': 'In-person', 'total_sessions': 35, 'recorded_sessions': 34, 'sessions_per_date': 35, 'metric': 'Share of sessions by modality', 'value': 1.0 },\n        { 'date': '2025-08-01', 'modality': 'Virtual', 'total_sessions': 31, 'recorded_sessions': 29, 'sessions_per_date': 31, 'metric': 'Share recorded within modality', 'value': 0.935483871 },\n        { 'date': '2025-08-08', 'modality': 'In-person', 'total_sessions': 22, 'recorded_sessions': 14, 'sessions_per_date': 22, 'metric': 'Share recorded within modality', 'value': 0.6363636364 },\n        { 'date': '2025-08-09', 'modality': 'In-person', 'total_sessions': 40, 'recorded_sessions': 40, 'sessions_per_date': 40, 'metric': 'Share recorded within modality', 'value': 1.0 },\n        { 'date': '2025-08-10', 'modality': 'In-person', 'total_sessions': 35, 'recorded_sessions': 34, 'sessions_per_date': 35, 'metric': 'Share recorded within modality', 'value': 0.9714285714 },\n        ],\n        fields: [makeField('date'), makeField('modality'), makeField('total_sessions'), makeField('recorded_sessions'), makeField('sessions_per_date'), makeField('metric'), makeField('value')],\n        metadata: {\n            'date': { type: Type.Date, semanticType: 'Date', levels: ['2025-08-01', '2025-08-08', '2025-08-09', '2025-08-10'] },\n            'modality': { type: Type.String, semanticType: 'Category', levels: ['In-person', 'Virtual'] },\n            'total_sessions': { type: Type.String, semanticType: 'Category', levels: ['22', '31', '35', '40'] },\n            'recorded_sessions': { type: Type.String, semanticType: 'Category', levels: ['14', '29', '34', '40'] },\n            'sessions_per_date': { type: Type.String, semanticType: 'Category', levels: ['22', '31', '35', '40'] },\n            'metric': { type: Type.String, semanticType: 'String', levels: ['Share of sessions by modality', 'Share recorded within modality'] },\n            'value': { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('date'),\n            y: makeEncodingItem('value'),\n            color: makeEncodingItem('modality'),\n            column: makeEncodingItem('metric'),\n        },\n        chartProperties: { interpolate: \"monotone\" },\n    };\n}\n\nfunction gen_vesuviusQ4RecGpt41(): TestCase {\n    // Which years have the highest average duration_magnitude_md, and how do they rank from highest to lowest?\n    // Score: 10/20 | Visually clean bar chart of average duration_magnitude_md per year, but it misrepresents the dataset\n    return {\n        title: 'vesuvius_q4_rec-gpt-4.1',\n        description: 'Show average **duration_magnitude_md** per **year**, ranked highest to lowest',\n        tags: ['debug', 'bar-chart'],\n        chartType: 'Bar Chart',\n        data: [\n        { 'year': 2011, 'avg_duration_magnitude_md': 1.2, 'rank': 1 },\n        { 'year': 2012, 'avg_duration_magnitude_md': 0.7, 'rank': 2 },\n        { 'year': 2023, 'avg_duration_magnitude_md': 0.3005106888, 'rank': 3 },\n        { 'year': 2022, 'avg_duration_magnitude_md': 0.245601907, 'rank': 4 },\n        { 'year': 2020, 'avg_duration_magnitude_md': 0.2355498721, 'rank': 5 },\n        { 'year': 2017, 'avg_duration_magnitude_md': 0.2258205689, 'rank': 6 },\n        { 'year': 2014, 'avg_duration_magnitude_md': 0.1986091794, 'rank': 7 },\n        { 'year': 2013, 'avg_duration_magnitude_md': 0.1971326165, 'rank': 8 },\n        { 'year': 2021, 'avg_duration_magnitude_md': 0.1837883284, 'rank': 9 },\n        { 'year': 2018, 'avg_duration_magnitude_md': 0.1801710731, 'rank': 10 },\n        { 'year': 2016, 'avg_duration_magnitude_md': 0.1779725086, 'rank': 11 },\n        { 'year': 2024, 'avg_duration_magnitude_md': 0.1388629283, 'rank': 12 },\n        { 'year': 2015, 'avg_duration_magnitude_md': 0.0563169165, 'rank': 13 },\n        { 'year': 2019, 'avg_duration_magnitude_md': 0.0494635373, 'rank': 14 },\n        ],\n        fields: [makeField('year'), makeField('avg_duration_magnitude_md'), makeField('rank')],\n        metadata: {\n            'year': { type: Type.Number, semanticType: 'Year', levels: [] },\n            'avg_duration_magnitude_md': { type: Type.Number, semanticType: 'Number', levels: [] },\n            'rank': { type: Type.Number, semanticType: 'Rank', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('year'),\n            y: makeEncodingItem('avg_duration_magnitude_md'),\n        },\n        chartProperties: { cornerRadius: 4 },\n    };\n}\n\nfunction gen_vesuviusQ5RecGpt41(): TestCase {\n    // How are earthquake epicenters spatially distributed around Mount Vesuvius, and how does depth_km vary across latitude an\n    // Score: 1/20 | The visualization is essentially just a depth colorbar with a single dot and lacks the necessary spa\n    return {\n        title: 'vesuvius_q5_rec-gpt-4.1',\n        description: 'Map earthquake epicenters and show **depth_km** variation',\n        tags: ['debug', 'scatter-plot'],\n        chartType: 'Scatter Plot',\n        data: [\n        { 'latitude': 40.821831, 'longitude': 14.4305, 'depth_km': 0.23 },\n        { 'latitude': 40.817169, 'longitude': 14.427, 'depth_km': 0.07 },\n        { 'latitude': 40.818668, 'longitude': 14.43267, 'depth_km': 0.4 },\n        { 'latitude': 40.817329, 'longitude': 14.42833, 'depth_km': 0.3 },\n        { 'latitude': 40.821831, 'longitude': 14.42683, 'depth_km': 0.37 },\n        { 'latitude': 40.824329, 'longitude': 14.42383, 'depth_km': 0.66 },\n        { 'latitude': 40.8195, 'longitude': 14.42783, 'depth_km': 0.21 },\n        { 'latitude': 40.817669, 'longitude': 14.43267, 'depth_km': 0.16 },\n        { 'latitude': 40.822201, 'longitude': 14.4287, 'depth_km': 0.78 },\n        { 'latitude': 40.818668, 'longitude': 14.42517, 'depth_km': 0.24 },\n        { 'latitude': 40.819, 'longitude': 14.42383, 'depth_km': 0.07 },\n        { 'latitude': 40.817001, 'longitude': 14.4305, 'depth_km': 0.47 },\n        { 'latitude': 40.823669, 'longitude': 14.43017, 'depth_km': 0.23 },\n        { 'latitude': 40.82267, 'longitude': 14.4345, 'depth_km': 0.43 },\n        { 'latitude': 40.822, 'longitude': 14.42, 'depth_km': 0.22 },\n        { 'latitude': 40.820332, 'longitude': 14.41967, 'depth_km': 0.84 },\n        { 'latitude': 40.823669, 'longitude': 14.42433, 'depth_km': 1.71 },\n        { 'latitude': 40.8223, 'longitude': 14.4315, 'depth_km': 0.28 },\n        { 'latitude': 40.820839, 'longitude': 14.424, 'depth_km': 0.09 },\n        { 'latitude': 40.823167, 'longitude': 14.422333, 'depth_km': 0.17 },\n        { 'latitude': 40.82333, 'longitude': 14.42617, 'depth_km': 0.11 },\n        { 'latitude': 40.817001, 'longitude': 14.43367, 'depth_km': 0.05 },\n        { 'latitude': 40.819672, 'longitude': 14.4345, 'depth_km': 0.15 },\n        { 'latitude': 40.818501, 'longitude': 14.428, 'depth_km': 0.13 },\n        { 'latitude': 40.824329, 'longitude': 14.42533, 'depth_km': 0.93 },\n        { 'latitude': 40.820839, 'longitude': 14.43633, 'depth_km': 0.64 },\n        { 'latitude': 40.817829, 'longitude': 14.42467, 'depth_km': 0.2 },\n        { 'latitude': 40.81633, 'longitude': 14.42917, 'depth_km': 0.21 },\n        { 'latitude': 40.822498, 'longitude': 14.42883, 'depth_km': 0.17 },\n        { 'latitude': 40.82, 'longitude': 14.42217, 'depth_km': 0.22 },\n        { 'latitude': 40.821671, 'longitude': 14.4255, 'depth_km': 0.06 },\n        { 'latitude': 40.821301, 'longitude': 14.4317, 'depth_km': 0.98 },\n        { 'latitude': 40.819328, 'longitude': 14.42833, 'depth_km': 0.11 },\n        { 'latitude': 40.822701, 'longitude': 14.4298, 'depth_km': 0.11 },\n        { 'latitude': 40.823502, 'longitude': 14.42333, 'depth_km': 0.2 },\n        { 'latitude': 40.820332, 'longitude': 14.431, 'depth_km': 0.22 },\n        { 'latitude': 40.81633, 'longitude': 14.42667, 'depth_km': 0.07 },\n        { 'latitude': 40.819667, 'longitude': 14.433, 'depth_km': 0.18 },\n        { 'latitude': 40.80917, 'longitude': 14.42333, 'depth_km': 0.78 },\n        { 'latitude': 40.8237, 'longitude': 14.4335, 'depth_km': 0.27 },\n        { 'latitude': 40.816669, 'longitude': 14.43117, 'depth_km': 0.32 },\n        { 'latitude': 40.818668, 'longitude': 14.4275, 'depth_km': 0.34 },\n        { 'latitude': 40.823299, 'longitude': 14.4295, 'depth_km': 1.56 },\n        { 'latitude': 40.821171, 'longitude': 14.43033, 'depth_km': 0.1 },\n        { 'latitude': 40.820171, 'longitude': 14.43017, 'depth_km': 0.02 },\n        { 'latitude': 40.821999, 'longitude': 14.43483, 'depth_km': 0.8 },\n        { 'latitude': 40.819, 'longitude': 14.4275, 'depth_km': 0.17 },\n        { 'latitude': 40.819, 'longitude': 14.43183, 'depth_km': 0.23 },\n        { 'latitude': 40.819, 'longitude': 14.42567, 'depth_km': 0.05 },\n        { 'latitude': 40.818668, 'longitude': 14.43217, 'depth_km': 0.09 },\n        { 'latitude': 40.824669, 'longitude': 14.4295, 'depth_km': 0.07 },\n        { 'latitude': 40.8232, 'longitude': 14.429, 'depth_km': 1.48 },\n        { 'latitude': 40.819672, 'longitude': 14.4315, 'depth_km': 0.17 },\n        { 'latitude': 40.8235, 'longitude': 14.426167, 'depth_km': 0.32 },\n        { 'latitude': 40.821499, 'longitude': 14.4278, 'depth_km': 0.16 },\n        { 'latitude': 40.819672, 'longitude': 14.42883, 'depth_km': 0.21 },\n        { 'latitude': 40.820499, 'longitude': 14.4322, 'depth_km': 0.06 },\n        { 'latitude': 40.820202, 'longitude': 14.4247, 'depth_km': 0.14 },\n        { 'latitude': 40.820671, 'longitude': 14.43033, 'depth_km': 0.28 },\n        { 'latitude': 40.820671, 'longitude': 14.43383, 'depth_km': 0.08 },\n        { 'latitude': 40.8265, 'longitude': 14.42683, 'depth_km': 0.54 },\n        { 'latitude': 40.819328, 'longitude': 14.4325, 'depth_km': 0.06 },\n        { 'latitude': 40.82217, 'longitude': 14.431, 'depth_km': 0.34 },\n        { 'latitude': 40.820171, 'longitude': 14.432, 'depth_km': 0.25 },\n        { 'latitude': 40.825833, 'longitude': 14.421167, 'depth_km': 0.25 },\n        { 'latitude': 40.821499, 'longitude': 14.4283, 'depth_km': 0.24 },\n        { 'latitude': 40.821831, 'longitude': 14.42917, 'depth_km': 0.35 },\n        { 'latitude': 40.824329, 'longitude': 14.4245, 'depth_km': 0.27 },\n        { 'latitude': 40.819328, 'longitude': 14.42733, 'depth_km': 0.22 },\n        { 'latitude': 40.8195, 'longitude': 14.42167, 'depth_km': 0.17 },\n        { 'latitude': 40.822498, 'longitude': 14.43067, 'depth_km': 0.25 },\n        { 'latitude': 40.814499, 'longitude': 14.43117, 'depth_km': 0.08 },\n        { 'latitude': 40.820499, 'longitude': 14.42817, 'depth_km': 0.15 },\n        { 'latitude': 40.818802, 'longitude': 14.4257, 'depth_km': 0.11 },\n        { 'latitude': 40.819832, 'longitude': 14.43117, 'depth_km': 0.12 },\n        { 'latitude': 40.81683, 'longitude': 14.4225, 'depth_km': 0.08 },\n        { 'latitude': 40.817829, 'longitude': 14.42617, 'depth_km': 0.15 },\n        { 'latitude': 40.818668, 'longitude': 14.43117, 'depth_km': 0.32 },\n        { 'latitude': 40.817329, 'longitude': 14.4275, 'depth_km': 0.15 },\n        { 'latitude': 40.827167, 'longitude': 14.4205, 'depth_km': 0.19 },\n        { 'latitude': 40.823502, 'longitude': 14.4295, 'depth_km': 0.21 },\n        { 'latitude': 40.819667, 'longitude': 14.427, 'depth_km': 0.15 },\n        { 'latitude': 40.819832, 'longitude': 14.429, 'depth_km': 0.16 },\n        { 'latitude': 40.819832, 'longitude': 14.433, 'depth_km': 0.19 },\n        { 'latitude': 40.82217, 'longitude': 14.42883, 'depth_km': 0.18 },\n        { 'latitude': 40.820332, 'longitude': 14.42433, 'depth_km': 1.42 },\n        { 'latitude': 40.821331, 'longitude': 14.43233, 'depth_km': 0.27 },\n        { 'latitude': 40.82, 'longitude': 14.4213, 'depth_km': 0.27 },\n        { 'latitude': 40.821999, 'longitude': 14.4268, 'depth_km': 0.14 },\n        { 'latitude': 40.8228, 'longitude': 14.4258, 'depth_km': 0.21 },\n        { 'latitude': 40.819328, 'longitude': 14.42467, 'depth_km': 0.25 },\n        { 'latitude': 40.815331, 'longitude': 14.4275, 'depth_km': 0.2 },\n        { 'latitude': 40.820833, 'longitude': 14.432167, 'depth_km': 0.06 },\n        { 'latitude': 40.8175, 'longitude': 14.430333, 'depth_km': 0.28 },\n        { 'latitude': 40.817169, 'longitude': 14.43217, 'depth_km': 0.28 },\n        { 'latitude': 40.820671, 'longitude': 14.43033, 'depth_km': 0.1 },\n        { 'latitude': 40.817001, 'longitude': 14.42517, 'depth_km': 0.25 },\n        { 'latitude': 40.80917, 'longitude': 14.427, 'depth_km': 0.57 },\n        { 'latitude': 40.818668, 'longitude': 14.4365, 'depth_km': 0.64 },\n        { 'latitude': 40.818001, 'longitude': 14.4283, 'depth_km': 0.18 },\n        { 'latitude': 40.816669, 'longitude': 14.41967, 'depth_km': 0.34 },\n        { 'latitude': 40.823299, 'longitude': 14.423, 'depth_km': 0.49 },\n        { 'latitude': 40.820702, 'longitude': 14.4277, 'depth_km': 0.14 },\n        { 'latitude': 40.818833, 'longitude': 14.426667, 'depth_km': 0.11 },\n        { 'latitude': 40.820839, 'longitude': 14.4325, 'depth_km': 0.2 },\n        { 'latitude': 40.825329, 'longitude': 14.412, 'depth_km': 0.05 },\n        { 'latitude': 40.815331, 'longitude': 14.42483, 'depth_km': 0.22 },\n        { 'latitude': 40.819328, 'longitude': 14.4325, 'depth_km': 0.27 },\n        { 'latitude': 40.820171, 'longitude': 14.426, 'depth_km': 0.25 },\n        { 'latitude': 40.822498, 'longitude': 14.43033, 'depth_km': 0.46 },\n        { 'latitude': 40.823002, 'longitude': 14.4335, 'depth_km': 0.29 },\n        { 'latitude': 40.819698, 'longitude': 14.4205, 'depth_km': 1.08 },\n        { 'latitude': 40.820999, 'longitude': 14.433, 'depth_km': 0.37 },\n        { 'latitude': 40.824833, 'longitude': 14.425333, 'depth_km': 0.3 },\n        { 'latitude': 40.825161, 'longitude': 14.42883, 'depth_km': 1.83 },\n        { 'latitude': 40.824329, 'longitude': 14.42867, 'depth_km': 0.48 },\n        { 'latitude': 40.8205, 'longitude': 14.4215, 'depth_km': 0.18 },\n        { 'latitude': 40.81617, 'longitude': 14.42767, 'depth_km': 0.34 },\n        { 'latitude': 40.822833, 'longitude': 14.422167, 'depth_km': 0.27 },\n        { 'latitude': 40.825329, 'longitude': 14.424, 'depth_km': 0.21 },\n        { 'latitude': 40.821331, 'longitude': 14.42467, 'depth_km': 0.2 },\n        { 'latitude': 40.82333, 'longitude': 14.428, 'depth_km': 2.58 },\n        { 'latitude': 40.8218, 'longitude': 14.4262, 'depth_km': 0.14 },\n        { 'latitude': 40.82, 'longitude': 14.42983, 'depth_km': 0.57 },\n        { 'latitude': 40.823002, 'longitude': 14.42317, 'depth_km': 1.49 },\n        { 'latitude': 40.819832, 'longitude': 14.42633, 'depth_km': 0.37 },\n        { 'latitude': 40.820167, 'longitude': 14.420167, 'depth_km': 0.39 },\n        { 'latitude': 40.821331, 'longitude': 14.42283, 'depth_km': 0.27 },\n        { 'latitude': 40.822498, 'longitude': 14.4305, 'depth_km': 0.59 },\n        { 'latitude': 40.8195, 'longitude': 14.4263, 'depth_km': 0.18 },\n        { 'latitude': 40.820999, 'longitude': 14.424, 'depth_km': 1.87 },\n        { 'latitude': 40.817829, 'longitude': 14.42717, 'depth_km': 0.36 },\n        { 'latitude': 40.824501, 'longitude': 14.429, 'depth_km': 0.22 },\n        { 'latitude': 40.821999, 'longitude': 14.42967, 'depth_km': 0.46 },\n        { 'latitude': 40.818501, 'longitude': 14.43367, 'depth_km': 0.15 },\n        { 'latitude': 40.823669, 'longitude': 14.4255, 'depth_km': 0.06 },\n        { 'latitude': 40.820667, 'longitude': 14.4315, 'depth_km': 0.4 },\n        { 'latitude': 40.817829, 'longitude': 14.4325, 'depth_km': 0.34 },\n        { 'latitude': 40.82217, 'longitude': 14.42883, 'depth_km': 0.56 },\n        { 'latitude': 40.817169, 'longitude': 14.444, 'depth_km': 0.32 },\n        { 'latitude': 40.82, 'longitude': 14.431333, 'depth_km': 0.18 },\n        { 'latitude': 40.821171, 'longitude': 14.423, 'depth_km': 0.14 },\n        { 'latitude': 40.809502, 'longitude': 14.41983, 'depth_km': 1.15 },\n        { 'latitude': 40.822498, 'longitude': 14.4232, 'depth_km': 0.22 },\n        { 'latitude': 40.818001, 'longitude': 14.4275, 'depth_km': 0.25 },\n        { 'latitude': 40.822498, 'longitude': 14.42533, 'depth_km': 1.69 },\n        { 'latitude': 40.821671, 'longitude': 14.42567, 'depth_km': 0.15 },\n        { 'latitude': 40.819698, 'longitude': 14.4283, 'depth_km': 0.18 },\n        { 'latitude': 40.820702, 'longitude': 14.4225, 'depth_km': 0.2 },\n        { 'latitude': 40.820301, 'longitude': 14.4247, 'depth_km': 0.12 },\n        { 'latitude': 40.824167, 'longitude': 14.426, 'depth_km': 0.4 },\n        { 'latitude': 40.823833, 'longitude': 14.420833, 'depth_km': 0.2 },\n        { 'latitude': 40.82217, 'longitude': 14.42933, 'depth_km': 0.11 },\n        { 'latitude': 40.819672, 'longitude': 14.4325, 'depth_km': 0.23 },\n        { 'latitude': 40.819832, 'longitude': 14.43167, 'depth_km': 0.1 },\n        { 'latitude': 40.820999, 'longitude': 14.4305, 'depth_km': 0.15 },\n        { 'latitude': 40.820839, 'longitude': 14.42567, 'depth_km': 0.19 },\n        { 'latitude': 40.818501, 'longitude': 14.43367, 'depth_km': 0.2 },\n        { 'latitude': 40.82283, 'longitude': 14.4275, 'depth_km': 0.73 },\n        { 'latitude': 40.807331, 'longitude': 14.42017, 'depth_km': 0.66 },\n        { 'latitude': 40.82283, 'longitude': 14.42417, 'depth_km': 1.73 },\n        { 'latitude': 40.818161, 'longitude': 14.4245, 'depth_km': 0.23 },\n        { 'latitude': 40.824501, 'longitude': 14.41783, 'depth_km': 0.07 },\n        { 'latitude': 40.820171, 'longitude': 14.42733, 'depth_km': 0.11 },\n        { 'latitude': 40.8265, 'longitude': 14.42783, 'depth_km': 0.42 },\n        { 'latitude': 40.82, 'longitude': 14.4315, 'depth_km': 0.46 },\n        { 'latitude': 40.818329, 'longitude': 14.42783, 'depth_km': 1.1 },\n        { 'latitude': 40.815331, 'longitude': 14.425, 'depth_km': 0.35 },\n        { 'latitude': 40.827167, 'longitude': 14.423333, 'depth_km': 0.31 },\n        { 'latitude': 40.81583, 'longitude': 14.435, 'depth_km': 0.18 },\n        { 'latitude': 40.823002, 'longitude': 14.43217, 'depth_km': 0.14 },\n        { 'latitude': 40.822167, 'longitude': 14.425667, 'depth_km': 0.56 },\n        { 'latitude': 40.820671, 'longitude': 14.43517, 'depth_km': 0.15 },\n        { 'latitude': 40.821831, 'longitude': 14.42817, 'depth_km': 0.3 },\n        { 'latitude': 40.822833, 'longitude': 14.423833, 'depth_km': 0.48 },\n        { 'latitude': 40.818829, 'longitude': 14.431, 'depth_km': 0.02 },\n        { 'latitude': 40.822833, 'longitude': 14.421833, 'depth_km': 0.14 },\n        { 'latitude': 40.823299, 'longitude': 14.4295, 'depth_km': 0.55 },\n        { 'latitude': 40.827332, 'longitude': 14.42383, 'depth_km': 0.18 },\n        { 'latitude': 40.819, 'longitude': 14.432, 'depth_km': 0.21 },\n        { 'latitude': 40.818001, 'longitude': 14.42267, 'depth_km': 1.65 },\n        { 'latitude': 40.820202, 'longitude': 14.4267, 'depth_km': 0.12 },\n        { 'latitude': 40.822201, 'longitude': 14.4238, 'depth_km': 0.07 },\n        { 'latitude': 40.825298, 'longitude': 14.4293, 'depth_km': 0.2 },\n        { 'latitude': 40.824299, 'longitude': 14.4297, 'depth_km': 0.25 },\n        { 'latitude': 40.814333, 'longitude': 14.432333, 'depth_km': 0.53 },\n        { 'latitude': 40.824329, 'longitude': 14.4275, 'depth_km': 0.08 },\n        { 'latitude': 40.824501, 'longitude': 14.42783, 'depth_km': 0.13 },\n        { 'latitude': 40.82283, 'longitude': 14.42667, 'depth_km': 0.06 },\n        { 'latitude': 40.821999, 'longitude': 14.4228, 'depth_km': 0.12 },\n        { 'latitude': 40.816002, 'longitude': 14.42917, 'depth_km': 1.16 },\n        { 'latitude': 40.817829, 'longitude': 14.42917, 'depth_km': 0.2 },\n        { 'latitude': 40.819328, 'longitude': 14.4315, 'depth_km': 0.09 },\n        { 'latitude': 40.817501, 'longitude': 14.4255, 'depth_km': 0.1 },\n        { 'latitude': 40.827332, 'longitude': 14.43367, 'depth_km': 0.09 },\n        { 'latitude': 40.816333, 'longitude': 14.433, 'depth_km': 1.55 },\n        { 'latitude': 40.813999, 'longitude': 14.42067, 'depth_km': 0.24 },\n        { 'latitude': 40.818501, 'longitude': 14.4255, 'depth_km': 0.16 },\n        { 'latitude': 40.820839, 'longitude': 14.428, 'depth_km': 0.3 },\n        { 'latitude': 40.8195, 'longitude': 14.429833, 'depth_km': 0.09 },\n        ],\n        fields: [makeField('latitude'), makeField('longitude'), makeField('depth_km')],\n        metadata: {\n            'latitude': { type: Type.Number, semanticType: 'Latitude', levels: [] },\n            'longitude': { type: Type.Number, semanticType: 'Longitude', levels: [] },\n            'depth_km': { type: Type.Number, semanticType: 'Depth', levels: [] },\n        },\n        encodingMap: {\n            longitude: makeEncodingItem('longitude'),\n            latitude: makeEncodingItem('latitude'),\n            color: makeEncodingItem('depth_km'),\n        },\n        chartProperties: { opacity: 0.7 },\n    };\n}\n\nfunction gen_vesuviusQ5RecGpt51(): TestCase {\n    // How are earthquake epicenters spatially distributed around Mount Vesuvius, and how does depth_km vary across latitude an\n    // Score: 10/20 | The visualization technically maps epicenter locations and depth but uses an inverted, world-scale m\n    return {\n        title: 'vesuvius_q5_rec-gpt-5.1',\n        description: 'Map **latitude**, **longitude** and color by **depth_km**',\n        tags: ['debug', 'world-map'],\n        chartType: 'World Map',\n        data: [\n        { 'latitude': 40.821831, 'longitude': 14.4305, 'depth_km': 0.23 },\n        { 'latitude': 40.817169, 'longitude': 14.427, 'depth_km': 0.07 },\n        { 'latitude': 40.818668, 'longitude': 14.43267, 'depth_km': 0.4 },\n        { 'latitude': 40.817329, 'longitude': 14.42833, 'depth_km': 0.3 },\n        { 'latitude': 40.821831, 'longitude': 14.42683, 'depth_km': 0.37 },\n        { 'latitude': 40.824329, 'longitude': 14.42383, 'depth_km': 0.66 },\n        { 'latitude': 40.8195, 'longitude': 14.42783, 'depth_km': 0.21 },\n        { 'latitude': 40.817669, 'longitude': 14.43267, 'depth_km': 0.16 },\n        { 'latitude': 40.822201, 'longitude': 14.4287, 'depth_km': 0.78 },\n        { 'latitude': 40.818668, 'longitude': 14.42517, 'depth_km': 0.24 },\n        { 'latitude': 40.819, 'longitude': 14.42383, 'depth_km': 0.07 },\n        { 'latitude': 40.817001, 'longitude': 14.4305, 'depth_km': 0.47 },\n        { 'latitude': 40.823669, 'longitude': 14.43017, 'depth_km': 0.23 },\n        { 'latitude': 40.82267, 'longitude': 14.4345, 'depth_km': 0.43 },\n        { 'latitude': 40.822, 'longitude': 14.42, 'depth_km': 0.22 },\n        { 'latitude': 40.820332, 'longitude': 14.41967, 'depth_km': 0.84 },\n        { 'latitude': 40.823669, 'longitude': 14.42433, 'depth_km': 1.71 },\n        { 'latitude': 40.8223, 'longitude': 14.4315, 'depth_km': 0.28 },\n        { 'latitude': 40.820839, 'longitude': 14.424, 'depth_km': 0.09 },\n        { 'latitude': 40.823167, 'longitude': 14.422333, 'depth_km': 0.17 },\n        { 'latitude': 40.82333, 'longitude': 14.42617, 'depth_km': 0.11 },\n        { 'latitude': 40.817001, 'longitude': 14.43367, 'depth_km': 0.05 },\n        { 'latitude': 40.819672, 'longitude': 14.4345, 'depth_km': 0.15 },\n        { 'latitude': 40.818501, 'longitude': 14.428, 'depth_km': 0.13 },\n        { 'latitude': 40.824329, 'longitude': 14.42533, 'depth_km': 0.93 },\n        { 'latitude': 40.820839, 'longitude': 14.43633, 'depth_km': 0.64 },\n        { 'latitude': 40.817829, 'longitude': 14.42467, 'depth_km': 0.2 },\n        { 'latitude': 40.81633, 'longitude': 14.42917, 'depth_km': 0.21 },\n        { 'latitude': 40.822498, 'longitude': 14.42883, 'depth_km': 0.17 },\n        { 'latitude': 40.82, 'longitude': 14.42217, 'depth_km': 0.22 },\n        { 'latitude': 40.821671, 'longitude': 14.4255, 'depth_km': 0.06 },\n        { 'latitude': 40.821301, 'longitude': 14.4317, 'depth_km': 0.98 },\n        { 'latitude': 40.819328, 'longitude': 14.42833, 'depth_km': 0.11 },\n        { 'latitude': 40.822701, 'longitude': 14.4298, 'depth_km': 0.11 },\n        { 'latitude': 40.823502, 'longitude': 14.42333, 'depth_km': 0.2 },\n        { 'latitude': 40.820332, 'longitude': 14.431, 'depth_km': 0.22 },\n        { 'latitude': 40.81633, 'longitude': 14.42667, 'depth_km': 0.07 },\n        { 'latitude': 40.819667, 'longitude': 14.433, 'depth_km': 0.18 },\n        { 'latitude': 40.80917, 'longitude': 14.42333, 'depth_km': 0.78 },\n        { 'latitude': 40.8237, 'longitude': 14.4335, 'depth_km': 0.27 },\n        { 'latitude': 40.816669, 'longitude': 14.43117, 'depth_km': 0.32 },\n        { 'latitude': 40.818668, 'longitude': 14.4275, 'depth_km': 0.34 },\n        { 'latitude': 40.823299, 'longitude': 14.4295, 'depth_km': 1.56 },\n        { 'latitude': 40.821171, 'longitude': 14.43033, 'depth_km': 0.1 },\n        { 'latitude': 40.820171, 'longitude': 14.43017, 'depth_km': 0.02 },\n        { 'latitude': 40.821999, 'longitude': 14.43483, 'depth_km': 0.8 },\n        { 'latitude': 40.819, 'longitude': 14.4275, 'depth_km': 0.17 },\n        { 'latitude': 40.819, 'longitude': 14.43183, 'depth_km': 0.23 },\n        { 'latitude': 40.819, 'longitude': 14.42567, 'depth_km': 0.05 },\n        { 'latitude': 40.818668, 'longitude': 14.43217, 'depth_km': 0.09 },\n        { 'latitude': 40.824669, 'longitude': 14.4295, 'depth_km': 0.07 },\n        { 'latitude': 40.8232, 'longitude': 14.429, 'depth_km': 1.48 },\n        { 'latitude': 40.819672, 'longitude': 14.4315, 'depth_km': 0.17 },\n        { 'latitude': 40.8235, 'longitude': 14.426167, 'depth_km': 0.32 },\n        { 'latitude': 40.821499, 'longitude': 14.4278, 'depth_km': 0.16 },\n        { 'latitude': 40.819672, 'longitude': 14.42883, 'depth_km': 0.21 },\n        { 'latitude': 40.820499, 'longitude': 14.4322, 'depth_km': 0.06 },\n        { 'latitude': 40.820202, 'longitude': 14.4247, 'depth_km': 0.14 },\n        { 'latitude': 40.820671, 'longitude': 14.43033, 'depth_km': 0.28 },\n        { 'latitude': 40.820671, 'longitude': 14.43383, 'depth_km': 0.08 },\n        { 'latitude': 40.8265, 'longitude': 14.42683, 'depth_km': 0.54 },\n        { 'latitude': 40.819328, 'longitude': 14.4325, 'depth_km': 0.06 },\n        { 'latitude': 40.82217, 'longitude': 14.431, 'depth_km': 0.34 },\n        { 'latitude': 40.820171, 'longitude': 14.432, 'depth_km': 0.25 },\n        { 'latitude': 40.825833, 'longitude': 14.421167, 'depth_km': 0.25 },\n        { 'latitude': 40.821499, 'longitude': 14.4283, 'depth_km': 0.24 },\n        { 'latitude': 40.821831, 'longitude': 14.42917, 'depth_km': 0.35 },\n        { 'latitude': 40.824329, 'longitude': 14.4245, 'depth_km': 0.27 },\n        { 'latitude': 40.819328, 'longitude': 14.42733, 'depth_km': 0.22 },\n        { 'latitude': 40.8195, 'longitude': 14.42167, 'depth_km': 0.17 },\n        { 'latitude': 40.822498, 'longitude': 14.43067, 'depth_km': 0.25 },\n        { 'latitude': 40.814499, 'longitude': 14.43117, 'depth_km': 0.08 },\n        { 'latitude': 40.820499, 'longitude': 14.42817, 'depth_km': 0.15 },\n        { 'latitude': 40.818802, 'longitude': 14.4257, 'depth_km': 0.11 },\n        { 'latitude': 40.819832, 'longitude': 14.43117, 'depth_km': 0.12 },\n        { 'latitude': 40.81683, 'longitude': 14.4225, 'depth_km': 0.08 },\n        { 'latitude': 40.817829, 'longitude': 14.42617, 'depth_km': 0.15 },\n        { 'latitude': 40.818668, 'longitude': 14.43117, 'depth_km': 0.32 },\n        { 'latitude': 40.817329, 'longitude': 14.4275, 'depth_km': 0.15 },\n        { 'latitude': 40.827167, 'longitude': 14.4205, 'depth_km': 0.19 },\n        { 'latitude': 40.823502, 'longitude': 14.4295, 'depth_km': 0.21 },\n        { 'latitude': 40.819667, 'longitude': 14.427, 'depth_km': 0.15 },\n        { 'latitude': 40.819832, 'longitude': 14.429, 'depth_km': 0.16 },\n        { 'latitude': 40.819832, 'longitude': 14.433, 'depth_km': 0.19 },\n        { 'latitude': 40.82217, 'longitude': 14.42883, 'depth_km': 0.18 },\n        { 'latitude': 40.820332, 'longitude': 14.42433, 'depth_km': 1.42 },\n        { 'latitude': 40.821331, 'longitude': 14.43233, 'depth_km': 0.27 },\n        { 'latitude': 40.82, 'longitude': 14.4213, 'depth_km': 0.27 },\n        { 'latitude': 40.821999, 'longitude': 14.4268, 'depth_km': 0.14 },\n        { 'latitude': 40.8228, 'longitude': 14.4258, 'depth_km': 0.21 },\n        { 'latitude': 40.819328, 'longitude': 14.42467, 'depth_km': 0.25 },\n        { 'latitude': 40.815331, 'longitude': 14.4275, 'depth_km': 0.2 },\n        { 'latitude': 40.820833, 'longitude': 14.432167, 'depth_km': 0.06 },\n        { 'latitude': 40.8175, 'longitude': 14.430333, 'depth_km': 0.28 },\n        { 'latitude': 40.817169, 'longitude': 14.43217, 'depth_km': 0.28 },\n        { 'latitude': 40.820671, 'longitude': 14.43033, 'depth_km': 0.1 },\n        { 'latitude': 40.817001, 'longitude': 14.42517, 'depth_km': 0.25 },\n        { 'latitude': 40.80917, 'longitude': 14.427, 'depth_km': 0.57 },\n        { 'latitude': 40.818668, 'longitude': 14.4365, 'depth_km': 0.64 },\n        { 'latitude': 40.818001, 'longitude': 14.4283, 'depth_km': 0.18 },\n        { 'latitude': 40.816669, 'longitude': 14.41967, 'depth_km': 0.34 },\n        { 'latitude': 40.823299, 'longitude': 14.423, 'depth_km': 0.49 },\n        { 'latitude': 40.820702, 'longitude': 14.4277, 'depth_km': 0.14 },\n        { 'latitude': 40.818833, 'longitude': 14.426667, 'depth_km': 0.11 },\n        { 'latitude': 40.820839, 'longitude': 14.4325, 'depth_km': 0.2 },\n        { 'latitude': 40.825329, 'longitude': 14.412, 'depth_km': 0.05 },\n        { 'latitude': 40.815331, 'longitude': 14.42483, 'depth_km': 0.22 },\n        { 'latitude': 40.819328, 'longitude': 14.4325, 'depth_km': 0.27 },\n        { 'latitude': 40.820171, 'longitude': 14.426, 'depth_km': 0.25 },\n        { 'latitude': 40.822498, 'longitude': 14.43033, 'depth_km': 0.46 },\n        { 'latitude': 40.823002, 'longitude': 14.4335, 'depth_km': 0.29 },\n        { 'latitude': 40.819698, 'longitude': 14.4205, 'depth_km': 1.08 },\n        { 'latitude': 40.820999, 'longitude': 14.433, 'depth_km': 0.37 },\n        { 'latitude': 40.824833, 'longitude': 14.425333, 'depth_km': 0.3 },\n        { 'latitude': 40.825161, 'longitude': 14.42883, 'depth_km': 1.83 },\n        { 'latitude': 40.824329, 'longitude': 14.42867, 'depth_km': 0.48 },\n        { 'latitude': 40.8205, 'longitude': 14.4215, 'depth_km': 0.18 },\n        { 'latitude': 40.81617, 'longitude': 14.42767, 'depth_km': 0.34 },\n        { 'latitude': 40.822833, 'longitude': 14.422167, 'depth_km': 0.27 },\n        { 'latitude': 40.825329, 'longitude': 14.424, 'depth_km': 0.21 },\n        { 'latitude': 40.821331, 'longitude': 14.42467, 'depth_km': 0.2 },\n        { 'latitude': 40.82333, 'longitude': 14.428, 'depth_km': 2.58 },\n        { 'latitude': 40.8218, 'longitude': 14.4262, 'depth_km': 0.14 },\n        { 'latitude': 40.82, 'longitude': 14.42983, 'depth_km': 0.57 },\n        { 'latitude': 40.823002, 'longitude': 14.42317, 'depth_km': 1.49 },\n        { 'latitude': 40.819832, 'longitude': 14.42633, 'depth_km': 0.37 },\n        { 'latitude': 40.820167, 'longitude': 14.420167, 'depth_km': 0.39 },\n        { 'latitude': 40.821331, 'longitude': 14.42283, 'depth_km': 0.27 },\n        { 'latitude': 40.822498, 'longitude': 14.4305, 'depth_km': 0.59 },\n        { 'latitude': 40.8195, 'longitude': 14.4263, 'depth_km': 0.18 },\n        { 'latitude': 40.820999, 'longitude': 14.424, 'depth_km': 1.87 },\n        { 'latitude': 40.817829, 'longitude': 14.42717, 'depth_km': 0.36 },\n        { 'latitude': 40.824501, 'longitude': 14.429, 'depth_km': 0.22 },\n        { 'latitude': 40.821999, 'longitude': 14.42967, 'depth_km': 0.46 },\n        { 'latitude': 40.818501, 'longitude': 14.43367, 'depth_km': 0.15 },\n        { 'latitude': 40.823669, 'longitude': 14.4255, 'depth_km': 0.06 },\n        { 'latitude': 40.820667, 'longitude': 14.4315, 'depth_km': 0.4 },\n        { 'latitude': 40.817829, 'longitude': 14.4325, 'depth_km': 0.34 },\n        { 'latitude': 40.82217, 'longitude': 14.42883, 'depth_km': 0.56 },\n        { 'latitude': 40.817169, 'longitude': 14.444, 'depth_km': 0.32 },\n        { 'latitude': 40.82, 'longitude': 14.431333, 'depth_km': 0.18 },\n        { 'latitude': 40.821171, 'longitude': 14.423, 'depth_km': 0.14 },\n        { 'latitude': 40.809502, 'longitude': 14.41983, 'depth_km': 1.15 },\n        { 'latitude': 40.822498, 'longitude': 14.4232, 'depth_km': 0.22 },\n        { 'latitude': 40.818001, 'longitude': 14.4275, 'depth_km': 0.25 },\n        { 'latitude': 40.822498, 'longitude': 14.42533, 'depth_km': 1.69 },\n        { 'latitude': 40.821671, 'longitude': 14.42567, 'depth_km': 0.15 },\n        { 'latitude': 40.819698, 'longitude': 14.4283, 'depth_km': 0.18 },\n        { 'latitude': 40.820702, 'longitude': 14.4225, 'depth_km': 0.2 },\n        { 'latitude': 40.820301, 'longitude': 14.4247, 'depth_km': 0.12 },\n        { 'latitude': 40.824167, 'longitude': 14.426, 'depth_km': 0.4 },\n        { 'latitude': 40.823833, 'longitude': 14.420833, 'depth_km': 0.2 },\n        { 'latitude': 40.82217, 'longitude': 14.42933, 'depth_km': 0.11 },\n        { 'latitude': 40.819672, 'longitude': 14.4325, 'depth_km': 0.23 },\n        { 'latitude': 40.819832, 'longitude': 14.43167, 'depth_km': 0.1 },\n        { 'latitude': 40.820999, 'longitude': 14.4305, 'depth_km': 0.15 },\n        { 'latitude': 40.820839, 'longitude': 14.42567, 'depth_km': 0.19 },\n        { 'latitude': 40.818501, 'longitude': 14.43367, 'depth_km': 0.2 },\n        { 'latitude': 40.82283, 'longitude': 14.4275, 'depth_km': 0.73 },\n        { 'latitude': 40.807331, 'longitude': 14.42017, 'depth_km': 0.66 },\n        { 'latitude': 40.82283, 'longitude': 14.42417, 'depth_km': 1.73 },\n        { 'latitude': 40.818161, 'longitude': 14.4245, 'depth_km': 0.23 },\n        { 'latitude': 40.824501, 'longitude': 14.41783, 'depth_km': 0.07 },\n        { 'latitude': 40.820171, 'longitude': 14.42733, 'depth_km': 0.11 },\n        { 'latitude': 40.8265, 'longitude': 14.42783, 'depth_km': 0.42 },\n        { 'latitude': 40.82, 'longitude': 14.4315, 'depth_km': 0.46 },\n        { 'latitude': 40.818329, 'longitude': 14.42783, 'depth_km': 1.1 },\n        { 'latitude': 40.815331, 'longitude': 14.425, 'depth_km': 0.35 },\n        { 'latitude': 40.827167, 'longitude': 14.423333, 'depth_km': 0.31 },\n        { 'latitude': 40.81583, 'longitude': 14.435, 'depth_km': 0.18 },\n        { 'latitude': 40.823002, 'longitude': 14.43217, 'depth_km': 0.14 },\n        { 'latitude': 40.822167, 'longitude': 14.425667, 'depth_km': 0.56 },\n        { 'latitude': 40.820671, 'longitude': 14.43517, 'depth_km': 0.15 },\n        { 'latitude': 40.821831, 'longitude': 14.42817, 'depth_km': 0.3 },\n        { 'latitude': 40.822833, 'longitude': 14.423833, 'depth_km': 0.48 },\n        { 'latitude': 40.818829, 'longitude': 14.431, 'depth_km': 0.02 },\n        { 'latitude': 40.822833, 'longitude': 14.421833, 'depth_km': 0.14 },\n        { 'latitude': 40.823299, 'longitude': 14.4295, 'depth_km': 0.55 },\n        { 'latitude': 40.827332, 'longitude': 14.42383, 'depth_km': 0.18 },\n        { 'latitude': 40.819, 'longitude': 14.432, 'depth_km': 0.21 },\n        { 'latitude': 40.818001, 'longitude': 14.42267, 'depth_km': 1.65 },\n        { 'latitude': 40.820202, 'longitude': 14.4267, 'depth_km': 0.12 },\n        { 'latitude': 40.822201, 'longitude': 14.4238, 'depth_km': 0.07 },\n        { 'latitude': 40.825298, 'longitude': 14.4293, 'depth_km': 0.2 },\n        { 'latitude': 40.824299, 'longitude': 14.4297, 'depth_km': 0.25 },\n        { 'latitude': 40.814333, 'longitude': 14.432333, 'depth_km': 0.53 },\n        { 'latitude': 40.824329, 'longitude': 14.4275, 'depth_km': 0.08 },\n        { 'latitude': 40.824501, 'longitude': 14.42783, 'depth_km': 0.13 },\n        { 'latitude': 40.82283, 'longitude': 14.42667, 'depth_km': 0.06 },\n        { 'latitude': 40.821999, 'longitude': 14.4228, 'depth_km': 0.12 },\n        { 'latitude': 40.816002, 'longitude': 14.42917, 'depth_km': 1.16 },\n        { 'latitude': 40.817829, 'longitude': 14.42917, 'depth_km': 0.2 },\n        { 'latitude': 40.819328, 'longitude': 14.4315, 'depth_km': 0.09 },\n        { 'latitude': 40.817501, 'longitude': 14.4255, 'depth_km': 0.1 },\n        { 'latitude': 40.827332, 'longitude': 14.43367, 'depth_km': 0.09 },\n        { 'latitude': 40.816333, 'longitude': 14.433, 'depth_km': 1.55 },\n        { 'latitude': 40.813999, 'longitude': 14.42067, 'depth_km': 0.24 },\n        { 'latitude': 40.818501, 'longitude': 14.4255, 'depth_km': 0.16 },\n        { 'latitude': 40.820839, 'longitude': 14.428, 'depth_km': 0.3 },\n        { 'latitude': 40.8195, 'longitude': 14.429833, 'depth_km': 0.09 },\n        ],\n        fields: [makeField('latitude'), makeField('longitude'), makeField('depth_km')],\n        metadata: {\n            'latitude': { type: Type.Number, semanticType: 'Latitude', levels: [] },\n            'longitude': { type: Type.Number, semanticType: 'Longitude', levels: [] },\n            'depth_km': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        encodingMap: {\n            longitude: makeEncodingItem('longitude'),\n            latitude: makeEncodingItem('latitude'),\n            color: makeEncodingItem('depth_km'),\n        },\n        chartProperties: { projection: \"mercator\", projectionCenter: [14.43, 40.82] },\n    };\n}\n\n// ============================================================================\n// Export\n// ============================================================================\n\nexport function genDebugTests(): TestCase[] {\n    return [\n        gen_agenciesQ4RecGpt41(),\n        gen_agenciesQ4RecGpt51(),\n        gen_apiLogosQ4RecGpt41(),\n        gen_apiLogosQ4RecGpt51(),\n        gen_apisguruApisQ3RecGpt41(),\n        gen_apisguruApisQ3RecGpt51(),\n        gen_careStateQ1RecGpt41(),\n        gen_careStateQ1RecGpt51(),\n        gen_careStateQ3RecGpt41(),\n        gen_careStateQ3RecGpt51(),\n        gen_colorRanksQ1RecGpt41(),\n        gen_colorRanksQ5RecGpt41(),\n        gen_colorRanksQ5RecGpt51(),\n        gen_countryListsQ1RecGpt41(),\n        gen_countryListsQ2RecGpt41(),\n        gen_countryListsQ2RecGpt51(),\n        gen_countryListsQ3RecGpt41(),\n        gen_countryListsQ4RecGpt41(),\n        gen_endangeredStatusQ1RecGpt41(),\n        gen_familiesQ1RecGpt51(),\n        gen_familiesQ2RecGpt41(),\n        gen_familiesQ2RecGpt51(),\n        gen_familiesQ3RecGpt51(),\n        gen_familiesQ4RecGpt41(),\n        gen_familiesQ4RecGpt51(),\n        gen_familiesQ5RecGpt41(),\n        gen_fpiCodesQ5RecGpt51(),\n        gen_modelDatQ1RecGpt51(),\n        gen_modelDatQ2RecGpt41(),\n        gen_modelDatQ2RecGpt51(),\n        gen_modelDatQ4RecGpt41(),\n        gen_modelDatQ5RecGpt41(),\n        gen_ombCodesQ4RecGpt41(),\n        gen_ombCodesQ5RecGpt41(),\n        gen_penguinsRawQ1RecGpt41(),\n        gen_penguinsRawQ1RecGpt51(),\n        gen_pixarFilmsQ3RecGpt41(),\n        gen_rankByYearQ3RecGpt41(),\n        gen_simpsonsCharactersQ1RecGpt41(),\n        gen_simpsonsLocationsQ2RecGpt41(),\n        gen_simpsonsLocationsQ2RecGpt51(),\n        gen_simpsonsLocationsQ5RecGpt41(),\n        gen_topicsQ1RecGpt41(),\n        gen_topicsQ2RecGpt51(),\n        gen_user2025Q1RecGpt41(),\n        gen_user2025Q5RecGpt51(),\n        gen_vesuviusQ4RecGpt41(),\n        gen_vesuviusQ5RecGpt41(),\n        gen_vesuviusQ5RecGpt51(),\n    ];\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/discrete-axis-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Discrete-axis sizing tests.\n *\n * For each major chart type, creates test cases at three cardinality levels\n * (20, 60, 120) designed for a 400×300 canvas.  This systematically exercises\n * the assembler's elastic stretch, overflow filtering, label rotation, and\n * step-based sizing across discrete X and discrete Y orientations.\n *\n * Cardinality rationale (400×300 canvas, ~20px default step):\n *   - 20 items:  fits comfortably, no compression needed\n *   - 60 items:  triggers elastic stretch, label rotation\n *   - 120 items: triggers overflow filtering (too many to show)\n */\n\nimport { TestCase, makeField, makeEncodingItem, buildMetadata } from './types';\nimport { seededRandom } from './generators';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction cats(prefix: string, n: number): string[] {\n    const pad = String(n).length;\n    return Array.from({ length: n }, (_, i) => `${prefix}${String(i + 1).padStart(pad, '0')}`);\n}\n\nfunction randVal(rand: () => number, min = 10, max = 500): number {\n    return Math.round(min + rand() * (max - min));\n}\n\nconst SIZES = [\n    { n: 20,  label: '20' },\n    { n: 60,  label: '60' },\n    { n: 120, label: '120' },\n] as const;\n\n// ---------------------------------------------------------------------------\n// Bar Chart\n// ---------------------------------------------------------------------------\nfunction genBarSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(100);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        const xCats = cats('Cat', n);\n        const xData = xCats.map(c => ({ Category: c, Value: randVal(rand) }));\n        tests.push({\n            title: `Bar ▸ X ×${label}`,\n            description: `Bar chart with ${n} categories on X axis`,\n            tags: ['bar', 'discrete-x', `n${label}`],\n            chartType: 'Bar Chart',\n            data: xData,\n            fields: [makeField('Category'), makeField('Value')],\n            metadata: buildMetadata(xData),\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Value') },\n        });\n\n        // Discrete Y\n        const yCats = cats('Item', n);\n        const yData = yCats.map(c => ({ Item: c, Revenue: randVal(rand) }));\n        tests.push({\n            title: `Bar ▸ Y ×${label}`,\n            description: `Horizontal bar with ${n} categories on Y axis`,\n            tags: ['bar', 'discrete-y', `n${label}`],\n            chartType: 'Bar Chart',\n            data: yData,\n            fields: [makeField('Item'), makeField('Revenue')],\n            metadata: buildMetadata(yData),\n            encodingMap: { y: makeEncodingItem('Item'), x: makeEncodingItem('Revenue') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Stacked Bar Chart\n// ---------------------------------------------------------------------------\nfunction genStackedBarSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(200);\n    const segments = cats('Seg', 3);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        {\n            const categories = cats('City', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (const s of segments) data.push({ City: c, Segment: s, Amount: randVal(rand) });\n            tests.push({\n                title: `Stacked Bar ▸ X ×${label}`,\n                description: `Stacked bar with ${n} x-categories × 3 segments`,\n                tags: ['stacked-bar', 'discrete-x', `n${label}`],\n                chartType: 'Stacked Bar Chart',\n                data,\n                fields: [makeField('City'), makeField('Segment'), makeField('Amount')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('City'), y: makeEncodingItem('Amount'), color: makeEncodingItem('Segment') },\n            });\n        }\n\n        // Discrete Y\n        {\n            const categories = cats('Dept', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (const s of segments) data.push({ Dept: c, Segment: s, Budget: randVal(rand) });\n            tests.push({\n                title: `Stacked Bar ▸ Y ×${label}`,\n                description: `Horizontal stacked bar with ${n} y-categories × 3 segments`,\n                tags: ['stacked-bar', 'discrete-y', `n${label}`],\n                chartType: 'Stacked Bar Chart',\n                data,\n                fields: [makeField('Dept'), makeField('Segment'), makeField('Budget')],\n                metadata: buildMetadata(data),\n                encodingMap: { y: makeEncodingItem('Dept'), x: makeEncodingItem('Budget'), color: makeEncodingItem('Segment') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Grouped Bar Chart\n// ---------------------------------------------------------------------------\nfunction genGroupedBarSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(300);\n    const groups = cats('Grp', 3);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        {\n            const categories = cats('Cat', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (const g of groups) data.push({ Category: c, Group: g, Value: randVal(rand) });\n            tests.push({\n                title: `Grouped Bar ▸ X ×${label}`,\n                description: `Grouped bar with ${n} x-categories × 3 groups`,\n                tags: ['grouped-bar', 'discrete-x', `n${label}`],\n                chartType: 'Grouped Bar Chart',\n                data,\n                fields: [makeField('Category'), makeField('Group'), makeField('Value')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Value'), group: makeEncodingItem('Group') },\n            });\n        }\n\n        // Discrete Y\n        {\n            const categories = cats('Region', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (const g of groups) data.push({ Region: c, Group: g, Sales: randVal(rand) });\n            tests.push({\n                title: `Grouped Bar ▸ Y ×${label}`,\n                description: `Horizontal grouped bar with ${n} y-categories × 3 groups`,\n                tags: ['grouped-bar', 'discrete-y', `n${label}`],\n                chartType: 'Grouped Bar Chart',\n                data,\n                fields: [makeField('Region'), makeField('Group'), makeField('Sales')],\n                metadata: buildMetadata(data),\n                encodingMap: { y: makeEncodingItem('Region'), x: makeEncodingItem('Sales'), group: makeEncodingItem('Group') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Scatter Plot\n// ---------------------------------------------------------------------------\nfunction genScatterSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(400);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        {\n            const categories = cats('Species', n);\n            const pointsPer = 5;\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (let i = 0; i < pointsPer; i++) data.push({ Species: c, Weight: randVal(rand, 10, 200) });\n            tests.push({\n                title: `Scatter ▸ X ×${label}`,\n                description: `Scatter with ${n} discrete categories on X`,\n                tags: ['scatter', 'discrete-x', `n${label}`],\n                chartType: 'Scatter Plot',\n                data,\n                fields: [makeField('Species'), makeField('Weight')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Species'), y: makeEncodingItem('Weight') },\n            });\n        }\n\n        // Discrete Y\n        {\n            const categories = cats('Lab', n);\n            const pointsPer = 5;\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (let i = 0; i < pointsPer; i++) data.push({ Lab: c, Score: randVal(rand, 0, 100) });\n            tests.push({\n                title: `Scatter ▸ Y ×${label}`,\n                description: `Scatter with ${n} discrete categories on Y`,\n                tags: ['scatter', 'discrete-y', `n${label}`],\n                chartType: 'Scatter Plot',\n                data,\n                fields: [makeField('Lab'), makeField('Score')],\n                metadata: buildMetadata(data),\n                encodingMap: { y: makeEncodingItem('Lab'), x: makeEncodingItem('Score') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Line Chart\n// ---------------------------------------------------------------------------\nfunction genLineSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(500);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X (ordinal — numbered steps imply sequence)\n        {\n            const categories = cats('Step', n);\n            const data = categories.map(c => ({ Step: c, Value: randVal(rand) }));\n            tests.push({\n                title: `Line ▸ X ×${label}`,\n                description: `Line chart with ${n} ordinal steps on X`,\n                tags: ['line', 'discrete-x', `n${label}`],\n                chartType: 'Line Chart',\n                data,\n                fields: [makeField('Step'), makeField('Value')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Step'), y: makeEncodingItem('Value') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Area Chart\n// ---------------------------------------------------------------------------\nfunction genAreaSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(600);\n    const series = cats('S', 3);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X (ordinal — numbered periods imply sequence)\n        {\n            const categories = cats('Period', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (const s of series) data.push({ Period: c, Series: s, Value: randVal(rand, 5, 200) });\n            tests.push({\n                title: `Area ▸ X ×${label}`,\n                description: `Stacked area with ${n} ordinal periods × 3 series`,\n                tags: ['area', 'discrete-x', `n${label}`],\n                chartType: 'Area Chart',\n                data,\n                fields: [makeField('Period'), makeField('Series'), makeField('Value')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Period'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Lollipop Chart\n// ---------------------------------------------------------------------------\nfunction genLollipopSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(700);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        {\n            const categories = cats('Item', n);\n            const data = categories.map(c => ({ Item: c, Value: randVal(rand) }));\n            tests.push({\n                title: `Lollipop ▸ X ×${label}`,\n                description: `Lollipop with ${n} categories on X`,\n                tags: ['lollipop', 'discrete-x', `n${label}`],\n                chartType: 'Lollipop Chart',\n                data,\n                fields: [makeField('Item'), makeField('Value')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Item'), y: makeEncodingItem('Value') },\n            });\n        }\n\n        // Discrete Y\n        {\n            const categories = cats('Country', n);\n            const data = categories.map(c => ({ Country: c, GDP: randVal(rand, 100, 5000) }));\n            tests.push({\n                title: `Lollipop ▸ Y ×${label}`,\n                description: `Horizontal lollipop with ${n} categories on Y`,\n                tags: ['lollipop', 'discrete-y', `n${label}`],\n                chartType: 'Lollipop Chart',\n                data,\n                fields: [makeField('Country'), makeField('GDP')],\n                metadata: buildMetadata(data),\n                encodingMap: { y: makeEncodingItem('Country'), x: makeEncodingItem('GDP') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Heatmap (always discrete X + Y)\n// ---------------------------------------------------------------------------\nfunction genHeatmapSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(800);\n\n    for (const { n, label } of SIZES) {\n        const yN = Math.max(5, Math.round(n * 0.6));\n        const xCats = cats('Col', n);\n        const yCats = cats('Row', yN);\n        const data: Record<string, any>[] = [];\n        for (const x of xCats) for (const y of yCats) data.push({ Col: x, Row: y, Value: randVal(rand, 0, 100) });\n        tests.push({\n            title: `Heatmap ▸ XY ×${label}×${yN}`,\n            description: `Heatmap with ${n} columns × ${yN} rows`,\n            tags: ['heatmap', 'discrete-xy', `n${label}`],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Col'), makeField('Row'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Col'), y: makeEncodingItem('Row'), color: makeEncodingItem('Value') },\n        });\n    }\n\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Boxplot\n// ---------------------------------------------------------------------------\nfunction genBoxplotSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(900);\n    const pointsPer = 15;\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        {\n            const categories = cats('Group', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (let i = 0; i < pointsPer; i++) data.push({ Group: c, Value: randVal(rand, 0, 200) });\n            tests.push({\n                title: `Boxplot ▸ X ×${label}`,\n                description: `Boxplot with ${n} groups on X`,\n                tags: ['boxplot', 'discrete-x', `n${label}`],\n                chartType: 'Boxplot',\n                data,\n                fields: [makeField('Group'), makeField('Value')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Group'), y: makeEncodingItem('Value') },\n            });\n        }\n\n        // Discrete Y\n        {\n            const categories = cats('Cat', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (let i = 0; i < pointsPer; i++) data.push({ Category: c, Score: randVal(rand, 0, 100) });\n            tests.push({\n                title: `Boxplot ▸ Y ×${label}`,\n                description: `Horizontal boxplot with ${n} groups on Y`,\n                tags: ['boxplot', 'discrete-y', `n${label}`],\n                chartType: 'Boxplot',\n                data,\n                fields: [makeField('Category'), makeField('Score')],\n                metadata: buildMetadata(data),\n                encodingMap: { y: makeEncodingItem('Category'), x: makeEncodingItem('Score') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Strip Plot\n// ---------------------------------------------------------------------------\nfunction genStripSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1000);\n    const pointsPer = 10;\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        {\n            const categories = cats('Species', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (let i = 0; i < pointsPer; i++) data.push({ Species: c, Length: randVal(rand, 10, 80) });\n            tests.push({\n                title: `Strip ▸ X ×${label}`,\n                description: `Strip plot with ${n} categories on X`,\n                tags: ['strip', 'discrete-x', `n${label}`],\n                chartType: 'Strip Plot',\n                data,\n                fields: [makeField('Species'), makeField('Length')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Species'), y: makeEncodingItem('Length') },\n            });\n        }\n\n        // Discrete Y\n        {\n            const categories = cats('Lab', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (let i = 0; i < pointsPer; i++) data.push({ Lab: c, Result: randVal(rand, 0, 100) });\n            tests.push({\n                title: `Strip ▸ Y ×${label}`,\n                description: `Horizontal strip with ${n} categories on Y`,\n                tags: ['strip', 'discrete-y', `n${label}`],\n                chartType: 'Strip Plot',\n                data,\n                fields: [makeField('Lab'), makeField('Result')],\n                metadata: buildMetadata(data),\n                encodingMap: { y: makeEncodingItem('Lab'), x: makeEncodingItem('Result') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Bump Chart\n// ---------------------------------------------------------------------------\nfunction genBumpSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1100);\n    const teams = cats('Team', 5);\n\n    for (const { n, label } of SIZES) {\n        const steps = cats('Week', n);\n        const data: Record<string, any>[] = [];\n        for (const s of steps) for (const t of teams) data.push({ Week: s, Team: t, Rank: Math.floor(rand() * 5) + 1 });\n        tests.push({\n            title: `Bump ▸ X ×${label}`,\n            description: `Bump chart with ${n} time steps × 5 teams`,\n            tags: ['bump', 'discrete-x', `n${label}`],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Week'), makeField('Team'), makeField('Rank')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Week'), y: makeEncodingItem('Rank'), color: makeEncodingItem('Team') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Pyramid Chart\n// ---------------------------------------------------------------------------\nfunction genPyramidSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1200);\n    const genders = ['Male', 'Female'];\n\n    for (const { n, label } of SIZES) {\n        const ageBands = cats('Age', n);\n        const data: Record<string, any>[] = [];\n        for (const a of ageBands) for (const g of genders) data.push({ AgeGroup: a, Gender: g, Population: randVal(rand, 1000, 50000) });\n        tests.push({\n            title: `Pyramid ▸ Y ×${label}`,\n            description: `Pyramid chart with ${n} age groups on Y`,\n            tags: ['pyramid', 'discrete-y', `n${label}`],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('AgeGroup'), makeField('Gender'), makeField('Population')],\n            metadata: buildMetadata(data),\n            encodingMap: { y: makeEncodingItem('AgeGroup'), x: makeEncodingItem('Population'), color: makeEncodingItem('Gender') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Waterfall Chart\n// ---------------------------------------------------------------------------\nfunction genWaterfallSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1300);\n\n    for (const { n, label } of SIZES) {\n        const steps = cats('Step', n);\n        const data = steps.map((s, i) => ({\n            Step: s,\n            Amount: i === 0 ? randVal(rand, 500, 1000) :\n                i === n - 1 ? randVal(rand, 200, 800) :\n                    (rand() > 0.5 ? 1 : -1) * randVal(rand, 10, 150),\n            Type: i === 0 ? 'start' : i === n - 1 ? 'end' : 'delta',\n        }));\n        tests.push({\n            title: `Waterfall ▸ X ×${label}`,\n            description: `Waterfall with ${n} steps on X`,\n            tags: ['waterfall', 'discrete-x', `n${label}`],\n            chartType: 'Waterfall Chart',\n            data,\n            fields: [makeField('Step'), makeField('Amount'), makeField('Type')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Step'), y: makeEncodingItem('Amount'), color: makeEncodingItem('Type') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Ranged Dot Plot\n// ---------------------------------------------------------------------------\nfunction genRangedDotSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1400);\n    const phases = ['Before', 'After'];\n\n    for (const { n, label } of SIZES) {\n        const categories = cats('Metric', n);\n        const data: Record<string, any>[] = [];\n        for (const c of categories) for (const p of phases) data.push({ Metric: c, Phase: p, Score: randVal(rand, 20, 90) });\n        tests.push({\n            title: `Ranged Dot ▸ Y ×${label}`,\n            description: `Ranged dot plot with ${n} categories on Y`,\n            tags: ['ranged-dot', 'discrete-y', `n${label}`],\n            chartType: 'Ranged Dot Plot',\n            data,\n            fields: [makeField('Metric'), makeField('Phase'), makeField('Score')],\n            metadata: buildMetadata(data),\n            encodingMap: { y: makeEncodingItem('Metric'), x: makeEncodingItem('Score'), color: makeEncodingItem('Phase') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Pie Chart (discrete color)\n// ---------------------------------------------------------------------------\nfunction genPieSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1500);\n\n    for (const { n, label } of SIZES) {\n        const categories = cats('Slice', n);\n        const data = categories.map(c => ({ Slice: c, Share: randVal(rand, 1, 100) }));\n        tests.push({\n            title: `Pie ▸ color ×${label}`,\n            description: `Pie chart with ${n} slices`,\n            tags: ['pie', 'discrete-color', `n${label}`],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Slice'), makeField('Share')],\n            metadata: buildMetadata(data),\n            encodingMap: { color: makeEncodingItem('Slice'), size: makeEncodingItem('Share') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Radar Chart\n// ---------------------------------------------------------------------------\nfunction genRadarSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1600);\n    const entities = cats('E', 3);\n\n    for (const { n, label } of SIZES) {\n        const axes = cats('Axis', n);\n        const data: Record<string, any>[] = [];\n        for (const e of entities) for (const a of axes) data.push({ Metric: a, Entity: e, Score: randVal(rand, 10, 100) });\n        tests.push({\n            title: `Radar ▸ ×${label} axes`,\n            description: `Radar chart with ${n} metric axes × 3 entities`,\n            tags: ['radar', 'discrete-x', `n${label}`],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Metric'), makeField('Entity'), makeField('Score')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Score'), color: makeEncodingItem('Entity') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Combined export\n// ---------------------------------------------------------------------------\nexport function genDiscreteAxisTests(): TestCase[] {\n    return [\n        ...genBarSizing(),\n        ...genStackedBarSizing(),\n        ...genGroupedBarSizing(),\n        ...genScatterSizing(),\n        ...genLineSizing(),\n        ...genAreaSizing(),\n        ...genLollipopSizing(),\n        ...genHeatmapSizing(),\n        ...genBoxplotSizing(),\n        ...genStripSizing(),\n        ...genBumpSizing(),\n        ...genPyramidSizing(),\n        ...genWaterfallSizing(),\n        ...genRangedDotSizing(),\n        ...genPieSizing(),\n        ...genRadarSizing(),\n    ];\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/distribution-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\nimport { TestCase, makeField, makeEncodingItem, buildMetadata } from './types';\nimport { seededRandom, genCategories, genMonths } from './generators';\n\n// ------ Histogram ------\nexport function genHistogramTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(400);\n\n    // 1. Small normal distribution\n    {\n        const data = Array.from({ length: 100 }, () => {\n            // Box-Muller transform\n            const u1 = rand(), u2 = rand();\n            return { Value: Math.round((Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2)) * 15 + 50) };\n        });\n        tests.push({\n            title: 'Normal distribution (100 points)',\n            description: 'Gaussian data — basic histogram',\n            tags: ['quantitative', 'medium'],\n            chartType: 'Histogram',\n            data,\n            fields: [makeField('Value')],\n            metadata: { Value: { type: Type.Number, semanticType: 'Quantity', levels: [] } },\n            encodingMap: { x: makeEncodingItem('Value') },\n        });\n    }\n\n    // 2. With color split\n    {\n        const groups = ['Male', 'Female'];\n        const data: any[] = [];\n        for (let i = 0; i < 200; i++) {\n            const g = groups[i % 2];\n            const offset = g === 'Male' ? 170 : 160;\n            const u1 = rand(), u2 = rand();\n            data.push({\n                Height: Math.round((Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2)) * 8 + offset),\n                Gender: g,\n            });\n        }\n        tests.push({\n            title: 'Histogram + Color (gender split)',\n            description: '200 points, two groups',\n            tags: ['quantitative', 'nominal', 'color', 'medium'],\n            chartType: 'Histogram',\n            data,\n            fields: [makeField('Height'), makeField('Gender')],\n            metadata: {\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('Height'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    // 3. Large dataset\n    {\n        const data = Array.from({ length: 1000 }, () => ({\n            Income: Math.round(20000 + rand() * 180000),\n        }));\n        tests.push({\n            title: 'Large histogram (1000 points)',\n            description: 'Income distribution, large dataset',\n            tags: ['quantitative', 'large'],\n            chartType: 'Histogram',\n            data,\n            fields: [makeField('Income')],\n            metadata: { Income: { type: Type.Number, semanticType: 'Amount', levels: [] } },\n            encodingMap: { x: makeEncodingItem('Income') },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Boxplot ------\nexport function genBoxplotTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(700);\n\n    // 1. Nominal × Quant\n    {\n        const groups = genCategories('Category', 5);\n        const data: any[] = [];\n        for (const g of groups) for (let i = 0; i < 30; i++) {\n            data.push({ Group: g, Value: Math.round(rand() * 100) });\n        }\n        tests.push({\n            title: 'Nominal × Quant (5 groups)',\n            description: '5 categories × 30 observations each',\n            tags: ['nominal', 'quantitative', 'medium'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Group'), makeField('Value')],\n            metadata: {\n                Group: { type: Type.String, semanticType: 'Category', levels: groups },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Group'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    // 2. Two quant axes (ensureNominalAxis test)\n    {\n        const data: any[] = [];\n        for (let level = 1; level <= 5; level++) for (let i = 0; i < 20; i++) {\n            data.push({ Level: level, Score: Math.round(level * 10 + rand() * 40) });\n        }\n        tests.push({\n            title: 'Quant × Quant (ensureNominalAxis)',\n            description: 'Both axes quant — lower cardinality should convert to nominal',\n            tags: ['quantitative', 'medium', 'dtype-conversion'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Level'), makeField('Score')],\n            metadata: {\n                Level: { type: Type.Number, semanticType: 'Rank', levels: [1, 2, 3, 4, 5] },\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Level'), y: makeEncodingItem('Score') },\n        });\n    }\n\n    // 3. Large boxplot\n    {\n        const depts = genCategories('Department', 12);\n        const data: any[] = [];\n        for (const d of depts) for (let i = 0; i < 50; i++) {\n            data.push({ Department: d, Salary: Math.round(30000 + rand() * 120000) });\n        }\n        tests.push({\n            title: 'Nominal × Quant (large, 12 groups)',\n            description: '12 departments × 50 observations',\n            tags: ['nominal', 'quantitative', 'large'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Department'), makeField('Salary')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Department', levels: depts },\n                Salary: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Department'), y: makeEncodingItem('Salary') },\n        });\n    }\n\n    // 4. Nominal × Quant + Color (small, 4 groups × 2 colors)\n    {\n        const groups = genCategories('Category', 4);\n        const genders = ['Male', 'Female'];\n        const data: any[] = [];\n        for (const g of groups) for (const s of genders) for (let i = 0; i < 25; i++) {\n            data.push({ Group: g, Gender: s, Score: Math.round(20 + rand() * 80) });\n        }\n        tests.push({\n            title: 'Nominal × Quant + Color (4 groups × 2)',\n            description: '4 categories split by gender — colored boxplot',\n            tags: ['nominal', 'quantitative', 'color', 'small'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Group'), makeField('Score'), makeField('Gender')],\n            metadata: {\n                Group: { type: Type.String, semanticType: 'Category', levels: groups },\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: genders },\n            },\n            encodingMap: { x: makeEncodingItem('Group'), y: makeEncodingItem('Score'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    // 5. Nominal × Quant + Color (medium, 6 groups × 4 colors)\n    {\n        const countries = genCategories('Country', 6);\n        const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n        const data: any[] = [];\n        for (const c of countries) for (const q of quarters) for (let i = 0; i < 20; i++) {\n            data.push({ Country: c, Quarter: q, Revenue: Math.round(500 + rand() * 5000) });\n        }\n        tests.push({\n            title: 'Nominal × Quant + Color (6 groups × 4)',\n            description: '6 countries × 4 quarters — tests boxplot color grouping',\n            tags: ['nominal', 'quantitative', 'color', 'medium'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Country'), makeField('Revenue'), makeField('Quarter')],\n            metadata: {\n                Country: { type: Type.String, semanticType: 'Country', levels: countries },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Quarter: { type: Type.String, semanticType: 'Category', levels: quarters },\n            },\n            encodingMap: { x: makeEncodingItem('Country'), y: makeEncodingItem('Revenue'), color: makeEncodingItem('Quarter') },\n        });\n    }\n\n    // 6. Large boxplot + many colors (8 departments × 5 levels)\n    {\n        const depts = genCategories('Department', 8);\n        const levels = ['Intern', 'Junior', 'Mid', 'Senior', 'Lead'];\n        const data: any[] = [];\n        for (const d of depts) for (const l of levels) for (let i = 0; i < 15; i++) {\n            data.push({ Department: d, Level: l, Compensation: Math.round(25000 + rand() * 175000) });\n        }\n        tests.push({\n            title: 'Nominal × Quant + Color (large, 8 × 5)',\n            description: '8 departments × 5 levels — many colored boxes',\n            tags: ['nominal', 'quantitative', 'color', 'large'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Department'), makeField('Compensation'), makeField('Level')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Department', levels: depts },\n                Compensation: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Level: { type: Type.String, semanticType: 'Category', levels: levels },\n            },\n            encodingMap: { x: makeEncodingItem('Department'), y: makeEncodingItem('Compensation'), color: makeEncodingItem('Level') },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Density Plot ------\nexport function genDensityTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(940);\n\n    // 1. Simple density (one distribution)\n    {\n        const data = Array.from({ length: 200 }, () => ({\n            Score: Math.round(50 + (rand() + rand() + rand() - 1.5) * 30),  // roughly normal\n        }));\n        tests.push({\n            title: 'Single Distribution (200 pts)',\n            description: 'Approximately normal distribution of scores',\n            tags: ['quantitative', 'small'],\n            chartType: 'Density Plot',\n            data,\n            fields: [makeField('Score')],\n            metadata: {\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Score') },\n        });\n    }\n\n    // 2. Grouped density with color\n    {\n        const groups = ['Control', 'Treatment A', 'Treatment B'];\n        const data: any[] = [];\n        for (const g of groups) {\n            const offset = g === 'Control' ? 0 : g === 'Treatment A' ? 10 : 20;\n            for (let i = 0; i < 150; i++) {\n                data.push({\n                    Value: Math.round(50 + offset + (rand() + rand() + rand() - 1.5) * 20),\n                    Group: g,\n                });\n            }\n        }\n        tests.push({\n            title: 'Grouped Density (3 groups, 450 pts)',\n            description: 'Three overlapping distributions colored by group',\n            tags: ['quantitative', 'color', 'medium'],\n            chartType: 'Density Plot',\n            data,\n            fields: [makeField('Value'), makeField('Group')],\n            metadata: {\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Group: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('Value'), color: makeEncodingItem('Group') },\n        });\n    }\n\n    // 3. Bimodal distribution\n    {\n        const data: any[] = [];\n        for (let i = 0; i < 300; i++) {\n            const peak = rand() > 0.4 ? 30 : 70;\n            data.push({ Measurement: Math.round(peak + (rand() - 0.5) * 20) });\n        }\n        tests.push({\n            title: 'Bimodal Distribution (300 pts)',\n            description: 'Two peaks — tests bandwidth sensitivity',\n            tags: ['quantitative', 'medium'],\n            chartType: 'Density Plot',\n            data,\n            fields: [makeField('Measurement')],\n            metadata: {\n                Measurement: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Measurement') },\n        });\n    }\n\n    // 4. Color + Column facet\n    {\n        const sites = ['Lab A', 'Lab B'];\n        const data: any[] = [];\n        for (const site of sites) {\n            const offset = site === 'Lab A' ? 0 : 15;\n            for (let i = 0; i < 200; i++) {\n                data.push({\n                    Reading: Math.round(40 + offset + (rand() + rand() + rand() - 1.5) * 25),\n                    Batch: rand() > 0.5 ? 'Morning' : 'Evening',\n                    Site: site,\n                });\n            }\n        }\n        tests.push({\n            title: 'Color + Column Facet (2 sites)',\n            description: 'Density by batch, faceted by site',\n            tags: ['quantitative', 'color', 'facet', 'medium'],\n            chartType: 'Density Plot',\n            data,\n            fields: [makeField('Reading'), makeField('Batch'), makeField('Site')],\n            metadata: {\n                Reading: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Batch: { type: Type.String, semanticType: 'Category', levels: ['Morning', 'Evening'] },\n                Site: { type: Type.String, semanticType: 'Category', levels: sites },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Reading'),\n                color: makeEncodingItem('Batch'),\n                column: makeEncodingItem('Site'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Strip Plot (Jitter) ------\nexport function genStripPlotTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic categorical x, numeric y\n    {\n        const species = ['Setosa', 'Versicolor', 'Virginica'];\n        const rand = seededRandom(77);\n        const data: any[] = [];\n        for (const sp of species) {\n            const base = sp === 'Setosa' ? 1.5 : sp === 'Versicolor' ? 4.3 : 5.5;\n            for (let i = 0; i < 20; i++) {\n                data.push({ Species: sp, PetalLength: Math.round((base + (rand() - 0.5) * 2) * 10) / 10 });\n            }\n        }\n        tests.push({\n            title: 'Iris Petal Length (3 species, 60 pts)',\n            description: 'Categorical x, quantitative y with jitter',\n            tags: ['jitter', 'nominal', 'small'],\n            chartType: 'Strip Plot',\n            data,\n            fields: [makeField('Species'), makeField('PetalLength')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Species'), y: makeEncodingItem('PetalLength') },\n        });\n    }\n\n    // 2. With color encoding\n    {\n        const groups = ['Control', 'Treatment A', 'Treatment B'];\n        const genders = ['M', 'F'];\n        const rand = seededRandom(88);\n        const data: any[] = [];\n        for (const g of groups) {\n            const base = g === 'Control' ? 50 : g === 'Treatment A' ? 65 : 80;\n            for (const sex of genders) {\n                for (let i = 0; i < 10; i++) {\n                    data.push({\n                        Group: g,\n                        Gender: sex,\n                        Score: Math.round(base + (rand() - 0.4) * 30),\n                    });\n                }\n            }\n        }\n        tests.push({\n            title: 'Clinical Trial Scores (color = Gender)',\n            description: 'Strip plot with color grouping',\n            tags: ['jitter', 'nominal', 'color'],\n            chartType: 'Strip Plot',\n            data,\n            fields: [makeField('Group'), makeField('Score'), makeField('Gender')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                x: makeEncodingItem('Group'),\n                y: makeEncodingItem('Score'),\n                color: makeEncodingItem('Gender'),\n            },\n        });\n    }\n\n    // 3. No jitter (jitterWidth = 0)\n    {\n        const data = [\n            { Category: 'A', Value: 10 }, { Category: 'A', Value: 15 },\n            { Category: 'A', Value: 12 }, { Category: 'A', Value: 18 },\n            { Category: 'B', Value: 25 }, { Category: 'B', Value: 30 },\n            { Category: 'B', Value: 22 }, { Category: 'B', Value: 28 },\n        ];\n        tests.push({\n            title: 'No Jitter (aligned strip)',\n            description: 'jitterWidth=0 produces a clean strip',\n            tags: ['jitter', 'config'],\n            chartType: 'Strip Plot',\n            data,\n            fields: [makeField('Category'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Value') },\n            chartProperties: { jitterWidth: 0 },\n        });\n    }\n\n    return tests;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/echarts-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts backend comparison tests.\n *\n * Runs the same test inputs through BOTH assembleVegaLite (Vega-Lite) and\n * assembleECharts (ECharts) to verify:\n *   1. Both produce valid output from the same inputs\n *   2. The structural differences are as expected (encoding-based vs series-based)\n *   3. Core analysis phases (semantics, layout, overflow) produce identical results\n *\n * Covers: Scatter Plot, Line Chart, Bar Chart, Stacked Bar Chart, Grouped Bar Chart\n */\n\nimport { Type } from '../../../data/types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genCategories, genDates, genMonths } from './generators';\n\n// ---------------------------------------------------------------------------\n// Test data generators — shared across VL and EC\n// ---------------------------------------------------------------------------\n\nfunction genScatterData(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        Weight: Math.round((40 + rand() * 60) * 10) / 10,\n        Height: Math.round((150 + rand() * 50) * 10) / 10,\n    }));\n}\n\nfunction genScatterColorData(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    const categories = ['Alpha', 'Beta', 'Gamma'];\n    return Array.from({ length: n }, (_, i) => ({\n        X: Math.round(rand() * 100 * 10) / 10,\n        Y: Math.round(rand() * 100 * 10) / 10,\n        Group: categories[i % categories.length],\n    }));\n}\n\nfunction genBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const products = ['Apples', 'Bananas', 'Cherries', 'Dates', 'Elderberries'];\n    return products.map(p => ({\n        Product: p,\n        Sales: Math.round(100 + rand() * 900),\n    }));\n}\n\nfunction genLineData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'];\n    return months.map(m => ({\n        Month: m,\n        Revenue: Math.round(1000 + rand() * 5000),\n    }));\n}\n\nfunction genMultiSeriesLineData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'];\n    const series = ['ProductA', 'ProductB', 'ProductC'];\n    const data: any[] = [];\n    for (const m of months) {\n        for (const s of series) {\n            data.push({\n                Month: m,\n                Sales: Math.round(500 + rand() * 2000),\n                Product: s,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genStackedBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n    const regions = ['North', 'South', 'East', 'West'];\n    const data: any[] = [];\n    for (const q of quarters) {\n        for (const r of regions) {\n            data.push({\n                Quarter: q,\n                Revenue: Math.round(200 + rand() * 800),\n                Region: r,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genGroupedBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const years = ['2022', '2023', '2024'];\n    const departments = ['Sales', 'Engineering', 'Marketing'];\n    const data: any[] = [];\n    for (const y of years) {\n        for (const d of departments) {\n            data.push({\n                Year: y,\n                Budget: Math.round(10000 + rand() * 50000),\n                Department: d,\n            });\n        }\n    }\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Test case builders\n// ---------------------------------------------------------------------------\n\nexport function genEChartsScatterTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic scatter — quant × quant\n    {\n        const data = genScatterData(50, 42);\n        tests.push({\n            title: 'EC: Scatter — Basic Q×Q',\n            description: '50 points, two quantitative axes. Compare VL encoding-based vs EC series-based.',\n            tags: ['echarts', 'scatter', 'quantitative'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('Weight'), makeField('Height')],\n            metadata: {\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Weight'), y: makeEncodingItem('Height') },\n        });\n    }\n\n    // 2. Scatter with color grouping\n    {\n        const data = genScatterColorData(90, 77);\n        tests.push({\n            title: 'EC: Scatter — Color Groups',\n            description: '90 points, 3 groups. VL: one encoding.color; EC: 3 separate series.',\n            tags: ['echarts', 'scatter', 'color', 'multi-series'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('X'), makeField('Y'), makeField('Group')],\n            metadata: {\n                X: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Y: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Group: { type: Type.String, semanticType: 'Category', levels: ['Alpha', 'Beta', 'Gamma'] },\n            },\n            encodingMap: { x: makeEncodingItem('X'), y: makeEncodingItem('Y'), color: makeEncodingItem('Group') },\n        });\n    }\n\n    // 3. Dense scatter — tests point sizing\n    {\n        const data = genScatterData(500, 99);\n        tests.push({\n            title: 'EC: Scatter — Dense (500 pts)',\n            description: 'Dense scatter plot. VL uses applyPointSizeScaling; EC controls itemStyle.',\n            tags: ['echarts', 'scatter', 'dense'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('Weight'), makeField('Height')],\n            metadata: {\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Weight'), y: makeEncodingItem('Height') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genEChartsLineTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Single series line\n    {\n        const data = genLineData(200);\n        tests.push({\n            title: 'EC: Line — Single Series',\n            description: 'Ordinal x-axis, single line. VL: mark=line; EC: series type=line.',\n            tags: ['echarts', 'line', 'single-series'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Revenue')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan','Feb','Mar','Apr','May','Jun'] },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Revenue') },\n        });\n    }\n\n    // 2. Multi-series line (the key difference test)\n    {\n        const data = genMultiSeriesLineData(300);\n        tests.push({\n            title: 'EC: Line — Multi-Series (3 products)',\n            description: 'Color channel → multiple lines. VL: single spec with color encoding; EC: 3 explicit series with category-aligned data.',\n            tags: ['echarts', 'line', 'multi-series', 'color'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Sales'), makeField('Product')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug'] },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Product: { type: Type.String, semanticType: 'Category', levels: ['ProductA','ProductB','ProductC'] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Product') },\n        });\n    }\n\n    // 3. Multi-series with many categories\n    {\n        const rand = seededRandom(400);\n        const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n        const series = genCategories('Region', 8);\n        const data: any[] = [];\n        for (const m of months) {\n            for (const s of series) {\n                data.push({ Month: m, Value: Math.round(rand() * 1000), Region: s });\n            }\n        }\n        tests.push({\n            title: 'EC: Line — 8 Series × 12 Months',\n            description: 'High series count. VL: one color encoding; EC: 8 separate series objects.',\n            tags: ['echarts', 'line', 'multi-series', 'medium'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Value'), makeField('Region')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: series },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Value'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genEChartsBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Simple bar\n    {\n        const data = genBarData(500);\n        tests.push({\n            title: 'EC: Bar — Simple (5 bars)',\n            description: 'Nominal x, quantitative y. VL: mark=bar + encoding; EC: series type=bar + xAxis.data.',\n            tags: ['echarts', 'bar', 'simple'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Product'), makeField('Sales')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Product', levels: ['Apples','Bananas','Cherries','Dates','Elderberries'] },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Product'), y: makeEncodingItem('Sales') },\n        });\n    }\n\n    // 2. Many bars (tests overflow and label rotation)\n    {\n        const rand = seededRandom(501);\n        const cats = genCategories('Item', 25);\n        const data = cats.map(c => ({ Item: c, Count: Math.round(10 + rand() * 90) }));\n        tests.push({\n            title: 'EC: Bar — Many Categories (25)',\n            description: 'Tests label handling. VL: labelAngle in axis config; EC: axisLabel.rotate.',\n            tags: ['echarts', 'bar', 'medium', 'overflow'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Item'), makeField('Count')],\n            metadata: {\n                Item: { type: Type.String, semanticType: 'Category', levels: cats },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Item'), y: makeEncodingItem('Count') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genEChartsStackedBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic stacked bar\n    {\n        const data = genStackedBarData(600);\n        tests.push({\n            title: 'EC: Stacked Bar — 4Q × 4 Regions',\n            description: 'VL: color channel auto-stacks; EC: series[].stack=\"total\" explicit.',\n            tags: ['echarts', 'stacked-bar', 'color'],\n            chartType: 'Stacked Bar Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Revenue'), makeField('Region')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Category', levels: ['Q1','Q2','Q3','Q4'] },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: ['North','South','East','West'] },\n            },\n            encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Revenue'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    // 2. Stacked bar with many stacks\n    {\n        const rand = seededRandom(601);\n        const cats = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'];\n        const types = genCategories('TaskType', 6);\n        const data: any[] = [];\n        for (const c of cats) {\n            for (const t of types) {\n                data.push({ Day: c, Hours: Math.round(1 + rand() * 8), TaskType: t });\n            }\n        }\n        tests.push({\n            title: 'EC: Stacked Bar — 5 Days × 6 Types',\n            description: 'More stack segments. Tests legend sizing in both backends.',\n            tags: ['echarts', 'stacked-bar', 'medium'],\n            chartType: 'Stacked Bar Chart',\n            data,\n            fields: [makeField('Day'), makeField('Hours'), makeField('TaskType')],\n            metadata: {\n                Day: { type: Type.String, semanticType: 'Category', levels: cats },\n                Hours: { type: Type.Number, semanticType: 'Duration', levels: [] },\n                TaskType: { type: Type.String, semanticType: 'Category', levels: types },\n            },\n            encodingMap: { x: makeEncodingItem('Day'), y: makeEncodingItem('Hours'), color: makeEncodingItem('TaskType') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genEChartsGroupedBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic grouped bar\n    {\n        const data = genGroupedBarData(700);\n        tests.push({\n            title: 'EC: Grouped Bar — 3 Years × 3 Depts',\n            description: 'VL: group channel → xOffset; EC: multiple series side-by-side (barGap).',\n            tags: ['echarts', 'grouped-bar', 'group'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Year'), makeField('Budget'), makeField('Department')],\n            metadata: {\n                Year: { type: Type.String, semanticType: 'Year', levels: ['2022','2023','2024'] },\n                Budget: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Department: { type: Type.String, semanticType: 'Category', levels: ['Sales','Engineering','Marketing'] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Year'),\n                y: makeEncodingItem('Budget'),\n                group: makeEncodingItem('Department'),\n            },\n        });\n    }\n\n    // 2. Grouped bar with more groups\n    {\n        const rand = seededRandom(701);\n        const categories = ['A', 'B', 'C', 'D'];\n        const groups = genCategories('Method', 5);\n        const data: any[] = [];\n        for (const c of categories) {\n            for (const g of groups) {\n                data.push({ Category: c, Score: Math.round(rand() * 100), Method: g });\n            }\n        }\n        tests.push({\n            title: 'EC: Grouped Bar — 4 Categories × 5 Methods',\n            description: 'More groups per category. Tests bar width calculation in both backends.',\n            tags: ['echarts', 'grouped-bar', 'medium'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Category'), makeField('Score'), makeField('Method')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: categories },\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n                Method: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Category'),\n                y: makeEncodingItem('Score'),\n                group: makeEncodingItem('Method'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Stress / overflow test cases\n// ---------------------------------------------------------------------------\n\nexport function genEChartsStressTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Grouped bar — many categories (20 products × 3 groups)\n    {\n        const rand = seededRandom(900);\n        const products = genCategories('Product', 20);\n        const channels = ['Online', 'Retail', 'Wholesale'];\n        const data: any[] = [];\n        for (const p of products) {\n            for (const c of channels) {\n                data.push({ Product: p, Sales: Math.round(100 + rand() * 9000), Channel: c });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Grouped Bar — 20 Categories × 3 Groups',\n            description: 'Many x-axis categories with grouping. Tests horizontal overflow and label crowding.',\n            tags: ['echarts', 'grouped-bar', 'stress', 'overflow'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Product'), makeField('Sales'), makeField('Channel')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Category', levels: products },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Channel: { type: Type.String, semanticType: 'Category', levels: channels },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Product'),\n                y: makeEncodingItem('Sales'),\n                group: makeEncodingItem('Channel'),\n            },\n        });\n    }\n\n    // 2. Grouped bar — many groups (4 quarters × 10 regions)\n    {\n        const rand = seededRandom(901);\n        const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n        const regions = genCategories('Region', 10);\n        const data: any[] = [];\n        for (const q of quarters) {\n            for (const r of regions) {\n                data.push({ Quarter: q, Revenue: Math.round(500 + rand() * 5000), Region: r });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Grouped Bar — 4 Quarters × 10 Groups',\n            description: 'Few categories but many groups per category. Tests bar width when bands are subdivided heavily.',\n            tags: ['echarts', 'grouped-bar', 'stress', 'many-groups'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Revenue'), makeField('Region')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Category', levels: quarters },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Quarter'),\n                y: makeEncodingItem('Revenue'),\n                group: makeEncodingItem('Region'),\n            },\n        });\n    }\n\n    // 3. Grouped bar — many categories AND many groups (12 months × 6 types)\n    {\n        const rand = seededRandom(902);\n        const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\n        const types = genCategories('Type', 6);\n        const data: any[] = [];\n        for (const m of months) {\n            for (const t of types) {\n                data.push({ Month: m, Count: Math.round(10 + rand() * 200), Type: t });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Grouped Bar — 12 Months × 6 Types',\n            description: 'Both many categories and many groups. Extreme horizontal stretch scenario.',\n            tags: ['echarts', 'grouped-bar', 'stress', 'extreme'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Month'), makeField('Count'), makeField('Type')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n                Type: { type: Type.String, semanticType: 'Category', levels: types },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Month'),\n                y: makeEncodingItem('Count'),\n                group: makeEncodingItem('Type'),\n            },\n        });\n    }\n\n    // 4. Line chart — many x-values (60 days) causing horizontal stretch\n    {\n        const rand = seededRandom(903);\n        const days: string[] = [];\n        for (let i = 1; i <= 60; i++) {\n            const month = Math.ceil(i / 30).toString().padStart(2, '0');\n            const dayOfMonth = ((i - 1) % 30 + 1).toString().padStart(2, '0');\n            days.push(`2024-${month}-${dayOfMonth}`);\n        }\n        const data = days.map(d => ({ Date: d, Value: Math.round(rand() * 500) }));\n        tests.push({\n            title: 'EC Stress: Line — 60 Daily Points',\n            description: 'Many x-axis values on a single line. Tests horizontal stretch and label rotation/density.',\n            tags: ['echarts', 'line', 'stress', 'stretch'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Temporal', levels: days },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    // 5. Multi-series line — many x-values with multiple series (30 weeks × 5 products)\n    {\n        const rand = seededRandom(904);\n        const weeks: string[] = [];\n        for (let i = 1; i <= 30; i++) weeks.push(`W${i}`);\n        const products = genCategories('Prod', 5);\n        const data: any[] = [];\n        for (const w of weeks) {\n            for (const p of products) {\n                data.push({ Week: w, Sales: Math.round(50 + rand() * 500), Product: p });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Line — 30 Weeks × 5 Products',\n            description: 'Multi-series line with many x-values. Tests legend + horizontal stretch together.',\n            tags: ['echarts', 'line', 'stress', 'multi-series', 'stretch'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Week'), makeField('Sales'), makeField('Product')],\n            metadata: {\n                Week: { type: Type.String, semanticType: 'Category', levels: weeks },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Product: { type: Type.String, semanticType: 'Category', levels: products },\n            },\n            encodingMap: { x: makeEncodingItem('Week'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Product') },\n        });\n    }\n\n    // 6. Stacked bar — many categories (15 cities × 4 segments)\n    {\n        const rand = seededRandom(905);\n        const cities = genCategories('City', 15);\n        const segments = ['Residential', 'Commercial', 'Industrial', 'Government'];\n        const data: any[] = [];\n        for (const c of cities) {\n            for (const s of segments) {\n                data.push({ City: c, Spending: Math.round(1000 + rand() * 20000), Segment: s });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Stacked Bar — 15 Cities × 4 Segments',\n            description: 'Many categories with stacking. Tests whether stacked bars maintain adequate width with many x-values.',\n            tags: ['echarts', 'stacked-bar', 'stress', 'overflow'],\n            chartType: 'Stacked Bar Chart',\n            data,\n            fields: [makeField('City'), makeField('Spending'), makeField('Segment')],\n            metadata: {\n                City: { type: Type.String, semanticType: 'Category', levels: cities },\n                Spending: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Segment: { type: Type.String, semanticType: 'Category', levels: segments },\n            },\n            encodingMap: { x: makeEncodingItem('City'), y: makeEncodingItem('Spending'), color: makeEncodingItem('Segment') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Area Chart tests\n// ===========================================================================\n\nexport function genEChartsAreaTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Single-series area\n    {\n        const rand = seededRandom(1000);\n        const months = ['Jan','Feb','Mar','Apr','May','Jun'];\n        const data = months.map(m => ({ Month: m, Revenue: Math.round(100 + rand() * 900) }));\n        tests.push({\n            title: 'EC: Area — Single Series',\n            description: 'Single area chart. VL: mark=area; EC: line series + areaStyle.',\n            tags: ['echarts', 'area', 'single-series'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Month'), makeField('Revenue')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Revenue') },\n        });\n    }\n\n    // 2. Stacked multi-series area\n    {\n        const rand = seededRandom(1001);\n        const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug'];\n        const products = ['Desktop', 'Mobile', 'Tablet'];\n        const data: any[] = [];\n        for (const m of months) {\n            for (const p of products) {\n                data.push({ Month: m, Sales: Math.round(50 + rand() * 500), Product: p });\n            }\n        }\n        tests.push({\n            title: 'EC: Area — Stacked 3 Products',\n            description: 'Stacked area. VL: y.stack; EC: series[].stack + areaStyle.',\n            tags: ['echarts', 'area', 'stacked', 'multi-series'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Month'), makeField('Sales'), makeField('Product')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Product: { type: Type.String, semanticType: 'Category', levels: products },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Product') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Pie Chart tests\n// ===========================================================================\n\nexport function genEChartsPieTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic pie\n    {\n        const data = [\n            { Category: 'Electronics', Revenue: 4500 },\n            { Category: 'Clothing', Revenue: 3200 },\n            { Category: 'Food', Revenue: 2800 },\n            { Category: 'Books', Revenue: 1500 },\n            { Category: 'Sports', Revenue: 900 },\n        ];\n        tests.push({\n            title: 'EC: Pie — 5 Slices',\n            description: 'Basic pie chart. VL: mark=arc + theta; EC: series type=pie.',\n            tags: ['echarts', 'pie', 'basic'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Category'), makeField('Revenue')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: ['Electronics','Clothing','Food','Books','Sports'] },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Category'), size: makeEncodingItem('Revenue') },\n        });\n    }\n\n    // 2. Pie with many slices\n    {\n        const rand = seededRandom(1010);\n        const categories = genCategories('Item', 10);\n        const data = categories.map(c => ({ Item: c, Count: Math.round(10 + rand() * 90) }));\n        tests.push({\n            title: 'EC: Pie — 10 Slices',\n            description: 'Many-slice pie. Tests label overlap and legend sizing.',\n            tags: ['echarts', 'pie', 'medium'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Item'), makeField('Count')],\n            metadata: {\n                Item: { type: Type.String, semanticType: 'Category', levels: categories },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Item'), size: makeEncodingItem('Count') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Heatmap tests\n// ===========================================================================\n\nexport function genEChartsHeatmapTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic heatmap\n    {\n        const rand = seededRandom(1020);\n        const days = ['Mon','Tue','Wed','Thu','Fri'];\n        const hours = ['9am','10am','11am','12pm','1pm','2pm','3pm','4pm','5pm'];\n        const data: any[] = [];\n        for (const d of days) {\n            for (const h of hours) {\n                data.push({ Day: d, Hour: h, Activity: Math.round(rand() * 100) });\n            }\n        }\n        tests.push({\n            title: 'EC: Heatmap — 5 Days × 9 Hours',\n            description: 'Categorical x+y with quantitative color. VL: mark=rect + color scale; EC: heatmap + visualMap.',\n            tags: ['echarts', 'heatmap', 'basic'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Day'), makeField('Hour'), makeField('Activity')],\n            metadata: {\n                Day: { type: Type.String, semanticType: 'Category', levels: days },\n                Hour: { type: Type.String, semanticType: 'Category', levels: hours },\n                Activity: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Day'), y: makeEncodingItem('Hour'), color: makeEncodingItem('Activity') },\n        });\n    }\n\n    // 2. Larger heatmap\n    {\n        const rand = seededRandom(1021);\n        const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\n        const regions = genCategories('Region', 8);\n        const data: any[] = [];\n        for (const m of months) {\n            for (const r of regions) {\n                data.push({ Month: m, Region: r, Sales: Math.round(rand() * 10000) });\n            }\n        }\n        tests.push({\n            title: 'EC: Heatmap — 12 Months × 8 Regions',\n            description: 'Larger heatmap. Tests color gradient and label density.',\n            tags: ['echarts', 'heatmap', 'medium'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Month'), makeField('Region'), makeField('Sales')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Region'), color: makeEncodingItem('Sales') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Histogram tests\n// ===========================================================================\n\nexport function genEChartsHistogramTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Simple histogram\n    {\n        const rand = seededRandom(1030);\n        const data = Array.from({ length: 200 }, () => ({\n            Score: Math.round(rand() * 100),\n        }));\n        tests.push({\n            title: 'EC: Histogram — 200 Values',\n            description: 'Single-variable histogram. VL: encoding.x.bin=true; EC: client-side binning.',\n            tags: ['echarts', 'histogram', 'basic'],\n            chartType: 'Histogram',\n            data,\n            fields: [makeField('Score')],\n            metadata: {\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Score') },\n        });\n    }\n\n    // 2. Histogram with color grouping\n    {\n        const rand = seededRandom(1031);\n        const groups = ['Male', 'Female'];\n        const data: any[] = [];\n        for (const g of groups) {\n            const offset = g === 'Male' ? 10 : -5;\n            for (let i = 0; i < 150; i++) {\n                data.push({\n                    Height: Math.round(155 + offset + rand() * 40),\n                    Gender: g,\n                });\n            }\n        }\n        tests.push({\n            title: 'EC: Histogram — Stacked by Gender',\n            description: 'Stacked histogram with color grouping.',\n            tags: ['echarts', 'histogram', 'stacked', 'color'],\n            chartType: 'Histogram',\n            data,\n            fields: [makeField('Height'), makeField('Gender')],\n            metadata: {\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('Height'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Boxplot tests\n// ===========================================================================\n\nexport function genEChartsBoxplotTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic boxplot — 4 categories\n    {\n        const rand = seededRandom(1040);\n        const categories = ['Spring', 'Summer', 'Autumn', 'Winter'];\n        const data: any[] = [];\n        for (const c of categories) {\n            const base = c === 'Summer' ? 28 : c === 'Winter' ? 5 : 15;\n            for (let i = 0; i < 40; i++) {\n                data.push({\n                    Season: c,\n                    Temperature: Math.round((base + (rand() - 0.5) * 20) * 10) / 10,\n                });\n            }\n        }\n        tests.push({\n            title: 'EC: Boxplot — 4 Seasons',\n            description: 'Box-and-whisker per season. VL: mark=boxplot auto-quartiles; EC: client-side quartile computation.',\n            tags: ['echarts', 'boxplot', 'basic'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Season'), makeField('Temperature')],\n            metadata: {\n                Season: { type: Type.String, semanticType: 'Category', levels: categories },\n                Temperature: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Season'), y: makeEncodingItem('Temperature') },\n        });\n    }\n\n    // 2. Boxplot with many categories\n    {\n        const rand = seededRandom(1041);\n        const cities = genCategories('City', 8);\n        const data: any[] = [];\n        for (const c of cities) {\n            for (let i = 0; i < 30; i++) {\n                data.push({\n                    City: c,\n                    Salary: Math.round(30000 + rand() * 70000),\n                });\n            }\n        }\n        tests.push({\n            title: 'EC: Boxplot — 8 Cities',\n            description: 'More categories with salary distributions. Tests box width scaling.',\n            tags: ['echarts', 'boxplot', 'medium'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('City'), makeField('Salary')],\n            metadata: {\n                City: { type: Type.String, semanticType: 'Category', levels: cities },\n                Salary: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('City'), y: makeEncodingItem('Salary') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Radar Chart tests\n// ===========================================================================\n\nexport function genEChartsRadarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Single-group radar\n    {\n        const data = [\n            { Metric: 'Speed', Value: 80 },\n            { Metric: 'Strength', Value: 70 },\n            { Metric: 'Defense', Value: 90 },\n            { Metric: 'Agility', Value: 65 },\n            { Metric: 'Intelligence', Value: 85 },\n        ];\n        tests.push({\n            title: 'EC: Radar — Single Polygon',\n            description: 'Single-group radar. VL: manual trig + layered marks; EC: native radar series.',\n            tags: ['echarts', 'radar', 'single'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Metric'), makeField('Value')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: ['Speed','Strength','Defense','Agility','Intelligence'] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    // 2. Multi-group radar\n    {\n        const metrics = ['Attack', 'Defense', 'Speed', 'HP', 'Special', 'Accuracy'];\n        const groups = ['Warrior', 'Mage', 'Rogue'];\n        const rand = seededRandom(1050);\n        const data: any[] = [];\n        for (const g of groups) {\n            for (const m of metrics) {\n                data.push({ Skill: m, Score: Math.round(30 + rand() * 70), Class: g });\n            }\n        }\n        tests.push({\n            title: 'EC: Radar — 3 Groups × 6 Axes',\n            description: 'Multi-group radar comparison. EC excels here — native polar layout vs VL manual trig.',\n            tags: ['echarts', 'radar', 'multi-group'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Skill'), makeField('Score'), makeField('Class')],\n            metadata: {\n                Skill: { type: Type.String, semanticType: 'Category', levels: metrics },\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n                Class: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('Skill'), y: makeEncodingItem('Score'), color: makeEncodingItem('Class') },\n        });\n    }\n\n    // 3. Radar with many axes\n    {\n        const metrics = ['Metric1','Metric2','Metric3','Metric4','Metric5','Metric6','Metric7','Metric8','Metric9','Metric10'];\n        const rand = seededRandom(1051);\n        const data = metrics.map(m => ({ Metric: m, Value: Math.round(20 + rand() * 80) }));\n        tests.push({\n            title: 'EC: Radar — 10 Axes',\n            description: 'Dense radar with many axes. Tests label crowding on spokes.',\n            tags: ['echarts', 'radar', 'dense'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Metric'), makeField('Value')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: metrics },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Candlestick Chart\n// ---------------------------------------------------------------------------\n\nexport function genEChartsCandlestickTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1100);\n\n    function genOHLC(days: number, startPrice: number) {\n        const data: any[] = [];\n        let price = startPrice;\n        const baseDate = new Date('2024-01-02');\n        for (let i = 0; i < days; i++) {\n            const date = new Date(baseDate);\n            date.setDate(baseDate.getDate() + i);\n            const change = (rand() - 0.48) * 4;\n            const open = Math.round(price * 100) / 100;\n            const close = Math.round((price + change) * 100) / 100;\n            const high = Math.round((Math.max(open, close) + rand() * 2) * 100) / 100;\n            const low = Math.round((Math.min(open, close) - rand() * 2) * 100) / 100;\n            data.push({\n                Date: date.toISOString().slice(0, 10),\n                Open: open, High: high, Low: low, Close: close,\n            });\n            price = close;\n        }\n        return data;\n    }\n\n    // 1. 30-day OHLC\n    {\n        const data = genOHLC(30, 150);\n        tests.push({\n            title: 'EC: Candlestick — 30-day OHLC',\n            description: 'One month stock data. EC: native candlestick series; VL: layered rule+bar.',\n            tags: ['echarts', 'candlestick', 'small'],\n            chartType: 'Candlestick Chart',\n            data,\n            fields: [makeField('Date'), makeField('Open'), makeField('High'), makeField('Low'), makeField('Close')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Date', levels: [] },\n                Open: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                High: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Low: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Close: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                open: makeEncodingItem('Open'),\n                high: makeEncodingItem('High'),\n                low: makeEncodingItem('Low'),\n                close: makeEncodingItem('Close'),\n            },\n        });\n    }\n\n    // 2. 90-day dense\n    {\n        const data = genOHLC(90, 50);\n        tests.push({\n            title: 'EC: Candlestick — 90-day Dense',\n            description: 'Three months — tests candle width auto-sizing and dataZoom.',\n            tags: ['echarts', 'candlestick', 'medium'],\n            chartType: 'Candlestick Chart',\n            data,\n            fields: [makeField('Date'), makeField('Open'), makeField('High'), makeField('Low'), makeField('Close')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Date', levels: [] },\n                Open: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                High: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Low: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Close: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                open: makeEncodingItem('Open'),\n                high: makeEncodingItem('High'),\n                low: makeEncodingItem('Low'),\n                close: makeEncodingItem('Close'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Streamgraph\n// ---------------------------------------------------------------------------\n\nexport function genEChartsStreamgraphTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1150);\n\n    const genFlow = (n: number, base: number, volatility: number): number[] => {\n        const values: number[] = [base];\n        let momentum = 0;\n        for (let i = 1; i < n; i++) {\n            momentum = 0.6 * momentum + (rand() - 0.5) * volatility;\n            values.push(Math.round(Math.max(10, values[i - 1] + momentum)));\n        }\n        return values;\n    };\n\n    // 1. Basic streamgraph — 5 series\n    {\n        const dates = genDates(40, 2020);\n        const genres = ['Rock', 'Pop', 'Jazz', 'Electronic', 'Classical'];\n        const data: any[] = [];\n        for (const g of genres) {\n            const base = 100 + Math.round(rand() * 200);\n            const series = genFlow(40, base, 30);\n            for (let i = 0; i < dates.length; i++) {\n                data.push({ Date: dates[i], Genre: g, Listeners: series[i] });\n            }\n        }\n        tests.push({\n            title: 'EC: Streamgraph — 5 Series',\n            description: '40 dates × 5 genres. EC: stacked area with baseline offset; VL: area + y.stack=center.',\n            tags: ['echarts', 'streamgraph', 'medium'],\n            chartType: 'Streamgraph',\n            data,\n            fields: [makeField('Date'), makeField('Listeners'), makeField('Genre')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Listeners: { type: Type.Number, semanticType: 'Quantity', levels: genres },\n                Genre: { type: Type.String, semanticType: 'Category', levels: genres },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Listeners'), color: makeEncodingItem('Genre') },\n        });\n    }\n\n    // 2. Dense streamgraph — 8 series\n    {\n        const dates = genDates(60, 2018);\n        const categories = genCategories('Sector', 8);\n        const data: any[] = [];\n        for (const cat of categories) {\n            const base = 150 + Math.round(rand() * 300);\n            const series = genFlow(60, base, 35);\n            for (let i = 0; i < dates.length; i++) {\n                data.push({ Date: dates[i], Sector: cat, Revenue: series[i] });\n            }\n        }\n        tests.push({\n            title: 'EC: Streamgraph — 8 Series Dense',\n            description: '60 dates × 8 sectors — dense center-stacked flow.',\n            tags: ['echarts', 'streamgraph', 'large'],\n            chartType: 'Streamgraph',\n            data,\n            fields: [makeField('Date'), makeField('Revenue'), makeField('Sector')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Sector: { type: Type.String, semanticType: 'Category', levels: categories },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Revenue'), color: makeEncodingItem('Sector') },\n        });\n    }\n\n    return tests;\n}\n\n// ============================================================================\n// ECharts Facet Tests\n// ============================================================================\n\n/**\n * Helper: build a facet test for dual VL+EC rendering.\n */\nfunction buildEChartsFacetTest(opts: {\n    title: string;\n    description: string;\n    tags: string[];\n    chartType: string;\n    colCount?: number;\n    rowCount?: number;\n    xCategories?: string[];\n    scatter?: boolean;\n    seed: number;\n}): TestCase {\n    const { title, description, tags, chartType, colCount, rowCount, xCategories, scatter, seed } = opts;\n    const rand = seededRandom(seed);\n    const colVals = colCount ? genCategories('Region', colCount) : undefined;\n    const rowVals = rowCount ? genCategories('Zone', rowCount) : undefined;\n\n    const data: any[] = [];\n    const facets: { col?: string; row?: string }[] = [];\n    if (colVals && rowVals) {\n        for (const c of colVals) for (const r of rowVals) facets.push({ col: c, row: r });\n    } else if (colVals) {\n        for (const c of colVals) facets.push({ col: c });\n    } else if (rowVals) {\n        for (const r of rowVals) facets.push({ row: r });\n    }\n\n    for (const facet of facets) {\n        if (scatter) {\n            for (let i = 0; i < 15; i++) {\n                data.push({\n                    X: Math.round(10 + rand() * 90),\n                    Y: Math.round(10 + rand() * 90),\n                    ...(facet.col != null ? { Col: facet.col } : {}),\n                    ...(facet.row != null ? { Row: facet.row } : {}),\n                });\n            }\n        } else {\n            for (const cat of xCategories!) {\n                data.push({\n                    Category: cat,\n                    Value: Math.round(50 + rand() * 500),\n                    ...(facet.col != null ? { Col: facet.col } : {}),\n                    ...(facet.row != null ? { Row: facet.row } : {}),\n                });\n            }\n        }\n    }\n\n    const encodingMap: Partial<Record<string, any>> = {};\n    const fields: any[] = [];\n    const metadata: Record<string, any> = {};\n\n    if (scatter) {\n        encodingMap.x = makeEncodingItem('X');\n        encodingMap.y = makeEncodingItem('Y');\n        fields.push(makeField('X'), makeField('Y'));\n        metadata['X'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n        metadata['Y'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n    } else {\n        encodingMap.x = makeEncodingItem('Category');\n        encodingMap.y = makeEncodingItem('Value');\n        fields.push(makeField('Category'), makeField('Value'));\n        metadata['Category'] = { type: Type.String, semanticType: 'Category', levels: xCategories };\n        metadata['Value'] = { type: Type.Number, semanticType: 'Revenue', levels: [] };\n    }\n\n    if (colVals) {\n        encodingMap.column = makeEncodingItem('Col');\n        fields.push(makeField('Col'));\n        metadata['Col'] = { type: Type.String, semanticType: 'Category', levels: colVals };\n    }\n    if (rowVals) {\n        encodingMap.row = makeEncodingItem('Row');\n        fields.push(makeField('Row'));\n        metadata['Row'] = { type: Type.String, semanticType: 'Category', levels: rowVals };\n    }\n\n    return { title, description, tags, chartType, data, fields, metadata, encodingMap } as TestCase;\n}\n\n/** Small facet counts — columns, rows, col×row */\nexport function genEChartsFacetSmallTests(): TestCase[] {\n    const cats = ['A', 'B', 'C', 'D'];\n    return [\n        buildEChartsFacetTest({\n            title: 'EC Facet: 2 Columns — Bar',\n            description: '2 column facets, 4 bars each.',\n            tags: ['echarts', 'facet', 'column', 'small'],\n            chartType: 'Bar Chart', colCount: 2, xCategories: cats, seed: 1300,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 3 Columns — Scatter',\n            description: '3 column facets with scatter plots.',\n            tags: ['echarts', 'facet', 'column', 'small'],\n            chartType: 'Scatter Plot', colCount: 3, scatter: true, seed: 1301,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 2 Rows — Bar',\n            description: '2 row facets, 4 bars each.',\n            tags: ['echarts', 'facet', 'row', 'small'],\n            chartType: 'Bar Chart', rowCount: 2, xCategories: cats, seed: 1302,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 3 Rows — Scatter',\n            description: '3 row facets with scatter plots.',\n            tags: ['echarts', 'facet', 'row', 'small'],\n            chartType: 'Scatter Plot', rowCount: 3, scatter: true, seed: 1303,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 2×2 Col×Row — Bar',\n            description: '2 columns × 2 rows = 4 panels.',\n            tags: ['echarts', 'facet', 'colrow', 'small'],\n            chartType: 'Bar Chart', colCount: 2, rowCount: 2, xCategories: cats, seed: 1304,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 2×3 Col×Row — Scatter',\n            description: '2 columns × 3 rows = 6 panels.',\n            tags: ['echarts', 'facet', 'colrow', 'small'],\n            chartType: 'Scatter Plot', colCount: 2, rowCount: 3, scatter: true, seed: 1305,\n        }),\n    ];\n}\n\n/** Larger column counts that require horizontal wrapping */\nexport function genEChartsFacetWrapTests(): TestCase[] {\n    const cats = ['A', 'B', 'C'];\n    return [\n        buildEChartsFacetTest({\n            title: 'EC Facet: 6 Columns — Bar (wrap)',\n            description: '6 column facets × 3 bars. Tests horizontal wrapping.',\n            tags: ['echarts', 'facet', 'column', 'wrap'],\n            chartType: 'Bar Chart', colCount: 6, xCategories: cats, seed: 1310,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 8 Columns — Scatter (wrap)',\n            description: '8 column facets with scatter plots.',\n            tags: ['echarts', 'facet', 'column', 'wrap'],\n            chartType: 'Scatter Plot', colCount: 8, scatter: true, seed: 1311,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 10 Columns — Bar (heavy wrap)',\n            description: '10 column facets. Extreme horizontal wrap.',\n            tags: ['echarts', 'facet', 'column', 'wrap', 'heavy'],\n            chartType: 'Bar Chart', colCount: 10, xCategories: cats, seed: 1312,\n        }),\n    ];\n}\n\n/** Large col×row grids requiring clipping */\nexport function genEChartsFacetClipTests(): TestCase[] {\n    const cats = ['A', 'B', 'C'];\n    return [\n        buildEChartsFacetTest({\n            title: 'EC Facet: 4×3 Col×Row — Bar (12 panels)',\n            description: '4 columns × 3 rows = 12 panels.',\n            tags: ['echarts', 'facet', 'colrow', 'clip'],\n            chartType: 'Bar Chart', colCount: 4, rowCount: 3, xCategories: cats, seed: 1320,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 5×4 Col×Row — Scatter (20 panels)',\n            description: '5 columns × 4 rows = 20 panels.',\n            tags: ['echarts', 'facet', 'colrow', 'clip'],\n            chartType: 'Scatter Plot', colCount: 5, rowCount: 4, scatter: true, seed: 1321,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 6×5 Col×Row — Bar (30 panels)',\n            description: '6 columns × 5 rows = 30 panels. Extreme grid.',\n            tags: ['echarts', 'facet', 'colrow', 'clip', 'heavy'],\n            chartType: 'Bar Chart', colCount: 6, rowCount: 5, xCategories: cats, seed: 1322,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 8 Rows — Scatter (vertical clip)',\n            description: '8 row facets. Tests vertical overflow.',\n            tags: ['echarts', 'facet', 'row', 'clip'],\n            chartType: 'Scatter Plot', rowCount: 8, scatter: true, seed: 1323,\n        }),\n    ];\n}\n\n// ===========================================================================\n// Rose Chart tests\n// ===========================================================================\n\nexport function genEChartsRoseTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1400);\n\n    // 1. Basic rose — wind directions × speed\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const data = directions.map(d => ({ Direction: d, Speed: Math.round(5 + rand() * 25) }));\n        tests.push({\n            title: 'EC: Rose — 8 Directions',\n            description: 'Wind speed by compass direction. VL: arc+theta+radius; EC: series type=bar (polar).',\n            tags: ['echarts', 'rose', 'basic'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Category', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 2. Stacked rose — directions × season\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const seasons = ['Spring', 'Summer', 'Autumn', 'Winter'];\n        const data: any[] = [];\n        for (const d of directions) {\n            for (const s of seasons) {\n                data.push({ Direction: d, Speed: Math.round(3 + rand() * 20), Season: s });\n            }\n        }\n        tests.push({\n            title: 'EC: Stacked Rose — 8 dirs × 4 seasons',\n            description: 'Stacked wind rose by season. Tests polar stacked bar rendering.',\n            tags: ['echarts', 'rose', 'stacked'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed'), makeField('Season')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Category', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Season: { type: Type.String, semanticType: 'Category', levels: seasons },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed'), color: makeEncodingItem('Season') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 3. Rose — 12 months\n    {\n        const months = genMonths(12);\n        const data = months.map(m => ({ Month: m, Rainfall: Math.round(20 + rand() * 150) }));\n        tests.push({\n            title: 'EC: Rose — 12 Months Rainfall',\n            description: 'Monthly rainfall as a rose chart. Tests many-category angular layout.',\n            tags: ['echarts', 'rose', 'medium'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Month'), makeField('Rainfall')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Rainfall: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Rainfall') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Gauge Chart tests (ECharts-only)\n// ===========================================================================\n\nexport function genEChartsGaugeTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1500);\n\n    // 1. Basic gauge — single KPI value\n    {\n        const data = [{ Score: 72.5 }];\n        tests.push({\n            title: 'EC: Gauge — Single KPI',\n            description: 'Single-value gauge chart. ECharts-only — no VL equivalent.',\n            tags: ['echarts', 'gauge', 'basic'],\n            chartType: 'Gauge Chart',\n            data,\n            fields: [makeField('Score')],\n            metadata: {\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Score') },\n            chartProperties: { max: 100 },\n        });\n    }\n\n    // 2. Multiple pointers — multi-KPI gauge\n    {\n        const data = [\n            { Metric: 'CPU', Usage: 65 },\n            { Metric: 'Memory', Usage: 82 },\n            { Metric: 'Disk', Usage: 43 },\n        ];\n        tests.push({\n            title: 'EC: Gauge — Multi-Pointer (3 KPIs)',\n            description: 'Three pointers on a single gauge for CPU/Memory/Disk.',\n            tags: ['echarts', 'gauge', 'multi'],\n            chartType: 'Gauge Chart',\n            data,\n            fields: [makeField('Metric'), makeField('Usage')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: ['CPU', 'Memory', 'Disk'] },\n                Usage: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Usage'), column: makeEncodingItem('Metric') },\n            chartProperties: { max: 100 },\n        });\n    }\n\n    // 3. Aggregate gauge — average of many values\n    {\n        const data = Array.from({ length: 50 }, () => ({\n            Temperature: Math.round((18 + rand() * 15) * 10) / 10,\n        }));\n        tests.push({\n            title: 'EC: Gauge — Aggregated (50 rows avg)',\n            description: 'Gauge showing average of 50 temperature readings.',\n            tags: ['echarts', 'gauge', 'aggregate'],\n            chartType: 'Gauge Chart',\n            data,\n            fields: [makeField('Temperature')],\n            metadata: {\n                Temperature: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Temperature') },\n            chartProperties: { min: 0, max: 50 },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Funnel Chart tests (ECharts-only)\n// ===========================================================================\n\nexport function genEChartsFunnelTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1600);\n\n    // 1. Basic sales funnel\n    {\n        const stages = ['Visits', 'Signups', 'Trials', 'Purchases', 'Renewals'];\n        const data = stages.map((s, i) => ({\n            Stage: s,\n            Count: Math.round(10000 / Math.pow(2, i) + rand() * 500),\n        }));\n        tests.push({\n            title: 'EC: Funnel — Sales Pipeline',\n            description: 'Classic conversion funnel. ECharts-only — no VL equivalent.',\n            tags: ['echarts', 'funnel', 'basic'],\n            chartType: 'Funnel Chart',\n            data,\n            fields: [makeField('Stage'), makeField('Count')],\n            metadata: {\n                Stage: { type: Type.String, semanticType: 'Category', levels: stages },\n                Count: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Stage'), size: makeEncodingItem('Count') },\n        });\n    }\n\n    // 2. Recruitment funnel — ascending\n    {\n        const steps = ['Applied', 'Screened', 'Interviewed', 'Offered', 'Hired'];\n        const data = steps.map((s, i) => ({\n            Step: s,\n            Candidates: Math.round(500 / Math.pow(1.8, i) + rand() * 30),\n        }));\n        tests.push({\n            title: 'EC: Funnel — Recruitment (ascending)',\n            description: 'Hiring funnel sorted ascending (narrowest at top).',\n            tags: ['echarts', 'funnel', 'ascending'],\n            chartType: 'Funnel Chart',\n            data,\n            fields: [makeField('Step'), makeField('Candidates')],\n            metadata: {\n                Step: { type: Type.String, semanticType: 'Category', levels: steps },\n                Candidates: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Step'), size: makeEncodingItem('Candidates') },\n            chartProperties: { sort: 'ascending' },\n        });\n    }\n\n    // 3. Many stages\n    {\n        const steps = ['Awareness', 'Interest', 'Consideration', 'Intent',\n                        'Evaluation', 'Trial', 'Purchase', 'Loyalty'];\n        const data = steps.map((s, i) => ({\n            Phase: s,\n            Users: Math.round(50000 / Math.pow(1.5, i) + rand() * 1000),\n        }));\n        tests.push({\n            title: 'EC: Funnel — 8-Stage Marketing',\n            description: 'Marketing funnel with 8 stages. Tests label fitting.',\n            tags: ['echarts', 'funnel', 'many-stages'],\n            chartType: 'Funnel Chart',\n            data,\n            fields: [makeField('Phase'), makeField('Users')],\n            metadata: {\n                Phase: { type: Type.String, semanticType: 'Category', levels: steps },\n                Users: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Phase'), size: makeEncodingItem('Users') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Treemap tests (ECharts-only)\n// ===========================================================================\n\nexport function genEChartsTreemapTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1700);\n\n    // 1. Flat treemap — market sectors\n    {\n        const sectors = ['Technology', 'Healthcare', 'Finance', 'Energy', 'Consumer', 'Industrials'];\n        const data = sectors.map(s => ({\n            Sector: s,\n            MarketCap: Math.round(500 + rand() * 4500),\n        }));\n        tests.push({\n            title: 'EC: Treemap — Market Sectors',\n            description: 'Flat treemap of market cap by sector. ECharts-only — no VL equivalent.',\n            tags: ['echarts', 'treemap', 'flat'],\n            chartType: 'Treemap',\n            data,\n            fields: [makeField('Sector'), makeField('MarketCap')],\n            metadata: {\n                Sector: { type: Type.String, semanticType: 'Category', levels: sectors },\n                MarketCap: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Sector'), size: makeEncodingItem('MarketCap') },\n        });\n    }\n\n    // 2. Hierarchical treemap — regions → countries\n    {\n        const hierarchy: Record<string, string[]> = {\n            'Americas': ['USA', 'Canada', 'Brazil', 'Mexico'],\n            'Europe': ['UK', 'Germany', 'France', 'Italy'],\n            'Asia': ['China', 'Japan', 'India', 'Korea'],\n        };\n        const data: any[] = [];\n        for (const [region, countries] of Object.entries(hierarchy)) {\n            for (const country of countries) {\n                data.push({\n                    Region: region,\n                    Country: country,\n                    Revenue: Math.round(100 + rand() * 2000),\n                });\n            }\n        }\n        tests.push({\n            title: 'EC: Treemap — Regions × Countries',\n            description: 'Two-level treemap: 3 regions → 4 countries each.',\n            tags: ['echarts', 'treemap', 'hierarchical'],\n            chartType: 'Treemap',\n            data,\n            fields: [makeField('Region'), makeField('Country'), makeField('Revenue')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Category', levels: Object.keys(hierarchy) },\n                Country: { type: Type.String, semanticType: 'Country', levels: [] },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: {\n                color: makeEncodingItem('Region'),\n                detail: makeEncodingItem('Country'),\n                size: makeEncodingItem('Revenue'),\n            },\n        });\n    }\n\n    // 3. Large flat treemap — 15 categories\n    {\n        const categories = genCategories('Item', 15);\n        const data = categories.map(c => ({\n            Item: c,\n            Size: Math.round(50 + rand() * 500),\n        }));\n        tests.push({\n            title: 'EC: Treemap — 15 Categories',\n            description: 'Large flat treemap with 15 items. Tests label fitting and color cycling.',\n            tags: ['echarts', 'treemap', 'large'],\n            chartType: 'Treemap',\n            data,\n            fields: [makeField('Item'), makeField('Size')],\n            metadata: {\n                Item: { type: Type.String, semanticType: 'Category', levels: categories },\n                Size: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Item'), size: makeEncodingItem('Size') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Sunburst Chart tests (ECharts-only)\n// ===========================================================================\n\nexport function genEChartsSunburstTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1800);\n\n    // 1. Flat sunburst — budget categories\n    {\n        const categories = ['Housing', 'Food', 'Transport', 'Entertainment', 'Savings', 'Healthcare'];\n        const data = categories.map(c => ({\n            Category: c,\n            Amount: Math.round(200 + rand() * 2000),\n        }));\n        tests.push({\n            title: 'EC: Sunburst — Budget Categories',\n            description: 'Single-ring sunburst of budget allocation. ECharts-only — no VL equivalent.',\n            tags: ['echarts', 'sunburst', 'flat'],\n            chartType: 'Sunburst Chart',\n            data,\n            fields: [makeField('Category'), makeField('Amount')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: categories },\n                Amount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Category'), size: makeEncodingItem('Amount') },\n        });\n    }\n\n    // 2. Two-ring sunburst — departments → teams\n    {\n        const hierarchy: Record<string, string[]> = {\n            'Engineering': ['Frontend', 'Backend', 'Infra', 'QA'],\n            'Product': ['Design', 'PM', 'Research'],\n            'Operations': ['HR', 'Finance', 'Legal'],\n        };\n        const data: any[] = [];\n        for (const [dept, teams] of Object.entries(hierarchy)) {\n            for (const team of teams) {\n                data.push({\n                    Department: dept,\n                    Team: team,\n                    Headcount: Math.round(5 + rand() * 50),\n                });\n            }\n        }\n        tests.push({\n            title: 'EC: Sunburst — Departments × Teams',\n            description: 'Two-ring sunburst: 3 departments → 3–4 teams each.',\n            tags: ['echarts', 'sunburst', 'hierarchical'],\n            chartType: 'Sunburst Chart',\n            data,\n            fields: [makeField('Department'), makeField('Team'), makeField('Headcount')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Category', levels: Object.keys(hierarchy) },\n                Team: { type: Type.String, semanticType: 'Category', levels: [] },\n                Headcount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                color: makeEncodingItem('Department'),\n                detail: makeEncodingItem('Team'),\n                size: makeEncodingItem('Headcount'),\n            },\n        });\n    }\n\n    // 3. Sunburst with many items\n    {\n        const continents: Record<string, string[]> = {\n            'North America': ['USA', 'Canada', 'Mexico'],\n            'Europe': ['UK', 'France', 'Germany', 'Spain', 'Italy'],\n            'Asia': ['China', 'Japan', 'India', 'Korea', 'Thailand'],\n            'South America': ['Brazil', 'Argentina', 'Chile'],\n        };\n        const data: any[] = [];\n        for (const [cont, countries] of Object.entries(continents)) {\n            for (const country of countries) {\n                data.push({\n                    Continent: cont,\n                    Country: country,\n                    Population: Math.round(10 + rand() * 1400),\n                });\n            }\n        }\n        tests.push({\n            title: 'EC: Sunburst — 4 Continents × Countries',\n            description: 'Two-ring sunburst with 16 countries across 4 continents.',\n            tags: ['echarts', 'sunburst', 'large'],\n            chartType: 'Sunburst Chart',\n            data,\n            fields: [makeField('Continent'), makeField('Country'), makeField('Population')],\n            metadata: {\n                Continent: { type: Type.String, semanticType: 'Category', levels: Object.keys(continents) },\n                Country: { type: Type.String, semanticType: 'Country', levels: [] },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                color: makeEncodingItem('Continent'),\n                detail: makeEncodingItem('Country'),\n                size: makeEncodingItem('Population'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Sankey Diagram tests (ECharts-only)\n// ===========================================================================\n\nexport function genEChartsSankeyTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1900);\n\n    // 1. Simple energy flow\n    {\n        const data = [\n            { Source: 'Coal', Target: 'Electricity', Value: 250 },\n            { Source: 'Gas', Target: 'Electricity', Value: 180 },\n            { Source: 'Gas', Target: 'Heating', Value: 120 },\n            { Source: 'Oil', Target: 'Transport', Value: 300 },\n            { Source: 'Oil', Target: 'Industry', Value: 80 },\n            { Source: 'Electricity', Target: 'Residential', Value: 200 },\n            { Source: 'Electricity', Target: 'Industry', Value: 230 },\n            { Source: 'Heating', Target: 'Residential', Value: 120 },\n        ];\n        tests.push({\n            title: 'EC: Sankey — Energy Flow',\n            description: 'Energy source → use Sankey diagram. ECharts-only — no VL equivalent.',\n            tags: ['echarts', 'sankey', 'basic'],\n            chartType: 'Sankey Diagram',\n            data,\n            fields: [makeField('Source'), makeField('Target'), makeField('Value')],\n            metadata: {\n                Source: { type: Type.String, semanticType: 'Category', levels: [] },\n                Target: { type: Type.String, semanticType: 'Category', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Source'),\n                y: makeEncodingItem('Target'),\n                size: makeEncodingItem('Value'),\n            },\n        });\n    }\n\n    // 2. Website user flow\n    {\n        const data = [\n            { From: 'Home', To: 'Products', Users: 450 },\n            { From: 'Home', To: 'About', Users: 120 },\n            { From: 'Home', To: 'Blog', Users: 200 },\n            { From: 'Products', To: 'Cart', Users: 180 },\n            { From: 'Products', To: 'Details', Users: 270 },\n            { From: 'Details', To: 'Cart', Users: 150 },\n            { From: 'Cart', To: 'Checkout', Users: 200 },\n            { From: 'Cart', To: 'Home', Users: 50 },\n            { From: 'Blog', To: 'Products', Users: 80 },\n        ];\n        tests.push({\n            title: 'EC: Sankey — Website User Flow',\n            description: 'Page-to-page navigation flow with link width proportional to user count.',\n            tags: ['echarts', 'sankey', 'user-flow'],\n            chartType: 'Sankey Diagram',\n            data,\n            fields: [makeField('From'), makeField('To'), makeField('Users')],\n            metadata: {\n                From: { type: Type.String, semanticType: 'Category', levels: [] },\n                To: { type: Type.String, semanticType: 'Category', levels: [] },\n                Users: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('From'),\n                y: makeEncodingItem('To'),\n                size: makeEncodingItem('Users'),\n            },\n        });\n    }\n\n    // 3. Dense Sankey — budget allocation\n    {\n        const sources = ['Federal', 'State', 'Municipal'];\n        const intermediates = ['Education', 'Healthcare', 'Defense', 'Infrastructure'];\n        const destinations = ['Salaries', 'Equipment', 'Contracts', 'Research'];\n        const data: any[] = [];\n        for (const src of sources) {\n            for (const mid of intermediates) {\n                data.push({ Source: src, Target: mid, Amount: Math.round(50 + rand() * 500) });\n            }\n        }\n        for (const mid of intermediates) {\n            for (const dst of destinations) {\n                data.push({ Source: mid, Target: dst, Amount: Math.round(30 + rand() * 300) });\n            }\n        }\n        tests.push({\n            title: 'EC: Sankey — Budget Flow (3-layer)',\n            description: '3 sources → 4 intermediates → 4 destinations. Tests dense multi-layer layout.',\n            tags: ['echarts', 'sankey', 'dense'],\n            chartType: 'Sankey Diagram',\n            data,\n            fields: [makeField('Source'), makeField('Target'), makeField('Amount')],\n            metadata: {\n                Source: { type: Type.String, semanticType: 'Category', levels: [] },\n                Target: { type: Type.String, semanticType: 'Category', levels: [] },\n                Amount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Source'),\n                y: makeEncodingItem('Target'),\n                size: makeEncodingItem('Amount'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Stress tests for ECharts-only chart types\n// ===========================================================================\n\nexport function genEChartsUniqueStressTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // ── Gauge stress ─────────────────────────────────────────────────────\n\n    // 1. Gauge — many KPIs (6 pointers side-by-side)\n    {\n        const rand = seededRandom(2000);\n        const metrics = ['CPU', 'Memory', 'Disk', 'Network', 'GPU', 'IO'];\n        const data = metrics.map(m => ({\n            Metric: m,\n            Usage: Math.round(10 + rand() * 90),\n        }));\n        tests.push({\n            title: 'EC Stress: Gauge — 6 KPIs',\n            description: '6 separate gauge dials side-by-side. Tests layout spacing with many gauges.',\n            tags: ['echarts', 'gauge', 'stress'],\n            chartType: 'Gauge Chart',\n            data,\n            fields: [makeField('Metric'), makeField('Usage')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: metrics },\n                Usage: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Usage'), column: makeEncodingItem('Metric') },\n            chartProperties: { max: 100 },\n        });\n    }\n\n    // 2. Gauge — aggregated from many rows\n    {\n        const rand = seededRandom(2001);\n        const data = Array.from({ length: 200 }, () => ({\n            Latency: Math.round((5 + rand() * 500) * 10) / 10,\n        }));\n        tests.push({\n            title: 'EC Stress: Gauge — Aggregated (200 rows)',\n            description: 'Single gauge averaging 200 latency readings.',\n            tags: ['echarts', 'gauge', 'stress', 'aggregate'],\n            chartType: 'Gauge Chart',\n            data,\n            fields: [makeField('Latency')],\n            metadata: {\n                Latency: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Latency') },\n            chartProperties: { min: 0, max: 500 },\n        });\n    }\n\n    // ── Funnel stress ────────────────────────────────────────────────────\n\n    // 3. Funnel — 12 stages\n    {\n        const rand = seededRandom(2010);\n        const stages = [\n            'Impression', 'View', 'Click', 'Visit', 'Browse',\n            'Add to Cart', 'Checkout Start', 'Address', 'Payment',\n            'Review', 'Confirm', 'Purchase',\n        ];\n        const data = stages.map((s, i) => ({\n            Stage: s,\n            Users: Math.round(100000 / Math.pow(1.4, i) + rand() * 2000),\n        }));\n        tests.push({\n            title: 'EC Stress: Funnel — 12 Stages',\n            description: '12-stage e-commerce funnel. Tests label fitting in narrow trapezoids.',\n            tags: ['echarts', 'funnel', 'stress', 'many-stages'],\n            chartType: 'Funnel Chart',\n            data,\n            fields: [makeField('Stage'), makeField('Users')],\n            metadata: {\n                Stage: { type: Type.String, semanticType: 'Category', levels: stages },\n                Users: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Stage'), size: makeEncodingItem('Users') },\n        });\n    }\n\n    // 4. Funnel — extreme value ratio (top 100× bottom)\n    {\n        const stages = ['Awareness', 'Interest', 'Desire', 'Action', 'Retention'];\n        const values = [100000, 25000, 5000, 800, 120];\n        const data = stages.map((s, i) => ({ Phase: s, Count: values[i] }));\n        tests.push({\n            title: 'EC Stress: Funnel — Extreme Ratio (833:1)',\n            description: 'Top stage is ~833× larger than bottom. Tests rendering of very thin tail stages.',\n            tags: ['echarts', 'funnel', 'stress', 'extreme-ratio'],\n            chartType: 'Funnel Chart',\n            data,\n            fields: [makeField('Phase'), makeField('Count')],\n            metadata: {\n                Phase: { type: Type.String, semanticType: 'Category', levels: stages },\n                Count: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Phase'), size: makeEncodingItem('Count') },\n        });\n    }\n\n    // ── Treemap stress ───────────────────────────────────────────────────\n\n    // 5. Treemap — 30 flat categories\n    {\n        const rand = seededRandom(2020);\n        const categories = genCategories('Stock', 30);\n        const data = categories.map(c => ({\n            Stock: c,\n            MarketCap: Math.round(100 + rand() * 5000),\n        }));\n        tests.push({\n            title: 'EC Stress: Treemap — 30 Items (Flat)',\n            description: '30-item flat treemap. Tests label density and color cycling.',\n            tags: ['echarts', 'treemap', 'stress', 'flat-large'],\n            chartType: 'Treemap',\n            data,\n            fields: [makeField('Stock'), makeField('MarketCap')],\n            metadata: {\n                Stock: { type: Type.String, semanticType: 'Category', levels: categories },\n                MarketCap: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Stock'), size: makeEncodingItem('MarketCap') },\n        });\n    }\n\n    // 6. Treemap — deep hierarchy (6 regions × 8 products)\n    {\n        const rand = seededRandom(2021);\n        const regions = ['North America', 'Europe', 'Asia Pacific', 'Latin America', 'Middle East', 'Africa'];\n        const products = ['Software', 'Hardware', 'Services', 'Cloud', 'Security', 'Analytics', 'Mobile', 'AI'];\n        const data: any[] = [];\n        for (const r of regions) {\n            for (const p of products) {\n                data.push({\n                    Region: r,\n                    Product: p,\n                    Revenue: Math.round(50 + rand() * 3000),\n                });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Treemap — 6 Regions × 8 Products (48 leaves)',\n            description: '48-leaf hierarchical treemap. Tests nested labels and color saturation.',\n            tags: ['echarts', 'treemap', 'stress', 'hierarchical-large'],\n            chartType: 'Treemap',\n            data,\n            fields: [makeField('Region'), makeField('Product'), makeField('Revenue')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n                Product: { type: Type.String, semanticType: 'Category', levels: products },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: {\n                color: makeEncodingItem('Region'),\n                detail: makeEncodingItem('Product'),\n                size: makeEncodingItem('Revenue'),\n            },\n        });\n    }\n\n    // 7. Treemap — extreme value skew (one item dominates)\n    {\n        const rand = seededRandom(2022);\n        const items = ['Dominant', 'Small A', 'Small B', 'Small C', 'Tiny D', 'Tiny E', 'Tiny F', 'Tiny G'];\n        const values = [50000, 800, 600, 400, 100, 80, 50, 30];\n        const data = items.map((item, i) => ({ Category: item, Value: values[i] + Math.round(rand() * 50) }));\n        tests.push({\n            title: 'EC Stress: Treemap — Extreme Skew',\n            description: 'One category dominates (~96% of total). Tests visibility of tiny rectangles.',\n            tags: ['echarts', 'treemap', 'stress', 'skew'],\n            chartType: 'Treemap',\n            data,\n            fields: [makeField('Category'), makeField('Value')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: items },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Category'), size: makeEncodingItem('Value') },\n        });\n    }\n\n    // ── Sunburst stress ──────────────────────────────────────────────────\n\n    // 8. Sunburst — 5 continents × 6 countries (30 outer slices)\n    {\n        const rand = seededRandom(2030);\n        const hierarchy: Record<string, string[]> = {\n            'North America': ['USA', 'Canada', 'Mexico', 'Cuba', 'Jamaica', 'Panama'],\n            'Europe': ['UK', 'France', 'Germany', 'Spain', 'Italy', 'Netherlands'],\n            'Asia': ['China', 'Japan', 'India', 'Korea', 'Thailand', 'Vietnam'],\n            'Africa': ['Nigeria', 'Egypt', 'South Africa', 'Kenya', 'Ghana', 'Morocco'],\n            'Oceania': ['Australia', 'New Zealand', 'Fiji', 'Samoa', 'Tonga', 'Vanuatu'],\n        };\n        const data: any[] = [];\n        for (const [continent, countries] of Object.entries(hierarchy)) {\n            for (const country of countries) {\n                data.push({\n                    Continent: continent,\n                    Country: country,\n                    GDP: Math.round(10 + rand() * 20000),\n                });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Sunburst — 5 × 6 (30 outer slices)',\n            description: '30 countries across 5 continents. Tests outer-ring label crowding.',\n            tags: ['echarts', 'sunburst', 'stress', 'large'],\n            chartType: 'Sunburst Chart',\n            data,\n            fields: [makeField('Continent'), makeField('Country'), makeField('GDP')],\n            metadata: {\n                Continent: { type: Type.String, semanticType: 'Category', levels: Object.keys(hierarchy) },\n                Country: { type: Type.String, semanticType: 'Country', levels: [] },\n                GDP: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                color: makeEncodingItem('Continent'),\n                detail: makeEncodingItem('Country'),\n                size: makeEncodingItem('GDP'),\n            },\n        });\n    }\n\n    // 9. Sunburst — flat with 20 slices\n    {\n        const rand = seededRandom(2031);\n        const categories = genCategories('Expense', 20);\n        const data = categories.map(c => ({\n            Expense: c,\n            Amount: Math.round(100 + rand() * 5000),\n        }));\n        tests.push({\n            title: 'EC Stress: Sunburst — 20 Flat Slices',\n            description: 'Single-ring sunburst with 20 categories. Tests label overlap on thin slices.',\n            tags: ['echarts', 'sunburst', 'stress', 'flat-large'],\n            chartType: 'Sunburst Chart',\n            data,\n            fields: [makeField('Expense'), makeField('Amount')],\n            metadata: {\n                Expense: { type: Type.String, semanticType: 'Category', levels: categories },\n                Amount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Expense'), size: makeEncodingItem('Amount') },\n        });\n    }\n\n    // ── Sankey stress ────────────────────────────────────────────────────\n\n    // 10. Sankey — 4-layer deep (5 → 6 → 6 → 4 = 21 nodes, ~70 links)\n    {\n        const rand = seededRandom(2040);\n        const layer1 = ['Source A', 'Source B', 'Source C', 'Source D', 'Source E'];\n        const layer2 = genCategories('Process', 6);\n        const layer3 = genCategories('Output', 6);\n        const layer4 = ['Final X', 'Final Y', 'Final Z', 'Final W'];\n        const data: any[] = [];\n        for (const s of layer1) {\n            for (const p of layer2) {\n                if (rand() > 0.4) {\n                    data.push({ Source: s, Target: p, Flow: Math.round(20 + rand() * 300) });\n                }\n            }\n        }\n        for (const p of layer2) {\n            for (const o of layer3) {\n                if (rand() > 0.35) {\n                    data.push({ Source: p, Target: o, Flow: Math.round(10 + rand() * 200) });\n                }\n            }\n        }\n        for (const o of layer3) {\n            for (const f of layer4) {\n                if (rand() > 0.3) {\n                    data.push({ Source: o, Target: f, Flow: Math.round(5 + rand() * 150) });\n                }\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Sankey — 4-Layer Deep (~70 links)',\n            description: '5 sources → 6 processes → 6 outputs → 4 finals. Tests multi-layer routing.',\n            tags: ['echarts', 'sankey', 'stress', 'deep'],\n            chartType: 'Sankey Diagram',\n            data,\n            fields: [makeField('Source'), makeField('Target'), makeField('Flow')],\n            metadata: {\n                Source: { type: Type.String, semanticType: 'Category', levels: [] },\n                Target: { type: Type.String, semanticType: 'Category', levels: [] },\n                Flow: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Source'),\n                y: makeEncodingItem('Target'),\n                size: makeEncodingItem('Flow'),\n            },\n        });\n    }\n\n    // 11. Sankey — wide fan-out (2 sources → 15 targets)\n    {\n        const rand = seededRandom(2041);\n        const sources = ['Revenue', 'Funding'];\n        const targets = genCategories('Dept', 15);\n        const data: any[] = [];\n        for (const s of sources) {\n            for (const t of targets) {\n                data.push({ From: s, To: t, Budget: Math.round(100 + rand() * 5000) });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Sankey — Wide Fan-Out (2 → 15)',\n            description: '2 sources distributing to 15 departments. Tests node stacking with many targets.',\n            tags: ['echarts', 'sankey', 'stress', 'fan-out'],\n            chartType: 'Sankey Diagram',\n            data,\n            fields: [makeField('From'), makeField('To'), makeField('Budget')],\n            metadata: {\n                From: { type: Type.String, semanticType: 'Category', levels: sources },\n                To: { type: Type.String, semanticType: 'Category', levels: targets },\n                Budget: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('From'),\n                y: makeEncodingItem('To'),\n                size: makeEncodingItem('Budget'),\n            },\n        });\n    }\n\n    // 12. Sankey — dense mesh (8 × 8 = 64 links)\n    {\n        const rand = seededRandom(2042);\n        const left = genCategories('Origin', 8);\n        const right = genCategories('Dest', 8);\n        const data: any[] = [];\n        for (const l of left) {\n            for (const r of right) {\n                data.push({ Origin: l, Dest: r, Volume: Math.round(10 + rand() * 500) });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Sankey — Dense Mesh (8 × 8 = 64 links)',\n            description: 'Fully connected 8→8 network. Tests link crossing and visual clarity.',\n            tags: ['echarts', 'sankey', 'stress', 'mesh'],\n            chartType: 'Sankey Diagram',\n            data,\n            fields: [makeField('Origin'), makeField('Dest'), makeField('Volume')],\n            metadata: {\n                Origin: { type: Type.String, semanticType: 'Category', levels: left },\n                Dest: { type: Type.String, semanticType: 'Category', levels: right },\n                Volume: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Origin'),\n                y: makeEncodingItem('Dest'),\n                size: makeEncodingItem('Volume'),\n            },\n        });\n    }\n\n    return tests;\n}"
  },
  {
    "path": "src/lib/agents-chart/test-data/facet-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\nimport { Channel, EncodingItem } from '../../../components/ComponentType';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genCategories } from './generators';\n\n/** Facet cardinality sizes */\nexport const FACET_SIZES = { S: 2, M: 4, L: 8, XL: 12 } as const;\n/** Discrete axis cardinality sizes */\nexport const DISCRETE_SIZES = { S: 4, M: 8, L: 20, XL: 50 } as const;\n\n/**\n * Generate facet test cases for a given facet mode (column, row, or column+row).\n * For each combination of facetSize × axisType:\n *   - Continuous × Continuous (scatter in each facet)\n *   - Continuous × Discrete-S/M/L/XL (bar in each facet)\n */\nexport function genFacetTests(\n    mode: 'column' | 'row' | 'column+row',\n): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(mode === 'column' ? 500 : mode === 'row' ? 600 : 700);\n\n    const facetSizeEntries = Object.entries(FACET_SIZES) as [string, number][];\n    const discreteSizeEntries = Object.entries(DISCRETE_SIZES) as [string, number][];\n\n    for (const [facetLabel, facetCount] of facetSizeEntries) {\n        // For column+row mode, split facetCount across columns and rows\n        let colCount: number, rowCount: number;\n        if (mode === 'column+row') {\n            colCount = Math.max(2, Math.ceil(Math.sqrt(facetCount)));\n            rowCount = Math.max(2, Math.ceil(facetCount / colCount));\n        } else {\n            colCount = facetCount;\n            rowCount = facetCount;\n        }\n\n        const facetDesc = mode === 'column+row'\n            ? `${colCount} cols × ${rowCount} rows`\n            : `${facetCount} facets`;\n\n        // --- 1. Continuous × Continuous (scatter) ---\n        {\n            const facetVals = mode === 'column+row'\n                ? null  // handled separately\n                : genCategories('Region', mode === 'column' ? colCount : rowCount);\n            const colVals = mode === 'column+row' ? genCategories('Region', colCount) : undefined;\n            const rowVals = mode === 'column+row' ? genCategories('Zone', rowCount) : undefined;\n\n            const data: any[] = [];\n            const pointsPerFacet = 20;\n\n            if (mode === 'column+row') {\n                for (const c of colVals!) for (const r of rowVals!) {\n                    for (let i = 0; i < pointsPerFacet; i++) {\n                        data.push({\n                            X: Math.round(10 + rand() * 90),\n                            Y: Math.round(10 + rand() * 90),\n                            Col: c,\n                            Row: r,\n                        });\n                    }\n                }\n            } else {\n                for (const f of facetVals!) {\n                    for (let i = 0; i < pointsPerFacet; i++) {\n                        data.push({\n                            X: Math.round(10 + rand() * 90),\n                            Y: Math.round(10 + rand() * 90),\n                            Facet: f,\n                        });\n                    }\n                }\n            }\n\n            const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n                x: makeEncodingItem('X'),\n                y: makeEncodingItem('Y'),\n            };\n            const fields = [makeField('X'), makeField('Y')];\n            const metadata: Record<string, any> = {\n                X: { type: Type.Number, semanticType: 'Value', levels: [] },\n                Y: { type: Type.Number, semanticType: 'Value', levels: [] },\n            };\n\n            if (mode === 'column+row') {\n                encodingMap.column = makeEncodingItem('Col');\n                encodingMap.row = makeEncodingItem('Row');\n                fields.push(makeField('Col'), makeField('Row'));\n                metadata['Col'] = { type: Type.String, semanticType: 'Category', levels: colVals };\n                metadata['Row'] = { type: Type.String, semanticType: 'Category', levels: rowVals };\n            } else if (mode === 'column') {\n                encodingMap.column = makeEncodingItem('Facet');\n                fields.push(makeField('Facet'));\n                metadata['Facet'] = { type: Type.String, semanticType: 'Category', levels: facetVals };\n            } else {\n                encodingMap.row = makeEncodingItem('Facet');\n                fields.push(makeField('Facet'));\n                metadata['Facet'] = { type: Type.String, semanticType: 'Category', levels: facetVals };\n            }\n\n            tests.push({\n                title: `Cont × Cont — facet ${facetLabel} (${facetDesc})`,\n                description: `Scatter plot with ${facetDesc}`,\n                tags: ['quantitative', 'facet', facetLabel.toLowerCase()],\n                chartType: 'Scatter Plot',\n                data,\n                fields,\n                metadata,\n                encodingMap,\n            });\n        }\n\n        // --- 2. Continuous × Discrete (bar chart) ---\n        for (const [discLabel, discCount] of discreteSizeEntries) {\n            const categories = genCategories('Item', discCount);\n            const facetVals = mode === 'column+row'\n                ? null\n                : genCategories('Region', mode === 'column' ? colCount : rowCount);\n            const colVals = mode === 'column+row' ? genCategories('Region', colCount) : undefined;\n            const rowVals = mode === 'column+row' ? genCategories('Zone', rowCount) : undefined;\n\n            const data: any[] = [];\n\n            if (mode === 'column+row') {\n                for (const c of colVals!) for (const r of rowVals!) {\n                    for (const cat of categories) {\n                        data.push({\n                            Category: cat,\n                            Value: Math.round(50 + rand() * 500),\n                            Col: c,\n                            Row: r,\n                        });\n                    }\n                }\n            } else {\n                for (const f of facetVals!) {\n                    for (const cat of categories) {\n                        data.push({\n                            Category: cat,\n                            Value: Math.round(50 + rand() * 500),\n                            Facet: f,\n                        });\n                    }\n                }\n            }\n\n            const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n                x: makeEncodingItem('Category'),\n                y: makeEncodingItem('Value'),\n            };\n            const fields = [makeField('Category'), makeField('Value')];\n            const metadata: Record<string, any> = {\n                Category: { type: Type.String, semanticType: 'Category', levels: categories },\n                Value: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            };\n\n            if (mode === 'column+row') {\n                encodingMap.column = makeEncodingItem('Col');\n                encodingMap.row = makeEncodingItem('Row');\n                fields.push(makeField('Col'), makeField('Row'));\n                metadata['Col'] = { type: Type.String, semanticType: 'Category', levels: colVals };\n                metadata['Row'] = { type: Type.String, semanticType: 'Category', levels: rowVals };\n            } else if (mode === 'column') {\n                encodingMap.column = makeEncodingItem('Facet');\n                fields.push(makeField('Facet'));\n                metadata['Facet'] = { type: Type.String, semanticType: 'Category', levels: facetVals };\n            } else {\n                encodingMap.row = makeEncodingItem('Facet');\n                fields.push(makeField('Facet'));\n                metadata['Facet'] = { type: Type.String, semanticType: 'Category', levels: facetVals };\n            }\n\n            tests.push({\n                title: `Cont × Disc-${discLabel} — facet ${facetLabel} (${facetDesc})`,\n                description: `Bar chart: ${discCount} categories × ${facetDesc}`,\n                tags: ['nominal', 'quantitative', 'facet', facetLabel.toLowerCase(), `disc-${discLabel.toLowerCase()}`],\n                chartType: 'Bar Chart',\n                data,\n                fields,\n                metadata,\n                encodingMap,\n            });\n        }\n    }\n\n    return tests;\n}\n\nexport function genFacetColumnTests(): TestCase[] { return genFacetTests('column'); }\nexport function genFacetRowTests(): TestCase[] { return genFacetTests('row'); }\nexport function genFacetColRowTests(): TestCase[] { return genFacetTests('column+row'); }\n\n// ============================================================================\n// Targeted Facet Tests\n// ============================================================================\n\n/**\n * Helper: build a facet test case from parameters.\n */\nfunction buildFacetTest(opts: {\n    title: string;\n    description: string;\n    tags: string[];\n    chartType: string;\n    colCount?: number;\n    rowCount?: number;\n    xCategories: string[];\n    yIsContinuous: boolean;\n    seed: number;\n}): TestCase {\n    const { title, description, tags, chartType, colCount, rowCount, xCategories, yIsContinuous, seed } = opts;\n    const rand = seededRandom(seed);\n    const colVals = colCount ? genCategories('Region', colCount) : undefined;\n    const rowVals = rowCount ? genCategories('Zone', rowCount) : undefined;\n\n    const data: Record<string, any>[] = [];\n    const facets: { col?: string; row?: string }[] = [];\n\n    if (colVals && rowVals) {\n        for (const c of colVals) for (const r of rowVals) facets.push({ col: c, row: r });\n    } else if (colVals) {\n        for (const c of colVals) facets.push({ col: c });\n    } else if (rowVals) {\n        for (const r of rowVals) facets.push({ row: r });\n    }\n\n    for (const facet of facets) {\n        if (yIsContinuous) {\n            // Scatter: continuous × continuous\n            for (let i = 0; i < 15; i++) {\n                data.push({\n                    X: Math.round(10 + rand() * 90),\n                    Y: Math.round(10 + rand() * 90),\n                    ...(facet.col != null ? { Col: facet.col } : {}),\n                    ...(facet.row != null ? { Row: facet.row } : {}),\n                });\n            }\n        } else {\n            // Bar: discrete × continuous\n            for (const cat of xCategories) {\n                data.push({\n                    Category: cat,\n                    Value: Math.round(50 + rand() * 500),\n                    ...(facet.col != null ? { Col: facet.col } : {}),\n                    ...(facet.row != null ? { Row: facet.row } : {}),\n                });\n            }\n        }\n    }\n\n    const encodingMap: Partial<Record<Channel, EncodingItem>> = {};\n    const fields: ReturnType<typeof makeField>[] = [];\n    const metadata: Record<string, any> = {};\n\n    if (yIsContinuous) {\n        encodingMap.x = makeEncodingItem('X');\n        encodingMap.y = makeEncodingItem('Y');\n        fields.push(makeField('X'), makeField('Y'));\n        metadata['X'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n        metadata['Y'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n    } else {\n        encodingMap.x = makeEncodingItem('Category');\n        encodingMap.y = makeEncodingItem('Value');\n        fields.push(makeField('Category'), makeField('Value'));\n        metadata['Category'] = { type: Type.String, semanticType: 'Category', levels: xCategories };\n        metadata['Value'] = { type: Type.Number, semanticType: 'Revenue', levels: [] };\n    }\n\n    if (colVals) {\n        encodingMap.column = makeEncodingItem('Col');\n        fields.push(makeField('Col'));\n        metadata['Col'] = { type: Type.String, semanticType: 'Category', levels: colVals };\n    }\n    if (rowVals) {\n        encodingMap.row = makeEncodingItem('Row');\n        fields.push(makeField('Row'));\n        metadata['Row'] = { type: Type.String, semanticType: 'Category', levels: rowVals };\n    }\n\n    return { title, description, tags, chartType, data, fields, metadata, encodingMap };\n}\n\n/**\n * 1. Small facet counts — columns only, rows only, and col×row.\n *    Should render comfortably without wrapping or clipping.\n */\nexport function genFacetSmallTests(): TestCase[] {\n    const cats = ['A', 'B', 'C', 'D'];\n    return [\n        // 2 columns, bar\n        buildFacetTest({\n            title: '2 Columns — Bar',\n            description: '2 column facets, 4 bars each. Should fit side-by-side easily.',\n            tags: ['facet', 'column', 'small', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 2,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1200,\n        }),\n        // 3 columns, scatter\n        buildFacetTest({\n            title: '3 Columns — Scatter',\n            description: '3 column facets with scatter plots.',\n            tags: ['facet', 'column', 'small', 'scatter'],\n            chartType: 'Scatter Plot',\n            colCount: 3,\n            xCategories: [],\n            yIsContinuous: true,\n            seed: 1201,\n        }),\n        // 2 rows, bar\n        buildFacetTest({\n            title: '2 Rows — Bar',\n            description: '2 row facets, 4 bars each. Should stack vertically.',\n            tags: ['facet', 'row', 'small', 'bar'],\n            chartType: 'Bar Chart',\n            rowCount: 2,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1202,\n        }),\n        // 3 rows, scatter\n        buildFacetTest({\n            title: '3 Rows — Scatter',\n            description: '3 row facets with scatter plots.',\n            tags: ['facet', 'row', 'small', 'scatter'],\n            chartType: 'Scatter Plot',\n            rowCount: 3,\n            xCategories: [],\n            yIsContinuous: true,\n            seed: 1203,\n        }),\n        // 2×2 col×row, bar\n        buildFacetTest({\n            title: '2×2 Col×Row — Bar',\n            description: '2 columns × 2 rows = 4 facet panels (bar chart).',\n            tags: ['facet', 'colrow', 'small', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 2,\n            rowCount: 2,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1204,\n        }),\n        // 2×3 col×row, scatter\n        buildFacetTest({\n            title: '2×3 Col×Row — Scatter',\n            description: '2 columns × 3 rows = 6 facet panels (scatter).',\n            tags: ['facet', 'colrow', 'small', 'scatter'],\n            chartType: 'Scatter Plot',\n            colCount: 2,\n            rowCount: 3,\n            xCategories: [],\n            yIsContinuous: true,\n            seed: 1205,\n        }),\n    ];\n}\n\n/**\n * 2. Larger column counts that require horizontal wrapping.\n *    6-8 columns should exceed the default ~400px subplot width.\n */\nexport function genFacetWrapTests(): TestCase[] {\n    const cats = ['A', 'B', 'C'];\n    return [\n        // 6 columns, bar\n        buildFacetTest({\n            title: '6 Columns — Bar (needs wrap)',\n            description: '6 column facets × 3 bars. Should require horizontal wrapping or scrolling.',\n            tags: ['facet', 'column', 'wrap', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 6,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1210,\n        }),\n        // 8 columns, scatter\n        buildFacetTest({\n            title: '8 Columns — Scatter (needs wrap)',\n            description: '8 column facets with scatter plots. Tests horizontal overflow.',\n            tags: ['facet', 'column', 'wrap', 'scatter'],\n            chartType: 'Scatter Plot',\n            colCount: 8,\n            xCategories: [],\n            yIsContinuous: true,\n            seed: 1211,\n        }),\n        // 10 columns, bar with more categories\n        buildFacetTest({\n            title: '10 Columns — Bar (heavy wrap)',\n            description: '10 column facets × 3 bars each. Extreme horizontal wrap test.',\n            tags: ['facet', 'column', 'wrap', 'heavy', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 10,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1212,\n        }),\n    ];\n}\n\n/**\n * 3. Large col×row grids that require clipping/scrolling.\n *    Many panels stress the layout engine.\n */\nexport function genFacetClipTests(): TestCase[] {\n    const cats = ['A', 'B', 'C'];\n    return [\n        // 4×3 = 12 panels\n        buildFacetTest({\n            title: '4×3 Col×Row — Bar (12 panels)',\n            description: '4 columns × 3 rows = 12 facet panels. Tests dense grid layout.',\n            tags: ['facet', 'colrow', 'clip', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 4,\n            rowCount: 3,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1220,\n        }),\n        // 5×4 = 20 panels, scatter\n        buildFacetTest({\n            title: '5×4 Col×Row — Scatter (20 panels)',\n            description: '5 columns × 4 rows = 20 facet panels. Heavy grid requiring clip.',\n            tags: ['facet', 'colrow', 'clip', 'scatter'],\n            chartType: 'Scatter Plot',\n            colCount: 5,\n            rowCount: 4,\n            xCategories: [],\n            yIsContinuous: true,\n            seed: 1221,\n        }),\n        // 6×5 = 30 panels\n        buildFacetTest({\n            title: '6×5 Col×Row — Bar (30 panels)',\n            description: '6 columns × 5 rows = 30 facet panels. Extreme grid test.',\n            tags: ['facet', 'colrow', 'clip', 'heavy', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 6,\n            rowCount: 5,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1222,\n        }),\n        // 8 rows, scatter — vertical clip\n        buildFacetTest({\n            title: '8 Rows — Scatter (vertical clip)',\n            description: '8 row facets with scatter plots. Tests vertical overflow.',\n            tags: ['facet', 'row', 'clip', 'scatter'],\n            chartType: 'Scatter Plot',\n            rowCount: 8,\n            xCategories: [],\n            yIsContinuous: true,\n            seed: 1223,\n        }),\n    ];\n}\n\n// ============================================================================\n// Overflowed Facet Tests\n// ============================================================================\n\n/**\n * Helper: build a facet overflow test with many column facets\n * and a banded (discrete) x-axis with `xCount` values.\n */\nfunction buildOverflowFacetTest(opts: {\n    title: string;\n    description: string;\n    tags: string[];\n    chartType: string;\n    colCount?: number;\n    rowCount?: number;\n    /** Number of banded/discrete x values per facet panel */\n    xBandedCount?: number;\n    /** If true, use continuous x × y (scatter) instead of discrete x */\n    continuousXY?: boolean;\n    seed: number;\n}): TestCase {\n    const { title, description, tags, chartType, colCount, rowCount, xBandedCount, continuousXY, seed } = opts;\n    const rand = seededRandom(seed);\n    const colVals = colCount ? genCategories('Region', colCount) : undefined;\n    const rowVals = rowCount ? genCategories('Zone', rowCount) : undefined;\n\n    const data: Record<string, any>[] = [];\n    const facets: { col?: string; row?: string }[] = [];\n\n    if (colVals && rowVals) {\n        for (const c of colVals) for (const r of rowVals) facets.push({ col: c, row: r });\n    } else if (colVals) {\n        for (const c of colVals) facets.push({ col: c });\n    } else if (rowVals) {\n        for (const r of rowVals) facets.push({ row: r });\n    }\n\n    const xCategories = xBandedCount ? genCategories('Item', xBandedCount) : [];\n\n    for (const facet of facets) {\n        if (continuousXY) {\n            for (let i = 0; i < 20; i++) {\n                data.push({\n                    X: Math.round(10 + rand() * 90),\n                    Y: Math.round(10 + rand() * 90),\n                    ...(facet.col != null ? { Col: facet.col } : {}),\n                    ...(facet.row != null ? { Row: facet.row } : {}),\n                });\n            }\n        } else {\n            for (const cat of xCategories) {\n                data.push({\n                    Category: cat,\n                    Value: Math.round(50 + rand() * 500),\n                    ...(facet.col != null ? { Col: facet.col } : {}),\n                    ...(facet.row != null ? { Row: facet.row } : {}),\n                });\n            }\n        }\n    }\n\n    const encodingMap: Partial<Record<Channel, EncodingItem>> = {};\n    const fields: ReturnType<typeof makeField>[] = [];\n    const metadata: Record<string, any> = {};\n\n    if (continuousXY) {\n        encodingMap.x = makeEncodingItem('X');\n        encodingMap.y = makeEncodingItem('Y');\n        fields.push(makeField('X'), makeField('Y'));\n        metadata['X'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n        metadata['Y'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n    } else {\n        encodingMap.x = makeEncodingItem('Category');\n        encodingMap.y = makeEncodingItem('Value');\n        fields.push(makeField('Category'), makeField('Value'));\n        metadata['Category'] = { type: Type.String, semanticType: 'Category', levels: xCategories };\n        metadata['Value'] = { type: Type.Number, semanticType: 'Revenue', levels: [] };\n    }\n\n    if (colVals) {\n        encodingMap.column = makeEncodingItem('Col');\n        fields.push(makeField('Col'));\n        metadata['Col'] = { type: Type.String, semanticType: 'Category', levels: colVals };\n    }\n    if (rowVals) {\n        encodingMap.row = makeEncodingItem('Row');\n        fields.push(makeField('Row'));\n        metadata['Row'] = { type: Type.String, semanticType: 'Category', levels: rowVals };\n    }\n\n    return { title, description, tags, chartType, data, fields, metadata, encodingMap };\n}\n\n/**\n * Overflowed Column facets — enough column facet values that the layout\n * must clip/wrap, combined with discrete (banded) or continuous axes.\n *\n * Tests that computeFacetGrid correctly caps and wraps column-only facets.\n */\nexport function genFacetOverflowedColTests(): TestCase[] {\n    return [\n        // 20 columns with 30 discrete x values each — banded axis makes\n        // each subplot wide, so far fewer columns fit than with continuous.\n        buildOverflowFacetTest({\n            title: '20 Cols × 30 Discrete — Bar (banded overflow)',\n            description: '20 column facets, 30 bars each. Banded x-axis forces wide subplots — heavy overflow + wrap.',\n            tags: ['facet', 'column', 'overflow', 'banded', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 20,\n            xBandedCount: 30,\n            seed: 1300,\n        }),\n        // 20 columns with continuous x × y — smaller subplots fit more columns.\n        buildOverflowFacetTest({\n            title: '20 Cols — Scatter (continuous overflow)',\n            description: '20 column facets with scatter plots. Continuous axes allow more columns before overflow.',\n            tags: ['facet', 'column', 'overflow', 'continuous', 'scatter'],\n            chartType: 'Scatter Plot',\n            colCount: 20,\n            continuousXY: true,\n            seed: 1301,\n        }),\n    ];\n}\n\n/**\n * Overflowed Column + Row facets — both dimensions exceed comfortable\n * capacity, requiring independent capping on each axis.\n *\n * With canvas 400×300 and minSubplotSize 60:\n *   - 20 bars → minSubplotWidth = max(60, 20×6) = 120 → maxFacetCols = floor(600/120) = 5\n *   - continuous y → minSubplotHeight = 60 → maxFacetRows = floor(450/60) = 7\n *   So 8 cols clips to 5, 10 rows clips to 7.\n */\nexport function genFacetOverflowedColRowTests(): TestCase[] {\n    return [\n        // 8 cols × 10 rows, 20 bars each → clips to ~5×7.\n        buildOverflowFacetTest({\n            title: '8×10 Col×Row × 20 Bars (overflow both)',\n            description: '8 columns × 10 rows, 20 bars each. Both dimensions overflow: cols clip to ~5, rows to ~7.',\n            tags: ['facet', 'colrow', 'overflow', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 8,\n            rowCount: 10,\n            xBandedCount: 20,\n            seed: 1310,\n        }),\n        // 15 cols × 12 rows, scatter → clips to ~10×7 (continuous needs only 60px).\n        buildOverflowFacetTest({\n            title: '15×12 Col×Row — Scatter (extreme overflow)',\n            description: '15 columns × 12 rows = 180 panels (scatter). Both dimensions far exceed budget.',\n            tags: ['facet', 'colrow', 'overflow', 'extreme', 'scatter'],\n            chartType: 'Scatter Plot',\n            colCount: 15,\n            rowCount: 12,\n            continuousXY: true,\n            seed: 1311,\n        }),\n    ];\n}\n\n/**\n * Overflowed Row facets — enough row facet values that the layout\n * must clip vertically.\n */\nexport function genFacetOverflowedRowTests(): TestCase[] {\n    return [\n        // 15 rows with 10 bars each.\n        buildOverflowFacetTest({\n            title: '15 Rows — Bar (row overflow)',\n            description: '15 row facets, 10 bars each. Vertical overflow requiring row clipping.',\n            tags: ['facet', 'row', 'overflow', 'bar'],\n            chartType: 'Bar Chart',\n            rowCount: 15,\n            xBandedCount: 10,\n            seed: 1320,\n        }),\n        // 12 rows, scatter — vertical overflow.\n        buildOverflowFacetTest({\n            title: '12 Rows — Scatter (row overflow)',\n            description: '12 row facets with scatter plots. Tests vertical clipping.',\n            tags: ['facet', 'row', 'overflow', 'scatter'],\n            chartType: 'Scatter Plot',\n            rowCount: 12,\n            continuousXY: true,\n            seed: 1321,\n        }),\n    ];\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/gas-pressure-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Gas pressure model test cases (docs/design-stretch-model.md §2).\n *\n * 3 × 3 matrix of scatter plots varying:\n *   Density:       sparse (50 pts)  ×  dense (500 pts)  ×  very dense (3000 pts)\n *   Distribution:  uniform          ×  single cluster   ×  two clusters\n *\n * All use Scatter Plot with quantitative X/Y so the gas pressure model\n * (not the spring model) drives canvas sizing.\n */\n\nimport { Type } from '../../../data/types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom } from './generators';\n\n// ---------------------------------------------------------------------------\n// Data distribution generators\n// ---------------------------------------------------------------------------\n\n/** Uniform random in [0, 100] × [0, 100] */\nfunction genUniform(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        x: Math.round(rand() * 1000) / 10,\n        y: Math.round(rand() * 1000) / 10,\n    }));\n}\n\n/** 70% of points in a tight cluster at (70, 70), rest spread uniformly */\nfunction genSingleCluster(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    const clusterN = Math.round(n * 0.7);\n    const points: { x: number; y: number }[] = [];\n\n    // Dense cluster centered at (70, 70), σ ≈ 5\n    for (let i = 0; i < clusterN; i++) {\n        // Box-Muller approximation using seeded rand\n        const u1 = rand() || 0.001;\n        const u2 = rand();\n        const z0 = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);\n        const z1 = Math.sqrt(-2 * Math.log(u1)) * Math.sin(2 * Math.PI * u2);\n        points.push({\n            x: Math.round((70 + z0 * 5) * 10) / 10,\n            y: Math.round((70 + z1 * 5) * 10) / 10,\n        });\n    }\n\n    // Sparse background\n    for (let i = clusterN; i < n; i++) {\n        points.push({\n            x: Math.round(rand() * 1000) / 10,\n            y: Math.round(rand() * 1000) / 10,\n        });\n    }\n    return points;\n}\n\n/** Two clusters: 40% at (25, 25) σ≈5, 40% at (75, 75) σ≈5, 20% uniform */\nfunction genTwoClusters(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    const c1N = Math.round(n * 0.4);\n    const c2N = Math.round(n * 0.4);\n    const points: { x: number; y: number }[] = [];\n\n    const addCluster = (cx: number, cy: number, count: number) => {\n        for (let i = 0; i < count; i++) {\n            const u1 = rand() || 0.001;\n            const u2 = rand();\n            const z0 = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);\n            const z1 = Math.sqrt(-2 * Math.log(u1)) * Math.sin(2 * Math.PI * u2);\n            points.push({\n                x: Math.round((cx + z0 * 5) * 10) / 10,\n                y: Math.round((cy + z1 * 5) * 10) / 10,\n            });\n        }\n    };\n\n    addCluster(25, 25, c1N);\n    addCluster(75, 75, c2N);\n\n    // Sparse background\n    for (let i = c1N + c2N; i < n; i++) {\n        points.push({\n            x: Math.round(rand() * 1000) / 10,\n            y: Math.round(rand() * 1000) / 10,\n        });\n    }\n    return points;\n}\n\n// ---------------------------------------------------------------------------\n// Test case builder\n// ---------------------------------------------------------------------------\n\nconst DENSITIES = [\n    { label: 'Sparse', n: 50, tag: 'sparse' },\n    { label: 'Dense', n: 500, tag: 'dense' },\n    { label: 'Very Dense', n: 3000, tag: 'very-dense' },\n] as const;\n\nconst DISTRIBUTIONS = [\n    { label: 'Uniform', gen: genUniform, tag: 'uniform' },\n    { label: 'Single Cluster', gen: genSingleCluster, tag: 'cluster-1' },\n    { label: 'Two Clusters', gen: genTwoClusters, tag: 'cluster-2' },\n] as const;\n\nfunction buildTestCase(\n    densityLabel: string,\n    distLabel: string,\n    n: number,\n    data: { x: number; y: number }[],\n    tags: string[],\n): TestCase {\n    const rows = data.map(p => ({ X: p.x, Y: p.y }));\n    return {\n        title: `${densityLabel} × ${distLabel} (N=${n})`,\n        description: `${n} scatter points, ${distLabel.toLowerCase()} distribution. Tests gas pressure model §2.`,\n        tags: ['gas-pressure', 'scatter', ...tags],\n        chartType: 'Scatter Plot',\n        data: rows,\n        fields: [makeField('X'), makeField('Y')],\n        metadata: {\n            X: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            Y: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('X'),\n            y: makeEncodingItem('Y'),\n        },\n    };\n}\n\n// ---------------------------------------------------------------------------\n// Asymmetric density generators (X and Y have different spreads)\n// ---------------------------------------------------------------------------\n\n/** Wide X range [0,100], narrow Y range [45,55] — horizontal band */\nfunction genWideXNarrowY(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        x: Math.round(rand() * 1000) / 10,\n        y: Math.round((45 + rand() * 10) * 10) / 10,\n    }));\n}\n\n/** Narrow X range [45,55], wide Y range [0,100] — vertical band */\nfunction genNarrowXWideY(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        x: Math.round((45 + rand() * 10) * 10) / 10,\n        y: Math.round(rand() * 1000) / 10,\n    }));\n}\n\n/** Wide X [0,100], Y concentrated in two narrow bands [10-15] and [85-90] */\nfunction genWideXBandedY(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => {\n        const band = rand() < 0.5 ? 10 : 85;\n        return {\n            x: Math.round(rand() * 1000) / 10,\n            y: Math.round((band + rand() * 5) * 10) / 10,\n        };\n    });\n}\n\n/** Diagonal stripe: Y ≈ X ± 3 — points cluster along the diagonal */\nfunction genDiagonalStripe(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => {\n        const base = rand() * 100;\n        const u1 = rand() || 0.001;\n        const u2 = rand();\n        const noise = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2) * 3;\n        return {\n            x: Math.round(base * 10) / 10,\n            y: Math.round((base + noise) * 10) / 10,\n        };\n    });\n}\n\n/** X uniform [0,100], Y exponential (most points near 0, tail to ~50) */\nfunction genUniformXExponentialY(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        x: Math.round(rand() * 1000) / 10,\n        y: Math.round(-Math.log(rand() || 0.001) * 10 * 10) / 10,\n    }));\n}\n\nconst ASYMMETRIC_CASES = [\n    { label: 'Wide X, Narrow Y', gen: genWideXNarrowY, tag: 'wide-x-narrow-y',\n      desc: 'X spans full range, Y compressed to 10% — horizontal band' },\n    { label: 'Narrow X, Wide Y', gen: genNarrowXWideY, tag: 'narrow-x-wide-y',\n      desc: 'X compressed to 10%, Y spans full range — vertical band' },\n    { label: 'Wide X, Banded Y', gen: genWideXBandedY, tag: 'wide-x-banded-y',\n      desc: 'X uniform, Y in two narrow bands — two horizontal stripes' },\n    { label: 'Diagonal Stripe', gen: genDiagonalStripe, tag: 'diagonal',\n      desc: 'Points along Y≈X diagonal with σ≈3 noise — linear cluster' },\n    { label: 'Uniform X, Exp Y', gen: genUniformXExponentialY, tag: 'uniform-x-exp-y',\n      desc: 'X uniform, Y exponential — bottom-heavy skew' },\n] as const;\n\n// ---------------------------------------------------------------------------\n// Public generator\n// ---------------------------------------------------------------------------\n\n/**\n * Generate the 3×3 gas-pressure test matrix.\n * Row = density (sparse / dense / very dense)\n * Column = distribution (uniform / single cluster / two clusters)\n */\nexport function genGasPressureTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    let seed = 1000;\n\n    // --- Symmetric density tests (3×3 matrix) ---\n    for (const density of DENSITIES) {\n        for (const dist of DISTRIBUTIONS) {\n            const points = dist.gen(density.n, seed++);\n            tests.push(buildTestCase(\n                density.label,\n                dist.label,\n                density.n,\n                points,\n                [density.tag, dist.tag],\n            ));\n        }\n    }\n\n    // --- Asymmetric X/Y density tests ---\n    // Uses dense (500) and very dense (3000) to show the effect clearly\n    for (const asym of ASYMMETRIC_CASES) {\n        for (const density of [DENSITIES[1], DENSITIES[2]]) {\n            const points = asym.gen(density.n, seed++);\n            tests.push({\n                ...buildTestCase(\n                    density.label,\n                    asym.label,\n                    density.n,\n                    points,\n                    [density.tag, asym.tag, 'asymmetric'],\n                ),\n                description: `${density.n} points, ${asym.desc}.`,\n            });\n        }\n    }\n\n    // --- Per-axis stretch tests: stretch X but not Y ---\n    // Case 1: Many evenly-spaced X values, few distinct Y values.\n    // 1000 points on 200 unique X positions × 5 Y rows → X is dense, Y is sparse.\n    {\n        const r = seededRandom(seed++);\n        const yLevels = [10, 30, 50, 70, 90];\n        const n = 1000;\n        const points = Array.from({ length: n }, () => ({\n            x: Math.round(r() * 1000) / 10,        // 0–100, ~200 unique\n            y: yLevels[Math.floor(r() * yLevels.length)],  // only 5 values\n        }));\n        tests.push({\n            ...buildTestCase('Dense', 'Stretch X Only (rows)', n, points,\n                ['dense', 'stretch-x', 'per-axis']),\n            description: '1000 points on ~200 unique X positions but only 5 Y rows. X should stretch, Y should not.',\n        });\n    }\n\n    // Case 2: Dense horizontal cluster at center, full Y range.\n    // 800 points with X clustered in [40,60] (σ≈3) but Y uniform [0,100].\n    // X is over-packed in a narrow horizontal band → stretch X.\n    // Y is well-spread → no Y stretch needed.\n    {\n        const r = seededRandom(seed++);\n        const n = 800;\n        const points = Array.from({ length: n }, () => {\n            const u1 = r() || 0.001;\n            const u2 = r();\n            const zx = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);\n            return {\n                x: Math.round((50 + zx * 3) * 10) / 10,   // tight around 50, σ≈3\n                y: Math.round(r() * 1000) / 10,             // uniform 0–100\n            };\n        });\n        tests.push({\n            ...buildTestCase('Dense', 'Stretch X Only (cluster)', n, points,\n                ['dense', 'stretch-x', 'per-axis', 'cluster-x']),\n            description: '800 points with X clustered at 50±3 but Y uniform [0,100]. X is over-packed, Y is fine.',\n        });\n    }\n\n    // --- maintainContinuousAxisRatio tests ---\n    // Same data as \"Stretch X Only (rows)\" but with the ratio lock on:\n    // both axes should stretch together using the larger factor.\n    {\n        const r = seededRandom(seed++);\n        const yLevels = [10, 30, 50, 70, 90];\n        const n = 1000;\n        const points = Array.from({ length: n }, () => ({\n            x: Math.round(r() * 1000) / 10,\n            y: yLevels[Math.floor(r() * yLevels.length)],\n        }));\n        tests.push({\n            ...buildTestCase('Dense', 'Ratio Lock ON (rows)', n, points,\n                ['dense', 'ratio-lock', 'per-axis']),\n            description: '1000 points, 200 X positions × 5 Y rows, maintainContinuousAxisRatio=true. Both axes stretch equally.',\n            assembleOptions: { maintainContinuousAxisRatio: true },\n        });\n    }\n    // Same data without ratio lock for comparison\n    {\n        const r = seededRandom(seed++);\n        const yLevels = [10, 30, 50, 70, 90];\n        const n = 1000;\n        const points = Array.from({ length: n }, () => ({\n            x: Math.round(r() * 1000) / 10,\n            y: yLevels[Math.floor(r() * yLevels.length)],\n        }));\n        tests.push({\n            ...buildTestCase('Dense', 'Ratio Lock OFF (rows)', n, points,\n                ['dense', 'no-ratio-lock', 'per-axis']),\n            description: '1000 points, 200 X positions × 5 Y rows, default independent stretch. X stretches, Y does not.',\n        });\n    }\n\n    return tests;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/generators.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Synthetic data generators for chart gallery test cases.\n * Pure utility functions — no React/UI dependencies.\n */\n\n// ============================================================================\n// Synthetic Data Generators\n// ============================================================================\n\n/** Seeded random for reproducibility */\nexport function seededRandom(seed: number) {\n    return () => {\n        seed = (seed * 16807 + 0) % 2147483647;\n        return (seed - 1) / 2147483646;\n    };\n}\n\n/** Generate an array of sequential dates */\nexport function genDates(n: number, startYear = 2018): string[] {\n    const dates: string[] = [];\n    const start = new Date(startYear, 0, 1);\n    for (let i = 0; i < n; i++) {\n        const d = new Date(start);\n        d.setDate(start.getDate() + Math.floor(i * (365 * 3 / n)));\n        dates.push(d.toISOString().slice(0, 10));\n    }\n    return dates;\n}\n\n/** Generate month names */\nexport function genMonths(n: number): string[] {\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n    return months.slice(0, Math.min(n, 12));\n}\n\n/** Generate year values */\nexport function genYears(n: number, start = 2000): number[] {\n    return Array.from({ length: n }, (_, i) => start + i);\n}\n\n/** Generate natural-looking date strings like \"Jun 12 1998\" */\nexport function genNaturalDates(n: number, startYear = 1998): string[] {\n    const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n    const dates: string[] = [];\n    const start = new Date(startYear, 0, 1);\n    for (let i = 0; i < n; i++) {\n        const d = new Date(start);\n        d.setDate(start.getDate() + Math.floor(i * (365 * 5 / n)));\n        dates.push(`${monthNames[d.getMonth()]} ${String(d.getDate()).padStart(2, '0')} ${d.getFullYear()}`);\n    }\n    return dates;\n}\n\n/** Generate ordinal labels with inherent sequence: \"Stage 1\", \"Stage 2\", etc. */\nexport function genOrdinalLabels(prefix: string, n: number): string[] {\n    return Array.from({ length: n }, (_, i) => `${prefix} ${i + 1}`);\n}\n\n/** Ordinal label prefixes — rotated for variety across channels */\nexport const ORDINAL_PREFIXES = ['Stage', 'Step', 'Phase', 'Level', 'Round'];\n\n/** Generate category names by semantic type */\nexport function genCategories(semanticType: string, n: number): string[] {\n    const pools: Record<string, string[]> = {\n        Country: ['USA', 'China', 'Japan', 'Germany', 'UK', 'France', 'India', 'Brazil', 'Canada', 'Australia',\n            'South Korea', 'Mexico', 'Italy', 'Spain', 'Russia', 'Netherlands', 'Sweden', 'Norway', 'Denmark', 'Finland',\n            'Switzerland', 'Belgium', 'Austria', 'Poland', 'Portugal', 'Turkey', 'Argentina', 'Chile', 'Colombia', 'Peru'],\n        Company: ['Apple', 'Google', 'Microsoft', 'Amazon', 'Meta', 'Tesla', 'Netflix', 'Adobe', 'Intel', 'Nvidia',\n            'Samsung', 'IBM', 'Oracle', 'SAP', 'Salesforce', 'Uber', 'Lyft', 'Spotify', 'Snap', 'Twitter',\n            'Palantir', 'Shopify', 'Square', 'Zoom', 'Slack', 'Twilio', 'Datadog', 'Snowflake', 'Confluent', 'MongoDB'],\n        Product: ['Laptop', 'Phone', 'Tablet', 'Desktop', 'Monitor', 'Keyboard', 'Mouse', 'Headphones', 'Speaker', 'Camera',\n            'TV', 'Router', 'Printer', 'Scanner', 'SSD', 'HDD', 'RAM', 'GPU', 'CPU', 'Motherboard'],\n        Category: ['Electronics', 'Clothing', 'Food', 'Books', 'Sports', 'Home', 'Garden', 'Auto', 'Health', 'Beauty',\n            'Toys', 'Music', 'Movies', 'Software', 'Games', 'Office', 'Pet', 'Baby', 'Tools', 'Crafts'],\n        Department: ['Engineering', 'Sales', 'Marketing', 'HR', 'Finance', 'Legal', 'Operations', 'Support', 'Design', 'Research',\n            'QA', 'DevOps', 'Security', 'Analytics', 'Product'],\n        Status: ['Active', 'Inactive', 'Pending', 'Completed', 'Failed'],\n        Name: ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve', 'Frank', 'Grace', 'Hank', 'Ivy', 'Jack',\n            'Kate', 'Leo', 'Mona', 'Nick', 'Olivia', 'Pat', 'Quinn', 'Ray', 'Sara', 'Tom',\n            'Uma', 'Vic', 'Wendy', 'Xander', 'Yara', 'Zoe', 'Aaron', 'Beth', 'Carl', 'Dana'],\n        Director: ['Steven Spielberg', 'James Cameron', 'Chris Columbus', 'George Lucas', 'Peter Jackson',\n            'Robert Zemeckis', 'Michael Bay', 'Roland Emmerich', 'Gore Verbinski', 'Tim Burton',\n            'Andrew Adamson', 'Sam Raimi', 'Ron Howard', 'Christopher Nolan', 'M. Night Shyamalan',\n            'David Yates', 'John Lasseter', 'Carlos Saldanha', 'Andy Wachowski', 'Ridley Scott'],\n        MovieTitle: ['The Dark Knight', 'Spider-Man', 'Avatar', 'Titanic', 'Jurassic Park', 'Star Wars',\n            'The Matrix', 'Inception', 'Interstellar', 'Gladiator', 'The Avengers', 'Iron Man',\n            'Frozen', 'Toy Story', 'Finding Nemo', 'Shrek', 'Cars', 'Up', 'WALL-E', 'Coco',\n            'Moana', 'Ratatouille', 'Inside Out', 'Big Hero 6', 'Brave', 'Tangled', 'Zootopia',\n            'The Lion King', 'Aladdin', 'Beauty and the Beast'],\n    };\n    const pool = pools[semanticType] || pools.Category;\n    return pool.slice(0, Math.min(n, pool.length));\n}\n\n/** Generate n random unique names (first + last) for very large discrete tests */\nexport function genRandomNames(n: number, seed = 777): string[] {\n    const firsts = ['James', 'Mary', 'John', 'Patricia', 'Robert', 'Jennifer', 'Michael', 'Linda', 'William', 'Elizabeth',\n        'David', 'Barbara', 'Richard', 'Susan', 'Joseph', 'Jessica', 'Thomas', 'Sarah', 'Charles', 'Karen',\n        'Christopher', 'Lisa', 'Daniel', 'Nancy', 'Matthew', 'Betty', 'Anthony', 'Margaret', 'Mark', 'Sandra',\n        'Steven', 'Ashley', 'Paul', 'Dorothy', 'Andrew', 'Kimberly', 'Joshua', 'Emily', 'Kenneth', 'Donna'];\n    const lasts = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Rodriguez', 'Martinez',\n        'Hernandez', 'Lopez', 'Gonzalez', 'Wilson', 'Anderson', 'Thomas', 'Taylor', 'Moore', 'Jackson', 'Martin',\n        'Lee', 'Perez', 'Thompson', 'White', 'Harris', 'Sanchez', 'Clark', 'Ramirez', 'Lewis', 'Robinson',\n        'Walker', 'Young', 'Allen', 'King', 'Wright', 'Scott', 'Torres', 'Nguyen', 'Hill', 'Flores'];\n    const rand = seededRandom(seed);\n    const names = new Set<string>();\n    while (names.size < n) {\n        const f = firsts[Math.floor(rand() * firsts.length)];\n        const l = lasts[Math.floor(rand() * lasts.length)];\n        names.add(`${f} ${l}`);\n    }\n    return [...names];\n}\n\n/** Generate random numeric measure values */\nexport function genMeasure(n: number, min = 10, max = 1000, integers = false): number[] {\n    return Array.from({ length: n }, () => {\n        const v = min + Math.random() * (max - min);\n        return integers ? Math.round(v) : Math.round(v * 100) / 100;\n    });\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/gofish-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * GoFish backend comparison tests.\n *\n * Runs the same test inputs through ALL FOUR backends:\n *   assembleVegaLite, assembleECharts, assembleChartjs, assembleGoFish\n *\n * Covers: Scatter Plot, Line Chart, Bar Chart, Stacked Bar Chart,\n *         Grouped Bar Chart, Area Chart, Pie Chart\n */\n\nimport { Type } from '../../../data/types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genCategories } from './generators';\n\n// ---------------------------------------------------------------------------\n// Test data generators\n// ---------------------------------------------------------------------------\n\nfunction genScatterData(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        Weight: Math.round((40 + rand() * 60) * 10) / 10,\n        Height: Math.round((150 + rand() * 50) * 10) / 10,\n    }));\n}\n\nfunction genScatterColorData(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    const categories = ['Alpha', 'Beta', 'Gamma'];\n    return Array.from({ length: n }, (_, i) => ({\n        X: Math.round(rand() * 100 * 10) / 10,\n        Y: Math.round(rand() * 100 * 10) / 10,\n        Group: categories[i % categories.length],\n    }));\n}\n\nfunction genBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const products = ['Apples', 'Bananas', 'Cherries', 'Dates', 'Elderberries'];\n    return products.map(p => ({\n        Product: p,\n        Sales: Math.round(100 + rand() * 900),\n    }));\n}\n\nfunction genLineData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'];\n    return months.map(m => ({\n        Month: m,\n        Revenue: Math.round(1000 + rand() * 5000),\n    }));\n}\n\nfunction genMultiSeriesLineData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'];\n    const series = ['ProductA', 'ProductB', 'ProductC'];\n    const data: any[] = [];\n    for (const m of months) {\n        for (const s of series) {\n            data.push({\n                Month: m,\n                Sales: Math.round(500 + rand() * 2000),\n                Product: s,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genStackedBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n    const regions = ['North', 'South', 'East', 'West'];\n    const data: any[] = [];\n    for (const q of quarters) {\n        for (const r of regions) {\n            data.push({\n                Quarter: q,\n                Revenue: Math.round(200 + rand() * 800),\n                Region: r,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genGroupedBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const years = ['2022', '2023', '2024'];\n    const departments = ['Sales', 'Engineering', 'Marketing'];\n    const data: any[] = [];\n    for (const y of years) {\n        for (const d of departments) {\n            data.push({\n                Year: y,\n                Budget: Math.round(500 + rand() * 2000),\n                Department: d,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genAreaData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'];\n    return months.map(m => ({\n        Month: m,\n        Value: Math.round(100 + rand() * 500),\n    }));\n}\n\nfunction genStackedAreaData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'];\n    const categories = ['Desktop', 'Mobile', 'Tablet'];\n    const data: any[] = [];\n    for (const m of months) {\n        for (const c of categories) {\n            data.push({\n                Month: m,\n                Users: Math.round(200 + rand() * 800),\n                Platform: c,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genPieData(seed: number) {\n    const rand = seededRandom(seed);\n    const categories = ['Electronics', 'Clothing', 'Food', 'Books', 'Toys'];\n    return categories.map(c => ({\n        Category: c,\n        Revenue: Math.round(100 + rand() * 900),\n    }));\n}\n\nfunction genScatterPieData(seed: number) {\n    const rand = seededRandom(seed);\n    const locations = [\n        { City: 'NYC',     Lon: -74.0, Lat: 40.7  },\n        { City: 'LA',      Lon: -118.2, Lat: 34.1 },\n        { City: 'Chicago', Lon: -87.6, Lat: 41.9  },\n        { City: 'Houston', Lon: -95.4, Lat: 29.8  },\n        { City: 'Phoenix', Lon: -112.1, Lat: 33.4 },\n    ];\n    const species = ['Dogs', 'Cats', 'Birds'];\n    const data: any[] = [];\n    for (const loc of locations) {\n        for (const sp of species) {\n            data.push({\n                Longitude: loc.Lon,\n                Latitude: loc.Lat,\n                Species: sp,\n                Count: Math.round(50 + rand() * 500),\n            });\n        }\n    }\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Test case builders\n// ---------------------------------------------------------------------------\n\nexport function genGoFishScatterTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic scatter\n    {\n        const data = genScatterData(50, 42);\n        tests.push({\n            title: 'GF: Scatter — Basic Q×Q',\n            description: '50 points, two quantitative axes.',\n            tags: ['gofish', 'scatter', 'quantitative'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('Weight'), makeField('Height')],\n            metadata: {\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Weight'), y: makeEncodingItem('Height') },\n        });\n    }\n\n    // 2. Scatter with color grouping\n    {\n        const data = genScatterColorData(60, 77);\n        tests.push({\n            title: 'GF: Scatter — Color Groups',\n            description: '60 points, 3 groups with color encoding.',\n            tags: ['gofish', 'scatter', 'color', 'multi-series'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('X'), makeField('Y'), makeField('Group')],\n            metadata: {\n                X: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Y: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Group: { type: Type.String, semanticType: 'Category', levels: ['Alpha', 'Beta', 'Gamma'] },\n            },\n            encodingMap: { x: makeEncodingItem('X'), y: makeEncodingItem('Y'), color: makeEncodingItem('Group') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genGoFishLineTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Single series line\n    {\n        const data = genLineData(200);\n        tests.push({\n            title: 'GF: Line — Single Series',\n            description: 'Ordinal x-axis, single line.',\n            tags: ['gofish', 'line', 'single-series'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Revenue')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Revenue') },\n        });\n    }\n\n    // 2. Multi-series line\n    {\n        const data = genMultiSeriesLineData(300);\n        tests.push({\n            title: 'GF: Line — Multi-Series (3 products)',\n            description: 'Color channel → multiple lines via layer + select.',\n            tags: ['gofish', 'line', 'multi-series', 'color'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Sales'), makeField('Product')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'] },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Product: { type: Type.String, semanticType: 'Category', levels: ['ProductA', 'ProductB', 'ProductC'] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Product') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genGoFishBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Simple bar\n    {\n        const data = genBarData(100);\n        tests.push({\n            title: 'GF: Bar — Basic',\n            description: '5 products, single color.',\n            tags: ['gofish', 'bar', 'simple'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Product'), makeField('Sales')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Category', levels: ['Apples', 'Bananas', 'Cherries', 'Dates', 'Elderberries'] },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Product'), y: makeEncodingItem('Sales') },\n        });\n    }\n\n    // 2. Many categories\n    {\n        const rand = seededRandom(150);\n        const cities = genCategories('City', 12);\n        const data = cities.map(c => ({\n            City: c,\n            Population: Math.round(10000 + rand() * 900000),\n        }));\n        tests.push({\n            title: 'GF: Bar — 12 categories',\n            description: 'Many categories — tests GoFish layout.',\n            tags: ['gofish', 'bar', 'many-categories'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('City'), makeField('Population')],\n            metadata: {\n                City: { type: Type.String, semanticType: 'Category', levels: cities },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('City'), y: makeEncodingItem('Population') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genGoFishStackedBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genStackedBarData(500);\n        tests.push({\n            title: 'GF: Stacked Bar — Regions × Quarters',\n            description: 'Stacked bar chart with 4 quarters and 4 regions.',\n            tags: ['gofish', 'stacked-bar', 'color'],\n            chartType: 'Stacked Bar Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Revenue'), makeField('Region')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Category', levels: ['Q1', 'Q2', 'Q3', 'Q4'] },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: ['North', 'South', 'East', 'West'] },\n            },\n            encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Revenue'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genGoFishGroupedBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genGroupedBarData(600);\n        tests.push({\n            title: 'GF: Grouped Bar — 3 Years × 3 Departments',\n            description: 'Grouped (side-by-side) bar chart.',\n            tags: ['gofish', 'grouped-bar', 'group'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Year'), makeField('Budget'), makeField('Department')],\n            metadata: {\n                Year: { type: Type.String, semanticType: 'Year', levels: ['2022', '2023', '2024'] },\n                Budget: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Department: { type: Type.String, semanticType: 'Category', levels: ['Sales', 'Engineering', 'Marketing'] },\n            },\n            encodingMap: { x: makeEncodingItem('Year'), y: makeEncodingItem('Budget'), group: makeEncodingItem('Department') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genGoFishAreaTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genAreaData(700);\n        tests.push({\n            title: 'GF: Area — Monthly Values',\n            description: 'Single area chart over months.',\n            tags: ['gofish', 'area', 'single-series'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Month'), makeField('Value')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genGoFishStackedAreaTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genStackedAreaData(750);\n        tests.push({\n            title: 'GF: Stacked Area — Platforms × Months',\n            description: 'Stacked area chart with 3 platforms over 8 months (TODO: multi-series).',\n            tags: ['gofish', 'stacked-area', 'color', 'multi-series'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Month'), makeField('Users'), makeField('Platform')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'] },\n                Users: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Platform: { type: Type.String, semanticType: 'Category', levels: ['Desktop', 'Mobile', 'Tablet'] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Users'), color: makeEncodingItem('Platform') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genGoFishPieTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genPieData(800);\n        tests.push({\n            title: 'GF: Pie — Revenue by Category',\n            description: 'Pie chart with 5 categories.',\n            tags: ['gofish', 'pie', 'part-to-whole'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Category'), makeField('Revenue')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: ['Electronics', 'Clothing', 'Food', 'Books', 'Toys'] },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Category'), size: makeEncodingItem('Revenue') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genGoFishScatterPieTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genScatterPieData(850);\n        tests.push({\n            title: 'GF: Scatter Pie — Species by City',\n            description: '5 cities × 3 species, pie at each (x, y) location.',\n            tags: ['gofish', 'scatterpie', 'color', 'angle'],\n            chartType: 'Scatter Pie Chart',\n            data,\n            fields: [makeField('Longitude'), makeField('Latitude'), makeField('Species'), makeField('Count')],\n            metadata: {\n                Longitude: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Latitude: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Species: { type: Type.String, semanticType: 'Category', levels: ['Dogs', 'Cats', 'Birds'] },\n                Count: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Longitude'),\n                y: makeEncodingItem('Latitude'),\n                color: makeEncodingItem('Species'),\n                angle: makeEncodingItem('Count'),\n            },\n        });\n    }\n\n    return tests;\n}\n\nexport function genGoFishStressTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // Dense scatter\n    {\n        const data = genScatterData(200, 999);\n        tests.push({\n            title: 'GF: Stress — Dense Scatter (200 pts)',\n            description: 'Dense scatter plot to test GoFish rendering.',\n            tags: ['gofish', 'scatter', 'dense', 'stress'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('Weight'), makeField('Height')],\n            metadata: {\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Weight'), y: makeEncodingItem('Height') },\n        });\n    }\n\n    // Large bar chart\n    {\n        const rand = seededRandom(1000);\n        const items = genCategories('Item', 25);\n        const data = items.map(item => ({\n            Item: item,\n            Sales: Math.round(50 + rand() * 500),\n        }));\n        tests.push({\n            title: 'GF: Stress — 25-category Bar',\n            description: 'Tests GoFish auto-spacing with many categories.',\n            tags: ['gofish', 'bar', 'many-categories', 'stress'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Item'), makeField('Sales')],\n            metadata: {\n                Item: { type: Type.String, semanticType: 'Category', levels: items },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Item'), y: makeEncodingItem('Sales') },\n        });\n    }\n\n    return tests;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/index.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Barrel export for chart test-data generators.\n *\n * Re-exports every generator plus the shared types,\n * and exposes the master TEST_GENERATORS map and GALLERY_SECTIONS config.\n */\n\n// Shared types & helpers\nexport type { TestCase, DateFormat, GallerySection } from './types';\nexport { makeField, makeEncodingItem, inferType, buildMetadata } from './types';\n\n// Utilities\nexport { seededRandom, genDates, genMonths, genYears, genNaturalDates, genCategories, genRandomNames, genMeasure } from './generators';\n\n// Chart-type generators\nexport { genScatterTests, genRegressionTests } from './scatter-tests';\nexport { genBarTests, genStackedBarTests, genGroupedBarTests } from './bar-tests';\nexport { genHistogramTests, genBoxplotTests, genDensityTests, genStripPlotTests } from './distribution-tests';\nexport { genLineTests } from './line-tests';\nexport { genDottedLineTests, genBumpChartTests } from './line-area-tests';\nexport { genAreaTests, genStreamgraphTests } from './area-tests';\nexport {\n    genHeatmapTests, genPieTests, genRangedDotPlotTests, genLollipopTests,\n    genCustomTests, genWaterfallTests, genCandlestickTests, genRadarTests, genPyramidTests,\n    genRoseTests,\n} from './specialized-tests';\nexport { FACET_SIZES, DISCRETE_SIZES, genFacetColumnTests, genFacetRowTests, genFacetColRowTests, genFacetSmallTests, genFacetWrapTests, genFacetClipTests, genFacetOverflowedColTests, genFacetOverflowedColRowTests, genFacetOverflowedRowTests } from './facet-tests';\nexport { genOverflowTests, genElasticityTests } from './stress-tests';\nexport { genGasPressureTests } from './gas-pressure-tests';\nexport { genLineAreaStretchTests } from './line-area-stretch-tests';\nexport { genEChartsScatterTests, genEChartsLineTests, genEChartsBarTests, genEChartsStackedBarTests, genEChartsGroupedBarTests, genEChartsStressTests, genEChartsAreaTests, genEChartsPieTests, genEChartsHeatmapTests, genEChartsHistogramTests, genEChartsBoxplotTests, genEChartsRadarTests, genEChartsCandlestickTests, genEChartsStreamgraphTests, genEChartsFacetSmallTests, genEChartsFacetWrapTests, genEChartsFacetClipTests, genEChartsRoseTests, genEChartsGaugeTests, genEChartsFunnelTests, genEChartsTreemapTests, genEChartsSunburstTests, genEChartsSankeyTests, genEChartsUniqueStressTests } from './echarts-tests';\nexport { genChartJsScatterTests, genChartJsLineTests, genChartJsBarTests, genChartJsStackedBarTests, genChartJsGroupedBarTests, genChartJsAreaTests, genChartJsPieTests, genChartJsHistogramTests, genChartJsRadarTests, genChartJsStressTests, genChartJsRoseTests } from './chartjs-tests';\nexport { genGoFishScatterTests, genGoFishLineTests, genGoFishBarTests, genGoFishStackedBarTests, genGoFishGroupedBarTests, genGoFishAreaTests, genGoFishStackedAreaTests, genGoFishPieTests, genGoFishScatterPieTests, genGoFishStressTests } from './gofish-tests';\nexport { genDiscreteAxisTests } from './discrete-axis-tests';\nexport { genDateTests, genDateYearTests, genDateMonthTests, genDateYearMonthTests, genDateDecadeTests, genDateDateTimeTests, genDateHoursTests } from './date-tests';\nexport { genSemanticContextTests, genSnapToBoundTests } from './semantic-tests';\nexport { genDebugTests } from './debug-tests';\n\n// ---------------------------------------------------------------------------\n// Master map & gallery sections\n// ---------------------------------------------------------------------------\nimport { TestCase, GallerySection } from './types';\n\nimport { genScatterTests, genRegressionTests } from './scatter-tests';\nimport { genBarTests, genStackedBarTests, genGroupedBarTests } from './bar-tests';\nimport { genHistogramTests, genBoxplotTests, genDensityTests, genStripPlotTests } from './distribution-tests';\nimport { genLineTests } from './line-tests';\nimport { genDottedLineTests, genBumpChartTests } from './line-area-tests';\nimport { genAreaTests, genStreamgraphTests } from './area-tests';\nimport {\n    genHeatmapTests, genPieTests, genRangedDotPlotTests, genLollipopTests,\n    genCustomTests, genWaterfallTests, genCandlestickTests, genRadarTests, genPyramidTests,\n    genRoseTests,\n} from './specialized-tests';\nimport { genFacetColumnTests, genFacetRowTests, genFacetColRowTests, genFacetSmallTests, genFacetWrapTests, genFacetClipTests, genFacetOverflowedColTests, genFacetOverflowedColRowTests, genFacetOverflowedRowTests } from './facet-tests';\nimport { genOverflowTests, genElasticityTests } from './stress-tests';\nimport { genGasPressureTests } from './gas-pressure-tests';\nimport { genLineAreaStretchTests } from './line-area-stretch-tests';\nimport { genDiscreteAxisTests } from './discrete-axis-tests';\nimport { genDateYearTests, genDateMonthTests, genDateYearMonthTests, genDateDecadeTests, genDateDateTimeTests, genDateHoursTests } from './date-tests';\nimport { genSemanticContextTests, genSnapToBoundTests } from './semantic-tests';\nimport { genDebugTests } from './debug-tests';\nimport { genEChartsScatterTests, genEChartsLineTests, genEChartsBarTests, genEChartsStackedBarTests, genEChartsGroupedBarTests, genEChartsStressTests, genEChartsAreaTests, genEChartsPieTests, genEChartsHeatmapTests, genEChartsHistogramTests, genEChartsBoxplotTests, genEChartsRadarTests, genEChartsCandlestickTests, genEChartsStreamgraphTests, genEChartsFacetSmallTests, genEChartsFacetWrapTests, genEChartsFacetClipTests, genEChartsRoseTests, genEChartsGaugeTests, genEChartsFunnelTests, genEChartsTreemapTests, genEChartsSunburstTests, genEChartsSankeyTests, genEChartsUniqueStressTests } from './echarts-tests';\nimport { genChartJsScatterTests, genChartJsLineTests, genChartJsBarTests, genChartJsStackedBarTests, genChartJsGroupedBarTests, genChartJsAreaTests, genChartJsPieTests, genChartJsHistogramTests, genChartJsRadarTests, genChartJsStressTests, genChartJsRoseTests } from './chartjs-tests';\nimport { genGoFishScatterTests, genGoFishLineTests, genGoFishBarTests, genGoFishStackedBarTests, genGoFishGroupedBarTests, genGoFishAreaTests, genGoFishStackedAreaTests, genGoFishPieTests, genGoFishScatterPieTests, genGoFishStressTests } from './gofish-tests';\n\n/** All test generators mapped by chart group */\nexport const TEST_GENERATORS: Record<string, () => TestCase[]> = {\n    'Scatter Plot': genScatterTests,\n    'Regression': genRegressionTests,\n    'Bar Chart': genBarTests,\n    'Stacked Bar Chart': genStackedBarTests,\n    'Grouped Bar Chart': genGroupedBarTests,\n    'Histogram': genHistogramTests,\n    'Heatmap': genHeatmapTests,\n    'Line Chart': genLineTests,\n    'Dotted Line Chart': genDottedLineTests,\n    'Bump Chart': genBumpChartTests,\n    'Boxplot': genBoxplotTests,\n    'Pie Chart': genPieTests,\n    'Ranged Dot Plot': genRangedDotPlotTests,\n    'Area Chart': genAreaTests,\n    'Streamgraph': genStreamgraphTests,\n    'Lollipop Chart': genLollipopTests,\n    'Density Plot': genDensityTests,\n    'Candlestick Chart': genCandlestickTests,\n    'Waterfall Chart': genWaterfallTests,\n    'Strip Plot': genStripPlotTests,\n    'Radar Chart': genRadarTests,\n    'Pyramid Chart': genPyramidTests,\n    'Rose Chart': genRoseTests,\n    'Custom Charts': genCustomTests,\n    'Facet: Columns': genFacetColumnTests,\n    'Facet: Rows': genFacetRowTests,\n    'Facet: Cols+Rows': genFacetColRowTests,\n    'Facet: Small': genFacetSmallTests,\n    'Facet: Wrap': genFacetWrapTests,\n    'Facet: Clip': genFacetClipTests,\n    'Facet: Overflowed Col': genFacetOverflowedColTests,\n    'Facet: Overflowed Col+Row': genFacetOverflowedColRowTests,\n    'Facet: Overflowed Row': genFacetOverflowedRowTests,\n    'Overflow': genOverflowTests,\n    'Elasticity & Stretch': genElasticityTests,\n    'Dates: Year': genDateYearTests,\n    'Dates: Month': genDateMonthTests,\n    'Dates: Year-Month': genDateYearMonthTests,\n    'Dates: Decade': genDateDecadeTests,\n    'Dates: Date/DateTime': genDateDateTimeTests,\n    'Dates: Hours': genDateHoursTests,\n    'Discrete Axis Sizing': genDiscreteAxisTests,\n    'Gas Pressure (§2)': genGasPressureTests,\n    'Line/Area Stretch': genLineAreaStretchTests,\n    'Semantic Context': genSemanticContextTests,\n    'Snap-to-Bound': genSnapToBoundTests,\n    'Debug Cases': genDebugTests,\n    'ECharts: Scatter': genEChartsScatterTests,\n    'ECharts: Line': genEChartsLineTests,\n    'ECharts: Bar': genEChartsBarTests,\n    'ECharts: Stacked Bar': genEChartsStackedBarTests,\n    'ECharts: Grouped Bar': genEChartsGroupedBarTests,\n    'ECharts: Area': genEChartsAreaTests,\n    'ECharts: Pie': genEChartsPieTests,\n    'ECharts: Heatmap': genEChartsHeatmapTests,\n    'ECharts: Histogram': genEChartsHistogramTests,\n    'ECharts: Boxplot': genEChartsBoxplotTests,\n    'ECharts: Radar': genEChartsRadarTests,\n    'ECharts: Candlestick': genEChartsCandlestickTests,\n    'ECharts: Streamgraph': genEChartsStreamgraphTests,\n    'ECharts: Facet Small': genEChartsFacetSmallTests,\n    'ECharts: Facet Wrap': genEChartsFacetWrapTests,\n    'ECharts: Facet Clip': genEChartsFacetClipTests,\n    'ECharts: Rose': genEChartsRoseTests,\n    'ECharts: Stress Tests': genEChartsStressTests,\n    'ECharts: Gauge': genEChartsGaugeTests,\n    'ECharts: Funnel': genEChartsFunnelTests,\n    'ECharts: Treemap': genEChartsTreemapTests,\n    'ECharts: Sunburst': genEChartsSunburstTests,\n    'ECharts: Sankey': genEChartsSankeyTests,\n    'ECharts: Unique Stress': genEChartsUniqueStressTests,\n    'Chart.js: Scatter': genChartJsScatterTests,\n    'Chart.js: Line': genChartJsLineTests,\n    'Chart.js: Bar': genChartJsBarTests,\n    'Chart.js: Stacked Bar': genChartJsStackedBarTests,\n    'Chart.js: Grouped Bar': genChartJsGroupedBarTests,\n    'Chart.js: Area': genChartJsAreaTests,\n    'Chart.js: Pie': genChartJsPieTests,\n    'Chart.js: Histogram': genChartJsHistogramTests,\n    'Chart.js: Radar': genChartJsRadarTests,\n    'Chart.js: Rose': genChartJsRoseTests,\n    'Chart.js: Stress Tests': genChartJsStressTests,\n    'GoFish Basic': () => [\n        ...genGoFishScatterTests(),\n        ...genGoFishLineTests(),\n        ...genGoFishBarTests(),\n        ...genGoFishStackedBarTests(),\n        ...genGoFishGroupedBarTests(),\n        ...genGoFishAreaTests(),\n        ...genGoFishStackedAreaTests(),\n        ...genGoFishPieTests(),\n        ...genGoFishScatterPieTests(),\n        ...genGoFishStressTests(),\n    ],\n};\n\n/** Gallery organised into three sections */\nexport const GALLERY_SECTIONS: GallerySection[] = [\n    {\n        label: 'Semantic Context',\n        description: 'Demonstrates how semantic type annotations improve chart output: formatting, domain constraints, axis reversal, scale type, and interpolation',\n        entries: ['Semantic Context', 'Snap-to-Bound'],\n    },\n    {\n        label: 'Debug Cases',\n        description: 'Regression tests from evaluation failures: log+bin+zeros, temporal+bin, single-point line',\n        entries: ['Debug Cases'],\n    },\n    {\n        label: 'VegaLite',\n        description: 'Demos for every supported chart type',\n        entries: [\n            'Scatter Plot', 'Regression', 'Bar Chart', 'Stacked Bar Chart',\n            'Grouped Bar Chart', 'Histogram', 'Heatmap', 'Line Chart', 'Dotted Line Chart',\n            'Boxplot', 'Pie Chart', 'Ranged Dot Plot', 'Area Chart', 'Streamgraph',\n            'Lollipop Chart', 'Density Plot', 'Bump Chart', 'Candlestick Chart', 'Waterfall Chart',\n            'Strip Plot', 'Radar Chart', 'Pyramid Chart', 'Rose Chart', 'Custom Charts',\n        ],\n    },\n    {\n        label: 'Facets',\n        description: 'Faceting modes and feature combinations',\n        entries: ['Facet: Columns', 'Facet: Rows', 'Facet: Cols+Rows', 'Facet: Small', 'Facet: Wrap', 'Facet: Clip', 'Facet: Overflowed Col', 'Facet: Overflowed Col+Row', 'Facet: Overflowed Row'],\n    },\n    {\n        label: 'Stress Tests',\n        description: 'Overflow, elasticity, and temporal format stress tests',\n        entries: [\n            'Overflow', 'Elasticity & Stretch', 'Discrete Axis Sizing', 'Gas Pressure (§2)',\n            'Line/Area Stretch',\n            'Dates: Year', 'Dates: Month', 'Dates: Year-Month',\n            'Dates: Decade', 'Dates: Date/DateTime', 'Dates: Hours',\n        ],\n    },\n    {\n        label: 'ECharts Backend',\n        description: 'Same inputs through ECharts backend — compare series-based output vs VL encoding-based output',\n        entries: [\n            // VegaLite 同款（同一批 test case 用 VL+EC 双端渲染）\n            'Scatter Plot', 'Regression', 'Bar Chart', 'Stacked Bar Chart',\n            'Grouped Bar Chart', 'Histogram', 'Heatmap', 'Line Chart', 'Dotted Line Chart',\n            'Boxplot', 'Pie Chart', 'Ranged Dot Plot', 'Area Chart', 'Streamgraph',\n            'Lollipop Chart', 'Density Plot', 'Bump Chart', 'Candlestick Chart', 'Waterfall Chart',\n            'Strip Plot', 'Radar Chart', 'Pyramid Chart', 'Rose Chart',\n            // ECharts 专属（Facet、Gauge、Funnel、Treemap、Sunburst、Sankey、Stress）\n            // 'ECharts: Scatter',      // 同 VegaLite 同款 Scatter Plot\n            // 'ECharts: Line',         // 同 VegaLite 同款 Line Chart\n            // 'ECharts: Bar',          // 同 VegaLite 同款 Bar Chart\n            // 'ECharts: Stacked Bar',  // 同 VegaLite 同款 Stacked Bar Chart\n            // 'ECharts: Grouped Bar',  // 同 VegaLite 同款 Grouped Bar Chart\n            // 'ECharts: Area',         // 同 VegaLite 同款 Area Chart\n            // 'ECharts: Pie',          // 同 VegaLite 同款 Pie Chart\n            // 'ECharts: Heatmap',      // 同 VegaLite 同款 Heatmap\n            // 'ECharts: Histogram',    // 同 VegaLite 同款 Histogram\n            // 'ECharts: Boxplot',      // 同 VegaLite 同款 Boxplot\n            // 'ECharts: Radar',        // 同 VegaLite 同款 Radar Chart\n            // 'ECharts: Candlestick',  // 同 VegaLite 同款 Candlestick Chart\n            // 'ECharts: Streamgraph',  // 同 VegaLite 同款 Streamgraph\n            // 'ECharts: Rose',         // 同 VegaLite 同款 Rose Chart\n            'ECharts: Facet Small',\n            'ECharts: Facet Wrap',\n            'ECharts: Facet Clip',\n            'ECharts: Gauge',\n            'ECharts: Funnel',\n            'ECharts: Treemap',\n            'ECharts: Sunburst',\n            'ECharts: Sankey',\n            'ECharts: Unique Stress',\n            'ECharts: Stress Tests',\n        ],\n    },\n    {\n        label: 'Chart.js Backend',\n        description: 'Same inputs through Chart.js backend — compare dataset-based output vs VL/EC output',\n        entries: [\n            'Chart.js: Scatter',\n            'Chart.js: Line',\n            'Chart.js: Bar',\n            'Chart.js: Stacked Bar',\n            'Chart.js: Grouped Bar',\n            'Chart.js: Area',\n            'Chart.js: Pie',\n            'Chart.js: Histogram',\n            'Chart.js: Radar',\n            'Chart.js: Rose',\n            'Chart.js: Stress Tests',\n        ],\n    },\n    {\n        label: 'GoFish Basic',\n        description: 'All GoFish chart examples on one page',\n        entries: [\n            'GoFish Basic',\n        ],\n    },\n];\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/line-area-stretch-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Line & Area chart stretch stress tests.\n *\n * Covers 5 scenarios × 2 chart types + boundary cases + vertical (flipped) variants.\n *\n * Scenarios:\n *   A. Many X positions, few series     (200 dates × 3 series = 600 pts)\n *   B. Few X positions, many series     (12 dates × 20 series = 240 pts)\n *   C. Many X positions, many series    (200 dates × 20 series = 4000 pts)\n *   D. Moderate X, 40 series            (100 dates × 40 series = 4000 pts)\n *   E. Moderate X, 60 series            (100 dates × 60 series = 6000 pts)\n *\n * Current line/area params:  { x: 100, y: 20, seriesCountAxis: 'auto' }\n * Default elasticity: 0.3, maxStretch: 1.5\n *\n * Expected stretch (base canvas 400×300):\n *\n *  Scenario A (200×3):\n *    X: uniqueX=200, σ1d=√100=10 → pressure=200×10/400=5.0 → 5.0^0.3=1.62 → capped 1.5\n *    Y: nSeries=3, σ_y=20        → pressure=3×20/300=0.20  → <1, no stretch\n *    → width=600, height=300     ✓ X-only stretch\n *\n *  Scenario B (12×20):\n *    X: uniqueX=12, σ1d=10       → pressure=12×10/400=0.30 → <1, no stretch\n *    Y: nSeries=20, σ_y=20       → pressure=20×20/300=1.33 → 1.33^0.3=1.09\n *    → width=400, height=328     ✓ Mild Y stretch\n *\n *  Scenario C (200×20):\n *    X: pressure=5.0 → capped 1.5\n *    Y: nSeries=20   → pressure=1.33 → 1.09\n *    → width=600, height=328     ✓ X dominant\n *\n *  Scenario D (100×40):\n *    X: uniqueX=100, σ1d=10      → pressure=2.5 → 2.5^0.3=1.32\n *    Y: nSeries=40, σ_y=20       → pressure=2.67 → 2.67^0.3=1.35\n *    → width=528, height=406     ✓ Both axes stretch similarly\n *\n *  Scenario E (100×60):\n *    X: pressure=2.5 → 1.32\n *    Y: nSeries=60, σ_y=20       → pressure=4.0 → 4.0^0.3=1.52 → capped 1.5\n *    → width=528, height=450     ✓ Y hits cap\n */\n\nimport { Type } from '../../../data/types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genDates } from './generators';\n\n// ---------------------------------------------------------------------------\n// Smooth random walk generator (shared across tests)\n// ---------------------------------------------------------------------------\nfunction makeRandWalk(rand: () => number) {\n    return (n: number, base: number, volatility: number): number[] => {\n        const values: number[] = [base];\n        let momentum = 0;\n        for (let i = 1; i < n; i++) {\n            momentum = 0.65 * momentum + (rand() - 0.5) * volatility;\n            values.push(Math.round(Math.max(0, values[i - 1] + momentum)));\n        }\n        return values;\n    };\n}\n\n// ---------------------------------------------------------------------------\n// Series name pools (realistic)\n// ---------------------------------------------------------------------------\nconst SERIES_3 = ['Revenue', 'Costs', 'Profit'];\nconst SERIES_20 = [\n    'Automotive', 'Banking', 'Construction', 'Defense', 'Energy',\n    'Fashion', 'Gaming', 'Healthcare', 'Insurance', 'Jewelry',\n    'Logistics', 'Manufacturing', 'Networking', 'Oil & Gas', 'Pharma',\n    'Real Estate', 'Retail', 'Software', 'Telecom', 'Utilities',\n];\n\nconst SERIES_40 = [\n    ...SERIES_20,\n    'Agriculture', 'Aerospace', 'Biotech', 'Chemicals', 'Consulting',\n    'Education', 'Entertainment', 'Fintech', 'Forestry', 'Hospitality',\n    'Legal', 'Media', 'Mining', 'Packaging', 'Publishing',\n    'Semiconductors', 'Shipping', 'Sports', 'Textiles', 'Waste Mgmt',\n];\n\nconst SERIES_60 = [\n    ...SERIES_40,\n    'Advertising', 'Architecture', 'Brewing', 'Ceramics', 'Dairy',\n    'E-commerce', 'Fisheries', 'Furniture', 'Genomics', 'HVAC',\n    'Irrigation', 'Journalism', 'Knitwear', 'Lighting', 'Marine',\n    'Nutrition', 'Optics', 'Plumbing', 'Quarrying', 'Robotics',\n];\n\n// ---------------------------------------------------------------------------\n// Generator\n// ---------------------------------------------------------------------------\nexport function genLineAreaStretchTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(8800);\n    const walk = makeRandWalk(rand);\n\n    // Helper to build a multi-series dataset\n    const buildData = (nDates: number, seriesNames: string[], startYear: number) => {\n        const dates = genDates(nDates, startYear);\n        const data: any[] = [];\n        for (const s of seriesNames) {\n            const base = 50 + Math.round(rand() * 300);\n            const vals = walk(nDates, base, 15);\n            for (let i = 0; i < dates.length; i++) {\n                data.push({ Date: dates[i], Series: s, Value: vals[i] });\n            }\n        }\n        return { dates, data };\n    };\n\n    // -----------------------------------------------------------------------\n    // Scenario A: Many X (200 dates) × Few series (3)\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(200, SERIES_3, 2015);\n        const makeCase = (chartType: string, tag: string): TestCase => ({\n            title: `${tag}: 200 dates × 3 series (600 pts)`,\n            description: 'Many time points, few series — X should stretch to max, Y mild',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType,\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_3 },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n        tests.push(makeCase('Line Chart', 'Line A'));\n        tests.push(makeCase('Area Chart', 'Area A'));\n    }\n\n    // -----------------------------------------------------------------------\n    // Scenario B: Few X (12 dates) × Many series (20)\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(12, SERIES_20, 2020);\n        const makeCase = (chartType: string, tag: string): TestCase => ({\n            title: `${tag}: 12 dates × 20 series (240 pts)`,\n            description: 'Few time points, many series — should barely stretch',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType,\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_20 },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n        tests.push(makeCase('Line Chart', 'Line B'));\n        tests.push(makeCase('Area Chart', 'Area B'));\n    }\n\n    // -----------------------------------------------------------------------\n    // Scenario C: Many X (200 dates) × Many series (20)\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(200, SERIES_20, 2010);\n        const makeCase = (chartType: string, tag: string): TestCase => ({\n            title: `${tag}: 200 dates × 20 series (4000 pts)`,\n            description: 'Dense spaghetti — X should max out, Y moderate',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType,\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_20 },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n        tests.push(makeCase('Line Chart', 'Line C'));\n        tests.push(makeCase('Area Chart', 'Area C'));\n    }\n\n    // -----------------------------------------------------------------------\n    // Scenario D: Many X (100 dates) × 40 series\n    //   X: uniqueX=100, σ1d=√100=10 → pressure=100×10/400=2.5 → 2.5^0.3=1.32\n    //   Y: nSeries=40, σ_y=20       → pressure=40×20/300=2.67  → 2.67^0.3=1.35\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(100, SERIES_40, 2018);\n        const makeCase = (chartType: string, tag: string): TestCase => ({\n            title: `${tag}: 100 dates × 40 series (4000 pts)`,\n            description: '40 overlapping series — Y should stretch noticeably',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType,\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_40 },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n        tests.push(makeCase('Line Chart', 'Line D'));\n        tests.push(makeCase('Area Chart', 'Area D'));\n    }\n\n    // -----------------------------------------------------------------------\n    // Scenario E: Many X (100 dates) × 60 series\n    //   X: uniqueX=100, σ1d=10 → pressure=2.5 → 2.5^0.3=1.32\n    //   Y: nSeries=60, σ_y=20  → pressure=60×20/300=4.0 → 4.0^0.3=1.52 → capped 1.5\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(100, SERIES_60, 2016);\n        const makeCase = (chartType: string, tag: string): TestCase => ({\n            title: `${tag}: 100 dates × 60 series (6000 pts)`,\n            description: '60 series — Y should hit maxStretch cap',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType,\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_60 },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n        tests.push(makeCase('Line Chart', 'Line E'));\n        tests.push(makeCase('Area Chart', 'Area E'));\n    }\n\n    // -----------------------------------------------------------------------\n    // Boundary: Very few X (5 dates) × 2 series — should not stretch at all\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(5, ['Actual', 'Forecast'], 2024);\n        tests.push({\n            title: 'Line boundary: 5 dates × 2 series (no stretch)',\n            description: 'Minimal data — no stretch expected',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: ['Actual', 'Forecast'] },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    // -----------------------------------------------------------------------\n    // Boundary: 50 dates × 1 series — single line, moderate X stretch\n    // -----------------------------------------------------------------------\n    {\n        const dates = genDates(50, 2022);\n        const vals = walk(50, 200, 20);\n        const data = dates.map((d, i) => ({ Date: d, Value: vals[i] }));\n        tests.push({\n            title: 'Line boundary: 50 dates × 1 series (single line)',\n            description: 'Single series — X stretch only, no Y stretch',\n            tags: ['temporal', 'quantitative', 'stretch-test'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    // -----------------------------------------------------------------------\n    // Boundary: 100 dates × 8 series — the screenshot case\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(100, ['Auto', 'Books', 'Clothing', 'Electronics', 'Food', 'Garden', 'Home', 'Sports'], 2015);\n        tests.push({\n            title: 'Line reference: 100 dates × 8 series (800 pts)',\n            description: 'The original screenshot case — should stretch X clearly more than Y',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: ['Auto', 'Books', 'Clothing', 'Electronics', 'Food', 'Garden', 'Home', 'Sports'] },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    // -----------------------------------------------------------------------\n    // Vertical (axes-flipped): Y=temporal, X=quantitative\n    // Tests that seriesCountAxis:'auto' correctly resolves when flipped.\n    // In 2D path, auto → Y for standard; when flipped the positional axis\n    // is Y (dates) and the series overlap is on X (values).\n    // -----------------------------------------------------------------------\n\n    // Vertical Line: 100 dates × 8 series\n    {\n        const { data } = buildData(100, ['Auto', 'Books', 'Clothing', 'Electronics', 'Food', 'Garden', 'Home', 'Sports'], 2017);\n        tests.push({\n            title: 'Vertical Line: 100 dates × 8 series',\n            description: 'Axes flipped — Y=dates, X=values. Series overlap on X axis.',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test', 'vertical'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: ['Auto', 'Books', 'Clothing', 'Electronics', 'Food', 'Garden', 'Home', 'Sports'] },\n            },\n            encodingMap: { y: makeEncodingItem('Date'), x: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    // Vertical Line: 200 dates × 20 series (dense spaghetti, flipped)\n    {\n        const { data } = buildData(200, SERIES_20, 2012);\n        tests.push({\n            title: 'Vertical Line: 200 dates × 20 series',\n            description: 'Dense vertical spaghetti — Y should stretch (positional dates), X mild (series)',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test', 'vertical'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_20 },\n            },\n            encodingMap: { y: makeEncodingItem('Date'), x: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    // Vertical Area: 100 dates × 40 series (stacked, flipped)\n    {\n        const { data } = buildData(100, SERIES_40, 2019);\n        tests.push({\n            title: 'Vertical Area: 100 dates × 40 series',\n            description: 'Vertical stacked area with 40 series — both axes should stretch',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test', 'vertical'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_40 },\n            },\n            encodingMap: { y: makeEncodingItem('Date'), x: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    // Vertical Line: 12 dates × 60 series (extreme, flipped)\n    {\n        const { data } = buildData(12, SERIES_60, 2024);\n        tests.push({\n            title: 'Vertical Line: 12 dates × 60 series',\n            description: 'Extreme series count vertical — X (series axis) should hit cap',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test', 'vertical'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_60 },\n            },\n            encodingMap: { y: makeEncodingItem('Date'), x: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    return tests;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/line-area-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genDates, genYears, genMonths, genCategories } from './generators';\n\n// Line Chart tests have been moved to line-tests.ts (matrix-driven).\n// Area Chart & Streamgraph tests have been moved to area-tests.ts (matrix-driven).\n\n// ------ Dotted Line Chart ------\nexport function genDottedLineTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(650);\n\n    {\n        const months = genMonths(12);\n        const data = months.map(m => ({ Month: m, Temperature: Math.round(10 + rand() * 25) }));\n        tests.push({\n            title: 'Ordinal × Quant (dotted line)',\n            description: 'Monthly temperatures with point markers',\n            tags: ['ordinal', 'quantitative', 'small'],\n            chartType: 'Dotted Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Temperature')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Temperature: { type: Type.Number, semanticType: 'Temperature', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Temperature') },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Bump Chart ------\nexport function genBumpChartTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(700);\n\n    // 1. Classic bump chart: rank over rounds (intended use)\n    {\n        const teams = ['Team A', 'Team B', 'Team C', 'Team D', 'Team E'];\n        const rounds = ['Round 1', 'Round 2', 'Round 3', 'Round 4', 'Round 5', 'Round 6'];\n        const data: any[] = [];\n        for (const r of rounds) {\n            const shuffled = [...teams].sort(() => rand() - 0.5);\n            shuffled.forEach((t, i) => {\n                data.push({ Round: r, Team: t, Rank: i + 1 });\n            });\n        }\n        tests.push({\n            title: 'Ordinal × Rank + Color (classic bump)',\n            description: '6 rounds × 5 teams — rank changes over rounds',\n            tags: ['ordinal', 'quantitative', 'color', 'small'],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Round'), makeField('Rank'), makeField('Team')],\n            metadata: {\n                Round: { type: Type.String, semanticType: 'Category', levels: rounds },\n                Rank: { type: Type.Number, semanticType: 'Rank', levels: [] },\n                Team: { type: Type.String, semanticType: 'Team', levels: teams },\n            },\n            encodingMap: { x: makeEncodingItem('Round'), y: makeEncodingItem('Rank'), color: makeEncodingItem('Team') },\n        });\n    }\n\n    // 2. Temporal bump: rank over years (intended use)\n    {\n        const years = genYears(10, 2015);\n        const countries = ['USA', 'China', 'Germany', 'Japan', 'India'];\n        const data: any[] = [];\n        for (const y of years) {\n            const shuffled = [...countries].sort(() => rand() - 0.5);\n            shuffled.forEach((c, i) => {\n                data.push({ Year: y, Country: c, Rank: i + 1 });\n            });\n        }\n        tests.push({\n            title: 'Temporal × Rank + Color (yearly ranking)',\n            description: '10 years × 5 countries — GDP ranking over time',\n            tags: ['temporal', 'quantitative', 'color', 'medium'],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Year'), makeField('Country'), makeField('Rank')],\n            metadata: {\n                Year: { type: Type.Number, semanticType: 'Year', levels: years },\n                Rank: { type: Type.Number, semanticType: 'Rank', levels: [] },\n                Country: { type: Type.String, semanticType: 'Country', levels: countries },\n            },\n            encodingMap: { x: makeEncodingItem('Year'), y: makeEncodingItem('Rank'), color: makeEncodingItem('Country') },\n        });\n    }\n\n    // 3. Many series (potential clutter — stress test)\n    {\n        const months = genMonths(12);\n        const players = genCategories('Player', 12);\n        const data: any[] = [];\n        for (const m of months) {\n            const shuffled = [...players].sort(() => rand() - 0.5);\n            shuffled.forEach((p, i) => {\n                data.push({ Month: m, Player: p, Rank: i + 1 });\n            });\n        }\n        tests.push({\n            title: 'Ordinal × Rank + Color (many series, 144 pts)',\n            description: '12 months × 12 players — crowded bump chart',\n            tags: ['ordinal', 'quantitative', 'color', 'large'],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Month'), makeField('Rank'), makeField('Player')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Rank: { type: Type.Number, semanticType: 'Rank', levels: [] },\n                Player: { type: Type.String, semanticType: 'Category', levels: players },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Rank'), color: makeEncodingItem('Player') },\n        });\n    }\n\n    // 4. Score instead of rank — no \"Rank\" semantic type (edge case)\n    {\n        const dates = genDates(8, 2024);\n        const brands = ['Brand A', 'Brand B', 'Brand C'];\n        const data: any[] = [];\n        for (const d of dates) for (const b of brands) {\n            data.push({ Date: d, Brand: b, Score: Math.round(50 + rand() * 50) });\n        }\n        tests.push({\n            title: 'Temporal × Quant + Color (score, no rank semantic)',\n            description: '8 dates × 3 brands — score values without Rank semantic type',\n            tags: ['temporal', 'quantitative', 'color', 'small'],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Date'), makeField('Score'), makeField('Brand')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Brand: { type: Type.String, semanticType: 'Category', levels: brands },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Score'), color: makeEncodingItem('Brand') },\n        });\n    }\n\n    // 5. No color — single series (degenerate case)\n    {\n        const rounds = ['Q1', 'Q2', 'Q3', 'Q4'];\n        const data = rounds.map((r, i) => ({ Quarter: r, Rank: Math.ceil(1 + rand() * 5) }));\n        tests.push({\n            title: 'Ordinal × Rank (single series, no color)',\n            description: '4 quarters — bump chart without color encoding',\n            tags: ['ordinal', 'quantitative', 'small'],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Rank')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Category', levels: rounds },\n                Rank: { type: Type.Number, semanticType: 'Rank', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Rank') },\n        });\n    }\n\n    // 6. Two items only (minimal case)\n    {\n        const years = genYears(5, 2020);\n        const items = ['Alpha', 'Beta'];\n        const data: any[] = [];\n        for (const y of years) {\n            const flip = rand() > 0.5;\n            data.push({ Year: y, Item: items[0], Rank: flip ? 1 : 2 });\n            data.push({ Year: y, Item: items[1], Rank: flip ? 2 : 1 });\n        }\n        tests.push({\n            title: 'Temporal × Rank + Color (2 items only)',\n            description: '5 years × 2 items — minimal bump chart',\n            tags: ['temporal', 'quantitative', 'color', 'small'],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Year'), makeField('Rank'), makeField('Item')],\n            metadata: {\n                Year: { type: Type.Number, semanticType: 'Year', levels: years },\n                Rank: { type: Type.Number, semanticType: 'Rank', levels: [] },\n                Item: { type: Type.String, semanticType: 'Category', levels: items },\n            },\n            encodingMap: { x: makeEncodingItem('Year'), y: makeEncodingItem('Rank'), color: makeEncodingItem('Item') },\n        });\n    }\n\n    return tests;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/line-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genDates, genCategories, genOrdinalLabels, ORDINAL_PREFIXES } from './generators';\n\n// ============================================================================\n// Line Chart Tests — Matrix-driven\n//\n// Each test is defined as a compact row in LINE_MATRIX.  A generator\n// function converts matrix entries into full TestCase objects.\n//\n// Matrix dimensions:\n//   x axis type:  Q (quantitative), T (temporal), O (ordinal)\n//   y axis type:  same\n//   color channel: — | N (nominal, multi-series) | Q (gradient)\n//   n:             total data points\n//   sparse:        ~20% random dropout\n//\n// Ordinal (O) is used for axes — line charts require a meaningful\n// sequential order.  Nominal (N) is used for unordered color groups.\n// Purely nominal axes are excluded (lines imply sequence).\n//\n// Default test canvas: 300 × 300 px.\n// ============================================================================\n\ntype DimType = 'Q' | 'T' | 'N' | 'O';\n\ninterface LineMatrixEntry {\n    x: DimType;\n    y: DimType;\n    n: number;           // total data points\n    color?: DimType;\n    xCard?: number;\n    yCard?: number;\n    colorCard?: number;\n    sparse?: boolean;\n    desc?: string;\n    extraTags?: string[];\n}\n\n// ============================================================================\n// THE MATRIX — one row per test case (23 tests)\n//\n// Note: O (ordinal) is used for categorical axes — line charts require\n// a meaningful sequential order.  N (nominal) is used for color groups.\n// Purely nominal axis combinations are excluded because connecting\n// unordered categories with lines is visually misleading.\n// ============================================================================\n\nconst LINE_MATRIX: LineMatrixEntry[] = [\n    // ── T × Q (6 tests) — core time series ──────────────────────────\n    { x: 'T', y: 'Q', n: 30,   desc: 'Simple time series — 30 dates' },\n    { x: 'T', y: 'Q', n: 200,  color: 'N', colorCard: 4,  desc: '4 series × 50 dates — smooth random walks' },\n    { x: 'T', y: 'Q', n: 800,  color: 'N', colorCard: 8,  desc: '8 series × 100 dates — crowded' },\n    { x: 'T', y: 'Q', n: 4000, color: 'N', colorCard: 20, desc: '20 series spaghetti — stress', extraTags: ['stress'] },\n    { x: 'T', y: 'Q', n: 180,  color: 'N', colorCard: 3,  sparse: true, desc: '3 series × 60 dates, ~20% missing' },\n    { x: 'T', y: 'Q', n: 30,   color: 'Q', desc: 'Continuous color gradient on time series' },\n\n    // ── O × Q (4 tests) — ordered categories on x ───────────────────\n    //    Line charts with ordinal x make sense when categories have an\n    //    inherent sequence (e.g. stages, ranked items, ordered groups).\n    { x: 'O', y: 'Q', n: 5,  xCard: 5,  desc: 'Ordinal line — 5 ordered categories' },\n    { x: 'O', y: 'Q', n: 48, xCard: 12, color: 'N', colorCard: 4, desc: '12 ordinal × 4 series' },\n    { x: 'O', y: 'Q', n: 30, xCard: 30, desc: '30 ordinal categories — label overflow', extraTags: ['overflow'] },\n    { x: 'O', y: 'Q', n: 5,  xCard: 5,  color: 'Q', desc: 'Ordinal + continuous color gradient' },\n\n    // ── Q × O (3 tests) — mirror ────────────────────────────────────\n    { x: 'Q', y: 'O', n: 5,  yCard: 5,  desc: 'Horizontal ordinal — 5 ordered cats on y' },\n    { x: 'Q', y: 'O', n: 48, yCard: 12, color: 'N', colorCard: 4, desc: 'Horizontal 12 ordinal × 4 series' },\n    { x: 'Q', y: 'O', n: 30, yCard: 30, desc: 'Horizontal 30 ordinal overflow', extraTags: ['overflow'] },\n\n    // ── Q × Q (3 tests) — quantitative x ────────────────────────────\n    { x: 'Q', y: 'Q', n: 30,  desc: 'Quantitative x line — 30 pts' },\n    { x: 'Q', y: 'Q', n: 150, color: 'N', colorCard: 3, desc: '3 parametric curves × 50 pts' },\n    { x: 'Q', y: 'Q', n: 200, desc: 'Dense single curve — 200 pts' },\n\n    // ── T × T ────────────────────────────────────────────────────────\n    // Excluded: T×T date-pair data (start vs end date) doesn't suit line\n    // charts — each row is an independent event, not a sequential series.\n    // Lines connect points in data order producing random zig-zags.\n    // T×T pairs are better served by scatter plots or dumbbell charts.\n\n    // Excluded: N×N, T×N, N×T — purely nominal axes don't suit line charts.\n    // Lines imply sequence/progression; connecting unordered categories is misleading.\n];\n\n// ============================================================================\n// Generator internals\n// ============================================================================\n\ninterface LineCh {\n    role: 'x' | 'y' | 'color';\n    dimType: DimType;\n    fieldName: string;\n    card?: number;\n    levels?: string[];\n    dates?: string[];\n}\n\nconst LINE_NAMES: Record<string, Record<DimType, string>> = {\n    x:     { Q: 'X',        T: 'Date',      N: 'Series',    O: 'Stage' },\n    y:     { Q: 'Value',    T: 'EndDate',   N: 'Group',     O: 'Step' },\n    color: { Q: 'ColorVal', T: 'Timestamp', N: 'Series',    O: 'Level' },\n};\n\nconst LINE_FALLBACKS: Record<DimType, string[]> = {\n    Q: ['X', 'Value', 'Measure', 'Score'],\n    T: ['Date', 'EndDate', 'StartDate', 'Timestamp'],\n    N: ['Series', 'Group', 'Category', 'Type'],\n    O: ['Stage', 'Step', 'Phase', 'Level', 'Round'],\n};\n\nconst LINE_CAT_POOLS = ['Category', 'Country', 'Department', 'Product', 'Company'];\nconst LINE_T_STARTS = [2020, 2023, 2019, 2022];\n\nfunction buildLineChannels(entry: LineMatrixEntry, nPerSeries: number): LineCh[] {\n    const used = new Set<string>();\n    const channels: LineCh[] = [];\n    let tIdx = 0;\n    let cIdx = 0;\n    let oIdx = 0;\n\n    function pickName(dim: DimType, role: string): string {\n        const primary = LINE_NAMES[role]?.[dim];\n        if (primary && !used.has(primary)) { used.add(primary); return primary; }\n        for (const n of LINE_FALLBACKS[dim]) {\n            if (!used.has(n)) { used.add(n); return n; }\n        }\n        return `${role}_field`;\n    }\n\n    const specs: { role: 'x' | 'y' | 'color'; dim: DimType; card?: number }[] = [\n        { role: 'x', dim: entry.x, card: entry.xCard },\n        { role: 'y', dim: entry.y, card: entry.yCard },\n    ];\n    if (entry.color) specs.push({ role: 'color', dim: entry.color, card: entry.colorCard });\n\n    for (const { role, dim, card } of specs) {\n        const ch: LineCh = { role, dimType: dim, fieldName: pickName(dim, role) };\n\n        if (dim === 'N') {\n            const c = card || 3;\n            ch.card = c;\n            ch.levels = genCategories(LINE_CAT_POOLS[cIdx % LINE_CAT_POOLS.length], c);\n            cIdx++;\n        }\n\n        if (dim === 'O') {\n            const c = card || 5;\n            ch.card = c;\n            ch.levels = genOrdinalLabels(ORDINAL_PREFIXES[oIdx % ORDINAL_PREFIXES.length], c);\n            oIdx++;\n        }\n\n        if (dim === 'T') {\n            ch.dates = genDates(nPerSeries, LINE_T_STARTS[tIdx % LINE_T_STARTS.length]);\n            tIdx++;\n        }\n\n        channels.push(ch);\n    }\n\n    return channels;\n}\n\n// ---------------------------------------------------------------------------\n// Data generation\n// ---------------------------------------------------------------------------\n\n/** Smooth random-walk series (momentum + noise). */\nfunction genLineWalk(n: number, base: number, volatility: number, rand: () => number): number[] {\n    const v: number[] = [base];\n    let m = 0;\n    for (let i = 1; i < n; i++) {\n        m = 0.7 * m + (rand() - 0.5) * volatility;\n        v.push(Math.round(Math.max(0, v[i - 1] + m)));\n    }\n    return v;\n}\n\nfunction genLineSeriesData(\n    entry: LineMatrixEntry, channels: LineCh[], rand: () => number,\n): Record<string, any>[] {\n    const xCh = channels.find(c => c.role === 'x')!;\n    const yCh = channels.find(c => c.role === 'y')!;\n    const colorCh = channels.find(c => c.role === 'color');\n\n    const nSeries = (colorCh?.dimType === 'N' ? (entry.colorCard || 3) : 1);\n    const nPerSeries = Math.max(1, Math.floor(entry.n / nSeries));\n\n    // Shared x-positions\n    let xPositions: any[];\n    if (xCh.dimType === 'T') {\n        xPositions = genDates(nPerSeries, 2020);\n    } else if (xCh.dimType === 'O') {\n        xPositions = xCh.levels!;\n    } else { // Q\n        xPositions = Array.from({ length: nPerSeries }, (_, i) =>\n            Math.round(i * 100 / Math.max(1, nPerSeries - 1) * 10) / 10);\n    }\n\n    const data: Record<string, any>[] = [];\n\n    for (let s = 0; s < nSeries; s++) {\n        const base = 50 + Math.round(rand() * 200);\n        const vol = 10 + rand() * 30;\n\n        // Generate y-values\n        let yValues: any[];\n        if (yCh.dimType === 'Q') {\n            yValues = genLineWalk(xPositions.length, base, vol, rand);\n        } else if (yCh.dimType === 'T') {\n            yValues = genDates(xPositions.length, 2023 + s);\n        } else { // O\n            yValues = xPositions.map((_, i) => yCh.levels![i % yCh.levels!.length]);\n        }\n\n        for (let i = 0; i < xPositions.length; i++) {\n            if (entry.sparse && rand() < 0.2) continue;\n\n            const row: Record<string, any> = {\n                [xCh.fieldName]: xPositions[i],\n                [yCh.fieldName]: yValues[i],\n            };\n\n            if (colorCh) {\n                if (colorCh.dimType === 'N') {\n                    row[colorCh.fieldName] = colorCh.levels![s];\n                } else if (colorCh.dimType === 'Q') {\n                    row[colorCh.fieldName] = Math.round(rand() * 100) / 10;\n                }\n            }\n\n            data.push(row);\n        }\n    }\n\n    return data;\n}\n\nfunction genLineGridData(channels: LineCh[], rand: () => number): Record<string, any>[] {\n    const xCh = channels.find(c => c.role === 'x')!;\n    const yCh = channels.find(c => c.role === 'y')!;\n    const colorCh = channels.find(c => c.role === 'color');\n    const data: Record<string, any>[] = [];\n\n    for (const xVal of xCh.levels!) {\n        for (const yVal of yCh.levels!) {\n            if (rand() > 0.3) {\n                const row: Record<string, any> = { [xCh.fieldName]: xVal, [yCh.fieldName]: yVal };\n                if (colorCh?.dimType === 'N')\n                    row[colorCh.fieldName] = colorCh.levels![Math.floor(rand() * colorCh.levels!.length)];\n                data.push(row);\n            }\n        }\n    }\n\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Title & tags\n// ---------------------------------------------------------------------------\n\nfunction buildLineTitle(entry: LineMatrixEntry): string {\n    const xLabel = entry.x === 'O' && entry.xCard ? `O(${entry.xCard})` : entry.x;\n    const yLabel = entry.y === 'O' && entry.yCard ? `O(${entry.yCard})` : entry.y;\n    const parts = [`${xLabel}×${yLabel}`];\n    if (entry.color) {\n        parts.push(`+color(${entry.color === 'N' ? `N,${entry.colorCard || 3}` : entry.color})`);\n    }\n    if (entry.sparse) parts.push('sparse');\n    if (entry.n === 0) parts.push('grid');\n    else parts.push(`(${entry.n} pts)`);\n    return parts.join(' ');\n}\n\nfunction buildLineTags(entry: LineMatrixEntry, dataLen: number): string[] {\n    const tags: string[] = [];\n    const dims = new Set<DimType>([entry.x, entry.y]);\n    if (entry.color) dims.add(entry.color);\n    if (dims.has('Q')) tags.push('quantitative');\n    if (dims.has('T')) tags.push('temporal');\n    if (dims.has('N')) tags.push('nominal');\n    if (dims.has('O')) tags.push('ordinal');\n    if (entry.color) tags.push('color');\n    if (entry.color === 'Q') tags.push('continuous-color');\n    if (entry.sparse) tags.push('sparse');\n    const n = dataLen;\n    if (n <= 25) tags.push('small');\n    else if (n <= 100) tags.push('medium');\n    else { tags.push('large'); if (n > 500) tags.push('scaling'); }\n    if (entry.extraTags) tags.push(...entry.extraTags);\n    return [...new Set(tags)];\n}\n\n// ---------------------------------------------------------------------------\n// Matrix entry → TestCase\n// ---------------------------------------------------------------------------\n\nfunction lineMatrixToTestCase(entry: LineMatrixEntry, rand: () => number): TestCase {\n    const nSeries = entry.colorCard || 1;\n    const effectiveN = entry.n || (entry.xCard || 5) * (entry.yCard || 5);\n    const nPerSeries = Math.max(1, Math.floor(effectiveN / nSeries));\n    const channels = buildLineChannels(entry, nPerSeries);\n\n    const isGrid = entry.x === 'O' && entry.y === 'O' && entry.n === 0;\n\n    let data: Record<string, any>[];\n    if (isGrid) {\n        data = genLineGridData(channels, rand);\n    } else {\n        data = genLineSeriesData(entry, channels, rand);\n    }\n\n    const typeMap: Record<DimType, Type> = { Q: Type.Number, T: Type.Date, N: Type.String, O: Type.String };\n    const semMap: Record<DimType, string> = { Q: 'Quantity', T: 'Date', N: 'Category', O: 'Category' };\n\n    const fields = channels.map(ch => makeField(ch.fieldName));\n    const metadata: Record<string, { type: Type; semanticType: string; levels: any[] }> = {};\n    const encodingMap: Partial<Record<string, any>> = {};\n\n    for (const ch of channels) {\n        metadata[ch.fieldName] = {\n            type: typeMap[ch.dimType],\n            semanticType: semMap[ch.dimType],\n            levels: ch.levels || [],\n        };\n        encodingMap[ch.role] = makeEncodingItem(ch.fieldName);\n    }\n\n    return {\n        title: buildLineTitle(entry),\n        description: entry.desc || buildLineTitle(entry),\n        tags: buildLineTags(entry, data.length),\n        chartType: 'Line Chart',\n        data,\n        fields,\n        metadata,\n        encodingMap,\n    };\n}\n\n// ============================================================================\n// Forecast test cases — demonstrate strokeDash for actual vs forecast\n// ============================================================================\n\nfunction genForecastTestSingleSeries(rand: () => number): TestCase {\n    // Single series: 12 months actual + 4 months forecast (continuous dates)\n    const allDates = genDates(16, 2024);  // 16 continuous dates\n    const actualDates = allDates.slice(0, 12);\n    const forecastDates = allDates.slice(12);\n\n    const data: Record<string, any>[] = [];\n    let val = 100;\n    // Actual data\n    for (const d of actualDates) {\n        val = Math.round(val + (rand() - 0.4) * 15);\n        data.push({ Date: d, Revenue: val, Type: 'actual' });\n    }\n    // Duplicate last actual point as first forecast point (for line connection)\n    const lastActual = data[data.length - 1];\n    data.push({ Date: lastActual.Date, Revenue: lastActual.Revenue, Type: 'forecast' });\n    // Forecast data (trending upward)\n    for (const d of forecastDates) {\n        val = Math.round(val + rand() * 12 + 3);\n        data.push({ Date: d, Revenue: val, Type: 'forecast' });\n    }\n\n    return {\n        title: 'Forecast — single series, actual vs forecast',\n        description: 'Single time series with actual (solid) vs forecast (dashed) using strokeDash',\n        tags: ['temporal', 'forecast', 'strokeDash', 'medium'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('Date'), makeField('Revenue'), makeField('Type')],\n        metadata: {\n            Date:    { type: Type.Date,   semanticType: 'Date',     levels: [] },\n            Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            Type:    { type: Type.String, semanticType: 'Category', levels: ['actual', 'forecast'] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('Date'),\n            y: makeEncodingItem('Revenue'),\n            strokeDash: makeEncodingItem('Type'),\n        },\n    };\n}\n\nfunction genForecastTestMultiSeries(rand: () => number): TestCase {\n    // 3 product series: 10 actual + 3 forecast (continuous dates)\n    const products = ['Widget A', 'Widget B', 'Widget C'];\n    const allDates = genDates(13, 2024);  // 13 continuous dates\n    const actualDates = allDates.slice(0, 10);\n    const forecastDates = allDates.slice(10);\n\n    const data: Record<string, any>[] = [];\n    for (const product of products) {\n        let val = 50 + Math.round(rand() * 100);\n        const vol = 5 + rand() * 15;\n        // Actual data\n        for (const d of actualDates) {\n            val = Math.round(Math.max(10, val + (rand() - 0.45) * vol));\n            data.push({ Date: d, Sales: val, Product: product, Type: 'actual' });\n        }\n        // Duplicate last actual point as first forecast (for line connection)\n        const lastActual = data[data.length - 1];\n        data.push({ Date: lastActual.Date, Sales: lastActual.Sales, Product: product, Type: 'forecast' });\n        // Forecast data\n        for (const d of forecastDates) {\n            val = Math.round(val + rand() * 10 + 2);\n            data.push({ Date: d, Sales: val, Product: product, Type: 'forecast' });\n        }\n    }\n\n    return {\n        title: 'Forecast — 3 series, color + strokeDash',\n        description: '3 product series with color for series grouping and strokeDash for actual vs forecast',\n        tags: ['temporal', 'nominal', 'forecast', 'strokeDash', 'color', 'medium'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('Date'), makeField('Sales'), makeField('Product'), makeField('Type')],\n        metadata: {\n            Date:    { type: Type.Date,   semanticType: 'Date',     levels: [] },\n            Sales:   { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            Product: { type: Type.String, semanticType: 'Category', levels: products },\n            Type:    { type: Type.String, semanticType: 'Category', levels: ['actual', 'forecast'] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('Date'),\n            y: makeEncodingItem('Sales'),\n            color: makeEncodingItem('Product'),\n            strokeDash: makeEncodingItem('Type'),\n        },\n    };\n}\n\n// ============================================================================\n// Public export\n// ============================================================================\n\nexport function genLineTests(): TestCase[] {\n    const rand = seededRandom(600);\n    const matrixTests = LINE_MATRIX.map(entry => lineMatrixToTestCase(entry, rand));\n\n    // Forecast tests\n    const forecastRand = seededRandom(700);\n    const forecastTests = [\n        genForecastTestSingleSeries(forecastRand),\n        genForecastTestMultiSeries(forecastRand),\n    ];\n\n    return [...matrixTests, ...forecastTests];\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/scatter-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genDates, genCategories, genRandomNames } from './generators';\n\n// ============================================================================\n// Scatter Plot Tests — Matrix-driven\n//\n// Each test is defined as a compact row in SCATTER_MATRIX.  A generator\n// function converts matrix entries into full TestCase objects.\n//\n// Matrix dimensions:\n//   Axis types:  Q (quantitative), T (temporal), N (nominal)\n//   xy combos:   9 = [Q,T,N] × [Q,T,N]\n//   3rd channel: none | color(Q/T/N) | size(Q/N) | both\n//   Density:     small (≤25 pts), medium (26–100), large (>100)\n//\n// Note: Scatter plots don't distinguish nominal from ordinal visually —\n// all categorical channels use N (nominal).  The one exception is size='N'\n// which generates ranked labels (Low/Medium/High) for ordinal size levels.\n//\n// Default test canvas: 300 × 300 px.\n// ============================================================================\n\ntype DimType = 'Q' | 'T' | 'N';\n\n/** A single row in the scatter test matrix. */\ninterface MatrixEntry {\n    x: DimType;\n    y: DimType;\n    n: number;           // data points (0 → derive from xCard × yCard for C×C grid)\n    color?: DimType;\n    size?: DimType;\n    xCard?: number;      // C cardinality for x\n    yCard?: number;      // C cardinality for y\n    colorCard?: number;  // C cardinality for color\n    sizeCard?: number;   // C/ordinal cardinality for size\n    hugeRange?: boolean; // size field 1K–1B\n    desc?: string;       // override auto-generated description\n    extraTags?: string[];\n}\n\n// ============================================================================\n// THE MATRIX — one row per test case (25 tests)\n// ============================================================================\n\nconst SCATTER_MATRIX: MatrixEntry[] = [\n    // ── Q × Q (15 tests) ─────────────────────────────────────────────\n    //  xy only\n    { x: 'Q', y: 'Q', n: 20,  desc: 'Baseline — two quantitative axes, no extra encodings' },\n    //  + color\n    { x: 'Q', y: 'Q', n: 20,  color: 'N', colorCard: 3 },\n    { x: 'Q', y: 'Q', n: 20,  color: 'Q', desc: 'Continuous color — expect gradient legend' },\n    { x: 'Q', y: 'Q', n: 30,  color: 'T', desc: 'Temporal color gradient — shows progression over time' },\n    //  + size\n    { x: 'Q', y: 'Q', n: 50,  size: 'Q' },\n    { x: 'Q', y: 'Q', n: 20,  size: 'N', sizeCard: 4, desc: 'Ordinal size — 4 discrete priority levels' },\n    //  + size + color\n    { x: 'Q', y: 'Q', n: 15,  size: 'Q', color: 'N', colorCard: 3, desc: 'Gapminder-style: bubbles + 3 color groups' },\n    { x: 'Q', y: 'Q', n: 30,  size: 'Q', color: 'Q', desc: 'Both size and color are continuous — 4D encoding' },\n    { x: 'Q', y: 'Q', n: 20,  size: 'Q', color: 'N', colorCard: 20, hugeRange: true, desc: 'Size 1K–1B — tests sqrt scale discrimination' },\n    //  density / scaling\n    { x: 'Q', y: 'Q', n: 100, desc: 'Moderate density — point-size reduction' },\n    { x: 'Q', y: 'Q', n: 500, desc: 'High density — aggressive point-size reduction' },\n    { x: 'Q', y: 'Q', n: 200, color: 'N', colorCard: 20, desc: 'Dense scatter with 20 nominal color groups' },\n    { x: 'Q', y: 'Q', n: 100, color: 'N', colorCard: 50, desc: '50 colors — tests legend overflow', extraTags: ['overflow'] },\n    //  bubble scaling\n    { x: 'Q', y: 'Q', n: 10,  size: 'Q', desc: 'Sparse — large bubbles expected', extraTags: ['scaling'] },\n    { x: 'Q', y: 'Q', n: 200, size: 'Q', desc: 'Dense — bubbles should shrink significantly', extraTags: ['scaling'] },\n\n    // ── N × Q (4 tests) ──────────────────────────────────────────────\n    { x: 'N', y: 'Q', n: 25,  xCard: 5,  color: 'Q', desc: 'Strip + continuous color gradient' },\n    { x: 'N', y: 'Q', n: 25,  xCard: 5,  size: 'Q', desc: 'Bubble strip — size encodes a measure' },\n    { x: 'N', y: 'Q', n: 30,  xCard: 2,  desc: 'Binary category strip (e.g., Yes/No)', extraTags: ['edge-case'] },\n    { x: 'N', y: 'Q', n: 60,  xCard: 60, desc: '60 categories — heavy discrete-axis overflow', extraTags: ['overflow'] },\n\n    // ── Q × N (3 tests) — mirrors N×Q with flipped orientation ──────\n    { x: 'Q', y: 'N', n: 25,  yCard: 5,  color: 'Q', desc: 'Horizontal strip + continuous color' },\n    { x: 'Q', y: 'N', n: 25,  yCard: 5,  size: 'Q', desc: 'Horizontal bubble strip' },\n    { x: 'Q', y: 'N', n: 60,  yCard: 60, desc: 'Horizontal 60-cat overflow on y', extraTags: ['overflow'] },\n\n    // ── N × N (3 tests) ──────────────────────────────────────────────\n    { x: 'N', y: 'N', n: 0,   xCard: 5,  yCard: 6,  size: 'Q', desc: 'Bubble grid — partial grid occupancy' },\n    { x: 'N', y: 'N', n: 0,   xCard: 5,  yCard: 4,  color: 'Q', desc: 'Heatmap-like scatter — continuous color on grid' },\n    { x: 'N', y: 'N', n: 0,   xCard: 15, yCard: 12, size: 'Q', desc: 'Large grid — high-cardinality overflow on both axes', extraTags: ['overflow', 'scaling'] },\n];\n\n// ============================================================================\n// Generator internals\n// ============================================================================\n\ninterface ChannelInfo {\n    role: 'x' | 'y' | 'color' | 'size';\n    dimType: DimType;\n    fieldName: string;\n    card?: number;\n    levels?: string[];\n    dates?: string[];\n}\n\n/** Preferred field names per (role, dimType). */\nconst PREFERRED_NAMES: Record<string, Record<DimType, string>> = {\n    x:     { Q: 'X',        T: 'Date',      N: 'Category' },\n    y:     { Q: 'Y',        T: 'EndDate',   N: 'Group' },\n    color: { Q: 'ColorVal', T: 'Timestamp', N: 'Segment' },\n    size:  { Q: 'Size',     T: 'Period',    N: 'Level' },\n};\n\n/** Fallback pools when the preferred name is already taken. */\nconst FALLBACK_NAMES: Record<DimType, string[]> = {\n    Q: ['X', 'Y', 'Measure', 'Value', 'Score'],\n    T: ['Date', 'EndDate', 'StartDate', 'Timestamp'],\n    N: ['Category', 'Group', 'Segment', 'Level', 'Type'],\n};\n\n/** Semantic-type pool so multiple C channels get distinct category sets. */\nconst CAT_SEMANTICS = ['Category', 'Country', 'Department', 'Product', 'Company'];\n\n/** Start years for temporal channels (staggered to avoid overlap in T×T). */\nconst T_START_YEARS = [2020, 2023, 2019, 2022];\n\n// ---------------------------------------------------------------------------\n// Channel & data generation\n// ---------------------------------------------------------------------------\n\nfunction buildChannels(entry: MatrixEntry): ChannelInfo[] {\n    const used = new Set<string>();\n    const channels: ChannelInfo[] = [];\n    let tIdx = 0;   // temporal channel counter\n    let cIdx = 0;   // categorical channel counter\n    let cSeed = 500;\n\n    function pickName(dim: DimType, role: string): string {\n        const primary = PREFERRED_NAMES[role]?.[dim];\n        if (primary && !used.has(primary)) { used.add(primary); return primary; }\n        for (const n of FALLBACK_NAMES[dim]) {\n            if (!used.has(n)) { used.add(n); return n; }\n        }\n        return `${role}_field`;\n    }\n\n    const specs: { role: 'x' | 'y' | 'color' | 'size'; dim: DimType; card?: number }[] = [\n        { role: 'x', dim: entry.x, card: entry.xCard },\n        { role: 'y', dim: entry.y, card: entry.yCard },\n    ];\n    if (entry.color) specs.push({ role: 'color', dim: entry.color, card: entry.colorCard });\n    if (entry.size)  specs.push({ role: 'size',  dim: entry.size,  card: entry.sizeCard });\n\n    const effectiveN = entry.n || (entry.xCard || 5) * (entry.yCard || 5);\n\n    for (const { role, dim, card } of specs) {\n        const ch: ChannelInfo = { role, dimType: dim, fieldName: pickName(dim, role) };\n\n        if (dim === 'N') {\n            const c = card || (role === 'size' ? 4 : role === 'color' ? 3 : 5);\n            ch.card = c;\n            if (role === 'size') {\n                ch.levels = ['Low', 'Medium', 'High', 'Critical', 'Extreme'].slice(0, c);\n            } else if (c > 30) {\n                ch.levels = genRandomNames(c, cSeed);\n                cSeed += 100;\n            } else {\n                ch.levels = genCategories(CAT_SEMANTICS[cIdx % CAT_SEMANTICS.length], c);\n            }\n            cIdx++;\n        }\n\n        if (dim === 'T') {\n            ch.dates = genDates(effectiveN, T_START_YEARS[tIdx % T_START_YEARS.length]);\n            tIdx++;\n        }\n\n        channels.push(ch);\n    }\n\n    return channels;\n}\n\n/** Generate a single field value for row `i`. */\nfunction genValue(\n    ch: ChannelInfo, i: number, entry: MatrixEntry, rand: () => number,\n): any {\n    switch (ch.dimType) {\n        case 'Q': {\n            if (entry.hugeRange && ch.role === 'size')\n                return Math.round(1e3 + rand() * 1e9);\n            return Math.round(rand() * 1000) / 10;\n        }\n        case 'T':\n            return ch.dates![i % ch.dates!.length];\n        case 'N':\n            return ch.levels![i % ch.levels!.length];\n    }\n}\n\n/** Generate data for C×C grid mode (cross-product, ~70 % occupancy). */\nfunction genGridData(\n    channels: ChannelInfo[], rand: () => number,\n): Record<string, any>[] {\n    const xCh = channels.find(c => c.role === 'x')!;\n    const yCh = channels.find(c => c.role === 'y')!;\n    const extras = channels.filter(c => c.role !== 'x' && c.role !== 'y');\n    const data: Record<string, any>[] = [];\n\n    for (const xVal of xCh.levels!) {\n        for (const yVal of yCh.levels!) {\n            if (rand() > 0.3) {\n                const row: Record<string, any> = {\n                    [xCh.fieldName]: xVal,\n                    [yCh.fieldName]: yVal,\n                };\n                for (const ch of extras) {\n                    if (ch.dimType === 'Q') row[ch.fieldName] = Math.round(100 + rand() * 900);\n                    else if (ch.dimType === 'N') row[ch.fieldName] = ch.levels![Math.floor(rand() * ch.levels!.length)];\n                }\n                data.push(row);\n            }\n        }\n    }\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Title & tags\n// ---------------------------------------------------------------------------\n\nfunction buildTitle(entry: MatrixEntry): string {\n    const xLabel = entry.x === 'N' && entry.xCard ? `N(${entry.xCard})` : entry.x;\n    const yLabel = entry.y === 'N' && entry.yCard ? `N(${entry.yCard})` : entry.y;\n    const parts = [`${xLabel}×${yLabel}`];\n\n    const extras: string[] = [];\n    if (entry.color) {\n        extras.push(`color(${entry.color === 'N' ? `N,${entry.colorCard || 3}` : entry.color})`);\n    }\n    if (entry.size) {\n        extras.push(`size(${entry.size === 'N' ? `N,${entry.sizeCard || 4}` : entry.size})`);\n    }\n    if (extras.length) parts.push('+' + extras.join('+'));\n\n    if (entry.hugeRange) parts.push('hugeRange');\n\n    if (entry.n === 0)   parts.push('grid');\n    else                 parts.push(`(${entry.n} ${entry.n === 1 ? 'pt' : 'pts'})`);\n\n    return parts.join(' ');\n}\n\nfunction buildTags(entry: MatrixEntry, dataLen: number): string[] {\n    const tags: string[] = [];\n\n    // Dimension types present\n    const dims = new Set<DimType>([entry.x, entry.y]);\n    if (entry.color) dims.add(entry.color);\n    if (entry.size)  dims.add(entry.size);\n    if (dims.has('Q')) tags.push('quantitative');\n    if (dims.has('T')) tags.push('temporal');\n    if (dims.has('N')) tags.push('nominal');\n\n    // Channel presence\n    if (entry.color) tags.push('color');\n    if (entry.size)  tags.push('size');\n    if (entry.color === 'Q' || entry.color === 'T') tags.push('continuous-color');\n\n    // Scale\n    const n = dataLen;\n    if (n <= 25) tags.push('small');\n    else if (n <= 100) tags.push('medium');\n    else { tags.push('large'); tags.push('scaling'); }\n\n    if (entry.extraTags) tags.push(...entry.extraTags);\n\n    return [...new Set(tags)];\n}\n\n// ---------------------------------------------------------------------------\n// Matrix entry → TestCase\n// ---------------------------------------------------------------------------\n\nfunction matrixToTestCase(entry: MatrixEntry, rand: () => number): TestCase {\n    const channels = buildChannels(entry);\n\n    const isGrid = entry.x === 'N' && entry.y === 'N' && entry.n === 0;\n\n    // Generate data\n    let data: Record<string, any>[];\n    if (isGrid) {\n        data = genGridData(channels, rand);\n    } else {\n        data = Array.from({ length: entry.n }, (_, i) => {\n            const row: Record<string, any> = {};\n            for (const ch of channels) row[ch.fieldName] = genValue(ch, i, entry, rand);\n            return row;\n        });\n    }\n\n    // Build fields, metadata, encodingMap\n    const fields = channels.map(ch => makeField(ch.fieldName));\n\n    const typeMap: Record<DimType, Type> = { Q: Type.Number, T: Type.Date, N: Type.String };\n    const semMap: Record<DimType, string> = { Q: 'Quantity', T: 'Date', N: 'Category' };\n\n    const metadata: Record<string, { type: Type; semanticType: string; levels: any[] }> = {};\n    const encodingMap: Partial<Record<string, any>> = {};\n\n    for (const ch of channels) {\n        let semanticType = semMap[ch.dimType];\n        if (ch.role === 'size' && ch.dimType === 'N') semanticType = 'Rank';\n        metadata[ch.fieldName] = {\n            type: typeMap[ch.dimType],\n            semanticType,\n            levels: ch.levels || [],\n        };\n        encodingMap[ch.role] = makeEncodingItem(ch.fieldName);\n    }\n\n    return {\n        title: buildTitle(entry),\n        description: entry.desc || buildTitle(entry),\n        tags: buildTags(entry, data.length),\n        chartType: 'Scatter Plot',\n        data,\n        fields,\n        metadata,\n        encodingMap,\n    };\n}\n\n// ============================================================================\n// Public exports\n// ============================================================================\n\nexport function genScatterTests(): TestCase[] {\n    const rand = seededRandom(42);\n    return SCATTER_MATRIX.map(entry => matrixToTestCase(entry, rand));\n}\n\n// ============================================================================\n// Regression Tests  (not matrix-driven)\n// ============================================================================\n\nexport function genRegressionTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(55);\n\n    // 1. Basic regression (quant × quant)\n    {\n        const n = 40;\n        const data = Array.from({ length: n }, () => {\n            const x = 10 + rand() * 80;\n            return { Hours: Math.round(x * 10) / 10, Score: Math.round(20 + x * 0.8 + (rand() - 0.5) * 30) };\n        });\n        tests.push({\n            title: 'Basic regression (40 pts)',\n            description: 'Hours vs Score — simple linear trend',\n            tags: ['quantitative', 'small'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Hours'), makeField('Score')],\n            metadata: {\n                Hours: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Hours'), y: makeEncodingItem('Score') },\n        });\n    }\n\n    // 2. Regression with color (grouped lines)\n    {\n        const groups = ['Male', 'Female'];\n        const data: any[] = [];\n        for (const g of groups) {\n            const offset = g === 'Male' ? 5 : -5;\n            for (let i = 0; i < 30; i++) {\n                const x = 10 + rand() * 80;\n                data.push({\n                    Experience: Math.round(x * 10) / 10,\n                    Salary: Math.round(30 + x * 0.6 + offset + (rand() - 0.5) * 20),\n                    Gender: g,\n                });\n            }\n        }\n        tests.push({\n            title: 'Regression + Color (2 groups)',\n            description: '60 points — separate regression per gender',\n            tags: ['quantitative', 'color', 'medium'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Experience'), makeField('Salary'), makeField('Gender')],\n            metadata: {\n                Experience: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Salary: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('Experience'), y: makeEncodingItem('Salary'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    // 3. Regression with 4 color groups\n    {\n        const regions = ['North', 'South', 'East', 'West'];\n        const data: any[] = [];\n        const offsets: Record<string, number> = { North: 10, South: -5, East: 3, West: -8 };\n        const slopes: Record<string, number> = { North: 0.7, South: 0.5, East: 0.9, West: 0.4 };\n        for (const r of regions) {\n            for (let i = 0; i < 25; i++) {\n                const x = 5 + rand() * 90;\n                data.push({\n                    Advertising: Math.round(x * 10) / 10,\n                    Revenue: Math.round(offsets[r] + x * slopes[r] + (rand() - 0.5) * 15),\n                    Region: r,\n                });\n            }\n        }\n        tests.push({\n            title: 'Regression + Color (4 groups)',\n            description: '100 points — separate regression per region with distinct slopes',\n            tags: ['quantitative', 'color', 'medium'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Advertising'), makeField('Revenue'), makeField('Region')],\n            metadata: {\n                Advertising: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n            },\n            encodingMap: { x: makeEncodingItem('Advertising'), y: makeEncodingItem('Revenue'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    // 4. Regression with 6 color groups (many categories)\n    {\n        const subjects = ['Math', 'Science', 'English', 'History', 'Art', 'Music'];\n        const data: any[] = [];\n        const baseIntercepts = [15, 25, 20, 10, 30, 5];\n        const baseSlopes = [0.8, 0.6, 0.5, 0.7, 0.3, 0.9];\n        for (let si = 0; si < subjects.length; si++) {\n            for (let i = 0; i < 20; i++) {\n                const x = 10 + rand() * 80;\n                data.push({\n                    StudyHours: Math.round(x * 10) / 10,\n                    ExamScore: Math.round(baseIntercepts[si] + x * baseSlopes[si] + (rand() - 0.5) * 18),\n                    Subject: subjects[si],\n                });\n            }\n        }\n        tests.push({\n            title: 'Regression + Color (6 groups)',\n            description: '120 points — separate regression per subject',\n            tags: ['quantitative', 'color', 'large'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('StudyHours'), makeField('ExamScore'), makeField('Subject')],\n            metadata: {\n                StudyHours: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                ExamScore: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Subject: { type: Type.String, semanticType: 'Category', levels: subjects },\n            },\n            encodingMap: { x: makeEncodingItem('StudyHours'), y: makeEncodingItem('ExamScore'), color: makeEncodingItem('Subject') },\n        });\n    }\n\n    // 5. Regression with 3 color groups + size encoding\n    {\n        const tiers = ['Budget', 'Mid-Range', 'Premium'];\n        const data: any[] = [];\n        const tierOffsets = [5, 20, 40];\n        const tierSlopes = [0.3, 0.5, 0.8];\n        for (let ti = 0; ti < tiers.length; ti++) {\n            for (let i = 0; i < 30; i++) {\n                const x = 10 + rand() * 85;\n                const weight = Math.round(50 + rand() * 150);\n                data.push({\n                    EngineSize: Math.round(x * 10) / 10,\n                    Horsepower: Math.round(tierOffsets[ti] + x * tierSlopes[ti] + (rand() - 0.5) * 12),\n                    Tier: tiers[ti],\n                    Weight: weight,\n                });\n            }\n        }\n        tests.push({\n            title: 'Regression + Color (3 groups) + Size',\n            description: '90 points — regression per tier with weight as size',\n            tags: ['quantitative', 'color', 'size', 'medium'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('EngineSize'), makeField('Horsepower'), makeField('Tier'), makeField('Weight')],\n            metadata: {\n                EngineSize: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Horsepower: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Tier: { type: Type.String, semanticType: 'Category', levels: tiers },\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('EngineSize'),\n                y: makeEncodingItem('Horsepower'),\n                color: makeEncodingItem('Tier'),\n                size: makeEncodingItem('Weight'),\n            },\n        });\n    }\n\n    // 6. Logarithmic regression\n    {\n        const n = 50;\n        const data = Array.from({ length: n }, () => {\n            const x = 1 + rand() * 99;  // avoid log(0)\n            return { Investment: Math.round(x * 10) / 10, Returns: Math.round(10 * Math.log(x) + 5 + (rand() - 0.5) * 8) };\n        });\n        tests.push({\n            title: 'Logarithmic regression (50 pts)',\n            description: 'Investment vs Returns — log trend',\n            tags: ['quantitative', 'small', 'log'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Investment'), makeField('Returns')],\n            metadata: {\n                Investment: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Returns: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Investment'), y: makeEncodingItem('Returns') },\n            chartProperties: { regressionMethod: 'log' },\n        });\n    }\n\n    // 7. Quadratic regression\n    {\n        const n = 60;\n        const data = Array.from({ length: n }, () => {\n            const x = -10 + rand() * 20;\n            const y = 0.5 * x * x - 2 * x + 3 + (rand() - 0.5) * 6;\n            return { Position: Math.round(x * 10) / 10, Height: Math.round(y * 10) / 10 };\n        });\n        tests.push({\n            title: 'Quadratic regression (60 pts)',\n            description: 'Parabolic data — quad fit',\n            tags: ['quantitative', 'medium', 'quad'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Position'), makeField('Height')],\n            metadata: {\n                Position: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Position'), y: makeEncodingItem('Height') },\n            chartProperties: { regressionMethod: 'quad' },\n        });\n    }\n\n    // 8. Polynomial regression (order 4) with color\n    {\n        const groups = ['Group A', 'Group B', 'Group C'];\n        const data: any[] = [];\n        for (const g of groups) {\n            const shift = groups.indexOf(g) * 3;\n            for (let i = 0; i < 30; i++) {\n                const x = -5 + rand() * 10;\n                const y = shift + 0.05 * Math.pow(x, 3) - 0.3 * x * x + x + 5 + (rand() - 0.5) * 4;\n                data.push({\n                    Input: Math.round(x * 10) / 10,\n                    Output: Math.round(y * 10) / 10,\n                    Category: g,\n                });\n            }\n        }\n        tests.push({\n            title: 'Poly regression (3 groups, order 4)',\n            description: '90 points — cubic-ish data with poly(4) fit per group',\n            tags: ['quantitative', 'color', 'medium', 'poly'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Input'), makeField('Output'), makeField('Category')],\n            metadata: {\n                Input: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Output: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Category: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('Input'), y: makeEncodingItem('Output'), color: makeEncodingItem('Category') },\n            chartProperties: { regressionMethod: 'poly', polyOrder: 4 },\n        });\n    }\n\n    // 9. Exponential regression\n    {\n        const n = 45;\n        const data = Array.from({ length: n }, () => {\n            const x = rand() * 5;\n            const y = 2 * Math.exp(0.4 * x) + (rand() - 0.5) * 3;\n            return { Time: Math.round(x * 10) / 10, Growth: Math.round(Math.max(0.1, y) * 10) / 10 };\n        });\n        tests.push({\n            title: 'Exponential regression (45 pts)',\n            description: 'Time vs Growth — exponential trend',\n            tags: ['quantitative', 'small', 'exp'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Time'), makeField('Growth')],\n            metadata: {\n                Time: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Growth: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Time'), y: makeEncodingItem('Growth') },\n            chartProperties: { regressionMethod: 'exp' },\n        });\n    }\n\n    // 10. Power regression with 2 color groups\n    {\n        const classes = ['Species A', 'Species B'];\n        const data: any[] = [];\n        for (const cls of classes) {\n            const scale = cls === 'Species A' ? 1.5 : 0.8;\n            const exp = cls === 'Species A' ? 0.6 : 0.8;\n            for (let i = 0; i < 30; i++) {\n                const x = 1 + rand() * 50;\n                const y = scale * Math.pow(x, exp) + (rand() - 0.5) * 3;\n                data.push({\n                    BodyMass: Math.round(x * 10) / 10,\n                    MetabolicRate: Math.round(Math.max(0.1, y) * 10) / 10,\n                    Species: cls,\n                });\n            }\n        }\n        tests.push({\n            title: 'Power regression + Color (2 groups)',\n            description: '60 points — allometric scaling per species',\n            tags: ['quantitative', 'color', 'medium', 'pow'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('BodyMass'), makeField('MetabolicRate'), makeField('Species')],\n            metadata: {\n                BodyMass: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                MetabolicRate: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Species: { type: Type.String, semanticType: 'Category', levels: classes },\n            },\n            encodingMap: { x: makeEncodingItem('BodyMass'), y: makeEncodingItem('MetabolicRate'), color: makeEncodingItem('Species') },\n            chartProperties: { regressionMethod: 'pow' },\n        });\n    }\n\n    return tests;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/semantic-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Semantic Context Test Cases\n *\n * Each test demonstrates how semantic type annotations improve chart output\n * via the field-context pipeline (vlApplyFieldContext).\n *\n * Every test includes a description explaining what happens WITHOUT the\n * semantic annotation so developers can see the importance of each property.\n */\n\nimport { Type } from '../../../data/types';\nimport type { SemanticAnnotation } from '../core/field-semantics';\nimport { TestCase, makeField, makeEncodingItem } from './types';\n\n// ============================================================================\n// Shared helper data\n// ============================================================================\n\nconst CITIES = ['Seattle', 'Austin', 'Boston', 'Denver', 'Miami'];\nconst MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n                'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst TEAMS  = ['Alpha', 'Beta', 'Gamma', 'Delta'];\n\nfunction seeded(seed: number) {\n    let s = seed;\n    return () => { s = (s * 16807 + 0) % 2147483647; return s / 2147483647; };\n}\n\n// ============================================================================\n// 1. Revenue formatting  →  axis.format / axis.labelExpr\n//    Semantic type: \"Revenue\"  →  currency format ($1.2M)\n//\n//    WITHOUT this annotation:\n//      Axis labels show raw numbers: 1200000, 2300000, 3500000\n//      No currency symbol, no abbreviation — hard to read large values.\n//\n//    WITH \"Revenue\":\n//      Axis labels show: $1.2M, $2.3M, $3.5M\n//      Currency prefix ($) + SI abbreviation via format + labelExpr.\n// ============================================================================\n\nfunction genRevenueFormatTest(): TestCase {\n    const rand = seeded(42);\n    const data = CITIES.map(city => ({\n        city,\n        revenue: Math.round(500000 + rand() * 4500000),\n    }));\n\n    return {\n        title: 'Revenue Formatting ($)',\n        description:\n            'Semantic type \"Revenue\" adds currency prefix ($) and SI abbreviation to axis labels. ' +\n            'WITHOUT this: axis would show raw numbers like 1200000.',\n        tags: ['semantic', 'format', 'currency', 'revenue'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('city'), makeField('revenue')],\n        metadata: {\n            city:    { type: Type.String, semanticType: 'City',    levels: CITIES },\n            revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('city'),\n            y: makeEncodingItem('revenue'),\n        },\n    };\n}\n\n// ============================================================================\n// 2. Percentage formatting + nice=false\n//    Semantic type: \"Percentage\"  →  \".1%\" format, nice: false\n//\n//    WITHOUT this annotation:\n//      Values 0.72, 0.85 shown as plain decimals on axis.\n//      Axis range may extend beyond 1.0 (e.g., to 1.2) due to nice rounding.\n//\n//    WITH \"Percentage\":\n//      Axis labels show \"72%\", \"85%\".\n//      nice=false prevents axis from extending past 100%.\n// ============================================================================\n\nfunction genPercentageFormatTest(): TestCase {\n    const rand = seeded(99);\n    const categories = ['Marketing', 'Sales', 'Engineering', 'Support', 'Design', 'HR'];\n    const data = categories.map(dept => ({\n        department: dept,\n        completion_rate: Math.round((0.40 + rand() * 0.58) * 100) / 100,\n    }));\n\n    return {\n        title: 'Percentage Formatting (%)',\n        description:\n            'Semantic type \"Percentage\" formats axis as \"72%\" instead of 0.72, ' +\n            'and sets nice=false so axis doesn\\'t extend past 100%. ' +\n            'WITHOUT this: axis shows decimal fractions and may overshoot to 1.2.',\n        tags: ['semantic', 'format', 'percentage', 'nice'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('department'), makeField('completion_rate')],\n        metadata: {\n            department:      { type: Type.String, semanticType: 'Category',   levels: categories },\n            completion_rate: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            completion_rate: { semanticType: 'Percentage', intrinsicDomain: [0, 1] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('department'),\n            y: makeEncodingItem('completion_rate'),\n        },\n    };\n}\n\n// ============================================================================\n// 3. Domain constraint + Tick constraint (Rating [1,5])\n//    Semantic type: { semanticType: \"Rating\", intrinsicDomain: [1, 5] }\n//      → scale.domain = [1, 5]\n//      → axis.values = [1, 2, 3, 4, 5]  (integer ticks only)\n//\n//    WITHOUT this annotation:\n//      Axis auto-scales to data range (e.g., 2.3–4.7) — partial range.\n//      Tick marks at fractional values (2.5, 3.0, 3.5) — meaningless for ratings.\n//\n//    WITH \"Rating\" + intrinsicDomain:\n//      Full 1–5 range always visible; only integers 1,2,3,4,5 on axis.\n// ============================================================================\n\nfunction genRatingDomainTest(): TestCase {\n    const rand = seeded(77);\n    const products = ['Widget A', 'Widget B', 'Widget C', 'Widget D', 'Widget E',\n                      'Widget F', 'Widget G', 'Widget H'];\n    const data = products.map(p => ({\n        product: p,\n        rating: Math.round((2.0 + rand() * 2.8) * 10) / 10,\n        reviews: Math.round(10 + rand() * 490),\n    }));\n\n    return {\n        title: 'Rating Domain [1–5] & Integer Ticks',\n        description:\n            'Enriched annotation { semanticType: \"Rating\", intrinsicDomain: [1,5] } ' +\n            'pins the axis to 1–5 with integer-only ticks. ' +\n            'WITHOUT this: axis auto-scales to data range (e.g., 2.3–4.7) ' +\n            'and shows fractional tick marks like 2.5, 3.5.',\n        tags: ['semantic', 'domain', 'ticks', 'rating'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('product'), makeField('rating'), makeField('reviews')],\n        metadata: {\n            product: { type: Type.String, semanticType: 'Category', levels: products },\n            rating:  { type: Type.Number, semanticType: 'Rating',   levels: [] },\n            reviews: { type: Type.Number, semanticType: 'Count',    levels: [] },\n        },\n        // Enriched annotation for rating — provides intrinsic domain\n        semanticAnnotations: {\n            rating: { semanticType: 'Rating', intrinsicDomain: [1, 5] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('reviews'),\n            y: makeEncodingItem('rating'),\n        },\n    };\n}\n\n// ============================================================================\n// 4. Reversed axis (Rank)\n//    Semantic type: \"Rank\"  →  scale.reverse = true\n//\n//    WITHOUT this annotation:\n//      Rank 1 appears at the BOTTOM of the y-axis (lowest numeric value).\n//      Visually misleading — the \"best\" team appears lowest on the chart.\n//\n//    WITH \"Rank\":\n//      Rank 1 at TOP of y-axis. Visual position matches intuitive ranking.\n// ============================================================================\n\nfunction genRankReversedTest(): TestCase {\n    const rand = seeded(55);\n    const data: Record<string, any>[] = [];\n    for (const team of TEAMS) {\n        for (let m = 0; m < 6; m++) {\n            data.push({\n                month: MONTHS[m],\n                team,\n                rank: Math.ceil(rand() * TEAMS.length),\n            });\n        }\n    }\n\n    return {\n        title: 'Rank Reversed Axis',\n        description:\n            'Semantic type \"Rank\" reverses the y-axis so rank 1 (best) appears at the TOP. ' +\n            'WITHOUT this: rank 1 sits at the bottom — first place looks like last place.',\n        tags: ['semantic', 'reversed', 'rank'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('month'), makeField('team'), makeField('rank')],\n        metadata: {\n            month: { type: Type.String, semanticType: 'Month',    levels: MONTHS.slice(0, 6) },\n            team:  { type: Type.String, semanticType: 'Category', levels: TEAMS },\n            rank:  { type: Type.Number, semanticType: 'Rank',     levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('month'),\n            y:     makeEncodingItem('rank'),\n            color: makeEncodingItem('team'),\n        },\n    };\n}\n\n// ============================================================================\n// 5. Scale type — log scale for Population\n//    Semantic type: \"Population\"  →  scale.type = \"log\"\n//    Only triggers when data spans ≥ 4 orders of magnitude (10,000×)\n//    AND the semantic type is in the allow-list (Population, GDP, etc.)\n//\n//    WITHOUT this annotation:\n//      Linear scale compresses small settlements into an invisible band\n//      while megacities dominate. Impossible to compare across 4+ orders.\n//\n//    WITH \"Population\":\n//      Log scale spreads values evenly — hamlet (500) and megacity (10M)\n//      are both clearly visible and comparable.\n// ============================================================================\n\nfunction genPopulationLogScaleTest(): TestCase {\n    // 12 places spanning ~20,000× (500 to 10M) to exceed the 10,000× threshold\n    const places = [\n        { place: 'Hamlet A',     population: 500,       area_km2: 1 },\n        { place: 'Hamlet B',     population: 1200,      area_km2: 3 },\n        { place: 'Village A',    population: 3500,      area_km2: 10 },\n        { place: 'Village B',    population: 8000,      area_km2: 18 },\n        { place: 'Small Town',   population: 22000,     area_km2: 40 },\n        { place: 'Town',         population: 65000,     area_km2: 80 },\n        { place: 'Small City',   population: 180000,    area_km2: 150 },\n        { place: 'City',         population: 520000,    area_km2: 300 },\n        { place: 'Large City',   population: 1400000,   area_km2: 550 },\n        { place: 'Metro A',     population: 3200000,   area_km2: 900 },\n        { place: 'Metro B',     population: 5800000,   area_km2: 1400 },\n        { place: 'Megacity',     population: 10000000,  area_km2: 2500 },\n    ];\n\n    return {\n        title: 'Population Log Scale (≥10,000× span)',\n        description:\n            'Semantic type \"Population\" applies log scale when data spans ≥ 4 orders ' +\n            'of magnitude (500 to 10M = 20,000×). Only triggers for allow-listed types. ' +\n            'WITHOUT this: linear scale compresses small values into an invisible band.',\n        tags: ['semantic', 'scaleType', 'log', 'population'],\n        chartType: 'Scatter Plot',\n        data: places,\n        fields: [makeField('place'), makeField('population'), makeField('area_km2')],\n        metadata: {\n            place:      { type: Type.String, semanticType: 'Category',   levels: places.map(p => p.place) },\n            population: { type: Type.Number, semanticType: 'Population', levels: [] },\n            area_km2:   { type: Type.Number, semanticType: 'Quantity',   levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('area_km2'),\n            y: makeEncodingItem('population'),\n        },\n    };\n}\n\n// ============================================================================\n// 6. Interpolation — monotone for Temperature\n//    Semantic type: \"Temperature\"  →  mark.interpolate = \"monotone\"\n//    Also adds \"°C\" suffix via format → labelExpr.\n//\n//    WITHOUT this annotation:\n//      Default linear interpolation creates jagged sawtooth lines between\n//      data points. No unit suffix on axis.\n//\n//    WITH \"Temperature\":\n//      Smooth monotone interpolation preserves local extrema without\n//      overshooting (no false dips below min or above max between points).\n//      Axis labels show \"15°C\", \"22°C\" etc.\n// ============================================================================\n\nfunction genTemperatureInterpolationTest(): TestCase {\n    const data: Record<string, any>[] = [];\n    // Two cities with different seasonal patterns\n    const seattleTemps = [-1, 2, 6, 10, 14, 18, 22, 21, 17, 11, 5, 1];\n    const miamiTemps   = [20, 21, 23, 25, 27, 29, 30, 30, 29, 27, 24, 21];\n\n    for (let i = 0; i < 12; i++) {\n        data.push({ month: MONTHS[i], city: 'Seattle', temperature: seattleTemps[i] });\n        data.push({ month: MONTHS[i], city: 'Miami',   temperature: miamiTemps[i] });\n    }\n\n    return {\n        title: 'Temperature Interpolation (monotone + °C)',\n        description:\n            'Semantic type \"Temperature\" applies monotone interpolation for smooth curves ' +\n            'and adds \"°C\" suffix to axis labels. ' +\n            'WITHOUT this: jagged linear segments between points, no unit on axis.',\n        tags: ['semantic', 'interpolation', 'temperature', 'format'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('month'), makeField('city'), makeField('temperature')],\n        metadata: {\n            month:       { type: Type.String, semanticType: 'Month',       levels: MONTHS },\n            city:        { type: Type.String, semanticType: 'City',        levels: ['Seattle', 'Miami'] },\n            temperature: { type: Type.Number, semanticType: 'Temperature', levels: [] },\n        },\n        // Enriched annotation for temperature — unit drives suffix\n        semanticAnnotations: {\n            temperature: { semanticType: 'Temperature', unit: '°C' },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('month'),\n            y:     makeEncodingItem('temperature'),\n            color: makeEncodingItem('city'),\n        },\n    };\n}\n\n// ============================================================================\n// 7. Combined: Revenue + Percentage side by side\n//    Shows that different semantic types on y-axis produce different formatting\n//    even with the same chart template.\n//\n//    WITHOUT annotations:\n//      Both charts show plain numeric axis (0.72 and 3500000).\n//\n//    WITH annotations:\n//      Revenue chart: \"$3.5M\"   Percentage chart: \"72%\"\n// ============================================================================\n\nfunction genRevenueVsPercentTest(): TestCase {\n    const rand = seeded(31);\n    const data = CITIES.map(city => ({\n        city,\n        revenue: Math.round(1000000 + rand() * 4000000),\n        growth_rate: Math.round((0.02 + rand() * 0.28) * 1000) / 1000,\n    }));\n\n    return {\n        title: 'Revenue vs Growth Rate (dual semantics)',\n        description:\n            'Two numeric columns with different semantics on the same data. ' +\n            'Revenue gets \"$\" prefix + SI abbreviation; growth_rate gets \"%\" format. ' +\n            'WITHOUT annotations: both axes show plain numbers.',\n        tags: ['semantic', 'format', 'currency', 'percentage', 'dual'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('city'), makeField('revenue'), makeField('growth_rate')],\n        metadata: {\n            city:        { type: Type.String, semanticType: 'City',       levels: CITIES },\n            revenue:     { type: Type.Number, semanticType: 'Revenue',    levels: [] },\n            growth_rate: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            growth_rate: { semanticType: 'Percentage', intrinsicDomain: [0, 1] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('revenue'),\n            y:     makeEncodingItem('growth_rate'),\n            color: makeEncodingItem('city'),\n        },\n    };\n}\n\n// ============================================================================\n// 8. Score domain [0, 100] with tick constraint\n//    Enriched annotation: { semanticType: \"Score\", intrinsicDomain: [0, 100] }\n//      → scale.domain = [0, 100], axis.tickMinStep = 1\n//\n//    WITHOUT this:\n//      Axis may show 65–92 (auto-scaled to data) with arbitrary tick spacing.\n//\n//    WITH \"Score\" + intrinsicDomain:\n//      Full 0–100 range, giving context that 85 is \"85 out of 100\".\n// ============================================================================\n\nfunction genScoreDomainTest(): TestCase {\n    const rand = seeded(63);\n    const students = ['Alice', 'Bob', 'Carol', 'Dave', 'Eve', 'Frank', 'Grace', 'Hank'];\n    const data = students.map(s => ({\n        student: s,\n        exam_score: Math.round(55 + rand() * 40),\n        study_hours: Math.round(2 + rand() * 18),\n    }));\n\n    return {\n        title: 'Exam Score Domain [0–100]',\n        description:\n            'Enriched annotation { semanticType: \"Score\", intrinsicDomain: [0, 100] } ' +\n            'pins the axis to 0–100, giving full context. ' +\n            'WITHOUT this: axis auto-scales to data range (e.g., 58–94), ' +\n            'losing the \"out of 100\" context.',\n        tags: ['semantic', 'domain', 'score'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('student'), makeField('exam_score'), makeField('study_hours')],\n        metadata: {\n            student:    { type: Type.String, semanticType: 'Category', levels: students },\n            exam_score: { type: Type.Number, semanticType: 'Score',    levels: [] },\n            study_hours:{ type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        semanticAnnotations: {\n            exam_score: { semanticType: 'Score', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('student'),\n            y: makeEncodingItem('exam_score'),\n        },\n    };\n}\n\n// ============================================================================\n// 15. Rating bar chart — domain [1,5] should NOT extend to zero\n//     Semantic type: { semanticType: \"Rating\", intrinsicDomain: [1, 5] }\n//\n//     The key design question: should a bar chart of ratings include zero?\n//     Most default tools naively force zero on all bar charts. But Rating\n//     is a bounded scale [1, 5] — zero is outside the scale and wastes 20%\n//     of visual space while compressing the meaningful 1-5 differences.\n//\n//     The semantic domain constraint [1, 5] is authoritative and should\n//     clear any auto-computed zero:true from the zero-baseline heuristic.\n//\n//     WITHOUT semantic domain: bar starts at 0, compressing the 1-5 range\n//     WITH semantic domain [1,5]: bars span the full [1,5] range\n// ============================================================================\n\nfunction genRatingBarDomainTest(): TestCase {\n    const rand = seeded(501);\n    const restaurants = ['Sakura Sushi', 'Bella Pasta', 'Taco Loco',\n                         'Zen Noodle', 'Burger Joint', 'Le Bistro'];\n    const data = restaurants.map(r => ({\n        restaurant: r,\n        avg_rating: Math.round((2.5 + rand() * 2.3) * 10) / 10,\n    }));\n\n    return {\n        title: 'Rating Bar — Domain [1,5] vs Zero',\n        description:\n            'Bar chart of ratings with intrinsicDomain [1,5]. The semantic domain ' +\n            'should prevent zero-extension — bars span [1,5] not [0,5]. ' +\n            'WITHOUT this: bar chart forces zero, wasting 20% of space on impossible values.',\n        tags: ['semantic', 'domain', 'zero', 'rating', 'bar'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('restaurant'), makeField('avg_rating')],\n        metadata: {\n            restaurant: { type: Type.String, semanticType: 'Category', levels: restaurants },\n            avg_rating: { type: Type.Number, semanticType: 'Rating',   levels: [] },\n        },\n        semanticAnnotations: {\n            avg_rating: { semanticType: 'Rating', intrinsicDomain: [1, 5] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('restaurant'),\n            y: makeEncodingItem('avg_rating'),\n        },\n    };\n}\n\n// ============================================================================\n// 16. Revenue bar chart — zero baseline IS meaningful\n//     Semantic type: \"Revenue\" (zero-meaningful class)\n//\n//     Revenue is an additive measure where 0 = no revenue. Bar length from\n//     zero communicates proportional magnitude. Including zero is correct.\n//\n//     WITHOUT semantic type: VL may or may not include zero by default\n//     WITH \"Revenue\": zero:true ensures bars start at 0\n// ============================================================================\n\nfunction genRevenueBarZeroTest(): TestCase {\n    const rand = seeded(502);\n    const products = ['Widget A', 'Widget B', 'Widget C', 'Widget D', 'Widget E'];\n    const data = products.map(p => ({\n        product: p,\n        revenue: Math.round(80000 + rand() * 320000),\n    }));\n\n    return {\n        title: 'Revenue Bar — Zero Baseline',\n        description:\n            'Revenue is zero-meaningful: $0 = no revenue. Bar charts must start at zero ' +\n            'to preserve proportional bar length. ' +\n            'WITHOUT this: data-fit might show bars starting at $80K, exaggerating differences.',\n        tags: ['semantic', 'zero', 'revenue', 'bar'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('product'), makeField('revenue')],\n        metadata: {\n            product: { type: Type.String, semanticType: 'Category', levels: products },\n            revenue: { type: Type.Number, semanticType: 'Revenue',  levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('product'),\n            y: makeEncodingItem('revenue'),\n        },\n    };\n}\n\n// ============================================================================\n// 17. Temperature scatter — zero is arbitrary, should NOT include zero\n//     Semantic type: \"Temperature\" (zero-arbitrary class)\n//\n//     0°F / 0°C are arbitrary scale points, not physical absence.\n//     Including zero on a scatter plot of 60–95°F summer temps wastes the\n//     bottom 60% of the canvas.\n//\n//     WITHOUT semantic type: VL default may or may not include zero\n//     WITH \"Temperature\": zero:false, VL nice-rounds to clean bounds\n// ============================================================================\n\nfunction genTemperatureScatterZeroTest(): TestCase {\n    const rand = seeded(503);\n    const days = Array.from({ length: 20 }, (_, i) => `Day ${i + 1}`);\n    const data = days.map(d => ({\n        day: d,\n        high_temp: Math.round(65 + rand() * 30),\n        humidity: Math.round(30 + rand() * 50),\n    }));\n\n    return {\n        title: 'Temperature Scatter — No Zero',\n        description:\n            'Temperature zero (0°F/°C) is an arbitrary scale point. For data in 65–95°F, ' +\n            'including zero wastes 60% of the canvas. zero:false lets VL data-fit with ' +\n            'nice tick rounding. ' +\n            'WITHOUT this: chart might waste space including the irrelevant zero.',\n        tags: ['semantic', 'zero', 'temperature', 'scatter'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('day'), makeField('high_temp'), makeField('humidity')],\n        metadata: {\n            day:       { type: Type.String, semanticType: 'Category',    levels: days },\n            high_temp: { type: Type.Number, semanticType: 'Temperature', levels: [] },\n            humidity:  { type: Type.Number, semanticType: 'Percentage',  levels: [] },\n        },\n        semanticAnnotations: {\n            humidity: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('humidity'),\n            y: makeEncodingItem('high_temp'),\n        },\n    };\n}\n\n// ============================================================================\n// 18. Percentage line — snap-to-bound heuristic\n//     Semantic type: \"Percentage\" → intrinsicDomain [0, 100]\n//\n//     Uses snap-to-bound: if data approaches the theoretical endpoint\n//     (≥90% of max), the axis snaps to it. Data at 40–85% is below the\n//     snap threshold → axis data-fits. Data at 60–97% would snap to 100%.\n//     The zero-baseline contextual logic independently decides whether\n//     to include 0 (bar = yes, line = depends on proximity).\n// ============================================================================\n\nfunction genPercentageLineDomainTest(): TestCase {\n    const rand = seeded(504);\n    const weeks = Array.from({ length: 10 }, (_, i) => `Week ${i + 1}`);\n    const data = weeks.map(w => ({\n        week: w,\n        completion_rate: Math.round(40 + rand() * 45),\n    }));\n\n    return {\n        title: 'Percentage Line — Snap-to-Bound',\n        description:\n            'Completion rates (40–85%) with intrinsicDomain [0, 100]. Data max (85%) is ' +\n            'below the 90% snap threshold, so the axis data-fits rather than forcing 100%. ' +\n            'If data reached 97%, the axis would snap to 100% (stopping at 97% looks arbitrary).',\n        tags: ['semantic', 'domain', 'zero', 'percentage', 'line'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('week'), makeField('completion_rate')],\n        metadata: {\n            week:            { type: Type.String, semanticType: 'Category',   levels: weeks },\n            completion_rate: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            completion_rate: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('week'),\n            y: makeEncodingItem('completion_rate'),\n        },\n    };\n}\n\n// ============================================================================\n// Public generator\n// ============================================================================\n\nexport function genSemanticContextTests(): TestCase[] {\n    return [\n        genRevenueFormatTest(),\n        genPercentageFormatTest(),\n        genRatingDomainTest(),\n        genRankReversedTest(),\n        genPopulationLogScaleTest(),\n        genTemperatureInterpolationTest(),\n        genRevenueVsPercentTest(),\n        genScoreDomainTest(),\n        genProfitSignedCurrencyTest(),\n        genWeightUnitSuffixTest(),\n        genCountStepInterpolationTest(),\n        genLatitudeDomainClampTest(),\n        genPercentageChangeSignedTest(),\n        genMonthCanonicalOrderTest(),\n        genRatingBarDomainTest(),\n        genRevenueBarZeroTest(),\n        genTemperatureScatterZeroTest(),\n        genPercentageLineDomainTest(),\n        genDayOfWeekOrderTest(),\n        genYearFormatTest(),\n        genSentimentDivergingColorTest(),\n        genRevenueSequentialColorTest(),\n        genCorrelationDivergingTest(),\n        genNiceFalseScoreTest(),\n        // --- New tests (25–39) ---\n        genDurationUnitSuffixTest(),\n        genQuarterCanonicalOrderTest(),\n        genCostCurrencyFormatTest(),\n        genDirectionCompassOrderTest(),\n        genAgeGroupOrdinalTest(),\n        genBooleanColorTest(),\n        genLongitudeDomainClampTest(),\n        genIndexOrdinalTest(),\n        genPercentageWholeNumberTest(),\n        genScoreColorDivergingTest(),\n        genPriceEurCurrencyTest(),\n        genYearOrdinalDisambiguationTest(),\n        genProfitColorDivergingTest(),\n        genCountIntegerFormatTest(),\n        genUnregisteredTypeFallbackTest(),\n    ];\n}\n\n// ============================================================================\n// 9. Profit — signed currency format (+$120K / -$50K)\n//    Semantic type: \"Profit\"  →  signed-currency format class\n//\n//    WITHOUT this annotation:\n//      Axis shows raw numbers: 120000, -50000. No sign prefix on positive\n//      values, no currency symbol. Hard to tell gains from losses at a glance.\n//\n//    WITH \"Profit\":\n//      Axis labels show: +$120K, -$50K. Sign always visible, currency prefix.\n// ============================================================================\n\nfunction genProfitSignedCurrencyTest(): TestCase {\n    const rand = seeded(111);\n    const quarters = ['Q1-2024', 'Q2-2024', 'Q3-2024', 'Q4-2024',\n                      'Q1-2025', 'Q2-2025', 'Q3-2025', 'Q4-2025'];\n    const data = quarters.map(q => ({\n        quarter: q,\n        profit: Math.round((-200000 + rand() * 600000) / 1000) * 1000,\n    }));\n\n    return {\n        title: 'Profit Signed Currency (+$/-$)',\n        description:\n            'Semantic type \"Profit\" uses signed-currency format: \"+$120K\" / \"-$50K\". ' +\n            'Sign is always visible on positive values, making gains vs losses obvious. ' +\n            'WITHOUT this: raw numbers without sign prefix or currency symbol.',\n        tags: ['semantic', 'format', 'signed-currency', 'profit'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('quarter'), makeField('profit')],\n        metadata: {\n            quarter: { type: Type.String, semanticType: 'Category', levels: quarters },\n            profit:  { type: Type.Number, semanticType: 'Profit',   levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('quarter'),\n            y: makeEncodingItem('profit'),\n        },\n    };\n}\n\n// ============================================================================\n// 10. Weight with unit suffix (kg)\n//     Semantic type: \"Weight\" + unit: \"kg\"  →  \"72.5 kg\" on axis\n//\n//     WITHOUT this annotation:\n//       Axis shows bare numbers: 72.5, 85.0. No indication of unit.\n//       User has to look at column name to figure out what these numbers mean.\n//\n//     WITH \"Weight\" + unit:\n//       Axis labels show \"72.5 kg\", \"85.0 kg\". Unit is part of the label.\n// ============================================================================\n\nfunction genWeightUnitSuffixTest(): TestCase {\n    const rand = seeded(202);\n    const athletes = ['Chen', 'Maria', 'James', 'Yuki', 'Priya',\n                      'Lars', 'Fatima', 'Carlos', 'Anna', 'Kwame'];\n    const data = athletes.map(name => ({\n        athlete: name,\n        weight_kg: Math.round((55 + rand() * 50) * 10) / 10,\n        height_cm: Math.round(155 + rand() * 40),\n    }));\n\n    return {\n        title: 'Weight Unit Suffix (kg)',\n        description:\n            'Enriched annotation { semanticType: \"Weight\", unit: \"kg\" } appends \" kg\" ' +\n            'to axis labels. WITHOUT this: bare numbers with no unit context.',\n        tags: ['semantic', 'format', 'unit-suffix', 'weight'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('athlete'), makeField('weight_kg'), makeField('height_cm')],\n        metadata: {\n            athlete:   { type: Type.String, semanticType: 'Category', levels: athletes },\n            weight_kg: { type: Type.Number, semanticType: 'Weight',   levels: [] },\n            height_cm: { type: Type.Number, semanticType: 'Distance', levels: [] },\n        },\n        semanticAnnotations: {\n            weight_kg: { semanticType: 'Weight', unit: 'kg' },\n            height_cm: { semanticType: 'Distance', unit: 'cm' },\n        },\n        encodingMap: {\n            x: makeEncodingItem('height_cm'),\n            y: makeEncodingItem('weight_kg'),\n        },\n    };\n}\n\n// ============================================================================\n// 11. Count — step-after interpolation\n//     Semantic type: \"Count\"  →  interpolation = \"step-after\"\n//\n//     WITHOUT this annotation:\n//       Line chart connects counts with straight diagonal lines, implying\n//       gradual continuous change between data points.\n//\n//     WITH \"Count\":\n//       Step-after interpolation shows flat steps — count stays constant\n//       until the next event, then jumps. Accurate for discrete events.\n// ============================================================================\n\nfunction genCountStepInterpolationTest(): TestCase {\n    const data: Record<string, any>[] = [];\n    const weeks = ['Wk1', 'Wk2', 'Wk3', 'Wk4', 'Wk5', 'Wk6',\n                   'Wk7', 'Wk8', 'Wk9', 'Wk10', 'Wk11', 'Wk12'];\n    const bugCounts   = [3, 7, 12, 8, 15, 22, 18, 11, 9, 14, 6, 4];\n    const featureDone = [1, 2, 4, 6, 7, 8, 10, 13, 15, 16, 18, 20];\n\n    for (let i = 0; i < 12; i++) {\n        data.push({ week: weeks[i], metric: 'Bugs Filed',        count: bugCounts[i] });\n        data.push({ week: weeks[i], metric: 'Features Completed', count: featureDone[i] });\n    }\n\n    return {\n        title: 'Count Step-After Interpolation',\n        description:\n            'Semantic type \"Count\" uses step-after interpolation — count stays ' +\n            'constant then jumps at each data point (discrete events). ' +\n            'WITHOUT this: diagonal lines imply gradual change between weeks.',\n        tags: ['semantic', 'interpolation', 'count', 'step'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('week'), makeField('metric'), makeField('count')],\n        metadata: {\n            week:   { type: Type.String, semanticType: 'Category', levels: weeks },\n            metric: { type: Type.String, semanticType: 'Category', levels: ['Bugs Filed', 'Features Completed'] },\n            count:  { type: Type.Number, semanticType: 'Count',    levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('week'),\n            y:     makeEncodingItem('count'),\n            color: makeEncodingItem('metric'),\n        },\n    };\n}\n\n// ============================================================================\n// 12. Latitude — hard domain [-90, 90] with clamp\n//     Semantic type: \"Latitude\"  →  scale.domain = [-90, 90], clamp = true\n//\n//     WITHOUT this annotation:\n//       Axis auto-scales to data (e.g., 30–60). No indication these are\n//       geographic degrees. Axis could \"nice-round\" to 25–65.\n//\n//     WITH \"Latitude\":\n//       Full -90 to 90 range. Clamp prevents out-of-range rendering.\n//       Shows data in geographic context.\n// ============================================================================\n\nfunction genLatitudeDomainClampTest(): TestCase {\n    const cities = [\n        { city: 'Singapore',  latitude: 1.35,  gdp_per_capita: 65000 },\n        { city: 'Mumbai',     latitude: 19.08, gdp_per_capita: 7200 },\n        { city: 'Cairo',      latitude: 30.04, gdp_per_capita: 3900 },\n        { city: 'Istanbul',   latitude: 41.01, gdp_per_capita: 9500 },\n        { city: 'Paris',      latitude: 48.86, gdp_per_capita: 42000 },\n        { city: 'London',     latitude: 51.51, gdp_per_capita: 46000 },\n        { city: 'Moscow',     latitude: 55.76, gdp_per_capita: 11300 },\n        { city: 'Helsinki',   latitude: 60.17, gdp_per_capita: 49000 },\n        { city: 'Reykjavik',  latitude: 64.13, gdp_per_capita: 52000 },\n        { city: 'Tromsø',     latitude: 69.65, gdp_per_capita: 65000 },\n    ];\n\n    return {\n        title: 'Latitude Hard Domain [-90°, 90°]',\n        description:\n            'Semantic type \"Latitude\" pins axis to [-90, 90] with clamp=true ' +\n            '(hard physical domain). Shows where cities fall in global context. ' +\n            'WITHOUT this: axis auto-scales to data range (1–70), losing context.',\n        tags: ['semantic', 'domain', 'clamp', 'latitude', 'geographic'],\n        chartType: 'Scatter Plot',\n        data: cities,\n        fields: [makeField('city'), makeField('latitude'), makeField('gdp_per_capita')],\n        metadata: {\n            city:           { type: Type.String, semanticType: 'City',     levels: cities.map(c => c.city) },\n            latitude:       { type: Type.Number, semanticType: 'Latitude', levels: [] },\n            gdp_per_capita: { type: Type.Number, semanticType: 'Amount',   levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('gdp_per_capita'),\n            y: makeEncodingItem('latitude'),\n        },\n    };\n}\n\n// ============================================================================\n// 13. Percentage Change — signed percent (+12.3% / -5.1%)\n//     Semantic type: \"PercentageChange\"  →  signed-percent format\n//\n//     WITHOUT this annotation:\n//       Axis shows 0.12, -0.05 — no sign on positive, no % symbol.\n//       Hard to interpret at a glance.\n//\n//     WITH \"PercentageChange\":\n//       Axis shows \"+12.3%\", \"-5.1%\". Sign always visible, % suffix.\n// ============================================================================\n\nfunction genPercentageChangeSignedTest(): TestCase {\n    const rand = seeded(333);\n    const stocks = ['AAPL', 'GOOG', 'MSFT', 'AMZN', 'META',\n                    'TSLA', 'NVDA', 'AMD', 'NFLX', 'DIS'];\n    const data = stocks.map(s => ({\n        stock: s,\n        ytd_change: Math.round((-0.30 + rand() * 0.80) * 1000) / 1000,\n        market_cap_B: Math.round(50 + rand() * 2950),\n    }));\n\n    return {\n        title: 'Percentage Change (signed ±%)',\n        description:\n            'Semantic type \"PercentageChange\" uses signed-percent format: \"+12.3%\" / \"-5.1%\". ' +\n            'Sign is always visible, making gains and losses instantly clear. ' +\n            'WITHOUT this: raw decimals like 0.12 or -0.05 with no % symbol.',\n        tags: ['semantic', 'format', 'signed-percent', 'percentage-change'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('stock'), makeField('ytd_change'), makeField('market_cap_B')],\n        metadata: {\n            stock:        { type: Type.String, semanticType: 'Category',         levels: stocks },\n            ytd_change:   { type: Type.Number, semanticType: 'PercentageChange', levels: [] },\n            market_cap_B: { type: Type.Number, semanticType: 'Amount',           levels: [] },\n        },\n        semanticAnnotations: {\n            ytd_change: { semanticType: 'PercentageChange', intrinsicDomain: [-1, 1] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('stock'),\n            y: makeEncodingItem('ytd_change'),\n        },\n    };\n}\n\n// ============================================================================\n// 14. Month canonical ordering\n//     Semantic type: \"Month\" → ordinal sort order preserved\n//\n//     WITHOUT this annotation:\n//       Months sorted alphabetically: Apr, Aug, Dec, Feb, Jan, Jul...\n//       Completely wrong for temporal data.\n//\n//     WITH \"Month\":\n//       Canonical order: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec.\n// ============================================================================\n\nfunction genMonthCanonicalOrderTest(): TestCase {\n    const rand = seeded(444);\n    // Deliberately out of order in data to show sorting\n    const shuffledMonths = ['Mar', 'Nov', 'Jul', 'Jan', 'Sep', 'May',\n                            'Apr', 'Dec', 'Feb', 'Oct', 'Jun', 'Aug'];\n    const data = shuffledMonths.map(m => ({\n        month: m,\n        sales: Math.round(10000 + rand() * 40000),\n    }));\n\n    return {\n        title: 'Month Canonical Ordering',\n        description:\n            'Semantic type \"Month\" preserves calendar order (Jan→Dec) regardless ' +\n            'of data insertion order. ' +\n            'WITHOUT this: months sort alphabetically (Apr, Aug, Dec, Feb...).',\n        tags: ['semantic', 'ordering', 'month', 'canonical'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('month'), makeField('sales')],\n        metadata: {\n            month: { type: Type.String, semanticType: 'Month',    levels: shuffledMonths },\n            sales: { type: Type.Number, semanticType: 'Revenue',  levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('month'),\n            y: makeEncodingItem('sales'),\n        },\n    };\n}\n\n// ============================================================================\n// 19. Day-of-Week canonical ordering\n//     Semantic type: \"Day\" → canonical Mon–Sun order\n//\n//     WITHOUT this annotation:\n//       Day names sorted alphabetically: Fri, Mon, Sat, Sun, Thu, Tue, Wed.\n//       This destroys the weekly cycle.\n//\n//     WITH \"Day\":\n//       Canonical weekday order: Mon, Tue, Wed, Thu, Fri, Sat, Sun\n//       (or data-matching variant). ordinalSortOrder provides the domain.\n// ============================================================================\n\nfunction genDayOfWeekOrderTest(): TestCase {\n    const rand = seeded(555);\n    // Deliberately shuffled\n    const shuffledDays = ['Thu', 'Mon', 'Sat', 'Wed', 'Fri', 'Tue', 'Sun'];\n    const data = shuffledDays.map(d => ({\n        day: d,\n        visitors: Math.round(200 + rand() * 800),\n    }));\n\n    return {\n        title: 'Day-of-Week Canonical Order',\n        description:\n            'Semantic type \"Day\" preserves weekday order (Mon→Sun) regardless ' +\n            'of data encounter order. ' +\n            'WITHOUT this: days sort alphabetically (Fri, Mon, Sat...).',\n        tags: ['semantic', 'ordering', 'day', 'canonical'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('day'), makeField('visitors')],\n        metadata: {\n            day:      { type: Type.String, semanticType: 'Day',   levels: shuffledDays },\n            visitors: { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('day'),\n            y: makeEncodingItem('visitors'),\n        },\n    };\n}\n\n// ============================================================================\n// 20. Year integer format — no comma separator\n//     Semantic type: \"Year\" → format \"d\" (2024 not \"2,024\")\n//\n//     WITHOUT this annotation:\n//       Numeric years treated as generic numbers → formatted with thousands\n//       separator: \"2,024\" instead of \"2024\". Looks like a decimal value.\n//\n//     WITH \"Year\":\n//       Format class = 'integer', and the pipeline uses bare \"d\" format\n//       for years (without comma grouping). Axis reads: 2020, 2021, 2022...\n// ============================================================================\n\nfunction genYearFormatTest(): TestCase {\n    const years = [2018, 2019, 2020, 2021, 2022, 2023, 2024];\n    const rand = seeded(666);\n    const data = years.map(y => ({\n        year: y,\n        gdp_trillion: Math.round((18 + rand() * 8) * 100) / 100,\n    }));\n\n    return {\n        title: 'Year Format (no comma)',\n        description:\n            'Semantic type \"Year\" uses integer format without comma grouping: ' +\n            '\"2024\" not \"2,024\". ' +\n            'WITHOUT this: years shown as \"2,024\" with thousands separator.',\n        tags: ['semantic', 'format', 'year', 'integer'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('year'), makeField('gdp_trillion')],\n        metadata: {\n            year:         { type: Type.Number, semanticType: 'Year',    levels: years },\n            gdp_trillion: { type: Type.Number, semanticType: 'Amount',  levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('year'),\n            y: makeEncodingItem('gdp_trillion'),\n        },\n    };\n}\n\n// ============================================================================\n// 21. Sentiment — diverging color scheme\n//     Semantic type: \"Sentiment\" on color channel → diverging color scheme\n//     with midpoint at 0\n//\n//     WITHOUT this annotation:\n//       Color mapped to a generic sequential palette (e.g., viridis).\n//       Positive and negative sentiment look like arbitrary gradients,\n//       not intuitively split around a neutral center.\n//\n//     WITH \"Sentiment\":\n//       Diverging color scheme (e.g., redblue) centered on 0.\n//       Negative = one hue, positive = another, 0 = neutral white/grey.\n//       scale.domainMid = 0 ensures the midpoint is visually centered.\n// ============================================================================\n\nfunction genSentimentDivergingColorTest(): TestCase {\n    const rand = seeded(777);\n    const products = ['Widget A', 'Widget B', 'Gadget X', 'Gadget Y',\n                      'Tool M', 'Tool N', 'Part P', 'Part Q'];\n    const data = products.map(p => ({\n        product: p,\n        reviews: Math.round(50 + rand() * 450),\n        sentiment: Math.round((-0.8 + rand() * 1.6) * 100) / 100,\n    }));\n\n    return {\n        title: 'Sentiment Diverging Color',\n        description:\n            'Semantic type \"Sentiment\" on the color channel triggers a diverging ' +\n            'color scheme (redblue) with domainMid = 0. Negative sentiment gets ' +\n            'one hue, positive gets another, and zero is neutral. ' +\n            'WITHOUT this: generic sequential palette with no semantic midpoint.',\n        tags: ['semantic', 'colorScheme', 'diverging', 'sentiment'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('product'), makeField('reviews'), makeField('sentiment')],\n        metadata: {\n            product:   { type: Type.String, semanticType: 'Category',  levels: products },\n            reviews:   { type: Type.Number, semanticType: 'Count',     levels: [] },\n            sentiment: { type: Type.Number, semanticType: 'Sentiment', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('product'),\n            y: makeEncodingItem('reviews'),\n            color: makeEncodingItem('sentiment'),\n        },\n    };\n}\n\n// ============================================================================\n// 22. Revenue sequential color — quantitative color uses sequential scheme\n//     Semantic type: \"Revenue\" on color channel → sequential gold-green scheme\n//\n//     WITHOUT this annotation:\n//       Default sequential palette (viridis). Works but doesn't convey\n//       financial context.\n//\n//     WITH \"Revenue\":\n//       Financial-themed sequential scheme (goldgreen) automatically chosen\n//       for quantitative financial data. Warmer = higher revenue.\n// ============================================================================\n\nfunction genRevenueSequentialColorTest(): TestCase {\n    const rand = seeded(888);\n    const regions = ['North', 'South', 'East', 'West', 'Central'];\n    const data: Record<string, any>[] = [];\n    for (const region of regions) {\n        for (const q of ['Q1', 'Q2', 'Q3', 'Q4']) {\n            data.push({\n                region,\n                quarter: q,\n                revenue: Math.round(100000 + rand() * 900000),\n            });\n        }\n    }\n\n    return {\n        title: 'Revenue Sequential Color',\n        description:\n            'Semantic type \"Revenue\" on the color channel triggers a financial-themed ' +\n            'sequential scheme (goldgreen). Higher revenue → warmer color. ' +\n            'WITHOUT this: default viridis or generic palette with no financial connotation.',\n        tags: ['semantic', 'colorScheme', 'sequential', 'revenue'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('region'), makeField('quarter'), makeField('revenue')],\n        metadata: {\n            region:  { type: Type.String, semanticType: 'Category', levels: regions },\n            quarter: { type: Type.String, semanticType: 'Quarter',  levels: ['Q1', 'Q2', 'Q3', 'Q4'] },\n            revenue: { type: Type.Number, semanticType: 'Revenue',  levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('region'),\n            y: makeEncodingItem('revenue'),\n            color: makeEncodingItem('revenue'),\n        },\n    };\n}\n\n// ============================================================================\n// 23. Correlation — diverging color + bounded domain [-1, 1]\n//     Semantic type: \"Correlation\" → domain [-1, 1], diverging color,\n//     clamped scale, signed-decimal format\n//\n//     WITHOUT this annotation:\n//       Color scale auto-fits to data range (e.g., [0.12, 0.89]).\n//       No diverging scheme, no fixed [-1,1] bounds, no midpoint centering.\n//\n//     WITH \"Correlation\":\n//       Domain clamped to [-1, 1], diverging color with midpoint at 0,\n//       signed-decimal format (+0.85 / -0.42). Full semantic context.\n// ============================================================================\n\nfunction genCorrelationDivergingTest(): TestCase {\n    const rand = seeded(999);\n    const vars = ['GDP', 'Unemployment', 'Inflation', 'Education', 'Health'];\n    const data: Record<string, any>[] = [];\n    for (let i = 0; i < vars.length; i++) {\n        for (let j = 0; j < vars.length; j++) {\n            const corr = i === j ? 1.0 : Math.round((-0.9 + rand() * 1.8) * 100) / 100;\n            data.push({\n                var_x: vars[i],\n                var_y: vars[j],\n                correlation: corr,\n            });\n        }\n    }\n\n    return {\n        title: 'Correlation Diverging + Domain',\n        description:\n            'Semantic type \"Correlation\" on color sets a diverging scheme with ' +\n            'midpoint 0 and domain [-1, 1]. Positive correlations appear in one hue, ' +\n            'negative in another. Domain is fixed to the mathematical bounds. ' +\n            'WITHOUT this: auto-fitted color domain, sequential palette, no midpoint.',\n        tags: ['semantic', 'colorScheme', 'diverging', 'domain', 'correlation'],\n        chartType: 'Heatmap',\n        data,\n        fields: [makeField('var_x'), makeField('var_y'), makeField('correlation')],\n        metadata: {\n            var_x:       { type: Type.String, semanticType: 'Category',    levels: vars },\n            var_y:       { type: Type.String, semanticType: 'Category',    levels: vars },\n            correlation: { type: Type.Number, semanticType: 'Correlation', levels: [] },\n        },\n        semanticAnnotations: {\n            correlation: { semanticType: 'Correlation', intrinsicDomain: [-1, 1] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('var_x'),\n            y: makeEncodingItem('var_y'),\n            color: makeEncodingItem('correlation'),\n        },\n    };\n}\n\n// ============================================================================\n// 24. Nice = false — bounded domain without nice rounding\n//     Semantic type: \"Score\" with domain [0, 100] → nice = false\n//\n//     WITHOUT nice = false:\n//       VL's \"nice\" rounding extends domain [0, 100] to [0, 120] or similar —\n//       wasting space and implying scores > 100 exist.\n//\n//     WITH nice = false (from bounded domainShape):\n//       Axis endpoints stick exactly to [0, 100]. No extension beyond the\n//       intrinsic bounds of the measurement scale.\n// ============================================================================\n\nfunction genNiceFalseScoreTest(): TestCase {\n    const rand = seeded(1010);\n    const students = ['Alice', 'Bob', 'Carol', 'Dave', 'Eve',\n                      'Frank', 'Grace', 'Heidi', 'Ivan', 'Judy'];\n    const data = students.map(s => ({\n        student: s,\n        math_score: Math.round(45 + rand() * 55),\n        science_score: Math.round(30 + rand() * 70),\n    }));\n\n    return {\n        title: 'Nice = false (Score [0-100])',\n        description:\n            'Score\\'s bounded domainShape sets nice = false so VL doesn\\'t ' +\n            'extend the axis beyond [0, 100]. Ticks stop at the intrinsic bounds. ' +\n            'WITHOUT nice = false: VL extends to [0, 120] — implying impossible scores.',\n        tags: ['semantic', 'nice', 'domain', 'score', 'bounded'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('student'), makeField('math_score'), makeField('science_score')],\n        metadata: {\n            student:       { type: Type.String, semanticType: 'Category', levels: students },\n            math_score:    { type: Type.Number, semanticType: 'Score',    levels: [] },\n            science_score: { type: Type.Number, semanticType: 'Score',    levels: [] },\n        },\n        semanticAnnotations: {\n            math_score:    { semanticType: 'Score', intrinsicDomain: [0, 100] },\n            science_score: { semanticType: 'Score', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('math_score'),\n            y: makeEncodingItem('science_score'),\n        },\n    };\n}\n\n// ============================================================================\n// 25. Duration with unit suffix — additive measure, \"min\" suffix\n//     Semantic type: \"Duration\" + unit: \"min\"  →  \"42 min\" on axis\n//\n//     Duration is an additive measure (durations sum to a total), open domain,\n//     meaningful zero (0 = no time elapsed), and uses unit-suffix format.\n//\n//     WITHOUT this annotation:\n//       Axis shows bare numbers: 42, 85. No time context.\n//       Zero might not be included in axis.\n//\n//     WITH \"Duration\" + unit:\n//       Axis labels show \"42 min\", \"85 min\". Zero baseline included.\n// ============================================================================\n\nfunction genDurationUnitSuffixTest(): TestCase {\n    const rand = seeded(2501);\n    const tasks = ['Setup', 'Build', 'Test', 'Review', 'Deploy',\n                   'Cleanup', 'Backup', 'Sync'];\n    const data = tasks.map(t => ({\n        task: t,\n        duration_min: Math.round(5 + rand() * 115),\n    }));\n\n    return {\n        title: 'Duration Unit Suffix (min)',\n        description:\n            'Semantic type \"Duration\" with unit \"min\" appends \" min\" to axis labels. ' +\n            'Duration is additive (total makes sense) with meaningful zero. ' +\n            'WITHOUT this: bare numbers with no time unit context.',\n        tags: ['semantic', 'format', 'unit-suffix', 'duration', 'zero'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('task'), makeField('duration_min')],\n        metadata: {\n            task:         { type: Type.String, semanticType: 'Category', levels: tasks },\n            duration_min: { type: Type.Number, semanticType: 'Duration', levels: [] },\n        },\n        semanticAnnotations: {\n            duration_min: { semanticType: 'Duration', unit: 'min' },\n        },\n        encodingMap: {\n            x: makeEncodingItem('task'),\n            y: makeEncodingItem('duration_min'),\n        },\n    };\n}\n\n// ============================================================================\n// 26. Quarter canonical order + cyclic behavior\n//     Semantic type: \"Quarter\" → ordinal sort Q1, Q2, Q3, Q4\n//\n//     Quarter is cyclic (Q4 wraps to Q1) and uses ordinal encoding.\n//     The canonical order ensures quarters appear in fiscal sequence.\n//\n//     WITHOUT this annotation:\n//       Quarters sorted alphabetically: Q1, Q2, Q3, Q4 happens to work\n//       but only by coincidence. Real datasets with \"Q4-2024\", \"Q1-2025\"\n//       would break. Also no cyclic semantics for wrap-around analysis.\n//\n//     WITH \"Quarter\":\n//       Guaranteed Q1→Q2→Q3→Q4 order. Cyclic flag enables wrap-around\n//       for cross-year comparisons.\n// ============================================================================\n\nfunction genQuarterCanonicalOrderTest(): TestCase {\n    const rand = seeded(2601);\n    // Deliberately shuffled quarters\n    const shuffledQuarters = ['Q3', 'Q1', 'Q4', 'Q2'];\n    const data: Record<string, any>[] = [];\n    for (const region of ['North', 'South', 'East']) {\n        for (const q of shuffledQuarters) {\n            data.push({\n                quarter: q,\n                region,\n                sales: Math.round(50000 + rand() * 200000),\n            });\n        }\n    }\n\n    return {\n        title: 'Quarter Canonical Order (Q1→Q4)',\n        description:\n            'Semantic type \"Quarter\" sorts Q1→Q2→Q3→Q4 in canonical order ' +\n            'regardless of data encounter order. Quarter is cyclic (Q4→Q1 wraps). ' +\n            'WITHOUT this: alphabetical order happens to work here, but no guarantee ' +\n            'for variant labels or cross-year data.',\n        tags: ['semantic', 'ordering', 'quarter', 'cyclic', 'canonical'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('quarter'), makeField('region'), makeField('sales')],\n        metadata: {\n            quarter: { type: Type.String, semanticType: 'Quarter',  levels: shuffledQuarters },\n            region:  { type: Type.String, semanticType: 'Category', levels: ['North', 'South', 'East'] },\n            sales:   { type: Type.Number, semanticType: 'Revenue',  levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('quarter'),\n            y:     makeEncodingItem('sales'),\n            color: makeEncodingItem('region'),\n        },\n    };\n}\n\n// ============================================================================\n// 27. Cost currency format — another currency type (additive)\n//     Semantic type: \"Cost\" → currency prefix ($) + SI abbreviation\n//\n//     Cost shares formatClass='currency' with Revenue/Amount but has\n//     aggRole='additive' — costs sum to a meaningful total.\n//\n//     WITHOUT this annotation:\n//       Axis shows raw numbers: 450000, 1200000. No $ symbol.\n//\n//     WITH \"Cost\":\n//       Axis labels show \"$450K\", \"$1.2M\". Currency + abbreviation.\n// ============================================================================\n\nfunction genCostCurrencyFormatTest(): TestCase {\n    const rand = seeded(2701);\n    const departments = ['Engineering', 'Marketing', 'Sales', 'Support', 'HR', 'Legal'];\n    const data = departments.map(d => ({\n        department: d,\n        annual_cost: Math.round(200000 + rand() * 1800000),\n    }));\n\n    return {\n        title: 'Cost Currency Format ($)',\n        description:\n            'Semantic type \"Cost\" uses currency format ($450K, $1.2M). ' +\n            'Cost is additive — department costs sum to total company cost. ' +\n            'WITHOUT this: plain numbers without currency context.',\n        tags: ['semantic', 'format', 'currency', 'cost'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('department'), makeField('annual_cost')],\n        metadata: {\n            department:  { type: Type.String, semanticType: 'Category', levels: departments },\n            annual_cost: { type: Type.Number, semanticType: 'Cost',     levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('department'),\n            y: makeEncodingItem('annual_cost'),\n        },\n    };\n}\n\n// ============================================================================\n// 28. Direction compass order + cyclic\n//     Semantic type: \"Direction\" → compass order N→NE→E→SE→S→SW→W→NW\n//\n//     Direction is cyclic (NW wraps to N) and uses ordinal/nominal encoding.\n//     The canonical order ensures compass directions appear in clockwise order.\n//\n//     WITHOUT this annotation:\n//       Directions sorted alphabetically: E, N, NE, NW, S, SE, SW, W.\n//       Completely wrong — geographic/compass ordering is destroyed.\n//\n//     WITH \"Direction\":\n//       Canonical clockwise order: N, NE, E, SE, S, SW, W, NW.\n// ============================================================================\n\nfunction genDirectionCompassOrderTest(): TestCase {\n    const rand = seeded(2801);\n    // Deliberately shuffled\n    const shuffledDirs = ['SW', 'N', 'E', 'NW', 'S', 'NE', 'W', 'SE'];\n    const data = shuffledDirs.map(d => ({\n        direction: d,\n        wind_speed: Math.round(5 + rand() * 45),\n    }));\n\n    return {\n        title: 'Direction Compass Order (N→NW)',\n        description:\n            'Semantic type \"Direction\" sorts compass directions in clockwise order ' +\n            '(N→NE→E→SE→S→SW→W→NW). Direction is cyclic (NW→N wraps). ' +\n            'WITHOUT this: alphabetical (E, N, NE, NW...) destroys geographic sense.',\n        tags: ['semantic', 'ordering', 'direction', 'cyclic', 'compass', 'canonical'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('direction'), makeField('wind_speed')],\n        metadata: {\n            direction:  { type: Type.String, semanticType: 'Direction', levels: shuffledDirs },\n            wind_speed: { type: Type.Number, semanticType: 'Quantity',  levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('direction'),\n            y: makeEncodingItem('wind_speed'),\n        },\n    };\n}\n\n// ============================================================================\n// 29. AgeGroup — binned ordinal with inherent order\n//     Semantic type: \"AgeGroup\" → ordinal encoding, sequential color\n//\n//     AgeGroup is a binned type: continuous ages discretized into ranges.\n//     Values have inherent order (18-24 < 25-34 < 35-44...) unlike\n//     pure nominal categories. Uses ordinal encoding.\n//\n//     WITHOUT this annotation:\n//       Age groups treated as nominal — no guaranteed order, potentially\n//       sorted alphabetically which breaks the natural sequence.\n//\n//     WITH \"AgeGroup\":\n//       Ordinal encoding preserves the range order. Color uses sequential\n//       scheme reflecting the ordered nature.\n// ============================================================================\n\nfunction genAgeGroupOrdinalTest(): TestCase {\n    const rand = seeded(2901);\n    const ageGroups = ['18-24', '25-34', '35-44', '45-54', '55-64', '65+'];\n    const data = ageGroups.map(ag => ({\n        age_group: ag,\n        population: Math.round(500000 + rand() * 2000000),\n        avg_income: Math.round(25000 + rand() * 75000),\n    }));\n\n    return {\n        title: 'AgeGroup Binned Ordinal',\n        description:\n            'Semantic type \"AgeGroup\" is a binned ordinal — age ranges have inherent ' +\n            'order (18-24 < 25-34 < ...). Uses ordinal encoding, not nominal. ' +\n            'WITHOUT this: treated as unordered categories, alphabetical sorting.',\n        tags: ['semantic', 'ordinal', 'binned', 'agegroup'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('age_group'), makeField('population'), makeField('avg_income')],\n        metadata: {\n            age_group:  { type: Type.String, semanticType: 'AgeGroup', levels: ageGroups },\n            population: { type: Type.Number, semanticType: 'Count',    levels: [] },\n            avg_income: { type: Type.Number, semanticType: 'Amount',   levels: [] },\n        },\n        semanticAnnotations: {\n            age_group: { semanticType: 'AgeGroup', sortOrder: ageGroups },\n        },\n        encodingMap: {\n            x: makeEncodingItem('age_group'),\n            y: makeEncodingItem('population'),\n        },\n    };\n}\n\n// ============================================================================\n// 30. Boolean on color — fixed domain, categorical color, 2 values\n//     Semantic type: \"Boolean\" → nominal encoding, fixed domain\n//\n//     Boolean has a fixed domainShape — only 2 values exist (True/False).\n//     Uses nominal encoding and categorical color scheme.\n//\n//     WITHOUT this annotation:\n//       Treated as generic string. No indication of the fixed 2-value nature.\n//\n//     WITH \"Boolean\":\n//       Fixed domain recognized. Categorical color with 2 distinct hues.\n// ============================================================================\n\nfunction genBooleanColorTest(): TestCase {\n    const rand = seeded(3001);\n    const data: Record<string, any>[] = [];\n    for (let i = 0; i < 30; i++) {\n        data.push({\n            customer_id: `C${i + 1}`,\n            purchase_amount: Math.round(20 + rand() * 480),\n            is_member: rand() > 0.5 ? 'True' : 'False',\n        });\n    }\n\n    return {\n        title: 'Boolean Color (True/False)',\n        description:\n            'Semantic type \"Boolean\" on color uses categorical scheme with ' +\n            'fixed 2-value domain. Ideal for binary classification display. ' +\n            'WITHOUT this: treated as generic string, no fixed-domain awareness.',\n        tags: ['semantic', 'color', 'boolean', 'categorical', 'fixed'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('customer_id'), makeField('purchase_amount'), makeField('is_member')],\n        metadata: {\n            customer_id:     { type: Type.String,  semanticType: 'ID',       levels: data.map(d => d.customer_id) },\n            purchase_amount: { type: Type.Number,  semanticType: 'Amount',   levels: [] },\n            is_member:       { type: Type.String,  semanticType: 'Boolean',  levels: ['True', 'False'] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('customer_id'),\n            y:     makeEncodingItem('purchase_amount'),\n            color: makeEncodingItem('is_member'),\n        },\n    };\n}\n\n// ============================================================================\n// 31. Longitude — hard domain [-180, 180] with clamp\n//     Semantic type: \"Longitude\" → scale.domain = [-180, 180], clamp = true\n//\n//     Mirrors the Latitude test (test 12) but for the horizontal coordinate.\n//     Longitude is a fixed geographic domain — values physically cannot\n//     exceed ±180°.\n//\n//     WITHOUT this annotation:\n//       Axis auto-scales to data range. No geographic context.\n//\n//     WITH \"Longitude\":\n//       Full -180 to 180 range. Clamp prevents out-of-range rendering.\n// ============================================================================\n\nfunction genLongitudeDomainClampTest(): TestCase {\n    const cities = [\n        { city: 'Tokyo',      longitude: 139.69, population_M: 13.96 },\n        { city: 'Delhi',      longitude:  77.21, population_M: 32.94 },\n        { city: 'London',     longitude:  -0.12, population_M:  9.00 },\n        { city: 'New York',   longitude: -74.01, population_M:  8.34 },\n        { city: 'São Paulo',  longitude: -46.63, population_M: 12.33 },\n        { city: 'Sydney',     longitude: 151.21, population_M:  5.31 },\n        { city: 'Cairo',      longitude:  31.24, population_M: 21.32 },\n        { city: 'Los Angeles',longitude:-118.24, population_M:  3.90 },\n    ];\n\n    return {\n        title: 'Longitude Hard Domain [-180°, 180°]',\n        description:\n            'Semantic type \"Longitude\" pins axis to [-180, 180] with clamp=true ' +\n            '(hard physical domain). Shows where cities fall in global E-W context. ' +\n            'WITHOUT this: axis scales to data range (-118 to 151), no global frame.',\n        tags: ['semantic', 'domain', 'clamp', 'longitude', 'geographic'],\n        chartType: 'Scatter Plot',\n        data: cities,\n        fields: [makeField('city'), makeField('longitude'), makeField('population_M')],\n        metadata: {\n            city:         { type: Type.String, semanticType: 'City',      levels: cities.map(c => c.city) },\n            longitude:    { type: Type.Number, semanticType: 'Longitude', levels: [] },\n            population_M: { type: Type.Number, semanticType: 'Count',     levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('longitude'),\n            y: makeEncodingItem('population_M'),\n        },\n    };\n}\n\n// ============================================================================\n// 32. Index — ordinal, NOT reversed (contrast with Rank)\n//     Semantic type: \"Index\" → ordinal encoding, ascending sort\n//\n//     Unlike Rank (which reverses so #1 appears at top), Index is a\n//     sequence number (position, row number). Index 1 should appear first\n//     in data order — ascending, not reversed.\n//\n//     WITHOUT this annotation:\n//       Treated as generic number → quantitative encoding. Index values\n//       like 1, 2, 3 would have fractional ticks and continuous axis.\n//\n//     WITH \"Index\":\n//       Ordinal encoding (no fractional values). Ascending sort direction.\n//       Integer ticks only. Contrast with Rank which reverses.\n// ============================================================================\n\nfunction genIndexOrdinalTest(): TestCase {\n    const rand = seeded(3201);\n    const data = Array.from({ length: 10 }, (_, i) => ({\n        trial_number: i + 1,\n        response_time_ms: Math.round(200 + rand() * 800),\n    }));\n\n    return {\n        title: 'Index Ordinal (Not Reversed)',\n        description:\n            'Semantic type \"Index\" uses ordinal encoding with ascending sort. ' +\n            'Contrasts with Rank which reverses (best-first). Index is a plain ' +\n            'sequence: trial 1 → trial 10, no reversal. ' +\n            'WITHOUT this: treated as quantitative with fractional ticks.',\n        tags: ['semantic', 'ordinal', 'index', 'ascending'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('trial_number'), makeField('response_time_ms')],\n        metadata: {\n            trial_number:    { type: Type.Number, semanticType: 'Index',    levels: [] },\n            response_time_ms:{ type: Type.Number, semanticType: 'Duration', levels: [] },\n        },\n        semanticAnnotations: {\n            response_time_ms: { semanticType: 'Duration', unit: 'ms' },\n        },\n        encodingMap: {\n            x: makeEncodingItem('trial_number'),\n            y: makeEncodingItem('response_time_ms'),\n        },\n    };\n}\n\n// ============================================================================\n// 33. Percentage 0-100 representation (whole numbers)\n//     Semantic type: \"Percentage\" with whole-number data (40, 85, 72)\n//\n//     The format resolver detects 0-100 vs 0-1 representation.\n//     For 0-100: uses data precision format + \"%\" suffix (not d3's .% which\n//     multiplies by 100).\n//\n//     WITHOUT this:\n//       Values 72, 85, 40 shown as plain numbers. No % context.\n//\n//     WITH \"Percentage\" (0-100):\n//       Axis shows \"72%\", \"85%\", \"40%\". Data precision preserved.\n// ============================================================================\n\nfunction genPercentageWholeNumberTest(): TestCase {\n    const rand = seeded(3301);\n    const subjects = ['Math', 'Science', 'English', 'History', 'Art', 'PE'];\n    const data = subjects.map(s => ({\n        subject: s,\n        pass_rate: Math.round(45 + rand() * 50),\n    }));\n\n    return {\n        title: 'Percentage Whole-Number (0-100)',\n        description:\n            'Percentage field with whole-number data (45, 72, 85). Format resolver ' +\n            'detects 0-100 representation and uses \"d\" + \"%\" suffix instead of ' +\n            'd3\\'s .% format (which would multiply by 100, showing \"7200%\"). ' +\n            'WITHOUT this: bare numbers without %. Different from 0-1 test (#2).',\n        tags: ['semantic', 'format', 'percentage', 'whole-number'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('subject'), makeField('pass_rate')],\n        metadata: {\n            subject:   { type: Type.String, semanticType: 'Category',   levels: subjects },\n            pass_rate: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            pass_rate: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('subject'),\n            y: makeEncodingItem('pass_rate'),\n        },\n    };\n}\n\n// ============================================================================\n// 34. Score on color channel — conditional diverging\n//     Semantic type: \"Score\" on color → diverging color when data spans\n//     both sides of the domain midpoint\n//\n//     Score with domain [0, 100] has a midpoint at 50. When data spans\n//     both below and above 50, the color scheme should be diverging\n//     (e.g., below-50 = red, above-50 = blue).\n//\n//     WITHOUT this:\n//       Generic sequential palette. No midpoint awareness.\n//\n//     WITH \"Score\" on color:\n//       Diverging color scheme centered on midpoint 50.\n// ============================================================================\n\nfunction genScoreColorDivergingTest(): TestCase {\n    const rand = seeded(3401);\n    const students = ['Alice', 'Bob', 'Carol', 'Dave', 'Eve',\n                      'Frank', 'Grace', 'Heidi', 'Ivan', 'Judy',\n                      'Karl', 'Laura'];\n    const data = students.map(s => ({\n        student: s,\n        exam_score: Math.round(20 + rand() * 75),\n        study_hours: Math.round(1 + rand() * 30),\n    }));\n\n    return {\n        title: 'Score on Color (Conditional Diverging)',\n        description:\n            'Score with intrinsicDomain [0, 100] on color. Domain midpoint = 50. ' +\n            'Data spans both sides → diverging color scheme centered at 50. ' +\n            'Below-50 = one hue, above-50 = another. ' +\n            'WITHOUT this: sequential palette, no midpoint.',\n        tags: ['semantic', 'colorScheme', 'diverging', 'score', 'conditional'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('student'), makeField('exam_score'), makeField('study_hours')],\n        metadata: {\n            student:    { type: Type.String, semanticType: 'Category', levels: students },\n            exam_score: { type: Type.Number, semanticType: 'Score',    levels: [] },\n            study_hours:{ type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        semanticAnnotations: {\n            exam_score: { semanticType: 'Score', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('study_hours'),\n            y:     makeEncodingItem('student'),\n            color: makeEncodingItem('exam_score'),\n        },\n    };\n}\n\n// ============================================================================\n// 35. Price with EUR currency override\n//     Semantic type: \"Price\" + unit: \"EUR\"  →  \"€15.50\" on axis\n//\n//     Annotation.unit overrides the default $ prefix for currency types.\n//     Price also uses intensive aggRole (unit price averages, doesn't sum)\n//     and always shows 2 decimal places for cents.\n//\n//     WITHOUT this:\n//       Default $ prefix. Or bare numbers with no currency.\n//\n//     WITH \"Price\" + unit: \"EUR\":\n//       Axis labels show \"€15.50\". Euro prefix from CURRENCY_MAP.\n// ============================================================================\n\nfunction genPriceEurCurrencyTest(): TestCase {\n    const rand = seeded(3501);\n    const products = ['Espresso', 'Latte', 'Cappuccino', 'Mocha', 'Americano',\n                      'Macchiato', 'Flat White', 'Cortado'];\n    const data = products.map(p => ({\n        drink: p,\n        price_eur: Math.round((2.50 + rand() * 5.50) * 100) / 100,\n        daily_sales: Math.round(20 + rand() * 180),\n    }));\n\n    return {\n        title: 'Price with EUR Currency Override',\n        description:\n            'Annotation unit \"EUR\" overrides default $ to show \"€3.50\" on axis. ' +\n            'Price is intensive (average makes sense, sum doesn\\'t) with 2 decimal ' +\n            'places for cents. ' +\n            'WITHOUT this: default $ prefix or bare numbers.',\n        tags: ['semantic', 'format', 'currency', 'price', 'unit-override'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('drink'), makeField('price_eur'), makeField('daily_sales')],\n        metadata: {\n            drink:       { type: Type.String, semanticType: 'Category', levels: products },\n            price_eur:   { type: Type.Number, semanticType: 'Price',    levels: [] },\n            daily_sales: { type: Type.Number, semanticType: 'Count',    levels: [] },\n        },\n        semanticAnnotations: {\n            price_eur: { semanticType: 'Price', unit: 'EUR' },\n        },\n        encodingMap: {\n            x: makeEncodingItem('drink'),\n            y: makeEncodingItem('price_eur'),\n        },\n    };\n}\n\n// ============================================================================\n// 36. Year temporal vs ordinal disambiguation\n//     Semantic type: \"Year\" with few values (≤6) → ordinal\n//     Semantic type: \"Year\" with many values (>6) → temporal\n//\n//     Year's registry entry has visEncodings: ['temporal', 'ordinal'].\n//     resolveDefaultVisType disambiguates using distinct count:\n//       ≤6 distinct → ordinal (e.g., 3 years: 2022, 2023, 2024)\n//       >6 distinct → temporal (e.g., 20 years trend)\n//\n//     This test uses 4 years → should pick ordinal.\n//     Contrast with test #20 (Year format) which uses 7 years → temporal.\n// ============================================================================\n\nfunction genYearOrdinalDisambiguationTest(): TestCase {\n    const rand = seeded(3601);\n    const years = [2021, 2022, 2023, 2024];\n    const data: Record<string, any>[] = [];\n    for (const y of years) {\n        for (const region of ['North', 'South']) {\n            data.push({\n                year: y,\n                region,\n                revenue: Math.round(500000 + rand() * 1500000),\n            });\n        }\n    }\n\n    return {\n        title: 'Year Ordinal (≤6 Distinct Values)',\n        description:\n            'Year with only 4 distinct values → ordinal encoding (not temporal). ' +\n            'resolveDefaultVisType picks ordinal when distinct ≤ 6. ' +\n            'Contrast with test #20 which uses 7 years → temporal. ' +\n            'WITHOUT disambiguation: always temporal, wasting axis resolution on 4 points.',\n        tags: ['semantic', 'defaultVisType', 'year', 'ordinal', 'disambiguation'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('year'), makeField('region'), makeField('revenue')],\n        metadata: {\n            year:    { type: Type.Number, semanticType: 'Year',     levels: years },\n            region:  { type: Type.String, semanticType: 'Category', levels: ['North', 'South'] },\n            revenue: { type: Type.Number, semanticType: 'Revenue',  levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('year'),\n            y:     makeEncodingItem('revenue'),\n            color: makeEncodingItem('region'),\n        },\n    };\n}\n\n// ============================================================================\n// 37. Profit on color — signed currency diverging color\n//     Semantic type: \"Profit\" on color → diverging color scheme\n//     centered at 0, signed-currency format\n//\n//     When Profit is on the color channel instead of axis, the diverging\n//     analysis applies to color: positive = one hue, negative = another,\n//     midpoint at 0.\n//\n//     WITHOUT this:\n//       Sequential palette for color. No sign awareness. Losses and gains\n//       blend into the same gradient.\n//\n//     WITH \"Profit\" on color:\n//       Diverging scheme with domainMid = 0. (+) green, (-) red conceptually.\n// ============================================================================\n\nfunction genProfitColorDivergingTest(): TestCase {\n    const rand = seeded(3701);\n    const divisions = ['Product A', 'Product B', 'Product C', 'Product D',\n                       'Product E', 'Product F'];\n    const data = divisions.map(d => ({\n        product: d,\n        revenue: Math.round(100000 + rand() * 500000),\n        profit: Math.round(-80000 + rand() * 220000),\n    }));\n\n    return {\n        title: 'Profit on Color (Diverging)',\n        description:\n            'Profit on color channel triggers diverging color scheme (midpoint 0). ' +\n            'Positive profit → one hue, negative → another, making P&L obvious. ' +\n            'WITHOUT this: sequential gradient, losses and gains look alike.',\n        tags: ['semantic', 'colorScheme', 'diverging', 'profit', 'signed-currency'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('product'), makeField('revenue'), makeField('profit')],\n        metadata: {\n            product: { type: Type.String, semanticType: 'Category', levels: divisions },\n            revenue: { type: Type.Number, semanticType: 'Revenue',  levels: [] },\n            profit:  { type: Type.Number, semanticType: 'Profit',   levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('product'),\n            y:     makeEncodingItem('revenue'),\n            color: makeEncodingItem('profit'),\n        },\n    };\n}\n\n// ============================================================================\n// 38. Count integer format — comma grouping\n//     Semantic type: \"Count\" → integer format with comma grouping (,d)\n//\n//     Count uses format class 'integer' → \",d\" format for axis labels.\n//     This ensures tick marks are at whole numbers (no fractional counts)\n//     and large counts show thousands separators (1,234 not 1234).\n//\n//     Also tests aggregationDefault = 'sum' (additive measure — counts\n//     of subgroups sum to the total).\n//\n//     WITHOUT this:\n//       Generic number format. Fractional ticks possible (1.5 items?).\n//       No comma grouping on large values.\n//\n//     WITH \"Count\":\n//       Integer-only ticks with comma grouping. Meaningful zero.\n// ============================================================================\n\nfunction genCountIntegerFormatTest(): TestCase {\n    const rand = seeded(3801);\n    const categories = ['Electronics', 'Clothing', 'Food', 'Books', 'Toys', 'Sports'];\n    const data = categories.map(c => ({\n        category: c,\n        item_count: Math.round(500 + rand() * 9500),\n    }));\n\n    return {\n        title: 'Count Integer Format (,d)',\n        description:\n            'Semantic type \"Count\" uses integer format \",d\" — comma grouping ' +\n            'with integer-only ticks (no fractional counts). Count is additive: ' +\n            'sub-counts sum to total. ' +\n            'WITHOUT this: fractional ticks (1,500.5?) and no commas.',\n        tags: ['semantic', 'format', 'integer', 'count', 'aggregation'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('category'), makeField('item_count')],\n        metadata: {\n            category:   { type: Type.String, semanticType: 'Category', levels: categories },\n            item_count: { type: Type.Number, semanticType: 'Count',    levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('category'),\n            y: makeEncodingItem('item_count'),\n        },\n    };\n}\n\n// ============================================================================\n// 39. Unregistered semantic type — fallback to data-driven behavior\n//     Semantic type: \"CustomMetric\" (not in registry)\n//\n//     When a semantic type is not registered, the system falls back to\n//     data-driven inference: if values are numeric → quantitative encoding,\n//     aggregationDefault = 'sum', zeroClass = 'meaningful'.\n//\n//     This tests that unregistered types don't crash and behave sensibly.\n//\n//     WITHOUT this (before fallback was added):\n//       Unknown types → nominal encoding even for numeric data.\n//\n//     WITH fallback:\n//       Numeric data → quantitative, sensible defaults applied.\n// ============================================================================\n\nfunction genUnregisteredTypeFallbackTest(): TestCase {\n    const rand = seeded(3901);\n    const items = ['Item A', 'Item B', 'Item C', 'Item D', 'Item E', 'Item F'];\n    const data = items.map(item => ({\n        item,\n        custom_metric: Math.round(100 + rand() * 900),\n    }));\n\n    return {\n        title: 'Unregistered Type Fallback',\n        description:\n            'Semantic type \"CustomMetric\" is NOT in the registry. Falls back to ' +\n            'data-driven inference: numeric data → quantitative encoding, ' +\n            'aggregationDefault = sum, zeroClass = meaningful. ' +\n            'Tests that unknown types don\\'t crash and behave sensibly.',\n        tags: ['semantic', 'fallback', 'unregistered', 'data-driven'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('item'), makeField('custom_metric')],\n        metadata: {\n            item:          { type: Type.String, semanticType: 'Category',     levels: items },\n            custom_metric: { type: Type.Number, semanticType: 'CustomMetric', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('item'),\n            y: makeEncodingItem('custom_metric'),\n        },\n    };\n}\n\n// ############################################################################\n// SNAP-TO-BOUND TESTS\n//\n// Demonstrate the snap-to-bound heuristic for Percentage and PercentageChange.\n// Each bound snaps independently when data reaches within 25% of the\n// intrinsic range from that edge. Data exceeding a bound never snaps.\n// ############################################################################\n\n// ============================================================================\n// S1. Percentage — data far from both bounds → no snap\n//     Data 35–65%, threshold=25. Neither end close → axis data-fits.\n// ============================================================================\n\nfunction genSnapPctNoSnapTest(): TestCase {\n    const rand = seeded(7001);\n    const weeks = Array.from({ length: 8 }, (_, i) => `Week ${i + 1}`);\n    const data = weeks.map(w => ({\n        week: w,\n        usage: Math.round(35 + rand() * 30),\n    }));\n\n    return {\n        title: 'Snap: Pct 35–65% → no snap',\n        description:\n            'Usage data ranges 35–65%. Both ends are far from 0 and 100 ' +\n            '(threshold = 25% of range = 25), so no snap occurs. ' +\n            'Axis data-fits to show detail in the 35–65% band.',\n        tags: ['semantic', 'snap', 'percentage', 'no-snap'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('week'), makeField('usage')],\n        metadata: {\n            week:  { type: Type.String, semanticType: 'Category',   levels: weeks },\n            usage: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            usage: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('week'),\n            y: makeEncodingItem('usage'),\n        },\n    };\n}\n\n// ============================================================================\n// S2. Percentage — data near upper bound only → snap max to 100\n//     Data 60–97%, 97 within threshold of 100 → domainMax=100.\n//     Lower end (60) far from 0 → no snap min.\n// ============================================================================\n\nfunction genSnapPctMaxOnlyTest(): TestCase {\n    const rand = seeded(7002);\n    const depts = ['Engineering', 'Marketing', 'Sales', 'Support', 'Design', 'Legal'];\n    const data = depts.map(d => ({\n        dept: d,\n        completion: Math.round(60 + rand() * 37),\n    }));\n\n    return {\n        title: 'Snap: Pct 84–96% → snap max 100',\n        description:\n            'Completion data reaches 96%. Since 96 is within 25 (threshold = 25% of 100) ' +\n            'of 100, the upper bound snaps to 100%. Lower end (84%) is far from 0 → ' +\n            'no snap. Shows domainMax=100 while the lower end auto-fits.',\n        tags: ['semantic', 'snap', 'percentage', 'snap-max'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('dept'), makeField('completion')],\n        metadata: {\n            dept:       { type: Type.String, semanticType: 'Category',   levels: depts },\n            completion: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            completion: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('dept'),\n            y: makeEncodingItem('completion'),\n        },\n    };\n}\n\n// ============================================================================\n// S3. Percentage — data near lower bound only → snap min to 0\n//     Data 2–25%, 2 within threshold of 0 → domainMin=0.\n//     Upper end (25) far from 100 → no snap max.\n// ============================================================================\n\nfunction genSnapPctMinOnlyTest(): TestCase {\n    const rand = seeded(7003);\n    const items = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'];\n    const data = items.map(item => ({\n        item,\n        error_rate: Math.round(2 + rand() * 23),\n    }));\n\n    return {\n        title: 'Snap: Pct 4–20% → snap min 0',\n        description:\n            'Error rates range 4–20%. Since 4 is within 25 (threshold = 25% of 100) ' +\n            'of 0, the lower bound snaps to 0%. Upper end (20%) is far from 100 → ' +\n            'no snap. Shows domainMin=0 while the upper end auto-fits.',\n        tags: ['semantic', 'snap', 'percentage', 'snap-min'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('item'), makeField('error_rate')],\n        metadata: {\n            item:       { type: Type.String, semanticType: 'Category',   levels: items },\n            error_rate: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            error_rate: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('item'),\n            y: makeEncodingItem('error_rate'),\n        },\n    };\n}\n\n// ============================================================================\n// S4. Percentage — data near both bounds → snap both [0, 100]\n//     Data 3–95%, both ends close → full [0, 100] domain.\n// ============================================================================\n\nfunction genSnapPctBothTest(): TestCase {\n    const rand = seeded(7004);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n    const data = months.map((m, i) => ({\n        month: m,\n        capacity: Math.round(3 + (i / 11) * 87 + rand() * 5),\n    }));\n\n    return {\n        title: 'Snap: Pct 3–95% → snap both [0,100]',\n        description:\n            'Capacity ranges 3–95%. Both 3 (within 25 of 0) and 95 (within 25 of 100) ' +\n            'trigger snap, producing the full [0, 100] domain. Natural for data that ' +\n            'spans nearly the entire percentage range.',\n        tags: ['semantic', 'snap', 'percentage', 'snap-both'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('month'), makeField('capacity')],\n        metadata: {\n            month:    { type: Type.String, semanticType: 'Month',      levels: months },\n            capacity: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            capacity: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('month'),\n            y: makeEncodingItem('capacity'),\n        },\n    };\n}\n\n// ============================================================================\n// S5. Percentage — data exceeds upper bound → no snap\n//     Data 30–130%, 130 exceeds 100 → no snap on either end.\n//     (30 is also far from 0.)\n// ============================================================================\n\nfunction genSnapPctExceedTest(): TestCase {\n    const rand = seeded(7005);\n    const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n    const data = quarters.map(q => ({\n        quarter: q,\n        growth: Math.round(30 + rand() * 100),\n    }));\n\n    return {\n        title: 'Snap: Pct 30–130% → no snap (exceeds)',\n        description:\n            'Growth data ranges 30–130%. The max (130) exceeds the intrinsic upper ' +\n            'bound (100), so no snap — VL auto-extends. The min (30) is also far from 0. ' +\n            'Axis data-fits to the actual data range.',\n        tags: ['semantic', 'snap', 'percentage', 'exceed'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('quarter'), makeField('growth')],\n        metadata: {\n            quarter: { type: Type.String, semanticType: 'Category',   levels: quarters },\n            growth:  { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            growth: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('quarter'),\n            y: makeEncodingItem('growth'),\n        },\n    };\n}\n\n// ============================================================================\n// S6. PercentageChange — small range near zero → no snap\n//     Data -3% to +5%, both far from ±100% → axis data-fits.\n// ============================================================================\n\nfunction genSnapPctChangeNoSnapTest(): TestCase {\n    const rand = seeded(7006);\n    const stocks = ['AAPL', 'GOOG', 'MSFT', 'AMZN', 'META', 'NVDA', 'TSLA'];\n    const data = stocks.map(s => ({\n        stock: s,\n        daily_change: Math.round((-0.03 + rand() * 0.08) * 1000) / 1000,\n    }));\n\n    return {\n        title: 'Snap: PctChange ±3–5% → no snap',\n        description:\n            'Daily stock changes range -3% to +5%. Both ends are far from ±1 ' +\n            '(threshold = 0.25 per side), so no snap. Axis data-fits around the small range. ' +\n            'Contextual zero-baseline still includes 0 for bar marks.',\n        tags: ['semantic', 'snap', 'percentage-change', 'no-snap'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('stock'), makeField('daily_change')],\n        metadata: {\n            stock:        { type: Type.String, semanticType: 'Category',         levels: stocks },\n            daily_change: { type: Type.Number, semanticType: 'PercentageChange', levels: [] },\n        },\n        semanticAnnotations: {\n            daily_change: { semanticType: 'PercentageChange', intrinsicDomain: [-1, 1] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('stock'),\n            y: makeEncodingItem('daily_change'),\n        },\n    };\n}\n\n// ============================================================================\n// S7. PercentageChange — near negative bound → snap min to -1\n//     Data -0.96 to +0.25, -0.96 within 0.25 (25% of 1) of -1 → snap min=-1.\n// ============================================================================\n\nfunction genSnapPctChangeMinTest(): TestCase {\n    const data = [\n        { sector: 'Tech',       ytd_return: -0.96 },\n        { sector: 'Energy',     ytd_return: -0.42 },\n        { sector: 'Finance',    ytd_return: -0.71 },\n        { sector: 'Healthcare', ytd_return:  0.25 },\n        { sector: 'Retail',     ytd_return: -0.55 },\n        { sector: 'Telecom',    ytd_return: -0.83 },\n    ];\n    const sectors = data.map(d => d.sector);\n\n    return {\n        title: 'Snap: PctChange -96% to +25% → snap min -100%',\n        description:\n            'Sector returns range -96% to +25%. The min (-0.96) is within 0.25 (threshold = ' +\n            '25% of distance 1 from zero to -1) of -1, so the lower bound snaps to -100%. ' +\n            'Upper end (+25%) is far from +100% → no snap. Shows domainMin=-1 with ' +\n            'auto-fit upper end.',\n        tags: ['semantic', 'snap', 'percentage-change', 'snap-min'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('sector'), makeField('ytd_return')],\n        metadata: {\n            sector:     { type: Type.String, semanticType: 'Category',         levels: sectors },\n            ytd_return: { type: Type.Number, semanticType: 'PercentageChange', levels: [] },\n        },\n        semanticAnnotations: {\n            ytd_return: { semanticType: 'PercentageChange', intrinsicDomain: [-1, 1] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('sector'),\n            y: makeEncodingItem('ytd_return'),\n        },\n    };\n}\n\n// ============================================================================\n// S8. PercentageChange — near both bounds → snap both [-1, 1]\n//     Data -0.95 to +0.93, both within 0.25 (25% of per-side distance 1) → full [-1, 1].\n// ============================================================================\n\nfunction genSnapPctChangeBothTest(): TestCase {\n    const data = [\n        { strategy: 'Strategy A', performance: -0.95 },\n        { strategy: 'Strategy B', performance: -0.30 },\n        { strategy: 'Strategy C', performance:  0.15 },\n        { strategy: 'Strategy D', performance: -0.60 },\n        { strategy: 'Strategy E', performance:  0.48 },\n        { strategy: 'Strategy F', performance:  0.93 },\n    ];\n    const strategies = data.map(d => d.strategy);\n\n    return {\n        title: 'Snap: PctChange ±95–93% → snap both [-1,1]',\n        description:\n            'Strategy performance ranges -95% to +93%. Both -0.95 (within 0.25 of -1) ' +\n            'and +0.93 (within 0.25 of +1) trigger snap (threshold = 25% of each side\\'s ' +\n            'distance from zero = 0.25), producing the full [-1, 1] domain.',\n        tags: ['semantic', 'snap', 'percentage-change', 'snap-both'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('strategy'), makeField('performance')],\n        metadata: {\n            strategy:    { type: Type.String, semanticType: 'Category',         levels: strategies },\n            performance: { type: Type.Number, semanticType: 'PercentageChange', levels: [] },\n        },\n        semanticAnnotations: {\n            performance: { semanticType: 'PercentageChange', intrinsicDomain: [-1, 1] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('strategy'),\n            y: makeEncodingItem('performance'),\n        },\n    };\n}\n\n// ============================================================================\n// S9. Stacked bar — percentages sum to ~100% per group → keep snap\n//     Individual values 30–40%, each group has 3 series summing to ~98%.\n//     Individual values are far from 100% (no individual snap), but the stacked\n//     totals (~98%) are within 25% of 100 → re-snap fires domainMax=100.\n// ============================================================================\n\nfunction genSnapStackedSumNear100Test(): TestCase {\n    const categories = ['Alpha', 'Beta', 'Gamma', 'Delta'];\n    const series = ['Part A', 'Part B', 'Part C'];\n    // Each group's parts sum to ~97–99%\n    const groupTotals: Record<string, number[]> = {\n        'Alpha': [35, 30, 33],   // sum = 98\n        'Beta':  [40, 28, 30],   // sum = 98\n        'Gamma': [32, 35, 30],   // sum = 97\n        'Delta': [38, 27, 34],   // sum = 99\n    };\n\n    const data: Record<string, any>[] = [];\n    for (const cat of categories) {\n        const parts = groupTotals[cat];\n        series.forEach((s, i) => {\n            data.push({ category: cat, series: s, share: parts[i] });\n        });\n    }\n\n    return {\n        title: 'Snap: Stacked Pct sum≈100% → snap max 100',\n        description:\n            'Stacked bar with 3 series per group. Individual values range 27–40% (far from 100, ' +\n            'no individual snap), but stacked totals per group are 97–99%. Since 99 is within ' +\n            '25 (threshold) of 100, the stacked-total re-snap fires → domainMax=100. ' +\n            'This keeps the axis at a natural percentage ceiling.',\n        tags: ['semantic', 'snap', 'percentage', 'stacked', 'sum-near-bound'],\n        chartType: 'Stacked Bar Chart',\n        data,\n        fields: [makeField('category'), makeField('share'), makeField('series')],\n        metadata: {\n            category: { type: Type.String, semanticType: 'Category',   levels: categories },\n            series:   { type: Type.String, semanticType: 'Category',   levels: series },\n            share:    { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            share: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('category'),\n            y: makeEncodingItem('share'),\n            color: makeEncodingItem('series'),\n        },\n    };\n}\n\n// ============================================================================\n// S10. Stacked bar — percentages sum to ~150% per group → skip snap\n//      Individual values 30–60%, but 3 series stack to ~150%.\n//      Totals exceed intrinsic upper bound (100) → skip domain constraint.\n// ============================================================================\n\nfunction genSnapStackedSumExceedsTest(): TestCase {\n    const categories = ['East', 'West', 'North', 'South'];\n    const series = ['Source X', 'Source Y', 'Source Z'];\n    // Each group's parts sum to ~140–160%\n    const groupTotals: Record<string, number[]> = {\n        'East':  [55, 48, 42],   // sum = 145\n        'West':  [60, 50, 45],   // sum = 155\n        'North': [45, 52, 43],   // sum = 140\n        'South': [58, 55, 47],   // sum = 160\n    };\n\n    const data: Record<string, any>[] = [];\n    for (const cat of categories) {\n        const parts = groupTotals[cat];\n        series.forEach((s, i) => {\n            data.push({ region: cat, source: s, overlap_pct: parts[i] });\n        });\n    }\n\n    return {\n        title: 'Snap: Stacked Pct sum≈150% → no snap (exceeds)',\n        description:\n            'Stacked bar with 3 overlapping percentage sources per region. Individual values ' +\n            'range 42–60%, but stacked totals are 140–160% — exceeding the intrinsic upper ' +\n            'bound of 100%. Domain constraint is skipped so VL auto-extends the axis.',\n        tags: ['semantic', 'snap', 'percentage', 'stacked', 'sum-exceeds'],\n        chartType: 'Stacked Bar Chart',\n        data,\n        fields: [makeField('region'), makeField('overlap_pct'), makeField('source')],\n        metadata: {\n            region:      { type: Type.String, semanticType: 'Category',   levels: categories },\n            source:      { type: Type.String, semanticType: 'Category',   levels: series },\n            overlap_pct: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            overlap_pct: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('region'),\n            y: makeEncodingItem('overlap_pct'),\n            color: makeEncodingItem('source'),\n        },\n    };\n}\n\n// ============================================================================\n// S11. Stacked bar — individual values snap, totals fit → keep snap\n//      Individual values 80–95% (near 100, snap fires individually).\n//      Stacked totals ~270% exceed 100, but the individual snap already\n//      fired — this test verifies the stacked-total check correctly\n//      overrides it: totals 270% > 100 → skip domain constraint.\n// ============================================================================\n\nfunction genSnapStackedIndividualSnapButTotalsExceedTest(): TestCase {\n    const categories = ['Jan', 'Feb', 'Mar', 'Apr'];\n    const series = ['Metric 1', 'Metric 2', 'Metric 3'];\n    // Individual values 80–95% (all snap individually), but sum ~270%\n    const groupTotals: Record<string, number[]> = {\n        'Jan': [92, 88, 85],   // sum = 265\n        'Feb': [95, 90, 87],   // sum = 272\n        'Mar': [91, 93, 84],   // sum = 268\n        'Apr': [94, 89, 91],   // sum = 274\n    };\n\n    const data: Record<string, any>[] = [];\n    for (const cat of categories) {\n        const parts = groupTotals[cat];\n        series.forEach((s, i) => {\n            data.push({ month: cat, metric: s, score: parts[i] });\n        });\n    }\n\n    return {\n        title: 'Snap: Stacked Pct indiv snap but sum>100% → skip',\n        description:\n            'Individual scores range 84–95% — close to 100%, so snap fires on individual ' +\n            'values. But when stacked (3 metrics per month), totals reach 265–274%. Since ' +\n            'totals exceed intrinsic bound (100), the stacked-total check overrides → ' +\n            'domain constraint is skipped, VL auto-extends.',\n        tags: ['semantic', 'snap', 'percentage', 'stacked', 'individual-snap-override'],\n        chartType: 'Stacked Bar Chart',\n        data,\n        fields: [makeField('month'), makeField('score'), makeField('metric')],\n        metadata: {\n            month:  { type: Type.String, semanticType: 'Category',   levels: categories },\n            metric: { type: Type.String, semanticType: 'Category',   levels: series },\n            score:  { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            score: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('month'),\n            y: makeEncodingItem('score'),\n            color: makeEncodingItem('metric'),\n        },\n    };\n}\n\n// ============================================================================\n// S12. Stacked bar — individual values 30–50%, totals far from 100% → no snap\n//      Individual values are mid-range (no individual snap).\n//      Stacked totals ~58–70%, also far from 100% → no re-snap either.\n//      Axis should data-fit.\n// ============================================================================\n\nfunction genSnapStackedTotalsFarFromBoundTest(): TestCase {\n    const categories = ['Q1', 'Q2', 'Q3', 'Q4'];\n    const series = ['Channel A', 'Channel B'];\n    // Each group sums to ~58–70%\n    const groupTotals: Record<string, number[]> = {\n        'Q1': [30, 28],   // sum = 58\n        'Q2': [35, 30],   // sum = 65\n        'Q3': [28, 32],   // sum = 60\n        'Q4': [38, 32],   // sum = 70\n    };\n\n    const data: Record<string, any>[] = [];\n    for (const cat of categories) {\n        const parts = groupTotals[cat];\n        series.forEach((s, i) => {\n            data.push({ quarter: cat, channel: s, coverage: parts[i] });\n        });\n    }\n\n    return {\n        title: 'Snap: Stacked Pct sum≈58–70% → no snap',\n        description:\n            'Stacked bar with 2 series per quarter. Individual values range 28–38% ' +\n            '(far from 100%, no individual snap). Stacked totals are 58–70% — also ' +\n            'far from 100% (threshold = 25). No snap fires on either individual values ' +\n            'or stacked totals. Axis data-fits.',\n        tags: ['semantic', 'snap', 'percentage', 'stacked', 'no-snap'],\n        chartType: 'Stacked Bar Chart',\n        data,\n        fields: [makeField('quarter'), makeField('coverage'), makeField('channel')],\n        metadata: {\n            quarter:  { type: Type.String, semanticType: 'Category',   levels: categories },\n            channel:  { type: Type.String, semanticType: 'Category',   levels: series },\n            coverage: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            coverage: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('quarter'),\n            y: makeEncodingItem('coverage'),\n            color: makeEncodingItem('channel'),\n        },\n    };\n}\n\n/**\n * Generate all snap-to-bound test cases.\n *\n * Demonstrates the snap-to-bound heuristic for Percentage [0,100]\n * and PercentageChange [-1,1]. Each bound snaps independently when\n * data reaches within 25% of the effective side range from that edge.\n * For zero-straddling domains (lo < 0 < hi), each side's threshold is\n * computed relative to its distance from zero, not the full range.\n */\nexport function genSnapToBoundTests(): TestCase[] {\n    return [\n        genSnapPctNoSnapTest(),\n        genSnapPctMaxOnlyTest(),\n        genSnapPctMinOnlyTest(),\n        genSnapPctBothTest(),\n        genSnapPctExceedTest(),\n        genSnapPctChangeNoSnapTest(),\n        genSnapPctChangeMinTest(),\n        genSnapPctChangeBothTest(),\n        genSnapStackedSumNear100Test(),\n        genSnapStackedSumExceedsTest(),\n        genSnapStackedIndividualSnapButTotalsExceedTest(),\n        genSnapStackedTotalsFarFromBoundTest(),\n    ];\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/specialized-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\nimport { Channel, EncodingItem } from '../../../components/ComponentType';\nimport { TestCase, makeField, makeEncodingItem, buildMetadata } from './types';\nimport { seededRandom, genDates, genMonths, genCategories } from './generators';\n\n// ------ Heatmap ------\nexport function genHeatmapTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(500);\n\n    // 1. Small nominal × nominal\n    {\n        const xs = genCategories('Category', 5);\n        const ys = genMonths(6);\n        const data: any[] = [];\n        for (const x of xs) for (const y of ys) {\n            data.push({ Category: x, Month: y, Value: Math.round(rand() * 100) });\n        }\n        tests.push({\n            title: 'Nominal × Nominal (small, 5×6)',\n            description: '5 categories × 6 months — basic heatmap',\n            tags: ['nominal', 'ordinal', 'color', 'small'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Category'), makeField('Month'), makeField('Value')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: xs },\n                Month: { type: Type.String, semanticType: 'Month', levels: ys },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Month'), color: makeEncodingItem('Value') },\n        });\n    }\n\n    // 2. Quantitative × quantitative (tests applyDynamicMarkResizing with nominalThreshold)\n    {\n        const xs = Array.from({ length: 10 }, (_, i) => i * 10);\n        const ys = Array.from({ length: 8 }, (_, i) => i * 5);\n        const data: any[] = [];\n        for (const x of xs) for (const y of ys) {\n            data.push({ X: x, Y: y, Density: Math.round(rand() * 100) });\n        }\n        tests.push({\n            title: 'Quant × Quant (small cardinality → nominal)',\n            description: '10×8 grid — should convert to nominal (≤20 threshold)',\n            tags: ['quantitative', 'small', 'dtype-conversion'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('X'), makeField('Y'), makeField('Density')],\n            metadata: {\n                X: { type: Type.Number, semanticType: 'Quantity', levels: xs },\n                Y: { type: Type.Number, semanticType: 'Quantity', levels: ys },\n                Density: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('X'), y: makeEncodingItem('Y'), color: makeEncodingItem('Density') },\n        });\n    }\n\n    // 3. Large quantitative (should resize rect, not convert)\n    {\n        const data: any[] = [];\n        for (let x = 0; x < 50; x++) for (let y = 0; y < 30; y++) {\n            data.push({ Hour: x, Day: y, Activity: Math.round(rand() * 100) });\n        }\n        tests.push({\n            title: 'Quant × Quant (large cardinality → resize)',\n            description: '50×30 grid — should resize rect width/height, not convert to nominal',\n            tags: ['quantitative', 'large', 'dtype-conversion'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Hour'), makeField('Day'), makeField('Activity')],\n            metadata: {\n                Hour: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Day: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Activity: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Hour'), y: makeEncodingItem('Day'), color: makeEncodingItem('Activity') },\n        });\n    }\n\n    // 4. Temporal × nominal\n    {\n        const months = genMonths(12);\n        const products = genCategories('Product', 6);\n        const data: any[] = [];\n        for (const m of months) for (const p of products) {\n            data.push({ Month: m, Product: p, Sales: Math.round(rand() * 1000) });\n        }\n        tests.push({\n            title: 'Ordinal × Nominal (12×6)',\n            description: '12 months × 6 products',\n            tags: ['ordinal', 'nominal', 'color', 'medium'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Month'), makeField('Product'), makeField('Sales')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Product: { type: Type.String, semanticType: 'Product', levels: products },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Product'), color: makeEncodingItem('Sales') },\n        });\n    }\n\n    // 5. Large temporal × nominal (80 dates × 5 categories)\n    {\n        const dates = genDates(80, 2016);\n        const cats = genCategories('Category', 5);\n        const data: any[] = [];\n        for (const d of dates) for (const c of cats) {\n            data.push({ Date: d, Category: c, Intensity: Math.round(rand() * 100) });\n        }\n        tests.push({\n            title: 'Temporal × Nominal (large, 80×5)',\n            description: '80 dates × 5 categories — tests large temporal heatmap with rect sizing',\n            tags: ['temporal', 'nominal', 'color', 'very-large'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Date'), makeField('Category'), makeField('Intensity')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Category: { type: Type.String, semanticType: 'Category', levels: cats },\n                Intensity: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Category'), color: makeEncodingItem('Intensity') },\n        });\n    }\n\n    // 6. Nominal × large temporal (swapped, 5 × 80 dates on y)\n    {\n        const dates = genDates(80, 2016);\n        const cats = genCategories('Product', 5);\n        const data: any[] = [];\n        for (const c of cats) for (const d of dates) {\n            data.push({ Product: c, Date: d, Score: Math.round(rand() * 100) });\n        }\n        tests.push({\n            title: 'Nominal × Temporal (large, 5×80)',\n            description: '5 products × 80 dates on y-axis — large temporal on y',\n            tags: ['nominal', 'temporal', 'color', 'very-large', 'swap-axis'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Product'), makeField('Date'), makeField('Score')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Product', levels: cats },\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Product'), y: makeEncodingItem('Date'), color: makeEncodingItem('Score') },\n        });\n    }\n\n    // 7. Large temporal × large temporal (60×40 date grid)\n    {\n        const xDates = genDates(60, 2018);\n        const yDates = genDates(40, 2020);\n        const data: any[] = [];\n        for (const xd of xDates) for (const yd of yDates) {\n            data.push({ StartDate: xd, EndDate: yd, Correlation: Math.round(-100 + rand() * 200) / 100 });\n        }\n        tests.push({\n            title: 'Temporal × Temporal (large, 60×40)',\n            description: '60×40 date grid — both axes temporal, tests rect sizing on both',\n            tags: ['temporal', 'color', 'very-large'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('StartDate'), makeField('EndDate'), makeField('Correlation')],\n            metadata: {\n                StartDate: { type: Type.Date, semanticType: 'Date', levels: [] },\n                EndDate: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Correlation: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('StartDate'), y: makeEncodingItem('EndDate'), color: makeEncodingItem('Correlation') },\n        });\n    }\n\n    // 8. Asymmetric discrete: 5 categories on Y × 80 categories on X (400 cells)\n    {\n        const xCats = Array.from({ length: 80 }, (_, i) => `C${String(i + 1).padStart(2, '0')}`);\n        const yCats = genCategories('Category', 5);\n        const data: any[] = [];\n        for (const x of xCats) for (const y of yCats) data.push({ Category: x, Group: y, Value: Math.round(rand() * 100) });\n        tests.push({\n            title: 'Nominal × Nominal (asymmetric wide, 80×5)',\n            description: '80 categories on X × 5 on Y (400 cells) — tests wide asymmetric discrete axes',\n            tags: ['nominal', 'color', 'asymmetric', 'very-large'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Category'), makeField('Group'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Group'), color: makeEncodingItem('Value') },\n        });\n    }\n\n    // 9. Asymmetric discrete: 80 categories on Y × 5 categories on X (400 cells)\n    {\n        const xCats = genCategories('Category', 5);\n        const yCats = Array.from({ length: 80 }, (_, i) => `C${String(i + 1).padStart(2, '0')}`);\n        const data: any[] = [];\n        for (const x of xCats) for (const y of yCats) data.push({ Group: x, Category: y, Value: Math.round(rand() * 100) });\n        tests.push({\n            title: 'Nominal × Nominal (asymmetric tall, 5×80)',\n            description: '5 categories on X × 80 on Y (400 cells) — tests tall asymmetric discrete axes',\n            tags: ['nominal', 'color', 'asymmetric', 'very-large'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Group'), makeField('Category'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Group'), y: makeEncodingItem('Category'), color: makeEncodingItem('Value') },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Pie Chart ------\nexport function genPieTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(800);\n\n    // 1. Small\n    {\n        const cats = genCategories('Category', 4);\n        const data = cats.map(c => ({ Category: c, Value: Math.round(100 + rand() * 500) }));\n        tests.push({\n            title: 'Pie (small, 4 slices)',\n            description: '4 categories',\n            tags: ['nominal', 'quantitative', 'small'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Category'), makeField('Value')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: cats },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Value'), color: makeEncodingItem('Category') },\n        });\n    }\n\n    // 2. Medium\n    {\n        const cats = genCategories('Product', 10);\n        const data = cats.map(c => ({ Product: c, Revenue: Math.round(1000 + rand() * 9000) }));\n        tests.push({\n            title: 'Pie (medium, 10 slices)',\n            description: '10 products — tests color scheme at boundary',\n            tags: ['nominal', 'quantitative', 'medium'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Product'), makeField('Revenue')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Product', levels: cats },\n                Revenue: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Revenue'), color: makeEncodingItem('Product') },\n        });\n    }\n\n    // 3. Large — 25 slices (text overlay should be disabled)\n    {\n        const cats = genCategories('Region', 25);\n        const data = cats.map(c => ({ Region: c, Sales: Math.round(500 + rand() * 5000) }));\n        tests.push({\n            title: 'Pie (large, 25 slices)',\n            description: '25 regions — too many slices for text overlay, legend + tooltip only',\n            tags: ['nominal', 'quantitative', 'large', 'stress'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Region'), makeField('Sales')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Category', levels: cats },\n                Sales: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Sales'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    // 4. Skewed — one dominant slice + several tiny ones\n    {\n        const cats = ['Dominant', 'Small-A', 'Small-B', 'Small-C', 'Tiny-1', 'Tiny-2'];\n        const vals = [5000, 200, 180, 150, 30, 20];\n        const data = cats.map((c, i) => ({ Category: c, Value: vals[i] }));\n        tests.push({\n            title: 'Pie (skewed, 6 slices)',\n            description: 'One dominant slice ~90%, tests circumference pressure with effective bar count',\n            tags: ['nominal', 'quantitative', 'skewed'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Category'), makeField('Value')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: cats },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Value'), color: makeEncodingItem('Category') },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Ranged Dot Plot ------\nexport function genRangedDotPlotTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(850);\n\n    {\n        const cats = genCategories('Country', 8);\n        const data: any[] = [];\n        for (const c of cats) {\n            data.push({ Country: c, Value: Math.round(30 + rand() * 40), Metric: 'Min' });\n            data.push({ Country: c, Value: Math.round(60 + rand() * 40), Metric: 'Max' });\n        }\n        tests.push({\n            title: 'Ranged Dot Plot (8 items)',\n            description: '8 countries with min/max range',\n            tags: ['nominal', 'quantitative', 'color', 'small'],\n            chartType: 'Ranged Dot Plot',\n            data,\n            fields: [makeField('Value'), makeField('Country'), makeField('Metric')],\n            metadata: {\n                Country: { type: Type.String, semanticType: 'Country', levels: cats },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Metric: { type: Type.String, semanticType: 'Category', levels: ['Min', 'Max'] },\n            },\n            encodingMap: { x: makeEncodingItem('Value'), y: makeEncodingItem('Country'), color: makeEncodingItem('Metric') },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Lollipop Chart ------\nexport function genLollipopTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(930);\n\n    // 1. Nominal × Quant (vertical lollipop)\n    {\n        const countries = ['USA', 'China', 'Japan', 'Germany', 'UK', 'France', 'India', 'Brazil'];\n        const data = countries.map(c => ({ Country: c, GDP: Math.round(500 + rand() * 20000) }));\n        tests.push({\n            title: 'Nominal × Quant (vertical lollipop)',\n            description: '8 countries — rule from 0 to value + dot',\n            tags: ['nominal', 'quantitative', 'small'],\n            chartType: 'Lollipop Chart',\n            data,\n            fields: [makeField('Country'), makeField('GDP')],\n            metadata: {\n                Country: { type: Type.String, semanticType: 'Country', levels: countries },\n                GDP: { type: Type.Number, semanticType: 'GDP', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Country'), y: makeEncodingItem('GDP') },\n        });\n    }\n\n    // 2. Nominal × Quant + Color\n    {\n        const items = genCategories('Product', 10);\n        const data = items.map(p => ({\n            Product: p,\n            Sales: Math.round(100 + rand() * 900),\n            Region: rand() > 0.5 ? 'East' : 'West',\n        }));\n        tests.push({\n            title: 'Nominal × Quant + Color (10 items)',\n            description: 'Products with color-coded region',\n            tags: ['nominal', 'quantitative', 'color', 'medium'],\n            chartType: 'Lollipop Chart',\n            data,\n            fields: [makeField('Product'), makeField('Sales'), makeField('Region')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Category', levels: items },\n                Sales: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: ['East', 'West'] },\n            },\n            encodingMap: { x: makeEncodingItem('Product'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    // 3. Horizontal lollipop (quant on x, nominal on y)\n    {\n        const departments = ['Engineering', 'Marketing', 'Sales', 'Support', 'HR', 'Finance'];\n        const data = departments.map(d => ({ Department: d, Score: Math.round(40 + rand() * 60) }));\n        tests.push({\n            title: 'Quant × Nominal (horizontal lollipop)',\n            description: '6 departments — horizontal layout',\n            tags: ['nominal', 'quantitative', 'small'],\n            chartType: 'Lollipop Chart',\n            data,\n            fields: [makeField('Score'), makeField('Department')],\n            metadata: {\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Department: { type: Type.String, semanticType: 'Category', levels: departments },\n            },\n            encodingMap: { x: makeEncodingItem('Score'), y: makeEncodingItem('Department') },\n        });\n    }\n\n    // 4. Color + Column facet\n    {\n        const regions = ['North', 'South'];\n        const categories = genCategories('Item', 6);\n        const data: any[] = [];\n        for (const r of regions) {\n            for (const c of categories) {\n                data.push({\n                    Item: c,\n                    Revenue: Math.round(200 + rand() * 800),\n                    Region: r,\n                    Tier: rand() > 0.5 ? 'Premium' : 'Standard',\n                });\n            }\n        }\n        tests.push({\n            title: 'Color + Column Facet',\n            description: '6 items × 2 regions faceted, color by tier',\n            tags: ['nominal', 'quantitative', 'color', 'facet', 'medium'],\n            chartType: 'Lollipop Chart',\n            data,\n            fields: [makeField('Item'), makeField('Revenue'), makeField('Region'), makeField('Tier')],\n            metadata: {\n                Item: { type: Type.String, semanticType: 'Category', levels: categories },\n                Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n                Tier: { type: Type.String, semanticType: 'Category', levels: ['Premium', 'Standard'] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Item'),\n                y: makeEncodingItem('Revenue'),\n                color: makeEncodingItem('Tier'),\n                column: makeEncodingItem('Region'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Custom Charts (Point, Line, Bar, Rect, Area) ------\nexport function genCustomTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(900);\n\n    // Custom Point\n    {\n        const data = Array.from({ length: 50 }, () => ({\n            X: Math.round(rand() * 100),\n            Y: Math.round(rand() * 100),\n            Size: Math.round(rand() * 50),\n        }));\n        tests.push({\n            title: 'Custom Point (50 pts)',\n            description: 'Basic custom point with size encoding',\n            tags: ['quantitative', 'size', 'medium'],\n            chartType: 'Custom Point',\n            data,\n            fields: [makeField('X'), makeField('Y'), makeField('Size')],\n            metadata: {\n                X: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Y: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Size: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('X'), y: makeEncodingItem('Y'), size: makeEncodingItem('Size') },\n        });\n    }\n\n    // Custom Bar\n    {\n        const cats = genCategories('Status', 5);\n        const data = cats.map(c => ({ Status: c, Count: Math.round(10 + rand() * 100) }));\n        tests.push({\n            title: 'Custom Bar (5 bars)',\n            description: 'Status × Count',\n            tags: ['nominal', 'quantitative', 'small'],\n            chartType: 'Custom Bar',\n            data,\n            fields: [makeField('Status'), makeField('Count')],\n            metadata: {\n                Status: { type: Type.String, semanticType: 'Status', levels: cats },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Status'), y: makeEncodingItem('Count') },\n        });\n    }\n\n    // Custom Area\n    {\n        const dates = genDates(40, 2022);\n        const data = dates.map((d, i) => ({ Date: d, Value: Math.round(50 + rand() * 200 + i * 2) }));\n        tests.push({\n            title: 'Custom Area (40 pts)',\n            description: 'Temporal area chart',\n            tags: ['temporal', 'quantitative', 'medium'],\n            chartType: 'Custom Area',\n            data,\n            fields: [makeField('Date'), makeField('Value')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Waterfall Chart ------\nexport function genWaterfallTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Simple P&L waterfall — no explicit type column (auto-inferred)\n    {\n        const data = [\n            { Category: 'Revenue',       Amount: 1000 },\n            { Category: 'COGS',          Amount: -400 },\n            { Category: 'Gross Profit',  Amount: -150 },\n            { Category: 'Operating Exp', Amount: -200 },\n            { Category: 'Tax',           Amount: -80 },\n            { Category: 'Net Income',    Amount: 170 },\n        ];\n        tests.push({\n            title: 'Simple P&L (6 steps, auto type)',\n            description: 'Auto-detects first=start, last=end, rest=delta',\n            tags: ['nominal', 'small'],\n            chartType: 'Waterfall Chart',\n            data,\n            fields: [makeField('Category'), makeField('Amount')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Category) },\n                Amount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Amount') },\n        });\n    }\n\n    // 2. With explicit Type column (start/delta/end)\n    {\n        const data = [\n            { Step: 'Starting Balance', Value:  5000, Type: 'start' },\n            { Step: 'Sales',            Value:  2200, Type: 'delta' },\n            { Step: 'Returns',          Value:  -350, Type: 'delta' },\n            { Step: 'Payroll',          Value: -1800, Type: 'delta' },\n            { Step: 'Rent',             Value:  -600, Type: 'delta' },\n            { Step: 'Marketing',        Value:  -400, Type: 'delta' },\n            { Step: 'Ending Balance',   Value:  4050, Type: 'end' },\n        ];\n        tests.push({\n            title: 'Explicit Type Column (7 steps)',\n            description: 'User-provided start/delta/end type field',\n            tags: ['nominal', 'color', 'small'],\n            chartType: 'Waterfall Chart',\n            data,\n            fields: [makeField('Step'), makeField('Value'), makeField('Type')],\n            metadata: {\n                Step: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Step) },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Type: { type: Type.String, semanticType: 'Category', levels: ['start', 'delta', 'end'] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Step'),\n                y: makeEncodingItem('Value'),\n                color: makeEncodingItem('Type'),\n            },\n        });\n    }\n\n    // 3. Budget variance (all deltas — no start/end)\n    {\n        const data = [\n            { Department: 'Engineering',  Variance: 120 },\n            { Department: 'Sales',        Variance: -45 },\n            { Department: 'Marketing',    Variance: -80 },\n            { Department: 'Operations',   Variance: 35 },\n            { Department: 'HR',           Variance: -20 },\n            { Department: 'Finance',      Variance: 15 },\n            { Department: 'Support',      Variance: -30 },\n            { Department: 'Total',        Variance: -5 },\n        ];\n        tests.push({\n            title: 'Budget Variance (8 depts)',\n            description: 'Mixed positive/negative deltas with auto start/end',\n            tags: ['nominal', 'medium'],\n            chartType: 'Waterfall Chart',\n            data,\n            fields: [makeField('Department'), makeField('Variance')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Department) },\n                Variance: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Department'), y: makeEncodingItem('Variance') },\n        });\n    }\n\n    // 4. Larger waterfall — monthly cash flow\n    {\n        const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n        const amounts = [500, 200, -150, 300, -100, -250, 400, 150, -300, 200, -50, 100];\n        const data = [\n            { Month: 'Opening', Amount: 10000, Type: 'start' },\n            ...months.map((m, i) => ({ Month: m, Amount: amounts[i], Type: 'delta' })),\n            { Month: 'Closing', Amount: 11000, Type: 'end' },\n        ];\n        tests.push({\n            title: 'Monthly Cash Flow (14 steps)',\n            description: '12 months with opening & closing balances',\n            tags: ['nominal', 'color', 'medium'],\n            chartType: 'Waterfall Chart',\n            data,\n            fields: [makeField('Month'), makeField('Amount'), makeField('Type')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Month) },\n                Amount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Type: { type: Type.String, semanticType: 'Category', levels: ['start', 'delta', 'end'] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Month'),\n                y: makeEncodingItem('Amount'),\n                color: makeEncodingItem('Type'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Candlestick Chart ------\nexport function genCandlestickTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(950);\n\n    // Helper: generate OHLC data\n    function genOHLC(days: number, startPrice: number) {\n        const data: any[] = [];\n        let price = startPrice;\n        const baseDate = new Date('2024-01-02');\n        for (let i = 0; i < days; i++) {\n            const date = new Date(baseDate);\n            date.setDate(baseDate.getDate() + i);\n            const change = (rand() - 0.48) * 4;  // slight upward bias\n            const open = Math.round(price * 100) / 100;\n            const close = Math.round((price + change) * 100) / 100;\n            const high = Math.round((Math.max(open, close) + rand() * 2) * 100) / 100;\n            const low = Math.round((Math.min(open, close) - rand() * 2) * 100) / 100;\n            data.push({\n                Date: date.toISOString().slice(0, 10),\n                Open: open, High: high, Low: low, Close: close,\n            });\n            price = close;\n        }\n        return data;\n    }\n\n    // 1. 30-day stock price\n    {\n        const data = genOHLC(30, 150);\n        tests.push({\n            title: '30-day OHLC',\n            description: 'One month of stock data — classic candlestick',\n            tags: ['temporal', 'quantitative', 'small'],\n            chartType: 'Candlestick Chart',\n            data,\n            fields: [makeField('Date'), makeField('Open'), makeField('High'), makeField('Low'), makeField('Close')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Date', levels: [] },\n                Open: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                High: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Low: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Close: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                open: makeEncodingItem('Open'),\n                high: makeEncodingItem('High'),\n                low: makeEncodingItem('Low'),\n                close: makeEncodingItem('Close'),\n            },\n        });\n    }\n\n    // 2. 90-day (denser candles)\n    {\n        const data = genOHLC(90, 50);\n        tests.push({\n            title: '90-day OHLC (dense)',\n            description: 'Three months — tests bar width auto-sizing',\n            tags: ['temporal', 'quantitative', 'medium'],\n            chartType: 'Candlestick Chart',\n            data,\n            fields: [makeField('Date'), makeField('Open'), makeField('High'), makeField('Low'), makeField('Close')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Date', levels: [] },\n                Open: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                High: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Low: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Close: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                open: makeEncodingItem('Open'),\n                high: makeEncodingItem('High'),\n                low: makeEncodingItem('Low'),\n                close: makeEncodingItem('Close'),\n            },\n        });\n    }\n\n    // 3. Penny stock (low prices, high volatility)\n    {\n        const data = genOHLC(20, 3);\n        tests.push({\n            title: 'Penny stock (20 days)',\n            description: 'Low prices near zero — tests scale: {zero: false}',\n            tags: ['temporal', 'quantitative', 'small'],\n            chartType: 'Candlestick Chart',\n            data,\n            fields: [makeField('Date'), makeField('Open'), makeField('High'), makeField('Low'), makeField('Close')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Date', levels: [] },\n                Open: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                High: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Low: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Close: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                open: makeEncodingItem('Open'),\n                high: makeEncodingItem('High'),\n                low: makeEncodingItem('Low'),\n                close: makeEncodingItem('Close'),\n            },\n        });\n    }\n\n    // 4. Multi-stock column facet\n    {\n        const tickers = ['AAPL', 'GOOG', 'MSFT'];\n        const data: any[] = [];\n        for (const ticker of tickers) {\n            const startPrice = ticker === 'AAPL' ? 180 : ticker === 'GOOG' ? 140 : 350;\n            let price = startPrice;\n            const baseDate = new Date('2024-03-01');\n            for (let i = 0; i < 20; i++) {\n                const date = new Date(baseDate);\n                date.setDate(baseDate.getDate() + i);\n                const change = (rand() - 0.48) * 4;\n                const open = Math.round(price * 100) / 100;\n                const close = Math.round((price + change) * 100) / 100;\n                const high = Math.round((Math.max(open, close) + rand() * 2) * 100) / 100;\n                const low = Math.round((Math.min(open, close) - rand() * 2) * 100) / 100;\n                data.push({ Date: date.toISOString().slice(0, 10), Ticker: ticker, Open: open, High: high, Low: low, Close: close });\n                price = close;\n            }\n        }\n        tests.push({\n            title: 'Multi-stock facet (3 tickers)',\n            description: '3 stocks side-by-side — faceted by ticker',\n            tags: ['temporal', 'quantitative', 'facet', 'medium'],\n            chartType: 'Candlestick Chart',\n            data,\n            fields: [makeField('Date'), makeField('Ticker'), makeField('Open'), makeField('High'), makeField('Low'), makeField('Close')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Date', levels: [] },\n                Ticker: { type: Type.String, semanticType: 'Category', levels: tickers },\n                Open: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                High: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Low: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Close: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                open: makeEncodingItem('Open'),\n                high: makeEncodingItem('High'),\n                low: makeEncodingItem('Low'),\n                close: makeEncodingItem('Close'),\n                column: makeEncodingItem('Ticker'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Radar Chart ------\nexport function genRadarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Single entity, 5 axes (long format)\n    {\n        const data = [\n            { Player: 'Player A', Metric: 'Speed', Value: 85 },\n            { Player: 'Player A', Metric: 'Shooting', Value: 70 },\n            { Player: 'Player A', Metric: 'Passing', Value: 90 },\n            { Player: 'Player A', Metric: 'Dribbling', Value: 80 },\n            { Player: 'Player A', Metric: 'Defense', Value: 60 },\n        ];\n        tests.push({\n            title: 'Single Player Stats (5 axes)',\n            description: 'One polygon, 5 numeric dimensions, long format',\n            tags: ['radar', 'single'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Player'), makeField('Metric'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Value'), color: makeEncodingItem('Player') },\n        });\n    }\n\n    // 2. Two entities comparison\n    {\n        const data = [\n            { Team: 'Team A', Metric: 'Attack', Value: 85 },\n            { Team: 'Team A', Metric: 'Defense', Value: 70 },\n            { Team: 'Team A', Metric: 'Midfield', Value: 78 },\n            { Team: 'Team A', Metric: 'Speed', Value: 90 },\n            { Team: 'Team A', Metric: 'Stamina', Value: 65 },\n            { Team: 'Team A', Metric: 'Tactics', Value: 80 },\n            { Team: 'Team B', Metric: 'Attack', Value: 72 },\n            { Team: 'Team B', Metric: 'Defense', Value: 88 },\n            { Team: 'Team B', Metric: 'Midfield', Value: 82 },\n            { Team: 'Team B', Metric: 'Speed', Value: 68 },\n            { Team: 'Team B', Metric: 'Stamina', Value: 85 },\n            { Team: 'Team B', Metric: 'Tactics', Value: 75 },\n        ];\n        tests.push({\n            title: 'Two Teams Comparison (6 axes)',\n            description: 'Two overlapping polygons, long format',\n            tags: ['radar', 'comparison'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Team'), makeField('Metric'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Value'), color: makeEncodingItem('Team') },\n        });\n    }\n\n    // 3. Three entities, no fill\n    {\n        const data = [\n            { Product: 'Widget', Metric: 'Quality', Value: 90 },\n            { Product: 'Widget', Metric: 'Price', Value: 60 },\n            { Product: 'Widget', Metric: 'Durability', Value: 80 },\n            { Product: 'Widget', Metric: 'Design', Value: 75 },\n            { Product: 'Widget', Metric: 'Support', Value: 85 },\n            { Product: 'Gadget', Metric: 'Quality', Value: 70 },\n            { Product: 'Gadget', Metric: 'Price', Value: 85 },\n            { Product: 'Gadget', Metric: 'Durability', Value: 65 },\n            { Product: 'Gadget', Metric: 'Design', Value: 90 },\n            { Product: 'Gadget', Metric: 'Support', Value: 50 },\n            { Product: 'Doohickey', Metric: 'Quality', Value: 80 },\n            { Product: 'Doohickey', Metric: 'Price', Value: 70 },\n            { Product: 'Doohickey', Metric: 'Durability', Value: 90 },\n            { Product: 'Doohickey', Metric: 'Design', Value: 60 },\n            { Product: 'Doohickey', Metric: 'Support', Value: 70 },\n        ];\n        tests.push({\n            title: 'Product Comparison (unfilled)',\n            description: 'Three polygons, filled=false, long format',\n            tags: ['radar', 'multi', 'config'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Product'), makeField('Metric'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Value'), color: makeEncodingItem('Product') },\n            chartProperties: { filled: false },\n        });\n    }\n\n    // 4. Faceted radar — one radar per region\n    {\n        const data = [\n            { Region: 'North', Metric: 'Sales', Value: 80 },\n            { Region: 'North', Metric: 'Profit', Value: 65 },\n            { Region: 'North', Metric: 'Growth', Value: 90 },\n            { Region: 'North', Metric: 'Retention', Value: 70 },\n            { Region: 'South', Metric: 'Sales', Value: 60 },\n            { Region: 'South', Metric: 'Profit', Value: 85 },\n            { Region: 'South', Metric: 'Growth', Value: 50 },\n            { Region: 'South', Metric: 'Retention', Value: 75 },\n            { Region: 'East', Metric: 'Sales', Value: 70 },\n            { Region: 'East', Metric: 'Profit', Value: 72 },\n            { Region: 'East', Metric: 'Growth', Value: 68 },\n            { Region: 'East', Metric: 'Retention', Value: 88 },\n        ];\n        tests.push({\n            title: 'Faceted Radar by Region',\n            description: 'One radar per region via column facet',\n            tags: ['radar', 'facet'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Region'), makeField('Metric'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Value'), column: makeEncodingItem('Region') },\n        });\n    }\n\n    // 5. Long labels — test that labels don't overlap the chart\n    {\n        const data = [\n            { Category: 'Customer Satisfaction Score', Assessment: 'Product A', Score: 82 },\n            { Category: 'Annual Revenue Growth Rate', Assessment: 'Product A', Score: 91 },\n            { Category: 'Employee Retention', Assessment: 'Product A', Score: 74 },\n            { Category: 'Market Share Percentage', Assessment: 'Product A', Score: 68 },\n            { Category: 'Net Promoter Score', Assessment: 'Product A', Score: 88 },\n            { Category: 'Customer Satisfaction Score', Assessment: 'Product B', Score: 70 },\n            { Category: 'Annual Revenue Growth Rate', Assessment: 'Product B', Score: 65 },\n            { Category: 'Employee Retention', Assessment: 'Product B', Score: 85 },\n            { Category: 'Market Share Percentage', Assessment: 'Product B', Score: 78 },\n            { Category: 'Net Promoter Score', Assessment: 'Product B', Score: 60 },\n        ];\n        tests.push({\n            title: 'Long Labels (5 axes)',\n            description: 'Labels with long text should not overlap the radar',\n            tags: ['radar', 'labels'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Category'), makeField('Assessment'), makeField('Score')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Score'), color: makeEncodingItem('Assessment') },\n        });\n    }\n\n    // 6. Many axes with long labels (8)\n    {\n        const metrics = [\n            'Overall User Experience', 'First Contentful Paint',\n            'Time to Interactive', 'Cumulative Layout Shift',\n            'Server Response Time', 'Error Rate per Minute',\n            'Database Query Latency', 'API Throughput',\n        ];\n        const data = metrics.flatMap(m => [\n            { App: 'Frontend', KPI: m, Rating: Math.round(50 + Math.random() * 50) },\n            { App: 'Backend', KPI: m, Rating: Math.round(40 + Math.random() * 60) },\n        ]);\n        tests.push({\n            title: 'Many Axes + Long Labels (8 axes)',\n            description: '8 axes with verbose labels, two groups',\n            tags: ['radar', 'labels', 'many-axes'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('App'), makeField('KPI'), makeField('Rating')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('KPI'), y: makeEncodingItem('Rating'), color: makeEncodingItem('App') },\n        });\n    }\n\n    // 7. Many many metrics (12 axes)\n    {\n        const metrics = [\n            'Revenue', 'Profit Margin', 'Customer Retention',\n            'Brand Awareness', 'Market Penetration', 'Product Quality',\n            'Employee Engagement', 'Innovation Index', 'Supply Chain Efficiency',\n            'Digital Transformation', 'Sustainability Rating', 'Compliance Score',\n        ];\n        const data = metrics.flatMap(m => [\n            { Division: 'Americas', Factor: m, Score: Math.round(30 + Math.random() * 70) },\n            { Division: 'EMEA', Factor: m, Score: Math.round(30 + Math.random() * 70) },\n            { Division: 'APAC', Factor: m, Score: Math.round(30 + Math.random() * 70) },\n        ]);\n        tests.push({\n            title: 'Many Metrics (12 axes)',\n            description: '12 axes with 3 groups — tests label crowding',\n            tags: ['radar', 'labels', 'crowded'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Division'), makeField('Factor'), makeField('Score')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Factor'), y: makeEncodingItem('Score'), color: makeEncodingItem('Division') },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Pyramid Chart ------\nexport function genPyramidTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(777);\n\n    // Helper to generate long-format pyramid data from two groups\n    const makeLongData = (categories: string[], groupA: string, groupB: string, valField: string, minA: number, rangeA: number, minB: number, rangeB: number) => {\n        const data: any[] = [];\n        for (const cat of categories) {\n            data.push({ [valField]: Math.round(minA + rand() * rangeA), Group: groupA, Category: cat });\n            data.push({ [valField]: Math.round(minB + rand() * rangeB), Group: groupB, Category: cat });\n        }\n        return data;\n    };\n\n    // 1. Classic population pyramid — Age Group × Gender × Population\n    {\n        const ageGroups = ['0-9', '10-19', '20-29', '30-39', '40-49', '50-59', '60-69', '70-79', '80+'];\n        const data: any[] = [];\n        for (const ag of ageGroups) {\n            data.push({ 'Age Group': ag, Gender: 'Male', Population: Math.round(500 + rand() * 4500) });\n            data.push({ 'Age Group': ag, Gender: 'Female', Population: Math.round(500 + rand() * 4500) });\n        }\n        tests.push({\n            title: 'Population pyramid (9 age groups)',\n            description: 'Classic population pyramid — long format with Gender as color',\n            tags: ['nominal', 'quantitative', 'color', 'small'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Age Group'), makeField('Population'), makeField('Gender')],\n            metadata: {\n                'Age Group': { type: Type.String, semanticType: 'Category', levels: ageGroups },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: ['Male', 'Female'] },\n            },\n            encodingMap: { y: makeEncodingItem('Age Group'), x: makeEncodingItem('Population'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    // 2. Workforce pyramid\n    {\n        const grades = ['Junior', 'Mid-level', 'Senior', 'Lead', 'Manager', 'Director'];\n        const data: any[] = [];\n        for (const g of grades) {\n            data.push({ Grade: g, Type: 'Full-Time', Count: Math.round(20 + rand() * 200) });\n            data.push({ Grade: g, Type: 'Part-Time', Count: Math.round(10 + rand() * 80) });\n        }\n        tests.push({\n            title: 'Workforce pyramid (6 grades)',\n            description: 'Grade levels on y, Count on x, Full-Time vs Part-Time as color',\n            tags: ['nominal', 'quantitative', 'color', 'small'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Grade'), makeField('Count'), makeField('Type')],\n            metadata: {\n                Grade: { type: Type.String, semanticType: 'Category', levels: grades },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n                Type: { type: Type.String, semanticType: 'Category', levels: ['Full-Time', 'Part-Time'] },\n            },\n            encodingMap: { y: makeEncodingItem('Grade'), x: makeEncodingItem('Count'), color: makeEncodingItem('Type') },\n        });\n    }\n\n    // 3. Survey responses\n    {\n        const levels = ['Very Low', 'Low', 'Medium', 'High', 'Very High'];\n        const data: any[] = [];\n        for (const lv of levels) {\n            data.push({ 'Satisfaction Level': lv, Response: 'Agree', Count: Math.round(50 + rand() * 300) });\n            data.push({ 'Satisfaction Level': lv, Response: 'Disagree', Count: Math.round(30 + rand() * 250) });\n        }\n        tests.push({\n            title: 'Survey pyramid (5 levels)',\n            description: 'Satisfaction levels — Agree vs Disagree',\n            tags: ['ordinal', 'quantitative', 'color', 'small'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Satisfaction Level'), makeField('Count'), makeField('Response')],\n            metadata: {\n                'Satisfaction Level': { type: Type.String, semanticType: 'Category', levels: levels },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n                Response: { type: Type.String, semanticType: 'Category', levels: ['Agree', 'Disagree'] },\n            },\n            encodingMap: { y: makeEncodingItem('Satisfaction Level'), x: makeEncodingItem('Count'), color: makeEncodingItem('Response') },\n        });\n    }\n\n    // 4. Income bracket pyramid (medium)\n    {\n        const brackets = ['<$20K', '$20-30K', '$30-40K', '$40-50K', '$50-60K', '$60-70K',\n            '$70-80K', '$80-90K', '$90-100K', '$100-120K', '$120-150K', '$150K+'];\n        const data: any[] = [];\n        for (const b of brackets) {\n            data.push({ 'Income Bracket': b, Area: 'Urban', Count: Math.round(100 + rand() * 3000) });\n            data.push({ 'Income Bracket': b, Area: 'Rural', Count: Math.round(80 + rand() * 2000) });\n        }\n        tests.push({\n            title: 'Income pyramid (12 brackets)',\n            description: '12 income bands — Urban vs Rural',\n            tags: ['ordinal', 'quantitative', 'color', 'medium'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Income Bracket'), makeField('Count'), makeField('Area')],\n            metadata: {\n                'Income Bracket': { type: Type.String, semanticType: 'Category', levels: brackets },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n                Area: { type: Type.String, semanticType: 'Category', levels: ['Urban', 'Rural'] },\n            },\n            encodingMap: { y: makeEncodingItem('Income Bracket'), x: makeEncodingItem('Count'), color: makeEncodingItem('Area') },\n        });\n    }\n\n    // 5. Education pyramid\n    {\n        const degrees = ['High School', 'Associate', 'Bachelor', 'Master', 'Doctorate'];\n        const data: any[] = [];\n        for (const d of degrees) {\n            data.push({ 'Degree Level': d, Outcome: 'Admitted', Count: Math.round(200 + rand() * 5000) });\n            data.push({ 'Degree Level': d, Outcome: 'Rejected', Count: Math.round(100 + rand() * 3000) });\n        }\n        tests.push({\n            title: 'Education pyramid (5 degrees)',\n            description: 'Degree levels — Admitted vs Rejected applicants',\n            tags: ['ordinal', 'quantitative', 'color', 'small'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Degree Level'), makeField('Count'), makeField('Outcome')],\n            metadata: {\n                'Degree Level': { type: Type.String, semanticType: 'Category', levels: degrees },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n                Outcome: { type: Type.String, semanticType: 'Category', levels: ['Admitted', 'Rejected'] },\n            },\n            encodingMap: { y: makeEncodingItem('Degree Level'), x: makeEncodingItem('Count'), color: makeEncodingItem('Outcome') },\n        });\n    }\n\n    // 6. Country comparison\n    {\n        const countries = genCategories('Country', 10);\n        const data: any[] = [];\n        for (const c of countries) {\n            data.push({ Country: c, Direction: 'Import', Value: Math.round(1000 + rand() * 50000) });\n            data.push({ Country: c, Direction: 'Export', Value: Math.round(1000 + rand() * 50000) });\n        }\n        tests.push({\n            title: 'Trade pyramid (10 countries)',\n            description: '10 countries — Import vs Export trade values',\n            tags: ['nominal', 'quantitative', 'color', 'medium'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Country'), makeField('Value'), makeField('Direction')],\n            metadata: {\n                Country: { type: Type.String, semanticType: 'Country', levels: countries },\n                Value: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Direction: { type: Type.String, semanticType: 'Category', levels: ['Import', 'Export'] },\n            },\n            encodingMap: { y: makeEncodingItem('Country'), x: makeEncodingItem('Value'), color: makeEncodingItem('Direction') },\n        });\n    }\n\n    // 7. Large cardinality (20 age bands)\n    {\n        const ageBands = Array.from({ length: 20 }, (_, i) => {\n            const lo = i * 5;\n            const hi = lo + 4;\n            return `${lo}-${hi}`;\n        });\n        const data: any[] = [];\n        for (const ag of ageBands) {\n            data.push({ 'Age Band': ag, Gender: 'Male', Population: Math.round(200 + rand() * 8000) });\n            data.push({ 'Age Band': ag, Gender: 'Female', Population: Math.round(200 + rand() * 8000) });\n        }\n        tests.push({\n            title: 'Overstretch pyramid (20 age bands)',\n            description: '20 fine-grained age bands — tests y-axis elastic overstretch',\n            tags: ['nominal', 'quantitative', 'color', 'large', 'overstretch'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Age Band'), makeField('Population'), makeField('Gender')],\n            metadata: {\n                'Age Band': { type: Type.String, semanticType: 'Category', levels: ageBands },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: ['Male', 'Female'] },\n            },\n            encodingMap: { y: makeEncodingItem('Age Band'), x: makeEncodingItem('Population'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    // 8. Negative values — should trigger warning\n    {\n        const ageGroups = ['0-14', '15-29', '30-44', '45-59', '60-74', '75+'];\n        const data: any[] = [];\n        for (const ag of ageGroups) {\n            data.push({ 'Age Group': ag, Gender: 'Male', Population: Math.round(-500 + rand() * 4000) });\n            data.push({ 'Age Group': ag, Gender: 'Female', Population: Math.round(-300 + rand() * 3500) });\n        }\n        tests.push({\n            title: 'Negative values warning (6 groups)',\n            description: 'Some values are negative — should trigger negative-value warnings',\n            tags: ['nominal', 'quantitative', 'color', 'small', 'warning', 'negative'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Age Group'), makeField('Population'), makeField('Gender')],\n            metadata: {\n                'Age Group': { type: Type.String, semanticType: 'Category', levels: ageGroups },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: ['Male', 'Female'] },\n            },\n            encodingMap: { y: makeEncodingItem('Age Group'), x: makeEncodingItem('Population'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Rose Chart (Nightingale / Coxcomb) ------\nexport function genRoseTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1100);\n\n    // 1. Basic rose — wind directions × speed\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const data = directions.map(d => ({ Direction: d, Speed: Math.round(5 + rand() * 25) }));\n        tests.push({\n            title: 'Rose (basic, 8 directions)',\n            description: 'Wind speed by compass direction — classic coxcomb',\n            tags: ['nominal', 'quantitative', 'small'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Category', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 2. Stacked rose — wind directions × speed × season\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const seasons = ['Spring', 'Summer', 'Autumn', 'Winter'];\n        const data: any[] = [];\n        for (const d of directions) {\n            for (const s of seasons) {\n                data.push({ Direction: d, Speed: Math.round(3 + rand() * 20), Season: s });\n            }\n        }\n        tests.push({\n            title: 'Stacked Rose (8 dirs × 4 seasons)',\n            description: 'Wind speed stacked by season — polar stacked bar',\n            tags: ['nominal', 'quantitative', 'color', 'stacked'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed'), makeField('Season')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Category', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Season: { type: Type.String, semanticType: 'Category', levels: seasons },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed'), color: makeEncodingItem('Season') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 3. Rose with many categories\n    {\n        const cats = genCategories('Category', 12);\n        const data = cats.map(c => ({ Category: c, Value: Math.round(10 + rand() * 90) }));\n        tests.push({\n            title: 'Rose (medium, 12 categories)',\n            description: '12 categories — tests angular spacing with more slices',\n            tags: ['nominal', 'quantitative', 'medium'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Category'), makeField('Value')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: cats },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    // 4. Rose with color stacking and many groups\n    {\n        const products = genCategories('Product', 6);\n        const regions = ['North', 'South', 'East', 'West'];\n        const data: any[] = [];\n        for (const p of products) {\n            for (const r of regions) {\n                data.push({ Product: p, Sales: Math.round(100 + rand() * 900), Region: r });\n            }\n        }\n        tests.push({\n            title: 'Stacked Rose (6 products × 4 regions)',\n            description: 'Product sales stacked by region',\n            tags: ['nominal', 'quantitative', 'color', 'stacked', 'medium'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Product'), makeField('Sales'), makeField('Region')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Product', levels: products },\n                Sales: { type: Type.Number, semanticType: 'Revenue', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n            },\n            encodingMap: { x: makeEncodingItem('Product'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    // 5. Rose with inner radius (donut-rose)\n    {\n        const months = genMonths(12);\n        const data = months.map(m => ({ Month: m, Rainfall: Math.round(20 + rand() * 150) }));\n        tests.push({\n            title: 'Donut Rose (12 months, innerRadius)',\n            description: 'Monthly rainfall with inner radius — donut style rose',\n            tags: ['ordinal', 'quantitative', 'properties'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Month'), makeField('Rainfall')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Rainfall: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Rainfall') },\n            chartProperties: { innerRadius: 40 },\n        });\n    }\n\n    // 6. Rose with padAngle\n    {\n        const departments = genCategories('Department', 8);\n        const data = departments.map(d => ({ Department: d, Score: Math.round(50 + rand() * 50) }));\n        tests.push({\n            title: 'Rose with gap (padAngle)',\n            description: 'Departments with angle padding between slices',\n            tags: ['nominal', 'quantitative', 'properties'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Department'), makeField('Score')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Department', levels: departments },\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Department'), y: makeEncodingItem('Score') },\n            chartProperties: { padAngle: 0.03 },\n        });\n    }\n\n    // 7. Faceted rose — directions by year (column facet)\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const years = ['2022', '2023', '2024'];\n        const data: any[] = [];\n        for (const yr of years) {\n            for (const d of directions) {\n                data.push({ Direction: d, Speed: Math.round(4 + rand() * 20), Year: yr });\n            }\n        }\n        tests.push({\n            title: 'Faceted Rose (column)',\n            description: 'Wind rose per year — faceted by column',\n            tags: ['nominal', 'quantitative', 'facet'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed'), makeField('Year')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Direction', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Year: { type: Type.String, semanticType: 'Year', levels: years },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed'), column: makeEncodingItem('Year') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 8. Faceted stacked rose — directions × season, faceted by location\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const seasons = ['Spring', 'Summer', 'Autumn', 'Winter'];\n        const locations = ['Coastal', 'Inland'];\n        const data: any[] = [];\n        for (const loc of locations) {\n            for (const d of directions) {\n                for (const s of seasons) {\n                    data.push({ Direction: d, Speed: Math.round(3 + rand() * 18), Season: s, Location: loc });\n                }\n            }\n        }\n        tests.push({\n            title: 'Faceted Stacked Rose (column)',\n            description: 'Stacked wind rose by season, faceted by location',\n            tags: ['nominal', 'quantitative', 'color', 'stacked', 'facet'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed'), makeField('Season'), makeField('Location')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Direction', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Season: { type: Type.String, semanticType: 'Category', levels: seasons },\n                Location: { type: Type.String, semanticType: 'Category', levels: locations },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed'),\n                color: makeEncodingItem('Season'), column: makeEncodingItem('Location'),\n            },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 9. Faceted rose — monthly rainfall by region (3 regions)\n    {\n        const months = genMonths(12);\n        const regions = ['North', 'Central', 'South'];\n        const data: any[] = [];\n        for (const r of regions) {\n            for (const m of months) {\n                data.push({ Month: m, Rainfall: Math.round(10 + rand() * 140), Region: r });\n            }\n        }\n        tests.push({\n            title: 'Faceted Rose (monthly × region)',\n            description: 'Monthly rainfall rose faceted by region',\n            tags: ['ordinal', 'quantitative', 'facet'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Month'), makeField('Rainfall'), makeField('Region')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Rainfall: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Rainfall'), column: makeEncodingItem('Region') },\n        });\n    }\n\n    return tests;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/stress-tests.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from '../../../data/types';\nimport { Channel, EncodingItem } from '../../../components/ComponentType';\nimport { AssembleOptions } from '../core/types';\nimport { TestCase, makeField, makeEncodingItem, buildMetadata } from './types';\nimport { seededRandom, genCategories } from './generators';\n\n// ------ Overflow / Discrete Value Capping ------\nexport function genOverflowTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(777);\n\n    // Helper: generate N category names\n    const cats = (prefix: string, n: number) => {\n        const pad = String(n).length;\n        return Array.from({ length: n }, (_, i) => `${prefix}${String(i + 1).padStart(pad, '0')}`);\n    };\n\n    // ---- 1. Bar chart: increasing x cardinality ----\n    for (const n of [50, 100, 150, 200]) {\n        const categories = cats('Cat', n);\n        const data = categories.map(c => ({ Category: c, Sales: Math.round(10 + rand() * 500) }));\n        tests.push({\n            title: `Bar — ${n} x-categories`,\n            description: `Bar chart with ${n} discrete x values to test capping`,\n            tags: ['overflow', 'bar', `n-${n}`],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Category'), makeField('Sales')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Sales') },\n        });\n    }\n\n    // ---- 2. Horizontal bar: increasing y cardinality ----\n    for (const n of [50, 100, 200]) {\n        const categories = cats('Item', n);\n        const data = categories.map(c => ({ Item: c, Revenue: Math.round(10 + rand() * 800) }));\n        tests.push({\n            title: `Horiz Bar — ${n} y-categories`,\n            description: `Horizontal bar chart with ${n} discrete y values`,\n            tags: ['overflow', 'bar', 'horizontal', `n-${n}`],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Item'), makeField('Revenue')],\n            metadata: buildMetadata(data),\n            encodingMap: { y: makeEncodingItem('Item'), x: makeEncodingItem('Revenue') },\n        });\n    }\n\n    // ---- 3. Grouped bar: x × color overflow ----\n    for (const [xN, colorN] of [[30, 5], [50, 5], [80, 3], [50, 10]] as const) {\n        const xCats = cats('Product', xN);\n        const colors = cats('Region', colorN);\n        const data: any[] = [];\n        for (const x of xCats) {\n            for (const c of colors) {\n                data.push({ Product: x, Region: c, Sales: Math.round(10 + rand() * 400) });\n            }\n        }\n        tests.push({\n            title: `Grouped — ${xN}x × ${colorN}color`,\n            description: `Grouped bar: ${xN} x-values × ${colorN} color groups = ${xN * colorN} sub-bars`,\n            tags: ['overflow', 'grouped', `x-${xN}`, `color-${colorN}`],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Product'), makeField('Region'), makeField('Sales')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                x: makeEncodingItem('Product'),\n                y: makeEncodingItem('Sales'),\n                group: makeEncodingItem('Region'),\n            },\n        });\n    }\n\n    // ---- 4. Stacked bar: many x values ----\n    for (const n of [50, 150]) {\n        const xCats = cats('City', n);\n        const segments = cats('Seg', 3);\n        const data: any[] = [];\n        for (const x of xCats) {\n            for (const s of segments) {\n                data.push({ City: x, Segment: s, Amount: Math.round(10 + rand() * 300) });\n            }\n        }\n        tests.push({\n            title: `Stacked — ${n} x-categories`,\n            description: `Stacked bar with ${n} x values and 3 segments`,\n            tags: ['overflow', 'stacked', `n-${n}`],\n            chartType: 'Stacked Bar Chart',\n            data,\n            fields: [makeField('City'), makeField('Segment'), makeField('Amount')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                x: makeEncodingItem('City'),\n                y: makeEncodingItem('Amount'),\n                color: makeEncodingItem('Segment'),\n            },\n        });\n    }\n\n    // ---- 5. Heatmap: large x × large y ----\n    for (const [xN, yN] of [[30, 30], [80, 20], [50, 50]] as const) {\n        const xCats = cats('Col', xN);\n        const yCats = cats('Row', yN);\n        const data: any[] = [];\n        for (const x of xCats) {\n            for (const y of yCats) {\n                data.push({ Col: x, Row: y, Value: Math.round(rand() * 100) });\n            }\n        }\n        tests.push({\n            title: `Heatmap — ${xN}x × ${yN}y`,\n            description: `Heatmap with ${xN}×${yN} = ${xN * yN} cells`,\n            tags: ['overflow', 'heatmap', `x-${xN}`, `y-${yN}`],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Col'), makeField('Row'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                x: makeEncodingItem('Col'),\n                y: makeEncodingItem('Row'),\n                color: makeEncodingItem('Value'),\n            },\n        });\n    }\n\n    // ---- 6. Large color cardinality (numeric on color) ----\n    {\n        const countries = cats('Country', 5);\n        const data: any[] = [];\n        for (const c of countries) {\n            for (let age = 15; age <= 85; age++) {\n                data.push({ Country: c, Age: age, Count: Math.round(50 + rand() * 200) });\n            }\n        }\n        tests.push({\n            title: `Color overflow — 71 numeric values`,\n            description: `Age 15-85 on color channel (71 unique values)`,\n            tags: ['overflow', 'color', 'numeric-color'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Country'), makeField('Age'), makeField('Count')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                x: makeEncodingItem('Country'),\n                y: makeEncodingItem('Count'),\n                color: makeEncodingItem('Age'),\n            },\n        });\n    }\n\n    // ---- 7. Boxplot with many categories ----\n    for (const n of [50, 120]) {\n        const categories = cats('Group', n);\n        const data: any[] = [];\n        for (const c of categories) {\n            for (let i = 0; i < 10; i++) {\n                data.push({ Group: c, Score: Math.round(rand() * 100) });\n            }\n        }\n        tests.push({\n            title: `Boxplot — ${n} groups`,\n            description: `Boxplot with ${n} discrete groups on x-axis`,\n            tags: ['overflow', 'boxplot', `n-${n}`],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Group'), makeField('Score')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Group'), y: makeEncodingItem('Score') },\n        });\n    }\n\n    // ---- 8. Faceted + overflow within subplots ----\n    {\n        const regions = cats('Region', 4);\n        const products = cats('Prod', 80);\n        const data: any[] = [];\n        for (const r of regions) {\n            for (const p of products) {\n                data.push({ Region: r, Product: p, Sales: Math.round(10 + rand() * 500) });\n            }\n        }\n        tests.push({\n            title: `Facet + 80 x-categories`,\n            description: `4 column facets each with 80 x-categories`,\n            tags: ['overflow', 'facet', 'n-80'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Region'), makeField('Product'), makeField('Sales')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                column: makeEncodingItem('Region'),\n                x: makeEncodingItem('Product'),\n                y: makeEncodingItem('Sales'),\n            },\n        });\n    }\n\n    // ---- 9. Many facet columns with small discrete x ----\n    for (const [facetN, xN] of [[8, 3], [12, 4], [15, 2], [20, 3]] as const) {\n        const facets = cats('Panel', facetN);\n        const xCats = cats('Type', xN);\n        const data: any[] = [];\n        for (const f of facets) {\n            for (const x of xCats) {\n                data.push({ Panel: f, Type: x, Value: Math.round(10 + rand() * 300) });\n            }\n        }\n        tests.push({\n            title: `${facetN} facets × ${xN} x-bars`,\n            description: `${facetN} column facets, each with only ${xN} x-categories — thin subplots`,\n            tags: ['overflow', 'facet', 'thin', `facet-${facetN}`, `x-${xN}`],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Panel'), makeField('Type'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                column: makeEncodingItem('Panel'),\n                x: makeEncodingItem('Type'),\n                y: makeEncodingItem('Value'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Elasticity & Stretch Comparison ------\nexport function genElasticityTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(999);\n\n    // ========== Helper to build a bar-chart test case with given layout ==========\n    function makeBarTest(\n        title: string,\n        description: string,\n        tags: string[],\n        xCategories: string[],\n        assembleOptions: AssembleOptions,\n        facetCategories?: string[],\n    ): TestCase {\n        const data: Record<string, any>[] = [];\n        if (facetCategories) {\n            for (const f of facetCategories) {\n                for (const x of xCategories) {\n                    data.push({ Panel: f, Category: x, Value: Math.round(10 + rand() * 500) });\n                }\n            }\n        } else {\n            for (const x of xCategories) {\n                data.push({ Category: x, Value: Math.round(10 + rand() * 500) });\n            }\n        }\n\n        const fields = facetCategories\n            ? [makeField('Panel'), makeField('Category'), makeField('Value')]\n            : [makeField('Category'), makeField('Value')];\n\n        const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n            x: makeEncodingItem('Category'),\n            y: makeEncodingItem('Value'),\n        };\n        if (facetCategories) {\n            encodingMap.column = makeEncodingItem('Panel');\n        }\n\n        return {\n            title,\n            description,\n            tags,\n            chartType: 'Bar Chart',\n            data,\n            fields,\n            metadata: buildMetadata(data),\n            encodingMap,\n            assembleOptions,\n        };\n    }\n\n    // =========================================================================\n    // Group A: Axis-only (no facets) — compare elasticity / maxStretch\n    // =========================================================================\n    const mediumCategories = genCategories('Country', 15);\n    const largeCategories = genCategories('Name', 30);\n\n    // A1: 15 x-categories — default\n    tests.push(makeBarTest(\n        '15 bars — default (e=0.5, s=2)',\n        '15 x-categories, default axis elasticity & stretch',\n        ['axis-only', 'medium', 'default'],\n        mediumCategories,\n        { elasticity: 0.5, maxStretch: 2 },\n    ));\n\n    // A2: 15 x-categories — low elasticity\n    tests.push(makeBarTest(\n        '15 bars — low axis (e=0.2, s=1.2)',\n        '15 x-categories, conservative axis stretch',\n        ['axis-only', 'medium', 'low'],\n        mediumCategories,\n        { elasticity: 0.2, maxStretch: 1.2 },\n    ));\n\n    // A3: 15 x-categories — high elasticity\n    tests.push(makeBarTest(\n        '15 bars — high axis (e=0.8, s=3)',\n        '15 x-categories, aggressive axis stretch',\n        ['axis-only', 'medium', 'high'],\n        mediumCategories,\n        { elasticity: 0.8, maxStretch: 3 },\n    ));\n\n    // A4: 30 x-categories — default\n    tests.push(makeBarTest(\n        '30 bars — default (e=0.5, s=2)',\n        '30 x-categories, default axis elasticity & stretch',\n        ['axis-only', 'large', 'default'],\n        largeCategories,\n        { elasticity: 0.5, maxStretch: 2 },\n    ));\n\n    // A5: 30 x-categories — low\n    tests.push(makeBarTest(\n        '30 bars — low axis (e=0.2, s=1.2)',\n        '30 x-categories, conservative axis stretch',\n        ['axis-only', 'large', 'low'],\n        largeCategories,\n        { elasticity: 0.2, maxStretch: 1.2 },\n    ));\n\n    // A6: 30 x-categories — high\n    tests.push(makeBarTest(\n        '30 bars — high axis (e=0.8, s=3)',\n        '30 x-categories, aggressive axis stretch',\n        ['axis-only', 'large', 'high'],\n        largeCategories,\n        { elasticity: 0.8, maxStretch: 3 },\n    ));\n\n    // =========================================================================\n    // Group B: Facet + axis — compare facet vs axis params independently\n    // =========================================================================\n    const facets8 = genCategories('Department', 8);\n    const bars5 = genCategories('Category', 5);\n    const facets12 = genCategories('Company', 12);\n    const bars8 = genCategories('Category', 8);\n\n    // B1: 8 facets × 5 bars — all defaults\n    tests.push(makeBarTest(\n        '8F × 5B — all default',\n        '8 column facets, 5 bars each, default axis & facet settings',\n        ['facet+axis', 'default'],\n        bars5,\n        { elasticity: 0.5, maxStretch: 2, facetElasticity: 0.3 },\n        facets8,\n    ));\n\n    // B2: 8 facets × 5 bars — conservative facet, default axis\n    tests.push(makeBarTest(\n        '8F × 5B — conservative facet (fe=0.15, ms=1.5)',\n        '8 column facets, 5 bars, conservative unified stretch',\n        ['facet+axis', 'conservative-facet'],\n        bars5,\n        { elasticity: 0.5, maxStretch: 1.5, facetElasticity: 0.15 },\n        facets8,\n    ));\n\n    // B3: 8 facets × 5 bars — aggressive facet, default axis\n    tests.push(makeBarTest(\n        '8F × 5B — aggressive (fe=0.6, ms=2.5)',\n        '8 column facets, 5 bars, aggressive unified stretch',\n        ['facet+axis', 'aggressive-facet'],\n        bars5,\n        { elasticity: 0.5, maxStretch: 2.5, facetElasticity: 0.6 },\n        facets8,\n    ));\n\n    // B4: 12 facets × 8 bars — all defaults\n    tests.push(makeBarTest(\n        '12F × 8B — all default',\n        '12 column facets, 8 bars each, default settings',\n        ['facet+axis', 'large', 'default'],\n        bars8,\n        { elasticity: 0.5, maxStretch: 2, facetElasticity: 0.3 },\n        facets12,\n    ));\n\n    // B5: 12 facets × 8 bars — tight budget, aggressive axis elasticity\n    tests.push(makeBarTest(\n        '12F × 8B — tight (ms=1.5, fe=0.15, e=0.8)',\n        '12 facets, 8 bars, tight unified budget + high axis elasticity',\n        ['facet+axis', 'large', 'mixed-tight-facet'],\n        bars8,\n        { elasticity: 0.8, maxStretch: 1.5, facetElasticity: 0.15 },\n        facets12,\n    ));\n\n    // B6: 12 facets × 8 bars — wide budget, low axis elasticity\n    tests.push(makeBarTest(\n        '12F × 8B — wide (ms=3, fe=0.6, e=0.2)',\n        '12 facets, 8 bars, wide unified budget + low axis elasticity',\n        ['facet+axis', 'large', 'mixed-wide-facet'],\n        bars8,\n        { elasticity: 0.2, maxStretch: 3, facetElasticity: 0.6 },\n        facets12,\n    ));\n\n    // B7: 8 facets × 5 bars — no stretch at all\n    tests.push(makeBarTest(\n        '8F × 5B — no stretch (all 1.0)',\n        '8 column facets, 5 bars, stretch disabled',\n        ['facet+axis', 'no-stretch'],\n        bars5,\n        { elasticity: 0, maxStretch: 1, facetElasticity: 0 },\n        facets8,\n    ));\n\n    return tests;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/test-data/types.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Types and helper utilities for chart gallery test cases.\n * No React/UI dependencies — pure TypeScript.\n */\n\nimport { Type } from '../../../data/types';\nimport { Channel, EncodingItem, FieldItem } from '../../../components/ComponentType';\nimport { AssembleOptions } from '../core/types';\nimport type { SemanticAnnotation } from '../core/field-semantics';\n\n// ============================================================================\n// Test Case Definition\n// ============================================================================\n\nexport interface TestCase {\n    title: string;\n    description: string;\n    tags: string[];  // e.g., ['temporal', 'large-cardinality', 'color']\n    chartType: string;\n    data: Record<string, any>[];\n    fields: FieldItem[];\n    metadata: Record<string, { type: Type; semanticType: string; levels: any[] }>;\n    encodingMap: Partial<Record<Channel, EncodingItem>>;\n    chartProperties?: Record<string, any>;\n    assembleOptions?: AssembleOptions;\n    /**\n     * Enriched semantic annotations that override the plain semanticType strings\n     * in metadata. Use this when a field needs extra info like intrinsicDomain or unit.\n     * E.g., { rating: { semanticType: 'Rating', intrinsicDomain: [1, 5] } }\n     */\n    semanticAnnotations?: Record<string, SemanticAnnotation>;\n}\n\n/** Date format definition for date stress tests */\nexport interface DateFormat {\n    label: string;\n    description: string;\n    values: any[];\n    fieldName: string;\n    expectedType: Type;\n    semanticType: string;\n}\n\n/** Gallery section definition */\nexport interface GallerySection {\n    label: string;\n    description: string;\n    entries: string[];   // keys into TEST_GENERATORS\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nexport function makeField(name: string, tableRef = 'test'): FieldItem {\n    return { id: name, name, source: 'original', tableRef };\n}\n\nexport function makeEncodingItem(fieldID: string, opts?: Partial<EncodingItem>): EncodingItem {\n    return { fieldID, ...opts };\n}\n\nexport function inferType(values: any[]): Type {\n    if (values.length === 0) return Type.String;\n    const sample = values.find(v => v != null);\n    if (typeof sample === 'number') return Type.Number;\n    if (typeof sample === 'boolean') return Type.String;\n    if (sample instanceof Date) return Type.Date;\n    // Check if string looks like a date\n    if (typeof sample === 'string' && !isNaN(Date.parse(sample)) && sample.length > 4) return Type.Date;\n    return Type.String;\n}\n\nexport function buildMetadata(data: Record<string, any>[]): Record<string, { type: Type; semanticType: string; levels: any[] }> {\n    if (data.length === 0) return {};\n    const meta: Record<string, { type: Type; semanticType: string; levels: any[] }> = {};\n    for (const key of Object.keys(data[0])) {\n        const values = data.map(r => r[key]).filter(v => v != null);\n        const type = inferType(values);\n        const levels = [...new Set(values)];\n        // Assign semantic types heuristically\n        let semanticType = '';\n        if (type === Type.Date) semanticType = 'Date';\n        else if (type === Type.Number) semanticType = 'Quantity';\n        else semanticType = 'Category';\n        meta[key] = { type, semanticType, levels };\n    }\n    return meta;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/README.md",
    "content": "# Vega-Lite Backend\n\nThe primary and most feature-complete backend for agents-chart. Compiles the core semantic layer into declarative [Vega-Lite](https://vega.github.io/vega-lite/) JSON specifications.\n\n## Output Format\n\n```jsonc\n{ \"mark\": \"bar\", \"encoding\": { \"x\": { \"field\": \"Name\", \"type\": \"nominal\" }, ... }, \"data\": { \"values\": [...] }, \"width\": 400, \"height\": 300 }\n```\n\nA declarative JSON spec consumed by the Vega-Lite renderer. Bar sizing uses `width: { step: N }`, axis/legend/tooltip configuration is fully declarative via encodings and config blocks, and faceting uses VL's native `facet` + `columns` structure.\n\n## Assembly Pipeline\n\nAll backends share Phases 0 and 1 from `core/`. Phase 2 is VL-specific.\n\n| Phase | Step | Description |\n|-------|------|-------------|\n| **0** | `resolveSemantics` | Resolve field types, aggregates, ordinal sort orders |\n| 0a | `declareLayoutMode` | Template declares banded axes, sizing hints, auto-detect binned axes |\n| 0b | `convertTemporalData` | Parse temporal strings to JS Dates |\n| 0c | `filterOverflow` | Truncate categories that overflow the canvas |\n| **1** | `computeLayout` | Compute step sizes, subplot dimensions, tick params (target-agnostic) |\n| **2** | `buildVLEncodings` → `template.instantiate` → `restructureFacets` → `vlApplyLayoutToSpec` → post-layout (facet binning, independent scales, tooltips) | Final VL spec |\n\n**Unique to VL:** The `buildVLEncodings` step translates abstract `ChannelSemantics` into VL encoding objects before templates run — other backends skip this and let templates read `channelSemantics` directly.\n\n## File Structure\n\n```\nvegalite/\n  assemble.ts          – assembleVegaLite(): Phase 2 assembly\n  instantiate-spec.ts  – vlApplyLayoutToSpec(), vlApplyTooltips()\n  index.ts             – barrel exports\n  templates/\n    index.ts           – template registry (27 templates, 7 categories)\n    scatter.ts         – Scatter Plot, Linear Regression\n    bar.ts             – Bar, Grouped Bar, Stacked Bar, Histogram, Lollipop, Pyramid\n    line.ts            – Line, Dotted Line, Bump Chart\n    area.ts            – Area, Streamgraph\n    pie.ts             – Pie Chart\n    rose.ts            – Rose Chart\n    radar.ts           – Radar Chart\n    density.ts         – Density Plot\n    candlestick.ts     – Candlestick Chart\n    waterfall.ts       – Waterfall Chart\n    lollipop.ts        – Lollipop (also in bar.ts registry)\n    jitter.ts          – Strip Plot\n    bump.ts            – Bump Chart helpers\n    custom.ts          – Custom Point/Line/Bar/Rect/Area\n    map.ts             – US Map, World Map\n    utils.ts           – shared template utilities\n```\n\n## Template Definitions (27 templates)\n\n| Category | Charts |\n|----------|--------|\n| Scatter & Point | Scatter Plot, Linear Regression, Boxplot, Strip Plot |\n| Bar | Bar Chart, Grouped Bar, Stacked Bar, Histogram, Lollipop, Pyramid |\n| Line & Area | Line Chart, Dotted Line, Bump Chart, Area Chart, Streamgraph |\n| Part-to-Whole | Pie Chart, Rose Chart, Heatmap, Waterfall Chart |\n| Statistical | Density Plot, Ranged Dot Plot, Radar Chart, Candlestick Chart |\n| Map | US Map, World Map |\n| Custom | Custom Point, Custom Line, Custom Bar, Custom Rect, Custom Area |\n\n## Known Issues & Notes\n\n- **Richest template set** of all backends (27 templates). Maps and statistical charts (density, candlestick, waterfall) are only available in VL.\n- `instantiate-spec.ts` (421 lines) is the only file that contains Vega-Lite syntax knowledge — all other files work with abstract semantics.\n- Faceting is handled via VL's native `facet` mechanism; `restructureFacets` converts column-only facets to the `facet` + `columns` structure.\n- The `buildVLEncodings` step is an extra translation layer not present in other backends — it converts `ChannelSemantics` to `{ field, type, scale, axis, ... }` encoding objects before template instantiation.\n- VL natively handles zero-baseline via `scale: { zero: true }`, bar step sizing via `width: { step }`, and legend positioning — no manual pixel math needed.\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/assemble.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Core chart assembly logic — Two-Stage Pipeline Coordinator.\n *\n * Given data, encoding definitions, and semantic types,\n * produces a complete Vega-Lite specification in two stages:\n *\n * ── ANALYSIS (VL-free) ──────────────────────────────────────\n *   Phase 0:  resolveChannelSemantics  → ChannelSemantics\n *   Step 0a:  declareLayoutMode    → LayoutDeclaration\n *   Step 0b:  convertTemporalData  → converted data\n *   Step 0c:  filterOverflow       → filtered data, nominalCounts\n *   Phase 1:  computeLayout        → LayoutResult\n *\n * ── INSTANTIATE (VL-specific) ───────────────────────────────\n *   buildVLEncodings    → resolvedEncodings\n *   template.instantiate\n *   restructureFacets\n *   vlApplyLayoutToSpec\n *   post-layout adjustments (facet binning, independent scales, tooltips)\n *\n * ── Backend Translation Responsibilities ────────────────────\n * The LayoutResult from Phase 1 is target-agnostic.  This assembler\n * translates it into Vega-Lite-specific structures:\n *\n *   subplotWidth / subplotHeight\n *     → VL `width` / `height` on the spec (or `width: {step: N}` for\n *       banded discrete axes).\n *\n *   xStep / yStep / stepPadding\n *     → VL `width: {step: N}`, `encoding.x.scale.paddingInner`, etc.\n *       VL handles bar sizing natively from the step declaration.\n *\n *   Facet wrapping\n *     → `restructureFacets()` converts column-only to `facet` +\n *       `columns: N`.  The wrapping decision uses the same parameters\n *       (maxStretch, minStep, minSubplotSize) as ECharts.\n *\n *   Axis titles, labels, legends\n *     → VL handles these declaratively via encoding / config.\n *\n * This module has NO React, Redux, or UI framework dependencies.\n */\n\nimport {\n    ChartEncoding,\n    ChartTemplateDef,\n    ChartAssemblyInput,\n    AssembleOptions,\n    LayoutDeclaration,\n    InstantiateContext,\n} from '../core/types';\nimport type { ChartWarning } from '../core/types';\nimport { vlGetTemplateDef } from './templates';\nimport { inferVisCategory, computeZeroDecision } from '../core/semantic-types';\nimport { resolveChannelSemantics, convertTemporalData } from '../core/resolve-semantics';\nimport { toTypeString, type SemanticAnnotation } from '../core/field-semantics';\nimport { filterOverflow } from '../core/filter-overflow';\nimport { computeLayout, computeChannelBudgets, computeMinSubplotDimensions } from '../core/compute-layout';\nimport { vlApplyLayoutToSpec, vlApplyTooltips } from './instantiate-spec';\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Assemble a Vega-Lite specification.\n *\n * ```ts\n * const spec = assembleVegaLite({\n *   data: { values: myRows },\n *   semantic_types: { weight: 'Quantity', mpg: 'Quantity' },\n *   chart_spec: {\n *     chartType: 'Scatter Plot',\n *     encodings: { x: { field: 'weight' }, y: { field: 'mpg' } },\n *     canvasSize: { width: 400, height: 300 },\n *   },\n *   options: { addTooltips: true },\n * });\n * ```\n */\nexport function assembleVegaLite(input: ChartAssemblyInput): any {\n    const chartType = input.chart_spec.chartType;\n    const encodings = input.chart_spec.encodings;\n    const data = input.data.values ?? [];\n    const semanticTypes = input.semantic_types ?? {};\n    const canvasSize = input.chart_spec.canvasSize ?? { width: 400, height: 320 };\n    const chartProperties = input.chart_spec.chartProperties;\n    const options = input.options ?? {};\n    const chartTemplate = vlGetTemplateDef(chartType) as ChartTemplateDef;\n    if (!chartTemplate) {\n        throw new Error(`Unknown chart type: ${chartType}`);\n    }\n\n    const warnings: ChartWarning[] = [];\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // PHASE 0: Resolve Semantics (VL-free)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const tplMark = chartTemplate.template?.mark;\n    const templateMarkType = typeof tplMark === 'string' ? tplMark : tplMark?.type;\n\n    // Convert temporal data once — feeds semantic resolution and all downstream stages\n    const convertedData = convertTemporalData(data, semanticTypes);\n\n    const channelSemantics = resolveChannelSemantics(\n        encodings, data, semanticTypes, convertedData,\n    );\n\n    // Finalize zero-baseline (requires template mark knowledge)\n    const effectiveMarkType = templateMarkType || 'point';\n    for (const [channel, cs] of Object.entries(channelSemantics)) {\n        if ((channel === 'x' || channel === 'y') && cs.type === 'quantitative') {\n            const numericValues = data\n                .map(r => r[cs.field])\n                .filter((v: any) => v != null && typeof v === 'number' && !isNaN(v));\n            cs.zero = computeZeroDecision(\n                cs.semanticAnnotation.semanticType, channel, effectiveMarkType, numericValues,\n            );\n        }\n    }\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // STEP 0a: declareLayoutMode (VL-free template hook)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const declaration: LayoutDeclaration = chartTemplate.declareLayoutMode\n        ? chartTemplate.declareLayoutMode(channelSemantics, data, chartProperties)\n        : {};\n\n    // Auto-detect binnedAxes from template encoding if not declared\n    if (!declaration.binnedAxes) {\n        const templateEnc = chartTemplate.template?.encoding;\n        if (templateEnc) {\n            const binnedAxes: Record<string, boolean | { maxbins?: number }> = {};\n            for (const axis of ['x', 'y']) {\n                if (templateEnc[axis]?.bin) {\n                    // Use chartProperties.binCount when available so layout\n                    // sizing matches the actual number of bins rendered.\n                    const propBins = chartProperties?.binCount;\n                    if (propBins != null) {\n                        binnedAxes[axis] = { maxbins: propBins };\n                    } else if (typeof templateEnc[axis].bin === 'object' && templateEnc[axis].bin.maxbins) {\n                        binnedAxes[axis] = templateEnc[axis].bin;\n                    } else {\n                        // Find the template's default binCount from its property definitions\n                        const binPropDef = chartTemplate.properties?.find(\n                            (p: any) => p.key === 'binCount'\n                        );\n                        const defaultBins = binPropDef?.defaultValue ?? 10;\n                        binnedAxes[axis] = { maxbins: defaultBins };\n                    }\n                }\n            }\n            if (Object.keys(binnedAxes).length > 0) {\n                declaration.binnedAxes = binnedAxes;\n            }\n        }\n    }\n\n    // Merge paramOverrides into effective options\n    const effectiveOptions: AssembleOptions = {\n        ...options,\n        ...(declaration.paramOverrides || {}),\n    };\n\n    const {\n        addTooltips: addTooltipsOpt = false,\n        maxStretch: maxStretchVal = 2,\n        minSubplotSize: minSubplotVal = 60,\n    } = effectiveOptions;\n\n    // VL facet overhead:\n    //   Fixed: y-axis labels (~35px width) + x-axis labels (~22px height)\n    //          + titles/legend margin.\n    //   Gap:   config.facet.spacing between panels; shrunk post-layout for\n    //          small subplots (see facetGapVal below).\n    if (effectiveOptions.facetFixedPadding == null) {\n        effectiveOptions.facetFixedPadding = { width: 50, height: 40 };\n    }\n    if (effectiveOptions.facetGap == null) {\n        effectiveOptions.facetGap = 10;\n    }\n    const facetFixW = effectiveOptions.facetFixedPadding.width;\n    const facetFixH = effectiveOptions.facetFixedPadding.height;\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // STEP 0b: filterOverflow (VL-free)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    // Collect mark types for sort strategy\n    const allMarkTypes = new Set<string>();\n    if (templateMarkType) allMarkTypes.add(templateMarkType);\n    if (Array.isArray(chartTemplate.template?.layer)) {\n        for (const layer of chartTemplate.template.layer) {\n            const lm = typeof layer.mark === 'string' ? layer.mark : layer.mark?.type;\n            if (lm) allMarkTypes.add(lm);\n        }\n    }\n\n    // ── Channel budgets (shared, in layout module) ─────────────────────\n    // Computes per-channel max-to-keep using the most conservative\n    // assumptions (minStep, maxStretch).  Also decides facet grid.\n    const budgets = computeChannelBudgets(\n        channelSemantics, declaration, convertedData, canvasSize, effectiveOptions,\n    );\n    const facetGridResult = budgets.facetGrid;\n\n    const overflowResult = filterOverflow(\n        channelSemantics, declaration, encodings, convertedData,\n        budgets, allMarkTypes,\n    );\n\n    let values = overflowResult.filteredData;\n    const nominalCounts = overflowResult.nominalCounts;\n    warnings.push(...overflowResult.warnings);\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // PHASE 1: Compute Layout (VL-free)\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const layoutResult = computeLayout(\n        channelSemantics,\n        declaration,\n        values,  // post-overflow filtered data\n        canvasSize,\n        effectiveOptions,\n        facetGridResult,\n    );\n\n    // Attach overflow truncations from filterOverflow\n    layoutResult.truncations = overflowResult.truncations;\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // PHASE 2: Instantiate VL Spec\n    // ═══════════════════════════════════════════════════════════════════════\n\n    // --- Build VL encodings (abstract semantics → VL encoding objects) ---\n\n    const resolvedEncodings = buildVLEncodings(\n        encodings, channelSemantics, declaration, data,\n        canvasSize, semanticTypes, templateMarkType, chartTemplate,\n    );\n\n    // --- Align sort/domain arrays to converted data types ---\n    // buildVLEncodings uses the original data, but the VL spec embeds\n    // post-conversion data (e.g. Year 1980 → \"1980\").  Re-map sort and\n    // scale.domain entries so VL can match them against data.values.\n    for (const enc of Object.values(resolvedEncodings)) {\n        const field = enc?.field;\n        if (!field) continue;\n        // Build a lookup from the converted (spec-embedded) data\n        const valMap = new Map<string, any>();\n        for (const r of values) {\n            const v = r[field];\n            if (v != null && !valMap.has(String(v))) valMap.set(String(v), v);\n        }\n        if (valMap.size === 0) continue;\n        const remap = (arr: any[]) => arr.map(v => {\n            const key = String(v);\n            return valMap.has(key) ? valMap.get(key) : v;\n        });\n        if (Array.isArray(enc.sort)) enc.sort = remap(enc.sort);\n        if (Array.isArray(enc.scale?.domain)) enc.scale.domain = remap(enc.scale.domain);\n    }\n\n    // Detect x/y discrete counts inside template layers for layered specs\n    const isDiscreteType = (t: string | undefined) => t === 'nominal' || t === 'ordinal';\n    if (Array.isArray(chartTemplate.template?.layer)) {\n        for (const axis of ['x', 'y'] as const) {\n            if (nominalCounts[axis] === 0) {\n                for (const layer of chartTemplate.template.layer) {\n                    const layerEnc = layer.encoding?.[axis];\n                    if (layerEnc?.field && isDiscreteType(layerEnc.type)) {\n                        nominalCounts[axis] = new Set(values.map((r: any) => r[layerEnc.field])).size;\n                        break;\n                    }\n                }\n                if (nominalCounts[axis] === 0 && resolvedEncodings[axis]?.field) {\n                    const enc = resolvedEncodings[axis];\n                    if (isDiscreteType(enc.type)) {\n                        nominalCounts[axis] = new Set(values.map((r: any) => r[enc.field])).size;\n                    }\n                }\n            }\n        }\n    }\n\n    // --- template.instantiate (template-specific VL spec building) ---\n\n    const vgObj = structuredClone(chartTemplate.template);\n\n    const instantiateContext: InstantiateContext = {\n        channelSemantics,\n        layout: layoutResult,\n        table: values,\n        resolvedEncodings,\n        encodings,\n        chartProperties,\n        canvasSize,\n        semanticTypes,\n        chartType,\n        assembleOptions: effectiveOptions,\n    };\n\n    chartTemplate.instantiate(vgObj, instantiateContext);\n\n    // Merge any warnings emitted by instantiate\n    if (vgObj._warnings && Array.isArray(vgObj._warnings)) {\n        warnings.push(...vgObj._warnings);\n        delete vgObj._warnings;\n    }\n\n    // --- restructureFacets (VL-specific) ---\n    // The facet grid (including wrapping) was already decided by\n    // computeChannelBudgets.  restructureFacets only performs the VL structural\n    // transform (column encoding → facet + spec for layered specs).\n\n    restructureFacets(vgObj, nominalCounts, facetGridResult);\n\n    // --- vlApplyLayoutToSpec (VL-specific: config, sizing, formatting) ---\n\n    vlApplyLayoutToSpec(vgObj, instantiateContext, warnings);\n\n    // --- Post-layout adjustments (VL-specific) ---\n\n    const defaultChartWidth = canvasSize.width;\n    const defaultChartHeight = canvasSize.height;\n\n    // Compute banded-aware minimum subplot dimensions from core helper.\n    const { minSubplotWidth, minSubplotHeight } = computeMinSubplotDimensions(\n        channelSemantics, declaration, values, effectiveOptions,\n    );\n\n    // Shrink gap for small subplots: scale linearly from the reference\n    // (10px gap at 100px subplot), with a floor of 4px.\n    const refGap = effectiveOptions.facetGap ?? 0;\n    const subplotDim = Math.min(layoutResult.subplotWidth, layoutResult.subplotHeight);\n    const REF_SUBPLOT = 100;\n    const facetGapVal = Math.max(6, Math.round(refGap * subplotDim / REF_SUBPLOT));\n\n    // Apply the computed gap to the VL spec so Vega-Lite uses it for spacing.\n    vgObj.config = vgObj.config || {};\n    vgObj.config.facet = { spacing: facetGapVal };\n\n    const maxFacetColumns = Math.max(2, Math.floor((defaultChartWidth * maxStretchVal - facetFixW) / (minSubplotWidth + facetGapVal)));\n    const maxFacetRows = Math.max(2, Math.floor((defaultChartHeight * maxStretchVal - facetFixH) / (minSubplotHeight + facetGapVal)));\n    const maxFacetNominalValues = maxFacetColumns * maxFacetRows;\n\n    // Bin quantitative facets\n    for (const channel of ['facet', 'column', 'row']) {\n        const enc = vgObj.encoding?.[channel];\n        if (enc?.type === 'quantitative') {\n            const fieldName = enc.field;\n            const uniqueValues = [...new Set(values.map((r: any) => r[fieldName]))];\n            if (uniqueValues.length > maxFacetNominalValues) {\n                enc.bin = true;\n            }\n        }\n    }\n\n    // Independent y-axis scaling for faceted charts with vastly different ranges\n    const effectiveEncoding = vgObj.spec?.encoding || vgObj.encoding;\n    const effectiveFacet = vgObj.facet || vgObj.encoding?.facet;\n    if (effectiveFacet != undefined && effectiveEncoding?.y?.type === 'quantitative') {\n        const yField = effectiveEncoding.y.field;\n        const columnField = effectiveFacet.field;\n\n        if (yField && columnField) {\n            const columnGroups = new Map<any, number>();\n            for (const row of data) {\n                const columnValue = row[columnField];\n                const yValue = row[yField];\n                if (yValue != null && !isNaN(yValue)) {\n                    const currentMax = columnGroups.get(columnValue) || 0;\n                    columnGroups.set(columnValue, Math.max(currentMax, Math.abs(yValue)));\n                }\n            }\n\n            const maxValues = Array.from(columnGroups.values()).filter(v => v > 0);\n            if (maxValues.length >= 2) {\n                const maxValue = Math.max(...maxValues);\n                const minValue = Math.min(...maxValues);\n                const ratio = maxValue / minValue;\n                const totalFacets = (layoutResult.facet?.columns ?? 1) * (layoutResult.facet?.rows ?? 1);\n                if (ratio >= 100 && totalFacets < 6) {\n                    if (!vgObj.resolve) vgObj.resolve = {};\n                    if (!vgObj.resolve.scale) vgObj.resolve.scale = {};\n                    vgObj.resolve.scale.y = \"independent\";\n                }\n            }\n        }\n    }\n\n    if (addTooltipsOpt) {\n        vlApplyTooltips(vgObj);\n    }\n\n    // ═══════════════════════════════════════════════════════════════════════\n    // RESULT\n    // ═══════════════════════════════════════════════════════════════════════\n\n    const result: any = { ...vgObj, data: { values } };\n    if (warnings.length > 0) {\n        result._warnings = warnings;\n    }\n    result._width = layoutResult.subplotWidth;\n    result._height = layoutResult.subplotHeight;\n    return result;\n}\n\n// ===========================================================================\n// buildVLEncodings — Translate abstract semantics → VL encoding objects\n// ===========================================================================\n\n/**\n * Translate Phase 0 channel semantics + declaration overrides into\n * concrete Vega-Lite encoding objects. This is the only place outside\n * template.instantiate() that constructs VL-specific syntax.\n */\nfunction buildVLEncodings(\n    encodings: Record<string, ChartEncoding>,\n    channelSemantics: Record<string, import('../core/types').ChannelSemantics>,\n    declaration: LayoutDeclaration,\n    data: any[],\n    canvasSize: { width: number; height: number },\n    semanticTypes: Record<string, string | SemanticAnnotation>,\n    templateMarkType: string | undefined,\n    chartTemplate: ChartTemplateDef,\n): Record<string, any> {\n    const resolvedEncodings: Record<string, any> = {};\n\n    // Only process channels the template declares (plus facets which are always valid)\n    const templateChannels = new Set([\n        ...(chartTemplate.channels || []),\n        'column', 'row',  // faceting is always allowed\n    ]);\n\n    for (const [channel, encoding] of Object.entries(encodings)) {\n        // Skip channels not supported by this chart type\n        if (!templateChannels.has(channel)) continue;\n\n        const encodingObj: any = {};\n        const fieldName = encoding.field;\n        const cs = channelSemantics[channel];\n\n        if (channel === \"radius\") {\n            encodingObj.scale = { type: \"sqrt\", zero: true };\n        }\n\n        // Handle count aggregate without a field\n        if (!fieldName && encoding.aggregate === \"count\") {\n            encodingObj.field = \"_count\";\n            encodingObj.title = \"Count\";\n            encodingObj.type = \"quantitative\";\n        }\n\n        if (fieldName) {\n            encodingObj.field = fieldName;\n\n            // Use Phase 0's resolved type\n            encodingObj.type = cs?.type || 'nominal';\n\n            // Explicit type override\n            if (encoding.type) {\n                encodingObj.type = encoding.type;\n            } else if (channel === 'column' || channel === 'row') {\n                if (encodingObj.type !== 'nominal' && encodingObj.type !== 'ordinal') {\n                    encodingObj.type = 'nominal';\n                }\n            }\n\n            // Aggregation handling — data is always pre-aggregated\n            if (encoding.aggregate) {\n                if (encoding.aggregate === \"count\") {\n                    encodingObj.field = \"_count\";\n                    encodingObj.title = \"Count\";\n                    encodingObj.type = \"quantitative\";\n                } else {\n                    encodingObj.field = `${fieldName}_${encoding.aggregate}`;\n                    encodingObj.type = \"quantitative\";\n                }\n            }\n\n            // Scale: quantitative X axes need tight domains for line-like marks\n            if (encodingObj.type === \"quantitative\" && channel === \"x\") {\n                if (templateMarkType === 'line' || templateMarkType === 'area' ||\n                    templateMarkType === 'trail' || templateMarkType === 'point') {\n                    encodingObj.scale = { nice: false };\n                }\n            }\n\n            // Legend sizing for high-cardinality nominal color/group\n            if (encodingObj.type === \"nominal\" && (channel === 'color' || channel === 'group')) {\n                const actualDomain = [...new Set(data.map(r => r[fieldName]))];\n                if (actualDomain.length >= 16) {\n                    if (!encodingObj.legend) encodingObj.legend = {};\n                    encodingObj.legend.symbolSize = 12;\n                    encodingObj.legend.labelFontSize = 8;\n                }\n            }\n        }\n\n        // Size channel: set scale based on resolved encoding type\n        if (channel === \"size\") {\n            const vlDefaultMax = 361;\n            const plotArea = canvasSize.width * canvasSize.height;\n            const n = Math.max(data.length, 1);\n            const fairShare = plotArea / n;\n            const targetPct = 0.6;\n            const absoluteMin = 16;\n\n            const isQuantitative = encodingObj.type === 'quantitative' || encodingObj.type === 'temporal';\n            if (isQuantitative) {\n                const maxSize = Math.round(Math.max(absoluteMin, Math.min(vlDefaultMax, fairShare * targetPct)));\n                const minSize = 9;\n                encodingObj.scale = { type: \"sqrt\", zero: true, range: [minSize, maxSize] };\n            } else {\n                const maxSize = Math.round(Math.max(absoluteMin, Math.min(vlDefaultMax, fairShare * targetPct)));\n                const minSize = Math.round(maxSize / 4);\n                encodingObj.scale = { range: [minSize, maxSize] };\n            }\n        }\n\n        // --- Sorting ---\n        // Helper: when the field's actual data values are numeric but the\n        // encoding is nominal, domain/sort arrays must keep numeric types\n        // so Vega-Lite can match them against the data.\n        const fieldIsNumeric = fieldName\n            ? data.some(r => typeof r[fieldName] === 'number')\n            : false;\n        const preserveDomainTypes = (arr: any[]): any[] => {\n            if (!fieldIsNumeric) return arr;\n            return arr.map(v => {\n                if (typeof v === 'string') {\n                    const n = Number(v);\n                    if (!isNaN(n) && String(n) === v.trim()) return n;\n                }\n                return v;\n            });\n        };\n\n        if (encoding.sortBy || encoding.sortOrder) {\n            if (!encoding.sortBy) {\n                if (encoding.sortOrder) {\n                    encodingObj.sort = encoding.sortOrder;\n                }\n            } else if (encoding.sortBy === 'x' || encoding.sortBy === 'y') {\n                if (encoding.sortBy === channel) {\n                    encodingObj.sort = `${encoding.sortOrder === \"descending\" ? \"-\" : \"\"}${encoding.sortBy}`;\n                } else {\n                    encodingObj.sort = `${encoding.sortOrder === \"ascending\" ? \"\" : \"-\"}${encoding.sortBy}`;\n                }\n            } else if (encoding.sortBy === 'color') {\n                if (encodings.color?.field) {\n                    encodingObj.sort = `${encoding.sortOrder === \"ascending\" ? \"\" : \"-\"}${encoding.sortBy}`;\n                }\n            } else {\n                try {\n                    if (fieldName) {\n                        const fieldSemType = toTypeString(semanticTypes[fieldName]);\n                        const fieldVisCat = inferVisCategory(data.map(r => r[fieldName]));\n                        let sortedValues = JSON.parse(encoding.sortBy);\n\n                        if (fieldVisCat === 'temporal' || fieldSemType === \"Year\" || fieldSemType === \"Decade\") {\n                            sortedValues = sortedValues.map((v: any) => v.toString());\n                        }\n\n                        // Preserve numeric types for nominal fields with numeric data\n                        sortedValues = preserveDomainTypes(sortedValues);\n\n                        encodingObj.sort = (encoding.sortOrder === \"ascending\" || !encoding.sortOrder)\n                            ? sortedValues : sortedValues.reverse();\n                    }\n                } catch {\n                    console.warn(`sort error > ${encoding.sortBy}`);\n                }\n            }\n        } else {\n            // Auto-sort: apply canonical ordinal sort (months, days, quarters, etc.)\n            // when available. Otherwise, set `sort: null` so VL preserves the data\n            // encounter order rather than its default alphabetical sort.\n            // Alphabetical sort breaks labels like \"Stage 1\", \"Stage 10\", \"Stage 2\"\n            // which should follow their natural data order.\n            const isDiscreteType = encodingObj.type === 'nominal' || encodingObj.type === 'ordinal';\n            if (isDiscreteType) {\n                if (cs?.ordinalSortOrder && cs.ordinalSortOrder.length > 0) {\n                    encodingObj.sort = preserveDomainTypes(cs.ordinalSortOrder);\n                } else if (fieldIsNumeric && fieldName) {\n                        // Numeric data treated as nominal/ordinal: sort by numeric\n                        // value so labels appear as 0,1,2,3… instead of data-encounter\n                        // order.  Use \"ascending\" instead of an explicit value array\n                        // to keep the spec compact (avoids enumerating every unique\n                        // value, which can be hundreds for fields like Rank).\n                        encodingObj.sort = \"ascending\";\n                } else {\n                    encodingObj.sort = null;\n                }\n            }\n        }\n\n        // Color scheme from Phase 0 decisions\n        if (channel === \"color\" || channel === \"group\") {\n            if (encoding.scheme && encoding.scheme !== \"default\") {\n                if ('scale' in encodingObj) {\n                    encodingObj.scale.scheme = encoding.scheme;\n                } else {\n                    encodingObj.scale = { scheme: encoding.scheme };\n                }\n            } else if (fieldName && cs?.colorScheme) {\n                if (!('scale' in encodingObj)) {\n                    encodingObj.scale = {};\n                }\n                encodingObj.scale.scheme = cs.colorScheme.scheme;\n                if (cs.colorScheme.type === 'diverging' && cs.colorScheme.domainMid !== undefined) {\n                    encodingObj.scale.domainMid = cs.colorScheme.domainMid;\n                }\n            }\n        }\n\n        // --- Collect resolved encoding ---\n        if (Object.keys(encodingObj).length !== 0) {\n            resolvedEncodings[channel] = encodingObj;\n        }\n    }\n\n    // --- Apply declaration overrides ---\n\n    // Apply resolved types from declareLayoutMode\n    if (declaration.resolvedTypes) {\n        for (const [ch, type] of Object.entries(declaration.resolvedTypes)) {\n            if (resolvedEncodings[ch]) {\n                resolvedEncodings[ch].type = type;\n            }\n        }\n    }\n\n    // Translate group channel → VL color + xOffset/yOffset encodings\n    const groupCS = channelSemantics.group;\n    if (groupCS?.field && resolvedEncodings.group) {\n        // Determine which axis the group subdivides (the discrete one)\n        const xType = resolvedEncodings.x?.type;\n        const yType = resolvedEncodings.y?.type;\n        const isDiscreteT = (t: string | undefined) => t === 'nominal' || t === 'ordinal';\n        const groupAxis = isDiscreteT(xType) ? 'x' : isDiscreteT(yType) ? 'y' : 'x';\n        const offsetChannel = groupAxis === 'x' ? 'xOffset' : 'yOffset';\n\n        // Map group → color encoding\n        if (!resolvedEncodings.color) {\n            resolvedEncodings.color = { ...resolvedEncodings.group };\n        }\n        delete resolvedEncodings.group;\n\n        // Create offset encoding for position subdivision\n        if (!resolvedEncodings[offsetChannel]) {\n            resolvedEncodings[offsetChannel] = { field: groupCS.field, type: 'nominal' };\n        }\n    }\n\n    // Merge template encoding defaults (bin, aggregate, etc.)\n    const templateEncoding = chartTemplate.template?.encoding;\n    if (templateEncoding) {\n        for (const [ch, enc] of Object.entries(templateEncoding)) {\n            if (enc && typeof enc === 'object' && Object.keys(enc as any).length > 0) {\n                if (resolvedEncodings[ch]) {\n                    resolvedEncodings[ch] = { ...(enc as any), ...resolvedEncodings[ch] };\n                }\n            }\n        }\n    }\n\n    return resolvedEncodings;\n}\n\n// ===========================================================================\n// restructureFacets — VL-specific spec transforms for faceted charts\n// ===========================================================================\n\n/**\n * Purely structural VL transform for faceted charts.\n *\n * This function does NOT decide wrapping or column counts — that is done\n * earlier by computeFacetGrid, which returns a `FacetGridResult`.  This function\n * only:\n *   1. Moves `encoding.column` → `encoding.facet` (with `columns: N`).\n *   2. For layered specs, hoists to top-level `facet` + `spec`.\n */\nfunction restructureFacets(\n    vgObj: any,\n    nominalCounts: Record<string, number>,\n    facetGrid?: { columns: number; rows: number },\n): void {\n\n    if (vgObj.encoding?.column != undefined && vgObj.encoding?.row == undefined) {\n        vgObj.encoding.facet = vgObj.encoding.column;\n\n        // Use the grid decided by computeFacetGrid.\n        const numCols = facetGrid?.columns ?? (nominalCounts.column || 1);\n        const numRows = facetGrid?.rows ?? 1;\n\n        vgObj.encoding.facet.columns = numCols;\n\n        // Axis title suppression for faceted charts is handled by\n        // vlApplyLayoutToSpec, which uses actual subplot dimensions\n        // to decide whether titles should be hidden (size-based threshold).\n\n        delete vgObj.encoding.column;\n\n        // For layered specs, VL doesn't support encoding.facet inline —\n        // restructure to top-level facet + spec.\n        // IMPORTANT: In top-level facet mode, `columns` must be a sibling\n        // of `facet`, not nested inside it. (VL ignores columns inside\n        // the facet object when it's a top-level property.)\n        if (vgObj.layer && Array.isArray(vgObj.layer)) {\n            const facetDef = { ...vgObj.encoding.facet };\n            const wrapColumns = facetDef.columns;\n            delete facetDef.columns; // remove from facet object\n            delete vgObj.encoding.facet;\n\n            vgObj.facet = facetDef;\n            if (wrapColumns != null) {\n                vgObj.columns = wrapColumns; // top-level sibling\n            }\n            vgObj.spec = {\n                layer: vgObj.layer,\n                encoding: vgObj.encoding,\n            };\n            delete vgObj.layer;\n            delete vgObj.encoding;\n        }\n\n        return;\n    }\n\n    // For layered specs with row-only or column+row facets\n    if (vgObj.layer && Array.isArray(vgObj.layer) &&\n        (vgObj.encoding?.column || vgObj.encoding?.row)) {\n        const facetDef: any = {};\n        if (vgObj.encoding.column) {\n            facetDef.column = vgObj.encoding.column;\n            delete vgObj.encoding.column;\n        }\n        if (vgObj.encoding.row) {\n            facetDef.row = vgObj.encoding.row;\n            delete vgObj.encoding.row;\n        }\n        vgObj.facet = facetDef;\n        vgObj.spec = {\n            layer: vgObj.layer,\n            encoding: vgObj.encoding,\n        };\n        delete vgObj.layer;\n        delete vgObj.encoding;\n    }\n}\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/index.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @module agents-chart/vegalite\n *\n * Vega-Lite backend for agents-chart.\n *\n * Compiles the core semantic layer into Vega-Lite specifications.\n * Contains VL-specific assembly, spec instantiation, and chart templates.\n */\n\n// VL assembly function\nexport { assembleVegaLite } from './assemble';\n\n// VL spec instantiation (Phase 2)\nexport { vlApplyLayoutToSpec, vlApplyTooltips } from './instantiate-spec';\n\n// VL template registry\nexport {\n    vlTemplateDefs,\n    vlAllTemplateDefs,\n    vlGetTemplateDef,\n    vlGetTemplateChannels,\n} from './templates';\n\n// VL recommendation & adaptation\nexport { vlAdaptChart, vlRecommendEncodings } from './recommendation';\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/instantiate-spec.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * =============================================================================\n * PHASE 2: INSTANTIATE SPEC\n * =============================================================================\n *\n * Combine semantic decisions (Phase 0) and layout dimensions (Phase 1) to\n * produce the final Vega-Lite specification.\n *\n * This is the **only phase that knows about Vega-Lite** (or whichever\n * output format is targeted).\n *\n * VL dependency: **Yes — this is where VL lives**\n * =============================================================================\n */\n\nimport type {\n    ChannelSemantics,\n    LayoutResult,\n    InstantiateContext,\n    ChartWarning,\n} from '../core/types';\nimport type { FormatSpec } from '../core/field-semantics';\nimport {\n    looksLikeDateString,\n    analyzeTemporalField,\n    computeDataVotes,\n    pickBestLevel,\n    levelToFormat,\n    SEMANTIC_LEVEL,\n} from '../core/resolve-semantics';\nimport {\n    getVisCategory,\n    inferVisCategory,\n} from '../core/semantic-types';\nimport { toTypeString, snapToBoundHeuristic } from '../core/field-semantics';\n\n// ---------------------------------------------------------------------------\n// Public API: instantiateSpec\n// ---------------------------------------------------------------------------\n\n/**\n * Phase 2: Build the final VL specification from semantic decisions and\n * layout results.\n *\n * This is the shared assembler logic that translates abstract decisions\n * into VL syntax. Template-specific logic is handled by\n * template.instantiate(spec, context).\n *\n * This function handles the VL-specific plumbing that is common across\n * all templates:\n *   - Canvas dimensions (config.view.continuousWidth/Height)\n *   - Discrete step sizing (width: {step: N})\n *   - Zero-baseline application\n *   - Color scheme application\n *   - Temporal format application\n *   - Label sizing application\n *   - Overflow warning styling\n *\n * @param vgObj       The mutated VL spec (after template encoding construction)\n * @param context     Combined context from all phases\n * @param warnings    Array to append warnings to\n */\nexport function vlApplyLayoutToSpec(\n    vgObj: any,\n    context: InstantiateContext,\n    warnings: ChartWarning[],\n): void {\n    const { channelSemantics, layout, canvasSize } = context;\n\n    const xIsDiscrete = layout.xNominalCount > 0;\n    const yIsDiscrete = layout.yNominalCount > 0;\n\n    // --- Helper: iterate encoding targets across top-level, spec, and layers ---\n    // After facet restructuring, encodings may live under vgObj.spec instead\n    // of vgObj directly, and layers may be under vgObj.spec.layer.\n    const collectEncodingTargets = (ch: string): any[] => {\n        const targets: any[] = [];\n        if (vgObj.encoding?.[ch]) targets.push(vgObj.encoding[ch]);\n        if (vgObj.spec?.encoding?.[ch]) targets.push(vgObj.spec.encoding[ch]);\n        if (Array.isArray(vgObj.layer)) {\n            for (const layer of vgObj.layer) {\n                if (layer.encoding?.[ch]) targets.push(layer.encoding[ch]);\n            }\n        }\n        if (Array.isArray(vgObj.spec?.layer)) {\n            for (const layer of vgObj.spec.layer) {\n                if (layer.encoding?.[ch]) targets.push(layer.encoding[ch]);\n            }\n        }\n        return targets;\n    };\n\n    // --- Apply zero-baseline decisions ---\n    for (const ch of ['x', 'y'] as const) {\n        const cs = channelSemantics[ch];\n        if (!cs?.zero) continue;\n        const decision = cs.zero;\n\n        const targets = collectEncodingTargets(ch)\n            .filter(enc => enc.type === 'quantitative');\n\n        for (const enc of targets) {\n            // Skip binned encodings — the bin axis represents data values,\n            // not bar length, so zero-baseline is inappropriate (e.g. histograms).\n            if (enc.bin) continue;\n            if (!enc.scale) enc.scale = {};\n            if (enc.scale.zero !== undefined) continue;\n            if (enc.scale.domain && Array.isArray(enc.scale.domain)) continue;\n\n            enc.scale.zero = decision.zero;\n\n            // No explicit domain padding — VL's native `nice` rounding\n            // (on by default) already provides breathing room with clean\n            // tick-aligned bounds, which is superior to computed fractional\n            // bounds like [1.86, 4.94] that also conflict with semantic\n            // domain constraints and log scales.\n        }\n    }\n\n    // --- Apply field-context semantic decisions (format, domain, ticks, etc.) ---\n    vlApplyFieldContext(vgObj, channelSemantics, collectEncodingTargets, context);\n\n    // --- Apply temporal formatting ---\n    // For positional temporal axes (x/y), do NOT set axis.format — VL's\n    // built-in multi-level temporal labeling (e.g. \"2016\" at year boundaries,\n    // \"April\" / \"July\" within a year) is far superior to a single uniform\n    // format string which loses hierarchical context.\n    // We still apply the format to color legends where multi-level is unavailable.\n    const applyTemporalFormat = (enc: any, channel: string, cs: ChannelSemantics | undefined) => {\n        if (!enc || !cs?.temporalFormat) return;\n        if (enc.type === 'temporal') {\n            if (channel === 'color') {\n                if (!enc.legend) enc.legend = {};\n                enc.legend.format = cs.temporalFormat;\n            }\n            // x/y: intentionally omitted — let VL use native multi-level labels\n        }\n    };\n\n    const applyOrdinalTemporalFormat = (enc: any, channel: string, cs: ChannelSemantics | undefined) => {\n        if (!enc || !enc.field) return;\n        if (enc.type !== 'ordinal' && enc.type !== 'nominal') return;\n        if (!cs) return;\n\n        const semanticType = toTypeString(context.semanticTypes[enc.field]);\n        const stCategory = semanticType ? getVisCategory(semanticType) : null;\n        if (stCategory !== 'temporal') return;\n\n        const fieldVals = context.table.map((r: any) => r[enc.field]).filter((v: any) => v != null);\n        const datelikeCnt = fieldVals.filter((v: any) =>\n            typeof v !== 'string' || looksLikeDateString(String(v))\n        ).length;\n        if (datelikeCnt < fieldVals.length * 0.5) return;\n\n        const analysis = analyzeTemporalField(fieldVals);\n        if (!analysis) return;\n\n        const votes = computeDataVotes(analysis.same);\n        const semLevel = SEMANTIC_LEVEL[semanticType];\n        if (semLevel !== undefined) votes[semLevel] += 3;\n        const { level, score } = pickBestLevel(votes);\n        if (score < 5) return;\n\n        const fmt = levelToFormat(level, analysis);\n        if (!fmt) return;\n\n        const expr = `isValid(toDate(datum.label)) ? timeFormat(toDate(datum.label), '${fmt}') : datum.label`;\n        if (channel === 'x' || channel === 'y') {\n            if (!enc.axis) enc.axis = {};\n            enc.axis.labelExpr = expr;\n        } else if (channel === 'color') {\n            if (!enc.legend) enc.legend = {};\n            enc.legend.labelExpr = expr;\n        }\n    };\n\n    // Iterate all encoding locations (top-level, spec, layers)\n    const applyTemporalToEncoding = (encoding: Record<string, any>) => {\n        for (const [ch, enc] of Object.entries(encoding)) {\n            applyTemporalFormat(enc, ch, channelSemantics[ch]);\n            applyOrdinalTemporalFormat(enc, ch, channelSemantics[ch]);\n        }\n    };\n\n    if (vgObj.encoding) applyTemporalToEncoding(vgObj.encoding);\n    if (vgObj.spec?.encoding) applyTemporalToEncoding(vgObj.spec.encoding);\n    if (Array.isArray(vgObj.layer)) {\n        for (const layer of vgObj.layer) {\n            if (layer.encoding) applyTemporalToEncoding(layer.encoding);\n        }\n    }\n    if (Array.isArray(vgObj.spec?.layer)) {\n        for (const layer of vgObj.spec.layer) {\n            if (layer.encoding) applyTemporalToEncoding(layer.encoding);\n        }\n    }\n\n    // --- Banded continuous axis domain padding ---\n    // For banded continuous axes (e.g. Heatmap with quantitative X/Y),\n    // add a half-step buffer so edge cells aren't clipped at the boundary.\n    // Without this, the domain starts/ends exactly at min/max data values\n    // and rect marks at the edges are only half-visible.\n    for (const axis of ['x', 'y'] as const) {\n        const bandedCount = axis === 'x' ? layout.xContinuousAsDiscrete : layout.yContinuousAsDiscrete;\n        if (bandedCount <= 1) continue;\n\n        const enc = vgObj.encoding?.[axis] || vgObj.spec?.encoding?.[axis];\n        if (!enc) continue;\n\n        // Skip binned encodings — VL handles bin domain automatically\n        if (enc.bin) continue;\n\n        const isTemporal = enc.type === 'temporal';\n        const isContinuous = enc.type === 'quantitative' || isTemporal;\n        if (!isContinuous) continue;\n        if (enc.scale?.domain) continue;\n\n        const numericVals = context.table\n            .map((r: any) => {\n                const raw = r[enc.field];\n                if (raw == null) return NaN;\n                if (isTemporal) return +new Date(raw);\n                return +raw;\n            })\n            .filter((v: number) => !isNaN(v));\n        if (numericVals.length <= 1) continue;\n\n        const minVal = Math.min(...numericVals);\n        const maxVal = Math.max(...numericVals);\n        const dataRange = maxVal - minVal;\n        if (dataRange === 0) continue;\n\n        const pad = dataRange / (bandedCount - 1) / 2;\n        if (!enc.scale) enc.scale = {};\n        enc.scale.nice = false;\n\n        if (isTemporal) {\n            enc.scale.domain = [\n                new Date(minVal - pad).toISOString(),\n                new Date(maxVal + pad).toISOString(),\n            ];\n        } else {\n            enc.scale.domain = [minVal - pad, maxVal + pad];\n        }\n    }\n\n    // --- Canvas sizing ---\n    const axisXConfig: Record<string, any> = {\n        labelLimit: layout.xLabel.labelLimit,\n        labelFontSize: layout.xLabel.fontSize,\n    };\n    if (layout.xLabel.labelAngle !== undefined) {\n        axisXConfig.labelAngle = layout.xLabel.labelAngle;\n        axisXConfig.labelAlign = layout.xLabel.labelAlign;\n        axisXConfig.labelBaseline = layout.xLabel.labelBaseline;\n    }\n    const axisYConfig: Record<string, any> = { labelFontSize: layout.yLabel.fontSize };\n\n    vgObj.config = {\n        view: {\n            continuousWidth: layout.subplotWidth,\n            continuousHeight: layout.subplotHeight,\n            ...(!vgObj.encoding && { stroke: null }),\n        },\n        axisX: axisXConfig,\n        axisY: axisYConfig,\n    };\n\n    // --- Step-based sizing for discrete axes ---\n    if (xIsDiscrete && typeof vgObj.width !== 'number') {\n        vgObj.width = layout.xStepUnit === 'group'\n            ? { step: layout.xStep, for: 'position' }\n            : { step: layout.xStep };\n    }\n    if (yIsDiscrete && typeof vgObj.height !== 'number') {\n        vgObj.height = layout.yStepUnit === 'group'\n            ? { step: layout.yStep, for: 'position' }\n            : { step: layout.yStep };\n    }\n\n    // Sync hardcoded template width/height to config.view\n    if (typeof vgObj.width === 'number') {\n        vgObj.config.view.continuousWidth = vgObj.width;\n    } else if (vgObj.width && typeof vgObj.width === 'object' && 'step' in vgObj.width) {\n        vgObj.width = layout.xStepUnit === 'group'\n            ? { step: layout.xStep, for: 'position' }\n            : { step: layout.xStep };\n    }\n    if (typeof vgObj.height === 'number') {\n        vgObj.config.view.continuousHeight = vgObj.height;\n    } else if (vgObj.height && typeof vgObj.height === 'object' && 'step' in vgObj.height) {\n        vgObj.height = layout.yStepUnit === 'group'\n            ? { step: layout.yStep, for: 'position' }\n            : { step: layout.yStep };\n    }\n\n    // Facet header sizing\n    const totalFacets = (layout.facet?.columns ?? 1) * (layout.facet?.rows ?? 1);\n    if (totalFacets > 6) {\n        vgObj.config.header = { labelLimit: 120, labelFontSize: 9 };\n    }\n\n    // In faceted charts, use lighter axis title styling to reduce clutter\n    const facetRows = layout.facet?.rows ?? 1;\n    const facetCols = layout.facet?.columns ?? 1;\n    const encTarget = vgObj.spec?.encoding || vgObj.encoding;\n\n    if (facetRows > 1 || facetCols > 1) {\n        if (!vgObj.config) vgObj.config = {};\n        const lightTitle = { titleFontWeight: 'normal' as const, titleFontSize: 11, titleColor: '#666' };\n        vgObj.config.axisX = { ...(vgObj.config.axisX || {}), ...lightTitle };\n        vgObj.config.axisY = { ...(vgObj.config.axisY || {}), ...lightTitle };\n    }\n\n    // When row faceting is used, use lighter y axis title styling;\n    // hide it entirely if y is nominal (the labels speak for themselves).\n    if (encTarget?.row || (facetRows > 1 && encTarget?.y)) {\n        if (encTarget?.y?.type === 'nominal') {\n            if (!vgObj.config) vgObj.config = {};\n            vgObj.config.axisY = { ...(vgObj.config.axisY || {}), title: null };\n            if (!encTarget.y.axis) encTarget.y.axis = {};\n            encTarget.y.axis.title = null;\n        }\n    }\n\n    // --- Dual-legend repositioning ---\n    // When multiple channels produce legends (e.g. color + size, color + opacity),\n    // Vega-Lite stacks them all on the right, which eats into the plot area on a\n    // 400×300 canvas.  Detect this and move the categorical (nominal/ordinal)\n    // legend to the bottom with horizontal orientation, keeping the quantitative\n    // legend compact on the right — BUT only when the total chart height is too\n    // short to fit both stacked on the right comfortably.\n    const legendChannels = (['color', 'size', 'shape', 'opacity', 'strokeDash', 'strokeWidth'] as const)\n        .filter(ch => {\n            const targets = collectEncodingTargets(ch);\n            return targets.some(enc => enc.field && enc.legend !== null);\n        });\n\n    if (legendChannels.length >= 2) {\n        // Separate categorical vs quantitative legend channels\n        const categoricalChs: string[] = [];\n        const quantitativeChs: string[] = [];\n        for (const ch of legendChannels) {\n            const targets = collectEncodingTargets(ch);\n            const isQuant = targets.some(enc => enc.type === 'quantitative' || enc.type === 'temporal');\n            if (isQuant) {\n                quantitativeChs.push(ch);\n            } else {\n                categoricalChs.push(ch);\n            }\n        }\n\n        // Move categorical legends to bottom, keep quantitative ones on right\n        // — but only if the total chart height can't comfortably fit both.\n        if (categoricalChs.length > 0 && quantitativeChs.length > 0) {\n            // Estimate total right-side legend height:\n            //   Quantitative legend ≈ 100px (gradient + title + labels)\n            //   Categorical legend ≈ title(20px) + entries × 20px each\n            const QUANT_LEGEND_HEIGHT = 100;\n            const CAT_TITLE_HEIGHT = 20;\n            const CAT_ENTRY_HEIGHT = 20;\n\n            // Estimate domain sizes for categorical legends\n            let totalCatEntries = 0;\n            for (const ch of categoricalChs) {\n                const targets = collectEncodingTargets(ch);\n                for (const enc of targets) {\n                    if (!enc.field) continue;\n                    const domainSize = new Set(context.table.map((r: any) => r[enc.field])).size;\n                    totalCatEntries += domainSize;\n                }\n            }\n            const estCatHeight = CAT_TITLE_HEIGHT * categoricalChs.length + totalCatEntries * CAT_ENTRY_HEIGHT;\n            const estTotalLegendHeight = QUANT_LEGEND_HEIGHT + estCatHeight + 20; // 20px gap between legends\n\n            // Total chart height = subplot height × facet rows + overhead\n            const totalChartHeight = layout.subplotHeight * (layout.facet?.rows ?? 1)\n                + (layout.facet?.rows ?? 1) * 10; // approx facet spacing\n\n            const fitsOnRight = totalChartHeight >= estTotalLegendHeight;\n\n            if (!fitsOnRight) {\n                for (const ch of categoricalChs) {\n                    const targets = collectEncodingTargets(ch);\n                    for (const enc of targets) {\n                        if (!enc.field) continue;\n                        if (!enc.legend) enc.legend = {};\n                        enc.legend.orient = 'bottom';\n                        enc.legend.direction = 'horizontal';\n\n                        // Responsive columns: estimate how many legend entries fit\n                        // per row based on the available canvas width.\n                        // Each entry ≈ symbol(16) + label + padding.  Estimate label\n                        // width from the longest domain value, then derive columns.\n                        const domainValues = [...new Set(context.table.map((r: any) => r[enc.field]))];\n                        const domainSize = domainValues.length;\n                        const maxLabelLen = Math.max(\n                            ...domainValues.map((v: any) => String(v ?? '').length), 3,\n                        );\n                        // VL legend: symbol (~15px) + label (~5px/char at 11px proportional font) + gap (~8px)\n                        const entryWidth = 15 + maxLabelLen * 5 + 8;\n                        // Available width: VL's bottom legend spans the full SVG width,\n                        // which includes the plot area plus the right-side quantitative\n                        // legend (~130px).  Use that total for column estimation.\n                        const rightLegendWidth = 130;\n                        const availableWidth = canvasSize.width + rightLegendWidth;\n                        const columnsByWidth = Math.max(1, Math.floor(availableWidth / entryWidth));\n                        enc.legend.columns = Math.min(columnsByWidth, domainSize);\n\n                        // For very high cardinality, cap visible symbols to keep\n                        // the bottom legend from growing too tall.\n                        const maxRows = 4;\n                        const maxVisible = columnsByWidth * maxRows;\n                        if (domainSize > maxVisible) {\n                            enc.legend.symbolLimit = maxVisible;\n                        }\n                    }\n                }\n            }\n            // else: chart is tall enough — leave both legends on the right (VL default)\n        }\n    }\n\n    // --- Overflow styling (from TruncationWarning[]) ---\n    // Applied AFTER template.instantiate and facet restructuring,\n    // so we modify the spec's actual encoding objects.\n    for (const trunc of layout.truncations) {\n        const ch = trunc.channel;\n        const targets = collectEncodingTargets(ch);\n\n        for (const enc of targets) {\n            if (!enc.field) continue;\n\n            // Axis/legend label color: grey for placeholder\n            if (ch === 'x' || ch === 'y') {\n                if (!enc.axis) enc.axis = {};\n                enc.axis.labelColor = {\n                    condition: {\n                        test: `datum.label == '${trunc.placeholder}'`,\n                        value: \"#999999\",\n                    },\n                    value: \"#000000\",\n                };\n                // Set domain to kept values + placeholder\n                if (!enc.scale) enc.scale = {};\n                enc.scale.domain = [...trunc.keptValues, trunc.placeholder];\n            } else if (ch === 'color') {\n                if (!enc.legend) enc.legend = {};\n                enc.legend.values = [...trunc.keptValues, trunc.placeholder];\n            }\n        }\n    }\n}\n\n// ---------------------------------------------------------------------------\n// vlApplyFieldContext — Apply field-level semantic decisions to VL encodings\n// ---------------------------------------------------------------------------\n\n/**\n * Build a Vega expression that abbreviates large numbers using a small\n * set of universally understood suffixes: K (thousands), M (millions),\n * B (billions), T (trillions).\n *\n * The expression is a nested ternary that picks the right divisor:\n *   abs(v) >= 1e12 → v/1e12 + \"T\"\n *   abs(v) >= 1e9  → v/1e9  + \"B\"\n *   abs(v) >= 1e6  → v/1e6  + \"M\"\n *   abs(v) >= 1e3  → v/1e3  + \"K\"\n *   else           → plain number\n *\n * @param prefix  Optional prefix (e.g., \"$\")\n * @param suffix  Optional suffix (e.g., \" kg\")\n * @returns  A Vega labelExpr string\n */\nfunction buildAbbreviationExpr(prefix?: string, suffix?: string): string {\n    const pfx = prefix ? `'${prefix}' + ` : '';\n    const sfx = suffix ? ` + '${suffix}'` : '';\n    // Use ~g to drop trailing zeros from the fractional digit\n    return (\n        `${pfx}(abs(datum.value) >= 1e12 ? format(datum.value / 1e12, '~g') + 'T' : ` +\n        `abs(datum.value) >= 1e9 ? format(datum.value / 1e9, '~g') + 'B' : ` +\n        `abs(datum.value) >= 1e6 ? format(datum.value / 1e6, '~g') + 'M' : ` +\n        `abs(datum.value) >= 1e3 ? format(datum.value / 1e3, '~g') + 'K' : ` +\n        `format(datum.value, ','))${sfx}`\n    );\n}\n\n/**\n * Build a VL-compatible format expression from a FormatSpec.\n *\n * - d3's `format()` handles the numeric pattern.\n * - Prefix/suffix are prepended/appended via a Vega expression.\n * - When `abbreviate` is true, large values are compacted (1K, 1M, 1B, 1T).\n *\n * Returns an `axis.labelExpr` / `legend.labelExpr` string, or null if\n * no formatting is needed (plain data labels suffice).\n */\nfunction formatSpecToLabelExpr(fmt: FormatSpec): string | null {\n    // Abbreviation takes priority — produces its own complete expression\n    if (fmt.abbreviate) {\n        return buildAbbreviationExpr(fmt.prefix, fmt.suffix);\n    }\n\n    if (!fmt.pattern) return null;\n    const hasPrefix = !!fmt.prefix;\n    const hasSuffix = !!fmt.suffix;\n\n    if (!hasPrefix && !hasSuffix) {\n        // Pure d3-format — can use axis.format directly (no expr needed)\n        return null;\n    }\n\n    // Build Vega expression: format(datum.value, pattern) with prefix/suffix\n    const pfx = hasPrefix ? `'${fmt.prefix}' + ` : '';\n    const sfx = hasSuffix ? ` + '${fmt.suffix}'` : '';\n    return `${pfx}format(datum.value, '${fmt.pattern}')${sfx}`;\n}\n\n/**\n * Compute the maximum stacked (group) total for a quantitative field.\n *\n * For a stacked bar chart with:\n *   x = category (grouping), y = value (stacked), color = series\n *\n * This computes sum(value) for each category group and returns the max.\n * Used to check whether stacked totals exceed an intrinsic domain bound\n * (e.g., percentages summing to >100%).\n *\n * Returns undefined if the grouping field can't be determined.\n */\nfunction computeMaxStackedTotal(\n    table: any[],\n    measureField: string,\n    measureChannel: string,\n    channelSemantics: Record<string, ChannelSemantics>,\n): number | undefined {\n    if (!table || table.length === 0) return undefined;\n\n    // The grouping axis is the *other* positional channel\n    const groupChannel = measureChannel === 'y' ? 'x' : 'y';\n    const groupCS = channelSemantics[groupChannel];\n    if (!groupCS) return undefined;\n    const groupField = groupCS.field;\n    if (!groupField) return undefined;\n\n    // Also consider facet fields (row/column) as additional grouping\n    const facetFields: string[] = [];\n    for (const ch of ['row', 'column']) {\n        const fcs = channelSemantics[ch];\n        if (fcs?.field) facetFields.push(fcs.field);\n    }\n\n    // Group rows and sum the measure field per group\n    const totals = new Map<string, number>();\n    for (const row of table) {\n        const val = row[measureField];\n        if (typeof val !== 'number' || isNaN(val)) continue;\n\n        // Build group key from grouping field + facet fields\n        const keyParts = [String(row[groupField])];\n        for (const ff of facetFields) {\n            keyParts.push(String(row[ff]));\n        }\n        const key = keyParts.join('|||');\n        totals.set(key, (totals.get(key) ?? 0) + val);\n    }\n\n    if (totals.size === 0) return undefined;\n    return Math.max(...totals.values());\n}\n\n/**\n * Get the effective intrinsic domain for a field, even when no explicit\n * `intrinsicDomain` is provided in the annotation.\n *\n * Mirrors steps 2–3 of `resolveDomainConstraint` (in field-semantics.ts)\n * which infer intrinsic bounds from the semantic type:\n *   - Percentage → [0, 1] or [0, 100] depending on data scale\n *   - Latitude → [-90, 90]\n *   - Longitude → [-180, 180]\n *   - Correlation → [-1, 1]\n *\n * Without this: stacked charts with Percentage fields that lack explicit\n * annotation never get domain constraints, because the stacking re-check\n * in vlApplyFieldContext couldn't find the intrinsic bounds.\n */\nfunction getEffectiveIntrinsicDomain(\n    cs: ChannelSemantics,\n    table: any[],\n    field: string,\n): [number, number] | undefined {\n    // 1. Explicit annotation — authoritative\n    if (cs.semanticAnnotation?.intrinsicDomain) {\n        return cs.semanticAnnotation.intrinsicDomain;\n    }\n\n    // 2. Infer from semantic type\n    const semanticType = cs.semanticAnnotation?.semanticType;\n    if (!semanticType) return undefined;\n\n    if (semanticType === 'Latitude')    return [-90, 90];\n    if (semanticType === 'Longitude')   return [-180, 180];\n    if (semanticType === 'Correlation') return [-1, 1];\n\n    if (semanticType === 'Percentage') {\n        const nums = table\n            .map(r => r[field])\n            .filter((v: any) => typeof v === 'number' && !isNaN(v));\n        if (nums.length > 0) {\n            // Inline scale detection: if ≥80% of |values| are ≤1, it's 0-1 scale\n            const countBelow1 = nums.filter(v => Math.abs(v) <= 1).length;\n            const isFractional = countBelow1 / nums.length >= 0.8;\n            return isFractional ? [0, 1] : [0, 100];\n        }\n    }\n\n    return undefined;\n}\n\n/**\n * Apply field-context semantic properties to VL encoding objects.\n *\n * Consumes the following ChannelSemantics properties that were previously\n * dead writes (computed by resolveChannelSemantics but never read):\n *\n *   1. format       → axis.format / axis.labelExpr  (number formatting)\n *   2. tooltipFormat → tooltip encoding format\n *   3. domainConstraint → scale.domain + scale.clamp  (bounded types)\n *   4. tickConstraint   → axis.tickMinStep + axis.values  (integer ticks)\n *   5. reversed     → scale.reverse  (rank axes)\n *   6. nice         → scale.nice  (bounded types disable nice)\n *   7. scaleType    → scale.type  (log, sqrt, symlog)\n */\nfunction vlApplyFieldContext(\n    vgObj: any,\n    channelSemantics: Record<string, ChannelSemantics>,\n    collectEncodingTargets: (ch: string) => any[],\n    context: InstantiateContext,\n): void {\n    for (const [ch, cs] of Object.entries(channelSemantics)) {\n        const targets = collectEncodingTargets(ch);\n        if (targets.length === 0) continue;\n\n        for (const enc of targets) {\n            if (!enc.field) continue;\n\n            // ── 0. Temporal + bin incompatibility guard ──\n            // VL's `bin` operates on numeric values. Setting `type: \"temporal\"`\n            // with `bin` causes VL to parse values (e.g., year 2004) as dates\n            // and bin in milliseconds, producing nonsensical time-of-day labels.\n            // For temporal binning, VL expects `timeUnit` instead.\n            // Fix: demote to `quantitative` so bins work on raw numbers.\n            if (enc.bin && enc.type === 'temporal') {\n                enc.type = 'quantitative';\n                // Year/Decade values should show as plain integers, not \"2,004\"\n                if (!enc.axis) enc.axis = {};\n                if (!enc.axis.format) enc.axis.format = 'd';\n            }\n\n            // ── 1. Number format (axis.format / axis.labelExpr) ──\n            // Only apply to quantitative positional channels.\n            // Skip binned encodings — VL formats bin ranges natively and\n            // our semantic format (e.g. percent) would misinterpret the\n            // bin boundaries.\n            // Without this: axes show raw numbers like \"1000000\" instead of \"$1,000,000\".\n            if ((cs.format?.pattern || cs.format?.abbreviate) && (ch === 'x' || ch === 'y') && enc.type === 'quantitative' && !enc.bin) {\n                // Skip if the encoding already has an explicit format\n                if (!enc.axis?.format && !enc.axis?.labelExpr) {\n                    if (!enc.axis) enc.axis = {};\n                    const expr = formatSpecToLabelExpr(cs.format);\n                    if (expr) {\n                        enc.axis.labelExpr = expr;\n                    } else {\n                        enc.axis.format = cs.format.pattern;\n                    }\n                }\n            }\n\n            // ── 2. Tooltip format ──\n            // Tooltip formatting is handled via VL's tooltip encoding with format.\n            // Without this: tooltips show raw floats like \"0.4812\" instead of \"48.12%\".\n            // NOTE: VL's `config.mark.tooltip: true` uses default formatting;\n            // explicit tooltip channels would need encoding-level format.\n            // For now, we set formatType on the main encoding when tooltipFormat\n            // has a simple pattern (no prefix/suffix).\n            // Full tooltip encoding is deferred to template-level implementation.\n\n            // ── 3. Domain constraint (scale.domain + scale.clamp) ──\n            // Semantic domain constraints represent *intrinsic* field bounds.\n            // Full constraints (both min+max) set scale.domain directly.\n            // Partial constraints (only min or max) use VL's domainMin/domainMax\n            // for single-ended bounds, letting the other end auto-fit from data.\n            // Skip binned encodings — VL handles bin domain automatically.\n            //\n            // Stacking interaction:\n            //   Sum-stacked charts (default / \"zero\" / \"center\") show stacked\n            //   totals on the axis, not individual values. The field-level snap\n            //   heuristic only saw individual values, which may not reflect the\n            //   actual axis range.  We recompute: if the max group total still\n            //   fits within the intrinsic bound, the snap constraint is safe\n            //   (e.g., percentages summing to exactly 100%).  If totals exceed\n            //   the bound, we skip the constraint to avoid clipping bars.\n            //   Normalize-stacked (stack: \"normalize\"): VL normalizes to [0,1],\n            //   so domain is always [0,1]. Constraint is harmless. → Keep.\n            //   Layered / no stack (stack: null/false): each bar is\n            //   independent. → Apply domain constraints as normal.\n            //\n            // VL auto-stacks bar/area marks when a color encoding is present\n            // (unless stack: null/false).\n            //\n            // Without this: Rating gets auto-fitted to data range (e.g., 2-4.5)\n            // instead of showing the full 1-5 scale.\n            const isExplicitlyStacked = enc.stack !== undefined && enc.stack !== null && enc.stack !== false;\n            const markType = typeof vgObj.mark === 'string' ? vgObj.mark : vgObj.mark?.type;\n            const isBarLike = ['bar', 'area', 'rect'].includes(markType);\n            // Check for color encoding at top level, in layers, or in faceted spec\n            const hasColorEncoding = !!(\n                vgObj.encoding?.color?.field\n                || (Array.isArray(vgObj.layer) && vgObj.layer.some((l: any) => l.encoding?.color?.field))\n                || vgObj.spec?.encoding?.color?.field\n            );\n            const isImplicitlyStacked = isBarLike && hasColorEncoding && enc.stack !== null;\n            const isStacked = isExplicitlyStacked || isImplicitlyStacked;\n            const isNormalizeStacked = enc.stack === 'normalize';\n            const isSumStacked = isStacked && !isNormalizeStacked;\n\n            // For sum-stacked charts, check if stacked totals exceed the\n            // intrinsic domain.  If they do, skip the domain constraint.\n            //\n            // Also, if snap didn't fire on individual values but stacked\n            // totals are near the intrinsic bound, re-run snap on the totals.\n            // Example: individual percentages range 20–50% (no snap), but\n            // they sum to ~100% per group → should snap to 100%.\n            let skipDomain = false;\n            let effectiveDomainConstraint = cs.domainConstraint;\n\n            if (isSumStacked) {\n                // Use explicit intrinsicDomain from annotation, or infer from\n                // semantic type for known bounded types (Percentage, Lat/Lon, etc.)\n                // Without this: Percentage fields without explicit annotation\n                // never get a domain constraint on stacked charts because\n                // individual values don't trigger snap, and the stacked re-check\n                // can't find the intrinsic bounds to snap totals against.\n                const intrinsic = getEffectiveIntrinsicDomain(cs, context.table, enc.field);\n                if (intrinsic) {\n                    const maxTotal = computeMaxStackedTotal(\n                        context.table, enc.field, ch, channelSemantics,\n                    );\n\n                    if (maxTotal !== undefined && maxTotal > intrinsic[1]) {\n                        // Stacked totals exceed the intrinsic bound →\n                        // skip domain constraint to avoid clipping.\n                        // Use a small epsilon tolerance for floating-point\n                        // imprecision (e.g., shares summing to 1.0000000001\n                        // instead of exactly 1.0 should still be treated as\n                        // within bounds). Scale epsilon to the domain range.\n                        const range = intrinsic[1] - intrinsic[0];\n                        const epsilon = range * 1e-6;\n                        if (maxTotal > intrinsic[1] + epsilon) {\n                            if (cs.domainConstraint) {\n                                skipDomain = true;\n                            }\n                        } else {\n                            // Within epsilon — treat as equal to the bound.\n                            // Re-run snap so the bound gets applied.\n                            const stackedSnap = snapToBoundHeuristic(intrinsic, [intrinsic[1]]);\n                            if (stackedSnap) {\n                                if (cs.domainConstraint) {\n                                    effectiveDomainConstraint = {\n                                        min: cs.domainConstraint.min ?? stackedSnap.min,\n                                        max: cs.domainConstraint.max ?? stackedSnap.max,\n                                        clamp: cs.domainConstraint.clamp || stackedSnap.clamp,\n                                    };\n                                } else {\n                                    effectiveDomainConstraint = stackedSnap;\n                                }\n                            }\n                        }\n                    } else if (maxTotal !== undefined) {\n                        // Stacked totals are within intrinsic bounds.\n                        // Re-run snap on stacked totals to pick up bounds\n                        // that individual values missed (e.g., individual\n                        // shares of 20–40% don't snap to 100%, but stacked\n                        // totals of ~100% should).\n                        const stackedSnap = snapToBoundHeuristic(intrinsic, [maxTotal]);\n                        if (stackedSnap) {\n                            // Merge with existing constraint: keep any bound\n                            // already snapped from individual values, add any\n                            // new bound from stacked totals.\n                            if (cs.domainConstraint) {\n                                effectiveDomainConstraint = {\n                                    min: cs.domainConstraint.min ?? stackedSnap.min,\n                                    max: cs.domainConstraint.max ?? stackedSnap.max,\n                                    clamp: cs.domainConstraint.clamp || stackedSnap.clamp,\n                                };\n                            } else {\n                                effectiveDomainConstraint = stackedSnap;\n                            }\n                        }\n                    }\n                } else if (cs.domainConstraint) {\n                    // No intrinsic domain to compare against → skip to be safe\n                    skipDomain = true;\n                }\n            }\n\n            if (effectiveDomainConstraint && enc.type === 'quantitative' && (ch === 'x' || ch === 'y') && !enc.bin && !skipDomain) {\n                if (!enc.scale) enc.scale = {};\n                const { min, max, clamp } = effectiveDomainConstraint;\n                if (min !== undefined && max !== undefined) {\n                    enc.scale.domain = [min, max];\n                    // For non-bar marks (scatter, line, etc.), the explicit\n                    // semantic domain is authoritative — clear zero so VL\n                    // doesn't extend beyond intrinsic bounds (e.g., Rating\n                    // scatter [1,5] shouldn't stretch to [0,5]).\n                    // For bar/area marks, keep zero:true so bars grow from\n                    // zero with correct proportional lengths — VL extends\n                    // the domain to include 0, and the upper bound is still\n                    // capped by the domain constraint (e.g., [0,5] not [0,6]).\n                    if (!isBarLike && enc.scale.zero !== undefined) {\n                        delete enc.scale.zero;\n                    }\n                } else {\n                    // Partial constraint — snap one end while auto-fitting the other.\n                    // E.g., Percentage data at 97% → domainMax = 100, domainMin auto-fits.\n                    if (min !== undefined) enc.scale.domainMin = min;\n                    if (max !== undefined) enc.scale.domainMax = max;\n                    // VL may suppress nice rounding on the free end when\n                    // domainMin/domainMax is set, causing data to touch the\n                    // chart border.  Force nice so the unconstrained end\n                    // gets proper headroom (e.g., data at +26% rounds to +40%).\n                    enc.scale.nice = true;\n                }\n                if (clamp) {\n                    enc.scale.clamp = true;\n                }\n            }\n\n            // ── 4. Tick constraint (axis.tickMinStep + axis.values) ──\n            // Skip binned encodings — VL handles bin ticks natively.\n            // Without this: Rating 1-5 and Count axes show fractional ticks\n            // like 1.5, 2.5, 3.5 that have no physical meaning.\n            if (cs.tickConstraint && (ch === 'x' || ch === 'y') && enc.type === 'quantitative' && !enc.bin) {\n                if (!enc.axis) enc.axis = {};\n                if (cs.tickConstraint.integersOnly && enc.axis.tickMinStep === undefined) {\n                    enc.axis.tickMinStep = cs.tickConstraint.minStep ?? 1;\n                }\n                if (cs.tickConstraint.exactTicks && !enc.axis.values) {\n                    enc.axis.values = cs.tickConstraint.exactTicks;\n                }\n                // Hide fractional tick labels for integer-only fields.\n                // VL may still generate fractional ticks when the domain\n                // span is small (e.g., all values = 1 → domain [0,1] →\n                // ticks at 0, 0.2, 0.4…). The `,d` format rounds these\n                // to duplicate labels. This labelExpr suppresses them.\n                if (cs.tickConstraint.integersOnly && !enc.axis.labelExpr && !enc.axis.values) {\n                    enc.axis.labelExpr = \"datum.value === ceil(datum.value) ? format(datum.value, ',d') : ''\";\n                }\n                // When ticks are integers, axis labels should show integers\n                // even if the underlying data has decimals (e.g., Rating\n                // data 3.7 with ticks at 1,2,3,4,5 → labels \"1,2,3,4,5\"\n                // not \"1.0,2.0,3.0\").\n                if (cs.tickConstraint.integersOnly && enc.axis.format) {\n                    // Replace decimal format with integer format for axis only\n                    enc.axis.format = enc.axis.format.replace(/\\.\\d+f$/, 'd');\n                }\n                // Same for labelExpr — swap the d3-format pattern inside\n                if (cs.tickConstraint.integersOnly && enc.axis.labelExpr) {\n                    enc.axis.labelExpr = enc.axis.labelExpr.replace(\n                        /format\\(datum\\.value,\\s*'([^']*)\\.\\d+f'\\)/,\n                        \"format(datum.value, '$1d')\",\n                    );\n                }\n            }\n\n            // ── 5. Reversed axis (scale.reverse) ──\n            // Only for quantitative axes. Ordinal y-axes already place the\n            // first domain value (rank 1) at the top by default, so adding\n            // scale.reverse there would double-reverse, putting 1 back at\n            // the bottom.\n            // Skip binned encodings — VL handles bin axis direction natively.\n            if (cs.reversed && (ch === 'x' || ch === 'y') && enc.type === 'quantitative' && !enc.bin) {\n                if (!enc.scale) enc.scale = {};\n                if (enc.scale.reverse === undefined) {\n                    enc.scale.reverse = true;\n                }\n            }\n\n            // ── 6. Nice rounding (scale.nice) ──\n            // Without this: Domain [1, 5] for ratings gets \"nice-rounded\"\n            // to [0, 6] which wastes space and implies values that don't exist.\n            // Skip binned encodings — VL computes bin extents automatically.\n            if (cs.nice === false && enc.type === 'quantitative' && !enc.bin) {\n                if (!enc.scale) enc.scale = {};\n                if (enc.scale.nice === undefined) {\n                    enc.scale.nice = false;\n                }\n            }\n\n            // ── 7. Scale type (scale.type) ──\n            // Only applies for specific semantic types (Population, GDP, etc.)\n            // when data spans ≥ 4 orders of magnitude. Conservative policy\n            // to avoid surprising users on normal datasets.\n            // Skip binned encodings — log/sqrt scales conflict with VL's\n            // linear bin computation and break when data contains zeros.\n            if (cs.scaleType && cs.scaleType !== 'linear' && enc.type === 'quantitative' && !enc.bin) {\n                if (!enc.scale) enc.scale = {};\n                if (!enc.scale.type) {\n                    enc.scale.type = cs.scaleType;\n\n                    // Log/symlog scales don't support zero baseline — clean it up\n                    if (cs.scaleType === 'log' || cs.scaleType === 'symlog') {\n                        if (enc.scale.zero !== undefined) {\n                            delete enc.scale.zero;\n                        }\n                        // Log axes produce many grid lines (1,2,3…9 per\n                        // decade).  Make them very light so they convey the\n                        // log-scale structure without competing with data.\n                        if (ch === 'x' || ch === 'y') {\n                            if (!enc.axis) enc.axis = {};\n                            enc.axis.gridColor = '#e8e8e8';\n                            enc.axis.gridOpacity = 0.5;\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n/**\n * Apply tooltip configuration to a VL spec.\n */\nexport function vlApplyTooltips(vgObj: any): void {\n    if (!vgObj.config) vgObj.config = {};\n    vgObj.config.mark = { ...vgObj.config.mark, tooltip: true };\n}\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/recommendation.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Vega-Lite recommendation & adaptation wrappers.\n *\n * Extends core/recommendation.ts with VL-only chart types (Regression,\n * Ranged Dot Plot, Pyramid, Lollipop, Dotted Line, Bump, Density, Waterfall,\n * Strip, US/World Map) and filters results to VL-valid channels.\n */\n\nimport {\n    adaptChannels,\n    recommendChannels,\n    getRecommendation,\n    type InternalTableView,\n    type RecommendFn,\n    // Pick utilities for VL-specific chart types\n    pick,\n    pickQuantitative,\n    pickTemporal,\n    pickNominal,\n    pickDiscrete,\n    pickLowCardNominal,\n    pickLowCardDiscrete,\n    pickGeo,\n    pickSeriesAxis,\n    hasMultipleValuesPerField,\n    pickBestGroupingField,\n    pickLineChartColorField,\n    isValidLineSeriesData,\n    nameMatches,\n} from '../core/recommendation';\nimport { vlGetTemplateChannels } from './templates';\n\n// ── VL-extended recommendation ──────────────────────────────────────────\n\n/**\n * VL-specific recommendation function.  Handles VL-only chart types first,\n * then falls back to the core recommendation engine for shared types.\n */\nfunction vlGetRecommendation(chartType: string, tv: InternalTableView): Record<string, string> {\n    const used = new Set<string>();\n    const rec: Record<string, string> = {};\n    const assign = (channel: string, fieldName: string | undefined) => {\n        if (fieldName) rec[channel] = fieldName;\n    };\n\n    switch (chartType) {\n        case 'Regression':\n            // Regression uses the same logic as Scatter Plot in the core engine\n            return getRecommendation('Scatter Plot', tv);\n\n        case 'Ranged Dot Plot': {\n            const yField = pickGeo(tv, used) ?? pickDiscrete(tv, used);\n            const xField = pickQuantitative(tv, used);\n            if (!xField || !yField) return {};\n            assign('y', yField);\n            assign('x', xField);\n            return rec;\n        }\n\n        case 'Pyramid Chart': {\n            const yField = pickDiscrete(tv, used);\n            const xField = pickQuantitative(tv, used);\n            const colorField = pickDiscrete(tv, used);\n            if (!xField || !yField || !colorField) return {};\n            assign('y', yField);\n            assign('x', xField);\n            assign('color', colorField);\n            return rec;\n        }\n\n        case 'Dotted Line Chart':\n        case 'Bump Chart': {\n            // Same logic as Line Chart\n            const xField = pickSeriesAxis(tv, used);\n            const yField = pickQuantitative(tv, used);\n            if (!xField || !yField) return {};\n            assign('x', xField);\n            assign('y', yField);\n            if (!isValidLineSeriesData(tv, xField, undefined)) {\n                const colorField = pickLineChartColorField(tv, used, xField, 20)\n                    ?? pickLineChartColorField(tv, used, xField, 200);\n                if (!colorField) return {};\n                assign('color', colorField);\n            }\n            return rec;\n        }\n\n        case 'Lollipop Chart': {\n            const xField = pickDiscrete(tv, used);\n            const yField = pickQuantitative(tv, used);\n            if (!xField || !yField) return {};\n            assign('x', xField);\n            assign('y', yField);\n            if (hasMultipleValuesPerField(tv, xField)) {\n                assign('color', pickBestGroupingField(tv, used, xField));\n            }\n            return rec;\n        }\n\n        case 'Density Plot': {\n            const xField = pickQuantitative(tv, used);\n            if (!xField) return {};\n            assign('x', xField);\n            assign('color', pickLowCardNominal(tv, used, 15));\n            return rec;\n        }\n\n        case 'Waterfall Chart': {\n            const xField = pickDiscrete(tv, used);\n            const yField = pickQuantitative(tv, used);\n            if (!xField || !yField) return {};\n            assign('x', xField);\n            assign('y', yField);\n            return rec;\n        }\n\n        case 'Strip Plot': {\n            const xField = pickDiscrete(tv, used);\n            const yField = pickQuantitative(tv, used);\n            if (!xField || !yField) return {};\n            assign('x', xField);\n            assign('y', yField);\n            assign('color', pickLowCardDiscrete(tv, used, 20));\n            return rec;\n        }\n\n        case 'US Map':\n        case 'World Map': {\n            const latField = pick(tv, used, (_n, _ty, st) => st === 'Latitude')\n                ?? pick(tv, used, (n) => nameMatches(n, ['latitude', 'lat']));\n            const lonField = pick(tv, used, (_n, _ty, st) => st === 'Longitude')\n                ?? pick(tv, used, (n) => nameMatches(n, ['longitude', 'lon', 'lng', 'long']));\n            if (!latField || !lonField) return {};\n            assign('latitude', latField);\n            assign('longitude', lonField);\n            assign('color', pickQuantitative(tv, used) ?? pickLowCardNominal(tv, used));\n            return rec;\n        }\n\n        default:\n            // Fall through to core recommendation engine\n            return getRecommendation(chartType, tv);\n    }\n}\n\n// ── Public API ──────────────────────────────────────────────────────────\n\n/**\n * Adapt encodings when switching between Vega-Lite chart types.\n *\n * @param sourceType     Current chart type name\n * @param targetType     Target chart type name\n * @param encodings      Current channel->fieldName map (filled channels only)\n * @param data           (optional) Data rows for recommendation-based adaptation\n * @param semanticTypes  (optional) Field->semantic-type map\n * @returns              Remapped channel->fieldName for the target\n */\nexport function vlAdaptChart(\n    sourceType: string,\n    targetType: string,\n    encodings: Record<string, string>,\n    data?: any[],\n    semanticTypes?: Record<string, string>,\n): Record<string, string> {\n    const targetChannels = vlGetTemplateChannels(targetType);\n    return adaptChannels(sourceType, targetType, targetChannels, encodings, data, semanticTypes, vlGetRecommendation);\n}\n\n/**\n * Recommend field->channel assignments for a Vega-Lite chart type.\n *\n * @param chartType      Chart template name (e.g. \"Bar Chart\")\n * @param data           Array of row objects\n * @param semanticTypes  Field->semantic-type map (e.g. { weight: \"Quantity\" })\n * @returns              channel->fieldName map (only VL-valid channels)\n */\nexport function vlRecommendEncodings(\n    chartType: string,\n    data: any[],\n    semanticTypes: Record<string, string>,\n): Record<string, string> {\n    const rec = recommendChannels(chartType, data, semanticTypes, vlGetRecommendation);\n    const validChannels = vlGetTemplateChannels(chartType);\n    const result: Record<string, string> = {};\n    for (const [ch, field] of Object.entries(rec)) {\n        if (validChannels.includes(ch)) {\n            result[ch] = field;\n        }\n    }\n    return result;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/area.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { defaultBuildEncodings, setMarkProp } from './utils';\n\nconst interpolateConfigProperty: ChartPropertyDef = {\n    key: \"interpolate\", label: \"Curve\", type: \"discrete\", options: [\n        { value: undefined, label: \"Default (linear)\" },\n        { value: \"linear\", label: \"Linear\" },\n        { value: \"monotone\", label: \"Monotone (smooth)\" },\n        { value: \"step\", label: \"Step\" },\n        { value: \"step-before\", label: \"Step Before\" },\n        { value: \"step-after\", label: \"Step After\" },\n        { value: \"basis\", label: \"Basis (smooth)\" },\n        { value: \"cardinal\", label: \"Cardinal\" },\n        { value: \"catmull-rom\", label: \"Catmull-Rom\" },\n    ],\n};\n\nfunction applyInterpolate(vgSpec: any, config?: Record<string, any>): void {\n    if (!config?.interpolate) return;\n    vgSpec.mark = setMarkProp(vgSpec.mark, 'interpolate', config.interpolate);\n}\n\n/**\n * Check for continuous (quantitative/temporal) color on a connected mark.\n */\nfunction hasContinuousColorOnConnectedMark(resolvedEncodings: Record<string, any>): boolean {\n    const colorEnc = resolvedEncodings.color;\n    return colorEnc?.field && (colorEnc.type === 'quantitative' || colorEnc.type === 'temporal');\n}\n\n/**\n * Build a layered area + point spec for continuous color.\n * Area layer draws the filled shape; point layer overlays colored dots.\n */\nfunction buildContinuousColorAreaLayers(\n    spec: any,\n    resolvedEncodings: Record<string, any>,\n    config?: Record<string, any>,\n    dataLength: number = 30,\n): void {\n    const colorEnc = { ...resolvedEncodings.color };\n\n    const sharedEncodings: Record<string, any> = {};\n    for (const [ch, enc] of Object.entries(resolvedEncodings)) {\n        if (ch !== 'color') {\n            sharedEncodings[ch] = enc;\n        }\n    }\n\n    const areaMark: any = { type: 'area', opacity: config?.opacity ?? 0.3 };\n    if (config?.interpolate) {\n        areaMark.interpolate = config.interpolate;\n    }\n\n    const pointSize = Math.round(Math.max(15, Math.min(60, 1200 / dataLength)));\n    const pointMark: any = { type: 'point', filled: true, size: pointSize };\n\n    spec.layer = [\n        { mark: areaMark, encoding: { ...sharedEncodings } },\n        { mark: pointMark, encoding: { ...sharedEncodings, color: colorEnc } },\n    ];\n\n    delete spec.mark;\n    spec.encoding = {};\n}\n\nexport const areaChartDef: ChartTemplateDef = {\n    chart: \"Area Chart\",\n    template: { mark: \"area\", encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"opacity\", \"column\", \"row\"],\n    markCognitiveChannel: 'area',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        // Continuous color on area marks has the same grouping problem as lines.\n        // Use area + point layer approach.\n        if (hasContinuousColorOnConnectedMark(ctx.resolvedEncodings)) {\n            buildContinuousColorAreaLayers(spec, ctx.resolvedEncodings, ctx.chartProperties, ctx.table.length);\n        } else {\n            defaultBuildEncodings(spec, ctx.resolvedEncodings);\n            const config = ctx.chartProperties;\n            applyInterpolate(spec, config);\n            if (config) {\n                if (config.opacity !== undefined && config.opacity < 1) {\n                    spec.mark = setMarkProp(spec.mark, 'opacity', config.opacity);\n                }\n                if (config.stackMode) {\n                    for (const axis of ['x', 'y'] as const) {\n                        if (spec.encoding?.[axis]?.type === 'quantitative' ||\n                            spec.encoding?.[axis]?.aggregate) {\n                            spec.encoding[axis].stack = config.stackMode === 'layered' ? null : config.stackMode;\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n    },\n    properties: [\n        interpolateConfigProperty,\n        { key: \"opacity\", label: \"Opacity\", type: \"continuous\", min: 0.1, max: 1, step: 0.05, defaultValue: 0.7 },\n        { key: \"stackMode\", label: \"Stack\", type: \"discrete\", options: [\n            { value: undefined, label: \"Stacked (default)\" },\n            { value: \"normalize\", label: \"Normalize (100%)\" },\n            { value: \"center\", label: \"Center\" },\n            { value: \"layered\", label: \"Layered (overlap)\" },\n        ] },\n    ] as ChartPropertyDef[],\n};\n\nexport const streamgraphDef: ChartTemplateDef = {\n    chart: \"Streamgraph\",\n    template: { mark: \"area\", encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"column\", \"row\"],\n    markCognitiveChannel: 'area',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        defaultBuildEncodings(spec, ctx.resolvedEncodings);\n        // Force center stacking on the measure axis\n        if (spec.encoding?.y && !spec.encoding.y.stack) {\n            spec.encoding.y.stack = \"center\";\n            spec.encoding.y.axis = null;\n        } else if (spec.encoding?.x && !spec.encoding.x.stack) {\n            spec.encoding.x.stack = \"center\";\n            spec.encoding.x.axis = null;\n        }\n        applyInterpolate(spec, ctx.chartProperties);\n    },\n    properties: [interpolateConfigProperty] as ChartPropertyDef[],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/bar.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport {\n    defaultBuildEncodings, setMarkProp, adjustBarMarks, adjustRectTiling,\n    detectBandedAxisFromSemantics, detectBandedAxisForceDiscrete,\n    resolveAsDiscrete, ensureDiscreteTypes,\n} from './utils';\n\n// ─── Bar Chart ──────────────────────────────────────────────────────────────\n\nexport const barChartDef: ChartTemplateDef = {\n    chart: \"Bar Chart\",\n    template: { mark: \"bar\", encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"opacity\", \"column\", \"row\"],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisFromSemantics(cs, table, { preferAxis: 'x' });\n        return {\n            axisFlags: result ? { [result.axis]: { banded: true } } : { x: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n        };\n    },\n    instantiate: (spec, ctx) => {\n        defaultBuildEncodings(spec, ctx.resolvedEncodings);\n        const config = ctx.chartProperties;\n        if (config && config.cornerRadius > 0) {\n            spec.mark = setMarkProp(spec.mark, 'cornerRadius', config.cornerRadius);\n        }\n        adjustBarMarks(spec, ctx);\n    },\n    properties: [\n        { key: \"cornerRadius\", label: \"Corners\", type: \"continuous\", min: 0, max: 15, step: 1, defaultValue: 0 },\n    ] as ChartPropertyDef[],\n};\n\n// ─── Pyramid Chart ──────────────────────────────────────────────────────────\n\nexport const pyramidChartDef: ChartTemplateDef = {\n    chart: \"Pyramid Chart\",\n    template: {\n        spacing: 0,\n        resolve: { scale: { y: \"shared\" } },\n        hconcat: [\n            {\n                mark: \"bar\",\n                encoding: {\n                    y: {},\n                    x: { scale: { reverse: true }, stack: null },\n                    opacity: { value: 0.9 },\n                    color: { value: \"#4e79a7\" },\n                },\n            },\n            {\n                mark: \"bar\",\n                encoding: {\n                    y: { axis: null },\n                    x: { stack: null },\n                    opacity: { value: 0.9 },\n                    color: { value: \"#e15759\" },\n                },\n            },\n        ],\n        config: { view: { stroke: null }, axis: { grid: false } },\n    },\n    channels: [\"x\", \"y\", \"color\"],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: () => ({\n        axisFlags: { y: { banded: true } },\n    }),\n    instantiate: (spec, ctx) => {\n        let { y, x, color } = ctx.resolvedEncodings;\n\n        // Auto-detect flipped axes\n        const isDiscreteType = (enc: any) => enc && (enc.type === 'nominal' || enc.type === 'ordinal');\n        const isQuant = (enc: any) => enc && (enc.type === 'quantitative' || enc.type === 'temporal');\n        if (isDiscreteType(x) && isQuant(y)) {\n            [x, y] = [y, x];\n        }\n\n        // y → both panels (shared category axis, always discrete)\n        if (y) {\n            const yEnc = { ...y };\n            resolveAsDiscrete(yEnc, ctx.table);\n            spec.hconcat[0].encoding.y = { ...spec.hconcat[0].encoding.y, ...yEnc };\n            spec.hconcat[1].encoding.y = { ...spec.hconcat[1].encoding.y, ...yEnc };\n        }\n        // x → both panels\n        if (x) {\n            spec.hconcat[0].encoding.x = { ...spec.hconcat[0].encoding.x, ...x };\n            spec.hconcat[1].encoding.x = { ...spec.hconcat[1].encoding.x, ...x };\n        }\n\n        // --- Pyramid-specific configuration ---\n        const colorField = color?.field;\n        const table = ctx.table;\n        const canvasSize = ctx.canvasSize;\n\n        try {\n            if (table && colorField) {\n                const groups = [...new Set(table.map(r => r[colorField]))] as string[];\n                const leftGroup = groups[0];\n                const rightGroup = groups.length > 1 ? groups[1] : groups[0];\n\n                spec.hconcat[0].transform = [{ filter: { field: colorField, equal: leftGroup } }];\n                spec.hconcat[1].transform = [{ filter: { field: colorField, equal: rightGroup } }];\n                spec.hconcat[0].title = String(leftGroup);\n                spec.hconcat[1].title = String(rightGroup);\n\n                if (groups.length > 2) {\n                    if (!spec._warnings) spec._warnings = [];\n                    spec._warnings.push({\n                        severity: 'warning',\n                        code: 'too-many-groups-pyramid',\n                        message: `Pyramid chart works best with exactly 2 groups, but found ${groups.length} (${groups.map((g: string) => `'${g}'`).join(', ')}). Only the first two are shown.`,\n                        channel: 'color',\n                        field: colorField,\n                    });\n                }\n            }\n\n            if (table) {\n                const xField = spec.hconcat[0].encoding.x?.field;\n                if (xField) {\n                    const allVals = table.map(r => r[xField]).filter((v: any) => typeof v === 'number');\n                    if (allVals.length > 0) {\n                        const domain = [Math.min(0, ...allVals), Math.max(...allVals)];\n                        spec.hconcat[0].encoding.x.scale = { ...spec.hconcat[0].encoding.x.scale, domain };\n                        spec.hconcat[1].encoding.x.scale = { ...spec.hconcat[1].encoding.x.scale, domain };\n                    }\n                    if (allVals.some((v: number) => v < 0)) {\n                        if (!spec._warnings) spec._warnings = [];\n                        spec._warnings.push({\n                            severity: 'warning',\n                            code: 'negative-values-pyramid',\n                            message: `Negative values detected in '${xField}'. Pyramid charts work best with non-negative values.`,\n                            channel: 'x',\n                            field: xField,\n                        });\n                    }\n                }\n\n                const baseWidth = canvasSize?.width ?? 400;\n                const baseHeight = canvasSize?.height ?? 320;\n\n                const facetCols = 2;\n                const facetStretch = Math.min(1.5, Math.pow(facetCols, 0.3));\n                const panelWidth = Math.round(Math.max(40, baseWidth * facetStretch / facetCols));\n\n                const yField = spec.hconcat[0].encoding.y?.field;\n                let panelHeight = baseHeight;\n                if (yField) {\n                    const yCardinality = new Set(table.map(r => r[yField])).size;\n                    const baseRefSize = 300;\n                    const sizeRatio = Math.max(baseWidth, baseHeight) / baseRefSize;\n                    const defaultStep = Math.round(20 * Math.max(1, sizeRatio));\n                    if (yCardinality > 0) {\n                        const pressure = (yCardinality * defaultStep) / baseHeight;\n                        if (pressure > 1) {\n                            const stretch = Math.min(2, Math.pow(pressure, 0.5));\n                            panelHeight = Math.round(baseHeight * stretch);\n                        }\n                    }\n                }\n\n                for (const panel of spec.hconcat) {\n                    panel.width = panelWidth;\n                    panel.height = panelHeight;\n                }\n            }\n        } catch {\n            // ignore errors\n        }\n    },\n};\n\n// ─── Grouped Bar Chart ──────────────────────────────────────────────────────\n\nexport const groupedBarChartDef: ChartTemplateDef = {\n    chart: \"Grouped Bar Chart\",\n    template: { mark: \"bar\", encoding: {} },\n    channels: [\"x\", \"y\", \"group\", \"column\", \"row\"],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisForceDiscrete(cs, table, { preferAxis: 'x' });\n        const axis = result?.axis || 'x';\n\n        return {\n            axisFlags: { [axis]: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n        };\n    },\n    instantiate: (spec, ctx) => {\n        // resolvedEncodings already includes color + xOffset/yOffset from group channel\n        defaultBuildEncodings(spec, ctx.resolvedEncodings);\n        adjustBarMarks(spec, ctx);\n    },\n};\n\n// ─── Stacked Bar Chart ──────────────────────────────────────────────────────\n\nexport const stackedBarChartDef: ChartTemplateDef = {\n    chart: \"Stacked Bar Chart\",\n    template: { mark: \"bar\", encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"column\", \"row\"],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: (cs, table) => {\n        const result = detectBandedAxisFromSemantics(cs, table, { preferAxis: 'x' });\n        return {\n            axisFlags: result ? { [result.axis]: { banded: true } } : { x: { banded: true } },\n            resolvedTypes: result?.resolvedTypes,\n            paramOverrides: { continuousMarkCrossSection: { x: 20, y: 20, seriesCountAxis: 'auto' } },\n        };\n    },\n    instantiate: (spec, ctx) => {\n        defaultBuildEncodings(spec, ctx.resolvedEncodings);\n        // Apply stack mode\n        const config = ctx.chartProperties;\n        if (config?.stackMode) {\n            for (const axis of ['x', 'y'] as const) {\n                if (spec.encoding?.[axis]?.type === 'quantitative' ||\n                    spec.encoding?.[axis]?.aggregate) {\n                    spec.encoding[axis].stack = config.stackMode === 'layered' ? null : config.stackMode;\n                    break;\n                }\n            }\n        }\n        adjustBarMarks(spec, ctx);\n    },\n    properties: [\n        { key: \"stackMode\", label: \"Stack\", type: \"discrete\", options: [\n            { value: undefined, label: \"Stacked (default)\" },\n            { value: \"normalize\", label: \"Normalize (100%)\" },\n            { value: \"center\", label: \"Center\" },\n            { value: \"layered\", label: \"Layered (overlap)\" },\n        ] },\n    ] as ChartPropertyDef[],\n};\n\n// ─── Histogram ──────────────────────────────────────────────────────────────\n\nexport const histogramDef: ChartTemplateDef = {\n    chart: \"Histogram\",\n    template: {\n        mark: \"bar\",\n        encoding: {\n            x: { bin: true },\n            y: { aggregate: \"count\" },\n        },\n    },\n    channels: [\"x\", \"color\", \"column\", \"row\"],\n    markCognitiveChannel: 'length',\n    instantiate: (spec, ctx) => {\n        defaultBuildEncodings(spec, ctx.resolvedEncodings);\n        // Apply bin count from chart properties\n        const config = ctx.chartProperties;\n        if (config?.binCount !== undefined && spec.encoding?.x) {\n            spec.encoding.x.bin = { maxbins: config.binCount };\n        }\n        adjustBarMarks(spec, ctx);\n    },\n    properties: [\n        { key: \"binCount\", label: \"Bins\", type: \"continuous\", min: 5, max: 50, step: 1, defaultValue: 10 },\n    ] as ChartPropertyDef[],\n};\n\n// ─── Heatmap ────────────────────────────────────────────────────────────────\n\nexport const heatmapDef: ChartTemplateDef = {\n    chart: \"Heatmap\",\n    template: { mark: \"rect\", encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"column\", \"row\"],\n    markCognitiveChannel: 'color',\n    declareLayoutMode: () => ({\n        axisFlags: { x: { banded: true }, y: { banded: true } },\n    }),\n    instantiate: (spec, ctx) => {\n        defaultBuildEncodings(spec, ctx.resolvedEncodings);\n        // Apply color scheme from chart properties\n        const config = ctx.chartProperties;\n        if (config?.colorScheme && spec.encoding?.color) {\n            if (!spec.encoding.color.scale) spec.encoding.color.scale = {};\n            spec.encoding.color.scale.scheme = config.colorScheme;\n        }\n        adjustBarMarks(spec, ctx);\n        adjustRectTiling(spec, ctx);\n    },\n    properties: [\n        {\n            key: \"colorScheme\", label: \"Scheme\", type: \"discrete\", options: [\n                { value: undefined, label: \"Default\" },\n                { value: \"viridis\", label: \"Viridis\" },\n                { value: \"inferno\", label: \"Inferno\" },\n                { value: \"magma\", label: \"Magma\" },\n                { value: \"plasma\", label: \"Plasma\" },\n                { value: \"turbo\", label: \"Turbo\" },\n                { value: \"blues\", label: \"Blues\" },\n                { value: \"reds\", label: \"Reds\" },\n                { value: \"greens\", label: \"Greens\" },\n                { value: \"oranges\", label: \"Oranges\" },\n                { value: \"purples\", label: \"Purples\" },\n                { value: \"greys\", label: \"Greys\" },\n                { value: \"blueorange\", label: \"Blue-Orange (diverging)\" },\n                { value: \"redblue\", label: \"Red-Blue (diverging)\" },\n            ],\n        },\n    ] as ChartPropertyDef[],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/bump.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { defaultBuildEncodings } from './utils';\n\n/** Semantic types that indicate a rank-like field */\nconst RANK_SEMANTIC_TYPES = new Set(['Rank', 'Index', 'Score', 'Rating', 'Level']);\n\nconst isDiscrete = (type: string | undefined) =>\n    type === 'nominal' || type === 'ordinal';\n\nexport const bumpChartDef: ChartTemplateDef = {\n    chart: \"Bump Chart\",\n    template: {\n        mark: { type: \"line\", point: true, interpolate: \"monotone\", strokeWidth: 2 },\n        encoding: {},\n    },\n    channels: [\"x\", \"y\", \"color\", \"detail\", \"column\", \"row\"],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 80, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        defaultBuildEncodings(spec, ctx.resolvedEncodings);\n\n        const xEnc = spec.encoding?.x;\n        const yEnc = spec.encoding?.y;\n        if (!xEnc || !yEnc) return;\n\n        const semanticTypes = ctx.semanticTypes;\n\n        // --- Decide which axis is rank ---\n        let rankAxis: 'x' | 'y';\n\n        const xSemType = (xEnc.field && semanticTypes?.[xEnc.field]) || '';\n        const ySemType = (yEnc.field && semanticTypes?.[yEnc.field]) || '';\n        const xIsRank = RANK_SEMANTIC_TYPES.has(xSemType);\n        const yIsRank = RANK_SEMANTIC_TYPES.has(ySemType);\n\n        if (yIsRank && !xIsRank) {\n            rankAxis = 'y';\n        } else if (xIsRank && !yIsRank) {\n            rankAxis = 'x';\n        } else if (isDiscrete(xEnc.type) && !isDiscrete(yEnc.type)) {\n            rankAxis = 'y';\n        } else if (isDiscrete(yEnc.type) && !isDiscrete(xEnc.type)) {\n            rankAxis = 'x';\n        } else {\n            rankAxis = 'y';\n        }\n\n        // Y is rank → reverse Y so rank 1 is at top\n        if (rankAxis === 'y') {\n            yEnc.scale = { ...yEnc.scale, reverse: true };\n        }\n\n        // X is rank → fix line connection order\n        if (rankAxis === 'x' && yEnc.field) {\n            spec.encoding.order = {\n                field: yEnc.field,\n                type: yEnc.type || \"quantitative\",\n            };\n        }\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/candlestick.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\n\nexport const candlestickChartDef: ChartTemplateDef = {\n    chart: \"Candlestick Chart\",\n    template: {\n        encoding: {},\n        layer: [\n            { mark: \"rule\", encoding: {} },\n            { mark: { type: \"bar\", size: 14 }, encoding: {} },\n        ],\n    },\n    channels: [\"x\", \"open\", \"high\", \"low\", \"close\", \"column\", \"row\"],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: () => ({\n        axisFlags: { x: { banded: true } },\n    }),\n    instantiate: (spec, ctx) => {\n        const { x, open, high, low, close, column, row } = ctx.resolvedEncodings;\n\n        if (!spec.encoding) spec.encoding = {};\n        if (x) {\n            spec.encoding.x = x;\n            if (x.type === 'nominal' || x.type === 'ordinal') {\n                spec.encoding.x.sort = null;\n            }\n        }\n        if (column) spec.encoding.column = column;\n        if (row) spec.encoding.row = row;\n\n        spec.encoding.y = {\n            type: \"quantitative\",\n            scale: { zero: false },\n            axis: { title: null },\n        };\n\n        spec.title = { text: \"Price\", anchor: \"start\", fontSize: 11, fontWeight: \"normal\", color: \"#666\" };\n\n        if (low) spec.layer[0].encoding.y = { field: low.field };\n        if (high) spec.layer[0].encoding.y2 = { field: high.field };\n        if (open) spec.layer[1].encoding.y = { field: open.field };\n        if (close) spec.layer[1].encoding.y2 = { field: close.field };\n\n        if (open?.field && close?.field) {\n            spec.encoding.color = {\n                condition: {\n                    test: `datum['${open.field}'] < datum['${close.field}']`,\n                    value: \"#06982d\",\n                },\n                value: \"#ae1325\",\n            };\n        }\n\n        // Compute bar width from x-axis cardinality\n        const table = ctx.table;\n        const plotWidth = ctx.canvasSize?.width || 400;\n        const xField = spec.encoding?.x?.field;\n        let barSize: number;\n\n        if (xField && table?.length > 0) {\n            const cardinality = new Set(table.map((r: any) => r[xField])).size;\n            barSize = Math.max(2, Math.min(20, Math.round(plotWidth * 0.6 / cardinality)));\n        } else {\n            barSize = 14;\n        }\n\n        spec.layer[1].mark = { ...spec.layer[1].mark, size: barSize };\n\n        // Independent Y-axis for faceted candlestick charts\n        const config = ctx.chartProperties;\n        if (config?.independentYAxis) {\n            if (!spec.resolve) spec.resolve = {};\n            if (!spec.resolve.scale) spec.resolve.scale = {};\n            spec.resolve.scale.y = \"independent\";\n        }\n    },\n    properties: [\n        { key: \"independentYAxis\", label: \"Independent Y-Axis\", type: \"binary\", defaultValue: false },\n    ],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/custom.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef } from '../../core/types';\nimport { defaultBuildEncodings } from './utils';\n\nexport const customPointDef: ChartTemplateDef = {\n    chart: \"Custom Point\",\n    template: { mark: \"point\", encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"opacity\", \"size\", \"shape\", \"column\", \"row\"],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => defaultBuildEncodings(spec, ctx.resolvedEncodings),\n};\n\nexport const customLineDef: ChartTemplateDef = {\n    chart: \"Custom Line\",\n    template: { mark: \"line\", encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"opacity\", \"detail\", \"column\", \"row\"],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => defaultBuildEncodings(spec, ctx.resolvedEncodings),\n};\n\nexport const customBarDef: ChartTemplateDef = {\n    chart: \"Custom Bar\",\n    template: { mark: \"bar\", encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"opacity\", \"size\", \"shape\", \"column\", \"row\"],\n    markCognitiveChannel: 'length',\n    instantiate: (spec, ctx) => defaultBuildEncodings(spec, ctx.resolvedEncodings),\n};\n\nexport const customRectDef: ChartTemplateDef = {\n    chart: \"Custom Rect\",\n    template: { mark: \"rect\", encoding: {} },\n    channels: [\"x\", \"y\", \"x2\", \"y2\", \"color\", \"opacity\", \"column\", \"row\"],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => defaultBuildEncodings(spec, ctx.resolvedEncodings),\n};\n\nexport const customAreaDef: ChartTemplateDef = {\n    chart: \"Custom Area\",\n    template: { mark: \"area\", encoding: {} },\n    channels: [\"x\", \"y\", \"x2\", \"y2\", \"color\", \"column\", \"row\"],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => defaultBuildEncodings(spec, ctx.resolvedEncodings),\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/density.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\n\nexport const densityPlotDef: ChartTemplateDef = {\n    chart: \"Density Plot\",\n    template: {\n        mark: \"area\",\n        transform: [{ density: \"__field__\" }],\n        encoding: {\n            x: { field: \"value\", type: \"quantitative\" },\n            y: { field: \"density\", type: \"quantitative\" },\n        },\n    },\n    channels: [\"x\", \"color\", \"column\", \"row\"],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => {\n        const { x, color, column, row } = ctx.resolvedEncodings;\n        if (x?.field) {\n            spec.transform[0].density = x.field;\n            spec.encoding.x.title = x.field;\n        }\n        if (color?.field) {\n            spec.transform[0].groupby = [color.field];\n            spec.encoding.color = { ...(spec.encoding.color || {}), ...color };\n        }\n        if (column) spec.encoding.column = column;\n        if (row) spec.encoding.row = row;\n\n        const config = ctx.chartProperties;\n        if (config?.bandwidth && config.bandwidth > 0) {\n            spec.transform[0].bandwidth = config.bandwidth;\n        }\n    },\n    properties: [\n        { key: \"bandwidth\", label: \"Bandwidth\", type: \"continuous\", min: 0.05, max: 2, step: 0.05, defaultValue: 0 },\n    ] as ChartPropertyDef[],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/index.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Template registry — collects all chart template definitions.\n * No UI/icon dependencies. This is the pure-data template catalog.\n *\n * Each template file exports individual ChartTemplateDef objects.\n * Categories are defined here to group related charts in the UI.\n */\n\nimport { ChartTemplateDef } from '../../core/types';\n\n// --- Individual chart imports ---\nimport { scatterPlotDef, regressionDef, rangedDotPlotDef, boxplotDef } from './scatter';\nimport { barChartDef, pyramidChartDef, groupedBarChartDef, stackedBarChartDef, histogramDef, heatmapDef } from './bar';\nimport { lineChartDef, dottedLineChartDef } from './line';\nimport { bumpChartDef } from './bump';\nimport { areaChartDef, streamgraphDef } from './area';\nimport { pieChartDef } from './pie';\nimport { lollipopChartDef } from './lollipop';\nimport { densityPlotDef } from './density';\nimport { stripPlotDef } from './jitter';\nimport { candlestickChartDef } from './candlestick';\nimport { waterfallChartDef } from './waterfall';\nimport { radarChartDef } from './radar';\nimport { roseChartDef } from './rose';\nimport { usMapDef, worldMapDef } from './map';\nimport { customPointDef, customLineDef, customBarDef, customRectDef, customAreaDef } from './custom';\n\n/**\n * All chart template definitions, grouped by category.\n * Keys are category names shown in the UI, values are arrays of template definitions.\n */\nexport const vlTemplateDefs: { [key: string]: ChartTemplateDef[] } = {\n    \"Scatter & Point\":  [scatterPlotDef, regressionDef, boxplotDef, stripPlotDef],\n    \"Bar\":              [barChartDef, groupedBarChartDef, stackedBarChartDef, histogramDef, lollipopChartDef, pyramidChartDef],\n    \"Line & Area\":      [lineChartDef, dottedLineChartDef, bumpChartDef, areaChartDef, streamgraphDef],\n    \"Part-to-Whole\":    [pieChartDef, roseChartDef, heatmapDef, waterfallChartDef],\n    \"Statistical\":      [densityPlotDef, rangedDotPlotDef, radarChartDef, candlestickChartDef],\n    \"Map\":              [usMapDef, worldMapDef],\n    \"Custom\":           [customPointDef, customLineDef, customBarDef, customRectDef, customAreaDef],\n};\n\n/**\n * Flat list of all Vega-Lite chart template definitions.\n */\nexport const vlAllTemplateDefs: ChartTemplateDef[] = Object.values(vlTemplateDefs).flat();\n\n/**\n * Look up a Vega-Lite chart template definition by chart type name.\n */\nexport function vlGetTemplateDef(chartType: string): ChartTemplateDef | undefined {\n    return vlAllTemplateDefs.find(t => t.chart === chartType);\n}\n\n/**\n * Get the available channels for a Vega-Lite chart type.\n */\nexport function vlGetTemplateChannels(chartType: string): string[] {\n    return vlGetTemplateDef(chartType)?.channels || [];\n}\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/jitter.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { defaultBuildEncodings } from './utils';\n\nexport const stripPlotDef: ChartTemplateDef = {\n    chart: \"Strip Plot\",\n    template: {\n        mark: { type: \"circle\", opacity: 0.7 },\n        encoding: {},\n    },\n    channels: [\"x\", \"y\", \"color\", \"size\", \"column\", \"row\"],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: () => ({\n        paramOverrides: { defaultStepMultiplier: 2, minStep: 16 },\n    }),\n    instantiate: (spec, ctx) => {\n        defaultBuildEncodings(spec, ctx.resolvedEncodings);\n\n        const table = ctx.table;\n        const canvasSize = ctx.canvasSize;\n        const config = ctx.chartProperties;\n\n        const stepWidth = config?.stepWidth ?? 20;\n        let pointSize = config?.pointSize ?? 0;\n        let opacity = config?.opacity ?? 0;\n\n        // Determine which axis is categorical\n        const xType = spec.encoding?.x?.type;\n        const yType = spec.encoding?.y?.type;\n\n        const catAxis = (xType === 'nominal' || xType === 'ordinal') ? 'x'\n            : (yType === 'nominal' || yType === 'ordinal') ? 'y'\n            : null;\n\n        // Count points in the largest categorical group\n        let maxGroupCount = table?.length ?? 0;\n        if (catAxis && spec.encoding?.[catAxis]?.field && table) {\n            const catField = spec.encoding[catAxis].field;\n            const groupCounts: Record<string, number> = {};\n            for (const row of table) {\n                const key = String(row[catField] ?? '');\n                groupCounts[key] = (groupCounts[key] || 0) + 1;\n            }\n            maxGroupCount = Math.max(1, ...Object.values(groupCounts));\n        }\n\n        // Continuous axis length\n        const contLen = catAxis === 'x'\n            ? (canvasSize?.height || 400)\n            : (canvasSize?.width || 400);\n\n        const areaBudget = stepWidth * contLen;\n        const targetCoverage = 0.35;\n\n        // Auto-compute size\n        if (pointSize === 0) {\n            const idealSize = (targetCoverage * areaBudget) / maxGroupCount;\n            pointSize = Math.max(5, Math.min(100, Math.round(idealSize)));\n        }\n\n        // Auto-compute opacity\n        if (opacity === 0) {\n            const density = (maxGroupCount * pointSize) / areaBudget;\n            if (density < 0.2) {\n                opacity = 0.8;\n            } else if (density < 0.5) {\n                opacity = 0.6;\n            } else if (density < 1) {\n                opacity = 0.4;\n            } else {\n                opacity = Math.max(0.1, 0.3 / density);\n            }\n            opacity = Math.round(opacity * 20) / 20;\n        }\n\n        // Apply mark properties\n        if (typeof spec.mark === 'string') {\n            spec.mark = { type: spec.mark };\n        }\n        spec.mark.size = pointSize;\n        spec.mark.opacity = opacity;\n\n        // Set step width and derive jitter\n        const jitterWidth = stepWidth * 0.8;\n        if (catAxis === 'x') {\n            spec.width = { step: stepWidth };\n        } else if (catAxis === 'y') {\n            spec.height = { step: stepWidth };\n        }\n\n        if (jitterWidth > 0) {\n            if (!spec.transform) spec.transform = [];\n            spec.transform.push({\n                calculate: `${-jitterWidth / 2} + random() * ${jitterWidth}`,\n                as: \"__jitter\",\n            });\n\n            const offsetEnc = {\n                field: \"__jitter\",\n                type: \"quantitative\",\n                axis: null,\n                scale: { domain: [-stepWidth / 2, stepWidth / 2] },\n            };\n\n            if (catAxis === 'x') {\n                spec.encoding.xOffset = offsetEnc;\n            } else if (catAxis === 'y') {\n                spec.encoding.yOffset = offsetEnc;\n            } else {\n                spec.encoding.xOffset = offsetEnc;\n            }\n        }\n    },\n    properties: [\n        { key: \"stepWidth\", label: \"Jitter\", type: \"continuous\", min: 10, max: 100, step: 5, defaultValue: 20 },\n        { key: \"pointSize\", label: \"Size\", type: \"continuous\", min: 0, max: 150, step: 5, defaultValue: 0 },\n        { key: \"opacity\", label: \"Opacity\", type: \"continuous\", min: 0, max: 1, step: 0.05, defaultValue: 0 },\n    ] as ChartPropertyDef[],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/line.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { defaultBuildEncodings, setMarkProp } from './utils';\n\nconst interpolateConfigProperty: ChartPropertyDef = {\n    key: \"interpolate\", label: \"Curve\", type: \"discrete\", options: [\n        { value: undefined, label: \"Default (linear)\" },\n        { value: \"linear\", label: \"Linear\" },\n        { value: \"monotone\", label: \"Monotone (smooth)\" },\n        { value: \"step\", label: \"Step\" },\n        { value: \"step-before\", label: \"Step Before\" },\n        { value: \"step-after\", label: \"Step After\" },\n        { value: \"basis\", label: \"Basis (smooth)\" },\n        { value: \"cardinal\", label: \"Cardinal\" },\n        { value: \"catmull-rom\", label: \"Catmull-Rom\" },\n    ],\n};\n\nfunction applyInterpolate(vgSpec: any, config?: Record<string, any>): void {\n    if (!config?.interpolate) return;\n    vgSpec.mark = setMarkProp(vgSpec.mark, 'interpolate', config.interpolate);\n}\n\n/**\n * Detect whether color is continuous (quantitative/temporal) on a connected mark.\n *\n * In Vega-Lite, encoding `color` on a `line` mark groups data by the\n * color field.  With a continuous field each unique value becomes its own\n * group, producing isolated single-point segments.\n *\n * The idiomatic VL pattern: convert to a layered spec where the `line`\n * layer uses `detail` for series grouping (without color mapping) and an\n * overlaid `point` layer carries the quantitative color encoding.\n */\nfunction hasContinuousColor(resolvedEncodings: Record<string, any>): boolean {\n    const colorEnc = resolvedEncodings.color;\n    return !!(colorEnc?.field && (colorEnc.type === 'quantitative' || colorEnc.type === 'temporal'));\n}\n\n/**\n * Build a layered line + point spec for continuous color on line marks.\n *\n * Handles both single-series and multi-series cases:\n *\n *   Single-series (no `detail` / `opacity` nominal grouping):\n *     line layer  → plain connected path, neutral grey\n *     point layer → colored dots with quantitative color encoding\n *\n *   Multi-series (`detail` or nominal `opacity` encoding present):\n *     line layer  → connected paths grouped by `detail`/`opacity`, neutral grey\n *     point layer → colored dots with the quantitative color encoding\n *\n * The `detail` encoding is preserved on the line layer so that series\n * remain individually connected.  The quantitative `color` is only\n * applied to the point layer where grouping doesn't matter.\n */\nfunction buildContinuousColorLineLayers(\n    spec: any,\n    resolvedEncodings: Record<string, any>,\n    config?: Record<string, any>,\n    dataLength: number = 30,\n): void {\n    const colorEnc = { ...resolvedEncodings.color };\n\n    // Separate encodings: everything except color goes to both layers.\n    // The line layer may additionally get `detail` for series grouping.\n    const sharedEncodings: Record<string, any> = {};\n    for (const [ch, enc] of Object.entries(resolvedEncodings)) {\n        if (ch !== 'color') {\n            sharedEncodings[ch] = enc;\n        }\n    }\n\n    // Line layer: connected path, neutral color, no color encoding.\n    // If `detail` is present it groups lines without mapping to color.\n    const lineMark: any = { type: 'line', color: '#ccc' };\n    if (config?.interpolate) {\n        lineMark.interpolate = config.interpolate;\n    }\n\n    // Point layer: individual colored dots — size scales inversely with density\n    const pointSize = Math.round(Math.max(15, Math.min(60, 1200 / dataLength)));\n    const pointMark: any = { type: 'point', filled: true, size: pointSize };\n\n    spec.layer = [\n        { mark: lineMark, encoding: { ...sharedEncodings } },\n        { mark: pointMark, encoding: { ...sharedEncodings, color: colorEnc } },\n    ];\n\n    // Remove top-level mark — layered spec uses per-layer marks\n    delete spec.mark;\n    // Encodings live inside each layer, not at the top\n    spec.encoding = {};\n}\n\nexport const lineChartDef: ChartTemplateDef = {\n    chart: \"Line Chart\",\n    template: { mark: \"line\", encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"strokeDash\", \"detail\", \"opacity\", \"column\", \"row\"],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        if (hasContinuousColor(ctx.resolvedEncodings)) {\n            buildContinuousColorLineLayers(spec, ctx.resolvedEncodings, ctx.chartProperties, ctx.table.length);\n        } else {\n            defaultBuildEncodings(spec, ctx.resolvedEncodings);\n            applyInterpolate(spec, ctx.chartProperties);\n        }\n    },\n    properties: [interpolateConfigProperty],\n};\n\nexport const dottedLineChartDef: ChartTemplateDef = {\n    chart: \"Dotted Line Chart\",\n    template: { mark: { type: \"line\", point: true }, encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"detail\", \"column\", \"row\"],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: () => ({\n        paramOverrides: { continuousMarkCrossSection: { x: 100, y: 20, seriesCountAxis: 'auto' } },\n    }),\n    instantiate: (spec, ctx) => {\n        if (hasContinuousColor(ctx.resolvedEncodings)) {\n            buildContinuousColorLineLayers(spec, ctx.resolvedEncodings, ctx.chartProperties, ctx.table.length);\n        } else {\n            defaultBuildEncodings(spec, ctx.resolvedEncodings);\n            applyInterpolate(spec, ctx.chartProperties);\n        }\n    },\n    properties: [interpolateConfigProperty],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/lollipop.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\n\nexport const lollipopChartDef: ChartTemplateDef = {\n    chart: \"Lollipop Chart\",\n    template: {\n        encoding: {},\n        layer: [\n            { mark: { type: \"rule\", strokeWidth: 1.5 }, encoding: {} },\n            { mark: { type: \"circle\", size: 80 }, encoding: {} },\n        ],\n    },\n    channels: [\"x\", \"y\", \"color\", \"column\", \"row\"],\n    markCognitiveChannel: 'length',\n    instantiate: (spec, ctx) => {\n        const { color, column, row, ...positional } = ctx.resolvedEncodings;\n        for (const [ch, enc] of Object.entries(positional)) {\n            for (const layer of spec.layer) {\n                layer.encoding[ch] = { ...(layer.encoding[ch] || {}), ...enc };\n            }\n        }\n        if (color) {\n            spec.layer[1].encoding.color = { ...(spec.layer[1].encoding.color || {}), ...color };\n        }\n        if (!spec.encoding) spec.encoding = {};\n        if (column) spec.encoding.column = column;\n        if (row) spec.encoding.row = row;\n\n        // --- Lollipop-specific configuration ---\n        const table = ctx.table;\n        const config = ctx.chartProperties;\n\n        // Anchor rule from 0 on the measure axis\n        const xEnc = spec.layer[0]?.encoding?.x;\n        const yEnc = spec.layer[0]?.encoding?.y;\n        const xType = xEnc?.type;\n        const yType = yEnc?.type;\n\n        const isMeasure = (t: string | undefined) =>\n            t != null && t !== 'nominal' && t !== 'ordinal';\n\n        if (isMeasure(yType)) {\n            spec.layer[0].encoding.y2 = { datum: 0 };\n        } else if (isMeasure(xType)) {\n            spec.layer[0].encoding.x2 = { datum: 0 };\n        }\n\n        // Adaptive rule strokeWidth based on overlap\n        const discreteAxis = !isMeasure(xType) ? 'x' : !isMeasure(yType) ? 'y' : null;\n        const discreteField = discreteAxis === 'x' ? xEnc?.field : discreteAxis === 'y' ? yEnc?.field : null;\n        if (discreteField && table && table.length > 0) {\n            const counts: Record<string, number> = {};\n            for (const row of table) {\n                const key = String(row[discreteField] ?? '');\n                counts[key] = (counts[key] || 0) + 1;\n            }\n            const maxOverlap = Math.max(...Object.values(counts));\n            if (maxOverlap > 1) {\n                const baseStroke = 1.5;\n                const stroke = Math.max(0.3, baseStroke / Math.sqrt(maxOverlap));\n                spec.layer[0].mark = { ...spec.layer[0].mark, strokeWidth: stroke };\n            }\n        }\n\n        // Apply dot size from config\n        if (config?.dotSize) {\n            spec.layer[1].mark = { ...spec.layer[1].mark, size: config.dotSize };\n        }\n    },\n    properties: [\n        { key: \"dotSize\", label: \"Dot Size\", type: \"continuous\", min: 20, max: 300, step: 10, defaultValue: 80 },\n    ] as ChartPropertyDef[],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/map.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\n\nconst mapProjections = [\n    { value: \"mercator\", label: \"Mercator\" },\n    { value: \"equalEarth\", label: \"Equal Earth\" },\n    { value: \"orthographic\", label: \"Orthographic (Globe)\" },\n    { value: \"stereographic\", label: \"Stereographic\" },\n    { value: \"conicEqualArea\", label: \"Conic Equal Area\" },\n    { value: \"conicEquidistant\", label: \"Conic Equidistant\" },\n    { value: \"azimuthalEquidistant\", label: \"Azimuthal Equidistant\" },\n    { value: \"mollweide\", label: \"Mollweide\" },\n] as const;\n\nconst projectionCenterPresets: { label: string; center: [number, number] }[] = [\n    { label: \"World (Atlantic)\", center: [0, 0] },\n    { label: \"World (Pacific)\", center: [150, 0] },\n    { label: \"China\", center: [105, 35] },\n    { label: \"USA\", center: [-98, 39] },\n    { label: \"Europe\", center: [10, 50] },\n    { label: \"Japan\", center: [138, 36] },\n    { label: \"India\", center: [78, 22] },\n    { label: \"Brazil\", center: [-52, -14] },\n    { label: \"Australia\", center: [134, -25] },\n    { label: \"Russia\", center: [100, 60] },\n    { label: \"Africa\", center: [20, 0] },\n    { label: \"Middle East\", center: [45, 28] },\n    { label: \"Southeast Asia\", center: [115, 5] },\n    { label: \"South America\", center: [-60, -15] },\n    { label: \"North America\", center: [-100, 45] },\n    { label: \"UK\", center: [-2, 54] },\n    { label: \"Germany\", center: [10, 51] },\n    { label: \"France\", center: [2, 47] },\n    { label: \"Korea\", center: [128, 36] },\n];\n\nexport const usMapDef: ChartTemplateDef = {\n    chart: \"US Map\",\n    template: {\n        width: 500,\n        height: 300,\n        layer: [\n            {\n                data: {\n                    url: \"https://vega.github.io/vega-lite/data/us-10m.json\",\n                    format: { type: \"topojson\", feature: \"states\" },\n                },\n                projection: { type: \"albersUsa\" },\n                mark: { type: \"geoshape\", fill: \"lightgray\", stroke: \"white\" },\n            },\n            {\n                projection: { type: \"albersUsa\" },\n                mark: \"circle\",\n                encoding: { longitude: {}, latitude: {}, size: {}, color: {} },\n            },\n        ],\n    },\n    channels: [\"longitude\", \"latitude\", \"color\", \"size\"],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        if (!spec.layer[1].encoding) spec.layer[1].encoding = {};\n        for (const [ch, enc] of Object.entries(ctx.resolvedEncodings)) {\n            spec.layer[1].encoding[ch] = { ...(spec.layer[1].encoding[ch] || {}), ...enc };\n        }\n    },\n    properties: [] as ChartPropertyDef[],\n};\n\nexport const worldMapDef: ChartTemplateDef = {\n    chart: \"World Map\",\n    template: {\n        width: 600,\n        height: 350,\n        layer: [\n            {\n                data: {\n                    url: \"https://vega.github.io/vega-lite/data/world-110m.json\",\n                    format: { type: \"topojson\", feature: \"countries\" },\n                },\n                projection: { type: \"equalEarth\" },\n                mark: { type: \"geoshape\", fill: \"lightgray\", stroke: \"white\" },\n            },\n            {\n                projection: { type: \"equalEarth\" },\n                mark: \"circle\",\n                encoding: { longitude: {}, latitude: {}, size: {}, color: {}, opacity: {} },\n            },\n        ],\n    },\n    channels: [\"longitude\", \"latitude\", \"color\", \"size\", \"opacity\"],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        if (!spec.layer[1].encoding) spec.layer[1].encoding = {};\n        for (const [ch, enc] of Object.entries(ctx.resolvedEncodings)) {\n            spec.layer[1].encoding[ch] = { ...(spec.layer[1].encoding[ch] || {}), ...enc };\n        }\n\n        const config = ctx.chartProperties;\n        if (config) {\n            const projection = config.projection;\n            const projectionCenter = config.projectionCenter;\n            const applyProjection = (obj: any) => {\n                if (obj?.projection) {\n                    if (projection && projection !== 'default') {\n                        obj.projection.type = projection;\n                    }\n                    if (projectionCenter && obj.projection.type !== 'albersUsa') {\n                        obj.projection.rotate = [-projectionCenter[0], -projectionCenter[1], 0];\n                    }\n                }\n            };\n            if (spec.layer && Array.isArray(spec.layer)) {\n                for (const layer of spec.layer) applyProjection(layer);\n            }\n            applyProjection(spec);\n        }\n    },\n    properties: [\n        {\n            key: \"projection\",\n            label: \"Projection\",\n            type: \"discrete\",\n            options: [\n                { value: \"default\", label: \"Default\" },\n                ...mapProjections.map(p => ({ value: p.value, label: p.label })),\n            ],\n            defaultValue: \"default\",\n        },\n        {\n            key: \"projectionCenter\",\n            label: \"Center\",\n            type: \"discrete\",\n            options: [\n                { value: undefined, label: \"Default\" },\n                ...projectionCenterPresets.map(p => ({\n                    value: p.center,\n                    label: `${p.label} [${p.center[0]}, ${p.center[1]}]`,\n                })),\n            ],\n            defaultValue: undefined,\n        },\n    ] as ChartPropertyDef[],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/pie.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { computeCircumferencePressure, computeEffectiveBarCount } from '../../core/decisions';\nimport { setMarkProp } from './utils';\n\nexport const pieChartDef: ChartTemplateDef = {\n    chart: \"Pie Chart\",\n    template: { mark: \"arc\", encoding: {} },\n    channels: [\"size\", \"color\", \"column\", \"row\"],\n    markCognitiveChannel: 'area',\n    instantiate: (spec, ctx) => {\n        // Remap abstract channels to VL channels:\n        //   \"size\" → VL \"theta\" (angular extent of each slice)\n        if (!spec.encoding) spec.encoding = {};\n        for (const [ch, enc] of Object.entries(ctx.resolvedEncodings)) {\n            if (ch === 'size') {\n                // Strip the sqrt/range scale that the assembler adds for generic\n                // \"size\" channels — theta handles its own proportional scaling.\n                const { scale: _scale, ...thetaEnc } = enc;\n                spec.encoding.theta = thetaEnc;\n            } else {\n                spec.encoding[ch] = enc;\n            }\n        }\n\n        // Fallback: when the user only maps color (no size/theta), use count\n        // so every colour group gets a proportional slice.\n        if (!spec.encoding.theta) {\n            spec.encoding.theta = { aggregate: 'count', type: 'quantitative' };\n        }\n\n        const config = ctx.chartProperties;\n        if (config && config.innerRadius > 0) {\n            spec.mark = setMarkProp(spec.mark, 'innerRadius', config.innerRadius);\n        }\n\n        // ── Circumference-pressure sizing (spring model) ──────────────\n        // Compute effective bar count from slice values to determine\n        // whether the pie needs to grow beyond the base canvas.\n        const thetaField = spec.encoding.theta?.field;\n        const colorField = spec.encoding.color?.field;\n\n        let effectiveCount: number;\n\n        if (thetaField && colorField) {\n            // Aggregate values per color category\n            const agg = new Map<string, number>();\n            for (const row of ctx.table) {\n                const cat = String(row[colorField] ?? '');\n                const val = Number(row[thetaField]) || 0;\n                agg.set(cat, (agg.get(cat) ?? 0) + val);\n            }\n            effectiveCount = computeEffectiveBarCount([...agg.values()]);\n        } else if (colorField) {\n            // Count-based: each category gets equal slice\n            const cats = new Set(ctx.table.map((r: any) => String(r[colorField] ?? '')));\n            effectiveCount = cats.size;\n        } else {\n            effectiveCount = ctx.table.length;\n        }\n\n        const { radius, canvasW, canvasH } = computeCircumferencePressure(\n            effectiveCount, ctx.canvasSize, {\n                minArcPx: 45,\n                minRadius: 60,\n                maxStretch: ctx.assembleOptions?.maxStretch,\n                margin: 50,   // room for labels around pie\n            });\n\n        // Set explicit width/height — overrides config.view defaults\n        spec.width = canvasW;\n        spec.height = canvasH;\n    },\n    properties: [\n        { key: \"innerRadius\", label: \"Donut\", type: \"continuous\", min: 0, max: 100, step: 5, defaultValue: 0 },\n    ] as ChartPropertyDef[],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/radar.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\n\n/**\n * Radar / Spider Chart\n *\n * Data model (long format):\n *   - x (nominal): the metric / axis name\n *   - y (quantitative): the value for that metric\n *   - color (nominal): the entity / group\n *\n * Supports column/row faceting.\n */\n\n// ---------------------------------------------------------------------------\n// Helper: round up to a \"nice\" ceiling for axis max\n// ---------------------------------------------------------------------------\nfunction niceMax(v: number): number {\n    if (v <= 0) return 1;\n    const pow = Math.pow(10, Math.floor(Math.log10(v)));\n    const mantissa = v / pow;\n    const nice = mantissa <= 1 ? 1\n        : mantissa <= 2 ? 2\n        : mantissa <= 2.5 ? 2.5\n        : mantissa <= 5 ? 5\n        : 10;\n    return nice * pow;\n}\n\n// ---------------------------------------------------------------------------\n// Helper: build VL layers for a single radar from long-format rows\n// ---------------------------------------------------------------------------\nfunction buildRadarLayers(\n    rows: any[],\n    axisField: string,\n    valueField: string,\n    groupField: string | undefined,\n    opts: { filled: boolean; fillOpacity: number; strokeWidth: number; domainPad: number },\n): any[] {\n    const axes: string[] = [];\n    const axisSet = new Set<string>();\n    for (const row of rows) {\n        const a = String(row[axisField]);\n        if (!axisSet.has(a)) { axisSet.add(a); axes.push(a); }\n    }\n    if (axes.length < 2) return [];\n\n    const groups: string[] = [];\n    if (groupField) {\n        const groupSet = new Set<string>();\n        for (const row of rows) {\n            const g = String(row[groupField]);\n            if (!groupSet.has(g)) { groupSet.add(g); groups.push(g); }\n        }\n    } else {\n        groups.push(\"_all\");\n    }\n\n    // Normalise each axis to 0-1\n    const axisMax: Record<string, number> = {};\n    for (const axis of axes) {\n        const vals = rows\n            .filter(r => String(r[axisField]) === axis)\n            .map(r => Number(r[valueField]))\n            .filter(v => isFinite(v));\n        const mx = vals.length > 0 ? Math.max(...vals) : 1;\n        axisMax[axis] = niceMax(mx);\n    }\n\n    // Aggregate: average per (group, axis)\n    const keyMap = new Map<string, { sum: number; rawSum: number; count: number }>();\n    for (const row of rows) {\n        const grp = groupField ? String(row[groupField]) : \"_all\";\n        const axis = String(row[axisField]);\n        const raw = Number(row[valueField]) || 0;\n        const mx = axisMax[axis];\n        const norm = mx > 0 ? raw / mx : 0;\n        const k = `${grp}|||${axis}`;\n        if (!keyMap.has(k)) keyMap.set(k, { sum: 0, rawSum: 0, count: 0 });\n        const entry = keyMap.get(k)!;\n        entry.sum += norm;\n        entry.rawSum += raw;\n        entry.count += 1;\n    }\n\n    // Compute polar coordinates\n    const angleStep = 360 / axes.length;\n    const finalData: any[] = [];\n    for (const [k, v] of keyMap.entries()) {\n        const [grp, axis] = k.split('|||');\n        const axisIndex = axes.indexOf(axis);\n        const angle = axisIndex * angleStep;\n        const normVal = v.sum / v.count;\n        const rawVal = Math.round((v.rawSum / v.count) * 100) / 100;\n        const rad = (angle * Math.PI) / 180;\n        finalData.push({\n            __group: grp,\n            __axis: axis,\n            __value: normVal,\n            __raw: rawVal,\n            __angle: angle,\n            __x: normVal * Math.sin(rad),\n            __y: -normVal * Math.cos(rad),\n        });\n    }\n\n    // Grid data (spokes + concentric rings)\n    const gridData: any[] = [];\n    for (let idx = 0; idx < axes.length; idx++) {\n        const ang = (idx * angleStep * Math.PI) / 180;\n        gridData.push({\n            __type: \"spoke\",\n            __x: 0, __y: 0,\n            __x2: Math.sin(ang),\n            __y2: -Math.cos(ang),\n        });\n    }\n    for (const level of [0.25, 0.5, 0.75, 1.0]) {\n        const points: any[] = [];\n        for (let i = 0; i <= axes.length; i++) {\n            const ang = ((i % axes.length) * angleStep * Math.PI) / 180;\n            points.push({ __x: level * Math.sin(ang), __y: -level * Math.cos(ang) });\n        }\n        for (let i = 0; i < points.length - 1; i++) {\n            gridData.push({\n                __type: \"ring\", __level: level,\n                __x: points[i].__x, __y: points[i].__y,\n                __x2: points[i + 1].__x, __y2: points[i + 1].__y,\n            });\n        }\n    }\n\n    // Axis labels\n    const labelData = axes.map((axis, i) => {\n        const angDeg = i * angleStep;\n        const ang = (angDeg * Math.PI) / 180;\n        const r = 1.15;\n        const mx = axisMax[axis];\n        const maxStr = mx % 1 === 0 ? String(mx) : mx.toFixed(1);\n\n        const sinA = Math.sin(ang);\n        const cosA = -Math.cos(ang);\n        let align: string;\n        let baseline: string;\n        let dx = 0;\n        let dy = 0;\n\n        if (Math.abs(sinA) < 0.15) {\n            align = 'center';\n            baseline = cosA < 0 ? 'bottom' : 'top';\n            dy = cosA < 0 ? -4 : 4;\n        } else if (sinA > 0) {\n            align = 'left';\n            baseline = Math.abs(cosA) < 0.3 ? 'middle' : (cosA < 0 ? 'bottom' : 'top');\n            dx = 4;\n        } else {\n            align = 'right';\n            baseline = Math.abs(cosA) < 0.3 ? 'middle' : (cosA < 0 ? 'bottom' : 'top');\n            dx = -4;\n        }\n\n        return {\n            __label: [axis, `(${maxStr})`],\n            __x: r * Math.sin(ang), __y: -r * Math.cos(ang),\n            __align: align, __baseline: baseline, __dx: dx, __dy: dy,\n        };\n    });\n\n    const { filled, fillOpacity, strokeWidth, domainPad } = opts;\n    const layers: any[] = [];\n\n    // Spokes\n    layers.push({\n        data: { values: gridData.filter(d => d.__type === \"spoke\") },\n        mark: { type: \"rule\", stroke: \"#ddd\", strokeWidth: 0.8 },\n        encoding: {\n            x: { field: \"__x\", type: \"quantitative\", scale: { domain: [-domainPad, domainPad] }, axis: null },\n            y: { field: \"__y\", type: \"quantitative\", scale: { domain: [-domainPad, domainPad] }, axis: null },\n            x2: { field: \"__x2\" }, y2: { field: \"__y2\" },\n        },\n    });\n\n    // Rings\n    layers.push({\n        data: { values: gridData.filter(d => d.__type === \"ring\") },\n        mark: { type: \"rule\", stroke: \"#e0e0e0\", strokeWidth: 0.6 },\n        encoding: {\n            x: { field: \"__x\", type: \"quantitative\", axis: null },\n            y: { field: \"__y\", type: \"quantitative\", axis: null },\n            x2: { field: \"__x2\" }, y2: { field: \"__y2\" },\n        },\n    });\n\n    // Labels\n    for (const lbl of labelData) {\n        const lines: string[] = lbl.__label;\n        layers.push({\n            data: { values: [lbl] },\n            mark: {\n                type: \"text\", fontSize: 10, fill: \"#555\",\n                align: lbl.__align, baseline: lbl.__baseline,\n                dx: lbl.__dx, dy: lbl.__dy,\n                limit: 120, lineHeight: 13,\n            },\n            encoding: {\n                x: { field: \"__x\", type: \"quantitative\", axis: null },\n                y: { field: \"__y\", type: \"quantitative\", axis: null },\n                text: { value: lines },\n            },\n        });\n    }\n\n    // Data polygon\n    const lineLayer: any = {\n        data: { values: finalData },\n        mark: {\n            type: \"line\", interpolate: \"linear-closed\", strokeWidth, point: false,\n            ...(filled ? { fillOpacity } : {}),\n        },\n        encoding: {\n            x: { field: \"__x\", type: \"quantitative\", axis: null },\n            y: { field: \"__y\", type: \"quantitative\", axis: null },\n            order: { field: \"__angle\", type: \"quantitative\" },\n            tooltip: [\n                { field: \"__axis\", type: \"nominal\", title: axisField },\n                { field: \"__raw\", type: \"quantitative\", title: valueField },\n            ],\n        },\n    };\n    if (groups.length > 1 && groupField) {\n        lineLayer.encoding.stroke = { field: \"__group\", type: \"nominal\", title: groupField };\n        if (filled) {\n            lineLayer.encoding.fill = { field: \"__group\", type: \"nominal\", title: groupField, legend: null };\n        }\n    } else if (filled) {\n        lineLayer.mark.fill = \"#4c78a8\";\n    }\n    layers.push(lineLayer);\n\n    // Data points\n    const pointLayer: any = {\n        data: { values: finalData },\n        mark: { type: \"point\", filled: true, size: 25 },\n        encoding: {\n            x: { field: \"__x\", type: \"quantitative\", axis: null },\n            y: { field: \"__y\", type: \"quantitative\", axis: null },\n            tooltip: [\n                ...(groupField ? [{ field: \"__group\", type: \"nominal\", title: groupField }] : []),\n                { field: \"__axis\", type: \"nominal\", title: axisField },\n                { field: \"__raw\", type: \"quantitative\", title: valueField },\n            ],\n        },\n    };\n    if (groups.length > 1 && groupField) {\n        pointLayer.encoding.color = { field: \"__group\", type: \"nominal\", title: groupField, legend: null };\n    }\n    layers.push(pointLayer);\n\n    return layers;\n}\n\n// ---------------------------------------------------------------------------\n// Template definition\n// ---------------------------------------------------------------------------\nexport const radarChartDef: ChartTemplateDef = {\n    chart: \"Radar Chart\",\n    template: {\n        description: \"Radar / Spider chart\",\n        mark: \"point\",\n        encoding: {},\n    },\n    channels: [\"x\", \"y\", \"color\", \"column\", \"row\"],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        const axisField: string | undefined = ctx.resolvedEncodings.x?.field;\n        const valueField: string | undefined = ctx.resolvedEncodings.y?.field;\n        const groupField: string | undefined = ctx.resolvedEncodings.color?.field;\n        const columnField: string | undefined = ctx.resolvedEncodings.column?.field;\n        const rowField: string | undefined = ctx.resolvedEncodings.row?.field;\n\n        const table = ctx.table;\n        const canvasSize = ctx.canvasSize;\n        const config = ctx.chartProperties;\n\n        const filled = config?.filled ?? true;\n        const fillOpacity = config?.fillOpacity ?? 0.15;\n        const strokeWidth = config?.strokeWidth ?? 1.5;\n\n        if (!table || table.length === 0 || !axisField || !valueField) {\n            spec.mark = \"point\";\n            return;\n        }\n\n        const size = Math.min(canvasSize?.width || 400, canvasSize?.height || 400);\n        const layerOpts = { filled, fillOpacity, strokeWidth, domainPad: 1.18 };\n\n        // ---- No faceting ----\n        if (!columnField && !rowField) {\n            const layers = buildRadarLayers(table, axisField, valueField, groupField, layerOpts);\n            if (layers.length === 0) { spec.mark = \"point\"; return; }\n\n            const finalSpec: any = {\n                width: size, height: size, layer: layers,\n                config: { view: { stroke: null } },\n            };\n            for (const key of Object.keys(spec)) delete spec[key];\n            Object.assign(spec, finalSpec);\n            return;\n        }\n\n        // ---- Faceting ----\n        const colGroups: string[] = columnField\n            ? [...new Set(table.map(r => String(r[columnField])))] as string[]\n            : [\"_all\"];\n        const rowGroups: string[] = rowField\n            ? [...new Set(table.map(r => String(r[rowField])))] as string[]\n            : [\"_all\"];\n\n        const minSubplot = 200;\n        const subplotSize = Math.max(minSubplot, size);\n\n        const buildSubplot = (rows: any[], title?: string) => {\n            const layers = buildRadarLayers(rows, axisField, valueField, groupField, layerOpts);\n            if (layers.length === 0) return null;\n            return {\n                width: subplotSize, height: subplotSize,\n                layer: layers,\n                title: title || undefined,\n            };\n        };\n\n        let finalSpec: any;\n        const concatSpacing = 5;\n\n        if (rowField && columnField) {\n            const vconcat: any[] = [];\n            for (const rg of rowGroups) {\n                const hconcat: any[] = [];\n                for (const cg of colGroups) {\n                    const subset = table.filter(r => String(r[rowField]) === rg && String(r[columnField]) === cg);\n                    const s = buildSubplot(subset, `${cg}`);\n                    if (s) hconcat.push(s);\n                }\n                if (hconcat.length > 0) {\n                    vconcat.push({ hconcat, spacing: concatSpacing, title: rg });\n                }\n            }\n            finalSpec = { vconcat, spacing: concatSpacing, config: { view: { stroke: null } } };\n        } else if (columnField) {\n            const hconcat: any[] = [];\n            for (const cg of colGroups) {\n                const subset = table.filter(r => String(r[columnField]) === cg);\n                const s = buildSubplot(subset, cg);\n                if (s) hconcat.push(s);\n            }\n            finalSpec = { hconcat, spacing: concatSpacing, config: { view: { stroke: null } } };\n        } else {\n            const vconcat: any[] = [];\n            for (const rg of rowGroups) {\n                const subset = table.filter(r => String(r[rowField!]) === rg);\n                const s = buildSubplot(subset, rg);\n                if (s) vconcat.push(s);\n            }\n            finalSpec = { vconcat, spacing: concatSpacing, config: { view: { stroke: null } } };\n        }\n\n        for (const key of Object.keys(spec)) delete spec[key];\n        Object.assign(spec, finalSpec);\n    },\n    properties: [\n        { key: \"filled\", label: \"Filled\", type: \"binary\", defaultValue: true },\n        { key: \"fillOpacity\", label: \"Fill Opacity\", type: \"continuous\", min: 0, max: 0.5, step: 0.05, defaultValue: 0.15 },\n        { key: \"strokeWidth\", label: \"Line Width\", type: \"continuous\", min: 0.5, max: 4, step: 0.5, defaultValue: 1.5 },\n    ] as ChartPropertyDef[],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/rose.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Rose Chart (Nightingale / Coxcomb chart) template.\n *\n * A rose chart is essentially a bar chart on a polar axis:\n *   - x (categorical)  → theta (angular position of each category)\n *   - y (quantitative)  → radius (bar height / sector radius)\n *   - color             → stacking within each angular slice (like stacked bar)\n *\n * Implementation note: the template uses a flat (non-layered) spec as its\n * base.  For non-faceted charts the instantiate function dynamically adds\n * a text-label layer.  Faceted charts stay flat and use encoding.facet,\n * because the restructureFacets pipeline path (facet + spec.layer) does\n * not render arc marks correctly.\n */\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport { setMarkProp } from './utils';\n\nexport const roseChartDef: ChartTemplateDef = {\n    chart: \"Rose Chart\",\n    template: {\n        mark: {\n            type: \"arc\",\n            stroke: \"white\",\n            padAngle: 0.02,\n        },\n        encoding: {},\n    },\n    channels: [\"x\", \"y\", \"color\", \"column\", \"row\"],\n    markCognitiveChannel: 'area',\n\n    // Polar charts have no positional axes — declare no banded axes\n    // so the layout pipeline won't produce step-based sizing.\n    declareLayoutMode: () => ({}),\n\n    instantiate: (spec, ctx) => {\n        if (!spec.encoding) spec.encoding = {};\n\n        const { x, y, color, column, row, ...rest } = ctx.resolvedEncodings;\n        const isFaceted = !!(column || row);\n\n        // ── theta encoding (shared) ──\n        if (x) {\n            const thetaEnc: any = { ...x };\n            if (thetaEnc.type === 'quantitative' || thetaEnc.type === 'temporal') {\n                thetaEnc.type = 'nominal';\n            }\n            // Remove sort references to positional channels (x/y) — they are\n            // remapped to theta/radius and Vega-Lite can't resolve \"-y\" etc.\n            if (typeof thetaEnc.sort === 'string' && /^-?[xy]$/.test(thetaEnc.sort)) {\n                delete thetaEnc.sort;\n            }\n            delete thetaEnc.scale;\n            thetaEnc.stack = true;\n\n            // Rotate so the first slice aligns to 12 o'clock.\n            // 'center' (default): wedge center at top; 'left': wedge left edge at top.\n            const n = new Set(ctx.table.map((r: any) => r[x.field])).size;\n            if (n > 0) {\n                const alignment = ctx.chartProperties?.alignment ?? 'left';\n                if (alignment === 'center') {\n                    const halfSlice = Math.PI / n;\n                    thetaEnc.scale = { range: [-halfSlice, 2 * Math.PI - halfSlice] };\n                }\n                // 'left': no range offset needed — default [0, 2π] puts left edge at top\n            }\n\n            spec.encoding.theta = thetaEnc;\n        }\n\n        // ── Build radius encoding ──\n        let radiusEnc: any | undefined;\n        let radiusField: string | undefined;\n        if (y) {\n            radiusEnc = { ...y };\n            if (typeof radiusEnc.sort === 'string' && /^-?[xy]$/.test(radiusEnc.sort)) {\n                delete radiusEnc.sort;\n            }\n            radiusEnc.scale = { type: 'sqrt' };\n            if (color) {\n                radiusEnc.stack = true;\n            }\n            radiusField = radiusEnc.field;\n        }\n\n        // ── Build color encoding ──\n        let colorEnc: any | undefined;\n        if (color) {\n            colorEnc = color;\n        } else if (x) {\n            // No color channel: color by category (like a pie chart)\n            colorEnc = { field: x.field, type: x.type || 'nominal' };\n            if (Array.isArray(x.sort)) {\n                colorEnc.sort = x.sort;\n            }\n        }\n\n        if (isFaceted) {\n            // ── FACETED: keep flat spec with encoding.facet ──\n            // The VL facet + spec.layer restructuring doesn't render arc\n            // marks correctly.  Using encoding.facet inline on a unit\n            // spec (single mark) works reliably.\n            if (radiusEnc) spec.encoding.radius = radiusEnc;\n            if (colorEnc)  spec.encoding.color  = colorEnc;\n\n            if (column && !row) {\n                const facetEnc: any = { ...column };\n                const facetCount = new Set(ctx.table.map((r: any) => r[column.field])).size;\n                facetEnc.columns = facetCount <= 6\n                    ? facetCount\n                    : Math.ceil(Math.sqrt(facetCount));\n                spec.encoding.facet = facetEnc;\n            } else if (row && !column) {\n                spec.encoding.row = row;\n            } else {\n                spec.encoding.column = column;\n                spec.encoding.row = row;\n            }\n        } else {\n            // ── NON-FACETED: convert to layered spec for text labels ──\n            const arcMark = spec.mark;\n            spec.layer = [\n                { mark: arcMark, encoding: {} as any },\n                {\n                    mark: { type: \"text\", radiusOffset: 15, fontSize: 11 },\n                    encoding: {} as any,\n                },\n            ];\n            delete spec.mark;\n\n            // radius → arc layer only\n            if (radiusEnc) {\n                spec.layer[0].encoding.radius = radiusEnc;\n            }\n\n            // color → arc layer only (so text layer isn't split by color)\n            if (colorEnc) {\n                spec.layer[0].encoding.color = colorEnc;\n            }\n\n            // text label layer: one label per category\n            if (x && spec.layer[1]) {\n                const textLayer = spec.layer[1];\n                textLayer.encoding.text = { field: x.field, type: x.type || 'nominal' };\n\n                if (radiusField) {\n                    // Aggregate: collapse to one row per category so labels\n                    // aren't duplicated per color segment.\n                    textLayer.transform = [\n                        {\n                            aggregate: [{ op: 'sum', field: radiusField, as: radiusField }],\n                            groupby: [x.field],\n                        },\n                    ];\n                    textLayer.encoding.radius = {\n                        field: radiusField,\n                        type: 'quantitative',\n                        scale: { type: 'sqrt' },\n                    };\n                }\n            }\n        }\n\n        // ── Fallbacks ──\n        const hasRadius = spec.encoding.radius || spec.layer?.[0]?.encoding?.radius;\n        if (!hasRadius) {\n            const fallback = { aggregate: 'count', type: 'quantitative', scale: { type: 'sqrt' } };\n            if (spec.layer) {\n                spec.layer[0].encoding.radius = fallback;\n            } else {\n                spec.encoding.radius = fallback;\n            }\n        }\n        if (!spec.encoding.theta) {\n            spec.encoding.theta = { aggregate: 'count', type: 'quantitative' };\n        }\n\n        // ── Pass-through channels ──\n        const mappedChannels = new Set(['x', 'y', 'color', 'column', 'row', 'radius', 'size', 'theta', 'facet']);\n        for (const [ch, enc] of Object.entries(rest)) {\n            if (mappedChannels.has(ch)) continue;\n            if (!enc.field && !enc.aggregate) continue;\n            spec.encoding[ch] = enc;\n        }\n\n        // ── Sizing: square aspect ratio ──\n        // Use subplot dimensions (which account for faceting).\n        const subW = ctx.layout.subplotWidth ?? ctx.canvasSize.width;\n        const subH = ctx.layout.subplotHeight ?? ctx.canvasSize.height;\n        const size = Math.min(subW, subH);\n        spec.width = size;\n        spec.height = size;\n\n        // ── Chart properties ──\n        const config = ctx.chartProperties;\n        if (config) {\n            const markTarget = spec.layer ? spec.layer[0] : spec;\n            if (config.innerRadius > 0) {\n                markTarget.mark = setMarkProp(markTarget.mark, 'innerRadius', config.innerRadius);\n            }\n            if (config.padAngle > 0) {\n                markTarget.mark = setMarkProp(markTarget.mark, 'padAngle', config.padAngle);\n            }\n        }\n    },\n\n    properties: [\n        { key: \"innerRadius\", label: \"Inner Radius\", type: \"continuous\", min: 0, max: 100, step: 5, defaultValue: 0 },\n        { key: \"padAngle\", label: \"Gap\", type: \"continuous\", min: 0, max: 0.1, step: 0.005, defaultValue: 0 },\n        {\n            key: 'alignment', label: 'Alignment', type: 'discrete', options: [\n                { value: 'left', label: 'Left (default)' },\n                { value: 'center', label: 'Center' },\n            ],\n        },\n    ] as ChartPropertyDef[],\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/scatter.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\nimport {\n    defaultBuildEncodings, applyPointSizeScaling, setMarkProp,\n    detectBandedAxisForceDiscrete,\n} from './utils';\n\nexport const scatterPlotDef: ChartTemplateDef = {\n    chart: \"Scatter Plot\",\n    template: { mark: \"circle\", encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"size\", \"opacity\", \"column\", \"row\"],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        defaultBuildEncodings(spec, ctx.resolvedEncodings);\n        applyPointSizeScaling(spec, ctx.table, ctx.canvasSize?.width, ctx.canvasSize?.height);\n        const config = ctx.chartProperties;\n        if (config?.opacity !== undefined && config.opacity < 1) {\n            spec.mark = setMarkProp(spec.mark, 'opacity', config.opacity);\n        }\n    },\n    properties: [\n        { key: \"opacity\", label: \"Opacity\", type: \"continuous\", min: 0.1, max: 1, step: 0.05, defaultValue: 1 },\n    ] as ChartPropertyDef[],\n};\n\nexport const regressionDef: ChartTemplateDef = {\n    chart: \"Regression\",\n    template: {\n        layer: [\n            {\n                mark: \"circle\",\n                encoding: { x: {}, y: {}, color: {}, size: {} },\n            },\n            {\n                mark: { type: \"line\", color: \"red\" },\n                transform: [{ regression: \"field1\", on: \"field2\", group: \"field3\" }],\n                encoding: { x: {}, y: {} },\n            },\n        ],\n    },\n    channels: [\"x\", \"y\", \"size\", \"color\", \"column\", \"row\"],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        const { x, y, color, size, column, row } = ctx.resolvedEncodings;\n        const config = ctx.chartProperties;\n        // x & y → both layers + transform field names\n        if (x) {\n            spec.layer[0].encoding.x = { ...spec.layer[0].encoding.x, ...x };\n            spec.layer[1].encoding.x = { ...spec.layer[1].encoding.x, ...x };\n            if (x.field) spec.layer[1].transform[0].on = x.field;\n        }\n        if (y) {\n            spec.layer[0].encoding.y = { ...spec.layer[0].encoding.y, ...y };\n            spec.layer[1].encoding.y = { ...spec.layer[1].encoding.y, ...y };\n            if (y.field) spec.layer[1].transform[0].regression = y.field;\n        }\n        // Regression method (default: linear)\n        const method = config?.regressionMethod;\n        if (method && method !== 'linear') {\n            spec.layer[1].transform[0].method = method;\n            // For polynomial, allow configurable order\n            if (method === 'poly') {\n                const order = config?.polyOrder ?? 3;\n                spec.layer[1].transform[0].order = order;\n            }\n        }\n        // color → scatter layer always; if present, also group regression by color field\n        if (color) {\n            spec.layer[0].encoding.color = { ...spec.layer[0].encoding.color, ...color };\n            if (color.field) {\n                // Group regression by color field so each class gets its own trend line\n                spec.layer[1].transform[0].groupby = [color.field];\n                // Pass color encoding to regression layer so lines match scatter colors\n                spec.layer[1].encoding.color = { ...color };\n                // Remove the hardcoded red so Vega-Lite uses the shared color scale\n                spec.layer[1].mark = { type: \"line\" };\n            }\n        }\n        if (size) spec.layer[0].encoding.size = { ...spec.layer[0].encoding.size, ...size };\n        // facets → top-level encoding\n        if (!spec.encoding) spec.encoding = {};\n        if (column) spec.encoding.column = column;\n        if (row) spec.encoding.row = row;\n    },\n    properties: [\n        {\n            key: \"regressionMethod\", label: \"Method\", type: \"discrete\",\n            options: [\n                { value: \"linear\", label: \"Linear\" },\n                { value: \"log\",    label: \"Logarithmic\" },\n                { value: \"exp\",    label: \"Exponential\" },\n                { value: \"pow\",    label: \"Power\" },\n                { value: \"quad\",   label: \"Quadratic\" },\n                { value: \"poly\",   label: \"Polynomial\" },\n            ],\n            defaultValue: \"linear\",\n        },\n        {\n            key: \"polyOrder\", label: \"Poly Order\", type: \"continuous\",\n            min: 2, max: 10, step: 1, defaultValue: 3,\n        },\n    ] as ChartPropertyDef[],\n};\n\nexport const rangedDotPlotDef: ChartTemplateDef = {\n    chart: \"Ranged Dot Plot\",\n    template: {\n        encoding: {},\n        layer: [\n            { mark: \"line\", encoding: { detail: {} } },\n            { mark: { type: \"point\", filled: true }, encoding: { color: {} } },\n        ],\n    },\n    channels: [\"x\", \"y\", \"color\"],\n    markCognitiveChannel: 'position',\n    instantiate: (spec, ctx) => {\n        const { color, ...rest } = ctx.resolvedEncodings;\n        if (!spec.encoding) spec.encoding = {};\n        for (const [ch, enc] of Object.entries(rest)) {\n            spec.encoding[ch] = { ...(spec.encoding[ch] || {}), ...enc };\n        }\n        if (color) {\n            spec.layer[1].encoding.color = { ...(spec.layer[1].encoding.color || {}), ...color };\n        }\n\n        // Copy nominal axis into detail encoding for line layer\n        if (spec.encoding.y?.type === \"nominal\") {\n            spec.layer[0].encoding.detail = JSON.parse(JSON.stringify(spec.encoding.y));\n        } else if (spec.encoding.x?.type === \"nominal\") {\n            spec.layer[0].encoding.detail = JSON.parse(JSON.stringify(spec.encoding.x));\n        }\n    },\n};\n\nexport const boxplotDef: ChartTemplateDef = {\n    chart: \"Boxplot\",\n    template: { mark: \"boxplot\", encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"opacity\", \"column\", \"row\"],\n    markCognitiveChannel: 'position',\n    declareLayoutMode: (cs, table) => {\n        if (!cs.x?.field || !cs.y?.field) return {};\n        const result = detectBandedAxisForceDiscrete(cs, table, { preferAxis: 'x' });\n        if (!result) return {};\n        return {\n            axisFlags: { [result.axis]: { banded: true } },\n            resolvedTypes: result.resolvedTypes,\n        };\n    },\n    instantiate: (spec, ctx) => {\n        defaultBuildEncodings(spec, ctx.resolvedEncodings);\n\n        // Scale box width to the step size of the discrete axis\n        const layout = ctx.layout;\n        if (layout.xNominalCount > 0 || layout.yNominalCount > 0) {\n            const boxStep = layout.xNominalCount > 0 ? layout.xStep : layout.yStep;\n            const boxSize = Math.max(4, Math.round(boxStep * 0.7));\n            spec.mark = setMarkProp(spec.mark, 'size', boxSize);\n        }\n    },\n};\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/utils.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Shared helper functions for chart template hooks (v2 pipeline).\n * Pure logic — no UI dependencies.\n */\n\nimport type { ChannelSemantics, InstantiateContext } from '../../core/types';\n\n// ---------------------------------------------------------------------------\n// Discrete-dimension helpers\n// ---------------------------------------------------------------------------\n\nconst isDiscrete = (type: string | undefined) => type === \"nominal\" || type === \"ordinal\";\n\n/**\n * Check whether a numeric field's values are equally strided (uniform spacing).\n */\nexport function isEquallyStrided(field: string, table: any[]): boolean {\n    const vals = [...new Set(table.map(r => r[field]).filter((v: any) => v != null && typeof v === 'number'))];\n    if (vals.length <= 1) return true;\n    vals.sort((a, b) => a - b);\n\n    const diffs = [];\n    for (let i = 1; i < vals.length; i++) {\n        diffs.push(vals[i] - vals[i - 1]);\n    }\n    const medianDiff = diffs.slice().sort((a, b) => a - b)[Math.floor(diffs.length / 2)];\n    if (medianDiff === 0) return false;\n\n    const tolerance = 0.01 * Math.abs(medianDiff);\n    return diffs.every(d => Math.abs(d - medianDiff) <= tolerance);\n}\n\n/**\n * Get the number of unique non-null values for a field in the data table.\n */\nexport function getFieldCardinality(field: string, table: any[]): number {\n    return new Set(table.map((r: any) => r[field]).filter((v: any) => v != null)).size;\n}\n\n/**\n * Determine the discrete type for a given encoding type.\n * Returns the appropriate discrete type without mutating anything.\n */\nexport function resolveDiscreteType(\n    currentType: string,\n    field: string | undefined,\n    table: any[],\n): 'nominal' | 'ordinal' {\n    if (currentType === 'nominal') return 'nominal';\n    if (currentType === 'ordinal') return 'ordinal';\n    if (currentType === 'temporal') return 'ordinal';\n    if (currentType === 'quantitative' && field && table.length > 0) {\n        const cardinality = getFieldCardinality(field, table);\n        return cardinality <= 20 ? 'ordinal' : 'nominal';\n    }\n    return 'nominal';\n}\n\n/**\n * Convert a single encoding to a discrete VL type in-place.\n */\nexport function resolveAsDiscrete(\n    encodingObj: any,\n    table: any[],\n): 'nominal' | 'ordinal' {\n    if (!encodingObj) return 'nominal';\n    const result = resolveDiscreteType(encodingObj.type, encodingObj.field, table);\n    encodingObj.type = result;\n    return result;\n}\n\n/**\n * Detect which positional axis should be the banded/category axis,\n * working from ChannelSemantics (v2 pipeline).\n *\n * Used by declareLayoutMode to set axisFlags and resolvedTypes.\n *\n * @returns  axis: which axis is banded\n *           resolvedTypes: type overrides if conversion was needed\n */\nexport function detectBandedAxisFromSemantics(\n    channelSemantics: Record<string, ChannelSemantics>,\n    table: any[],\n    options: { preferAxis?: 'x' | 'y' } = {},\n): { axis: 'x' | 'y'; resolvedTypes?: Record<string, 'nominal' | 'ordinal' | 'quantitative' | 'temporal'> } | null {\n    const xType = channelSemantics.x?.type;\n    const yType = channelSemantics.y?.type;\n\n    // Already discrete?\n    if (xType && isDiscrete(xType)) return { axis: 'x' };\n    if (yType && isDiscrete(yType)) return { axis: 'y' };\n\n    // Both continuous — don't convert, the banded flag handles sizing\n    if (xType && yType) {\n        if (xType === 'quantitative' && yType !== 'quantitative') {\n            return { axis: 'y' };\n        }\n        if (yType === 'quantitative' && xType !== 'quantitative') {\n            return { axis: 'x' };\n        }\n        return { axis: options.preferAxis || 'x' };\n    }\n\n    // Only one axis — convert to discrete\n    if (xType) {\n        const newType = resolveDiscreteType(xType, channelSemantics.x?.field, table);\n        return { axis: 'x', resolvedTypes: { x: newType } };\n    }\n    if (yType) {\n        const newType = resolveDiscreteType(yType, channelSemantics.y?.field, table);\n        return { axis: 'y', resolvedTypes: { y: newType } };\n    }\n\n    return null;\n}\n\n/**\n * Detect which axis is banded, and also force discrete conversion\n * when needed (grouped bar, boxplot must have a truly discrete axis).\n *\n * Returns resolvedTypes with the forced conversion.\n */\nexport function detectBandedAxisForceDiscrete(\n    channelSemantics: Record<string, ChannelSemantics>,\n    table: any[],\n    options: { preferAxis?: 'x' | 'y' } = {},\n): { axis: 'x' | 'y'; resolvedTypes?: Record<string, 'nominal' | 'ordinal' | 'quantitative' | 'temporal'> } | null {\n    const result = detectBandedAxisFromSemantics(channelSemantics, table, options);\n    if (!result) return null;\n\n    const axis = result.axis;\n    const cs = channelSemantics[axis];\n    if (!cs) return result;\n\n    // If the axis is NOT already discrete, force conversion\n    if (!isDiscrete(cs.type)) {\n        const newType = resolveDiscreteType(cs.type, cs.field, table);\n        return {\n            axis,\n            resolvedTypes: { ...result.resolvedTypes, [axis]: newType },\n        };\n    }\n\n    return result;\n}\n\n/**\n * Default instantiate implementation for simple templates.\n * Maps each resolved encoding channel directly to spec.encoding[channel].\n */\nexport const defaultBuildEncodings = (spec: any, encodings: Record<string, any>): void => {\n    if (!spec.encoding) spec.encoding = {};\n    for (const [channel, encodingObj] of Object.entries(encodings)) {\n        if (Object.keys(encodingObj).length > 0) {\n            const existing = spec.encoding[channel];\n            if (existing && typeof existing === 'object') {\n                spec.encoding[channel] = { ...existing, ...encodingObj };\n            } else {\n                spec.encoding[channel] = encodingObj;\n            }\n        }\n    }\n};\n\n// ---------------------------------------------------------------------------\n// Mark sizing helpers (used by v2 instantiate hooks)\n// ---------------------------------------------------------------------------\n\n/**\n * Set a property on a mark object (handles both string and object forms).\n */\nexport function setMarkProp(mark: any, key: string, value: any): any {\n    if (typeof mark === 'string') {\n        return { type: mark, [key]: value };\n    }\n    return { ...mark, [key]: value };\n}\n\n/**\n * Coverage-based point sizing.\n */\nexport const applyPointSizeScaling = (\n    vgSpec: any,\n    table: any[],\n    plotWidth: number = 400,\n    plotHeight: number = 300,\n    targetCoverage: number = 0.15,\n    defaultSize: number = 30,\n    minSize: number = 4,\n): any => {\n    if (!table || table.length === 0) return vgSpec;\n\n    const markType = typeof vgSpec.mark === 'string' ? vgSpec.mark : vgSpec.mark?.type;\n    if (!['circle', 'point', 'square'].includes(markType)) return vgSpec;\n\n    if (vgSpec.encoding?.size?.field) return vgSpec;\n    if (typeof vgSpec.mark === 'object' && vgSpec.mark.size != null) return vgSpec;\n\n    const n = table.length;\n    const plotArea = plotWidth * plotHeight;\n    const currentCoverage = (n * defaultSize) / plotArea;\n\n    if (currentCoverage <= targetCoverage) return vgSpec;\n\n    const size = Math.round(Math.max(minSize, (targetCoverage * plotArea) / n));\n    vgSpec.mark = setMarkProp(vgSpec.mark, 'size', size);\n    return vgSpec;\n};\n\n/**\n * Compute the maximum non-overlapping mark size (in pixels) for a continuous\n * banded axis.\n */\nfunction maxNonOverlapSize(\n    field: string,\n    table: any[],\n    isTemporal: boolean,\n    subplotDim: number,\n    count: number,\n    minSize: number = 2,\n): number {\n    const nums = [...new Set(\n        table.map((r: any) => {\n            const v = r[field];\n            if (v == null) return NaN;\n            return isTemporal ? +new Date(v) : +v;\n        }).filter((v: number) => !isNaN(v)),\n    )];\n    if (nums.length < 2) return Infinity;\n\n    nums.sort((a, b) => a - b);\n\n    let minGap = Infinity;\n    for (let i = 1; i < nums.length; i++) {\n        const gap = nums[i] - nums[i - 1];\n        if (gap > 0 && gap < minGap) minGap = gap;\n    }\n    if (!isFinite(minGap)) return Infinity;\n\n    const dataRange = nums[nums.length - 1] - nums[0];\n    if (dataRange <= 0) return Infinity;\n\n    const pixelsPerUnit = subplotDim * (count - 1) / (dataRange * count);\n    const maxWidth = Math.floor(minGap * pixelsPerUnit);\n    return Math.max(minSize, maxWidth);\n}\n\n/**\n * Adjust bar/rect marks for continuous-as-discrete axes.\n * v2 version: reads layout info from InstantiateContext.\n */\nexport function adjustBarMarks(spec: any, ctx: InstantiateContext): void {\n    const layout = ctx.layout;\n    for (const axis of ['x', 'y'] as const) {\n        const count = axis === 'x' ? layout.xContinuousAsDiscrete : layout.yContinuousAsDiscrete;\n        if (count <= 0) continue;\n        const enc = spec.encoding?.[axis];\n        if (enc?.bin) continue;\n\n        const effStep = axis === 'x' ? layout.xStep : layout.yStep;\n\n        const allMarkTypes = new Set<string>();\n        const mt = typeof spec.mark === 'string' ? spec.mark : spec.mark?.type;\n        if (mt) allMarkTypes.add(mt);\n        if (Array.isArray(spec.layer)) {\n            for (const layer of spec.layer) {\n                const lm = typeof layer.mark === 'string' ? layer.mark : layer.mark?.type;\n                if (lm) allMarkTypes.add(lm);\n            }\n        }\n        const sizeKey = allMarkTypes.has('rect')\n            ? (axis === 'x' ? 'width' : 'height')\n            : 'size';\n\n        const subplotDim = axis === 'x' ? layout.subplotWidth : layout.subplotHeight;\n        const isTemporal = enc?.type === 'temporal';\n        const maxSize = enc?.field\n            ? maxNonOverlapSize(enc.field, ctx.table, isTemporal, subplotDim, count)\n            : Infinity;\n        const cellSize = Math.max(2, Math.min(Math.round(effStep * 0.9), maxSize));\n\n        if (Array.isArray(spec.layer)) {\n            for (const layer of spec.layer) {\n                const lm = typeof layer.mark === 'string' ? layer.mark : layer.mark?.type;\n                if (lm === 'bar' || lm === 'rect') {\n                    layer.mark = setMarkProp(layer.mark, sizeKey, cellSize);\n                }\n            }\n        } else if (spec.mark) {\n            const markType = typeof spec.mark === 'string' ? spec.mark : spec.mark?.type;\n            if (markType === 'bar' || markType === 'rect') {\n                spec.mark = setMarkProp(spec.mark, sizeKey, cellSize);\n            }\n        }\n    }\n}\n\n/**\n * Adjust rect marks for edge-to-edge tiling on continuous axes.\n * v2 version: reads layout info from InstantiateContext.\n */\nexport function adjustRectTiling(spec: any, ctx: InstantiateContext): void {\n    const layout = ctx.layout;\n\n    for (const axis of ['x', 'y'] as const) {\n        const enc = spec.encoding?.[axis];\n        if (!enc?.field) continue;\n        const t = enc.type;\n        if (t === 'nominal' || t === 'ordinal') continue;\n        if (enc.aggregate) continue;\n\n        const uniqueVals = [...new Set(ctx.table.map((r: any) => r[enc.field]))];\n        const cardinality = uniqueVals.length;\n        if (cardinality <= 1) continue;\n\n        const count = axis === 'x' ? layout.xContinuousAsDiscrete : layout.yContinuousAsDiscrete;\n        const effStep = axis === 'x' ? layout.xStep : layout.yStep;\n        const pixelSpacing = count > 0 ? effStep * (count + 1) / count : effStep;\n\n        const subplotDim = axis === 'x' ? layout.subplotWidth : layout.subplotHeight;\n        const isTemporal = t === 'temporal';\n        const maxSize = maxNonOverlapSize(enc.field, ctx.table, isTemporal, subplotDim, count);\n        const cellSize = Math.max(1, Math.min(Math.floor(pixelSpacing * 0.98), maxSize));\n\n        const sizeKey = axis === 'x' ? 'width' : 'height';\n        spec.mark = setMarkProp(spec.mark, sizeKey, cellSize);\n    }\n}\n\n/**\n * Convert both positional axes to discrete types if they aren't already.\n * Returns resolvedTypes for layout declaration.\n */\nexport function ensureDiscreteTypes(\n    channelSemantics: Record<string, ChannelSemantics>,\n    table: any[],\n): Record<string, 'nominal' | 'ordinal' | 'quantitative' | 'temporal'> {\n    const resolvedTypes: Record<string, 'nominal' | 'ordinal' | 'quantitative' | 'temporal'> = {};\n    for (const axis of ['x', 'y'] as const) {\n        const cs = channelSemantics[axis];\n        if (!cs?.field || isDiscrete(cs.type)) continue;\n        resolvedTypes[axis] = resolveDiscreteType(cs.type, cs.field, table);\n    }\n    return resolvedTypes;\n}\n"
  },
  {
    "path": "src/lib/agents-chart/vegalite/templates/waterfall.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ChartTemplateDef, ChartPropertyDef } from '../../core/types';\n\n/**\n * Waterfall Chart template.\n *\n * Expects data with:\n *   - x (nominal): step labels in display order\n *   - y (quantitative): the delta/amount for each step\n *   - color (nominal, optional): a \"Type\" column with values like\n *     \"start\", \"delta\", \"end\"\n *\n * Uses a layered spec: bars + connector rules.\n */\nexport const waterfallChartDef: ChartTemplateDef = {\n    chart: \"Waterfall Chart\",\n    template: { mark: \"bar\", encoding: {} },\n    channels: [\"x\", \"y\", \"color\", \"column\", \"row\"],\n    markCognitiveChannel: 'length',\n    declareLayoutMode: () => ({\n        axisFlags: { x: { banded: true } },\n    }),\n    instantiate: (spec, ctx) => {\n        const { x, y, color, column, row } = ctx.resolvedEncodings;\n        const config = ctx.chartProperties;\n\n        const xField: string = x?.field || 'Category';\n        const yField: string = y?.field || 'Amount';\n        const colorField: string | undefined = color?.field;\n\n        if (!spec.encoding) spec.encoding = {};\n        if (column) spec.encoding.column = column;\n        if (row) spec.encoding.row = row;\n\n        const hasTypeCol = !!colorField;\n        const typeField = colorField || '__wf_type';\n\n        // ── Transforms ───────────────────────────────────────────────\n        const transforms: any[] = [];\n\n        if (!hasTypeCol) {\n            transforms.push(\n                { window: [{ op: \"row_number\", as: \"__wf_row\" }] },\n                { joinaggregate: [{ op: \"count\", as: \"__wf_total\" }] },\n                {\n                    calculate: `datum.__wf_row === 1 ? 'start' : datum.__wf_row === datum.__wf_total ? 'end' : 'delta'`,\n                    as: typeField,\n                },\n            );\n        }\n\n        transforms.push({\n            window: [{ op: \"sum\", field: yField, as: \"__wf_sum_raw\" }],\n        });\n\n        transforms.push({\n            calculate: `datum['${typeField}'] === 'end' ? datum.__wf_sum_raw - datum['${yField}'] : datum.__wf_sum_raw`,\n            as: \"__wf_sum\",\n        });\n\n        transforms.push({\n            calculate: `datum['${typeField}'] === 'end' ? 0 : datum.__wf_sum - datum['${yField}']`,\n            as: \"__wf_prev_sum\",\n        });\n\n        transforms.push({\n            calculate: `datum['${typeField}'] !== 'delta' ? 'total' : datum['${yField}'] >= 0 ? 'increase' : 'decrease'`,\n            as: \"__wf_color\",\n        });\n\n        spec.transform = transforms;\n\n        // ── Shared x encoding ────────────────────────────────────────\n        const xEnc = {\n            field: xField,\n            type: \"ordinal\" as const,\n            sort: null,\n            axis: { labelAngle: -45 },\n        };\n\n        // ── Preserve facet encodings ─────────────────────────────────\n        const facetEncodings: any = {};\n        if (spec.encoding?.column) facetEncodings.column = spec.encoding.column;\n        if (spec.encoding?.row) facetEncodings.row = spec.encoding.row;\n\n        const cornerRadius = (config?.cornerRadius && config.cornerRadius > 0) ? config.cornerRadius : 0;\n\n        spec.encoding = {\n            x: xEnc,\n            ...facetEncodings,\n        };\n\n        spec.layer = [\n            {\n                mark: {\n                    type: \"bar\",\n                    ...(cornerRadius > 0 ? { cornerRadius: cornerRadius } : {}),\n                },\n                encoding: {\n                    y: {\n                        field: \"__wf_prev_sum\",\n                        type: \"quantitative\",\n                        title: yField,\n                    },\n                    y2: { field: \"__wf_sum\" },\n                    color: {\n                        field: \"__wf_color\",\n                        type: \"nominal\",\n                        scale: {\n                            domain: [\"total\", \"increase\", \"decrease\"],\n                            range: [\"#f7e0b6\", \"#93c4aa\", \"#f78a64\"],\n                        },\n                        legend: { title: \"Type\" },\n                    },\n                },\n            },\n        ];\n\n        delete spec.mark;\n    },\n    properties: [\n        { key: \"cornerRadius\", label: \"Corners\", type: \"continuous\", min: 0, max: 8, step: 1, defaultValue: 0 },\n    ] as ChartPropertyDef[],\n};\n"
  },
  {
    "path": "src/scss/App.scss",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nh2.view-title {\n    margin: 0;\n    line-height: 1.75;\n    display: inline-block;\n    color: #717171;\n    //font-weight: 600;\n    //text-transform: uppercase;\n    font-size: 14px;\n    display: inline-block;\n}\n\n.Resizer {\n    background: #000;\n    opacity: 0.2;\n    z-index: 1;\n    -moz-box-sizing: border-box;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    -moz-background-clip: padding;\n    -webkit-background-clip: padding;\n    background-clip: padding-box;\n}\n\n.Resizer:hover {\n    -webkit-transition: all 2s ease;\n    transition: all 2s ease;\n}\n\n.Resizer.horizontal {\n    height: 11px;\n    margin: -5px 0;\n    border-top: 5px solid rgba(255, 255, 255, 0);\n    border-bottom: 5px solid rgba(255, 255, 255, 0);\n    cursor: row-resize;\n    width: 100%;\n}\n\n.Resizer.horizontal:hover {\n    border-top: 5px solid rgba(0, 0, 0, 0.5);\n    border-bottom: 5px solid rgba(0, 0, 0, 0.5);\n}\n\n.Resizer.vertical {\n    width: 11px;\n    margin: 0 -5px;\n    border-left: 5px solid rgba(255, 255, 255, 0);\n    border-right: 5px solid rgba(255, 255, 255, 0);\n    cursor: col-resize;\n}\n\n.Resizer.vertical:hover {\n    border-left: 5px solid rgba(0, 0, 0, 0.5);\n    border-right: 5px solid rgba(0, 0, 0, 0.5);\n}\n\n.Resizer.disabled {\n    cursor: not-allowed;\n}\n\n.Resizer.disabled:hover {\n    border-color: transparent;\n}\n\n.GroupHeader {\n    position: sticky;\n    padding: 4px 8px;\n    color: rgba(0, 0, 0, 0.6);\n    font-size: 12px;\n}\n\n.GroupItems {\n    padding: 0;\n}\n\n// Custom scrollbar styling with hover effects\n* {\n    // Webkit browsers (Chrome, Safari, Edge)\n    &::-webkit-scrollbar {\n        width: 8px;\n        height: 8px;\n    }\n\n    &::-webkit-scrollbar-track {\n        background: #f1f1f1;\n        border-radius: 4px;\n    }\n\n    &::-webkit-scrollbar-thumb {\n        background: #c1c1c1;\n        border-radius: 4px;\n        transition: background-color 0.3s ease;\n    }\n\n    &::-webkit-scrollbar-thumb:hover {\n        background: #a8a8a8;\n    }\n\n    &::-webkit-scrollbar-corner {\n        background: #f1f1f1;\n    }\n\n    // Firefox\n    scrollbar-width: auto;\n    scrollbar-color: lightgray transparent;\n\n    // Firefox hover effect (limited support)\n    &:hover {\n        scrollbar-color: #c6c6c6 transparent;\n    }\n}\n\n// Specific styling for main scrollable containers\n.encoding-shelf,\n.vega-container,\n.data-fields-group {\n    &::-webkit-scrollbar-thumb {\n        background: #d1d1d1;\n        border-radius: 4px;\n        transition: background-color 0.3s ease;\n    }\n\n    &::-webkit-scrollbar-thumb:hover {\n        background: #b8b8b8;\n    }\n}\n\n// Pencil writing animation\n@keyframes writing-pencil {\n    0%, 100% { \n        transform: rotate(-12deg) translateY(0px); \n    }\n    25% { \n        transform: rotate(-8deg) translateY(-1px); \n    }\n    50% { \n        transform: rotate(-12deg) translateY(0px); \n    }\n    75% { \n        transform: rotate(-15deg) translateY(1px); \n    }\n}\n\n.pencil {\n    display: inline-block;\n    transform-origin: bottom right;\n    animation: writing-pencil 0.8s ease-in-out infinite;\n}\n\n// Fix MUI Dialog bottom scrolling issues\n.MuiDialog-paper {\n    display: flex;\n    flex-direction: column;\n    max-height: calc(100% - 64px);\n    \n    .MuiDialogTitle-root {\n        flex-shrink: 0;\n    }\n    \n    .MuiDialogContent-root {\n        flex: 1 1 auto;\n        overflow-y: auto;\n        overflow-x: hidden;\n        box-sizing: border-box;\n        min-height: 0; // Ensures content can shrink in flex container\n    }\n    \n    .MuiDialogActions-root {\n        flex-shrink: 0;\n    }\n}\n\n// Allotment sash (divider) styling\n\n// Outer allotment: trim sash to avoid overlapping with rounded corners of the vis panel\n.outer-allotment {\n    // Hide the gray separator border (it would overlap with the rounded vis panel corners)\n    --separator-border: transparent !important;\n    --focus-border: #007fd4 !important;\n    --sash-hover-transition-duration: 0s !important;\n\n    [class*=\"sash_\"][class*=\"vertical\"] {\n        top: 16px !important;\n        height: calc(100% - 32px) !important;\n    }\n}\n\n// Inner allotment: keep default/normal sash style with hover effect\n.inner-allotment {\n    --separator-border: rgba(128, 128, 128, 0.35) !important;\n    --focus-border: #007fd4 !important;\n    --sash-hover-transition-duration: 0s !important;\n}\n"
  },
  {
    "path": "src/scss/DataView.scss",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* or write CSS selectors to make customisations beyond what the parameters support */\n\n.table-container {\n    height: 100%;\n    position: relative;\n    //background-color: #fff;\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    overflow: hidden;\n    will-change: transform;\n}\n\n.table-header-container {\n    display: flex;\n    height: 100%;\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n    align-items: center;\n    background-color: #fafafa;\n}\n\n.table-header-icon {\n    padding: 0 6px 0 0;\n    margin-top: 4px;\n    display: inline-block;\n    font-size: 18px;\n    color: #717171;\n}\n\n.table-container-small {\n\n    .derived-column-header {\n        background-color: rgba(255, 215, 0, 0.1);\n    }\n\n    .highlighted-column-header {\n        background-color:rgba(88, 24, 69, 0.05);\n    }\n\n    .data-view-header-label {\n        font-size: 10px;\n    }\n}\n\n.table-box {\n    height: 100%;\n    margin: 0px;\n    background: white;\n}\n\n.table-footer-container {\n\n    .table-search-input {\n        font-size: small;\n\n        input.MuiOutlinedInput-input.MuiInputBase-input {\n            height: 1.2em;\n            font-size: small;\n        }\n    }\n\n    .table-footer-number {\n        font-size: small;\n        line-height: 1.5;\n        color: rgba(0, 0, 0, 0.54);\n    }\n}\n\nspan.bold {\n    font-weight: 700;\n}\n\n.data-view-header-cell.MuiTableCell-root {\n    flex: 1 1 auto;\n    overflow: clip;\n    //border-bottom: none;\n    border-bottom-width: 2px;\n\n    &:last-child {\n        .data-view-header-container {\n            margin-right: 0px;\n        }\n    }\n\n    &.original {\n        .data-view-header-container {\n            border-bottom: 2px solid #0288d1;\n        }\n    }\n\n    &.derived {\n        .data-view-header-container {\n            background-color: #fffef1;\n            border-bottom: 2px solid #ffd700;\n        }\n    }\n\n    &.custom {\n        .data-view-header-container {\n            background-color: #fff9f8;\n            border-bottom: 2px solid #ffb395;\n        }\n    }\n\n    .data-view-header-container {\n        display: flex;\n        flex-direction: row;\n        margin: 0 2px 0 0;\n        padding: 4px 4px;\n    }\n}"
  },
  {
    "path": "src/scss/DraggableCard.scss",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n.draggable-card {\n\n    .draggable-card-header {\n        display: flex;\n        flex-direction: row;\n        justify-content: space-between;\n        height: auto;\n        padding: 1px 8px 1px 0px;\n        margin-left: 8px;\n        position: relative;\n\n        .draggable-card-title {\n            margin: auto;\n            margin-left: 3px;\n            display: flex;\n            align-items: center;\n        }\n    }\n\n    .draggable-card-header.uninstantiated {\n        font-style: italic;\n        color: rgab(80, 80, 80);\n    }\n\n    .draggable-card-header.uninstantiated.custom {\n        border: 0.5px dashed lightsalmon;\n        border-left: none;\n    }\n\n    .draggable-card-header.uninstantiated.derived {\n        border: 0.5px dashed gold;\n        border-left: none;\n    }\n\n    & .draggable-card-action-button {\n        visibility: hidden;\n        opacity: 0;\n        transition: visibility 0s, opacity 0.3s linear;\n    }\n\n    &:hover .draggable-card-action-button {\n        visibility: visible;\n        opacity: 1;\n    }\n\n    .draggable-card-body {\n        padding: 0px 8px 8px 4px !important;\n        margin-left: 8px;\n        background-color: rgba(255, 255, 255, 0.93);\n    }\n\n    .draggable-card-body-edit-mode {\n        background-color: rgba(255, 255, 255, 0.98);\n        padding: 8px 8px 8px 4px !important;\n        margin-left: 8px;\n    }\n\n    .draggable-card-example-values {\n        display: block;\n        text-overflow: ellipsis;\n        margin-left: 8px;\n        max-width: calc(100% - 96px);\n        font-size: smaller;\n        font-style: italic;\n        color: rebeccapurple;\n\n        .draggable-card-example-values-chip {\n            height: auto;\n            max-width: 120px;\n            margin: 3px;\n            border-radius: 0px;\n        }\n    }\n}\n"
  },
  {
    "path": "src/scss/EncodingShelf.scss",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n.encoding-shelf {\n    padding: 10px;\n    //width: 100%;\n    width: 220px;\n    overflow-y: auto;\n    transition: height 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n    //overflow: hidden;\n    align-items: flex-start;\n    border-left: 1px dashed rgba(0,0,0,0.1);\n\n    .example-panel {\n        display: flex;\n        //border: 1px grey dashed;\n        flex-direction: column;\n        justify-content: center\n    }\n\n    \n}\n\n.encoding-shelf-trigger-card {\n    margin: 6px 2px;\n    min-width: 80px;\n}\n\n.encoding-shelf-compact {\n\n    .example-panel {\n        display: flex;\n        //border: 1px grey dashed;\n        flex-direction: column;\n        justify-content: center\n    }\n\n    .table-list-item {\n        display: flex;\n    }\n}\n\n.auto-sort-option-label {\n    width: calc(100% - 24px);\n    overflow: hidden;\n    display: -webkit-box;\n    line-clamp: 2;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n    background: #fff;\n    text-align: left;\n    white-space: normal;\n    font-size: xx-small !important;\n}\n\n.channel-shelf-box {\n    width: auto !important;\n    justify-content: space-between;\n    white-space: nowrap;\n}\n\n.channel-encoded-field {\n    width: 100%;\n    //max-width: 144px;\n    //min-width: 200px;\n    min-height: 24px;\n    display: flex;\n    justify-content: space-between;\n\n    & .encoding-shelf-action-button {\n        visibility: hidden;\n        opacity: 0;\n        transition: visibility 0s, opacity 0.3s linear;\n    }\n    \n    &:hover .encoding-shelf-action-button {\n        visibility: visible;\n        opacity: 1;\n    }\n}\n\n.channel-encoded-field-compact {\n    width: 100%;\n    //max-width: 144px;\n    min-width: 0px;\n    min-height: 24px;\n    display: flex;\n    justify-content: space-between;\n\n    & .encoding-shelf-action-button {\n        visibility: hidden;\n        opacity: 0;\n        transition: visibility 0s, opacity 0.3s linear;\n    }\n    \n    &:hover .encoding-shelf-action-button {\n        visibility: visible;\n        opacity: 1;\n    }\n}\n\n.collapse-channel-label {\n    //width: 60px !important;\n    overflow: initial !important;\n    text-align: left;\n    padding-right: 2px !important;\n    vertical-align: 'middle';\n    display: 'inline-flex';\n    font-size: \"0.875em\";\n    svg {\n        vertical-align: bottom;\n    }\n}\n.encoding-list {\n    padding: 0;\n    margin: 6px 3px;\n    display: block;\n    //flex-direction: column;\n    //justify-content: space-evenly;\n}\n\n.encoding-item {\n    display: block;\n    margin-bottom: 4px;\n    \n\n    .encoding-button-container {\n        position: relative;\n        outline: 0;\n        margin: auto;\n        display: -webkit-box;\n        display: -webkit-flex;\n        display: -ms-flexbox;\n        display: flex;\n        -webkit-box-pack: center;\n        -ms-flex-pack: center;\n        -webkit-justify-content: center;\n        justify-content: center;\n        padding: 6px;\n\n        .MuiButton-root {\n            flex-grow: 1;\n        }\n    }\n\n    .encoding-active-item {\n        //width: calc(100% - 24px) !important;\n        //width: auto;\n        //min-width: 120px;\n        flex-grow: 1;\n        flex-shrink: 1;\n        border-radius: 0;\n        display: flex;\n        justify-content: space-between;\n        //background-color: rgb(2 136 209 / 0.07);\n        .MuiChip-root {\n            justify-content: flex-start;\n            .MuiChip-deleteIcon {\n                margin: 0 2px 0 auto !important;\n            }\n        }\n    }\n\n    // .encoding-active-item-original {\n    //     background-color: rgb(2 136 209 / 0.07);\n    // }\n    // .encoding-active-item-custom {\n    //     background-color: rgb(249 105 14 / 0.07);\n    // }\n    // .encoding-active-item-derived {\n    //     background-color: rgb(255 215 0 / 0.07); // gold\n    // }\n    // .encoding-active-item-custom {\n    //     //width: calc(100% - 24px) !important;\n    //     width: auto;\n    //     flex-grow: 1;\n    //     min-width: 120px;\n    //     border-radius: 0;\n    //     display: flex;\n    //     justify-content: space-between;\n    //     background-color: rgb(249 105 14 / 0.07);\n    //     .MuiChip-root {\n    //         justify-content: flex-start;\n    //         .MuiChip-deleteIcon {\n    //             margin: 0 2px 0 auto !important;\n    //         }\n    //     }\n    // }\n\n    .encoding-prop-chip {\n        border-radius: 0px;\n        font-size: 12px;\n        font-style: italic;\n        border-right: lightgray 1px solid;\n        min-width: 42px;\n        flex: 0;\n\n        //height: 14px;\n        .MuiChip-label {\n            padding-left: 2px;\n            padding-right: 2px;\n        }\n        .MuiChip-deleteIcon {\n            margin-left: 0;\n            margin: 0 2px 0 auto !important;\n            font-size: inherit;\n        }\n    }\n\n    .encoding-prop-chip:last-child {\n        flex: 1;\n        border-right: 0;\n    }\n}\n\n.chart-wrapper canvas {\n    max-width: 100%;\n    height: auto !important;\n}"
  },
  {
    "path": "src/scss/VisualizationView.scss",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n.visualization-gallery {\n    padding: 0; //0px 10px 10px 10px;\n    overflow: hidden;\n    flex-grow: 1;\n    display: flex;\n\n    .vega-container {\n        display: flex;\n        flex-wrap: wrap;\n        padding-top: 30px;\n        padding-left: 20px;\n        //margin: 5px;\n        overflow-y: auto;\n        align-content: flex-start;\n        width: 100%;\n    }\n\n    .vega-thumbnail-box {\n        \n        display: flex;\n        //color: #fff;\n        border-radius: 3px;\n        //margin: auto;\n        padding: 6px;\n        cursor: pointer !important;\n    }\n\n    .vega-thumbnail-box-animation {\n        transform-origin: bottom left;\n        animation: appear 0.5s ease-out;\n\n        \n    }\n\n    .vega-thumbnail {\n\n        padding: 0px 10px;\n        margin: auto;\n        \n        canvas {\n            margin: 6px auto;\n        }\n    }\n\n    .vega-thumbnail canvas{\n        cursor: pointer !important;\n    }\n\n    .vega-thumbnail-box:hover {\n        transform: translateY(-1px);\n        box-shadow: '0 2px 6px rgba(0,0,0,0.1)',\n    }\n}\n\n\n// vega action menu\n.vega-embed .vega-actions a  {\n    padding: 8px 16px !important;\n    font-family: Arial,Roboto,Helvetica Neue,sans-serif !important;\n    font-size: 14px !important;\n    font-weight: 100 !important;\n    white-space: nowrap !important;\n    color: #434a56 !important;\n    text-decoration: none !important;\n} ;\n\n$standard-ease: cubic-bezier(0.4, 0.0, 0.2, 1);\n$decelerate-ease: cubic-bezier(0.0, 0.0, 0.2, 1);\n$accelerate-ease: cubic-bezier(0.4, 0.0, 1, 1);\n\n@keyframes bump {\n    0% {\n      background-color: #fff;\n    }\n    50% {\n      background-color: rgba( 2, 136, 209, 0.2);\n    }\n    100% {\n      background-color: #fff;\n    }\n}\n\n@keyframes appear {\n    0% {\n      opacity: 0;\n    }\n    100% {\n      //background-color: #fff;\n    }\n}\n\n@keyframes spin {\n    0%,\n    to {\n        transform: rotate(0)\n    }\n    10% {\n        transform: scale(1.1)\n    }\n    20% {\n        transform: rotate(4deg) translateY(-12px)\n    }\n    40% {\n        transform: rotate(2deg) translateY(0)\n    }\n    60% {\n        transform: rotate(-2deg) translateY(-8px)\n    }\n    80% {\n        transform: rotate(-1deg) translateY(0)\n    }\n}\n\n.vega-container-carousel {\n    width: 200px;\n    min-width: 200px;\n    display: flex;\n    flex-direction: column;\n    overflow-y: scroll;\n    border-right: 1px lightgray solid;\n    align-content: flex-start;\n    padding-top: 0px;\n    direction: rtl;\n    padding-bottom: 6px;\n    height: calc(100vh - 50px);\n\n    .vega-thumbnail {\n        //border-bottom: 0.5px dashed lightgray;\n        //width: calc(100% - 16px);\n        //margin: 0 8px 0 12px;\n        display: flex;\n        cursor: pointer !important;\n        border: lightgray solid 0.5px;\n\n        canvas {\n            margin: 10px auto;\n        }\n    }\n\n    .vega-thumbnail-box {\n        //width: calc(100% - 16px);\n        display: block;\n        //color: #fff;\n        border-radius: 3px;\n    }\n\n    .vega-thumbnail-box-animation {\n        transform-origin: bottom left;\n        animation: appear 0.5s ease-out;\n    }\n\n    .vega-thumbnail:hover {\n        transform: translateY(1px);\n        box-shadow: 0 0 3px rgba(33,33,33,.2);\n        z-index: 1;\n    }\n}\n\n.visualization-carousel {\n    display: flex;\n    flex-grow: 1;\n    height: calc(100%);\n\n    .vega-focused {\n        flex: 1;\n        height: 100%;\n        display: flex;\n        overflow: auto;\n        \n        .chart-box {\n            width: calc(100% - 48px);\n            overflow: auto;\n            display: flex;\n            color: #fff;\n            border-radius: 3px;\n        }\n      \n        .chart-box-animation {\n            transform-origin: bottom left;\n            animation: appear 0.5s ease-out\n        }\n    }\n\n    .vega-container {\n        width: 200px;\n        min-width: 200px;\n        display: flex;\n        flex-wrap: wrap;\n        overflow-y: scroll;\n        border-right: 1px lightgray solid;\n        align-content: flex-start;\n        padding-top: 0px;\n        direction: rtl;\n        padding-bottom: 6px;\n    }\n\n    \n\n}\n\n.data-thread {\n    \n\n    .thread-view-animation {\n        transform-origin: bottom left;\n        animation: appear 0.5s ease-out\n    }\n\n    .vega-thumbnail {\n\n        display: flex;\n        cursor: pointer !important;\n\n        .vega-embed {\n            display: flex;\n            cursor: pointer !important;\n        }\n\n        canvas {\n            margin: 4px auto;\n        }\n    }\n\n    .vega-thumbnail-box {\n\n        border-radius: 3px;\n        cursor: pointer !important;\n\n        & .data-thread-chart-card-action-button {\n            visibility: hidden;\n            opacity: 0;\n            transition: visibility 0s, opacity 0.3s linear;\n        }\n        \n        &:hover .data-thread-chart-card-action-button {\n            visibility: visible;\n            opacity: 1;\n        }\n    }\n\n    .vega-thumbnail-box-animation {\n        transform-origin: bottom left;\n        animation: appear 0.5s ease-out;\n    }\n    \n}\n\n\n.data-thread-card {\n    cursor: pointer;\n}\n\n.data-thread-card:hover {\n    transform: translateY(-1px);\n    box-shadow: 0 1px 4px rgba(0,0,0,0.12);\n    z-index: 1;\n}\n\n.hover-card {\n    cursor: pointer;\n    canvas {\n        cursor: pointer;\n    }\n}\n\n.hover-card:hover {\n    transform: translateY(-1px);\n    box-shadow: 0 0 3px rgba(33,33,33,.2);\n}\n\n.visualization-carousel {\n    display: flex;\n    flex-grow: 1;\n    height: calc(100%);\n\n    .vega-focused {\n        flex: 1;\n        height: 100%;\n        display: flex;\n        overflow: auto;\n        \n        .chart-box {\n            display: flex;\n            color: #fff;\n            padding: 5px;\n            border-radius: 3px;\n            margin: auto;\n        }\n      \n        .chart-box-animation {\n            transform-origin: bottom left;\n            animation: appear 0.5s ease-out\n        }\n    }\n\n    .vega-container {\n        width: 200px;\n        min-width: 200px;\n        display: flex;\n        flex-wrap: wrap;\n        overflow-y: scroll;\n        border-right: 1px lightgray solid;\n        align-content: flex-start;\n        padding-top: 0px;\n        direction: rtl;\n        padding-bottom: 6px;\n    }\n\n    \n\n}"
  },
  {
    "path": "src/types.d.ts",
    "content": "declare module \"*.png\" {\n    const content: any;\n    export default content;\n}\n\ndeclare module \"*.svg\" {\n    const content: string;\n    export default content;\n}\n\ndeclare module \"prettier\";\n\ndeclare module \"prettier/parser-babel\";\n\ndeclare module \"vm-browserify\";\n\ndeclare module \"vega-lite\" {\n    export function compile(spec: any, options?: any): { spec: any };\n}\n"
  },
  {
    "path": "src/views/About.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Box, Typography, Button, useTheme, alpha, Divider } from \"@mui/material\";\nimport { borderColor, radius } from '../app/tokens';\nimport React, { FC } from \"react\";\nimport GridViewIcon from '@mui/icons-material/GridView';\nimport GitHubIcon from '@mui/icons-material/GitHub';\nimport YouTubeIcon from '@mui/icons-material/YouTube';\nimport { AgentIcon as PrecisionManufacturingIcon } from '../icons';\n\nimport { toolName } from \"../app/App\";\nimport { useSelector } from \"react-redux\";\nimport { DataFormulatorState } from \"../app/dfSlice\";\n\n\ninterface Feature {\n    title: string;\n    description: string;\n    media: string;\n    mediaType: 'image' | 'video';\n}\n\nconst features: Feature[] = [\n    {\n        title: \"Load (Almost) Any Data\",\n        description: \"Load structured data, connect to databases. Ask AI agents to extract and clean (small) ad-hoc data from screenshots, text blocks.\",\n        media: \"/feature-extract-data.mp4\",\n        mediaType: \"video\"\n    },\n    {\n        title: \"Agent Mode\",\n        description: \"Vibe with your data. Hands-off and let agents automatically explore and visualize data from high-level goals.\",\n        media: \"/feature-agent-mode.mp4\",\n        mediaType: \"video\"\n    },\n    {\n        title: \"Interactive Control\",\n        description: \"Use UI interactions and natural language to precisely describe chart designs. Ask AI agents for recommendations. Use Data Threads to backtrack, explore new branches, or follow up.\",\n        media: \"/feature-interactive-control.mp4\",\n        mediaType: \"video\"\n    },\n    {\n        title: \"Verify & Share Insights\",\n        description: \"Interact with charts, inspect data, formulas, and code. Create reports to share insights grounded in your exploration.\",\n        media: \"/feature-generate-report.mp4\",\n        mediaType: \"video\"\n    }\n];\n\nexport const About: FC<{}> = function About({ }) {\n    const theme = useTheme();\n\n    let actionButtons = (\n        <Box component=\"nav\" aria-label=\"Primary actions\" sx={{ display: 'flex', justifyContent: 'center', gap: 1.5, mb: 4, flexWrap: 'wrap' }}>\n            <Button size=\"large\" variant=\"outlined\" color=\"primary\" \n                sx={{ textTransform: 'none' }}\n                startIcon={<Box component=\"img\" sx={{ width: 20, height: 20 }} alt=\"\" aria-hidden=\"true\" src=\"/pip-logo.svg\" />}\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                aria-label=\"Install Locally via pip (opens in new tab)\"\n                href=\"https://pypi.org/project/data-formulator/\"\n            >Install Locally</Button>\n            <Button size=\"large\" variant=\"contained\" color=\"primary\" \n                sx={{ textTransform: 'none' }}\n                startIcon={<GridViewIcon aria-hidden=\"true\" />}\n                href=\"/app\"\n            >Try Online Demo</Button>\n            <Button size=\"large\" variant=\"outlined\" color=\"primary\" \n                sx={{ textTransform: 'none' }}\n                startIcon={<YouTubeIcon sx={{ color: '#FF0000' }} aria-hidden=\"true\" />}\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                aria-label=\"Watch Video on YouTube (opens in new tab)\"\n                href=\"https://www.youtube.com/watch?v=GfTE2FLyMrs\"\n            >Video</Button>\n            <Button size=\"large\" variant=\"outlined\" color=\"primary\" \n                sx={{ textTransform: 'none' }}\n                startIcon={<GitHubIcon aria-hidden=\"true\" />}\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                aria-label=\"View on GitHub (opens in new tab)\"\n                href=\"https://github.com/microsoft/data-formulator\"\n            >GitHub</Button>\n        </Box>\n    );\n\n    return (\n        <Box \n            component=\"main\"\n            role=\"main\"\n            sx={{\n                display: \"flex\", \n                flexDirection: \"column\", \n                overflowY: \"auto\",\n                width: '100%',\n                height: '100%',\n                background: `\n                    linear-gradient(90deg, ${alpha(theme.palette.text.secondary, 0.01)} 1px, transparent 1px),\n                    linear-gradient(0deg, ${alpha(theme.palette.text.secondary, 0.01)} 1px, transparent 1px)\n                `,\n                backgroundSize: '16px 16px',\n            }}\n        >\n            <Box sx={{margin:'auto', py: 4, display: \"flex\", flexDirection: \"column\", textAlign: \"center\", maxWidth: 1000, width: '100%', px: 3}}>\n                {/* Header with title */}\n                <Box component=\"header\" sx={{display: 'flex', flexDirection: 'column', mx: 'auto', mt: 2}}>\n                    <Typography component=\"h1\" fontSize={84} sx={{letterSpacing: '0.05em'}}>{toolName}</Typography> \n                    <Typography component=\"p\" sx={{ \n                        fontSize: 24, color: theme.palette.text.secondary, \n                        textAlign: 'center', mb: 4}}>\n                        Explore data with visualizations, powered by AI agents. \n                    </Typography>\n                </Box>\n                \n                {actionButtons}\n\n                {/* Features Grid - 2 columns, 4 rows */}\n                <Box \n                    component=\"section\" \n                    aria-label=\"Features\"\n                    sx={{ display: 'flex', flexDirection: 'column', gap: 5, mt: 2 }}\n                >\n                    {features.map((feature, index) => (\n                        <Box \n                            component=\"article\"\n                            key={index}\n                            aria-labelledby={`feature-title-${index}`}\n                            sx={{ \n                                display: 'flex', \n                                flexDirection: index % 2 === 0 ? 'row' : 'row-reverse',\n                                gap: 4,\n                                alignItems: 'center',\n                            }}\n                        >\n                            {/* Text Content */}\n                            <Box sx={{ \n                                flex: 1,\n                                textAlign: index % 2 === 0 ? 'left' : 'right',\n                                display: 'flex',\n                                flexDirection: 'column',\n                                justifyContent: 'center',\n                            }}>\n                                <Typography \n                                    component=\"h2\"\n                                    id={`feature-title-${index}`}\n                                    sx={{ \n                                        fontSize: 28,\n                                        fontWeight: 500,\n                                        mb: 1.5,\n                                        color: theme.palette.text.primary,\n                                    }}\n                                >\n                                    {feature.title}\n                                </Typography>\n                                <Typography \n                                    component=\"p\"\n                                    sx={{ \n                                        fontSize: 17,\n                                        color: 'text.secondary', \n                                        lineHeight: 1.7,\n                                    }}\n                                >\n                                    {feature.description}\n                                </Typography>\n                            </Box>\n\n                            {/* Media Content */}\n                            <Box sx={{ \n                                flex: 1,\n                                borderRadius: radius.md,\n                                overflow: 'hidden',\n                                border: `1px solid ${borderColor.divider}`,\n                            }}>\n                                {feature.mediaType === 'video' ? (\n                                    <Box\n                                        component=\"video\"\n                                        src={feature.media}\n                                        autoPlay\n                                        loop\n                                        muted\n                                        playsInline\n                                        preload=\"metadata\"\n                                        aria-label={`Video demonstration: ${feature.title}`}\n                                        sx={{\n                                            width: '100%',\n                                            height: 'auto',\n                                            display: 'block',\n                                        }}\n                                    />\n                                ) : (\n                                    <Box\n                                        component=\"img\"\n                                        src={feature.media}\n                                        alt={feature.title}\n                                        loading=\"lazy\"\n                                        sx={{\n                                            width: '100%',\n                                            height: 'auto',\n                                            display: 'block',\n                                        }}\n                                    />\n                                )}\n                            </Box>\n                        </Box>\n                    ))}\n                </Box>\n\n                <Box sx={{ mt: 6, mx: 2 }}>\n                    <Typography variant=\"body2\" sx={{ color: 'text.secondary' }}>\n                        <strong>Data handling:</strong> Data stored in browser only • Local install runs Python locally; online demo processes server-side (not stored) • LLM receives small samples with prompts\n                    </Typography>\n                    <Typography variant=\"body2\" sx={{ display: 'block', mt: 1, color: 'text.secondary' }}>\n                        Research Prototype from Microsoft Research\n                    </Typography>\n                </Box>\n            </Box>\n\n            {/* Footer */}\n            <Box \n                component=\"footer\"\n                role=\"contentinfo\"\n                sx={{ color: 'text.secondary', display: 'flex', \n                    backgroundColor: 'rgba(255, 255, 255, 0.89)',\n                    alignItems: 'center', justifyContent: 'center' }}\n            >\n                <Button size=\"small\" color=\"inherit\" \n                        sx={{ textTransform: 'none' }} \n                        target=\"_blank\" \n                        rel=\"noopener noreferrer\" \n                        aria-label=\"Privacy & Cookies (opens in new tab)\"\n                        href=\"https://www.microsoft.com/en-us/privacy/privacystatement\">Privacy & Cookies</Button>\n                <Divider orientation=\"vertical\" variant=\"middle\" flexItem sx={{ mx: 1 }} aria-hidden=\"true\" />\n                <Button size=\"small\" color=\"inherit\" \n                        sx={{ textTransform: 'none' }} \n                        target=\"_blank\" \n                        rel=\"noopener noreferrer\" \n                        aria-label=\"Terms of Use (opens in new tab)\"\n                        href=\"https://www.microsoft.com/en-us/legal/intellectualproperty/copyright\">Terms of Use</Button>\n                <Divider orientation=\"vertical\" variant=\"middle\" flexItem sx={{ mx: 1 }} aria-hidden=\"true\" />\n                <Button size=\"small\" color=\"inherit\" \n                        sx={{ textTransform: 'none' }} \n                        target=\"_blank\" \n                        rel=\"noopener noreferrer\" \n                        aria-label=\"Contact Us (opens in new tab)\"\n                        href=\"https://github.com/microsoft/data-formulator/issues\">Contact Us</Button>\n                <Typography component=\"span\" sx={{ fontSize: '12px', ml: 1 }}>© {new Date().getFullYear()}</Typography>\n            </Box>\n        </Box>)\n}\n"
  },
  {
    "path": "src/views/AgentRulesDialog.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { FC, useState, useEffect } from 'react';\nimport { radius } from '../app/tokens';\nimport {\n    Button,\n    Typography,\n    Box,\n    DialogTitle,\n    Dialog,\n    DialogContent,\n    DialogActions,\n    Divider,\n    IconButton,\n    useTheme,\n    Badge,\n    alpha,\n} from '@mui/material';\nimport RuleIcon from '@mui/icons-material/Rule';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { DataFormulatorState, dfActions } from '../app/dfSlice';\nimport Editor from 'react-simple-code-editor';\n\nexport const AgentRulesDialog: React.FC<{\n    externalOpen?: boolean;\n    onExternalClose?: () => void;\n}> = ({ externalOpen, onExternalClose }) => {\n    const theme = useTheme();\n    const [internalOpen, setInternalOpen] = useState(false);\n    const open = externalOpen !== undefined ? externalOpen : internalOpen;\n    const dispatch = useDispatch();\n    const agentRules = useSelector((state: DataFormulatorState) => state.agentRules);\n\n    // Local state for editing\n    const [codingRules, setCodingRules] = useState(agentRules.coding);\n    const [explorationRules, setExplorationRules] = useState(agentRules.exploration);\n\n    // Placeholder content\n    const codingPlaceholder = `Example Rules:\n\n## Computation \n- ROI (return on investment) should be computed as (revenue - cost) / cost.\n- When compute moving average for date field, the window size should be 7.\n- When performing forecasting, by default use linear models.\n\n## Coding\n- When a string column contains placeholder '-' for missing values, convert them to ''.\n- Date should all be formated as 'YYYY-MM-DD'.\n`;\n\n    const explorationPlaceholder = `Example Rules:\n\n## Simpicity\n- Keep the questions simple and concise, do not overcomplicate the exploration.\n    \n## Question Generation\n- When you see outliers in the data, generate a question to investigate the outliers.\n\n## Domain Knowledge\n- When exploring large product dataset, include questions about top 20 based on different criteria.\n`;\n\n    // Update local state when dialog opens\n    useEffect(() => {\n        if (open) {\n            setCodingRules(agentRules.coding);\n            setExplorationRules(agentRules.exploration);\n        }\n    }, [open, agentRules]);\n\n    const handleSaveCoding = () => {\n        dispatch(dfActions.setAgentRules({\n            coding: codingRules,\n            exploration: agentRules.exploration\n        }));\n    };\n\n    const handleSaveExploration = () => {\n        dispatch(dfActions.setAgentRules({\n            coding: agentRules.coding,\n            exploration: explorationRules\n        }));\n    };\n\n    const handleClose = () => {\n        // Reset to original values\n        setCodingRules(agentRules.coding);\n        setExplorationRules(agentRules.exploration);\n        if (onExternalClose) {\n            onExternalClose();\n        } else {\n            setInternalOpen(false);\n        }\n    };\n\n    // Check if there are changes for each tab\n    const hasCodingChanges = codingRules !== agentRules.coding;\n    const hasExplorationChanges = explorationRules !== agentRules.exploration;\n\n    // Check if any rules are set\n    const ruleCount = Number(agentRules.coding && agentRules.coding.trim().length > 0) + \n                        Number(agentRules.exploration && agentRules.exploration.trim().length > 0);\n\n    return (\n        <>\n            {externalOpen === undefined && (\n                <Badge \n                    color=\"primary\" \n                    variant=\"standard\" \n                    invisible={ruleCount === 0}\n                    badgeContent={ruleCount}\n                    sx={{\n                        '& .MuiBadge-badge': {\n                            minWidth: 0,\n                            height: 12,\n                            fontSize: 8,\n                            top: 12,\n                            right: 8,\n                            px: 0.5,\n                            color: theme.palette.primary.textColor || theme.palette.primary.main,\n                            background: alpha(theme.palette.primary.light, 0.2),\n                        },\n                    }}\n                >\n                    <Button\n                        variant=\"text\"\n                        sx={{ textTransform: 'none' }}\n                        onClick={() => setInternalOpen(true)}\n                        startIcon={<RuleIcon />}\n                    >\n                        Agent Rules\n                    </Button>\n                </Badge>\n            )}\n            <Dialog\n                onClose={handleClose}\n                open={open}\n                sx={{ '& .MuiDialog-paper': { maxWidth: 800, maxHeight: '90vh', width: '90%' } }}\n                maxWidth={false}\n            >\n                <DialogTitle sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n                    <Typography variant=\"h6\">Agent Rules</Typography>\n                    <IconButton\n                        aria-label=\"close\"\n                        onClick={handleClose}\n                        sx={{ color: (theme) => theme.palette.grey[500] }}\n                    >\n                        <CloseIcon />\n                    </IconButton>\n                </DialogTitle>\n                <DialogContent>\n                    {/* Coding Agent Rules Section */}\n                    <Box sx={{ mb: 3 }}>\n                        <Typography variant=\"body2\" sx={{ mb: 1, fontWeight: 600, color: 'primary.main' }}>\n                            Coding Rules\n                            <Typography variant=\"body2\" component=\"span\" color=\"text.secondary\" sx={{ ml: 1, fontSize: 12 }}>\n                                (Rules that guide AI agents when generating code to transform data and recommend visualizations.)\n                            </Typography>\n                        </Typography>\n                        \n                        <Box\n                            sx={{\n                                border: `1px solid ${theme.palette.primary.main}`,\n                                borderRadius: radius.sm,\n                                overflow: 'auto',\n                                height: 180,\n                                boxShadow: `0 2px 8px ${theme.palette.primary.main}40`,\n                                transition: 'box-shadow 0.3s ease-in-out',\n                                '&:hover': {\n                                    boxShadow: `0 4px 12px ${theme.palette.primary.main}60`,\n                                }\n                            }}\n                        >\n                            <Editor\n                                value={codingRules}\n                                onValueChange={(code) => setCodingRules(code)}\n                                highlight={(code) => code}\n                                padding={16}\n                                placeholder={codingPlaceholder}\n                                onKeyDown={(e) => {\n                                    if (e.key === 'Tab' && !codingRules) {\n                                        e.preventDefault();\n                                        setCodingRules(codingPlaceholder);\n                                    }\n                                }}\n                                style={{\n                                    fontFamily: 'Monaco, Menlo, \"Ubuntu Mono\", monospace',\n                                    fontSize: 10,\n                                    lineHeight: 1.2,\n                                    minHeight: 180,\n                                    whiteSpace: 'pre-wrap',\n                                    outline: 'none',\n                                    resize: 'none',\n                                }}\n                            />\n                        </Box>\n                    </Box>\n\n                    <Divider sx={{ my: 3 }} />\n\n                    {/* Exploration Agent Rules Section */}\n                    <Box>\n                        <Typography variant=\"body2\" sx={{ mb: 1, fontWeight: 600, color: 'secondary.main' }}>\n                            Exploration Rules\n                            <Typography variant=\"body2\" component=\"span\" color=\"text.secondary\" sx={{ ml: 1, fontSize: 12 }}>\n                                (Rules that guide AI agents when exploring datasets, generating questions, and discovering insights)\n                            </Typography>\n                        </Typography>\n                        <Box\n                            sx={{\n                                border: `1px solid ${theme.palette.secondary.main}`,\n                                borderRadius: radius.sm,\n                                overflow: 'auto',\n                                height: 180,\n                                boxShadow: `0 2px 8px ${theme.palette.secondary.main}40`,\n                                transition: 'box-shadow 0.3s ease-in-out',\n                                '&:hover': {\n                                    boxShadow: `0 4px 12px ${theme.palette.secondary.main}60`,\n                                }\n                            }}\n                        >\n                            <Editor\n                                value={explorationRules}\n                                onValueChange={(code) => setExplorationRules(code)}\n                                highlight={(code) => code}\n                                padding={16}\n                                placeholder={explorationPlaceholder}\n                                onKeyDown={(e) => {\n                                    if (e.key === 'Tab' && !explorationRules) {\n                                        e.preventDefault();\n                                        setExplorationRules(explorationPlaceholder);\n                                    }\n                                }}\n                                style={{\n                                    fontFamily: 'Monaco, Menlo, \"Ubuntu Mono\", monospace',\n                                    fontSize: 10,\n                                    lineHeight: 1.2,\n                                    minHeight: 180,\n                                    whiteSpace: 'pre-wrap',\n                                    outline: 'none',\n                                    resize: 'none',\n                                }}\n                            />\n                        </Box>\n                        <Box sx={{ mt: 2, display: 'flex', justifyContent: 'flex-end' }}>\n                            <Button\n                                variant=\"text\"\n                                disabled={!hasCodingChanges}\n                                onClick={handleSaveCoding}\n                                sx={{ textTransform: 'none' }}\n                            >\n                                Save Coding Rules\n                            </Button>\n                            <Button\n                                variant=\"text\"\n                                disabled={!hasExplorationChanges}\n                                onClick={handleSaveExploration}\n                                color=\"secondary\"\n                                sx={{ textTransform: 'none' }}\n                            >\n                                Save Exploration Rules\n                            </Button>\n                        </Box>\n                    </Box>\n                </DialogContent>\n            </Dialog>\n        </>\n    );\n};\n"
  },
  {
    "path": "src/views/ChartGallery.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ChartGallery — Visual gallery for Vega-Lite chart assembly.\n *\n * All synthetic test-data generators and types live in\n * `src/lib/agents-chart/test-data/`. This file contains only the\n * React components that render the gallery UI.\n */\n\nimport React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';\nimport {\n    Box, Tabs, Tab, Typography, Paper, Chip, Button,\n} from '@mui/material';\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\nimport embed from 'vega-embed';\nimport * as echarts from 'echarts';\nimport { Chart, registerables } from 'chart.js';\nimport { assembleVegaChart } from '../app/utils';\nimport { Channel, EncodingItem } from '../components/ComponentType';\nimport { channels } from '../components/ChartTemplates';\nimport { ChartWarning, ChartEncoding, ChartAssemblyInput, assembleVegaLite, assembleECharts, assembleChartjs, assembleGoFish, GoFishSpec } from '../lib/agents-chart';\nimport { TestCase, TEST_GENERATORS, GALLERY_SECTIONS } from '../lib/agents-chart/test-data';\n\n// Register all Chart.js components\nChart.register(...registerables);\n\n// ============================================================================\n// Chart Rendering Component\n// ============================================================================\n\nconst VegaChart: React.FC<{ testCase: TestCase }> = React.memo(({ testCase }) => {\n    const containerRef = useRef<HTMLDivElement>(null);\n    const [error, setError] = useState<string | null>(null);\n    const [specJson, setSpecJson] = useState<string>('');\n    const [warnings, setWarnings] = useState<ChartWarning[]>([]);\n    const [specOptions, setSpecOptions] = useState<string>('');\n    const [inferredSize, setInferredSize] = useState<string>('');\n\n    useEffect(() => {\n        if (!containerRef.current) return;\n\n        try {\n            // Build encoding map with all channels defaulting to empty\n            const fullEncodingMap: Record<string, EncodingItem> = {};\n            for (const ch of channels) {\n                fullEncodingMap[ch as string] = testCase.encodingMap[ch as Channel] || {};\n            }\n\n            const vlSpec = assembleVegaChart(\n                testCase.chartType,\n                fullEncodingMap as any,\n                testCase.fields,\n                testCase.data,\n                testCase.metadata,\n                400,   // baseChartWidth\n                300,   // baseChartHeight\n                true,  // addTooltips\n                testCase.chartProperties,\n                1,     // scaleFactor\n                testCase.assembleOptions?.maxStretch,\n                testCase.assembleOptions,\n                testCase.semanticAnnotations,\n            );\n\n            if (!vlSpec) {\n                setError('assembleVegaChart returned no spec');\n                return;\n            }\n\n            // Extract warnings\n            const specAny = vlSpec as any;\n            setWarnings(specAny._warnings || []);\n            setInferredSize(`${specAny._width ?? '?'} × ${specAny._height ?? '?'}`);\n\n            // Build the exact input sent to assembleVegaLite()\n            const encodings: Record<string, any> = {};\n            for (const [ch, ei] of Object.entries(testCase.encodingMap)) {\n                if (ei && ei.fieldID) {\n                    const entry: Record<string, any> = { field: ei.fieldID };\n                    if (ei.dtype) entry.type = ei.dtype;\n                    if (ei.aggregate) entry.aggregate = ei.aggregate;\n                    if (ei.sortOrder) entry.sortOrder = ei.sortOrder;\n                    if (ei.sortBy) entry.sortBy = ei.sortBy;\n                    if (ei.scheme) entry.scheme = ei.scheme;\n                    encodings[ch] = entry;\n                }\n            }\n\n            const semanticTypes: Record<string, string | any> = {};\n            for (const [fieldName, meta] of Object.entries(testCase.metadata)) {\n                if (meta.semanticType) {\n                    semanticTypes[fieldName] = meta.semanticType;\n                }\n            }\n            // Override with enriched annotations when present (e.g., intrinsicDomain, unit)\n            if (testCase.semanticAnnotations) {\n                for (const [fieldName, annotation] of Object.entries(testCase.semanticAnnotations)) {\n                    semanticTypes[fieldName] = annotation;\n                }\n            }\n\n            const assembleInput: Record<string, any> = {\n                data: `[${testCase.data.length} rows]`,\n                semantic_types: semanticTypes,\n                chart_spec: {\n                    chartType: testCase.chartType,\n                    encodings,\n                    ...(testCase.chartProperties && Object.keys(testCase.chartProperties).length > 0\n                        ? { chartProperties: testCase.chartProperties } : {}),\n                },\n                ...(testCase.assembleOptions && Object.keys(testCase.assembleOptions).length > 0\n                    ? { options: testCase.assembleOptions } : {}),\n            };\n\n            // Custom serializer: compact each encoding entry to one line\n            const compactJson = (obj: any): string => {\n                const raw = JSON.stringify(obj, null, 2);\n                // Replace multi-line encoding entries with single-line versions\n                // Match patterns like:  \"x\": {\\n    \"field\": ...\\n  }\n                return raw.replace(\n                    /\"(\\w+)\":\\s*\\{([^{}]+)\\}/g,\n                    (match, key, body) => {\n                        // Only compact if inside encodings (body has \"field\")\n                        if (!body.includes('\"field\"')) return match;\n                        const compact = body.replace(/\\s*\\n\\s*/g, ' ').trim();\n                        return `\"${key}\": { ${compact} }`;\n                    }\n                );\n            };\n\n            setSpecOptions(compactJson(assembleInput));\n\n            setSpecJson(JSON.stringify(vlSpec, null, 2));\n\n            const spec = {\n                ...vlSpec as any,\n            } as any;\n            delete spec._warnings;\n\n            // Don't set explicit width/height — let config.view.step handle\n            // discrete axes (step × count) and config.view.continuousWidth/Height\n            // handle continuous axes.  Forcing width/height here overrides step sizing.\n\n            embed(containerRef.current, spec, {\n                actions: { export: true, source: true, compiled: true, editor: true },\n                renderer: 'svg',\n            }).catch(err => {\n                setError(`Vega embed error: ${err.message}`);\n            });\n        } catch (err: any) {\n            setError(`Assembly error: ${err.message}`);\n        }\n    }, [testCase]);\n\n    return (\n        <Paper\n            elevation={1}\n            sx={{\n                p: 2, mb: 2, width: 'fit-content',\n                border: error ? '2px solid #f44336' : '1px solid #e0e0e0',\n            }}\n        >\n            {/* Text block: width:0 + minWidth:100% prevents text from expanding the card beyond the chart width */}\n            <Box sx={{ width: 0, minWidth: '100%', overflow: 'hidden' }}>\n                <Typography variant=\"subtitle2\" fontWeight={600} gutterBottom>\n                    {testCase.title}\n                </Typography>\n                <Typography variant=\"caption\" color=\"text.secondary\" display=\"block\" mb={1} sx={{ wordBreak: 'break-word' }}>\n                    {testCase.description}\n                </Typography>\n                <Box sx={{ display: 'flex', gap: 0.5, flexWrap: 'wrap', mb: 1 }}>\n                    {testCase.tags.map(tag => (\n                        <Chip key={tag} label={tag} size=\"small\" variant=\"outlined\"\n                            sx={{ fontSize: 10, height: 20 }} />\n                    ))}\n                </Box>\n                {inferredSize && (\n                    <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', mb: 0.5, fontSize: 10 }}>\n                        Inferred size: {inferredSize}\n                    </Typography>\n                )}\n            </Box>\n            {error ? (\n                <Typography color=\"error\" variant=\"body2\" sx={{ whiteSpace: 'pre-wrap', fontSize: 11 }}>\n                    {error}\n                </Typography>\n            ) : (\n                <Box ref={containerRef} sx={{ minHeight: 200 }} />\n            )}\n            {warnings.length > 0 && (\n                <Box sx={{ mt: 1, p: 1, bgcolor: '#fff3e0', borderLeft: '3px solid #ff9800', width: 0, minWidth: '100%' }}>\n                    <Typography variant=\"body2\" color=\"warning.dark\" sx={{ fontSize: 11, fontWeight: 600, mb: 0.5 }}>\n                        Warning:\n                    </Typography>\n                    {warnings.map((w, i) => (\n                        <Typography key={i} variant=\"body2\" color=\"warning.dark\" sx={{ fontSize: 11 }}>\n                            {w.message}\n                        </Typography>\n                    ))}\n                </Box>\n            )}\n            {/* Debug copy button — only for debug-tagged tests */}\n            {testCase.tags.includes('debug') && (\n                <Box sx={{ mt: 1 }}>\n                    <Button\n                        size=\"small\"\n                        variant=\"outlined\"\n                        startIcon={<ContentCopyIcon sx={{ fontSize: 12 }} />}\n                        sx={{ fontSize: 10, textTransform: 'none', py: 0.25, px: 1 }}\n                        onClick={() => {\n                            const parts: string[] = [];\n                            if (specOptions) {\n                                parts.push('## agents-chart input spec\\n' + specOptions);\n                            }\n                            if (specJson) {\n                                const vlLines = specJson.split('\\n').slice(0, 50).join('\\n');\n                                parts.push('## vega-lite output spec (first 50 lines)\\n' + vlLines);\n                            }\n                            navigator.clipboard.writeText(parts.join('\\n\\n'));\n                        }}\n                    >\n                        Copy Spec + VL\n                    </Button>\n                </Box>\n            )}\n            {specOptions && (\n                <details style={{ marginTop: 8, width: 0, minWidth: '100%', overflow: 'hidden' }}>\n                    <summary style={{ cursor: 'pointer', fontSize: 11, color: '#888' }}>\n                        Spec\n                    </summary>\n                    <pre style={{ fontSize: 10, maxHeight: 200, overflow: 'auto', background: '#f0f4ff', padding: 8, borderRadius: 4 }}>\n                        {specOptions}\n                    </pre>\n                </details>\n            )}\n            {/* {specJson && (\n                <details style={{ marginTop: 4 }}>\n                    <summary style={{ cursor: 'pointer', fontSize: 11, color: '#888' }}>\n                        Vega-Lite Spec\n                    </summary>\n                    <pre style={{ fontSize: 10, maxHeight: 300, overflow: 'auto', background: '#f5f5f5', padding: 8, borderRadius: 4 }}>\n                        {specJson}\n                    </pre>\n                </details>\n            )} */}\n        </Paper>\n    );\n});\n\n// ============================================================================\n// ECharts Rendering Component\n// ============================================================================\n\n/**\n * Build the shared input spec (same for VL and EC) for display.\n * Returns a JSON-serializable object and a compact string.\n */\nfunction buildSharedInputSpec(testCase: TestCase): { obj: Record<string, unknown>; compact: string } {\n    const encodings: Record<string, unknown> = {};\n    for (const [ch, ei] of Object.entries(testCase.encodingMap)) {\n        if (ei && (ei as any).fieldID) {\n            const entry: Record<string, unknown> = { field: (ei as any).fieldID };\n            if ((ei as any).dtype) entry.type = (ei as any).dtype;\n            if ((ei as any).aggregate) entry.aggregate = (ei as any).aggregate;\n            if ((ei as any).sortOrder) entry.sortOrder = (ei as any).sortOrder;\n            if ((ei as any).sortBy) entry.sortBy = (ei as any).sortBy;\n            if ((ei as any).scheme) entry.scheme = (ei as any).scheme;\n            encodings[ch] = entry;\n        }\n    }\n    const semanticTypes: Record<string, string> = {};\n    for (const [fieldName, meta] of Object.entries(testCase.metadata)) {\n        if (meta.semanticType) semanticTypes[fieldName] = meta.semanticType;\n    }\n    const obj: Record<string, unknown> = {\n        data: `[${testCase.data.length} rows]`,\n        semantic_types: semanticTypes,\n        chart_spec: {\n            chartType: testCase.chartType,\n            encodings,\n            ...(testCase.chartProperties && Object.keys(testCase.chartProperties).length > 0\n                ? { chartProperties: testCase.chartProperties } : {}),\n        },\n        ...(testCase.assembleOptions && Object.keys(testCase.assembleOptions || {}).length > 0\n            ? { options: testCase.assembleOptions } : {}),\n    };\n    const raw = JSON.stringify(obj, null, 2);\n    const compact = raw.replace(\n        /\"(\\w+)\":\\s*\\{([^{}]+)\\}/g,\n        (match, key, body) => {\n            if (!body.includes('\"field\"')) return match;\n            const single = body.replace(/\\s*\\n\\s*/g, ' ').trim();\n            return `\"${key}\": { ${single} }`;\n        },\n    );\n    return { obj, compact };\n}\n\n/**\n * Convert a TestCase into a ChartAssemblyInput for assembleECharts.\n */\nfunction testCaseToEChartsInput(testCase: TestCase, canvasSize: { width: number; height: number }): ChartAssemblyInput {\n    const encodings: Record<string, ChartEncoding> = {};\n    for (const [channel, encoding] of Object.entries(testCase.encodingMap)) {\n        if (encoding && encoding.fieldID) {\n            encodings[channel] = {\n                field: encoding.fieldID,\n                type: encoding.dtype,\n                aggregate: encoding.aggregate,\n                sortOrder: encoding.sortOrder,\n                sortBy: encoding.sortBy,\n                scheme: encoding.scheme,\n            };\n        }\n    }\n\n    const semanticTypes: Record<string, string> = {};\n    for (const [fieldName, meta] of Object.entries(testCase.metadata)) {\n        if (meta.semanticType) {\n            semanticTypes[fieldName] = meta.semanticType;\n        }\n    }\n\n    return {\n        data: { values: testCase.data },\n        semantic_types: semanticTypes,\n        chart_spec: {\n            chartType: testCase.chartType,\n            encodings,\n            canvasSize,\n            chartProperties: testCase.chartProperties,\n        },\n        options: testCase.assembleOptions,\n    };\n}\n\n/** Stable default so useEffect dependencies don't change on every render. */\nconst DEFAULT_CANVAS_SIZE = { width: 400, height: 300 } as const;\n\nconst EChartsChart: React.FC<{ testCase: TestCase; canvasSize?: { width: number; height: number } }> = React.memo(({ testCase, canvasSize = DEFAULT_CANVAS_SIZE }) => {\n    const containerRef = useRef<HTMLDivElement>(null);\n    const chartRef = useRef<echarts.ECharts | null>(null);\n    const [error, setError] = useState<string | null>(null);\n    const [warnings, setWarnings] = useState<ChartWarning[]>([]);\n    const [specJson, setSpecJson] = useState<string>('');\n    const [inferredSize, setInferredSize] = useState<string>('');\n\n    useEffect(() => {\n        if (!containerRef.current) return;\n\n        try {\n            const ecOption = assembleECharts(testCaseToEChartsInput(testCase, canvasSize));\n\n            if (!ecOption) {\n                setError('assembleECharts returned no option');\n                return;\n            }\n\n            // Extract warnings\n            setWarnings(ecOption._warnings || []);\n            setInferredSize(`${ecOption._width ?? '?'} × ${ecOption._height ?? '?'}`);\n\n            // Build displayable JSON (strip internal props and data for readability)\n            const displayOption = { ...ecOption };\n            delete displayOption._warnings;\n            delete displayOption._dataLength;\n            delete displayOption._width;\n            delete displayOption._height;\n            delete displayOption._legendWidth;\n            setSpecJson(JSON.stringify(displayOption, null, 2));\n\n            // Initialize or reuse ECharts instance\n            if (chartRef.current) {\n                chartRef.current.dispose();\n            }\n            const chart = echarts.init(containerRef.current, undefined, {\n                width: ecOption._width || 400,\n                height: ecOption._height || 300,\n            });\n            chartRef.current = chart;\n\n            // Clean the option for ECharts (remove internal props)\n            const cleanOption = { ...ecOption };\n            delete cleanOption._warnings;\n            delete cleanOption._dataLength;\n            delete cleanOption._width;\n            delete cleanOption._height;\n            delete cleanOption._legendWidth;\n\n            chart.setOption(cleanOption);\n            setError(null);\n        } catch (err: any) {\n            setError(`ECharts error: ${err.message}`);\n        }\n\n        return () => {\n            if (chartRef.current) {\n                chartRef.current.dispose();\n                chartRef.current = null;\n            }\n        };\n    }, [testCase, canvasSize]);\n\n    return (\n        <Box sx={{ width: 'fit-content' }}>\n            <Typography variant=\"caption\" fontWeight={600} color=\"#e65100\"\n                sx={{ display: 'block', mb: 0.5, fontSize: 11, letterSpacing: 0.5 }}>\n                ECharts\n            </Typography>\n            {inferredSize && (\n                <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', mb: 0.5, fontSize: 10 }}>\n                    Inferred size: {inferredSize}\n                </Typography>\n            )}\n            {error ? (\n                <Typography color=\"error\" variant=\"body2\" sx={{ whiteSpace: 'pre-wrap', fontSize: 11 }}>\n                    {error}\n                </Typography>\n            ) : (\n                <Box ref={containerRef} sx={{ minHeight: 200 }} />\n            )}\n            {warnings.length > 0 && (\n                <Box sx={{ mt: 1, p: 1, bgcolor: '#fff3e0', borderLeft: '3px solid #ff9800' }}>\n                    {warnings.map((w, i) => (\n                        <Typography key={i} variant=\"body2\" color=\"warning.dark\" sx={{ fontSize: 11 }}>\n                            {w.message}\n                        </Typography>\n                    ))}\n                </Box>\n            )}\n            {specJson && (\n                <details style={{ marginTop: 8 }}>\n                    <summary style={{ cursor: 'pointer', fontSize: 11, color: '#888' }}>\n                        ECharts Option\n                    </summary>\n                    <pre style={{ fontSize: 10, maxHeight: 200, overflow: 'auto', background: '#fff3e0', padding: 8, borderRadius: 4 }}>\n                        {specJson}\n                    </pre>\n                </details>\n            )}\n        </Box>\n    );\n});\n\n// ============================================================================\n// Dual Render: VL + ECharts side-by-side\n// ============================================================================\n\nconst DualChart: React.FC<{ testCase: TestCase }> = React.memo(({ testCase }) => {\n    const sharedSpec = useMemo(() => buildSharedInputSpec(testCase), [testCase]);\n    return (\n        <Paper\n            elevation={1}\n            sx={{\n                p: 2, mb: 2, maxWidth: 800,\n                border: '1px solid #e0e0e0',\n            }}\n        >\n            <Typography variant=\"subtitle2\" fontWeight={600} gutterBottom>\n                {testCase.title}\n            </Typography>\n            <Typography variant=\"caption\" color=\"text.secondary\" display=\"block\" mb={1} sx={{ wordBreak: 'break-word' }}>\n                {testCase.description}\n            </Typography>\n            <Box sx={{ display: 'flex', gap: 0.5, flexWrap: 'wrap', mb: 1 }}>\n                {testCase.tags.map(tag => (\n                    <Chip key={tag} label={tag} size=\"small\" variant=\"outlined\"\n                        sx={{ fontSize: 10, height: 20 }} />\n                ))}\n            </Box>\n            <details style={{ marginBottom: 12 }}>\n                <summary style={{ cursor: 'pointer', fontSize: 11, color: '#666', fontWeight: 600 }}>\n                    Spec\n                </summary>\n                <pre style={{ fontSize: 10, maxHeight: 220, overflow: 'auto', background: '#f5f5f5', padding: 8, borderRadius: 4, marginTop: 4 }}>\n                    {sharedSpec.compact}\n                </pre>\n            </details>\n            <Box sx={{ display: 'flex', gap: 3, flexWrap: 'wrap' }}>\n                {/* Vega-Lite side */}\n                <VegaChartInline testCase={testCase} />\n                {/* ECharts side */}\n                <EChartsChart testCase={testCase} />\n            </Box>\n        </Paper>\n    );\n});\n\n/**\n * Inline VL chart (no Paper wrapper — used inside DualChart).\n */\nconst VegaChartInline: React.FC<{ testCase: TestCase; canvasSize?: { width: number; height: number } }> = React.memo(({ testCase, canvasSize = DEFAULT_CANVAS_SIZE }) => {\n    const containerRef = useRef<HTMLDivElement>(null);\n    const [error, setError] = useState<string | null>(null);\n    const [specJson, setSpecJson] = useState<string>('');\n    const [inferredSize, setInferredSize] = useState<string>('');\n\n    useEffect(() => {\n        if (!containerRef.current) return;\n        try {\n            const fullEncodingMap: Record<string, EncodingItem> = {};\n            for (const ch of channels) {\n                fullEncodingMap[ch as string] = testCase.encodingMap[ch as Channel] || {};\n            }\n            const vlSpec = assembleVegaChart(\n                testCase.chartType,\n                fullEncodingMap as any,\n                testCase.fields,\n                testCase.data,\n                testCase.metadata,\n                canvasSize.width, canvasSize.height, true,\n                testCase.chartProperties,\n                1,\n                testCase.assembleOptions?.maxStretch,\n                testCase.assembleOptions,\n            );\n            if (!vlSpec) { setError('No VL spec'); return; }\n\n            const specAny = vlSpec as any;\n            setInferredSize(`${specAny._width ?? '?'} × ${specAny._height ?? '?'}`);\n\n            const displaySpec = { ...specAny };\n            delete displaySpec._warnings;\n            delete displaySpec._width;\n            delete displaySpec._height;\n            setSpecJson(JSON.stringify(displaySpec, null, 2));\n\n            const spec = { ...specAny };\n            delete spec._warnings;\n            delete spec._width;\n            delete spec._height;\n\n            embed(containerRef.current, spec, {\n                actions: { export: true, source: true, compiled: true, editor: true },\n                renderer: 'svg',\n            }).catch(err => setError(`VL embed error: ${err.message}`));\n        } catch (err: any) {\n            setError(`VL error: ${err.message}`);\n        }\n    }, [testCase, canvasSize]);\n\n    return (\n        <Box sx={{ width: 'fit-content' }}>\n            <Typography variant=\"caption\" fontWeight={600} color=\"#1565c0\"\n                sx={{ display: 'block', mb: 0.5, fontSize: 11, letterSpacing: 0.5 }}>\n                Vega-Lite\n            </Typography>\n            {inferredSize && (\n                <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', mb: 0.5, fontSize: 10 }}>\n                    Inferred size: {inferredSize}\n                </Typography>\n            )}\n            {error ? (\n                <Typography color=\"error\" variant=\"body2\" sx={{ whiteSpace: 'pre-wrap', fontSize: 11 }}>\n                    {error}\n                </Typography>\n            ) : (\n                <Box ref={containerRef} sx={{ minHeight: 200 }} />\n            )}\n            {specJson && (\n                <details style={{ marginTop: 8 }}>\n                    <summary style={{ cursor: 'pointer', fontSize: 11, color: '#888' }}>\n                        Vega-Lite Spec\n                    </summary>\n                    <pre style={{ fontSize: 10, maxHeight: 200, overflow: 'auto', background: '#f0f4ff', padding: 8, borderRadius: 4 }}>\n                        {specJson}\n                    </pre>\n                </details>\n            )}\n        </Box>\n    );\n});\n\n// ============================================================================\n// Chart.js Rendering Component\n// ============================================================================\n\n/**\n * Convert a TestCase into a ChartAssemblyInput for assembleChartjs.\n * (Same conversion as testCaseToEChartsInput — shared data model.)\n */\nfunction testCaseToChartJsInput(testCase: TestCase, canvasSize: { width: number; height: number }): ChartAssemblyInput {\n    const encodings: Record<string, ChartEncoding> = {};\n    for (const [channel, encoding] of Object.entries(testCase.encodingMap)) {\n        if (encoding && encoding.fieldID) {\n            encodings[channel] = {\n                field: encoding.fieldID,\n                type: encoding.dtype,\n                aggregate: encoding.aggregate,\n                sortOrder: encoding.sortOrder,\n                sortBy: encoding.sortBy,\n                scheme: encoding.scheme,\n            };\n        }\n    }\n\n    const semanticTypes: Record<string, string> = {};\n    for (const [fieldName, meta] of Object.entries(testCase.metadata)) {\n        if (meta.semanticType) {\n            semanticTypes[fieldName] = meta.semanticType;\n        }\n    }\n\n    return {\n        data: { values: testCase.data },\n        semantic_types: semanticTypes,\n        chart_spec: {\n            chartType: testCase.chartType,\n            encodings,\n            canvasSize,\n            chartProperties: testCase.chartProperties,\n        },\n        options: testCase.assembleOptions,\n    };\n}\n\nconst ChartJsChart: React.FC<{ testCase: TestCase; canvasSize?: { width: number; height: number } }> = React.memo(({ testCase, canvasSize = DEFAULT_CANVAS_SIZE }) => {\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const chartRef = useRef<Chart | null>(null);\n    const [error, setError] = useState<string | null>(null);\n    const [warnings, setWarnings] = useState<ChartWarning[]>([]);\n    const [specJson, setSpecJson] = useState<string>('');\n    const [inferredSize, setInferredSize] = useState<string>('');\n\n    useEffect(() => {\n        if (!canvasRef.current) return;\n\n        try {\n            const cjsConfig = assembleChartjs(testCaseToChartJsInput(testCase, canvasSize));\n\n            if (!cjsConfig) {\n                setError('assembleChartjs returned no config');\n                return;\n            }\n\n            // Extract warnings\n            setWarnings(cjsConfig._warnings || []);\n            setInferredSize(`${cjsConfig._width ?? '?'} × ${cjsConfig._height ?? '?'}`);\n\n            // Build displayable JSON\n            const displayConfig = { ...cjsConfig };\n            delete displayConfig._warnings;\n            delete displayConfig._dataLength;\n            delete displayConfig._width;\n            delete displayConfig._height;\n            setSpecJson(JSON.stringify(displayConfig, null, 2));\n\n            // Set container size — Chart.js responsive mode will fill it\n            const w = cjsConfig._width || 400;\n            const h = cjsConfig._height || 300;\n            const container = canvasRef.current.parentElement;\n            if (container) {\n                container.style.width = `${w}px`;\n                container.style.height = `${h}px`;\n                container.style.position = 'relative';\n            }\n\n            // Destroy previous chart\n            if (chartRef.current) {\n                chartRef.current.destroy();\n                chartRef.current = null;\n            }\n\n            // Clean config for Chart.js\n            const cleanConfig = { ...cjsConfig };\n            delete cleanConfig._warnings;\n            delete cleanConfig._dataLength;\n            delete cleanConfig._width;\n            delete cleanConfig._height;\n\n            // Ensure animation is disabled for gallery rendering\n            if (!cleanConfig.options) cleanConfig.options = {};\n            cleanConfig.options.animation = false;\n            cleanConfig.options.responsive = true;\n            cleanConfig.options.maintainAspectRatio = false;\n\n            chartRef.current = new Chart(canvasRef.current, cleanConfig);\n            setError(null);\n        } catch (err: any) {\n            setError(`Chart.js error: ${err.message}`);\n        }\n\n        return () => {\n            if (chartRef.current) {\n                chartRef.current.destroy();\n                chartRef.current = null;\n            }\n        };\n    }, [testCase, canvasSize]);\n\n    return (\n        <Box sx={{ width: 'fit-content' }}>\n            <Typography variant=\"caption\" fontWeight={600} color=\"#2e7d32\"\n                sx={{ display: 'block', mb: 0.5, fontSize: 11, letterSpacing: 0.5 }}>\n                Chart.js\n            </Typography>\n            {inferredSize && (\n                <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', mb: 0.5, fontSize: 10 }}>\n                    Inferred size: {inferredSize}\n                </Typography>\n            )}\n            {error ? (\n                <Typography color=\"error\" variant=\"body2\" sx={{ whiteSpace: 'pre-wrap', fontSize: 11 }}>\n                    {error}\n                </Typography>\n            ) : (\n                <div style={{ position: 'relative' }}>\n                    <canvas ref={canvasRef} />\n                </div>\n            )}\n            {warnings.length > 0 && (\n                <Box sx={{ mt: 1, p: 1, bgcolor: '#fff3e0', borderLeft: '3px solid #ff9800' }}>\n                    {warnings.map((w, i) => (\n                        <Typography key={i} variant=\"body2\" color=\"warning.dark\" sx={{ fontSize: 11 }}>\n                            {w.message}\n                        </Typography>\n                    ))}\n                </Box>\n            )}\n            {specJson && (\n                <details style={{ marginTop: 8 }}>\n                    <summary style={{ cursor: 'pointer', fontSize: 11, color: '#888' }}>\n                        Chart.js Config\n                    </summary>\n                    <pre style={{ fontSize: 10, maxHeight: 200, overflow: 'auto', background: '#e8f5e9', padding: 8, borderRadius: 4 }}>\n                        {specJson}\n                    </pre>\n                </details>\n            )}\n        </Box>\n    );\n});\n\n// ============================================================================\n// Triple Render: VL + ECharts + Chart.js side-by-side\n// ============================================================================\n\nconst TripleChart: React.FC<{ testCase: TestCase }> = React.memo(({ testCase }) => {\n    return (\n        <Paper\n            elevation={1}\n            sx={{\n                p: 2, mb: 2, maxWidth: 900,\n                border: '1px solid #e0e0e0',\n            }}\n        >\n            <Typography variant=\"subtitle2\" fontWeight={600} gutterBottom>\n                {testCase.title}\n            </Typography>\n            <Typography variant=\"caption\" color=\"text.secondary\" display=\"block\" mb={1} sx={{ wordBreak: 'break-word' }}>\n                {testCase.description}\n            </Typography>\n            <Box sx={{ display: 'flex', gap: 0.5, flexWrap: 'wrap', mb: 1 }}>\n                {testCase.tags.map(tag => (\n                    <Chip key={tag} label={tag} size=\"small\" variant=\"outlined\"\n                        sx={{ fontSize: 10, height: 20 }} />\n                ))}\n            </Box>\n            <Box sx={{ display: 'flex', gap: 3, flexWrap: 'wrap' }}>\n                <VegaChartInline testCase={testCase} canvasSize={{ width: 240, height: 200 }} />\n                <EChartsChart testCase={testCase} canvasSize={{ width: 240, height: 200 }} />\n                <ChartJsChart testCase={testCase} canvasSize={{ width: 240, height: 200 }} />\n            </Box>\n        </Paper>\n    );\n});\n\n// ============================================================================\n// GoFish Rendering Component\n// ============================================================================\n\n/**\n * Convert a TestCase into a ChartAssemblyInput for assembleGoFish.\n * (Same conversion as other backends — shared data model.)\n */\nfunction testCaseToGoFishInput(testCase: TestCase, canvasSize: { width: number; height: number }): ChartAssemblyInput {\n    const encodings: Record<string, ChartEncoding> = {};\n    for (const [channel, encoding] of Object.entries(testCase.encodingMap)) {\n        if (encoding && encoding.fieldID) {\n            encodings[channel] = {\n                field: encoding.fieldID,\n                type: encoding.dtype,\n                aggregate: encoding.aggregate,\n                sortOrder: encoding.sortOrder,\n                sortBy: encoding.sortBy,\n                scheme: encoding.scheme,\n            };\n        }\n    }\n\n    const semanticTypes: Record<string, string> = {};\n    for (const [fieldName, meta] of Object.entries(testCase.metadata)) {\n        if (meta.semanticType) {\n            semanticTypes[fieldName] = meta.semanticType;\n        }\n    }\n\n    return {\n        data: { values: testCase.data },\n        semantic_types: semanticTypes,\n        chart_spec: {\n            chartType: testCase.chartType,\n            encodings,\n            canvasSize,\n            chartProperties: testCase.chartProperties,\n        },\n        options: testCase.assembleOptions,\n    };\n}\n\nconst GoFishChart: React.FC<{ testCase: TestCase; canvasSize?: { width: number; height: number } }> = React.memo(({ testCase, canvasSize = DEFAULT_CANVAS_SIZE }) => {\n    const containerRef = useRef<HTMLDivElement>(null);\n    const [error, setError] = useState<string | null>(null);\n    const [warnings, setWarnings] = useState<ChartWarning[]>([]);\n    const [specDescription, setSpecDescription] = useState<string>('');\n    const [inferredSize, setInferredSize] = useState<string>('');\n\n    useEffect(() => {\n        if (!containerRef.current) return;\n\n        try {\n            const gfSpec = assembleGoFish(testCaseToGoFishInput(testCase, canvasSize));\n\n            if (!gfSpec) {\n                setError('assembleGoFish returned no spec');\n                return;\n            }\n\n            // Extract warnings\n            setWarnings(gfSpec._warnings || []);\n            setInferredSize(`${gfSpec._width ?? '?'} × ${gfSpec._height ?? '?'}`);\n            setSpecDescription(gfSpec._specDescription || '');\n\n            // Set container size\n            if (containerRef.current) {\n                containerRef.current.style.width = `${gfSpec._width || 400}px`;\n                containerRef.current.style.height = `${gfSpec._height || 300}px`;\n                containerRef.current.innerHTML = '';\n            }\n\n            // Render GoFish chart into the container\n            gfSpec.render(containerRef.current);\n            setError(null);\n        } catch (err: any) {\n            setError(`GoFish error: ${err.message}`);\n        }\n    }, [testCase, canvasSize]);\n\n    return (\n        <Box sx={{ width: 'fit-content' }}>\n            <Typography variant=\"caption\" fontWeight={600} color=\"#6a1b9a\"\n                sx={{ display: 'block', mb: 0.5, fontSize: 11, letterSpacing: 0.5 }}>\n                GoFish\n            </Typography>\n            {inferredSize && (\n                <Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: 'block', mb: 0.5, fontSize: 10 }}>\n                    Inferred size: {inferredSize}\n                </Typography>\n            )}\n            {error ? (\n                <Typography color=\"error\" variant=\"body2\" sx={{ whiteSpace: 'pre-wrap', fontSize: 11 }}>\n                    {error}\n                </Typography>\n            ) : (\n                <Box ref={containerRef} sx={{ minHeight: 200 }} />\n            )}\n            {warnings.length > 0 && (\n                <Box sx={{ mt: 1, p: 1, bgcolor: '#f3e5f5', borderLeft: '3px solid #9c27b0' }}>\n                    {warnings.map((w, i) => (\n                        <Typography key={i} variant=\"body2\" color=\"secondary.dark\" sx={{ fontSize: 11 }}>\n                            {w.message}\n                        </Typography>\n                    ))}\n                </Box>\n            )}\n            {specDescription && (\n                <details style={{ marginTop: 8 }}>\n                    <summary style={{ cursor: 'pointer', fontSize: 11, color: '#888' }}>\n                        GoFish Spec\n                    </summary>\n                    <pre style={{ fontSize: 10, maxHeight: 200, overflow: 'auto', background: '#f3e5f5', padding: 8, borderRadius: 4 }}>\n                        {specDescription}\n                    </pre>\n                </details>\n            )}\n        </Box>\n    );\n});\n\n// ============================================================================\n// Quad Render: VL + GoFish side-by-side (for GoFish backend tests)\n// ============================================================================\n\nconst QuadChart: React.FC<{ testCase: TestCase }> = React.memo(({ testCase }) => {\n    return (\n        <Paper\n            elevation={1}\n            sx={{\n                p: 2, mb: 2, maxWidth: 800,\n                border: '1px solid #e0e0e0',\n            }}\n        >\n            <Typography variant=\"subtitle2\" fontWeight={600} gutterBottom>\n                {testCase.title}\n            </Typography>\n            <Typography variant=\"caption\" color=\"text.secondary\" display=\"block\" mb={1} sx={{ wordBreak: 'break-word' }}>\n                {testCase.description}\n            </Typography>\n            <Box sx={{ display: 'flex', gap: 0.5, flexWrap: 'wrap', mb: 1 }}>\n                {testCase.tags.map(tag => (\n                    <Chip key={tag} label={tag} size=\"small\" variant=\"outlined\"\n                        sx={{ fontSize: 10, height: 20 }} />\n                ))}\n            </Box>\n            <Box sx={{ display: 'flex', gap: 3, flexWrap: 'wrap' }}>\n                <VegaChartInline testCase={testCase} canvasSize={{ width: 300, height: 250 }} />\n                <GoFishChart testCase={testCase} canvasSize={{ width: 300, height: 250 }} />\n            </Box>\n        </Paper>\n    );\n});\n\n// ============================================================================\n// Sub-page for a single chart type\n// ============================================================================\n\nconst ChartTypeTestPanel: React.FC<{ chartGroup: string; sectionLabel?: string }> = ({ chartGroup, sectionLabel }) => {\n    const tests = useMemo(() => {\n        const gen = TEST_GENERATORS[chartGroup];\n        return gen ? gen() : [];\n    }, [chartGroup]);\n\n    const isChartJsGroup = chartGroup.startsWith('Chart.js:');\n    const isGoFishGroup = chartGroup.startsWith('GoFish');\n    const isEChartsSection = sectionLabel === 'ECharts Backend';\n\n    if (tests.length === 0) {\n        return (\n            <Box sx={{ p: 4, textAlign: 'center' }}>\n                <Typography color=\"text.secondary\">No test cases defined for \"{chartGroup}\"</Typography>\n            </Box>\n        );\n    }\n\n    return (\n        <Box sx={{ p: 2, display: 'flex', flexWrap: 'wrap', gap: 2, justifyContent: 'flex-start' }}>\n            {tests.map((tc, i) =>\n                isGoFishGroup\n                    ? <QuadChart key={`${chartGroup}-${i}`} testCase={tc} />\n                    : isChartJsGroup\n                        ? <TripleChart key={`${chartGroup}-${i}`} testCase={tc} />\n                        : isEChartsSection\n                            ? <DualChart key={`${chartGroup}-${i}`} testCase={tc} />\n                            : <VegaChart key={`${chartGroup}-${i}`} testCase={tc} />\n            )}\n        </Box>\n    );\n};\n\n\n\n// ============================================================================\n// Main Page\n// ============================================================================\n\nconst ChartGallery: React.FC = () => {\n    const [activeSection, setActiveSection] = useState(0);\n    const [activeCategory, setActiveCategory] = useState(0);\n\n    const section = GALLERY_SECTIONS[activeSection];\n    const activeCategoryName = section?.entries[activeCategory] ?? '';\n\n    return (\n        <Box sx={{ display: 'flex', flexDirection: 'column', height: '100vh', overflow: 'hidden' }}>\n            {/* Section tabs (top level) */}\n            <Box sx={{ borderBottom: 1, borderColor: 'divider', px: 2 }}>\n                <Tabs\n                    value={activeSection}\n                    onChange={(_, v) => { setActiveSection(v); setActiveCategory(0); }}\n                    sx={{\n                        minHeight: 36,\n                        '& .MuiTab-root': { minHeight: 36, py: 0.5, textTransform: 'none', fontWeight: 600, fontSize: 14 },\n                    }}\n                >\n                    {GALLERY_SECTIONS.map((s, i) => (\n                        <Tab key={s.label} label={s.label} value={i} />\n                    ))}\n                </Tabs>\n            </Box>\n\n            {/* Category chips within the active section */}\n            <Box sx={{ px: 2, py: 1, display: 'flex', gap: 0.5, flexWrap: 'wrap', bgcolor: '#f5f5f5', borderBottom: 1, borderColor: 'divider' }}>\n                <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mr: 1, lineHeight: '28px' }}>\n                    {section.description}:\n                </Typography>\n                {section.entries.map((entry, ei) => (\n                    <Chip\n                        key={entry}\n                        label={entry}\n                        size=\"small\"\n                        onClick={() => setActiveCategory(ei)}\n                        variant={ei === activeCategory ? 'filled' : 'outlined'}\n                        color={ei === activeCategory ? 'primary' : 'default'}\n                        sx={{ fontSize: 12, height: 26, cursor: 'pointer' }}\n                    />\n                ))}\n            </Box>\n\n            {/* Chart content */}\n            <Box sx={{ flex: 1, overflow: 'auto', bgcolor: '#fafafa' }}>\n                <ChartTypeTestPanel chartGroup={activeCategoryName} sectionLabel={section?.label} />\n            </Box>\n        </Box>\n    );\n};\n\nexport default ChartGallery;\n"
  },
  {
    "path": "src/views/ChartRecBox.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { FC, useEffect, useState, useRef } from 'react'\nimport { transition } from '../app/tokens';\nimport { useSelector, useDispatch } from 'react-redux'\nimport { DataFormulatorState, dfActions, generateFreshChart } from '../app/dfSlice';\n\nimport { AppDispatch } from '../app/store';\n\nimport {\n    Box,\n    Typography,\n    IconButton,\n    Tooltip,\n    TextField,\n    Card,\n    SxProps,\n    LinearProgress,\n    CircularProgress,\n    alpha,\n    useTheme,\n    Theme,\n} from '@mui/material';\n\nimport React from 'react';\n\nimport { Chart } from \"../components/ComponentType\";\n\nimport '../scss/EncodingShelf.scss';\n\nimport { resolveRecommendedChart } from '../app/utils';\nimport { useFormulateData } from '../app/useFormulateData';\n\nimport { AgentIcon as PrecisionManufacturing } from '../icons';\nimport TipsAndUpdatesIcon from '@mui/icons-material/TipsAndUpdates';\nimport { renderTextWithEmphasis } from './EncodingShelfCard';\nimport { ThinkingBufferEffect } from '../components/FunComponents';\n\n// when this is set to true, the new chart will be focused automatically\nconst AUTO_FOCUS_NEW_CHART = false;\n\nexport interface ChartRecBoxProps {\n    tableId: string;\n    placeHolderChartId?: string;\n    sx?: SxProps;\n}\n\nexport const IdeaChip: FC<{\n    mini?: boolean,\n    idea: {text?: string, questions?: string[], goal: string, difficulty: 'easy' | 'medium' | 'hard', type?: 'branch' | 'deep_dive'} \n    theme: Theme, \n    onClick: () => void, \n    sx?: SxProps,\n    disabled?: boolean,\n}> = function ({mini, idea, theme, onClick, sx, disabled}) {\n\n    const getDifficultyColor = (difficulty: 'easy' | 'medium' | 'hard') => {\n        switch (difficulty) {\n            case 'easy':\n                return theme.palette.success.main;\n            case 'medium':\n                return theme.palette.primary.main;\n            case 'hard':\n                return theme.palette.warning.main;\n            default:\n                return theme.palette.text.secondary;\n        }\n    };\n\n    let styleColor = getDifficultyColor(idea.difficulty || 'medium');\n\n    let ideaText = idea.goal;\n\n    let ideaTextComponent = renderTextWithEmphasis(ideaText, {\n        borderRadius: '0px',\n        borderBottom: `1px solid`,\n        borderColor: alpha(styleColor, 0.4),\n        fontSize: '11px',\n        lineHeight: 1.4,\n        backgroundColor: alpha(styleColor, 0.05),\n    });\n\n    return (\n        <Box\n            sx={{\n                display: 'inline-flex',\n                alignItems: 'center',\n                padding: '4px 6px',\n                fontSize: '11px',\n                minHeight: '24px',\n                height: 'auto',\n                borderRadius: 2,\n                border: `1px solid ${alpha(styleColor, 0.2)}`,\n                transition: transition.fast,\n                backgroundColor: alpha(theme.palette.background.paper, 0.9),\n                cursor: disabled ? 'default' : 'pointer',\n                opacity: disabled ? 0.6 : 1,\n                '&:hover': disabled ? 'none' : {\n                    borderColor: alpha(styleColor, 0.7),\n                    transform: 'translateY(-1px)',\n                },\n                ...sx\n            }}\n            onClick={disabled ? undefined : onClick}\n        >\n            <Typography component=\"div\" sx={{ fontSize: '11px', color: getDifficultyColor(idea.difficulty || 'medium') }}>\n                {ideaTextComponent}\n            </Typography>\n        </Box>\n    );\n};\n\nexport const ChartRecBox: FC<ChartRecBoxProps> = function ({ tableId, placeHolderChartId, sx }) {\n    const dispatch = useDispatch<AppDispatch>();\n    const theme = useTheme();\n\n    // reference to states\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const { streamIdeas, formulateData } = useFormulateData();\n\n    const focusNextChartRef = useRef<boolean>(true);\n    \n    const modeColor = theme.palette.secondary.main;\n    \n    const [prompt, setPrompt] = useState<string>(\"\");\n    const [isFormulating, setIsFormulating] = useState<boolean>(false);\n    const [ideas, setIdeas] = useState<{text: string, goal: string, difficulty: 'easy' | 'medium' | 'hard'}[]>([]);\n\n    const [thinkingBuffer, setThinkingBuffer] = useState<string>(\"\");\n\n    let thinkingBufferEffect = <ThinkingBufferEffect text={thinkingBuffer.slice(-60)} sx={{ width: '46%' }} />;\n    \n    // Add state for loading ideas\n    const [isLoadingIdeas, setIsLoadingIdeas] = useState<boolean>(false);\n\n    // Use the provided tableId and find additional available tables for multi-table operations\n    const currentTable = tables.find(t => t.id === tableId);\n\n    // All root/anchored tables, with current source tables ordered first for context priority\n    const rootTables = tables.filter(t => t.derive === undefined || t.anchored);\n    const priorityIds = (currentTable?.derive && !currentTable.anchored)\n        ? currentTable.derive.source\n        : [tableId];\n    let selectedTableIds = [\n        ...priorityIds.filter(id => rootTables.some(t => t.id === id)),\n        ...rootTables.map(t => t.id).filter(id => !priorityIds.includes(id))\n    ];\n    \n    // Function to get a question from the list with cycling\n    const getQuestion = (): string => {\n        return \"show something interesting about the data\";\n    };\n\n    // Function to get ideas from the interactive explore agent\n    const getIdeasFromAgent = async (startQuestion?: string) => {\n        if (!currentTable || isLoadingIdeas) return;\n\n        await streamIdeas({\n            actionTableIds: selectedTableIds,\n            currentTable,\n            onIdeas: setIdeas,\n            onThinkingBuffer: setThinkingBuffer,\n            onLoadingChange: setIsLoadingIdeas,\n            startQuestion,\n        });\n        setThinkingBuffer(\"\");\n    };\n\n    useEffect(() => {\n        setIdeas([]);\n    }, [tableId]);\n\n    // Handle tab key press for auto-completion\n    const handleKeyDown = (event: React.KeyboardEvent) => {\n        if (event.key === 'Tab' && !event.shiftKey) {\n            event.preventDefault();\n            if (prompt.trim() === \"\") {\n                setPrompt(getQuestion());\n            }\n        } else if (event.key === 'Enter' && prompt.trim() !== \"\") {\n            event.preventDefault();\n            focusNextChartRef.current = true;\n            deriveDataFromNL(prompt.trim());\n        }\n    };\n\n    const deriveDataFromNL = (instruction: string) => {\n\n        if (selectedTableIds.length === 0 || instruction.trim() === \"\") {\n            return;\n        }\n\n        if (placeHolderChartId) {\n            dispatch(dfActions.changeChartRunningStatus({chartId: placeHolderChartId, status: true}));\n        }\n\n        const actionId = `deriveDataFromNL_${String(Date.now())}`;\n        dispatch(dfActions.updateAgentWorkInProgress({actionId: actionId, originTableId: tableId, description: instruction, status: 'running', hidden: false,\n            message: { content: instruction, role: 'user', observeTableId: tableId }}));\n\n        // Validate table selection\n        const firstTableId = selectedTableIds[0];\n        if (!firstTableId) {\n            dispatch(dfActions.addMessages({\n                \"timestamp\": Date.now(),\n                \"type\": \"error\",\n                \"component\": \"chart builder\",\n                \"value\": \"No table selected for data formulation.\",\n            }));\n            return;\n        }\n\n        let refChart = generateFreshChart(tableId, 'Auto') as Chart;\n        refChart.source = 'trigger';\n\n        formulateData({\n            instruction,\n            mode: 'formulate',\n            actionTableIds: selectedTableIds,\n            currentTable: currentTable!,\n            triggerChart: refChart,\n            createChart: ({ candidateTable, refinedGoal, currentConcepts }) => {\n                let newChart = resolveRecommendedChart(refinedGoal, currentConcepts, candidateTable);\n                dispatch(dfActions.addChart(newChart));\n                if (focusNextChartRef.current || AUTO_FOCUS_NEW_CHART) {\n                    focusNextChartRef.current = false;\n                    dispatch(dfActions.setFocused({ type: 'chart', chartId: newChart.id }));\n                }\n                return newChart.id;\n            },\n            onStarted: () => {\n                setIsFormulating(true);\n            },\n            onSuccess: ({ displayInstruction, candidateTable }) => {\n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"component\": \"chart builder\",\n                    \"type\": \"success\",\n                    \"value\": `Data formulation: \"${displayInstruction}\"`\n                }));\n                dispatch(dfActions.updateAgentWorkInProgress({\n                    actionId, description: displayInstruction || instruction, status: 'completed', hidden: false,\n                    message: { content: displayInstruction || instruction, role: 'action', resultTableId: candidateTable.id }\n                }));\n                setPrompt(\"\");\n            },\n            onError: () => {\n                dispatch(dfActions.updateAgentWorkInProgress({\n                    actionId, description: instruction, status: 'failed', hidden: false,\n                    message: { content: 'Data formulation failed.', role: 'error' }\n                }));\n            },\n            onFinally: () => {\n                setIsFormulating(false);\n                if (placeHolderChartId) {\n                    dispatch(dfActions.changeChartRunningStatus({chartId: placeHolderChartId, status: false}));\n                }\n            },\n        });\n    };\n\n    return (\n        <Box sx={{ maxWidth: \"600px\", display: 'flex', flexDirection: 'column', ...sx }}>\n            <Box sx={{ display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 1 }}>\n            <Card variant='outlined' sx={{ \n                flex: 1,\n                px: 1, \n                pt: 0.5,\n                pb: 0.25,\n                display: 'flex', \n                flexDirection: 'column',\n                gap: 0.5,\n                position: 'relative',\n                borderWidth: 1.5,\n                borderColor: alpha(theme.palette.text.primary, 0.15),\n                borderRadius: '8px',\n                overflow: 'visible',\n                transition: transition.fast,\n                '&:hover': {\n                    borderColor: alpha(theme.palette.primary.main, 0.7),\n                },\n                '&:focus-within': {\n                    borderColor: alpha(theme.palette.primary.main, 0.8),\n                },\n            }}>\n                {isFormulating && (\n                    <LinearProgress \n                        sx={{ \n                            position: 'absolute',\n                            bottom: 0,\n                            left: 0,\n                            right: 0,\n                            zIndex: 1000,\n                            height: '2px',\n                            borderRadius: '0 0 8px 8px',\n                            backgroundColor: alpha(modeColor, 0.15),\n                            '& .MuiLinearProgress-bar': {\n                                backgroundColor: modeColor\n                            }\n                        }} \n                    />\n                )}\n                <Box sx={{ display: 'flex', flexDirection: 'row', gap: 0.5, alignItems: 'flex-end' }}>\n                    <TextField\n                        variant=\"standard\"\n                        sx={{\n                            flex: 1,\n                            \"& .MuiInput-input\": { fontSize: '14px', lineHeight: 1.5 },\n                            \"& .MuiInput-underline:before\": { borderBottom: 'none' },\n                            \"& .MuiInput-underline:hover:not(.Mui-disabled):before\": { borderBottom: 'none' },\n                            \"& .MuiInput-underline:not(.Mui-disabled):before\": { borderBottom: 'none' },\n                            \"& .MuiInput-underline.Mui-disabled:before\": { borderBottom: 'none' },\n                            \"& .MuiInput-underline.Mui-disabled:after\": { borderBottom: 'none' },\n                            \"& .MuiInput-underline:after\": { borderBottom: 'none' },\n                        }}\n                        disabled={isFormulating || isLoadingIdeas}\n                        onChange={(event) => setPrompt(event.target.value)}\n                        onKeyDown={handleKeyDown}\n                        slotProps={{\n                            inputLabel: { shrink: true },\n                            input: {\n                                endAdornment: <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.25, flexShrink: 0 }}>\n                                    <Tooltip title=\"Generate chart from description\">\n                                        <span>\n                                            <IconButton \n                                                size=\"medium\"\n                                                disabled={isFormulating || isLoadingIdeas || !currentTable || prompt.trim() === \"\"}\n                                                sx={{\n                                                    color: modeColor,\n                                                    '&:hover': {\n                                                        backgroundColor: alpha(modeColor, 0.08)\n                                                    }\n                                                }}\n                                                onClick={() => { \n                                                    focusNextChartRef.current = true;\n                                                    deriveDataFromNL(prompt.trim());\n                                                }}\n                                            >\n                                                {isFormulating ? <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center'}}>\n                                                    <CircularProgress size={24} sx={{ color: modeColor }} />\n                                                </Box> : <PrecisionManufacturing sx={{fontSize: 24}} />}\n                                            </IconButton>\n                                        </span>\n                                    </Tooltip>\n                                </Box>\n                            }\n                        }}\n                        value={prompt}\n                        placeholder={`${getQuestion()}`}\n                        fullWidth\n                        multiline\n                        maxRows={4}\n                        minRows={1}\n                    />\n                </Box>\n            </Card>\n            <Tooltip title={ideas.length > 0 ? \"Refresh ideas\" : \"Get ideas\"}>\n                <span>\n                    <IconButton \n                        size=\"medium\"\n                        disabled={isFormulating || isLoadingIdeas || !currentTable}\n                        sx={{\n                            color: modeColor,\n                            '&:hover': {\n                                backgroundColor: alpha(modeColor, 0.08)\n                            }\n                        }}\n                        onClick={() => getIdeasFromAgent()}\n                    >\n                        {isLoadingIdeas ? \n                            <CircularProgress size={24} sx={{ color: modeColor }} />\n                            : <TipsAndUpdatesIcon sx={{\n                                fontSize: 24,\n                                animation: ideas.length == 0 ? 'colorWipe 5s ease-in-out infinite' : 'none',\n                                '@keyframes colorWipe': {\n                                    '0%, 90%': { scale: 1 },\n                                    '95%': { scale: 1.2 },\n                                    '100%': { scale: 1 },\n                                },\n                            }} />}\n                    </IconButton>\n                </span>\n            </Tooltip>\n            </Box>\n            {(ideas.length > 0 || thinkingBuffer) && (\n                <Box sx={{\n                    display: 'flex', \n                    flexWrap: 'wrap', \n                    gap: 0.5,\n                    py: 1,\n                }}>\n                    {ideas.map((idea, index) => (\n                        <IdeaChip\n                            mini\n                            key={index}\n                            idea={idea}\n                            theme={theme}\n                            onClick={() => {\n                                focusNextChartRef.current = true;\n                                setPrompt(idea.text);\n                                deriveDataFromNL(idea.text);\n                            }}\n                            disabled={isFormulating}\n                            sx={{\n                                width: 'calc(50% - 16px)',\n                            }}\n                        />\n                    ))}\n                    {isLoadingIdeas && thinkingBuffer && thinkingBufferEffect}\n                </Box>\n            )}\n        </Box>\n    );\n};"
  },
  {
    "path": "src/views/ChartRenderService.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ChartRenderService — headless chart rendering background service.\n *\n * This invisible component watches all charts in the Redux store and\n * renders them off-screen using Vega's headless rendering pipeline:\n *   vegaLite.compile() → vega.parse() → new vega.View() → toSVG() / toImageURL('png')\n *\n * Results are stored in:\n *   1. Module-level chartCache (SVG + PNG) — for VisualizationView to read\n *   2. chart.thumbnail in Redux (PNG data URL) — for DataThread <img> tags\n *\n * This eliminates redundant DOM-based Vega rendering in DataThread\n * and EncodingShelfThread, replacing heavy <VegaLite> / embed() calls\n * with lightweight <img src={thumbnail}> elements.\n */\n\nimport { FC, useEffect, useRef, useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { DataFormulatorState, dfActions, dfSelectors } from '../app/dfSlice';\nimport { Chart, DictTable, FieldItem } from '../components/ComponentType';\nimport { assembleVegaChart, prepVisTable } from '../app/utils';\nimport { getDataTable, checkChartAvailability } from './VisualizationView';\nimport { getCachedChart, setCachedChart, computeCacheKey, invalidateChart, ChartCacheEntry } from '../app/chartCache';\nimport { compile } from 'vega-lite';\nimport { parse, View } from 'vega';\nimport _ from 'lodash';\n\n/** Thumbnail rendering dimensions (matches DataThread's 100×80 spec assembly) */\nconst THUMB_WIDTH = 120;\nconst THUMB_HEIGHT = 90;\n\n/** Full-size base rendering dimensions */\nconst FULL_WIDTH = 300;\nconst FULL_HEIGHT = 300;\n\ninterface RenderJob {\n    chart: Chart;\n    table: DictTable;\n    conceptShelfItems: FieldItem[];\n    cacheKey: string;\n}\n\n/**\n * Render a Vega-Lite spec headlessly to SVG and PNG.\n * Uses vega.View with no DOM attachment — pure string/canvas output.\n */\nasync function renderHeadless(\n    vlSpec: any,\n): Promise<{ svg: string; pngDataUrl: string }> {\n    // Compile Vega-Lite → Vega spec\n    const vgSpec = compile(vlSpec as any).spec;\n\n    // Parse into Vega runtime dataflow\n    const runtime = parse(vgSpec);\n\n    // Create a headless View (no DOM container needed)\n    const view = new View(runtime, { renderer: 'none' });\n\n    // Initialize the view (runs dataflow)\n    await view.runAsync();\n\n    // Generate SVG string and PNG data URL in parallel\n    const [svg, pngDataUrl] = await Promise.all([\n        view.toSVG(),\n        view.toImageURL('png', 2),  // scale factor 2 for retina\n    ]);\n\n    // Finalize the view to free resources\n    view.finalize();\n\n    return { svg, pngDataUrl };\n}\n\n/**\n * Scale a PNG data URL down to the given dimensions.\n * Renders the full-size image onto a smaller canvas to produce a\n * properly downscaled thumbnail that preserves the chart's visual\n * appearance (avoiding Vega-Lite layout optimizations for small sizes).\n */\nasync function scalePngDown(\n    pngDataUrl: string,\n    targetWidth: number,\n    targetHeight: number,\n): Promise<string> {\n    const img = new Image();\n    await new Promise<void>((resolve, reject) => {\n        img.onload = () => resolve();\n        img.onerror = reject;\n        img.src = pngDataUrl;\n    });\n\n    // Compute scaled size that fits within target bounds while preserving aspect ratio\n    const scale = Math.min(targetWidth / img.width, targetHeight / img.height, 1);\n    const w = Math.round(img.width * scale);\n    const h = Math.round(img.height * scale);\n\n    const canvas = document.createElement('canvas');\n    canvas.width = w * 2;   // 2x for retina\n    canvas.height = h * 2;\n    const ctx = canvas.getContext('2d')!;\n    ctx.fillStyle = 'white';\n    ctx.fillRect(0, 0, canvas.width, canvas.height);\n    ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n    return canvas.toDataURL('image/png');\n}\n\nexport const ChartRenderService: FC = () => {\n    const dispatch = useDispatch();\n\n    const charts = useSelector(dfSelectors.getAllCharts);\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n    const chartSynthesisInProgress = useSelector((state: DataFormulatorState) => state.chartSynthesisInProgress);\n    const maxStretchFactor = useSelector((state: DataFormulatorState) => state.config.maxStretchFactor);\n\n    // Track which charts are currently being rendered to avoid duplicates\n    const renderingRef = useRef<Set<string>>(new Set());\n\n    // Track previous chart count for cleanup\n    const prevChartIdsRef = useRef<Set<string>>(new Set());\n\n    const processChart = useCallback(async (job: RenderJob) => {\n        const { chart, table, conceptShelfItems: items, cacheKey } = job;\n\n        // Skip if already rendering this chart\n        if (renderingRef.current.has(chart.id)) return;\n        renderingRef.current.add(chart.id);\n\n        try {\n            // --- Prepare data (mirror MemoizedChartObject's pipeline) ---\n            // Use all rows so the thumbnail faithfully matches the main chart's\n            // appearance (sort order, aggregation, overflow filtering, etc.).\n            let visTableRows: any[] = structuredClone(table.rows);\n\n            // Pre-aggregate for the encoding map\n            visTableRows = prepVisTable(visTableRows, items, chart.encodingMap);\n\n            // --- Assemble full-size spec (with tooltips) ---\n            // We render at the default full size and scale down for the thumbnail,\n            // so the chart looks like a miniature of the real thing instead of a\n            // completely different chart due to Vega-Lite layout optimizations.\n            const fullSpec = assembleVegaChart(\n                chart.chartType,\n                chart.encodingMap,\n                items,\n                visTableRows,\n                table.metadata,\n                FULL_WIDTH,\n                FULL_HEIGHT,\n                true,   // add tooltips\n                chart.config,\n                1,\n                maxStretchFactor,\n            );\n\n            if (!fullSpec || fullSpec === \"Table\") return;\n            fullSpec['background'] = 'white';\n\n            // --- Render headlessly (single full-size render) ---\n            const fullResult = await renderHeadless(fullSpec);\n\n            // Scale the full-size PNG down to thumbnail dimensions\n            const thumbnailPng = await scalePngDown(\n                fullResult.pngDataUrl,\n                THUMB_WIDTH,\n                THUMB_HEIGHT,\n            );\n\n            // --- Store in cache ---\n            const entry: ChartCacheEntry = {\n                svg: fullResult.svg,\n                thumbnailDataUrl: thumbnailPng,\n                specKey: cacheKey,\n            };\n            setCachedChart(chart.id, entry);\n\n            // --- Dispatch thumbnail to Redux for DataThread ---\n            dispatch(dfActions.updateChartThumbnail({\n                chartId: chart.id,\n                thumbnail: thumbnailPng,\n            }));\n\n        } catch (err) {\n            // Rendering failures are non-fatal — chart will just show skeleton\n            console.warn(`ChartRenderService: failed to render chart ${chart.id}`, err);\n        } finally {\n            renderingRef.current.delete(chart.id);\n        }\n    }, [dispatch]);\n\n    useEffect(() => {\n        // Clean up cache entries for deleted charts\n        const currentIds = new Set(charts.map(c => c.id));\n        for (const prevId of prevChartIdsRef.current) {\n            if (!currentIds.has(prevId)) {\n                invalidateChart(prevId);\n            }\n        }\n        prevChartIdsRef.current = currentIds;\n\n        // Build render jobs for charts that need (re-)rendering\n        const jobs: RenderJob[] = [];\n\n        for (const chart of charts) {\n            // Skip non-renderable chart types\n            if (['Auto', '?', 'Table'].includes(chart.chartType)) continue;\n\n            // Skip charts whose synthesis is in progress\n            if (chartSynthesisInProgress.includes(chart.id)) continue;\n\n            // Get the chart's data table\n            const table = getDataTable(chart, tables, charts, conceptShelfItems);\n            if (!table || table.rows.length === 0) continue;\n\n            // Check if chart fields are available in the table\n            if (!checkChartAvailability(chart, conceptShelfItems, table.rows)) continue;\n\n            // Compute cache key and check if rendering is needed\n            const cacheKey = computeCacheKey(\n                chart.chartType,\n                chart.encodingMap,\n                chart.config,\n                table.rows.length,\n                table.contentHash,\n                table.id,\n                table.metadata,\n            );\n\n            const cached = getCachedChart(chart.id);\n            if (cached && cached.specKey === cacheKey) {\n                // Already up-to-date — but ensure Redux thumbnail is set\n                // (e.g., after page reload where module cache is cleared but Redux persisted)\n                if (!chart.thumbnail || chart.thumbnail !== cached.thumbnailDataUrl) {\n                    dispatch(dfActions.updateChartThumbnail({\n                        chartId: chart.id,\n                        thumbnail: cached.thumbnailDataUrl,\n                    }));\n                }\n                continue;\n            }\n\n            jobs.push({ chart, table, conceptShelfItems, cacheKey });\n        }\n\n        // Process jobs sequentially to avoid overwhelming the browser\n        // Use a small delay between renders to keep the UI responsive\n        if (jobs.length > 0) {\n            let cancelled = false;\n\n            const processJobs = async () => {\n                for (const job of jobs) {\n                    if (cancelled) break;\n                    await processChart(job);\n                    // Small yield to let React process updates\n                    await new Promise(resolve => setTimeout(resolve, 16));\n                }\n            };\n\n            processJobs();\n\n            return () => { cancelled = true; };\n        }\n    }, [charts, tables, conceptShelfItems, chartSynthesisInProgress, processChart, dispatch]);\n\n    // This component renders nothing\n    return null;\n};\n"
  },
  {
    "path": "src/views/ChartifactDialog.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Chart, DictTable, FieldItem } from '../components/ComponentType';\nimport { assembleVegaChart, prepVisTable } from '../app/utils';\nimport { exportTableToDsv } from '../data/utils';\nimport { ClientConfig } from '../app/dfSlice';\n\n// Function to generate CSS styling based on report type\nconst generateStyleCSS = (style: string): string => {\n    // Font families\n    const FONT_FAMILY_SYSTEM = '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, \"Apple Color Emoji\", Arial, sans-serif';\n    const FONT_FAMILY_SERIF = 'Georgia, Cambria, \"Times New Roman\", Times, serif';\n    const FONT_FAMILY_MONO = '\"SFMono-Regular\", Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace';\n\n    if (style === 'social post' || style === 'short note') {\n        // Twitter/X style - compact, modern\n        return `\\`\\`\\`css\nbody {\n    margin: 20px;\n    padding: 20px;\n    background-color: white;\n    border: 1px solid rgb(207, 217, 222);\n    border-radius: 12px;\n    font-family: ${FONT_FAMILY_SYSTEM};\n    font-size: 0.875rem;\n    font-weight: 400;\n    line-height: 1.4;\n    color: rgb(15, 20, 25);\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: rgb(15, 20, 25);\n    font-weight: 700;\n}\n\ncode {\n    background-color: rgba(29, 155, 240, 0.1);\n    color: rgb(29, 155, 240);\n    padding: 0.1em 0.25em;\n    border-radius: 3px;\n    font-size: 0.8125rem;\n    font-weight: 500;\n    font-family: ${FONT_FAMILY_MONO};\n}\n\nstrong {\n    font-weight: 600;\n    color: rgb(15, 20, 25);\n}\n\\`\\`\\`\n\n`;\n    } else if (style === 'executive summary') {\n        // Professional/business look\n        return `\\`\\`\\`css\nbody {\n    max-width: 700px;\n    margin: 20px auto;\n    padding: 20px;\n    background-color: white;\n    font-family: ${FONT_FAMILY_SERIF};\n    font-size: 0.875rem;\n    line-height: 1.5;\n    color: rgb(33, 37, 41);\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: rgb(20, 24, 28);\n    font-weight: 600;\n}\n\ncode {\n    background-color: rgb(248, 249, 250);\n    color: rgb(0, 123, 255);\n    padding: 0.1em 0.25em;\n    border-radius: 2px;\n    font-size: 0.75rem;\n    font-family: ${FONT_FAMILY_MONO};\n}\n\nstrong {\n    font-weight: 600;\n    color: rgb(20, 24, 28);\n}\n\\`\\`\\`\n\n`;\n    } else {\n        // Default \"blog post\" style - Notion-like\n        return `\\`\\`\\`css\nbody {\n    max-width: 800px;\n    margin: 20px auto;\n    padding: 0 48px;\n    background-color: #ffffff;\n    font-family: ${FONT_FAMILY_SYSTEM};\n    font-size: 0.9375rem;\n    line-height: 1.75;\n    font-weight: 400;\n    letter-spacing: 0.003em;\n    color: rgb(55, 53, 47);\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: rgb(37, 37, 37);\n    font-weight: 700;\n    letter-spacing: -0.01em;\n}\n\ncode {\n    background-color: rgba(135, 131, 120, 0.15);\n    color: #eb5757;\n    padding: 0.2em 0.4em;\n    border-radius: 3px;\n    font-size: 0.875rem;\n    font-weight: 500;\n    font-family: ${FONT_FAMILY_MONO};\n}\n\nstrong {\n    font-weight: 600;\n    color: rgb(37, 37, 37);\n}\n\\`\\`\\`\n\n`;\n    }\n};\n\n// Function to convert report markdown to Chartifact format\nexport const convertToChartifact = (reportMarkdown: string, reportStyle: string, charts: Chart[], tables: DictTable[], conceptShelfItems: FieldItem[], config: ClientConfig) => {\n    try {\n        // Extract chart IDs from the report markdown images\n        // Images are in format: [IMAGE(chart-id)]\n        const imageRegex = /\\[IMAGE\\(([^)]+)\\)\\]/g;\n        let result = reportMarkdown;\n        let match;\n        const chartReplacements: Array<{ original: string; specReplacement: string; dataName: string; csvContent: string }> = [];\n\n        while ((match = imageRegex.exec(reportMarkdown)) !== null) {\n            const [fullMatch, chartId] = match;\n\n            // Find the chart in the store using the chart ID\n            const chart = charts.find(c => c.id === chartId);\n            if (!chart) {\n                console.warn(`Chart with id ${chartId} not found in store`);\n                continue;\n            }\n\n            // Get the chart's data table from the store using chart.tableRef\n            const chartTable = tables.find(t => t.id === chart.tableRef);\n            if (!chartTable) {\n                console.warn(`Table for chart ${chartId} not found`);\n                continue;\n            }\n\n            // Skip non-visual chart types\n            if (chart.chartType === 'Table' || chart.chartType === '?') {\n                continue;\n            }\n\n            try {\n                // Preprocess the data for aggregations\n                const processedRows = prepVisTable(chartTable.rows, conceptShelfItems, chart.encodingMap);\n\n                // Assemble the Vega-Lite spec\n                const vegaSpec = assembleVegaChart(\n                    chart.chartType,\n                    chart.encodingMap,\n                    conceptShelfItems,\n                    processedRows,\n                    chartTable.metadata,\n                    config.defaultChartWidth,\n                    config.defaultChartHeight,\n                    true,\n                    chart.config,\n                    1,\n                    config.maxStretchFactor,\n                );\n\n                // Convert the spec to use named data source\n                const dataName = `chartData_${chartId.replace(/[^a-zA-Z0-9]/g, '_')}`;\n                const modifiedSpec = {\n                    ...vegaSpec,\n                    data: { name: dataName }\n                };\n\n                // Convert table rows to CSV format using the utility function\n                const csvContent = exportTableToDsv(chartTable, ',');\n\n                // Create the Chartifact spec replacement (without CSV)\n                const specReplacement = `\n\n\\`\\`\\`json vega-lite\n${JSON.stringify(modifiedSpec, null, 2)}\n\\`\\`\\`\n`;\n\n                chartReplacements.push({\n                    original: fullMatch,\n                    specReplacement,\n                    dataName,\n                    csvContent\n                });\n            } catch (error) {\n                console.error(`Error processing chart ${chartId}:`, error);\n            }\n        }\n\n        // Apply spec replacements to the markdown\n        for (const { original, specReplacement } of chartReplacements) {\n            result = result.replace(original, specReplacement);\n        }\n\n        result += '\\n\\n---\\ncreated with AI using [Data Formulator](https://github.com/microsoft/data-formulator)\\n\\n';\n\n        // Prepend CSS styling based on report type\n        const cssStyles = generateStyleCSS(reportStyle);\n        result += cssStyles;\n\n        // Append all CSV data blocks at the bottom\n        if (chartReplacements.length > 0) {\n            result += '\\n\\n';\n            for (const { dataName, csvContent } of chartReplacements) {\n                result += `\\n\\`\\`\\`csv ${dataName}\\n${csvContent}\\n\\`\\`\\`\\n`;\n            }\n        }\n\n        return result;\n    } catch (error) {\n        console.error('Error converting to Chartifact:', error);\n        throw error;\n    }\n};\n\n\n// Function to open Chartifact in a new tab and send markdown via postMessage\nexport const openChartifactViewer = async (chartifactMarkdown: string) => {\n    try {\n        // Open the Chartifact viewer in a new tab\n        const chartifactWindow = window.open(\n            'https://microsoft.github.io/chartifact/view/?post',\n            '_blank'\n        );\n\n        if (!chartifactWindow) {\n            //showMessage('Failed to open Chartifact viewer. Please allow popups.', 'error');\n            return;\n        }\n\n        // Listen for hostStatus messages from the Chartifact viewer\n        const handleMessage = (event: MessageEvent) => {\n            // Verify the message is from the Chartifact viewer\n            if (event.origin !== 'https://microsoft.github.io') {\n                return;\n            }\n\n            const message = event.data;\n\n            // Check if this is a hostStatus message\n            if (message.type === 'hostStatus' && message.hostStatus === 'ready') {\n                // Send the render request when the host is ready\n                const renderRequest: {\n                    type: 'hostRenderRequest';\n                    title: string;\n                    markdown?: string;\n                    interactiveDocument?: any;\n                } = {\n                    type: 'hostRenderRequest',\n                    title: 'Data Formulator Report',\n                    markdown: chartifactMarkdown\n                };\n\n                chartifactWindow.postMessage(renderRequest, 'https://microsoft.github.io');\n\n                //Call here to show source\n                const toolbarControl: {\n                    type: 'hostToolbarControl';\n                    showSource?: boolean;\n                } = {\n                    type: 'hostToolbarControl',\n                    showSource: true\n                };\n\n                chartifactWindow.postMessage(toolbarControl, 'https://microsoft.github.io');\n                \n                // Remove the event listener after sending\n                window.removeEventListener('message', handleMessage);\n            }\n        };\n\n        // Add event listener for messages from the Chartifact viewer\n        window.addEventListener('message', handleMessage);\n\n        //showMessage('Opened Chartifact viewer in a new tab', 'success');\n    } catch (error) {\n        console.error('Error opening Chartifact viewer:', error);\n        //showMessage('Failed to prepare Chartifact report', 'error');\n    }\n};\n"
  },
  {
    "path": "src/views/ChatDialog.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { FC, useRef, useEffect } from 'react'\nimport { radius } from '../app/tokens';\nimport { Divider } from \"@mui/material\";\nimport {\n\t\tCard,\n\t\tBox,\n\t\tTypography,\n\t\tDialog,\n        DialogTitle,\n        DialogContent,\n        DialogActions,\n        Button,\n        styled,\n        CardContent,\n} from '@mui/material';\n\nimport React from 'react';\nimport { alpha, useTheme } from '@mui/material/styles';\nimport { CodeBox } from './VisualizationView';\n\nexport const GroupHeader = styled('div')(({ theme }) => ({\n    position: 'sticky',\n    top: '-8px',\n    padding: '4px 4px',\n    color: \"darkgray\",\n    fontSize: \"12px\",\n}));\n  \nexport const GroupItems = styled('ul')({\n    padding: 0,\n});\n\n// Function to parse message content and render code blocks\nconst renderMessageContent = (role: string, message: string) => {\n    // Split message by code blocks (```language ... ```)\n    const codeBlockRegex = /```(\\w+)?\\n([\\s\\S]*?)```/g;\n    const parts = [];\n    let lastIndex = 0;\n    let match;\n\n    while ((match = codeBlockRegex.exec(message)) !== null) {\n        // Add text before code block\n        if (match.index > lastIndex) {\n            const textContent = message.slice(lastIndex, match.index);\n            if (textContent.trim()) {\n                parts.push(\n                    <Typography key={`text-${lastIndex}`} sx={{ \n                        fontSize: 13, \n                        whiteSpace: 'pre-wrap',\n                        lineHeight: 1.4,\n                        marginBottom: 1\n                    }}>\n                        {textContent}\n                    </Typography>\n                );\n            }\n        }\n\n        // Add code block\n        const language = match[1] || 'text';\n        const code = match[2].trim();\n        parts.push(\n            <Box key={`code-${match.index}`} sx={{ \n                margin: '0',\n                borderRadius: 1,\n                overflow: 'auto'\n            }}>\n                <CodeBox code={code} language={language} fontSize={10} />\n            </Box>\n        );\n\n        lastIndex = match.index + match[0].length;\n    }\n\n    // Add remaining text after last code block\n    if (lastIndex < message.length) {\n        const textContent = message.slice(lastIndex);\n        if (textContent.trim()) {\n            parts.push(\n                <Typography key={`text-${lastIndex}`} sx={{ \n                    fontSize: 13, \n                    whiteSpace: 'pre-wrap',\n                    lineHeight: 1.4\n                }}>\n                    {textContent}\n                </Typography>\n            );\n        }\n    }\n\n    // If no code blocks found, return original message\n    if (parts.length === 0) {\n        return (\n            <Typography sx={{ \n                fontSize: 13, \n                whiteSpace: 'pre-wrap',\n                lineHeight: 1.4\n            }}>\n                {message}\n            </Typography>\n        );\n    }\n\n    return <Box>{parts}</Box>;\n};\n\nexport interface ChatDialogProps {\n    code: string, // final code generated\n    dialog: any[],\n    open: boolean,\n    handleCloseDialog: () => void,\n}\n\nexport const ChatDialog: FC<ChatDialogProps> = function ChatDialog({code, dialog, open, handleCloseDialog}) {\n    let theme = useTheme();\n    const dialogContentRef = useRef<HTMLDivElement>(null);\n\n    // Auto-scroll to bottom when dialog opens\n    useEffect(() => {\n        if (open) {\n            setTimeout(() => {\n                if (dialogContentRef.current) {\n                    dialogContentRef.current.scrollTop = dialogContentRef.current.scrollHeight;\n                }\n            }, 100);\n        }\n    }, [open]);\n\n \n    let body = undefined\n    if (dialog == undefined) {\n        body = <Box sx={{display: \"flex\", overflowX: \"auto\", flexDirection: \"column\", \n                         justifyContent: \"space-between\", position: \"relative\", marginTop: \"10px\", minHeight: \"50px\"}}>\n            <Typography sx={{ fontSize: 14 }}  color=\"text.secondary\" gutterBottom>\n                {\"There is no conversation history yet\"}\n            </Typography>\n        </Box>\n    } else {\n        body = \n            <Box sx={{display: \"flex\", overflowX: \"auto\", flexDirection: \"column\", \n                    justifyContent: \"space-between\", position: \"relative\", marginTop: \"10px\", minHeight: \"50px\"}}>\n                \n                {/* filter out system messages */}\n                {dialog.filter(entry => entry[\"role\"] != 'system').map((chatEntry, idx) => {\n\n                    let role = chatEntry['role'];\n                    let content : any = chatEntry['content'];\n                    const isUser = role === 'user';\n\n                    // Handle multimodal content (array with text + image_url objects)\n                    let message: string;\n                    if (Array.isArray(content)) {\n                        message = content\n                            .filter((part: any) => part.type === 'text')\n                            .map((part: any) => part.text)\n                            .join('\\n');\n                    } else {\n                        message = content as string;\n                    }\n\n                    message = message.trimEnd();\n\n                    return <Card variant=\"outlined\" key={`chat-dialog-${idx}`}\n                        sx={{\n                            minWidth: \"280px\", \n                            maxWidth: \"1920px\", \n                            display: \"flex\", \n                            flexGrow: 1, \n                            margin: \"6px\",\n                            backgroundColor: isUser ? alpha(theme.palette.primary.main, 0.05) : alpha(theme.palette.custom.main, 0.05),\n                            border: isUser ? \"1px solid\" : \"1px solid\",\n                            borderColor: isUser ? alpha(theme.palette.primary.main, 0.2) : alpha(theme.palette.custom.main, 0.2),\n                            borderRadius: radius.md,\n                        }}>\n                        <CardContent sx={{display: \"flex\", flexDirection: \"column\", flexGrow: 1, padding: '8px 12px', paddingBottom: '8px !important'}}>\n                            <Typography sx={{ \n                                fontSize: 12, \n                                fontWeight: 600,\n                                color: isUser ? 'primary.main' : 'custom.main',\n                                textTransform: 'uppercase',\n                                letterSpacing: '0.5px'\n                            }} gutterBottom>\n                                {isUser ? 'You' : 'Assistant'}\n                            </Typography>\n                            <Box sx={{display: 'flex', flexDirection: \"column\", alignItems: \"flex-start\", flex: 'auto'}}>\n                                <Box sx={{maxWidth: 800, width: 'fit-content', display: 'flex', flexDirection: 'column'}}>\n                                    <Box sx={{ \n                                        color: isUser ? 'primary.dark' : 'custom.dark',\n                                    }}>\n                                        {renderMessageContent(role, message)}\n                                    </Box>\n                                </Box>\n                            </Box>\n                        </CardContent>\n                    </Card>\n                })}\n                \n            </Box>\n    }\n\n    return (\n        <Dialog\n            sx={{ '& .MuiDialog-paper': { maxWidth: '95%', maxHeight: '90%', minWidth: 300 } }}\n            maxWidth={false}\n            open={open}\n            key=\"chat-dialog-dialog\"\n        >\n            <DialogTitle><Typography>Agent Log</Typography></DialogTitle>\n            <DialogContent ref={dialogContentRef} sx={{overflowY: \"auto\", overflowX: \"hidden\"}} dividers>\n                {body}\n            </DialogContent>\n            <DialogActions>\n                <Button onClick={()=>{ handleCloseDialog() }}>Close</Button>\n            </DialogActions>\n        </Dialog>\n    );\n}"
  },
  {
    "path": "src/views/ChatThreadView.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { FC, useRef, useEffect, useMemo, useState, useCallback } from 'react';\n\nimport {\n    Box,\n    Typography,\n    Card,\n    CircularProgress,\n    Divider,\n    useTheme,\n} from '@mui/material';\n\nimport { useDispatch, useSelector } from 'react-redux';\nimport { DataFormulatorState, dfActions, dfSelectors } from '../app/dfSlice';\n\nimport { alpha } from '@mui/material/styles';\nimport PersonOutlineIcon from '@mui/icons-material/PersonOutline';\nimport SmartToyOutlinedIcon from '@mui/icons-material/SmartToyOutlined';\nimport StorageOutlinedIcon from '@mui/icons-material/StorageOutlined';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\n\nimport { renderTextWithEmphasis } from './EncodingShelfCard';\nimport { ThinkingBufferEffect } from '../components/FunComponents';\n\ntype ThreadItem = {\n    content: string;\n    role: 'user' | 'thinking' | 'action' | 'completion' | 'error' | 'clarify';\n    tableId?: string;\n    chartId?: string;\n    observeTableId?: string;\n    resultTableId?: string;\n    timestamp: number;\n    actionId: string;\n    isRunning: boolean;\n};\n\n/** A conversation thread groups an origin table with its agentAction messages. */\ntype ConversationThread = {\n    kind: 'action';\n    actionId: string;\n    originTableId: string;\n    messages: ThreadItem[];\n    status: 'running' | 'completed' | 'warning' | 'failed';\n} | {\n    kind: 'orphan-table';\n    tableId: string;\n};\n\n/** A thread group chains threads whose end tables feed into the next thread's origin. */\ntype ThreadGroup = ConversationThread[];\n\n/**\n * ChatThreadView renders the full conversation timeline from agentActions,\n * grouped into separate conversation threads separated by dividers.\n */\nexport const ChatThreadView: FC = function () {\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const focusedId = useSelector((state: DataFormulatorState) => state.focusedId);\n    const charts = useSelector(dfSelectors.getAllCharts);\n    const agentActions = useSelector((state: DataFormulatorState) => state.agentActions);\n\n    const theme = useTheme();\n    const dispatch = useDispatch();\n    const scrollRef = useRef<HTMLDivElement>(null);\n\n    const focusedTableId = useMemo(() => {\n        if (!focusedId) return undefined;\n        if (focusedId.type === 'table') return focusedId.tableId;\n        const chart = charts.find(c => c.id === focusedId.chartId);\n        return chart?.tableRef;\n    }, [focusedId, charts]);\n\n    const focusedChartId = focusedId?.type === 'chart' ? focusedId.chartId : undefined;\n\n    // Track which threads are collapsed (keyed by actionId)\n    const [collapsedThreads, setCollapsedThreads] = useState<Set<string>>(new Set());\n    const toggleThread = useCallback((threadId: string) => {\n        setCollapsedThreads(prev => {\n            const next = new Set(prev);\n            if (next.has(threadId)) next.delete(threadId);\n            else next.add(threadId);\n            return next;\n        });\n    }, []);\n\n    // Build conversation threads and chain them into groups\n    const threadGroups = useMemo((): ThreadGroup[] => {\n        const threads: ConversationThread[] = [];\n\n        // Collect all table IDs referenced by agentActions (origin + result)\n        const tablesInActions = new Set<string>();\n        for (const action of agentActions) {\n            if (action.hidden) continue;\n            if (action.originTableId) tablesInActions.add(action.originTableId);\n            for (const m of (action.messages || [])) {\n                if (m.resultTableId) tablesInActions.add(m.resultTableId);\n                if (m.observeTableId) tablesInActions.add(m.observeTableId);\n            }\n        }\n\n        // Find root tables (no derive, or anchored) not referenced by any action\n        const orphanRootTables = tables.filter(t =>\n            (t.derive === undefined || t.anchored) && !tablesInActions.has(t.id)\n        );\n\n        // Each orphan root table gets its own thread entry\n        for (const t of orphanRootTables) {\n            threads.push({ kind: 'orphan-table', tableId: t.id });\n        }\n\n        // Each non-hidden agentAction becomes a conversation thread\n        const sortedActions = [...agentActions]\n            .filter(a => !a.hidden)\n            .sort((a, b) => (a.messages?.[0]?.timestamp || a.lastUpdate) - (b.messages?.[0]?.timestamp || b.lastUpdate));\n\n        for (const action of sortedActions) {\n            const messages: ThreadItem[] = [];\n            for (const m of (action.messages || [])) {\n                const effectiveObserveId = m.observeTableId || (m.role === 'user' ? action.originTableId : undefined);\n                messages.push({\n                    content: m.content,\n                    role: m.role,\n                    observeTableId: effectiveObserveId,\n                    resultTableId: m.resultTableId,\n                    timestamp: m.timestamp,\n                    actionId: action.actionId,\n                    isRunning: false,\n                });\n            }\n            // Live running status\n            if (action.status === 'running') {\n                const lastMsg = action.messages?.[action.messages.length - 1];\n                if (!lastMsg || lastMsg.content !== action.description) {\n                    messages.push({\n                        content: action.description || 'thinking...',\n                        role: 'thinking',\n                        timestamp: action.lastUpdate,\n                        actionId: action.actionId,\n                        isRunning: true,\n                    });\n                }\n            }\n            threads.push({\n                kind: 'action',\n                actionId: action.actionId,\n                originTableId: action.originTableId,\n                messages,\n                status: action.status,\n            });\n        }\n\n        // Chain threads into groups: if thread B's originTableId matches any\n        // resultTableId from thread A, display them together without a divider.\n        // Build a map from resultTableId → thread index for action threads\n        const resultTableToThread = new Map<string, number>();\n        for (let i = 0; i < threads.length; i++) {\n            const t = threads[i];\n            if (t.kind === 'action') {\n                for (const m of t.messages) {\n                    if (m.resultTableId) {\n                        resultTableToThread.set(m.resultTableId, i);\n                    }\n                }\n            }\n        }\n\n        // For each action thread, find its parent (the thread whose result is this thread's origin)\n        const parentOf = new Map<number, number>(); // child index → parent index\n        for (let i = 0; i < threads.length; i++) {\n            const t = threads[i];\n            if (t.kind === 'action' && t.originTableId) {\n                const parentIdx = resultTableToThread.get(t.originTableId);\n                if (parentIdx !== undefined && parentIdx !== i) {\n                    parentOf.set(i, parentIdx);\n                }\n            }\n        }\n\n        // Find chain roots (threads that aren't children of another thread)\n        const childIndices = new Set(parentOf.keys());\n        const visited = new Set<number>();\n        const groups: ThreadGroup[] = [];\n\n        // Build chain starting from each root\n        for (let i = 0; i < threads.length; i++) {\n            if (childIndices.has(i) || visited.has(i)) continue;\n            // This is a root — walk forward to build the chain\n            const group: ConversationThread[] = [threads[i]];\n            visited.add(i);\n\n            // Find children: threads whose originTableId is a result of the current tail\n            let current = i;\n            while (true) {\n                // Find the next thread in the chain\n                let nextIdx: number | undefined;\n                for (const [child, parent] of parentOf.entries()) {\n                    if (parent === current && !visited.has(child)) {\n                        nextIdx = child;\n                        break;\n                    }\n                }\n                if (nextIdx === undefined) break;\n                group.push(threads[nextIdx]);\n                visited.add(nextIdx);\n                current = nextIdx;\n            }\n            groups.push(group);\n        }\n\n        // Add any remaining unvisited threads (shouldn't happen, but safety)\n        for (let i = 0; i < threads.length; i++) {\n            if (!visited.has(i)) {\n                groups.push([threads[i]]);\n            }\n        }\n\n        return groups;\n    }, [agentActions, tables]);\n\n    // Auto-scroll to bottom when threads change\n    useEffect(() => {\n        if (scrollRef.current) {\n            scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n        }\n    }, [threadGroups]);\n\n    const primaryColor = theme.palette.primary.main;\n    const customColor = theme.palette.secondary.main;\n    const TIMELINE_W = 14;\n    const TIMELINE_GAP = '6px';\n\n    const getTimelineIcon = (msg: ThreadItem) => {\n        if (msg.isRunning) {\n            return <CircularProgress size={14} thickness={5} sx={{ color: customColor }} />;\n        }\n        switch (msg.role) {\n            case 'user':\n                return <PersonOutlineIcon sx={{ fontSize: 16, color: primaryColor }} />;\n            case 'thinking':\n                return <SmartToyOutlinedIcon sx={{ fontSize: 15, color: customColor }} />;\n            case 'action':\n                return <SmartToyOutlinedIcon sx={{ fontSize: 15, color: customColor }} />;\n            case 'completion':\n                return <SmartToyOutlinedIcon sx={{ fontSize: 15, color: theme.palette.success.main }} />;\n            case 'error':\n                return <SmartToyOutlinedIcon sx={{ fontSize: 15, color: theme.palette.error.main }} />;\n            case 'clarify':\n                return <SmartToyOutlinedIcon sx={{ fontSize: 15, color: customColor }} />;\n            default:\n                return <Box sx={{ width: 6, height: 6, borderRadius: '50%', backgroundColor: 'rgba(0,0,0,0.2)' }} />;\n        }\n    };\n\n    const tableNode = (tableId: string) => {\n        const table = tables.find(t => t.id === tableId);\n        if (!table) return null;\n        const rowCount = table.virtual?.rowCount ?? table.rows?.length ?? 0;\n        const isFocused = tableId === focusedTableId;\n        return (\n            <Card elevation={0}\n                sx={{\n                    display: 'inline-flex', alignItems: 'center', gap: '4px',\n                    px: '6px', py: '3px',\n                    borderRadius: '6px',\n                    width: 'fit-content',\n                    border: isFocused ? `1.5px solid ${alpha(theme.palette.primary.main, 0.9)}` : '1px solid rgba(0,0,0,0.12)',\n                    backgroundColor: isFocused ? alpha(theme.palette.primary.main, 0.06) : alpha(theme.palette.grey[500], 0.06),\n                    cursor: 'pointer',\n                    '&:hover': { backgroundColor: alpha(theme.palette.primary.main, 0.08) },\n                }}\n                onClick={(e) => {\n                    e.stopPropagation();\n                    dispatch(dfActions.setFocused({ type: 'table', tableId }));\n                }}\n            >\n                <Typography sx={{ fontSize: 11, fontWeight: 500, color: theme.palette.text.primary,\n                    overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n                    {table.displayId || tableId}\n                    <Typography component=\"span\" sx={{ fontSize: 10, color: theme.palette.text.disabled, ml: 0.5 }}>\n                        {rowCount}r &times; {table.names.length}c\n                    </Typography>\n                </Typography>\n            </Card>\n        );\n    };\n\n    const chartThumbnails = (tableId: string) => {\n        const tableCharts = charts.filter(c => c.tableRef === tableId && c.thumbnail);\n        if (tableCharts.length === 0) return null;\n        return (\n            <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: '4px', alignItems: 'flex-start' }}>\n                {tableCharts.map(chart => {\n                    const isChartFocused = chart.id === focusedChartId;\n                    return (\n                        <Box key={chart.id}\n                            onClick={(e) => {\n                                e.stopPropagation();\n                                dispatch(dfActions.setFocused({ type: 'chart', chartId: chart.id }));\n                            }}\n                            sx={{\n                                display: 'inline-flex',\n                                borderRadius: '6px',\n                                overflow: 'hidden',\n                                border: isChartFocused ? `1.5px solid ${alpha(theme.palette.primary.main, 0.9)}` : '1.5px solid transparent',\n                                backgroundColor: 'white',\n                                cursor: 'pointer',\n                            }}\n                        >\n                            <img\n                                src={chart.thumbnail}\n                                alt={`${chart.chartType} chart`}\n                                style={{ minWidth: 80, maxWidth: 120, maxHeight: 80, objectFit: 'contain' }}\n                            />\n                        </Box>\n                    );\n                })}\n            </Box>\n        );\n    };\n\n    /** Generate a one-line plain-text summary for a message. */\n    const summarize = (msg: ThreadItem): string => {\n        const raw = typeof msg.content === 'string' ? msg.content.replace(/\\*\\*/g, '') : String(msg.content || msg.role);\n        const oneLine = raw.replace(/\\n+/g, ' ').trim();\n        return oneLine.length > 80 ? oneLine.slice(0, 80) + '…' : oneLine;\n    };\n\n    const renderContent = (msg: ThreadItem, collapsed = false) => {\n        const fs = 12;\n        const fsStr = '12px';\n        if (msg.isRunning) {\n            return <ThinkingBufferEffect text={msg.content || 'thinking...'} sx={{ width: '100%' }} />;\n        }\n\n        // Collapsed: single-line truncated summary with role-appropriate color\n        if (collapsed) {\n            const color = msg.role === 'completion' ? theme.palette.success.main\n                : msg.role === 'error' ? theme.palette.error.main\n                : msg.role === 'thinking' ? 'rgba(0,0,0,0.5)'\n                : 'rgba(0,0,0,0.6)';\n            return (\n                <Box>\n                    <Typography sx={{ fontSize: 11, color, overflow: 'hidden',\n                        textOverflow: 'ellipsis', whiteSpace: 'nowrap',\n                        ...(msg.role === 'user' ? { fontStyle: 'italic' } : {}) }}>\n                        {summarize(msg)}\n                    </Typography>\n                    {msg.resultTableId && (\n                        <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-start', gap: '4px', mt: '4px' }}>\n                            {tableNode(msg.resultTableId)}\n                            {chartThumbnails(msg.resultTableId)}\n                        </Box>\n                    )}\n                </Box>\n            );\n        }\n\n        const textColor = 'rgba(0,0,0,0.87)';\n        const textSecondary = 'rgba(0,0,0,0.7)';\n        switch (msg.role) {\n            case 'user':\n                return (\n                    <Typography component=\"div\" sx={{ fontSize: fs, color: textColor,\n                        fontStyle: 'italic',\n                        whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n                        {msg.content}\n                    </Typography>\n                );\n            case 'thinking':\n                return (\n                    <Typography component=\"div\" sx={{ fontSize: fs, color: textSecondary,\n                        whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n                        {renderTextWithEmphasis(msg.content, {\n                            borderRadius: '2px',\n                            fontSize: fsStr,\n                            backgroundColor: alpha(customColor, 0.08),\n                        })}\n                    </Typography>\n                );\n            case 'action':\n                return (\n                    <Box>\n                        <Typography component=\"div\" sx={{ fontSize: fs, color: textColor,\n                            whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n                            {renderTextWithEmphasis(msg.content, {\n                                borderRadius: '2px',\n                                fontSize: fsStr,\n                                backgroundColor: alpha(customColor, 0.08),\n                            })}\n                        </Typography>\n                        {msg.resultTableId && (\n                            <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-start', gap: '4px', mt: '4px' }}>\n                                {tableNode(msg.resultTableId)}\n                                {chartThumbnails(msg.resultTableId)}\n                            </Box>\n                        )}\n                    </Box>\n                );\n            case 'completion':\n                return (\n                    <Box>\n                        <Typography sx={{ fontSize: fs, color: theme.palette.success.main,\n                            whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n                            {renderTextWithEmphasis(msg.content, {\n                                borderRadius: '2px',\n                                fontSize: fsStr,\n                            })}\n                        </Typography>\n                        {msg.resultTableId && (\n                            <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-start', gap: '4px', mt: '4px' }}>\n                                {tableNode(msg.resultTableId)}\n                                {chartThumbnails(msg.resultTableId)}\n                            </Box>\n                        )}\n                    </Box>\n                );\n            case 'error':\n                return (\n                    <Typography sx={{ fontSize: fs, color: textColor,\n                        whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n                        {msg.content}\n                    </Typography>\n                );\n            case 'clarify':\n                return (\n                    <Typography component=\"div\" sx={{ fontSize: fs, color: textColor,\n                        whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n                        {renderTextWithEmphasis(msg.content, {\n                            borderRadius: '2px',\n                            fontSize: fsStr,\n                            backgroundColor: alpha(customColor, 0.08),\n                        })}\n                    </Typography>\n                );\n            default:\n                return null;\n        }\n    };\n\n    /** Render a single timeline row (icon + connecting lines + content). */\n    const renderTimelineRow = (\n        content: React.ReactNode,\n        icon: React.ReactNode,\n        opts: {\n            isFirst: boolean; isLast: boolean;\n            bgColor?: string; lineColor?: string; bottomLineColor?: string;\n            onClick?: (e: React.MouseEvent) => void;  // optional click handler for the row\n        }\n    ) => {\n        const lc = opts.lineColor || 'rgba(0,0,0,0.12)';\n        const blc = opts.bottomLineColor || lc;\n        const clickable = !!opts.onClick;\n\n        return (\n            <Box\n                onClick={opts.onClick}\n                sx={{\n                    display: 'flex', flexDirection: 'row', position: 'relative',\n                    ...(clickable ? { cursor: 'pointer' } : {}),\n                    ...(opts.bgColor && opts.bgColor !== 'transparent' ? {\n                        backgroundColor: opts.bgColor,\n                        borderRadius: '6px',\n                        mx: '-4px',\n                        px: '4px',\n                    } : {}),\n                }}>\n                <Box sx={{\n                    width: TIMELINE_W, flexShrink: 0,\n                    display: 'flex', flexDirection: 'column', alignItems: 'center',\n                    pt: '5px',\n                }}>\n                    {!opts.isFirst && (\n                        <Box sx={{ width: 0, flexShrink: 0, height: 4, borderLeft: `1px solid ${lc}`, mt: '-5px' }} />\n                    )}\n                    <Box sx={{ flexShrink: 0, zIndex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n                        {icon}\n                    </Box>\n                    {!opts.isLast\n                        ? <Box sx={{ width: 0, flex: '1 1 0', minHeight: 2, borderLeft: `1px solid ${blc}` }} />\n                        : <Box sx={{ flex: '1 1 0', minHeight: 2 }} />\n                    }\n                </Box>\n                <Box sx={{ flex: 1, minWidth: 0, py: '6px', pl: TIMELINE_GAP }}>\n                    {content}\n                </Box>\n            </Box>\n        );\n    };\n\n    /** Render a full action-based conversation thread. skipOriginTable omits the\n     *  origin table row when it was already shown as a result of the previous thread in the chain. */\n    const renderActionThread = (thread: ConversationThread & { kind: 'action' }, skipOriginTable = false) => {\n        const originTable = skipOriginTable ? undefined : tables.find(t => t.id === thread.originTableId);\n        const isRunningThread = thread.status === 'running';\n        const lastMsgIsRunning = thread.messages.length > 0 && thread.messages[thread.messages.length - 1].isRunning;\n        // If the thread is running but the last message doesn't already have isRunning,\n        // we'll append an extra \"working...\" row, so account for it in totalRows.\n        const needsRunningRow = isRunningThread && !lastMsgIsRunning;\n        const totalRows = (originTable ? 1 : 0) + thread.messages.length + (needsRunningRow ? 1 : 0);\n        // When origin is skipped (chained), the first message continues the timeline from the previous thread\n        const chainContinuation = skipOriginTable;\n\n        const isCollapsed = collapsedThreads.has(thread.actionId);\n\n        return (\n            <Box sx={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n                {/* Origin table — click to collapse/expand the entire thread */}\n                {originTable && renderTimelineRow(\n                    <Box sx={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n                        {tableNode(originTable.id)}\n                        {chartThumbnails(originTable.id)}\n                    </Box>,\n                    isCollapsed\n                        ? <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center',\n                            width: 18, height: 18, borderRadius: '50%', border: `1px solid ${alpha(theme.palette.text.secondary, 0.4)}`,\n                            cursor: 'pointer', '&:hover': { backgroundColor: alpha(theme.palette.action.hover, 0.12) } }}>\n                            <ChevronRightIcon sx={{ fontSize: 13, color: theme.palette.text.secondary }} />\n                          </Box>\n                        : <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center',\n                            width: 18, height: 18, borderRadius: '50%', border: `1px solid ${alpha(theme.palette.text.secondary, 0.4)}`,\n                            cursor: 'pointer', '&:hover': { backgroundColor: alpha(theme.palette.action.hover, 0.12) } }}>\n                            <ExpandMoreIcon sx={{ fontSize: 13, color: theme.palette.text.secondary }} />\n                          </Box>,\n                    { isFirst: true, isLast: totalRows <= 1,\n                      onClick: (e) => { e.stopPropagation(); toggleThread(thread.actionId); } },\n                )}\n                {/* Messages — condensed to single-line summaries when collapsed */}\n                {thread.messages.map((msg, idx) => {\n                    const rowIdx = (originTable ? 1 : 0) + idx;\n                    const isFirst = rowIdx === 0 && !chainContinuation;\n                    const isLast = rowIdx === totalRows - 1;\n\n                    const bgColor = isCollapsed ? 'transparent'\n                        : msg.role === 'user' ? alpha(theme.palette.primary.main, 0.10)\n                        : msg.role === 'error' ? alpha(theme.palette.error.main, 0.10)\n                        : 'transparent';\n\n                    return (\n                        <React.Fragment key={`msg-${idx}`}>\n                            {renderTimelineRow(\n                                renderContent(msg, isCollapsed),\n                                getTimelineIcon(msg),\n                                { isFirst, isLast, bgColor },\n                            )}\n                        </React.Fragment>\n                    );\n                })}\n                {/* Extra running indicator when thread is running but last message isn't already a running row */}\n                {needsRunningRow && renderTimelineRow(\n                    <Typography variant=\"body2\" sx={{ fontSize: 11, color: customColor, fontStyle: 'italic' }}>\n                        working...\n                    </Typography>,\n                    <CircularProgress size={14} thickness={5} sx={{ color: customColor }} />,\n                    { isFirst: totalRows <= 1, isLast: true },\n                )}\n            </Box>\n        );\n    };\n\n    /** Render an orphan table thread (table + its charts, no agent messages). */\n    const renderOrphanThread = (tableId: string) => {\n        return (\n            <Box sx={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n                {renderTimelineRow(\n                    <Box sx={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n                        {tableNode(tableId)}\n                        {chartThumbnails(tableId)}\n                    </Box>,\n                    <StorageOutlinedIcon sx={{ fontSize: 12, color: theme.palette.text.secondary }} />,\n                    { isFirst: true, isLast: true },\n                )}\n            </Box>\n        );\n    };\n\n    if (threadGroups.length === 0) {\n        return (\n            <Box sx={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: 0 }}>\n                <Typography variant=\"caption\" sx={{ color: theme.palette.text.disabled, fontSize: 11 }}>\n                    Start a conversation to explore your data.\n                </Typography>\n            </Box>\n        );\n    }\n\n    /** Collect all result table IDs from an action thread's messages. */\n    const getResultTableIds = (thread: ConversationThread): Set<string> => {\n        const ids = new Set<string>();\n        if (thread.kind === 'action') {\n            for (const m of thread.messages) {\n                if (m.resultTableId) ids.add(m.resultTableId);\n            }\n        }\n        return ids;\n    };\n\n    return (\n        <Box ref={scrollRef} sx={{\n            flex: 1,\n            overflowY: 'auto',\n            overflowX: 'hidden',\n            px: 1, py: 1,\n            display: 'flex',\n            flexDirection: 'column',\n            gap: '6px',\n            minHeight: 0,\n        }}>\n            {threadGroups.map((group, gIdx) => (\n                <React.Fragment key={`group-${gIdx}`}>\n                    {gIdx > 0 && (\n                        <Box sx={{ display: 'flex', alignItems: 'center', my: '12px', px: 1 }}>\n                            <Box sx={{ flex: 1, borderBottom: `1.5px dashed ${alpha(theme.palette.text.disabled, 0.3)}` }} />\n                        </Box>\n                    )}\n                    {group.map((thread, tIdx) => {\n                        // Skip origin table if it was a result of the previous thread in the chain\n                        const prevThread = tIdx > 0 ? group[tIdx - 1] : undefined;\n                        const prevResultIds = prevThread ? getResultTableIds(prevThread) : new Set<string>();\n                        const skipOrigin = thread.kind === 'action' && prevResultIds.has(thread.originTableId);\n\n                        return (\n                            <React.Fragment key={`thread-${tIdx}`}>\n                                {thread.kind === 'action'\n                                    ? renderActionThread(thread, skipOrigin)\n                                    : renderOrphanThread(thread.tableId)\n                                }\n                            </React.Fragment>\n                        );\n                    })}\n                </React.Fragment>\n            ))}\n        </Box>\n    );\n};\n"
  },
  {
    "path": "src/views/DBTableManager.tsx",
    "content": "// TableManager.tsx\nimport React, { useState, useEffect, useCallback, FC, useRef, useMemo } from 'react';\nimport { \n  Card, \n  CardContent, \n  Typography, \n  Button, \n  Grid,\n  Box,\n  IconButton,\n  Paper,\n  TextField,\n  Divider,\n  SxProps,\n  CircularProgress,\n  ButtonGroup,\n  ToggleButton,\n  ToggleButtonGroup,\n  MenuItem,\n  Menu,\n  Chip,\n  Checkbox,\n  FormControlLabel,\n  styled,\n  useTheme,\n  Link,\n  alpha,\n} from '@mui/material';\n\nimport SearchIcon from '@mui/icons-material/Search';\n\nimport Autocomplete from '@mui/material/Autocomplete';\n\nimport { getUrls, fetchWithIdentity } from '../app/utils';\nimport { borderColor } from '../app/tokens';\nimport { CustomReactTable } from './ReactTable';\nimport { DataSourceConfig, DictTable } from '../components/ComponentType';\nimport { Type } from '../data/types';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { dfActions, dfSelectors } from '../app/dfSlice';\nimport { DataFormulatorState } from '../app/dfSlice';\nimport { fetchFieldSemanticType } from '../app/dfSlice';\nimport { loadTable } from '../app/tableThunks';\nimport { AppDispatch } from '../app/store';\nimport Markdown from 'markdown-to-jsx';\n\nimport CheckIcon from '@mui/icons-material/Check';\nimport MuiMarkdown from 'mui-markdown';\nimport CleaningServicesIcon from '@mui/icons-material/CleaningServices';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport UploadFileIcon from '@mui/icons-material/UploadFile';\nimport DownloadIcon from '@mui/icons-material/Download';\nimport RestartAltIcon from '@mui/icons-material/RestartAlt';\nimport CloudUploadIcon from '@mui/icons-material/CloudUpload';\n\n\nexport const handleDBDownload = async (identityId: string) => {\n    try {\n        const response = await fetchWithIdentity(\n            getUrls().DOWNLOAD_DB_FILE,\n            { method: 'GET' }\n        );\n        \n        // Check if the response is ok\n        if (!response.ok) {\n            const errorData = await response.json();\n            throw new Error(errorData.error || errorData.message || 'Failed to download database file');\n        }\n\n        // Get the blob directly from response\n        const blob = await response.blob();\n        const url = URL.createObjectURL(blob);\n        \n        // Create a temporary link element\n        const link = document.createElement('a');\n        link.href = url;\n        link.download = `df_${identityId?.slice(0, 4) || 'db'}.db`;\n        document.body.appendChild(link);    \n        \n        // Trigger download\n        link.click();\n        \n        // Clean up\n        document.body.removeChild(link);\n        URL.revokeObjectURL(url);\n    } catch (error) {\n        throw error;\n    }\n};\n\ninterface DBTable {\n    name: string;\n    columns: {\n        name: string;\n        type: string;\n    }[];\n    row_count: number;\n    sample_rows: any[];\n    view_source: string | null;\n    // Source metadata for refreshable tables (from data loaders)\n    // Backend stores connection info; frontend manages refresh timing\n    source_metadata?: {\n        table_name: string;\n        data_loader_type: string;\n        data_loader_params: Record<string, any>;\n        source_table_name?: string;\n        source_query?: string;\n        last_refreshed?: string;\n    } | null;\n}\n\ninterface ColumnStatistics {\n    column: string;\n    type: string;\n    statistics: {\n        count: number;\n        unique_count: number;\n        null_count: number;\n        min?: number;\n        max?: number;\n        avg?: number;\n    };\n}\n\n\nexport const DBManagerPane: React.FC<{ \n    onClose?: () => void;\n    storeOnServer?: boolean;\n}> = function DBManagerPane({ onClose, storeOnServer = true }) {\n    \n    const theme = useTheme();\n\n    const dispatch = useDispatch<AppDispatch>();\n    const identity = useSelector((state: DataFormulatorState) => state.identity);\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const serverConfig = useSelector((state: DataFormulatorState) => state.serverConfig);\n    const dataLoaderConnectParams = useSelector((state: DataFormulatorState) => state.dataLoaderConnectParams);\n\n\n    // maps data loader type to list of param defs\n    const [dataLoaderMetadata, setDataLoaderMetadata] = useState<Record<string, {\n        params: {name: string, default: string, type: string, required: boolean, description: string}[], \n        auth_instructions: string}>>({});\n\n    const [dbTables, setDbTables] = useState<DBTable[]>([]);\n    const [selectedTabKey, setSelectedTabKey] = useState(\"\");\n    const [selectedDataLoader, setSelectedDataLoader] = useState<string>(\"\");\n\n    const [isUploading, setIsUploading] = useState<boolean>(false);\n\n    let setSystemMessage = (content: string, severity: \"error\" | \"warning\" | \"info\" | \"success\") => {\n        dispatch(dfActions.addMessages({\n            \"timestamp\": Date.now(),\n            \"component\": \"DB manager\",\n            \"type\": severity,\n            \"value\": content\n        }));\n    }\n\n    useEffect(() => {\n        fetchDataLoaders();\n    }, []);\n\n    useEffect(() => {\n        if (selectedDataLoader === \"\") {\n            if (dbTables.length == 0) {\n                setSelectedTabKey(\"\");\n            } else if (dbTables.find(t => t.name === selectedTabKey) == undefined) {\n                setSelectedTabKey(dbTables[0]?.name || \"\");\n            }\n        }\n    }, [dbTables, selectedDataLoader]);\n\n    // Fetch list of tables\n    const fetchTables = async (): Promise<DBTable[] | undefined> => {\n        try {\n            const response = await fetchWithIdentity(getUrls().LIST_TABLES, { method: 'GET' });\n            const data = await response.json();\n            if (data.status === 'success') {\n                setDbTables(data.tables);\n                return data.tables;\n            }\n        } catch (error) {\n            setSystemMessage('Failed to fetch tables, please check if the server is running', \"error\");\n        }\n        return undefined;\n    };\n\n    const fetchDataLoaders = async () => {\n        fetchWithIdentity(getUrls().DATA_LOADER_LIST_DATA_LOADERS, {\n            method: 'GET',\n            headers: {\n                'Content-Type': 'application/json',\n            },\n        })\n        .then(response => response.json())\n        .then(data => {\n            if (data.status === \"success\") {\n                setDataLoaderMetadata(data.data_loaders);\n            } else {\n                console.error('Failed to fetch data loader params:', data.error);\n            }\n        })\n        .catch(error => {\n            console.error('Failed to fetch data loader params:', error);\n        });\n    }\n\n    useEffect(() => {\n        fetchTables();\n    }, []);\n\n    let tableSelectionPanel = <Box sx={{ \n        pt: 1, \n        display: 'flex', \n        flexDirection: 'column', \n        width: '100%',\n    }}>\n        {/* Data loaders */}\n        {Object.keys(dataLoaderMetadata ?? {}).map((dataLoaderType) => (\n            <Button\n                key={dataLoaderType}\n                variant=\"text\"\n                size=\"small\"\n                color=\"primary\"\n                onClick={() => setSelectedDataLoader(dataLoaderType)}\n                sx={{\n                    fontSize: 12,\n                    textTransform: \"none\",\n                    width: '100%',\n                    justifyContent: 'flex-start',\n                    textAlign: 'left',\n                    borderRadius: 0,\n                    py: 1,\n                    px: 2,\n                    color: selectedDataLoader === dataLoaderType ? 'primary.main' : 'text.secondary',\n                    borderRight: selectedDataLoader === dataLoaderType ? 2 : 0,\n                    borderColor: 'primary.main',\n                }}\n            >\n                {dataLoaderType}\n            </Button>\n        ))}\n    </Box>\n\n    let dataConnectorView = <Box sx={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, overflowY: 'auto', overflowX: 'hidden', p: 2, pb: 4, display: 'flex', flexDirection: 'column', minWidth: 0, overscrollBehavior: 'contain' }}>\n\n        {/* Empty state when no loader selected */}\n        {selectedDataLoader === '' && (\n            <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flex: 1, color: 'text.disabled' }}>\n                <Typography variant=\"body2\" sx={{ fontStyle: 'italic' }}>\n                    Select a data loader from the left panel\n                </Typography>\n            </Box>\n        )}\n        \n        {/* Data loader forms */}\n        {dataLoaderMetadata && Object.entries(dataLoaderMetadata).map(([dataLoaderType, metadata]) => (\n            selectedDataLoader === dataLoaderType && (\n                <Box key={`dataLoader:${dataLoaderType}`} sx={{ position: \"relative\", maxWidth: '100%', flexShrink: 0 }}>\n                    <DataLoaderForm \n                        key={`data-loader-form-${dataLoaderType}`}\n                        dataLoaderType={dataLoaderType} \n                        paramDefs={metadata.params}\n                        authInstructions={metadata.auth_instructions}\n                        storeOnServer={storeOnServer}\n                        onImport={() => {\n                            setIsUploading(true);\n                        }} \n                        onFinish={(status, message, importedTables) => {\n                            setIsUploading(false);\n                            if (status === \"success\") {\n                                setSystemMessage(message, \"success\");\n                            } else {\n                                setSystemMessage(message, \"error\");\n                            }\n                        }} \n                    />\n                </Box>\n            )\n        ))}\n    </Box>;\n\n    let mainContent =  \n        <Box sx={{ display: 'flex', flexDirection: 'column', bgcolor: 'white', flex: 1, overflow: 'hidden', height: '100%' }}>\n            <Box sx={{ display: 'flex', flexDirection: 'row', flex: 1, overflow: 'hidden', minHeight: 0, height: '100%' }}>\n                {/* Button navigation - similar to TableSelectionView */}\n                <Box sx={{ display: 'flex', flexDirection: 'column', px: 0, width: 150, minWidth: 150, maxWidth: 150, overflow: 'hidden', height: '100%' }}>\n                    <Box sx={{ \n                        display: 'flex',\n                        flexDirection: 'column',\n                        overflowY: 'auto',\n                        overflowX: 'hidden',\n                        flex: 1,\n                        minHeight: 0,\n                        height: '100%',\n                        position: 'relative',\n                        borderRight: `1px solid ${borderColor.view}`,\n                        overscrollBehavior: 'contain'\n                    }}>\n                        {/* Available Tables Section - always visible */}\n                        {tableSelectionPanel}\n                    </Box>\n                </Box>\n                {/* Content area - show selected data loader form */}\n                <Box sx={{ flex: 1, overflow: 'hidden', minWidth: 0, minHeight: 0, height: '100%', position: 'relative' }}>\n                    {dataConnectorView}\n                </Box>\n            </Box>\n        </Box>  \n\n    return (\n        <Box sx={{ position: 'relative', display: 'flex', flexDirection: 'column', height: '100%', width: '100%' }}>\n            {mainContent}\n            {isUploading && (\n                <Box sx={{ \n                    position: 'absolute', \n                    top: 0, \n                    left: 0, \n                    width: '100%', \n                    height: '100%', \n                    display: 'flex', \n                    flexDirection: 'column',\n                    alignItems: 'center', \n                    justifyContent: 'center',\n                    backgroundColor: 'rgba(255, 255, 255, 0.85)',\n                    backdropFilter: 'blur(4px)',\n                    zIndex: 1000,\n                    gap: 2,\n                }}>\n                    <CircularProgress size={60} thickness={5} />\n                    <Typography variant=\"body2\" color=\"text.secondary\">\n                        Uploading data...\n                    </Typography>\n                    <Button\n                        variant=\"text\"\n                        size=\"small\"\n                        onClick={() => setIsUploading(false)}\n                        sx={{ mt: 1, textTransform: 'none', color: 'text.secondary' }}\n                    >\n                        Cancel\n                    </Button>\n                </Box>\n            )}\n            \n        </Box>\n    );\n  \n}\n\nexport const DataLoaderForm: React.FC<{\n    dataLoaderType: string, \n    paramDefs: {name: string, default: string, type: string, required: boolean, description: string}[],\n    authInstructions: string,\n    storeOnServer?: boolean,\n    onImport: () => void,\n    onFinish: (status: \"success\" | \"error\", message: string, importedTables?: string[]) => void\n}> = ({dataLoaderType, paramDefs, authInstructions, storeOnServer = true, onImport, onFinish}) => {\n\n    const dispatch = useDispatch<AppDispatch>();\n    const theme = useTheme();\n    const params = useSelector((state: DataFormulatorState) => state.dataLoaderConnectParams[dataLoaderType] ?? {});\n    const frontendRowLimit = useSelector((state: DataFormulatorState) => state.config?.frontendRowLimit ?? 50000);\n    const workspaceTables = useSelector((state: DataFormulatorState) => state.tables);\n\n    const [tableMetadata, setTableMetadata] = useState<Record<string, any>>({});\n    const [selectedPreviewTable, setSelectedPreviewTable] = useState<string | null>(null);\n    let [tableFilter, setTableFilter] = useState<string>(\"\");\n    // Import mode for the currently selected table\n    const [importMode, setImportMode] = useState<'full' | 'subset'>('full');\n    const [subsetConfig, setSubsetConfig] = useState<{ rowLimit: number; sortColumns: string[]; sortOrder: 'asc' | 'desc' }>({ rowLimit: 1000, sortColumns: [], sortOrder: 'asc' });\n    // Track which tables have been loaded and how (persists across table selections)\n    const [loadedTables, setLoadedTables] = useState<Record<string, 'full' | 'subset'>>({});\n\n    // Cross-reference workspace tables with database tables to detect already-loaded ones\n    const workspaceLoadedTables = useMemo(() => {\n        const result: Record<string, 'full' | 'subset'> = {};\n        for (const wt of workspaceTables) {\n            const dbTableName = wt.source?.databaseTable;\n            if (dbTableName && wt.source?.type === 'database') {\n                // Determine if subset: if virtual exists and rowCount > loaded rows, it's a subset\n                const isSubset = wt.virtual ? wt.rows.length < wt.virtual.rowCount : false;\n                result[dbTableName] = isSubset ? 'subset' : 'full';\n            }\n        }\n        return result;\n    }, [workspaceTables]);\n\n    // Merge: local session loads take priority over workspace-detected loads\n    const effectiveLoadedTables = useMemo(() => {\n        return { ...workspaceLoadedTables, ...loadedTables };\n    }, [workspaceLoadedTables, loadedTables]);\n\n    let [isConnecting, setIsConnecting] = useState(false);\n\n    // Auto-select first table for preview when metadata loads\n    useEffect(() => {\n        const tableNames = Object.keys(tableMetadata);\n        if (tableNames.length > 0 && (!selectedPreviewTable || !tableMetadata[selectedPreviewTable])) {\n            setSelectedPreviewTable(tableNames[0]);\n        }\n    }, [tableMetadata]);\n\n    // Reset import mode when switching tables\n    useEffect(() => {\n        if (selectedPreviewTable && tableMetadata[selectedPreviewTable]) {\n            setImportMode('full');\n            const metadata = tableMetadata[selectedPreviewTable];\n            setSubsetConfig({ rowLimit: Math.min(1000, metadata.row_count || 1000), sortColumns: [], sortOrder: 'asc' });\n        }\n    }, [selectedPreviewTable]);\n\n    // Build preview DictTable for the selected table\n    const previewTable: DictTable | null = useMemo(() => {\n        if (!selectedPreviewTable || !tableMetadata[selectedPreviewTable]) return null;\n        const metadata = tableMetadata[selectedPreviewTable];\n        const sampleRows = metadata.sample_rows || [];\n        const columns = metadata.columns || [];\n        const names = columns.map((c: any) => c.name);\n        return {\n            id: selectedPreviewTable,\n            displayId: selectedPreviewTable,\n            names,\n            rows: sampleRows,\n            metadata: names.reduce((acc: Record<string, any>, name: string) => ({\n                ...acc,\n                [name]: { type: 'string' as any, semanticType: '', levels: [] }\n            }), {}),\n            anchored: true,\n            createdBy: 'user' as const,\n            attachedMetadata: '',\n        };\n    }, [selectedPreviewTable, tableMetadata]);\n\n    const tableNames = Object.keys(tableMetadata);\n\n    let tableMetadataBox = [\n        // Tables as chips + preview below\n        tableNames.length > 0 && (\n            <Box key=\"table-chips-preview\" sx={{ mt: 1 }}>\n                {/* Table chips */}\n                <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5, mb: 1.5 }}>\n                    {tableNames.map((tableName) => {\n                        const metadata = tableMetadata[tableName];\n                        const isSelected = tableName === selectedPreviewTable;\n                        const loaded = effectiveLoadedTables[tableName];\n                        return (\n                            <Chip\n                                key={tableName}\n                                label={tableName}\n                                size=\"small\"\n                                onClick={() => setSelectedPreviewTable(tableName)}\n                                icon={loaded ? <CheckIcon sx={{ fontSize: 14 }} /> : undefined}\n                                sx={{\n                                    cursor: 'pointer',\n                                    fontSize: 11,\n                                    height: 26,\n                                    borderRadius: 1,\n                                    ...(loaded === 'full' ? {\n                                        backgroundColor: alpha(theme.palette.success.main, 0.12),\n                                        borderColor: alpha(theme.palette.success.main, 0.5),\n                                        color: theme.palette.success.dark,\n                                        '& .MuiChip-icon': { color: theme.palette.success.main },\n                                    } : loaded === 'subset' ? {\n                                        backgroundColor: alpha('#f9a825', 0.15),\n                                        borderColor: alpha('#f9a825', 0.5),\n                                        color: '#e65100',\n                                        '& .MuiChip-icon': { color: '#f9a825' },\n                                    } : isSelected ? {\n                                        backgroundColor: alpha(theme.palette.primary.main, 0.12),\n                                        borderColor: alpha(theme.palette.primary.main, 0.5),\n                                        color: theme.palette.primary.main,\n                                    } : {}),\n                                    border: '1px solid',\n                                    borderColor: loaded === 'full' \n                                        ? alpha(theme.palette.success.main, 0.5)\n                                        : loaded === 'subset' \n                                            ? alpha('#f9a825', 0.5) \n                                            : isSelected \n                                                ? alpha(theme.palette.primary.main, 0.5)\n                                                : 'rgba(0,0,0,0.15)',\n                                    '&:hover': {\n                                        backgroundColor: loaded === 'full'\n                                            ? alpha(theme.palette.success.main, 0.18)\n                                            : loaded === 'subset'\n                                                ? alpha('#f9a825', 0.22)\n                                                : alpha(theme.palette.primary.main, 0.08),\n                                    },\n                                }}\n                            />\n                        );\n                    })}\n                </Box>\n\n                {/* Preview + load controls */}\n                {previewTable && selectedPreviewTable && (\n                    <Box>\n                        <Card variant=\"outlined\" sx={{ pb: 0.5 }}>\n                            <CustomReactTable\n                                rows={previewTable.rows.slice(0, 12)}\n                                columnDefs={previewTable.names.map(name => ({\n                                    id: name,\n                                    label: name,\n                                    minWidth: 60,\n                                }))}\n                                rowsPerPageNum={-1}\n                                compact={false}\n                                isIncompleteTable={previewTable.rows.length > 12}\n                                maxHeight={240}\n                            />\n                        </Card>\n                        <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mt: 0.5, display: 'block' }}>\n                            {tableMetadata[selectedPreviewTable]?.row_count > 0 \n                                ? `${tableMetadata[selectedPreviewTable].row_count.toLocaleString()} rows` \n                                : `${previewTable.rows.length} sample rows`\n                            } × {previewTable.names.length} columns\n                        </Typography>\n\n                        {/* Load controls */}\n                        <Box sx={{ mt: 1.5, pt: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 2, flexWrap: 'nowrap' }}>\n                            {/* Subset option - hidden when already loaded */}\n                            {!effectiveLoadedTables[selectedPreviewTable] && <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'nowrap' }}>\n                                <Checkbox\n                                    checked={importMode === 'subset'}\n                                    onChange={(e) => setImportMode(e.target.checked ? 'subset' : 'full')}\n                                    size=\"small\"\n                                    sx={{ p: 0.25 }}\n                                />\n                                <Typography variant=\"body2\" sx={{ fontSize: 12, cursor: 'pointer', userSelect: 'none', whiteSpace: 'nowrap' }}\n                                    onClick={() => setImportMode(importMode === 'subset' ? 'full' : 'subset')}\n                                >\n                                    Load a subset\n                                </Typography>\n                                {importMode === 'subset' && selectedPreviewTable && tableMetadata[selectedPreviewTable] && (() => {\n                                    const metadata = tableMetadata[selectedPreviewTable];\n                                    return (\n                                        <>\n                                            <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexShrink: 0 }}>\n                                                <Typography variant=\"caption\" sx={{ fontSize: 11, color: 'text.secondary', whiteSpace: 'nowrap' }}>Rows:</Typography>\n                                                <TextField\n                                                    size=\"small\"\n                                                    type=\"number\"\n                                                    value={subsetConfig.rowLimit}\n                                                    onChange={(e) => {\n                                                        const value = parseInt(e.target.value) || 1;\n                                                        const maxRows = metadata.row_count || 100000;\n                                                        setSubsetConfig(prev => ({ ...prev, rowLimit: Math.min(Math.max(1, value), maxRows) }));\n                                                    }}\n                                                    slotProps={{ input: { inputProps: { min: 1, max: metadata.row_count || 100000, step: 100 } } }}\n                                                    sx={{ width: 90, '& .MuiInputBase-root': { fontSize: 11, height: 26 }, '& .MuiInputBase-input': { py: 0.25, px: 0.75 } }}\n                                                />\n                                                <Typography variant=\"caption\" sx={{ fontSize: 10, color: 'text.disabled', whiteSpace: 'nowrap' }}>/ {(metadata.row_count || '?').toLocaleString()}</Typography>\n                                            </Box>\n                                            <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, minWidth: 0, maxWidth: 400 }}>\n                                                <Typography variant=\"caption\" sx={{ fontSize: 11, color: 'text.secondary', whiteSpace: 'nowrap' }}>Sort:</Typography>\n                                                <Autocomplete\n                                                    multiple\n                                                    size=\"small\"\n                                                    options={metadata.columns.map((col: any) => col.name)}\n                                                    value={subsetConfig.sortColumns}\n                                                    onChange={(_, newValue) => setSubsetConfig(prev => ({ ...prev, sortColumns: newValue }))}\n                                                    renderInput={(params) => (\n                                                        <TextField {...params} placeholder=\"columns...\" size=\"small\" sx={{ minWidth: 120, '& .MuiInputBase-root': { fontSize: 11, minHeight: 26, py: 0 } }} />\n                                                    )}\n                                                    renderTags={(value, getTagProps) =>\n                                                        value.map((option, index) => (\n                                                            <Chip {...getTagProps({ index })} key={option} label={option} size=\"small\" sx={{ height: 18, fontSize: 10 }} />\n                                                        ))\n                                                    }\n                                                    slotProps={{ paper: { sx: { fontSize: 12, '& .MuiAutocomplete-option': { fontSize: 12, py: 0.5, minHeight: 28 } } } }}\n                                                    sx={{ flex: 1, minWidth: 0 }}\n                                                />\n                                                {subsetConfig.sortColumns.length > 0 && (\n                                                    <ToggleButtonGroup\n                                                        value={subsetConfig.sortOrder}\n                                                        exclusive\n                                                        onChange={(_, v) => { if (v) setSubsetConfig(prev => ({ ...prev, sortOrder: v })); }}\n                                                        size=\"small\"\n                                                        sx={{ height: 24 }}\n                                                    >\n                                                        <ToggleButton value=\"asc\" sx={{ px: 1, py: 0, fontSize: 10, textTransform: 'none' }}>↑</ToggleButton>\n                                                        <ToggleButton value=\"desc\" sx={{ px: 1, py: 0, fontSize: 10, textTransform: 'none' }}>↓</ToggleButton>\n                                                    </ToggleButtonGroup>\n                                                )}\n                                            </Box>\n                                        </>\n                                    );\n                                })()}\n                            </Box>}\n                            {/* Load Table button */}\n                            {effectiveLoadedTables[selectedPreviewTable] ? (\n                            <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexShrink: 0 }}>\n                                <Button\n                                    variant=\"outlined\"\n                                    size=\"medium\"\n                                    disabled\n                                    startIcon={<CheckIcon sx={{ fontSize: 16 }} />}\n                                    sx={{ textTransform: 'none', fontSize: 13, px: 3, height: 34,\n                                        color: 'success.main', borderColor: 'success.main',\n                                        '&.Mui-disabled': { color: 'success.main', borderColor: 'success.main', opacity: 0.8 },\n                                    }}\n                                >\n                                    {effectiveLoadedTables[selectedPreviewTable] === 'subset' ? 'Subset loaded' : 'Loaded'}\n                                </Button>\n                                <Button\n                                    variant=\"text\"\n                                    size=\"small\"\n                                    onClick={() => {\n                                        const tableName = selectedPreviewTable;\n                                        // Find and remove the workspace table that matches this database table\n                                        const wt = workspaceTables.find(t => t.source?.databaseTable === tableName && t.source?.type === 'database');\n                                        if (wt) {\n                                            dispatch(dfActions.deleteTable(wt.id));\n                                        }\n                                        setLoadedTables(prev => {\n                                            const next = { ...prev };\n                                            delete next[tableName];\n                                            return next;\n                                        });\n                                    }}\n                                    sx={{ textTransform: 'none', fontSize: 11, px: 1, minWidth: 0, height: 28, color: 'text.secondary',\n                                        '&:hover': { color: 'error.main', backgroundColor: 'rgba(211,47,47,0.04)' },\n                                    }}\n                                >\n                                    Unload\n                                </Button>\n                            </Box>\n                            ) : (\n                            <Button\n                                variant=\"contained\"\n                                size=\"medium\"\n                                sx={{ textTransform: 'none', fontSize: 13, px: 4, height: 34, flexShrink: 0 }}\n                                onClick={() => {\n                                    const tableName = selectedPreviewTable;\n                                    const metadata = tableMetadata[tableName];\n                                    if (!metadata) return;\n\n                                    const importOptions: any = {};\n                                    if (importMode === 'subset') {\n                                        importOptions.rowLimit = subsetConfig.rowLimit;\n                                        if (subsetConfig.sortColumns.length > 0) {\n                                            importOptions.sortColumns = subsetConfig.sortColumns;\n                                            importOptions.sortOrder = subsetConfig.sortOrder;\n                                        }\n                                    }\n\n                                    const sampleRows = metadata.sample_rows || [];\n                                    const columns = metadata.columns || [];\n                                    const tableObj: DictTable = {\n                                        id: tableName.split('.').pop() || tableName,\n                                        displayId: tableName,\n                                        names: columns.map((c: any) => c.name),\n                                        metadata: columns.reduce((acc: Record<string, any>, col: any) => ({\n                                            ...acc,\n                                            [col.name]: { type: 'string' as any, semanticType: '', levels: [] }\n                                        }), {}),\n                                        rows: sampleRows,\n                                        anchored: true,\n                                        createdBy: 'user' as const,\n                                        attachedMetadata: '',\n                                        source: {\n                                            type: 'database' as const,\n                                            databaseTable: tableName,\n                                            canRefresh: true,\n                                            lastRefreshed: Date.now(),\n                                        },\n                                    };\n\n                                    onImport();\n                                    dispatch(loadTable({\n                                        table: tableObj,\n                                        storeOnServer,\n                                        dataLoaderType,\n                                        dataLoaderParams: params,\n                                        sourceTableName: tableName,\n                                        importOptions: Object.keys(importOptions).length > 0 ? importOptions : undefined,\n                                    })).unwrap()\n                                        .then((result) => {\n                                            setLoadedTables(prev => ({ ...prev, [tableName]: importMode }));\n                                            onFinish(\"success\", `Loaded table \"${tableName}\"`, [result.table.id]);\n                                        })\n                                        .catch((error) => {\n                                            console.error('Failed to load data:', error);\n                                            onFinish(\"error\", `Failed to load \"${tableName}\": ${error}`);\n                                        });\n                                }}\n                            >\n                                {importMode === 'subset' ? 'Load Table Subset' : 'Load Table'}\n                            </Button>\n                            )}\n                        </Box>\n                    </Box>\n                )}\n            </Box>\n        ),\n    ]\n\n    const isConnected = Object.keys(tableMetadata).length > 0;\n\n    return (\n        <Box sx={{p: 0, pb: 2}}>\n            {isConnecting && <Box sx={{\n                position: \"absolute\", top: 0, left: 0, width: \"100%\", height: \"100%\", \n                display: \"flex\", alignItems: \"center\", justifyContent: \"center\", zIndex: 1000,\n                backgroundColor: \"rgba(255, 255, 255, 0.7)\"\n            }}>\n                <CircularProgress size={20} />\n            </Box>}\n            {isConnected ? (\n                // Connected state: show connection parameters and disconnect button\n                <Box sx={{}}>\n                    <Box sx={{mb: 1.5}}>\n                        <Box sx={{display: \"flex\", flexDirection: \"row\", alignItems: \"center\", gap: 0.5, mb: 1.5, flexWrap: \"wrap\"}}>\n                            <Typography variant=\"body2\" component=\"span\" sx={{fontSize: 11, color: 'secondary.main', fontWeight: 600, mr: 0.5}}>\n                                {dataLoaderType}\n                            </Typography>\n                            {paramDefs.filter((paramDef) => params[paramDef.name]).length > 0 && (\n                                <Typography variant=\"body2\" component=\"span\" sx={{fontSize: 11, color: 'text.disabled', mr: 0.5}}>·</Typography>\n                            )}\n                            {paramDefs.filter((paramDef) => params[paramDef.name]).map((paramDef, index) => (\n                                <React.Fragment key={paramDef.name}>\n                                    <Typography variant=\"body2\" component=\"span\" sx={{fontSize: 11, color: 'text.secondary'}}>\n                                        {paramDef.name}:\n                                    </Typography>\n                                    <Typography variant=\"body2\" component=\"span\" sx={{fontSize: 11, color: 'text.primary', fontWeight: 500, mr: 0.5}}>\n                                        {params[paramDef.name] || '(empty)'}\n                                    </Typography>\n                                    {index < paramDefs.filter((p) => params[p.name]).length - 1 && (\n                                        <Typography variant=\"body2\" component=\"span\" sx={{fontSize: 11, color: 'text.disabled', mr: 0.5}}>·</Typography>\n                                    )}\n                                </React.Fragment>\n                            ))}\n                        </Box>\n                        <Box sx={{display: \"flex\", flexDirection: \"row\", alignItems: \"flex-end\", gap: 1.5}}>\n                            <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 0.25, flex: 1, maxWidth: 300 }}>\n                                <Typography sx={{ fontSize: 11, fontWeight: 500, color: 'text.secondary', lineHeight: 1.3, display: 'flex', alignItems: 'center', gap: 0.5 }}>\n                                    <SearchIcon sx={{ fontSize: 11 }} /> table filter\n                                </Typography>\n                                <TextField\n                                    sx={{\n                                        '& .MuiInputBase-root': {fontSize: 12, height: '30px'},\n                                        '& .MuiInputBase-input': {fontSize: 12, py: 0.5, px: 1},\n                                        '& .MuiInputBase-input::placeholder': {fontSize: 11, fontStyle: \"italic\"},\n                                        '& .MuiOutlinedInput-root': {\n                                            '& fieldset': { borderColor: 'rgba(0,0,0,0.15)' },\n                                        }\n                                    }}\n                                    variant=\"outlined\"\n                                    size=\"small\"\n                                    fullWidth\n                                    autoComplete=\"off\"\n                                    placeholder=\"filter tables by keyword\"\n                                    value={tableFilter}\n                                    onChange={(event) => setTableFilter(event.target.value)}\n                                />\n                            </Box>\n                            <Button\n                                variant=\"outlined\"\n                                size=\"small\"\n                                sx={{textTransform: \"none\", height: 30, fontSize: 12}}\n                                onClick={() => {\n                                    setIsConnecting(true);\n                                    fetchWithIdentity(getUrls().DATA_LOADER_LIST_TABLES, {\n                                        method: 'POST',\n                                        headers: {\n                                            'Content-Type': 'application/json',\n                                        },\n                                        body: JSON.stringify({\n                                            data_loader_type: dataLoaderType, \n                                            data_loader_params: params,\n                                            table_filter: tableFilter.trim() || null\n                                        })\n                                    }).then((response: Response) => response.json())\n                                .then((data: any) => {\n                                    if (data.status === \"success\") {\n                                        console.log(data.tables);\n                                        setTableMetadata(Object.fromEntries(data.tables.map((table: any) => {\n                                            return [table.name, table.metadata];\n                                        })));\n                                    } else {\n                                        console.error('Failed to fetch data loader tables: {}', data.message);\n                                        onFinish(\"error\", `Failed to fetch data loader tables: ${data.message}`);\n                                    }\n                                    setIsConnecting(false);\n                                })\n                                .catch((error: any) => {\n                                    onFinish(\"error\", `Failed to fetch data loader tables, please check the server is running`);\n                                    setIsConnecting(false);\n                                });\n                                }}\n                            >\n                                Refresh\n                            </Button>\n                            <Button\n                                variant=\"outlined\"\n                                size=\"small\"\n                                sx={{textTransform: \"none\", height: 30, fontSize: 12}}\n                                onClick={() => {\n                                    setTableMetadata({});\n                                    setTableFilter(\"\");\n                                }}\n                            >\n                                Disconnect\n                            </Button>\n                        </Box>\n                    </Box>\n                    \n                    {tableMetadataBox}\n                </Box>\n            ) : (\n                // Not connected: show connection forms\n                <>\n                    <Typography variant=\"body2\" sx={{fontSize: 12, color: 'secondary.main', fontWeight: 600, mt: 1}}>\n                        {dataLoaderType}\n                    </Typography>\n                    <Box sx={{\n                        display: \"grid\",\n                        gridTemplateColumns: \"repeat(3, 1fr)\",\n                        gap: 1.5,\n                        mt: 1,\n                    }}>\n                        {paramDefs.map((paramDef) => (\n                            <Box key={paramDef.name} sx={{ display: \"flex\", flexDirection: \"column\", gap: 0.25 }}>\n                                <Typography \n                                    sx={{\n                                        fontSize: 11,\n                                        fontWeight: 500,\n                                        color: paramDef.required ? 'text.primary' : 'text.secondary',\n                                        lineHeight: 1.3,\n                                    }}\n                                >\n                                    {paramDef.name}\n                                    {paramDef.required && <span style={{color: '#d32f2f'}}> *</span>}\n                                </Typography>\n                                <TextField\n                                    sx={{\n                                        '& .MuiInputBase-root': {fontSize: 12, height: '30px'},\n                                        '& .MuiInputBase-input': {fontSize: 12, py: 0.5, px: 1},\n                                        '& .MuiInputBase-input::placeholder': {fontSize: 11, fontStyle: \"italic\"},\n                                        '& .MuiOutlinedInput-root': {\n                                            '& fieldset': { borderColor: 'rgba(0,0,0,0.15)' },\n                                        }\n                                    }}\n                                    variant=\"outlined\"\n                                    size=\"small\"\n                                    fullWidth\n                                    required={paramDef.required}\n                                    value={params[paramDef.name] ?? ''}\n                                    placeholder={paramDef.default ? `${paramDef.default}` : paramDef.description || ''}\n                                    onChange={(event: any) => { \n                                        dispatch(dfActions.updateDataLoaderConnectParam({\n                                            dataLoaderType, paramName: paramDef.name, \n                                            paramValue: event.target.value}));\n                                    }}\n                                />\n                            </Box>\n                        ))}\n                    </Box>\n                    <Box sx={{ display: \"flex\", flexDirection: \"row\", alignItems: \"flex-end\", gap: 1.5, mt: 2 }}>\n                        <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 0.25, flex: 1, maxWidth: 300 }}>\n                            <Typography sx={{ fontSize: 11, fontWeight: 500, color: 'text.secondary', lineHeight: 1.3, display: 'flex', alignItems: 'center', gap: 0.5 }}>\n                                <SearchIcon sx={{ fontSize: 11 }} /> table filter\n                            </Typography>\n                            <TextField\n                                sx={{\n                                    '& .MuiInputBase-root': {fontSize: 12, height: '30px'},\n                                    '& .MuiInputBase-input': {fontSize: 12, py: 0.5, px: 1},\n                                    '& .MuiInputBase-input::placeholder': {fontSize: 11, fontStyle: \"italic\"},\n                                    '& .MuiOutlinedInput-root': {\n                                        '& fieldset': { borderColor: 'rgba(0,0,0,0.15)' },\n                                    }\n                                }}\n                                variant=\"outlined\"\n                                size=\"small\"\n                                fullWidth\n                                autoComplete=\"off\"\n                                placeholder=\"filter tables by keyword\"\n                                value={tableFilter}\n                                onChange={(event) => setTableFilter(event.target.value)}\n                            />\n                        </Box>\n                        {paramDefs.length > 0 && \n                            <Button \n                                variant=\"contained\"\n                                color=\"primary\"\n                                size=\"small\"\n                                sx={{textTransform: \"none\", minWidth: 100, height: 30}}\n                                onClick={() => {\n                                    setIsConnecting(true);\n                                    fetchWithIdentity(getUrls().DATA_LOADER_LIST_TABLES, {\n                                        method: 'POST',\n                                        headers: {\n                                            'Content-Type': 'application/json',\n                                        },\n                                        body: JSON.stringify({\n                                            data_loader_type: dataLoaderType, \n                                            data_loader_params: params,\n                                            table_filter: tableFilter.trim() || null\n                                        })\n                                    }).then((response: Response) => response.json())\n                                .then((data: any) => {\n                                    if (data.status === \"success\") {\n                                        console.log(data.tables);\n                                        setTableMetadata(Object.fromEntries(data.tables.map((table: any) => {\n                                            return [table.name, table.metadata];\n                                        })));\n                                    } else {\n                                        console.error('Failed to fetch data loader tables: {}', data.message);\n                                        onFinish(\"error\", `Failed to fetch data loader tables: ${data.message}`);\n                                    }\n                                    setIsConnecting(false);\n                                })\n                                .catch((error: any) => {\n                                    onFinish(\"error\", `Failed to fetch data loader tables, please check the server is running`);\n                                    setIsConnecting(false);\n                                });\n                            }}>\n                                Connect{tableFilter.trim() ? \" with filter\" : \"\"}\n                            </Button>}\n                    </Box>\n                    {authInstructions.trim() && (\n                        <Box sx={(theme) => ({\n                            mt: 2, px: 1.5, py: 1, \n                            backgroundColor: 'rgba(0,0,0,0.02)',\n                            borderRadius: 1,\n                            border: '1px solid rgba(0,0,0,0.06)',\n                            fontFamily: theme.typography.fontFamily,\n                            fontSize: '11px',\n                            color: 'text.secondary',\n                            lineHeight: 1.6,\n                            '& *': { fontFamily: theme.typography.fontFamily, fontSize: 'inherit', lineHeight: 'inherit', color: 'inherit' },\n                            '& p': { margin: '0 0 4px 0', '&:last-child': { marginBottom: 0 } },\n                            '& code': { fontSize: '10px', fontFamily: 'monospace !important', backgroundColor: 'rgba(0,0,0,0.06)', padding: '1px 4px', borderRadius: '3px' },\n                            '& pre': { fontSize: '10px', fontFamily: 'monospace !important', backgroundColor: 'rgba(0,0,0,0.04)', padding: '8px', borderRadius: '4px', overflow: 'auto', margin: '4px 0', '& code': { backgroundColor: 'transparent', padding: 0 } },\n                            '& a': { color: 'primary.main' },\n                            '& ul, & ol': { paddingLeft: '20px', margin: '4px 0' },\n                            '& li': { marginBottom: '2px' },\n                            '& strong': { fontWeight: 600, color: 'text.primary' },\n                            '& h1, & h2, & h3, & h4': { fontSize: '12px', fontWeight: 600, color: 'text.primary', margin: '4px 0' },\n                        })}>\n                            <Markdown>{authInstructions.trim()}</Markdown>\n                        </Box>\n                    )}</>\n            )}\n        </Box>\n    );\n}"
  },
  {
    "path": "src/views/DataFormulator.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useEffect, useRef, useState, useCallback, useMemo } from 'react';\nimport '../scss/App.scss';\n\nimport { useDispatch, useSelector } from \"react-redux\"; /* code change */\nimport { \n    DataFormulatorState,\n    dfActions,\n    dfSelectors,\n    ModelConfig,\n} from '../app/dfSlice'\n\nimport _ from 'lodash';\n\nimport { Allotment, AllotmentHandle } from \"allotment\";\nimport \"allotment/dist/style.css\";\n\nimport {\n    Typography,\n    Box,\n    Tooltip,\n    Button,\n    Divider,\n    useTheme,\n    alpha,\n    CircularProgress,\n    Backdrop,\n} from '@mui/material';\nimport { borderColor, shadow, radius } from '../app/tokens';\n\nimport { FreeDataViewFC } from './DataView';\nimport { VisualizationViewFC } from './VisualizationView';\n\nimport { DndProvider } from 'react-dnd'\nimport { HTML5Backend } from 'react-dnd-html5-backend'\nimport { toolName } from '../app/App';\nimport { DataThread } from './DataThread';\n\nimport dfLogo from '../assets/df-logo.png';\nimport exampleImageTable from \"../assets/example-image-table.png\";\nimport { ModelSelectionButton } from './ModelSelectionDialog';\nimport { getUrls, fetchWithIdentity } from '../app/utils';\nimport { UnifiedDataUploadDialog, UploadTabType, DataLoadMenu } from './UnifiedDataUploadDialog';\nimport { ReportView } from './ReportView';\nimport GitHubIcon from '@mui/icons-material/GitHub';\nimport YouTubeIcon from '@mui/icons-material/YouTube';\nimport { ExampleSession, exampleSessions, ExampleSessionCard } from './ExampleSessions';\nimport { useDataRefresh, useDerivedTableRefresh } from '../app/useDataRefresh';\nimport type { DictTable } from '../components/ComponentType';\n\nexport const DataFormulatorFC = ({ }) => {\n\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const focusedId = useSelector((state: DataFormulatorState) => state.focusedId);\n    const models = useSelector((state: DataFormulatorState) => state.models);\n    const selectedModelId = useSelector((state: DataFormulatorState) => state.selectedModelId);\n    const viewMode = useSelector((state: DataFormulatorState) => state.viewMode);\n    const serverConfig = useSelector((state: DataFormulatorState) => state.serverConfig);\n    const theme = useTheme();\n\n    const dispatch = useDispatch();\n    \n    // Set up automatic refresh of derived tables when source data changes\n    useDerivedTableRefresh();\n\n    // State for unified data upload dialog\n    const [uploadDialogOpen, setUploadDialogOpen] = useState(false);\n    const [uploadDialogInitialTab, setUploadDialogInitialTab] = useState<UploadTabType>('menu');\n\n    // Loading state for sessions (from Redux, shared with App.tsx)\n    const sessionLoading = useSelector((state: DataFormulatorState) => state.sessionLoading);\n    const sessionLoadingLabel = useSelector((state: DataFormulatorState) => state.sessionLoadingLabel);\n\n    const openUploadDialog = (tab: UploadTabType) => {\n        setUploadDialogInitialTab(tab);\n        setUploadDialogOpen(true);\n    };\n\n    const handleLoadExampleSession = (session: ExampleSession) => {\n        dispatch(dfActions.setSessionLoading({ loading: true, label: `Loading ${session.title}...` }));\n\n        dispatch(dfActions.addMessages({\n            timestamp: Date.now(),\n            type: 'info',\n            component: 'data formulator',\n            value: `Loading example session: ${session.title}`,\n        }));\n        \n        // Load the complete state from the JSON file\n        fetch(session.dataFile)\n            .then(res => res.json())\n            .then(savedState => {\n                // Use loadState to restore the complete session state\n                dispatch(dfActions.loadState(savedState));\n                \n                dispatch(dfActions.addMessages({\n                    timestamp: Date.now(),\n                    type: 'success',\n                    component: 'data formulator',\n                    value: `Successfully loaded ${session.title}`,\n                }));\n            })\n            .catch(error => {\n                console.error('Error loading session:', error);\n                dispatch(dfActions.addMessages({\n                    timestamp: Date.now(),\n                    type: 'error',\n                    component: 'data formulator',\n                    value: `Failed to load ${session.title}: ${error.message}`,\n                }));\n            })\n            .finally(() => {\n                dispatch(dfActions.setSessionLoading({ loading: false }));\n            });\n    };\n\n    useEffect(() => {\n        document.title = toolName;\n        \n        // Preload imported images (public images are preloaded in index.html)\n        const imagesToPreload = [\n            { src: dfLogo, type: 'image/png' },\n            { src: exampleImageTable, type: 'image/png' },\n        ];\n        \n        const preloadLinks: HTMLLinkElement[] = [];\n        imagesToPreload.forEach(({ src, type }) => {\n            // Use link preload for better priority\n            const link = document.createElement('link');\n            link.rel = 'preload';\n            link.as = 'image';\n            link.href = src;\n            link.type = type;\n            document.head.appendChild(link);\n            preloadLinks.push(link);\n        });\n        \n        // Cleanup function to remove preload links when component unmounts\n        return () => {\n            preloadLinks.forEach(link => {\n                if (link.parentNode) {\n                    link.parentNode.removeChild(link);\n                }\n            });\n        };\n    }, []);\n\n    useEffect(() => {\n        const findWorkingModel = async () => {\n            let selectedModel = models.find(m => m.id == selectedModelId);\n            let otherModels = models.filter(m => m.id != selectedModelId);\n\n            let modelsToTest = [selectedModel, ...otherModels].filter(m => m != undefined);\n\n            let testModel = async (model: ModelConfig) => {\n                const message = {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application/json', },\n                    body: JSON.stringify({ model }),\n                };\n                try {\n                    const response = await fetchWithIdentity(getUrls().TEST_MODEL, {...message });\n                    const data = await response.json();\n                    const status = data[\"status\"] || 'error';\n                    return {model, status, message: data[\"message\"] || \"\"};\n                } catch (error) {\n                    return {model, status: 'error', message: (error as Error).message || 'Failed to test model'};\n                }\n            }\n\n            // Then test unassigned models sequentially until one works\n            for (let model of modelsToTest) {\n                if (!model) continue;\n                let testResult = await testModel(model);\n                dispatch(dfActions.updateModelStatus({\n                    id: model.id, \n                    status: testResult.status, \n                    message: testResult.message\n                }));\n                if (testResult.status == 'ok') {\n                    dispatch(dfActions.selectModel(model.id));\n                    return;\n                };\n            }\n        };\n\n        if (models.length > 0) {\n            findWorkingModel();\n        }\n    }, []);\n\n    const visPaneMain = (\n        <Box sx={{ width: \"100%\", overflow: \"hidden\", display: \"flex\", flexDirection: \"row\" }}>\n            <VisualizationViewFC />\n        </Box>);\n\n    const visPane = (\n        <Box className=\"inner-allotment\" sx={{width: '100%', height: '100%', \n            \"& .split-view-view:first-of-type\": {\n                display: 'flex',\n                overflow: 'hidden',\n        }}}>\n            <Allotment vertical>\n                <Allotment.Pane minSize={200} >\n                {visPaneMain}\n                </Allotment.Pane>\n                <Allotment.Pane minSize={0} preferredSize={180}>\n                    <Box className=\"table-box\">\n                        <FreeDataViewFC />\n                    </Box>\n                </Allotment.Pane>\n            </Allotment>\n        </Box>);\n\n    let borderBoxStyle = {\n        border: `1px solid ${borderColor.view}`, \n        borderRadius: radius.pill, \n        //boxShadow: '0 0 5px rgba(0,0,0,0.1)',\n    }\n\n    // Discrete column snapping for DataThread\n    const CARD_WIDTH = 220;\n    const CARD_GAP = 12;\n    const COLUMN_WIDTH = CARD_WIDTH + CARD_GAP;\n    const PANEL_PADDING = 32 ;\n    const columnSize = (n: number) => n * COLUMN_WIDTH + 2 * PANEL_PADDING;\n    const allotmentRef = useRef<AllotmentHandle>(null);\n    const containerRef = useRef<HTMLDivElement>(null);\n\n    const snapToColumns = useCallback((sizes: number[]) => {\n        if (!allotmentRef.current || sizes.length < 2) return;\n        const raw = sizes[0];\n        // Find nearest discrete column count (1-3)\n        let bestCols = 1;\n        let bestDist = Infinity;\n        for (let n = 1; n <= 3; n++) {\n            const dist = Math.abs(raw - columnSize(n));\n            if (dist < bestDist) {\n                bestDist = dist;\n                bestCols = n;\n            }\n        }\n        const snapped = columnSize(bestCols);\n        if (Math.abs(raw - snapped) > 2) {\n            const totalWidth = sizes.reduce((a, b) => a + b, 0);\n            allotmentRef.current.resize([snapped, totalWidth - snapped]);\n        }\n    }, []);\n\n    // Compute thread count to decide preferred pane width:\n    // A \"thread\" is a leaf table's derivation chain displayed as a column.\n    // Must match the chain-splitting logic in DataThread (MAX_CHAIN_TABLES).\n    const threadCount = useMemo(() => {\n        // A table is a \"leaf\" if no other non-anchored table derives from it\n        const hasNonAnchoredChild = new Set<string>();\n        tables.forEach(t => {\n            if (t.derive && !t.anchored) {\n                hasNonAnchoredChild.add(t.derive.trigger.tableId);\n            }\n        });\n        const leafTables = tables.filter(t => !hasNonAnchoredChild.has(t.id));\n        // Threads = leaf tables with derivation chains + 1 group for hanging (source) tables\n        const threaded = leafTables.filter(t => t.derive);\n        const hanging = leafTables.filter(t => !t.derive);\n        let count = threaded.length + (hanging.length > 0 ? 1 : 0);\n\n        // Account for chain-splitting: long chains are broken into sub-threads\n        // (mirrors MAX_CHAIN_TABLES logic in DataThread)\n        const MAX_CHAIN_TABLES = 5;\n        const tableById = new Map(tables.map(t => [t.id, t]));\n        const getChainLength = (t: DictTable): number => {\n            let len = 1;\n            let cur = t;\n            while (cur.derive && !cur.anchored) {\n                len++;\n                const parent = tableById.get(cur.derive.trigger.tableId);\n                if (!parent) break;\n                cur = parent;\n            }\n            return len;\n        };\n        const claimedForCount = new Set<string>();\n        for (const lt of threaded) {\n            // Walk chain\n            const chainIds: string[] = [lt.id];\n            let cur = lt;\n            while (cur.derive && !cur.anchored) {\n                const pid = cur.derive.trigger.tableId;\n                chainIds.push(pid);\n                const parent = tableById.get(pid);\n                if (!parent) break;\n                cur = parent;\n            }\n            const ownedIds = chainIds.filter(id => !claimedForCount.has(id));\n            if (ownedIds.length > MAX_CHAIN_TABLES) {\n                // Each extra split adds one more thread entry\n                const extraSplits = Math.floor((ownedIds.length - 1) / MAX_CHAIN_TABLES);\n                count += extraSplits;\n            }\n            chainIds.forEach(id => claimedForCount.add(id));\n        }\n\n        return count;\n    }, [tables]);\n    const preferredColumns = threadCount <= 1 ? 1 : 2;\n\n    // Track previous thread count to auto-resize intelligently\n    const prevThreadCountRef = useRef(threadCount);\n    useEffect(() => {\n        const prev = prevThreadCountRef.current;\n        prevThreadCountRef.current = threadCount;\n        if (!allotmentRef.current || !containerRef.current) return;\n        // When there are no tables the first Allotment.Pane is unmounted,\n        // so the Allotment only has one child – calling resize with two\n        // sizes would crash (accessing .minimumSize on an undefined pane).\n        if (tables.length === 0) return;\n        const totalWidth = containerRef.current.clientWidth;\n        if (totalWidth <= 0) return;\n\n        let newSize: number | null = null;\n        if (prev <= 1 && threadCount > 1) {\n            // Case 1: was 1 thread, now 2+ → expand to 2 columns\n            newSize = columnSize(2);\n        } else if (prev > 1 && threadCount <= 1) {\n            // Case 2: was 2+ threads, now 1 → shrink to 1 column\n            newSize = columnSize(1);\n        }\n        // Case 3: was 2+ threads and still 2+ → don't change (respect user's manual setting)\n\n        if (newSize !== null) {\n            // Defer resize to the next animation frame so the Allotment has\n            // re-rendered its pane children before we call resize.\n            const finalSize = newSize;\n            const rafId = requestAnimationFrame(() => {\n                try {\n                    const w = containerRef.current?.clientWidth ?? totalWidth;\n                    allotmentRef.current?.resize([finalSize, w - finalSize]);\n                } catch {\n                    // Allotment pane structure may not yet match; ignore.\n                }\n            });\n            return () => cancelAnimationFrame(rafId);\n        }\n    }, [threadCount, tables.length]);\n\n    const fixedSplitPane = ( \n        <Box sx={{display: 'flex', flexDirection: 'row', height: '100%'}}>\n            <Box ref={containerRef} className=\"outer-allotment\" sx={{\n                    margin: '4px 8px 8px 8px', backgroundColor: 'white',\n                    display: 'flex', height: 'calc(100% - 12px)', width: '100%', flexDirection: 'column',\n                    overflow: 'hidden',\n                    position: 'relative'}}>\n                <Allotment ref={allotmentRef} onDragEnd={snapToColumns} proportionalLayout={false}>\n                    {tables.length > 0 ? (\n                        <Allotment.Pane minSize={columnSize(1)} preferredSize={columnSize(preferredColumns)} maxSize={columnSize(3)} snap={false}>\n                            <DataThread sx={{\n                                display: 'flex', \n                                flexDirection: 'column',\n                                overflow: 'hidden',\n                                alignContent: 'flex-start',\n                                height: '100%',\n                                mr: 0.5,\n                            }}/>\n                        </Allotment.Pane>\n                    ) : null}\n                    <Allotment.Pane minSize={300}>\n                        <Box sx={{ ...borderBoxStyle, height: '100%', overflow: 'hidden', display: 'flex', flexDirection: 'column', boxSizing: 'border-box' }}>\n                            {viewMode === 'editor' ? (\n                                visPane\n                            ) : (\n                                <ReportView />\n                            )}\n                        </Box>\n                    </Allotment.Pane>\n                </Allotment>\n            </Box>\n        </Box>\n    );\n\n    let footer = <Box sx={{ color: 'text.secondary', display: 'flex', \n            backgroundColor: 'rgba(255, 255, 255, 0.89)',\n            alignItems: 'center', justifyContent: 'center' }}>\n        <Button size=\"small\" color=\"inherit\" \n            sx={{ textTransform: 'none'}} \n            target=\"_blank\" rel=\"noopener noreferrer\" \n            href=\"https://www.microsoft.com/en-us/privacy/privacystatement\">Privacy & Cookies</Button>\n        <Divider orientation=\"vertical\" variant=\"middle\" flexItem sx={{ mx: 1 }} />\n        <Button size=\"small\" color=\"inherit\" \n            sx={{ textTransform: 'none'}} \n            target=\"_blank\" rel=\"noopener noreferrer\" \n            href=\"https://www.microsoft.com/en-us/legal/intellectualproperty/copyright\">Terms of Use</Button>\n        <Divider orientation=\"vertical\" variant=\"middle\" flexItem sx={{ mx: 1 }} />\n        <Button size=\"small\" color=\"inherit\" \n            sx={{ textTransform: 'none'}} \n            target=\"_blank\" rel=\"noopener noreferrer\" \n            href=\"https://github.com/microsoft/data-formulator/issues\">Contact Us</Button>\n        <Typography sx={{ display: 'inline', fontSize: '12px', ml: 1 }}> @ {new Date().getFullYear()}</Typography>\n    </Box>\n\n    let dataUploadRequestBox = <Box sx={{\n            margin: '4px 4px 4px 8px', \n            background: `\n                linear-gradient(90deg, ${alpha(theme.palette.text.secondary, 0.01)} 1px, transparent 1px),\n                linear-gradient(0deg, ${alpha(theme.palette.text.secondary, 0.01)} 1px, transparent 1px)\n            `,\n            backgroundSize: '16px 16px',\n            width: 'calc(100vw - 16px)', overflow: 'auto', display: 'flex', flexDirection: 'column', height: '100%',\n        }}>\n        <Box sx={{margin:'auto', pb: '5%', display: \"flex\", flexDirection: \"column\", textAlign: \"center\" }}>\n            <Box sx={{display: 'flex', mx: 'auto'}}>\n                <Typography fontSize={84} sx={{ml: 2, letterSpacing: '0.05em'}}>{toolName}</Typography> \n            </Box>\n            <Typography sx={{ \n                fontSize: 24, color: theme.palette.text.secondary, \n                textAlign: 'center', mb: 2}}>\n                Explore data with visualizations, powered by AI agents. \n            </Typography>\n            {serverConfig.PROJECT_FRONT_PAGE && (\n            <Box component=\"nav\" aria-label=\"Resources\" sx={{ display: 'flex', justifyContent: 'center', gap: 1, mb: 3, flexWrap: 'wrap' }}>\n                <Button size=\"small\" variant=\"text\" color=\"primary\"\n                    sx={{ textTransform: 'none', fontSize: 13 }}\n                    startIcon={<Box component=\"img\" sx={{ width: 15, height: 15 }} alt=\"\" aria-hidden=\"true\" src=\"/pip-logo.svg\" />}\n                    target=\"_blank\" rel=\"noopener noreferrer\"\n                    href=\"https://pypi.org/project/data-formulator/\"\n                >Install Locally</Button>\n                <Button size=\"small\" variant=\"text\" color=\"primary\"\n                    sx={{ textTransform: 'none', fontSize: 13 }}\n                    startIcon={<YouTubeIcon sx={{ color: '#FF0000', fontSize: 17 }} aria-hidden=\"true\" />}\n                    target=\"_blank\" rel=\"noopener noreferrer\"\n                    href=\"https://www.youtube.com/watch?v=GfTE2FLyMrs\"\n                >Video</Button>\n                <Button size=\"small\" variant=\"text\" color=\"primary\"\n                    sx={{ textTransform: 'none', fontSize: 13 }}\n                    startIcon={<GitHubIcon aria-hidden=\"true\" sx={{ fontSize: 17 }} />}\n                    target=\"_blank\" rel=\"noopener noreferrer\"\n                    href=\"https://github.com/microsoft/data-formulator\"\n                >GitHub</Button>\n            </Box>\n            )}\n            <Box sx={{my: 4}}>\n                <DataLoadMenu \n                    onSelectTab={(tab) => openUploadDialog(tab)}\n                    serverConfig={serverConfig}\n                    variant=\"page\"\n                />\n            </Box>\n            <Box sx={{mt: 4}}>\n                <Divider sx={{width: '200px', mx: 'auto', mb: 3, fontSize: '1.2rem'}}>\n                    <Typography sx={{ color: 'text.secondary' }}>\n                        demos\n                    </Typography>\n                </Divider>\n                <Box sx={{\n                    display: 'grid',\n                    gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))',\n                    gap: 2,\n                }}>\n                    {exampleSessions.map((session) => (\n                        <ExampleSessionCard\n                            key={session.id}\n                            session={session}\n                            theme={theme}\n                            onClick={() => handleLoadExampleSession(session)}\n                        />\n                    ))}\n                </Box>\n            </Box>\n        </Box>\n        {footer}\n    </Box>;\n    \n    return (\n        <Box sx={{ display: 'block', width: \"100%\", height: '100%', position: 'relative' }}>\n            <DndProvider backend={HTML5Backend}>\n                {tables.length > 0 ? fixedSplitPane : dataUploadRequestBox}\n                <UnifiedDataUploadDialog \n                    open={uploadDialogOpen}\n                    onClose={() => setUploadDialogOpen(false)}\n                    initialTab={uploadDialogInitialTab}\n                />\n                {/* Loading overlay for session loading */}\n                <Backdrop\n                    open={sessionLoading}\n                    sx={{\n                        position: 'absolute',\n                        zIndex: 999,\n                        backgroundColor: alpha(theme.palette.background.default, 0.85),\n                        backdropFilter: 'blur(4px)',\n                        display: 'flex',\n                        flexDirection: 'column',\n                        gap: 2,\n                    }}\n                >\n                    <CircularProgress size={40} />\n                    <Typography variant=\"body1\" color=\"text.secondary\">\n                        {sessionLoadingLabel || 'Loading session...'}\n                    </Typography>\n                    <Button\n                        variant=\"text\"\n                        size=\"small\"\n                        onClick={() => dispatch(dfActions.setSessionLoading({ loading: false }))}\n                        sx={{ mt: 1, textTransform: 'none', color: 'text.secondary' }}\n                    >\n                        Cancel\n                    </Button>\n                </Backdrop>\n                {selectedModelId == undefined && (\n                    <Box sx={{\n                        position: 'absolute',\n                        top: 0,\n                        left: 0,\n                        right: 0,\n                        bottom: 0,\n                        backgroundColor: alpha(theme.palette.background.default, 0.85),\n                        backdropFilter: 'blur(4px)',\n                        display: 'flex',\n                        flexDirection: 'column',\n                        zIndex: 1000,\n                    }}>\n                        <Box sx={{margin:'auto', pb: '5%', display: \"flex\", flexDirection: \"column\", textAlign: \"center\"}}>\n                            <Box component=\"img\" sx={{  width: 196, margin: \"auto\" }} alt=\"Data Formulator logo\" src={dfLogo} fetchPriority=\"high\" />\n                            <Typography variant=\"h3\" sx={{marginTop: \"20px\", fontWeight: 200, letterSpacing: '0.05em'}}>\n                                {toolName}\n                            </Typography>\n                            <Typography  variant=\"h4\" sx={{mt: 3, fontSize: 28, letterSpacing: '0.02em'}}>\n                                First, let's <ModelSelectionButton />\n                            </Typography>\n                            <Typography  color=\"text.secondary\" variant=\"body1\" sx={{mt: 2, width: 600}}>💡 Models with strong code generation capabilities (e.g., gpt-5, claude-sonnet-4-5) provide best experience with Data Formulator.</Typography>\n                        </Box>\n                        {footer}\n                    </Box>\n                )}\n            </DndProvider>\n        </Box>);\n}"
  },
  {
    "path": "src/views/DataLoadingChat.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as React from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { Box, Button, Divider, IconButton, Typography, Tooltip, CircularProgress, alpha, useTheme } from '@mui/material';\nimport { borderColor, transition, radius } from '../app/tokens';\n\n\nimport { useDispatch, useSelector } from 'react-redux';\nimport { AppDispatch } from '../app/store';\nimport { DataFormulatorState, dfActions, fetchFieldSemanticType } from '../app/dfSlice';\nimport { createTableFromText } from '../data/utils';\nimport { loadTable } from '../app/tableThunks';\nimport { createOrderedThreadBlocks, DataLoadingInputBox, DataPreviewBox, SingleDataCleanThreadView } from './DataLoadingThread';\n\n\nconst generateDefaultName = (seed: string) => {\n    const hash = seed.split('').reduce((acc, c) => ((acc << 5) - acc) + c.charCodeAt(0) | 0, 0);\n    return `data-${Math.abs(hash).toString(36).slice(0, 5)}`;\n};\n\nconst getUniqueTableName = (baseName: string, existingNames: Set<string>): string => {\n    let uniqueName = baseName;\n    let counter = 1;\n    while (existingNames.has(uniqueName)) {\n        uniqueName = `${baseName}_${counter}`;\n        counter += 1;\n    }\n    return uniqueName;\n};\n\nexport const DataLoadingChat: React.FC<{storeOnServer?: boolean}> = ({storeOnServer = true}) => {\n    const theme = useTheme();\n    const dispatch = useDispatch<AppDispatch>();\n    const inputBoxRef = useRef<(() => void) | null>(null);\n    const abortControllerRef = useRef<AbortController | null>(null);\n\n    const cleanInProgress = useSelector((state: DataFormulatorState) => state.cleanInProgress);\n    const existingTables = useSelector((state: DataFormulatorState) => state.tables);\n    const dataCleanBlocks = useSelector((state: DataFormulatorState) => state.dataCleanBlocks);\n    const focusedDataCleanBlockId = useSelector((state: DataFormulatorState) => state.focusedDataCleanBlockId);\n\n    const [streamingContent, setStreamingContent] = useState('');\n\n    const existingNames = new Set(existingTables.map(t => t.id));\n\n    let existOutputBlocks = dataCleanBlocks.length > 0;\n\n    let dataCleanBlocksThread = createOrderedThreadBlocks(dataCleanBlocks);\n    let threadsComponent = dataCleanBlocksThread.map((thread, i) => {\n        return <SingleDataCleanThreadView key={`data-clean-thread-${i}`} thread={thread} sx={{\n            backgroundColor: 'white', \n            borderRadius: radius.md,\n            padding: 1,\n            flex:  'none',\n            display: 'flex',\n            flexDirection: 'column',\n            height: 'fit-content',\n            transition: transition.fast,\n        }} />\n    })\n\n    // Get the selected CSV data from Redux state\n    const selectedTable = (() => {\n        if (focusedDataCleanBlockId) {\n            let block = dataCleanBlocks.find(block => block.id === focusedDataCleanBlockId.blockId);\n            if (block) {\n                return block.items?.[focusedDataCleanBlockId.itemId];\n            }\n        }\n        return undefined;\n    })();\n\n    const handleUpload = () => {\n        if (!selectedTable) return;\n\n        const suggestedName = selectedTable.name || generateDefaultName(selectedTable.content.value.slice(0, 96));\n        \n        console.log(selectedTable);\n\n        const base = suggestedName.trim();\n        const unique = getUniqueTableName(base, existingNames);\n        const table = createTableFromText(unique, selectedTable.content.value, selectedTable.context);\n        if (table) {\n            const tableWithSource = { ...table, source: { type: 'extract' as const } };\n            dispatch(loadTable({ table: tableWithSource, storeOnServer }));\n        }\n    };\n\n    const thinkingBanner = (\n        <Box sx={{ \n            py: 0.5, \n            display: 'flex', \n            position: 'relative',\n            overflow: 'hidden',\n            '&::before': {\n                content: '\"\"',\n                position: 'absolute',\n                top: 0,\n                left: 0,\n                width: '100%',\n                height: '100%',\n                background: 'linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.8) 50%, transparent 100%)',\n                animation: 'shimmer 2s ease-in-out infinite',\n                zIndex: 1,\n                pointerEvents: 'none',\n            },\n            '@keyframes shimmer': {\n                '0%': {\n                    transform: 'translateX(-100%)',\n                },\n                '100%': {\n                    transform: 'translateX(100%)',\n                },\n            }\n        }}>\n            <Box sx={{ \n                py: 1, \n                display: 'flex', \n                alignItems: 'center', \n                justifyContent: 'left',\n            }}>\n                <CircularProgress size={10} sx={{ color: 'text.secondary' }} />\n                <Typography variant=\"body2\" sx={{ \n                    ml: 1, \n                    fontSize: 10, \n                    color: 'rgba(0, 0, 0, 0.7) !important'\n                }}>\n                    extracting data...\n                </Typography>\n            </Box>\n        </Box>\n    );\n\n    // Empty state - centered layout similar to upload dialog\n    if (!existOutputBlocks && !streamingContent) {\n        return (\n            <Box sx={{ \n                width: '100%', \n                height: '100%', \n                display: 'flex', \n                justifyContent: 'center', \n                alignItems: 'center',\n                p: 2,\n                boxSizing: 'border-box'\n            }}>\n                <Box sx={{ \n                    width: '100%',\n                    maxWidth: 720,\n                    display: 'flex',\n                    flexDirection: 'column',\n                    gap: 2,\n                }}>\n                    <DataLoadingInputBox \n                        maxLines={24} \n                        onStreamingContentUpdate={setStreamingContent} \n                        abortControllerRef={abortControllerRef} \n                    />\n                </Box>\n            </Box>\n        );\n    }\n\n    // Main layout with sidebar (similar to DBTablePane)\n    return (\n        <Box sx={{ \n            display: 'flex', \n            flexDirection: 'column', \n            bgcolor: 'white', \n            flex: 1, \n            overflow: 'hidden', \n            height: '100%',\n            width: '100%'\n        }}>\n            <Box sx={{ \n                display: 'flex', \n                flexDirection: 'row', \n                flex: 1, \n                overflow: 'hidden', \n                minHeight: 0, \n                height: '100%' \n            }}>\n                {/* Left sidebar - Thread list (similar to DBTablePane) */}\n                <Box sx={{ \n                    display: 'flex', \n                    flexDirection: 'column', \n                    width: 240, \n                    minWidth: 240, \n                    maxWidth: 240, \n                    overflow: 'hidden', \n                    height: '100%',\n                    borderRight: `1px solid ${borderColor.view}`\n                }}>\n                    <Box sx={{ \n                        display: 'flex',\n                        flexDirection: 'column',\n                        overflowY: 'auto',\n                        overflowX: 'hidden',\n                        flex: 1,\n                        minHeight: 0,\n                        height: '100%',\n                        position: 'relative',\n                        overscrollBehavior: 'contain',\n                        px: 0.5,\n                        pt: 1\n                    }}>\n                        {threadsComponent.length > 0 ? (\n                            threadsComponent\n                        ) : (\n                            <Typography variant=\"caption\" sx={{ \n                                color: \"text.disabled\", \n                                px: 2, \n                                py: 0.5, \n                                fontStyle: \"italic\",\n                                textAlign: 'center'\n                            }}>\n                                No extraction threads yet\n                            </Typography>\n                        )}\n                    </Box>\n                    <Box sx={{ \n                        borderTop: `1px solid ${borderColor.divider}`,\n                        p: 1\n                    }}>\n                        <DataLoadingInputBox \n                            ref={inputBoxRef} \n                            maxLines={4} \n                            onStreamingContentUpdate={setStreamingContent} \n                            abortControllerRef={abortControllerRef} \n                        />\n                    </Box>\n                </Box>\n\n                {/* Right content area */}\n                <Box sx={{ \n                    flex: 1, \n                    overflow: 'hidden', \n                    minWidth: 0, \n                    minHeight: 0, \n                    height: '100%', \n                    position: 'relative',\n                    display: 'flex',\n                    flexDirection: 'column'\n                }}>\n                    {streamingContent ? (\n                        <Box\n                            sx={{\n                                display: 'flex',\n                                flexDirection: 'column',\n                                padding: 2,\n                                height: '100%',\n                                overflow: 'auto'\n                            }}\n                        >\n                            {thinkingBanner}\n                            <Typography \n                                variant=\"body2\" \n                                color=\"text.secondary\" \n                                sx={{ \n                                    mt: 2, \n                                    fontSize: '11px', \n                                    whiteSpace: 'pre-wrap', \n                                    overflow: 'clip', \n                                    maxHeight: '100%', \n                                    overflowY: 'auto' \n                                }}\n                            >\n                                {streamingContent.trim()}\n                            </Typography>\n                        </Box>\n                    ) : existOutputBlocks ? (\n                        <Box\n                            sx={{\n                                display: 'flex',\n                                flexDirection: 'column',\n                                padding: 2,\n                                height: '100%',\n                                overflow: 'hidden'\n                            }}\n                        >\n                            {selectedTable && (\n                                <Typography \n                                    sx={{ \n                                        fontSize: 14, \n                                        marginBottom: 1,\n                                        fontWeight: 500,\n                                        color: 'text.primary',\n                                        display: 'flex',\n                                        alignItems: 'center',\n                                        gap: 0.5\n                                    }}\n                                    gutterBottom\n                                >\n                                    {selectedTable?.name}\n                                </Typography>\n                            )}\n                            \n                            <Box \n                                sx={{\n                                    display: 'flex',\n                                    flexDirection: 'column',\n                                    flex: 1,\n                                    gap: 1,\n                                    overflow: 'hidden',\n                                    minHeight: 0\n                                }}\n                            >\n                                {selectedTable ? (\n                                    <Box sx={{ flex: 1, overflow: 'auto', minHeight: 0 }}>\n                                        <DataPreviewBox />\n                                    </Box>\n                                ) : (\n                                    <Box sx={{ \n                                        display: 'flex', \n                                        alignItems: 'center', \n                                        justifyContent: 'center',\n                                        flex: 1,\n                                        minHeight: 0\n                                    }}>\n                                        <Typography variant=\"body2\" color=\"text.secondary\" sx={{ textAlign: 'center', fontSize: '11px' }}>\n                                            Select a table from the left to preview\n                                        </Typography>\n                                    </Box>\n                                )}\n\n                                {/* Bottom submit bar */}\n                                {selectedTable && (\n                                    <Box sx={{ \n                                        mt: 'auto', \n                                        pt: 1, \n                                        display: 'flex', \n                                        flexDirection: 'row', \n                                        alignItems: 'center', \n                                        gap: 1, \n                                        borderTop: `1px solid ${borderColor.divider}`,\n                                        '& .MuiButton-root': { textTransform: 'none' } \n                                    }}>\n                                        <Button\n                                            variant=\"contained\"\n                                            onClick={() => {\n                                                if (inputBoxRef.current) {\n                                                    inputBoxRef.current();\n                                                }\n                                            }}\n                                            disabled={!selectedTable || selectedTable.content.type !== 'image_url' || cleanInProgress}\n                                            size=\"small\"\n                                        >\n                                            Extract data from image\n                                        </Button>\n                                        <Button\n                                            variant=\"contained\"\n                                            sx={{ ml: 'auto' }}\n                                            onClick={handleUpload}\n                                            disabled={!selectedTable || selectedTable.content.type !== 'csv'}\n                                            size=\"small\"\n                                        >\n                                            Load table\n                                        </Button>\n                                    </Box>\n                                )}\n                            </Box>\n                        </Box>\n                    ) : null}\n                </Box>\n            </Box>\n        </Box>\n    );\n};\n\n"
  },
  {
    "path": "src/views/DataLoadingThread.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as React from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { Box, Button, Card, CardContent, Divider, IconButton, Paper, Stack, TextField, Typography, alpha, useTheme, Dialog, DialogTitle, DialogContent, Tooltip, LinearProgress, CircularProgress, Chip, SxProps, Theme } from '@mui/material';\nimport UploadIcon from '@mui/icons-material/Upload';\nimport SendIcon from '@mui/icons-material/Send';\nimport RestartAltIcon from '@mui/icons-material/RestartAlt';\nimport CancelIcon from '@mui/icons-material/Cancel';\nimport PanoramaFishEyeIcon from '@mui/icons-material/PanoramaFishEye';\nimport CloseIcon from '@mui/icons-material/Close';\nimport CircleIcon from '@mui/icons-material/Circle';\nimport TableIcon from '@mui/icons-material/TableChart';\nimport LinkIcon from '@mui/icons-material/Link';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { AgentIcon as PrecisionManufacturingIcon } from '../icons';\nimport SouthIcon from '@mui/icons-material/South';\nimport LanguageIcon from '@mui/icons-material/Language';\nimport ImageIcon from '@mui/icons-material/Image';\nimport TextFieldsIcon from '@mui/icons-material/TextFields';\nimport DatasetIcon from '@mui/icons-material/Dataset';\nimport StopIcon from '@mui/icons-material/Stop';\n\nimport exampleImageTable from \"../assets/example-image-table.png\";\n\nimport { useDispatch, useSelector } from 'react-redux';\nimport { AppDispatch } from '../app/store';\nimport { DataFormulatorState, dfActions, dfSelectors, fetchFieldSemanticType } from '../app/dfSlice';\nimport { borderColor, shadow, transition, radius } from '../app/tokens';\nimport { DataCleanBlock, DataCleanTableOutput } from '../components/ComponentType';\nimport { getUrls, fetchWithIdentity } from '../app/utils';\nimport { CustomReactTable } from './ReactTable';\nimport { createTableFromText } from '../data/utils';\n\ntype DialogContentItem = {\n    type: 'text';\n    text: string;\n} | {\n    type: 'image_url';\n    image_url: {\n        url: string;\n        detail?: string;\n    };\n};\n\ntype DialogMessage = {\n    role: 'user' | 'assistant' | 'system';\n    content: string | DialogContentItem[];\n};\n\nconst generateDefaultName = (seed: string) => {\n    const hash = seed.split('').reduce((acc, c) => ((acc << 5) - acc) + c.charCodeAt(0) | 0, 0);\n    return `data-${Math.abs(hash).toString(36).slice(0, 5)}`;\n};\n\n// Sample task card component\nconst SampleTaskChip: React.FC<{\n    task: { text: string; icon?: React.ReactElement; image?: string };\n    theme: Theme;\n    onClick: () => void;\n    disabled?: boolean;\n}> = ({ task, theme, onClick, disabled }) => {\n    return (\n        <Box\n            sx={{\n                display: 'inline-flex',\n                alignItems: 'center',\n                padding: '6px 8px',\n                fontSize: '12px',\n                minHeight: '32px',\n                height: 'auto',\n                borderRadius: radius.md,\n                border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n                boxShadow: shadow.sm,\n                transition: transition.normal,\n                backgroundColor: alpha(theme.palette.background.paper, 0.9),\n                cursor: disabled ? 'default' : 'pointer',\n                opacity: disabled ? 0.6 : 1,\n                '&:hover': disabled ? {} : {\n                    boxShadow: shadow.md,\n                    borderColor: alpha(theme.palette.primary.main, 0.5),\n                    transform: 'translateY(-1px)',\n                },\n            }}\n            onClick={disabled ? undefined : onClick}\n        >\n            {/* {task.icon && (\n                <Box sx={{ mr: 1, display: 'flex', alignItems: 'center', color: theme.palette.primary.main }}>\n                    {task.icon}\n                </Box>\n            )} */}\n            {task.image && (\n                <Box\n                    component=\"img\"\n                    src={task.image}\n                    sx={{\n                        width: 24,\n                        height: 24,\n                        objectFit: 'cover',\n                        borderRadius: 0.5,\n                        mr: 1,\n                        border: `1px solid ${borderColor.divider}`\n                    }}\n                />\n            )}\n            <Typography\n                component=\"div\"\n                sx={{\n                    fontSize: '12px',\n                    color: theme.palette.text.primary,\n                    lineHeight: 1.4,\n                }}\n            >\n                {task.text}\n            </Typography>\n        </Box>\n    );\n};\n\nexport const DataPreviewBox: React.FC<{sx?: SxProps}> = ({sx}) => {\n\n    const dispatch = useDispatch<AppDispatch>();\n    const dataCleanBlocks = useSelector((state: DataFormulatorState) => state.dataCleanBlocks);\n    const focusedDataCleanBlockId = useSelector((state: DataFormulatorState) => state.focusedDataCleanBlockId);\n    const existingTables = useSelector((state: DataFormulatorState) => state.tables);\n    \n    let selectedBlock = dataCleanBlocks.find(block => block.id === focusedDataCleanBlockId?.blockId) || dataCleanBlocks[dataCleanBlocks.length - 1];\n    let selectedTable = focusedDataCleanBlockId ? selectedBlock?.items?.[focusedDataCleanBlockId.itemId] : undefined;\n\n    if (!selectedTable) {\n        return <Paper variant=\"outlined\" sx={{ p: 1, display: 'flex', flexDirection: 'column', gap: 1, ...sx }}>\n            <Typography variant=\"body2\" sx={{ fontSize: '10px', color: 'text.secondary' }}>\n                No data selected\n            </Typography>\n        </Paper>\n    }\n\n    if (selectedTable.content.type === 'csv' && selectedTable.content.value) {\n        const suggestedName = selectedTable.name || generateDefaultName(selectedTable.content.value.slice(0, 96));\n        const tableComponent = createTableFromText(suggestedName, selectedTable.content.value);\n        if (tableComponent) {\n            return <CustomReactTable\n                rows={tableComponent.rows}\n                rowsPerPageNum={-1}\n                compact={false}\n                columnDefs={tableComponent.names.map((name) => ({\n                    id: name,\n                    label: name,\n                    minWidth: 60,\n                    align: undefined,\n                    format: (v: any) => v,\n                }))}\n                maxHeight={600}\n            />\n        }\n        return <Paper variant=\"outlined\" sx={{ p: 1, display: 'flex', flexDirection: 'column', gap: 1, ...sx }}>\n            <Typography variant=\"body2\" sx={{ fontSize: '10px', color: 'text.secondary' }}>\n                {selectedTable.content.value}\n            </Typography>\n        </Paper>\n    }\n    \n    // Handle image_url content type\n    if (selectedTable.content.type === 'image_url') {\n        return <Paper variant=\"outlined\" sx={{ p: 1, display: 'flex', flexDirection: 'column', gap: 1, ...sx }}>\n            <Typography variant=\"body2\" sx={{ fontSize: '10px', color: 'text.secondary' }}>\n                Image URL: {selectedTable.content.value}\n            </Typography>\n            <Box\n                component=\"img\"\n                src={selectedTable.content.value}\n                alt={`Image from ${selectedTable.name || 'data source'}`}\n                sx={{\n                    maxWidth: '100%',\n                    maxHeight: '400px',\n                    objectFit: 'contain',\n                    borderRadius: 1\n\n                }}\n            />\n        </Paper>\n    }\n    \n    // Handle data_url content type\n    if (selectedTable.content.type === 'web_url') {\n        return <Paper variant=\"outlined\" sx={{ p: 1, display: 'flex', flexDirection: 'column', gap: 1, ...sx }}>\n            <Typography variant=\"body2\" sx={{ fontSize: '12px', color: 'text.primary', fontWeight: 500 }}>\n                Data URL\n            </Typography>\n            <Typography variant=\"body2\" sx={{ fontSize: '10px', color: 'text.secondary', wordBreak: 'break-all' }}>\n                {selectedTable.content.value}\n            </Typography>\n        </Paper>\n    }\n    \n    // Fallback for other content types\n    return <Paper variant=\"outlined\" sx={{ p: 1, display: 'flex', flexDirection: 'column', gap: 1, ...sx }}>\n        <Typography variant=\"body2\" sx={{ fontSize: '10px', color: 'text.secondary' }}>\n            {selectedTable.content.value}\n        </Typography>\n    </Paper>\n}\n\nexport const DataLoadingInputBox = React.forwardRef<(() => void) | null, {maxLines?: number, onStreamingContentUpdate?: (content: string) => void, abortControllerRef?: React.MutableRefObject<AbortController | null>}>(({maxLines = 4, onStreamingContentUpdate, abortControllerRef}, ref) => {\n    const dispatch = useDispatch<AppDispatch>();\n    const theme = useTheme();\n    const activeModel = useSelector(dfSelectors.getActiveModel);\n    const dataCleanBlocks = useSelector((state: DataFormulatorState) => state.dataCleanBlocks);\n    const cleanInProgress = useSelector((state: DataFormulatorState) => state.cleanInProgress);\n\n    const focusedDataCleanBlockId = useSelector((state: DataFormulatorState) => state.focusedDataCleanBlockId);\n    let selectedBlock = focusedDataCleanBlockId ? dataCleanBlocks.find(block => block.id === focusedDataCleanBlockId.blockId) : undefined;\n    let selectedTable = focusedDataCleanBlockId ? selectedBlock?.items?.[focusedDataCleanBlockId.itemId] : undefined;\n\n    const [userImages, setUserImages] = useState<string[]>([]);\n    const [prompt, setPrompt] = useState('');\n\n    const existOutputBlocks = dataCleanBlocks.length > 0;\n\n    // Reconstruct dialog from Redux state for API compatibility\n    const dialog: DialogMessage[] = (() => {\n        const reconstructedDialog: DialogMessage[] = [];\n        \n        // Build dialog backwards from selected block until there's no parent\n        let currentBlockId = focusedDataCleanBlockId?.blockId;\n        const processedBlocks = new Set<string>();\n        \n        while (currentBlockId && !processedBlocks.has(currentBlockId)) {\n            const block = dataCleanBlocks.find(b => b.id === currentBlockId);\n            if (!block) break;\n            \n            processedBlocks.add(currentBlockId);\n            \n            // Add user message from block's derive field\n            const content: any[] = [];\n            if (block.derive.prompt) {\n                content.push({ type: 'text', text: block.derive.prompt });\n            }\n            if (block.derive.artifacts) {\n                block.derive.artifacts.forEach(artifact => {\n                    if (artifact.type === 'image_url') {\n                        content.push({ \n                            type: 'image_url', \n                            image_url: { url: artifact.value } \n                        });\n                    }\n                });\n            }\n            reconstructedDialog.unshift({\n                role: 'user',\n                content: content.length === 1 && content[0].type === 'text' ? content[0].text : content\n            });\n            \n            // Add assistant message if dialogItem exists\n            if (block.dialogItem) {\n                reconstructedDialog.unshift(block.dialogItem);\n            }\n            \n            // Move to parent block\n            currentBlockId = block.derive.sourceId;\n        }\n        \n        return reconstructedDialog;\n    })();\n\n    // Define sample tasks\n    const sampleTasks = [\n        {\n            text: \"Extract top repos from https://github.com/microsoft\",\n            fullText: \"extract the top repos information from https://github.com/microsoft?q=&type=all&language=&sort=stargazers\",\n            icon: <LanguageIcon sx={{ fontSize: 18 }} />\n        },\n        {\n            text: \"Extract data from this image\",\n            fullText: \"help me extract data from this image\",\n            icon: <ImageIcon sx={{ fontSize: 18 }} />,\n            image: exampleImageTable\n        },\n        {\n            text: \"Extract growth data from text\",\n            fullText: `help me extract sub-segment growth data from this text\\n\\n\\\"Revenue in Productivity and Business Processes was $33.1 billion and increased 16% (up 14% in constant currency), with the following business highlights:\n·        Microsoft 365 Commercial products and cloud services revenue increased 16% (up 15% in constant currency) driven by Microsoft 365 Commercial cloud revenue growth of 18% (up 16% in constant currency)\n·        Microsoft 365 Consumer products and cloud services revenue increased 21% driven by Microsoft 365 Consumer cloud revenue growth of 20%\n·        LinkedIn revenue increased 9% (up 8% in constant currency)\n·        Dynamics products and cloud services revenue increased 18% (up 17% in constant currency) driven by Dynamics 365 revenue growth of 23% (up 21% in constant currency)\n\nRevenue in Intelligent Cloud was $29.9 billion and increased 26% (up 25% in constant currency), with the following business highlights:\n·        Server products and cloud services revenue increased 27% driven by Azure and other cloud services revenue growth of 39%\n\nRevenue in More Personal Computing was $13.5 billion and increased 9%, with the following business highlights:\n·        Windows OEM and Devices revenue increased 3%\n·        Xbox content and services revenue increased 13% (up 12% in constant currency)\n·        Search and news advertising revenue excluding traffic acquisition costs increased 21% (up 20% in constant currency)\\\"`,\n            icon: <TextFieldsIcon sx={{ fontSize: 18 }} />\n        },\n        {\n            text: \"Generate UK dynasty dataset\",\n            fullText: \"help me generate a dataset about uk dynasty with their years of reign and their monarchs\",\n            icon: <DatasetIcon sx={{ fontSize: 18 }} />\n        }\n    ];\n\n    const placeholder = (existOutputBlocks) \n        ? (selectedTable && selectedTable.content.type === 'image_url' \n            ? \"extract data from this image\" \n            : \"follow-up instruction (e.g., fix headers, remove totals, generate 15 rows, etc.)\")\n        : \"paste the content (website, image, text block, etc.) and ask AI to extract / clean data from it\";\n\n    let additionalImages = (() => {\n        if (selectedTable && selectedTable.content.type === 'image_url') {\n            return [selectedTable.content.value];\n        }\n        return [];\n    })();\n\n    const canSend = (() => {\n        // Allow sending if there's prompt text or image data\n        const hasPrompt = prompt.trim().length > 0;\n        const hasImageData = userImages.length > 0 || additionalImages.length > 0;\n        return (hasPrompt || hasImageData) && !cleanInProgress;\n    })();\n\n    // Function to extract URLs from the current prompt\n    const extractedUrls = (() => {\n        const urlRegex = /(https?:\\/\\/[^\\s]+)/gi;\n        const matches = prompt.match(urlRegex);\n        if (!matches) return [];\n        \n        // Remove trailing commas and periods from URLs\n        const cleanedUrls = matches.map(url => {\n            return url.replace(/[,.]$/, '');\n        });\n        \n        return [...new Set(cleanedUrls)]; // Remove duplicates\n    })();\n\n    const handlePasteImage = (e: React.ClipboardEvent<HTMLDivElement>) => {\n        if (e.clipboardData && e.clipboardData.files && e.clipboardData.files.length > 0) {\n            const files = Array.from(e.clipboardData.files);\n            const imageFiles = files.filter(file => file.type.startsWith('image/'));\n            \n            if (imageFiles.length > 0) {\n                const newImages: string[] = [];\n                let processedCount = 0;\n                \n                imageFiles.forEach(file => {\n                    const reader = new FileReader();\n                    reader.onload = () => {\n                        const res = reader.result as string;\n                        if (res) {\n                            newImages.push(res);\n                        }\n                        processedCount++;\n                        \n                        if (processedCount === imageFiles.length) {\n                            setUserImages(prev => [...prev, ...newImages]);\n                        }\n                    };\n                    reader.readAsDataURL(file);\n                });\n            }\n        }\n    };\n\n    const removeImage = (index: number) => {\n        setUserImages(prev => prev.filter((_, i) => i !== index));\n    };\n\n    const stopGeneration = () => {\n        if (abortControllerRef?.current) {\n            abortControllerRef.current.abort();\n        }\n    };\n\n    const sendRequest = (promptToUse: string, imagesToUse: string[]) => {        \n        // Check if we can send with the provided or state values\n        const hasPrompt = promptToUse.trim().length > 0;\n        const hasImageData = imagesToUse.length > 0 || additionalImages.length > 0;\n        if (!hasPrompt && !hasImageData) return;\n        if (cleanInProgress) return;\n        \n        dispatch(dfActions.setCleanInProgress(true));\n        const token = String(Date.now());\n\n        let prompt_to_send = promptToUse.trim() || (hasImageData ? 'extract data from the image' : 'let\\'s generate some interesting data');\n        let images_to_send = [...additionalImages, ...imagesToUse];\n\n        // Extract URLs from the prompt\n        const urlRegex = /(https?:\\/\\/[^\\s]+)/gi;\n        const matches = prompt_to_send.match(urlRegex);\n        const extractedUrlsFromPrompt = matches ? [...new Set(matches)] : [];\n\n        // Construct payload - simplified to match backend API\n        const payload: any = {\n            token,\n            model: activeModel,\n            prompt: prompt_to_send,\n            artifacts: [\n                ...images_to_send.map(image => ({ type: 'image_url', content: image })),\n                ...extractedUrlsFromPrompt.map(url => ({ type: 'web_url', content: url })),\n            ],\n            dialog: dialog\n        };\n\n        // Create abort controller\n        const controller = new AbortController();\n        if (abortControllerRef) {\n            abortControllerRef.current = controller;\n        }\n\n        fetchWithIdentity(getUrls().CLEAN_DATA_URL, {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json' },\n            body: JSON.stringify(payload),\n            signal: controller.signal,\n        })\n        .then(async (response) => {\n            if (!response.ok) {\n                throw new Error(`HTTP error! status: ${response.status}`);\n            }\n\n            const reader = response.body?.getReader();\n            if (!reader) {\n                throw new Error('No response body reader available');\n            }\n\n            const decoder = new TextDecoder();\n            let buffer = '';\n            let finalResult: any = null;\n\n            try {\n                while (true) {\n                    const { done, value } = await reader.read();\n                    \n                    if (done) {\n                        break;\n                    }\n\n                    buffer += decoder.decode(value, { stream: true });\n                    onStreamingContentUpdate?.(buffer);\n\n                    // Split by newlines to get individual JSON objects\n                    const lastLine = buffer.split('\\n').filter(line => line.trim() !== \"\").pop();\n\n                    // Process each line\n                    if (lastLine) {\n                        try {\n                            const data = JSON.parse(lastLine);\n                            if (data.status === \"ok\" && data.content) {\n                                finalResult = data;\n                                break;\n                            } \n                        } catch (parseError) {\n                            continue\n                        }\n                    }\n                }\n\n                if (finalResult && finalResult.status === 'ok' && finalResult.content) {\n                    const tables = finalResult.content;\n                    const updatedDialog = finalResult.dialog || [];\n                    \n                    // Create new DataCleanBlock\n                    const newBlock: DataCleanBlock = {\n                        id: `block-${Date.now()}`,\n                        items: tables,\n                        derive: {\n                            sourceId: focusedDataCleanBlockId?.blockId,\n                            prompt: prompt_to_send,\n                            artifacts: [\n                                ...images_to_send.map(image => ({ type: 'image_url' as const, value: image })),\n                                ...extractedUrls.map(url => ({ type: 'web_url' as const, value: url })),\n                            ]\n                        },\n                        dialogItem: updatedDialog.length > 0 ? updatedDialog[updatedDialog.length - 1] : undefined\n                    };\n                    \n                    onStreamingContentUpdate?.('');\n                    dispatch(dfActions.addDataCleanBlock(newBlock));\n                    dispatch(dfActions.setFocusedDataCleanBlockId({blockId: newBlock.id, itemId: 0}));\n                    \n                    // Clear input fields only after successful completion\n                    setPrompt('');\n                    setUserImages([]);\n                } else {\n                    // Generation failed\n                    dispatch(dfActions.addMessages({\n                        timestamp: Date.now(),\n                        type: 'error',\n                        component: 'data loader',\n                        value: finalResult?.content || 'Unable to extract tables from response',\n                    }));\n                    // Clear input fields only after failed completion\n                    setPrompt('');\n                    onStreamingContentUpdate?.('');\n                    setUserImages([]);\n                }\n            } finally {\n                reader.releaseLock();\n                dispatch(dfActions.setCleanInProgress(false));\n                if (abortControllerRef) {\n                    abortControllerRef.current = null;\n                }\n            }\n        })\n        .catch((error) => {\n            dispatch(dfActions.setCleanInProgress(false));\n            if (abortControllerRef) {\n                abortControllerRef.current = null;\n            }\n            \n            // Check if this was an abort (user stopped the generation)\n            if (error.name === 'AbortError') {\n                dispatch(dfActions.addMessages({\n                    timestamp: Date.now(),\n                    type: 'info',\n                    component: 'data loader',\n                    value: 'Generation stopped by user',\n                }));\n            } else {\n                // Generation failed\n                const errorMessage = `Server error while processing data: ${error.message}`;\n                dispatch(dfActions.addMessages({\n                    timestamp: Date.now(),\n                    type: 'error',\n                    component: 'data loader',\n                    value: errorMessage,\n                }));\n            }\n            \n            // Clear input fields only after failed completion\n            setPrompt('');\n            setUserImages([]);\n            onStreamingContentUpdate?.('');\n        });\n    };\n\n    // Expose sendRequest function to parent via ref\n    React.useEffect(() => {\n        if (ref && typeof ref === 'object' && 'current' in ref) {\n            ref.current = () => sendRequest(prompt, userImages);\n        }\n    }, [canSend, prompt, additionalImages, userImages, extractedUrls, dialog, activeModel, focusedDataCleanBlockId, dispatch]);\n\n    let inputImages = [...userImages, ...additionalImages];\n\n    return (\n        <Stack sx={{ py: 1, position: 'relative' }} direction=\"row\" spacing={1} alignItems=\"flex-end\">\n            {cleanInProgress && <LinearProgress sx={{ width: '100%', height: '100%', position: 'absolute', opacity: 0.1, top: 0, left: 0, right: 0, zIndex: 1, pointerEvents: 'none' }} />}    \n            <Box sx={{ flex: 1, position: 'relative' }}>\n            \n            {/* HTML Address Chips */}\n            {extractedUrls.length > 0 && (\n                <Box sx={{ \n                    display: 'flex', \n                    flexDirection: 'row', \n                    flexWrap: 'wrap', \n                    gap: 0.5, \n                    mb: 1,\n                    position: 'relative' \n                }}>\n                    {extractedUrls.map((url, index) => (\n                        <Chip\n                            key={index}\n                            icon={<LinkIcon sx={{ fontSize: 16 }} />}\n                            label={url.length > 50 ? `${url.substring(0, 47)}...` : url}\n                            variant=\"outlined\"\n                            color=\"primary\"\n                            size=\"small\"\n                            sx={{\n                                maxWidth: existOutputBlocks ? 280 : 400,\n                                backgroundColor: 'primary.50',\n                                borderColor: 'primary.200',\n                                color: 'primary.700',\n                                borderRadius: 2,\n                                '& .MuiChip-label': {\n                                    fontSize: existOutputBlocks ? '11px' : '12px',\n                                    maxWidth: '100%',\n                                    overflow: 'hidden',\n                                    textOverflow: 'ellipsis'\n                                }\n                            }}\n                        />\n                    ))}\n                </Box>\n            )}\n\n            {inputImages.length > 0 && (\n                <Box sx={{ display: 'flex', flexDirection: 'row', flexWrap: 'wrap', gap: 0.5, mt: 0.5, position: 'relative' }}>\n                    {inputImages.map((imageUrl, index) => (\n                        <Box key={index} sx={{ display: 'block', position: 'relative' }}>\n                            <Box \n                                component=\"img\"\n                                src={imageUrl}\n                                alt={`Pasted image ${index + 1}`}\n                                sx={{\n                                    maxHeight: existOutputBlocks ? 60 : 600,\n                                    maxWidth: inputImages.length > 1 ? '30%' : 600,\n                                    objectFit: 'cover',\n                                    borderRadius: 1,\n                                    border: `1px solid ${borderColor.divider}`\n                                }}\n                            />\n                            {userImages.includes(imageUrl) ? <IconButton  \n                                sx={{position: 'absolute', top: 0, right: 0}}\n                                size=\"small\" \n                                onClick={() => removeImage(index)}\n                            >\n                                <CancelIcon fontSize=\"small\" />\n                            </IconButton> : <Typography sx={{fontSize: '10px', color: 'text.secondary', position: 'absolute', top: 0, right: 0, width: 16, height: 16, display: 'flex', alignItems: 'center', justifyContent: 'center'}}>\n                                ➤\n                            </Typography>}\n                        </Box>\n                    ))}\n                </Box>\n            )}\n            \n            <TextField\n                sx={{\n                    '& .MuiInputBase-root': {\n                        p: 1,\n                        fontSize: existOutputBlocks ? '12px' : '14px',\n                        position: 'relative',\n                        zIndex: 2\n                    }\n                }}\n                placeholder={cleanInProgress ? 'extracting data...' : placeholder}\n                variant=\"standard\"\n                multiline\n                value={prompt}\n                onChange={(e) => setPrompt(e.target.value)}\n                fullWidth\n                disabled={cleanInProgress}\n                autoComplete=\"off\"\n                maxRows={maxLines}\n                onKeyDown={(e) => {\n                    if (e.key === 'Enter' && !e.shiftKey) {\n                        e.preventDefault();\n                        sendRequest(prompt, userImages);\n                    }\n                }}\n                slotProps={{\n                    input: {\n                        endAdornment: cleanInProgress ? (\n                            <Tooltip title=\"Stop generation\">\n                                <IconButton color='error' size=\"small\" onClick={stopGeneration}>\n                                    <StopIcon />\n                                </IconButton>\n                            </Tooltip>\n                        ) : (\n                            <IconButton color='primary' size=\"small\" disabled={!canSend} \n                                onClick={() => sendRequest(prompt, userImages)}>\n                                <PrecisionManufacturingIcon />\n                            </IconButton>\n                        )\n                    }\n                }}\n                onPaste={handlePasteImage}\n            />\n            \n            {/* Sample Task Cards - Show only when no output blocks exist and not processing */}\n            {!existOutputBlocks && !cleanInProgress && (\n                <Box sx={{ mt: 2, mb: 1 }}>\n                    <Typography sx={{ fontSize: '11px', color: 'text.secondary', mb: 1 }}>\n                        examples\n                    </Typography>\n                    <Box sx={{\n                        display: 'flex',\n                        flexWrap: 'wrap',\n                        gap: 1,\n                    }}>\n                        {sampleTasks.map((task, index) => (\n                            <SampleTaskChip\n                                key={index}\n                                task={task}\n                                theme={theme}\n                                onClick={async () => {\n                                    let imagesToSend: string[] = [];\n                                    \n                                    if (task.image) {\n                                        // Convert example image to data URL\n                                        try {\n                                            const response = await fetch(task.image);\n                                            const blob = await response.blob();\n                                            const reader = new FileReader();\n                                            \n                                            await new Promise<void>((resolve) => {\n                                                reader.onload = () => {\n                                                    const dataUrl = reader.result as string;\n                                                    imagesToSend = [dataUrl];\n                                                    setUserImages([dataUrl]);\n                                                    resolve();\n                                                };\n                                                reader.readAsDataURL(blob);\n                                            });\n                                        } catch (error) {\n                                            console.error('Failed to load image:', error);\n                                        }\n                                    }\n                                    \n                                    // Set prompt for display\n                                    setPrompt(task.fullText);\n                                    \n                                    // Call sendRequest with explicit parameters\n                                    sendRequest(task.fullText, imagesToSend);\n                                }}\n                                disabled={cleanInProgress}\n                            />\n                        ))}\n                    </Box>\n                </Box>\n            )}\n            </Box>\n        </Stack>\n    );\n});\n\n// Utility function to convert dataCleanBlocks into ordered threadBlocks\nexport interface ThreadBlock {\n    threadIndex: number;\n    blocks: DataCleanBlock[];\n    leafBlock: DataCleanBlock;\n}\n\nexport const createOrderedThreadBlocks = (dataCleanBlocks: DataCleanBlock[]): ThreadBlock[] => {\n    // Helper function to get the path from root to a block\n    const getBlockPath = (blockId: string): DataCleanBlock[] => {\n        const path: DataCleanBlock[] = [];\n        let currentBlock = dataCleanBlocks.find(b => b.id === blockId);\n        \n        while (currentBlock) {\n            path.unshift(currentBlock);\n            currentBlock = dataCleanBlocks.find(b => b.id === currentBlock?.derive.sourceId);\n        }\n        \n        return path;\n    };\n\n    // Identify leaf blocks (blocks that have no children)\n    const getLeafBlocks = (): DataCleanBlock[] => {\n        return dataCleanBlocks.filter(block => {\n            // A block is a leaf if no other block has it as a parent\n            return !dataCleanBlocks.some(otherBlock => otherBlock.derive.sourceId === block.id);\n        });\n    };\n\n    // Get blocks that should be displayed in a thread (avoiding repetition)\n    const getThreadBlocks = (leafBlock: DataCleanBlock, usedBlockIds: Set<string>): DataCleanBlock[] => {\n        const path = getBlockPath(leafBlock.id);\n        \n        // Find the first block in the path that hasn't been used in previous threads\n        let startIndex = 0;\n        for (let i = 0; i < path.length; i++) {\n            if (!usedBlockIds.has(path[i].id)) {\n                startIndex = i;\n                break;\n            }\n        }\n        \n        return path.slice(startIndex);\n    };\n\n    // Sort leaf blocks by their creation order (using block IDs which contain timestamps)\n    const leafBlocks = getLeafBlocks().sort((a, b) => {\n        const aTime = parseInt(a.id.split('-')[1] || '0');\n        const bTime = parseInt(b.id.split('-')[1] || '0');\n        return aTime - bTime;\n    });\n\n    // Build threads\n    const threads: ThreadBlock[] = leafBlocks.map((leafBlock, threadIndex) => {\n        const usedBlockIds = new Set<string>();\n        \n        // Collect all block IDs used in previous threads\n        for (let i = 0; i < threadIndex; i++) {\n            const previousThreadBlocks = getThreadBlocks(leafBlocks[i], new Set());\n            previousThreadBlocks.forEach(block => usedBlockIds.add(block.id));\n        }\n        \n        const threadBlocks = getThreadBlocks(leafBlock, usedBlockIds);\n        \n        return {\n            threadIndex,\n            blocks: threadBlocks,\n            leafBlock\n        };\n    });\n\n    return threads;\n};\n\n\nexport const SingleDataCleanThreadView: React.FC<{thread: ThreadBlock, sx?: SxProps}> = ({thread, sx}) => {\n    const {threadIndex, blocks, leafBlock} = thread;\n    const theme = useTheme();\n\n    const dispatch = useDispatch<AppDispatch>();\n    const focusedDataCleanBlockId = useSelector((state: DataFormulatorState) => state.focusedDataCleanBlockId);\n\n    let isThreadFocused = blocks.some(block => block.id === focusedDataCleanBlockId?.blockId);\n\n    return (\n        <Box sx={{\n            display: 'flex', \n            flexDirection: 'column', \n            gap: 0,\n            mb: 2,\n            borderRadius: radius.md,\n            transition: transition.normal,\n            ...sx\n        }}>\n            {/* Thread header */}\n            <Box sx={{ display: 'flex', direction: 'ltr', margin: '2px 2px 8px 2px' }}>\n                <Divider flexItem sx={{\n                    margin: 'auto',\n                    \"& .MuiDivider-wrapper\": { display: 'flex', flexDirection: 'row' },\n                    \"&::before, &::after\": { borderColor: alpha(theme.palette.divider, 0.2), borderWidth: '2px', width: 60 },\n                }}>\n                    <Typography sx={{ fontSize: \"10px\",   textTransform: 'none' }}>\n                        {`loading - ${threadIndex + 1}`}\n                    </Typography>\n                </Divider>\n            </Box>\n            \n            {/* Thread content */}\n            {blocks.map((block, blockIndex) => {\n                const isLastBlock = blockIndex === blocks.length - 1;\n                \n                return (\n                    <Box key={block.id} sx={{ display: 'flex', flexDirection: 'column', gap: 0}}>\n                        {/* Start circle for the first block */}\n                        {blockIndex === 0 && (\n                            <Box sx={{ display: 'flex', alignItems: 'center', ml: '5px' }}>\n                                <PanoramaFishEyeIcon sx={{ fontSize: 7, color: 'darkgray' }} />\n                            </Box>\n                        )}\n                        \n                        <Box sx={{borderLeft: isThreadFocused ? '3px solid' : '1px dashed', \n                                borderColor: isThreadFocused ? 'primary.light' : ' rgba(0, 0, 0, 0.3)',\n                                py: blockIndex === 0 ? 0.5 : 1.5, px: 1, \n                                  display: 'flex', alignItems: 'center', ml: isThreadFocused ? '7px' : '8px'}}>\n                        </Box>\n\n                        {/* User Instruction Card (styled like TriggerCard) */}\n                        <Card \n                            variant=\"outlined\" \n                            sx={{\n                                backgroundColor: alpha(theme.palette.custom.main, 0.05), \n                                fontSize: '10px', \n                                display: 'flex', \n                                flexDirection: 'row', \n                                alignItems: 'center', \n                                gap: '2px',\n                            }}\n                        >\n                            <PrecisionManufacturingIcon sx={{ml: 1, color: 'darkgray', width: '14px', height: '14px'}} />\n                            <Box sx={{margin: \"4px 8px 4px 2px\"}}>\n                                {/* Text prompt */}\n                                {block.derive.prompt && (\n                                    <Typography fontSize=\"inherit\" sx={{\n                                        textAlign: 'center', \n                                        textWrap: 'balance',\n                                        minWidth: '40px',\n                                        color: 'rgba(0,0,0,0.7)',\n                                        display: '-webkit-box',\n                                        overflow: 'auto',\n                                        textOverflow: 'ellipsis',\n                                        wordBreak: 'break-word',\n                                        maxHeight: 100\n                                    }}>\n                                        \"{block.derive.prompt}\"\n                                    </Typography>\n                                )}\n                                \n                                {/* Images if present */}\n                                {block.derive.artifacts && block.derive.artifacts.filter(a => a.type === 'image_url').length > 0 && (\n                                    <Box sx={{ \n                                        display: 'flex', \n                                        flexWrap: 'wrap',\n                                        gap: 0.5,\n                                        py: 0.5,\n                                    }}>\n                                        {block.derive.artifacts\n                                            .filter(artifact => artifact.type === 'image_url')\n                                            .map((artifact, imgIndex) => (\n                                            <Box\n                                                key={imgIndex}\n                                                component=\"img\"\n                                                src={artifact.value}\n                                                alt={`User uploaded image ${imgIndex + 1}`}\n                                                sx={{\n                                                    width: 'auto',\n                                                    height: 40,\n                                                    maxWidth: 100,\n                                                    objectFit: 'cover',\n                                                    borderRadius: 0.5,\n                                                    border: `1px solid ${borderColor.divider}`\n                                                }}\n                                            />\n                                        ))}\n                                    </Box>\n                                )}\n                            </Box>\n                        </Card>\n                        \n                        {/* Down arrow connecting instruction to output */}\n                        <Box sx={{ display: 'flex', alignItems: 'center',}}>\n                            <SouthIcon color={isThreadFocused ? 'primary' : 'secondary'} sx={{ fontSize: 16, ml: 0.5 }} />\n                        </Box>\n                        \n                        {/* Output Cards (styled like primary colored cards) */}\n                        {block.items?.map((table, itemId) => {\n                            const isItemSelected = block.id === focusedDataCleanBlockId?.blockId && itemId === focusedDataCleanBlockId.itemId;\n                            return (\n                                <Card\n                                    variant=\"outlined\"\n                                    sx={{\n                                        py: 0,\n                                        mt: itemId === 0 ? 0 : 0.5,\n                                        border: isItemSelected ? `2px solid ${theme.palette.primary.light}` : `1px solid ${borderColor.component}`,\n                                        cursor: 'pointer',\n                                        backgroundColor: alpha(theme.palette.primary.light, 0.1), \n                                        '&:hover': {\n                                            boxShadow: shadow.md,\n                                            transform: \"translate(0px, 1px)\",  \n                                        }\n                                    }}\n                                    onClick={() => dispatch(dfActions.setFocusedDataCleanBlockId({blockId: block.id, itemId: itemId}))}\n                                >\n                                    <Box sx={{ margin: '0px', display: 'flex', py: 0.5 }}>\n                                        <Stack direction=\"row\" sx={{ \n                                            marginLeft: 0.5, marginRight: 'auto', fontSize: 12, width: 'calc(100% - 8px)',\n                                            alignItems: 'center' }} gap={\"2px\"}>\n                                            {table.content.type === 'csv' && <TableIcon  sx={{color: 'darkgray', fontSize: 14}} />}\n                                            {table.content.type === 'image_url' && <LinkIcon  sx={{color: 'darkgray', fontSize: 14}} />}\n                                            {table.content.type === 'web_url' && <LinkIcon sx={{color: 'darkgray', fontSize: 14}} />}\n                                            <Typography fontSize=\"inherit\" sx={{\n                                                ml: 0.5,\n                                                color: 'rgba(0,0,0,0.7)', \n                                                overflow: 'hidden',\n                                                textOverflow: 'ellipsis',\n                                                display: '-webkit-box',\n                                                WebkitLineClamp: 2,\n                                                WebkitBoxOrient: 'vertical',\n                                            }}>\n                                                {table.name}\n                                            </Typography>\n                                            {isLastBlock && <Tooltip title=\"delete table\">\n                                                <IconButton aria-label=\"share\" size=\"small\" sx={{ ml: 'auto', padding: 0.25, '&:hover': {\n                                                    transform: 'scale(1.2)',\n                                                    transition: 'all 0.2s ease'\n                                                } }} onClick={(event) => {\n                                                    event.stopPropagation();\n                                                    dispatch(dfActions.removeDataCleanBlocks({ blockIds: [block.id] })) \n                                                }}>\n                                                    <DeleteIcon fontSize=\"small\" sx={{ fontSize: 18 }} color='warning'/>\n                                                </IconButton>\n                                            </Tooltip>\n                                            }\n                                        </Stack>\n                                    </Box>\n                                </Card>\n                            );\n                        })}\n                    </Box>\n                );\n            })}\n        </Box>\n    );\n};\n\n\nexport const DataLoadingThread: React.FC = () => {\n    const dispatch = useDispatch<AppDispatch>();\n    const dataCleanBlocks = useSelector((state: DataFormulatorState) => state.dataCleanBlocks);\n\n    // Use the utility function to create ordered thread blocks\n    const threads = createOrderedThreadBlocks(dataCleanBlocks);\n\n    let threadDisplay = <Box sx={{ \n        flex: 1,  \n        width: 'calc(100% - 8px)',\n        p: 0.5, \n        display: 'flex', \n        flexDirection: 'column', \n        maxHeight: '400px', \n        overflowY: 'auto', \n        overflowX: 'hidden'\n    }}>\n        {/* Render each thread */}\n        {threads.map((thread) => (\n            <SingleDataCleanThreadView key={`thread-${thread.threadIndex}`} thread={thread} />\n        ))}\n    </Box>\n\n    return threadDisplay;\n};"
  },
  {
    "path": "src/views/DataThread.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { FC, useEffect, useMemo, useRef, useState, memo } from 'react';\n\nimport {\n    Box,\n    Typography,\n    LinearProgress,\n    ListItemIcon,\n    IconButton,\n    Tooltip,\n\n    useTheme,\n    SxProps,\n    Button,\n    TextField,\n    CircularProgress,\n    Popper,\n    Paper,\n    ClickAwayListener,\n    Badge,\n    Menu,\n    MenuItem,\n    Switch,\n    FormControlLabel,\n    Collapse,\n    Card,\n} from '@mui/material';\n\n\nimport '../scss/VisualizationView.scss';\nimport { batch, useDispatch, useSelector } from 'react-redux';\nimport { DataFormulatorState, dfActions, dfSelectors, SSEMessage } from '../app/dfSlice';\nimport { getTriggers, getUrls, fetchWithIdentity } from '../app/utils';\nimport { Chart, DictTable, Trigger } from \"../components/ComponentType\";\n\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport StarIcon from '@mui/icons-material/Star';\nimport { TableIcon, AnchorIcon, InsightIcon, StreamIcon, AgentIcon } from '../icons';\n\n\nimport _ from 'lodash';\nimport { getChartTemplate } from '../components/ChartTemplates';\n\nimport 'prismjs/components/prism-python' // Language\nimport 'prismjs/components/prism-typescript' // Language\nimport 'prismjs/themes/prism.css'; //Example style, you can use another\n\nimport { checkChartAvailability, generateChartSkeleton, getDataTable } from './VisualizationView';\n\nimport AttachFileIcon from '@mui/icons-material/AttachFile';\nimport EditIcon from '@mui/icons-material/Edit';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport ForumOutlinedIcon from '@mui/icons-material/ForumOutlined';\nimport AddIcon from '@mui/icons-material/Add';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\n\nimport { alpha } from '@mui/material/styles';\n\nimport { RefreshDataDialog } from './RefreshDataDialog';\nimport { AppDispatch } from '../app/store';\nimport StopIcon from '@mui/icons-material/Stop';\nimport UnfoldMoreIcon from '@mui/icons-material/UnfoldMore';\nimport UnfoldLessIcon from '@mui/icons-material/UnfoldLess';\nimport BarChartIcon from '@mui/icons-material/BarChart';\nimport ShowChartIcon from '@mui/icons-material/ShowChart';\nimport ScatterPlotIcon from '@mui/icons-material/ScatterPlot';\nimport PieChartOutlineIcon from '@mui/icons-material/PieChartOutline';\nimport GridOnIcon from '@mui/icons-material/GridOn';\nimport { useDataRefresh } from '../app/useDataRefresh';\nimport { buildChartCard, buildTriggerCard, buildTableCard, BuildTableCardProps } from './DataThreadCards';\nimport { UnifiedDataUploadDialog } from './UnifiedDataUploadDialog';\nimport { AgentRulesDialog } from './AgentRulesDialog';\nimport RuleIcon from '@mui/icons-material/Rule';\nimport AccountTreeIcon from '@mui/icons-material/AccountTree';\nimport HourglassEmptyIcon from '@mui/icons-material/HourglassEmpty';\nimport CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';\n\nimport { ViewBorderStyle, transition, radius, borderColor } from '../app/tokens';\nimport { SimpleChartRecBox } from './SimpleChartRecBox';\nimport { ChatThreadView } from './ChatThreadView';\n\n\nexport const ThinkingBanner = (message: string, sx?: SxProps) => (\n    <Box sx={{ \n        display: 'flex', \n        position: 'relative',\n        overflow: 'hidden',\n        '&::before': {\n            content: '\"\"',\n            position: 'absolute',\n            top: 0,\n            left: 0,\n            width: '100%',\n            height: '100%',\n            background: 'linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.8) 50%, transparent 100%)',\n            animation: 'windowWipe 2s ease-in-out infinite',\n            zIndex: 1,\n            pointerEvents: 'none',\n        },\n        '@keyframes windowWipe': {\n            '0%': {\n                transform: 'translateX(-100%)',\n            },\n            '100%': {\n                transform: 'translateX(100%)',\n            },\n        },\n        ...sx\n    }}>\n        <Typography variant=\"body2\" sx={{ \n            fontSize: 10, \n            color: 'rgba(0, 0, 0, 0.7) !important'\n        }}>\n            {message}\n        </Typography>\n    </Box>\n);\n\n\n// Streaming Settings Popup Component\nconst StreamingSettingsPopup = memo<{\n    open: boolean;\n    anchorEl: HTMLElement | null;\n    onClose: () => void;\n    table: DictTable;\n    onUpdateSettings: (autoRefresh: boolean, refreshIntervalSeconds?: number) => void;\n    onRefreshNow?: () => void;\n}>(({ open, anchorEl, onClose, table, onUpdateSettings, onRefreshNow }) => {\n    const [refreshInterval, setRefreshInterval] = useState<number>(\n        table.source?.refreshIntervalSeconds || 60\n    );\n    const [autoRefresh, setAutoRefresh] = useState<boolean>(\n        table.source?.autoRefresh || false\n    );\n    const [selectMenuOpen, setSelectMenuOpen] = useState<boolean>(false);\n    const [isRefreshing, setIsRefreshing] = useState<boolean>(false);\n\n    useEffect(() => {\n        if (open) {\n            setRefreshInterval(table.source?.refreshIntervalSeconds || 60);\n            setAutoRefresh(table.source?.autoRefresh || false);\n        }\n    }, [open, table.source]);\n\n    const handleAutoRefreshChange = (enabled: boolean) => {\n        setAutoRefresh(enabled);\n        onUpdateSettings(enabled, enabled ? refreshInterval : undefined);\n        if (!enabled) {\n            onClose();\n        }\n    };\n\n    const handleIntervalChange = (interval: number) => {\n        setRefreshInterval(interval);\n        if (autoRefresh) {\n            onUpdateSettings(true, interval);\n        }\n    };\n\n    const handleRefreshNow = async () => {\n        if (onRefreshNow && !isRefreshing) {\n            setIsRefreshing(true);\n            try {\n                await onRefreshNow();\n            } finally {\n                setIsRefreshing(false);\n            }\n        }\n    };\n\n    const handleClickAway = (event: MouseEvent | TouchEvent) => {\n        // Don't close if the select menu is open\n        if (selectMenuOpen) {\n            return;\n        }\n        // Don't close if clicking on the select menu or menu items\n        const target = event.target as HTMLElement;\n        if (\n            target.closest('.MuiMenu-root') ||\n            target.closest('.MuiPaper-root')?.classList.contains('MuiMenu-paper') ||\n            target.closest('[role=\"menuitem\"]') ||\n            target.closest('[role=\"listbox\"]')\n        ) {\n            return;\n        }\n        onClose();\n    };\n\n    return (\n        <Popper\n            open={open}\n            anchorEl={anchorEl}\n            placement=\"bottom-start\"\n            style={{ zIndex: 1300 }}\n        >\n            <ClickAwayListener onClickAway={handleClickAway} mouseEvent=\"onMouseDown\">\n                <Paper\n                    elevation={8}\n                    sx={{\n                        fontSize: 12,\n                        p: 1.5,\n                        mt: 1,\n                        ...ViewBorderStyle,\n                    }}\n                >\n                    <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n                        <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'nowrap' }}>\n                            <FormControlLabel\n                                control={\n                                    <Switch\n                                        checked={autoRefresh}\n                                        onChange={(e) => handleAutoRefreshChange(e.target.checked)}\n                                        size=\"small\"\n                                    />\n                                }\n                                label={\n                                    <Typography variant=\"body2\" sx={{ fontSize: 11 }}>\n                                        Watch for updates\n                                    </Typography>\n                                }\n                                sx={{ mr: 0 }}\n                            />\n                            {autoRefresh && (\n                                <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, minWidth: 100 }}>\n                                    <Typography variant=\"body2\" sx={{ fontSize: 11, color: 'text.secondary' }}>\n                                        every\n                                    </Typography>\n                                    <TextField\n                                        select\n                                        size=\"small\"\n                                        value={refreshInterval}\n                                        onChange={(e) => handleIntervalChange(Number(e.target.value))}\n                                        slotProps={{\n                                            select: {\n                                                open: selectMenuOpen,\n                                                onOpen: () => setSelectMenuOpen(true),\n                                                onClose: () => setSelectMenuOpen(false)\n                                            }\n                                        }}\n                                        sx={{ \n                                            minWidth: 70,\n                                            '& .MuiInputBase-root': { fontSize: 11, height: 28 },\n                                            '& .MuiSelect-select': { py: 0.5 }\n                                        }}\n                                    >\n                                        <MenuItem value={1}>1s</MenuItem>\n                                        <MenuItem value={10}>10s</MenuItem>\n                                        <MenuItem value={30}>30s</MenuItem>\n                                        <MenuItem value={60}>1m</MenuItem>\n                                        <MenuItem value={300}>5m</MenuItem>\n                                        <MenuItem value={600}>10m</MenuItem>\n                                        <MenuItem value={1800}>30m</MenuItem>\n                                        <MenuItem value={3600}>1h</MenuItem>\n                                        <MenuItem value={86400}>24h</MenuItem>\n                                    </TextField>\n                                </Box>\n                            )}\n                            {onRefreshNow && (\n                                <Button\n                                    variant=\"outlined\"\n                                    size=\"small\"\n                                    onClick={handleRefreshNow}\n                                    disabled={isRefreshing}\n                                    startIcon={isRefreshing ? <CircularProgress size={14} /> : <RefreshIcon sx={{ fontSize: 14 }} />}\n                                    sx={{\n                                        fontSize: 11,\n                                        textTransform: 'none',\n                                        height: 28,\n                                        alignSelf: 'flex-start'\n                                    }}\n                                >\n                                    Refresh now\n                                </Button>\n                            )}\n                        </Box>\n                    </Box>\n                </Paper>\n            </ClickAwayListener>\n        </Popper>\n    );\n});\n\n// Metadata Popup Component\nconst MetadataPopup = memo<{\n    open: boolean;\n    anchorEl: HTMLElement | null;\n    onClose: () => void;\n    onSave: (metadata: string) => void;\n    initialValue: string;\n    tableName: string;\n}>(({ open, anchorEl, onClose, onSave, initialValue, tableName }) => {\n    const [metadata, setMetadata] = useState(initialValue);\n\n    let hasChanges = metadata !== initialValue;\n\n    useEffect(() => {\n        setMetadata(initialValue);\n    }, [initialValue, open]);\n\n    const handleSave = () => {\n        onSave(metadata);\n        onClose();\n    };\n\n    const handleCancel = () => {\n        setMetadata(initialValue);\n        onClose();\n    };\n\n    const handleKeyDown = (e: React.KeyboardEvent) => {\n        if (e.key === 'Escape') {\n            handleCancel();\n        } else if (e.key === 'Enter' && e.ctrlKey) {\n            handleSave();\n        }\n    };\n\n    return (\n        <Popper\n            open={open}\n            anchorEl={anchorEl}\n            placement=\"bottom-start\"\n            style={{ zIndex: 1300 }}\n        >\n            <ClickAwayListener onClickAway={handleCancel}>\n                <Paper\n                    elevation={8}\n                    sx={{\n                        width: 480,\n                        fontSize: 12,\n                        p: 2,\n                        mt: 1,\n                        ...ViewBorderStyle,\n                    }}\n                >\n                    <Typography variant=\"subtitle2\" sx={{ mb: 1 }}>\n                        Attach metadata to <Typography component=\"span\" sx={{ fontSize: 'inherit', color: 'primary.main'}}>{tableName}</Typography>\n                    </Typography>\n                    <TextField\n                        autoFocus\n                        label=\"metadata\"\n                        placeholder=\"Attach additional contexts or guidance so that AI agents can better understand and process the data.\"\n                        fullWidth\n                        multiline\n                        slotProps={{\n                            inputLabel: {shrink: true},\n                        }}\n                        minRows={3}\n                        maxRows={20}\n                        variant=\"outlined\"\n                        size=\"small\"\n                        value={metadata}\n                        onChange={(e) => setMetadata(e.target.value)}\n                        onKeyDown={handleKeyDown}\n                        sx={{ my: 1, '& .MuiInputBase-input': { fontSize: 12 } }}\n                    />\n                    <Box sx={{ mt: 1, display: 'flex', gap: 1, alignItems: 'center' }}>\n                        <Button size=\"small\" sx={{ml: 'auto'}} onClick={handleCancel} color=\"primary\">Cancel</Button>\n                        <Button size=\"small\" onClick={handleSave} color=\"primary\" disabled={!hasChanges}>Save</Button>\n                    </Box>\n                </Paper>\n            </ClickAwayListener>\n        </Popper>\n    );\n});\n\n\n\n// Rename table popup - opens as a small popper with a text field\nconst RenameTablePopup = memo<{\n    open: boolean;\n    anchorEl: HTMLElement | null;\n    onClose: () => void;\n    onSave: (newName: string) => void;\n    initialValue: string;\n    tableName: string;\n}>(({ open, anchorEl, onClose, onSave, initialValue, tableName }) => {\n    const [name, setName] = useState(initialValue);\n\n    useEffect(() => {\n        setName(initialValue);\n    }, [initialValue, open]);\n\n    const handleSave = () => {\n        if (name.trim() !== '') {\n            onSave(name.trim());\n            onClose();\n        }\n    };\n\n    const handleKeyDown = (e: React.KeyboardEvent) => {\n        e.stopPropagation();\n        if (e.key === 'Enter') {\n            handleSave();\n        } else if (e.key === 'Escape') {\n            onClose();\n        }\n    };\n\n    return (\n        <Popper\n            open={open}\n            anchorEl={anchorEl}\n            placement=\"bottom-start\"\n            style={{ zIndex: 1300 }}\n        >\n            <ClickAwayListener onClickAway={onClose}>\n                <Paper\n                    elevation={8}\n                    sx={{ width: 240, fontSize: 12, p: 1.5, mt: 1, ...ViewBorderStyle }}\n                >\n                    <Typography variant=\"subtitle2\" sx={{ mb: 0.5, fontSize: 12 }}>\n                        Rename table\n                    </Typography>\n                    <TextField\n                        autoFocus\n                        fullWidth\n                        variant=\"outlined\"\n                        size=\"small\"\n                        value={name}\n                        onChange={(e) => setName(e.target.value)}\n                        onKeyDown={handleKeyDown}\n                        sx={{ my: 0.5, '& .MuiInputBase-input': { fontSize: 12 } }}\n                    />\n                    <Box sx={{ mt: 0.5, display: 'flex', gap: 1, justifyContent: 'flex-end' }}>\n                        <Button size=\"small\" onClick={onClose}>Cancel</Button>\n                        <Button size=\"small\" onClick={handleSave} color=\"primary\" disabled={name.trim() === '' || name.trim() === initialValue}>Save</Button>\n                    </Box>\n                </Paper>\n            </ClickAwayListener>\n        </Popper>\n    );\n});\n\nconst WorkspacePanel: FC<{\n    tables: DictTable[],\n    chartElements: { tableId: string, chartId: string, element: any }[],\n    suppressScrollRef?: React.MutableRefObject<boolean>,\n    sx?: SxProps,\n}> = function ({ tables, chartElements, suppressScrollRef, sx }) {\n    const theme = useTheme();\n    const dispatch = useDispatch();\n    const charts = useSelector(dfSelectors.getAllCharts);\n    const focusedId = useSelector((state: DataFormulatorState) => state.focusedId);\n    const focusedTableId = React.useMemo(() => {\n        if (!focusedId) return undefined;\n        if (focusedId.type === 'table') return focusedId.tableId;\n        const chartId = focusedId.chartId;\n        const chart = charts.find(c => c.id === chartId);\n        return chart?.tableRef;\n    }, [focusedId, charts]);\n    const focusedChartId = focusedId?.type === 'chart' ? focusedId.chartId : undefined;\n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n    const [uploadDialogOpen, setUploadDialogOpen] = useState(false);\n    const [agentRulesOpen, setAgentRulesOpen] = useState(false);\n    const [workspaceExpanded, setWorkspaceExpanded] = useState(false);\n\n    const fileItemSx = (isActive: boolean, isNested: boolean = false) => ({\n        display: 'flex',\n        alignItems: 'center',\n        gap: 0.5,\n        px: 0.75,\n        py: '3px',\n        borderRadius: '3px',\n        cursor: 'pointer',\n        fontSize: 11,\n        transition: transition.fast,\n        backgroundColor: isActive ? alpha(theme.palette.primary.main, 0.08) : 'transparent',\n        '&:hover': {\n            backgroundColor: isActive ? alpha(theme.palette.primary.main, 0.12) : 'rgba(0,0,0,0.04)',\n        },\n    });\n\n    const getTableIcon = (table: DictTable) => {\n        const isStreaming = (table.source?.type === 'stream' || table.source?.type === 'database') && table.source?.autoRefresh;\n        const iconSx = { width: 14, height: 14, color: 'text.secondary', flexShrink: 0 };\n        if (isStreaming) return <StreamIcon sx={{ ...iconSx, color: theme.palette.success.main, animation: 'pulse 2s infinite', '@keyframes pulse': { '0%': { opacity: 1 }, '50%': { opacity: 0.4 }, '100%': { opacity: 1 } } }} />;\n        if (table.virtual) return <TableIcon sx={{ ...iconSx, width: 14, height: 14 }} />;\n        return <TableIcon sx={iconSx} />;\n    };\n\n    const getChartIcon = (chartType: string) => {\n        const template = getChartTemplate(chartType);\n        if (template && template.icon) {\n            // Use chart template icon (it's an image path)\n            if (typeof template.icon === 'string') {\n                return <Box component=\"img\" src={template.icon} sx={{ width: 14, height: 14, objectFit: 'contain' }} />;\n            }\n            // Or it could be a React component\n            return <Box sx={{ width: 14, height: 14, display: 'flex', alignItems: 'center', justifyContent: 'center', color: 'text.secondary' }}>{template.icon}</Box>;\n        }\n        // Fallback to generic chart icon\n        return <InsightIcon sx={{ fontSize: 14, color: 'text.secondary' }} />;\n    };\n\n    const getChartFields = (chart: Chart) => {\n        const encodings = Object.entries(chart.encodingMap)\n            .filter(([_, encoding]) => encoding.fieldID)\n            .map(([channel, encoding]) => {\n                const field = conceptShelfItems.find(f => f.id === encoding.fieldID);\n                return field?.name || encoding.fieldID;\n            })\n            .filter(Boolean);\n        return encodings.slice(0, 3).join(', ') + (encodings.length > 3 ? '...' : '');\n    };\n\n    const getTableSourceName = (table: DictTable) => {\n        // Get the source file name from table source\n        if (table.source?.type === 'file' && table.source?.fileName) {\n            return table.source.fileName;\n        }\n        if (table.source?.type === 'database' && table.source?.databaseTable) {\n            return table.source.databaseTable;\n        }\n        if (table.source?.type === 'stream' && table.source?.url) {\n            // Extract a meaningful name from URL\n            try {\n                const url = new URL(table.source.url);\n                return url.hostname;\n            } catch {\n                return 'stream';\n            }\n        }\n        return null;\n    };\n\n    return (\n        <Box sx={{ ...sx,\n            py: 0,\n            mb: 0.5,\n            backgroundColor: 'rgba(0,0,0,0.02)',\n            borderBottom: `1px solid ${borderColor.divider}`,\n            userSelect: 'none',\n        }}>\n            <Box\n                sx={{\n                    display: 'flex',\n                    alignItems: 'center',\n                    px: 0.75,\n                    py: '4px',\n                    borderRadius: '3px',\n                }}\n            >\n                <Box\n                    sx={{ display: 'flex', alignItems: 'center', cursor: 'pointer', borderRadius: '3px',\n                        '&:hover': { backgroundColor: 'rgba(0,0,0,0.04)' },\n                        pr: 0.5, py: 0.5,\n                    }}\n                    onClick={() => setWorkspaceExpanded(!workspaceExpanded)}\n                >\n                    {workspaceExpanded ?\n                        <ExpandMoreIcon sx={{ fontSize: 14, color: 'rgba(0,0,0,0.5)' }} /> :\n                        <ChevronRightIcon sx={{ fontSize: 14, color: 'rgba(0,0,0,0.5)' }} />\n                    }\n                    <Typography sx={{ fontSize: 11, fontWeight: 600, color: 'rgba(0,0,0,0.55)', textTransform: 'uppercase', letterSpacing: '0.5px', ml: 0.5 }}>\n                        Workspace\n                    </Typography>\n                </Box>\n                <Box\n                    onClick={(e) => { e.stopPropagation(); setUploadDialogOpen(true); }}\n                    sx={{\n                        display: 'flex', alignItems: 'center', gap: '2px',\n                        ml: 'auto', px: '5px', py: '2px', borderRadius: '3px',\n                        cursor: 'pointer', \n                        color: theme.palette.primary.textColor || theme.palette.primary.main,\n                        '&:hover': { backgroundColor: alpha(theme.palette.primary.main, 0.08) },\n                    }}\n                >\n                    <AddIcon sx={{ fontSize: 14 }} />\n                    <Typography sx={{ fontSize: 11, fontWeight: 600 }}>add data</Typography>\n                </Box>\n            </Box>\n\n            <Collapse in={workspaceExpanded} timeout={150}>\n                <Box sx={{ display: 'flex', flexDirection: 'column', gap: '2px', mt: '2px', ml: '14px', py: 0.5 }}>\n                    {tables.map((table, tableIndex) => {\n                        const isTableActive = focusedTableId === table.id;\n                        const tableCharts = chartElements.filter(ce => ce.tableId === table.id);\n                        const sourceName = getTableSourceName(table);\n                        const isLastTable = tableIndex === tables.length - 1;\n\n                        const handleTableClick = () => {\n                            if (suppressScrollRef) suppressScrollRef.current = true;\n                            dispatch(dfActions.setFocused({ type: 'table', tableId: table.id }));\n                        };\n\n                        return (\n                            <Box\n                                key={table.id}\n                                sx={{\n                                    position: 'relative',\n                                    pl: 1.5,\n                                    '&::before': {\n                                        content: '\"\"',\n                                        position: 'absolute',\n                                        left: 0,\n                                        top: 0,\n                                        bottom: isLastTable ? 'calc(100% - 10px)' : 0,\n                                        width: '1px',\n                                        backgroundColor: 'rgba(0,0,0,0.1)',\n                                    },\n                                    '&::after': {\n                                        content: '\"\"',\n                                        position: 'absolute',\n                                        left: 0,\n                                        top: '10px',\n                                        width: '8px',\n                                        height: '1px',\n                                        backgroundColor: 'rgba(0,0,0,0.1)',\n                                    }\n                                }}\n                            >\n                                <Box\n                                    sx={fileItemSx(isTableActive)}\n                                    onClick={handleTableClick}\n                                >\n                                    {getTableIcon(table)}\n                                    <Typography sx={{\n                                        fontSize: 11,\n                                        fontWeight: isTableActive ? 600 : 400,\n                                        color: isTableActive ? 'primary.main' : 'text.primary',\n                                        overflow: 'hidden',\n                                        textOverflow: 'ellipsis',\n                                        whiteSpace: 'nowrap',\n                                        flex: 1,\n                                        minWidth: 0,\n                                    }}>\n                                        {table.displayId || table.id}\n                                        {sourceName && (\n                                            <Typography component=\"span\" sx={{\n                                                fontSize: 10,\n                                                color: 'text.disabled',\n                                                ml: 0.5,\n                                            }}>\n                                                ({sourceName})\n                                            </Typography>\n                                        )}\n                                    </Typography>\n                                    {table.attachedMetadata && (\n                                        <AttachFileIcon sx={{ fontSize: 10, color: 'text.disabled', flexShrink: 0 }} />\n                                    )}\n                                </Box>\n\n                                {/* Show all charts for this table with vertical guide line */}\n                                {tableCharts.length > 0 && (\n                                    <Box sx={{\n                                        position: 'relative',\n                                        ml: '14px',\n                                        mt: '2px',\n                                    }}>\n                                        {tableCharts.map((chartElement, idx) => {\n                                            const chart = charts.find(c => c.id === chartElement.chartId);\n                                            if (!chart) return null;\n\n                                            const isChartActive = focusedChartId === chart.id;\n                                            const isLast = idx === tableCharts.length - 1;\n\n                                            const handleChartClick = () => {\n                                                if (suppressScrollRef) suppressScrollRef.current = true;\n                                                dispatch(dfActions.setFocused({ type: 'chart', chartId: chart.id }));\n                                            };\n\n                                            return (\n                                                <Box\n                                                    key={chart.id}\n                                                    sx={{\n                                                        position: 'relative',\n                                                        pl: 1.5, // Connector area\n                                                        '&::before': {\n                                                            content: '\"\"',\n                                                            position: 'absolute',\n                                                            left: 0,\n                                                            top: 0,\n                                                            bottom: isLast ? '50%' : 0,\n                                                            width: '1px',\n                                                            backgroundColor: 'rgba(0,0,0,0.1)',\n                                                        },\n                                                        '&::after': {\n                                                            content: '\"\"',\n                                                            position: 'absolute',\n                                                            left: 0,\n                                                            top: '50%',\n                                                            width: '8px',\n                                                            height: '1px',\n                                                            backgroundColor: 'rgba(0,0,0,0.1)',\n                                                        }\n                                                    }}\n                                                >\n                                                <Box\n                                                    sx={fileItemSx(isChartActive, true)}\n                                                    onClick={handleChartClick}\n                                                >\n                                                    {getChartIcon(chart.chartType)}\n                                                    <Typography sx={{\n                                                        fontSize: 11,\n                                                        fontWeight: isChartActive ? 600 : 400,\n                                                        color: isChartActive ? 'primary.main' : 'text.primary',\n                                                        overflow: 'hidden',\n                                                        textOverflow: 'ellipsis',\n                                                        whiteSpace: 'nowrap',\n                                                        flex: 1,\n                                                        minWidth: 0,\n                                                    }}>\n                                                        {chart.chartType}\n                                                    </Typography>\n                                                </Box>\n                                                </Box>\n                                            );\n                                        })}\n                                    </Box>\n                                )}\n                            </Box>\n                        );\n                    })}\n                </Box>\n            </Collapse>\n\n            <UnifiedDataUploadDialog\n                open={uploadDialogOpen}\n                onClose={() => setUploadDialogOpen(false)}\n                initialTab=\"menu\"\n            />\n            <AgentRulesDialog\n                externalOpen={agentRulesOpen}\n                onExternalClose={() => setAgentRulesOpen(false)}\n            />\n        </Box>\n    );\n};\n\n/** A status message that collapses to a single line on click, and expands back on click. */\nconst CollapsibleStatusMessage: FC<{ text: string; color: string }> = ({ text, color }) => {\n    const [collapsed, setCollapsed] = useState(true);\n    return (\n        <Typography\n            variant=\"body2\"\n            onClick={(e) => { e.stopPropagation(); setCollapsed(prev => !prev); }}\n            sx={{\n                fontSize: 10, color, px: 1, py: 0.5, cursor: 'pointer',\n                '&:hover': { textDecoration: 'underline', textDecorationStyle: 'dotted' },\n                ...(collapsed ? {\n                    overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',\n                    maxWidth: '100%',\n                } : {\n                    whiteSpace: 'pre-wrap', wordBreak: 'break-word',\n                }),\n            }}\n        >\n            {text}\n        </Typography>\n    );\n};\n\nlet SingleThreadGroupView: FC<{\n    scrollRef: any,\n    threadIdx: number,\n    threadLabel?: string, // Custom label like \"thread 1.1\" for split sub-threads\n    isSplitThread?: boolean, // When true, truncate used tables to immediate parent + \"...\"\n    hideLabel?: boolean, // When true, hide the thread label divider\n    leafTables: DictTable[];\n    chartElements: { tableId: string, chartId: string, element: any }[];\n    usedIntermediateTableIds: string[],\n    globalHighlightedTableIds: string[],\n    focusedThreadLeafId?: string, // The leaf table ID of the thread containing the focused table\n    chatboxFocused?: boolean, // Whether the chatbox input is focused\n    sx?: SxProps\n}> = function ({\n    scrollRef,\n    threadIdx,\n    threadLabel,\n    isSplitThread = false,\n    hideLabel = false,\n    leafTables,\n    chartElements,\n    usedIntermediateTableIds, // tables that have been used\n    globalHighlightedTableIds,\n    focusedThreadLeafId,\n    chatboxFocused = false,\n    sx\n}) {\n\n    let tables = useSelector((state: DataFormulatorState) => state.tables);\n    const { manualRefresh } = useDataRefresh();\n    const tableById = useMemo(() => new Map(tables.map(t => [t.id, t])), [tables]);\n\n    let leafTableIds = leafTables.map(lt => lt.id);\n    // Thread is highlighted only if this thread's leaf tables include the focused thread's leaf\n    const threadHighlighted = focusedThreadLeafId \n        ? leafTableIds.includes(focusedThreadLeafId) \n        : false;\n    // Ancestor thread: not the focused thread, but *owns* some highlighted tables\n    // (tables that only appear as used/shared references don't count)\n    const isAncestorThread = !threadHighlighted && globalHighlightedTableIds.length > 0\n        && leafTables.some(lt => {\n            const trigs = getTriggers(lt, tables);\n            const chainIds = [...trigs.map(t => t.tableId), lt.id];\n            const ownedIds = chainIds.filter(id => !usedIntermediateTableIds.includes(id));\n            return ownedIds.some(id => globalHighlightedTableIds.includes(id));\n        });\n    const shouldHighlightThread = threadHighlighted || isAncestorThread;\n    let parentTableId = leafTables[0].derive?.trigger.tableId || undefined;\n    let parentTable = (parentTableId ? tableById.get(parentTableId) : undefined) as DictTable;\n\n    let charts = useSelector(dfSelectors.getAllCharts);\n    let focusedId = useSelector((state: DataFormulatorState) => state.focusedId);\n    let focusedChartId = focusedId?.type === 'chart' ? focusedId.chartId : undefined;\n    let focusedTableId = useMemo(() => {\n        if (!focusedId) return undefined;\n        if (focusedId.type === 'table') return focusedId.tableId;\n        const chartId = focusedId.chartId;\n        const chart = charts.find(c => c.id === chartId);\n        return chart?.tableRef;\n    }, [focusedId, charts]);\n    let agentActions = useSelector((state: DataFormulatorState) => state.agentActions);\n\n    // Pre-index running agent table IDs for O(1) lookup\n    const runningAgentTableIds = useMemo(() => {\n        const ids = new Map<string, typeof agentActions[0]>();\n        for (const a of agentActions) {\n            if (!a.hidden && a.status === 'running') {\n                // Find the last table created in the chain so far\n                const lastResultTableId = a.messages\n                    ?.filter(m => m.resultTableId)\n                    .pop()?.resultTableId;\n                ids.set(lastResultTableId || a.originTableId, a);\n            }\n        }\n        return ids;\n    }, [agentActions]);\n\n    // Pre-index tables with pending clarification\n    const clarifyAgentTableIds = useMemo(() => {\n        const ids = new Map<string, typeof agentActions[0]>();\n        for (const a of agentActions) {\n            if (!a.hidden && a.pendingClarification) {\n                const lastResultTableId = a.pendingClarification.lastCreatedTableId\n                    || a.messages?.filter(m => m.resultTableId).pop()?.resultTableId;\n                ids.set(lastResultTableId || a.originTableId, a);\n            }\n        }\n        return ids;\n    }, [agentActions]);\n\n    // Pre-index tables with completed agent actions\n    const completedAgentTableIds = useMemo(() => {\n        const ids = new Map<string, typeof agentActions[0]>();\n        for (const a of agentActions) {\n            if (!a.hidden && (a.status === 'completed' || a.status === 'warning' || a.status === 'failed') && !a.pendingClarification) {\n                const lastResultTableId = a.messages\n                    ?.filter(m => m.resultTableId)\n                    .pop()?.resultTableId;\n                ids.set(lastResultTableId || a.originTableId, a);\n            }\n        }\n        return ids;\n    }, [agentActions]);\n\n    // Metadata popup state\n    const [metadataPopupOpen, setMetadataPopupOpen] = useState(false);\n    const [selectedTableForMetadata, setSelectedTableForMetadata] = useState<DictTable | null>(null);\n    const [metadataAnchorEl, setMetadataAnchorEl] = useState<HTMLElement | null>(null);\n\n    // Table menu state\n    const [tableMenuAnchorEl, setTableMenuAnchorEl] = useState<HTMLElement | null>(null);\n    const [selectedTableForMenu, setSelectedTableForMenu] = useState<DictTable | null>(null);\n\n    // Refresh data dialog state\n    const [refreshDialogOpen, setRefreshDialogOpen] = useState(false);\n    const [selectedTableForRefresh, setSelectedTableForRefresh] = useState<DictTable | null>(null);\n    const [isRefreshing, setIsRefreshing] = useState(false);\n\n    // Streaming settings popup state\n    const [streamingSettingsPopupOpen, setStreamingSettingsPopupOpen] = useState(false);\n    const [selectedTableForStreamingSettings, setSelectedTableForStreamingSettings] = useState<DictTable | null>(null);\n    const [streamingSettingsAnchorEl, setStreamingSettingsAnchorEl] = useState<HTMLElement | null>(null);\n\n    let handleUpdateTableDisplayId = (tableId: string, displayId: string) => {\n        dispatch(dfActions.updateTableDisplayId({\n            tableId: tableId,\n            displayId: displayId\n        }));\n    }\n\n    // Rename popup state\n    const [renamePopupOpen, setRenamePopupOpen] = useState(false);\n    const [selectedTableForRename, setSelectedTableForRename] = useState<DictTable | null>(null);\n    const [renameAnchorEl, setRenameAnchorEl] = useState<HTMLElement | null>(null);\n\n    const handleOpenRenamePopup = (table: DictTable, anchorEl: HTMLElement) => {\n        setSelectedTableForRename(table);\n        setRenameAnchorEl(anchorEl);\n        setRenamePopupOpen(true);\n    };\n\n    const handleCloseRenamePopup = () => {\n        setRenamePopupOpen(false);\n        setSelectedTableForRename(null);\n        setRenameAnchorEl(null);\n    };\n\n    const handleSaveRename = (newName: string) => {\n        if (selectedTableForRename) {\n            handleUpdateTableDisplayId(selectedTableForRename.id, newName);\n        }\n    };\n\n    const handleOpenMetadataPopup = (table: DictTable, anchorEl: HTMLElement) => {\n        setSelectedTableForMetadata(table);\n        setMetadataAnchorEl(anchorEl);\n        setMetadataPopupOpen(true);\n    };\n\n    const handleCloseMetadataPopup = () => {\n        setMetadataPopupOpen(false);\n        setSelectedTableForMetadata(null);\n        setMetadataAnchorEl(null);\n    };\n\n    const handleSaveMetadata = (metadata: string) => {\n        if (selectedTableForMetadata) {\n            dispatch(dfActions.updateTableAttachedMetadata({\n                tableId: selectedTableForMetadata.id,\n                attachedMetadata: metadata\n            }));\n        }\n    };\n\n    // Table menu handlers\n    const handleOpenTableMenu = (table: DictTable, anchorEl: HTMLElement) => {\n        setSelectedTableForMenu(table);\n        setTableMenuAnchorEl(anchorEl);\n    };\n\n    const handleCloseTableMenu = () => {\n        setTableMenuAnchorEl(null);\n        setSelectedTableForMenu(null);\n    };\n\n    // Refresh data handlers\n    const handleOpenRefreshDialog = (table: DictTable) => {\n        setSelectedTableForRefresh(table);\n        setRefreshDialogOpen(true);\n        handleCloseTableMenu();\n    };\n\n    const handleCloseRefreshDialog = () => {\n        setRefreshDialogOpen(false);\n        setSelectedTableForRefresh(null);\n    };\n\n    // Streaming settings handlers\n    const handleOpenStreamingSettingsPopup = (table: DictTable, anchorEl: HTMLElement) => {\n        setSelectedTableForStreamingSettings(table);\n        setStreamingSettingsAnchorEl(anchorEl);\n        setStreamingSettingsPopupOpen(true);\n    };\n\n    const handleCloseStreamingSettingsPopup = () => {\n        setStreamingSettingsPopupOpen(false);\n        setSelectedTableForStreamingSettings(null);\n        setStreamingSettingsAnchorEl(null);\n    };\n\n    const handleUpdateStreamingSettings = (autoRefresh: boolean, refreshIntervalSeconds?: number) => {\n        if (selectedTableForStreamingSettings) {\n            dispatch(dfActions.updateTableSourceRefreshSettings({\n                tableId: selectedTableForStreamingSettings.id,\n                autoRefresh,\n                refreshIntervalSeconds\n            }));\n        }\n    };\n\n    // Function to refresh derived tables in batch.\n    // Collects all results first, then dispatches a single updateMultipleTableRows.\n    const refreshDerivedTables = async (sourceTableId: string, newRows: any[]) => {\n        const derivedTables = tables.filter(t => t.derive?.source?.includes(sourceTableId));\n        if (derivedTables.length === 0) return;\n        \n        const refreshPromises = derivedTables\n            .filter(dt => dt.derive && dt.derive.code && dt.derive.codeSignature)\n            .map(async (derivedTable) => {\n                const parentTableData = derivedTable.derive!.source.map(sourceId => {\n                    const sourceTable = tables.find(t => t.id === sourceId);\n                    if (sourceTable) {\n                        const rows = sourceId === sourceTableId ? newRows : sourceTable.rows;\n                        const tableName = sourceTable.virtual?.tableId || sourceTable.id.replace(/\\.[^/.]+$/, \"\");\n                        return { name: tableName, rows };\n                    }\n                    return null;\n                }).filter(t => t !== null);\n\n                if (parentTableData.length === 0) return null;\n\n                try {\n                    const requestBody: any = {\n                        input_tables: parentTableData,\n                        code: derivedTable.derive!.code,\n                        code_signature: derivedTable.derive!.codeSignature, // HMAC proof\n                        output_variable: derivedTable.derive!.outputVariable || 'result_df',\n                        virtual: !!derivedTable.virtual?.tableId,\n                        output_table_name: derivedTable.virtual?.tableId\n                    };\n                    \n                    const response = await fetchWithIdentity(getUrls().REFRESH_DERIVED_DATA, {\n                        method: 'POST',\n                        headers: { 'Content-Type': 'application/json' },\n                        body: JSON.stringify(requestBody)\n                    });\n\n                    const result = await response.json();\n                    if (result.status === 'ok' && result.rows) {\n                        return { tableId: derivedTable.id, rows: result.rows } as { tableId: string, rows: any[] };\n                    } else {\n                        console.error(`Failed to refresh derived table ${derivedTable.id}:`, result.message);\n                        dispatch(dfActions.addMessages({\n                            timestamp: Date.now(),\n                            type: 'error',\n                            component: 'data refresh',\n                            value: `Failed to refresh derived table \"${derivedTable.displayId || derivedTable.id}\": ${result.message || 'Unknown error'}`\n                        }));\n                        return null;\n                    }\n                } catch (error) {\n                    console.error(`Error refreshing derived table ${derivedTable.id}:`, error);\n                    dispatch(dfActions.addMessages({\n                        timestamp: Date.now(),\n                        type: 'error',\n                        component: 'data refresh',\n                        value: `Error refreshing derived table \"${derivedTable.displayId || derivedTable.id}\"`\n                    }));\n                    return null;\n                }\n            });\n\n        const results = await Promise.all(refreshPromises);\n        const successfulUpdates = results.filter((r): r is { tableId: string, rows: any[] } => r !== null);\n        \n        if (successfulUpdates.length > 0) {\n            // Single batch dispatch instead of N individual dispatches\n            dispatch(dfActions.updateMultipleTableRows(successfulUpdates));\n        }\n    };\n\n    const handleRefreshComplete = async (newRows: any[]) => {\n        if (!selectedTableForRefresh) return;\n\n        setIsRefreshing(true);\n        try {\n            // Update the source table with new rows\n            dispatch(dfActions.updateTableRows({\n                tableId: selectedTableForRefresh.id,\n                rows: newRows\n            }));\n\n            // Refresh all derived tables\n            await refreshDerivedTables(selectedTableForRefresh.id, newRows);\n\n            dispatch(dfActions.addMessages({\n                timestamp: Date.now(),\n                type: 'success',\n                component: 'data refresh',\n                value: `Successfully refreshed data for \"${selectedTableForRefresh.displayId || selectedTableForRefresh.id}\" and updated derived tables.`\n            }));\n        } catch (error) {\n            console.error('Error during refresh:', error);\n            dispatch(dfActions.addMessages({\n                timestamp: Date.now(),\n                type: 'error',\n                component: 'data refresh',\n                value: `Error refreshing data: ${error}`\n            }));\n        } finally {\n            setIsRefreshing(false);\n        }\n    };\n\n    const theme = useTheme();\n\n    let focusedChart = useSelector((state: DataFormulatorState) => charts.find(c => c.id == focusedChartId));\n\n    const dispatch = useDispatch();\n\n    let [collapsed, setCollapsed] = useState<boolean>(false);\n\n    const w: any = (a: any[], b: any[], spaceElement?: any) => a.length ? [a[0], b.length == 0 ? \"\" : (spaceElement || \"\"), ...w(b, a.slice(1), spaceElement)] : b;\n    \n    let triggers = parentTable ? getTriggers(parentTable, tables) : [];\n    let tableIdList = parentTable ? [...triggers.map((trigger) => trigger.tableId), parentTable.id] : [];\n\n    let usedTableIdsInThread = tableIdList.filter(id => usedIntermediateTableIds.includes(id));\n    let newTableIds = tableIdList.filter(id => !usedTableIdsInThread.includes(id));\n    let newTriggers = triggers.filter(tg => newTableIds.includes(tg.resultTableId));\n\n    // Use the global highlighted table IDs (computed at DataThread level from the focused table's full ancestor chain)\n    let highlightedTableIds = globalHighlightedTableIds;\n\n    let _buildTriggerCard = (trigger: Trigger, highlighted: boolean = false) => {\n        return buildTriggerCard(trigger, focusedChartId, highlighted);\n    }\n\n    // Shared props for buildTableCard calls\n    let tableCardProps: Omit<BuildTableCardProps, 'tableId'> = {\n        tables, charts, chartElements, usedIntermediateTableIds,\n        highlightedTableIds, focusedTableId, focusedChartId, focusedChart,\n        parentTable, tableIdList, collapsed, scrollRef, dispatch,\n        handleOpenTableMenu, primaryBgColor: theme.palette.primary.bgcolor,\n    };\n\n    let _buildTableCard = (tableId: string) => {\n        return buildTableCard({ tableId, ...tableCardProps });\n    }\n\n    let tableElementList = newTableIds.map((tableId, i) => _buildTableCard(tableId));\n    let triggerCards = newTriggers.map((trigger) => {\n        const triggerTableId = trigger.resultTableId;\n        const isHL = triggerTableId ? highlightedTableIds.includes(triggerTableId) : false;\n        return _buildTriggerCard(trigger, isHL);\n    });\n\n    // Build a flat sequence of timeline items: [trigger, table, charts, trigger, table, charts, ...]\n    let timelineItems: { key: string; element: React.ReactNode; type: 'used-table' | 'trigger' | 'table' | 'chart' | 'leaf-trigger' | 'leaf-table'; highlighted: boolean; tableId?: string; chartType?: string; isRunning?: boolean; isClarifying?: boolean; isCompleted?: boolean }[] = [];\n\n    // Add used (shared) tables at the top\n    // Only show the immediate parent + \"...\" for further ancestors\n    let displayedUsedTableIds = usedTableIdsInThread;\n    if (usedTableIdsInThread.length > 1) {\n        // Keep only the last (immediate parent), prepend \"...\" placeholder\n        displayedUsedTableIds = usedTableIdsInThread.slice(-1);\n        timelineItems.push({\n            key: 'used-table-ellipsis',\n            type: 'used-table',\n            highlighted: false,\n            element: (\n                <Typography sx={{ fontSize: '10px', color: 'text.disabled' }}>\n                    …\n                </Typography>\n            ),\n        });\n    }\n    displayedUsedTableIds.forEach((tableId, i) => {\n        let table = tableById.get(tableId) as DictTable;\n        timelineItems.push({\n            key: `used-table-${tableId}-${i}`,\n            type: 'used-table',\n            tableId: tableId,\n            highlighted: highlightedTableIds.includes(tableId),\n            element: (\n                <Typography \n                    sx={{\n                        fontSize: '10px',\n                        cursor: 'pointer',\n                        width: 'fit-content',\n                        '&:hover': {\n                            backgroundColor: alpha(theme.palette.primary.light, 0.1),\n                        },\n                    }} \n                    onClick={() => { dispatch(dfActions.setFocused({ type: 'table', tableId })) }}>\n                    {table.displayId || tableId}\n                </Typography>\n            ),\n        });\n    });\n\n    // Interleave triggers and tables for the main thread body\n    newTableIds.forEach((tableId, i) => {\n        const trigger = newTriggers.find(t => t.resultTableId === tableId);\n        const isHighlighted = highlightedTableIds.includes(tableId);\n\n        // Add trigger card if exists\n        if (trigger) {\n            const triggerCard = triggerCards[newTriggers.indexOf(trigger)];\n            if (triggerCard) {\n                timelineItems.push({\n                    key: triggerCard?.key || `woven-trigger-${tableId}`,\n                    type: 'trigger',\n                    highlighted: isHighlighted,\n                    element: triggerCard,\n                });\n            }\n        }\n\n        // Add table card and its charts\n        const tableCard = tableElementList[i];\n        if (Array.isArray(tableCard)) {\n            tableCard.forEach((subItem: any, j: number) => {\n                if (!subItem) return;\n                const subKey = subItem?.key || `woven-${tableId}-${j}`;\n                const isChart = subKey.includes('chart');\n                // Extract chartType from the key (pattern: 'relevant-chart-{chartId}')\n                let itemChartType: string | undefined;\n                if (isChart) {\n                    const cIdMatch = subKey.match(/(?:chart)-(.+)$/);\n                    if (cIdMatch) {\n                        const cObj = charts.find(c => c.id === cIdMatch[1]);\n                        itemChartType = cObj?.chartType;\n                    }\n                }\n                timelineItems.push({\n                    key: subKey,\n                    type: isChart ? 'chart' : 'table',\n                    tableId: isChart ? undefined : tableId,\n                    chartType: itemChartType,\n                    highlighted: isHighlighted,\n                    element: subItem,\n                });\n            });\n        }\n\n        // If an agent is running on this table, add a \"working...\" indicator\n        if (runningAgentTableIds.has(tableId)) {\n            const runningAction = runningAgentTableIds.get(tableId);\n            const message = runningAction?.description || 'working...';\n            timelineItems.push({\n                key: `agent-running-${tableId}`,\n                type: 'chart',\n                highlighted: isHighlighted,\n                isRunning: true,\n                element: ThinkingBanner(message, { px: 1, py: 0.5 }),\n            });\n        } else if (clarifyAgentTableIds.has(tableId)) {\n            timelineItems.push({\n                key: `agent-clarify-${tableId}`,\n                type: 'chart',\n                highlighted: isHighlighted,\n                isClarifying: true,\n                element: <Typography variant=\"body2\" sx={{ fontSize: 10, color: theme.palette.warning.main, px: 1, py: 0.5 }}>waiting for clarification...</Typography>,\n            });\n        } else if (completedAgentTableIds.has(tableId)) {\n            const completedAction = completedAgentTableIds.get(tableId);\n            const completionMsg = completedAction?.messages?.filter(m => m.role === 'completion').pop();\n            if (completionMsg) {\n                const color = completedAction?.status === 'failed' ? theme.palette.error.main : theme.palette.success.main;\n                timelineItems.push({\n                    key: `agent-completed-${tableId}`,\n                    type: 'chart',\n                    highlighted: isHighlighted,\n                    isCompleted: true,\n                    element: <CollapsibleStatusMessage text={typeof completionMsg.content === 'string' ? completionMsg.content : String(completionMsg.content)} color={color} />,\n                });\n            }\n        }\n    });\n\n    // Add leaf table components\n    leafTables.forEach((lt, i) => {\n        let leafTrigger = lt.derive?.trigger;\n        if (leafTrigger) {\n            timelineItems.push({\n                key: `leaf-trigger-${lt.id}`,\n                type: 'leaf-trigger',\n                highlighted: highlightedTableIds.includes(lt.id),\n                element: _buildTriggerCard(leafTrigger, highlightedTableIds.includes(lt.id)),\n            });\n        }\n        let leafCards = _buildTableCard(lt.id);\n        if (Array.isArray(leafCards)) {\n            leafCards.forEach((subItem: any, j: number) => {\n                if (!subItem) return;\n                const subKey = subItem?.key || `leaf-card-${lt.id}-${j}`;\n                const isChart = subKey.includes('chart');\n                let leafChartType: string | undefined;\n                if (isChart) {\n                    const cIdMatch = subKey.match(/(?:chart)-(.+)$/);\n                    if (cIdMatch) {\n                        const cObj = charts.find(c => c.id === cIdMatch[1]);\n                        leafChartType = cObj?.chartType;\n                    }\n                }\n                timelineItems.push({\n                    key: subKey,\n                    type: isChart ? 'chart' : 'leaf-table',\n                    tableId: isChart ? undefined : lt.id,\n                    chartType: leafChartType,\n                    highlighted: highlightedTableIds.includes(lt.id),\n                    element: subItem,\n                });\n            });\n        }\n\n        // If an agent is running on this leaf table, add a \"working...\" indicator\n        if (runningAgentTableIds.has(lt.id)) {\n            const runningAction = runningAgentTableIds.get(lt.id);\n            const message = runningAction?.description || 'working...';\n            timelineItems.push({\n                key: `agent-running-${lt.id}`,\n                type: 'chart',\n                highlighted: highlightedTableIds.includes(lt.id),\n                isRunning: true,\n                element: ThinkingBanner(message, { px: 1, py: 0.5 }),\n            });\n        } else if (clarifyAgentTableIds.has(lt.id)) {\n            timelineItems.push({\n                key: `agent-clarify-${lt.id}`,\n                type: 'chart',\n                highlighted: highlightedTableIds.includes(lt.id),\n                isClarifying: true,\n                element: <Typography variant=\"body2\" sx={{ fontSize: 10, color: theme.palette.warning.main, px: 1, py: 0.5 }}>waiting for clarification...</Typography>,\n            });\n        } else if (completedAgentTableIds.has(lt.id)) {\n            const completedAction = completedAgentTableIds.get(lt.id);\n            const completionMsg = completedAction?.messages?.filter(m => m.role === 'completion').pop();\n            if (completionMsg) {\n                const color = completedAction?.status === 'failed' ? theme.palette.error.main : theme.palette.success.main;\n                timelineItems.push({\n                    key: `agent-completed-${lt.id}`,\n                    type: 'chart',\n                    highlighted: highlightedTableIds.includes(lt.id),\n                    isCompleted: true,\n                    element: <CollapsibleStatusMessage text={typeof completionMsg.content === 'string' ? completionMsg.content : String(completionMsg.content)} color={color} />,\n                });\n            }\n        }\n    });\n\n    // Timeline rendering helper\n    const TIMELINE_WIDTH = 14;\n    const TIMELINE_GAP = '4px'; // gap between timeline and card content\n    const DOT_SIZE = 6;\n    const CARD_PY = '6px'; // vertical padding for each timeline row\n\n    const getTimelineDot = (item: typeof timelineItems[0]) => {\n        const isTable = item.type === 'table' || item.type === 'leaf-table' || item.type === 'used-table';\n        const color = item.highlighted \n            ? theme.palette.primary.main\n            : 'rgba(0,0,0,0.15)';\n\n        // For running agent items, show a spinner instead of a dot\n        if (item.isRunning) {\n            return <CircularProgress size={12} thickness={5} sx={{ color: theme.palette.primary.main }} />;\n        }\n\n        // For clarification items, show an hourglass icon\n        if (item.isClarifying) {\n            return <HourglassEmptyIcon sx={{ width: 12, height: 12, color: theme.palette.warning.main }} />;\n        }\n\n        // For completed items, show a checkmark icon\n        if (item.isCompleted) {\n            return <CheckCircleOutlineIcon sx={{ width: 12, height: 12, color: theme.palette.success.main }} />;\n        }\n\n        // For table items, show a type-specific icon instead of a dot\n        if (isTable && item.tableId) {\n            const tableForDot = tableById.get(item.tableId);\n            const iconSx = { width: 14, height: 14, color };\n            const isStreaming = tableForDot && (tableForDot.source?.type === 'stream' || tableForDot.source?.type === 'database') && tableForDot.source?.autoRefresh;\n\n            if (isStreaming) {\n                return <StreamIcon sx={{ \n                    ...iconSx, \n                    color: item.highlighted ? theme.palette.success.main : 'rgba(0,0,0,0.15)',\n                    animation: 'pulse 2s infinite',\n                    '@keyframes pulse': {\n                        '0%': { opacity: 1 },\n                        '50%': { opacity: 0.4 },\n                        '100%': { opacity: 1 },\n                    },\n                }} />;\n            }\n            if (tableForDot?.virtual) {\n                return <TableIcon sx={{ ...iconSx, width: 14, height: 14 }} />;\n            }\n            return <TableIcon sx={iconSx} />;\n        }\n\n        // For chart items, show a chart-type-specific icon\n        if (item.type === 'chart' && item.chartType) {\n            const iconSx = { width: 14, height: 14, color };\n            const ct = item.chartType.toLowerCase();\n            if (ct.includes('scatter') || ct.includes('point') || ct.includes('dot') || ct.includes('boxplot')) {\n                return <ScatterPlotIcon sx={iconSx} />;\n            }\n            if (ct.includes('line') || ct.includes('regression')) {\n                return <ShowChartIcon sx={iconSx} />;\n            }\n            if (ct.includes('pie')) {\n                return <PieChartOutlineIcon sx={iconSx} />;\n            }\n            if (ct.includes('heatmap')) {\n                return <GridOnIcon sx={iconSx} />;\n            }\n            if (ct.includes('table')) {\n                return <TableIcon sx={iconSx} />;\n            }\n            // Bar, histogram, stacked, grouped, pyramid, and default\n            return <BarChartIcon sx={iconSx} />;\n        }\n\n        return <Box sx={{ \n            width: DOT_SIZE, height: DOT_SIZE, borderRadius: '50%', \n            backgroundColor: color,\n        }} />;\n    };\n\n    const hasHighlighting = highlightedTableIds.length > 0;\n    // Whether the thread header is highlighted (any non-used-table item in this thread is highlighted)\n    const headerHL = timelineItems.some(item => item.highlighted && item.type !== 'used-table');\n\n    const renderTimelineItem = (item: typeof timelineItems[0], index: number, isLast: boolean, nextHighlighted: boolean) => {\n        const isTrigger = item.type === 'trigger' || item.type === 'leaf-trigger';\n        const isTable = item.type === 'table' || item.type === 'leaf-table' || item.type === 'used-table';\n        const isChart = item.type === 'chart';\n        const dashedColor = item.highlighted ? alpha(theme.palette.primary.main, 0.6) : 'rgba(0,0,0,0.1)';\n        const dashedWidth = item.highlighted ? '2px' : '1px';\n        const dashedStyle = 'solid';\n        // Bottom connector uses unhighlighted style if next item isn't highlighted\n        const bottomHighlighted = item.highlighted && nextHighlighted;\n        const bottomDashedColor = bottomHighlighted ? alpha(theme.palette.primary.main, 0.6) : 'rgba(0,0,0,0.1)';\n        const bottomDashedWidth = bottomHighlighted ? '2px' : '1px';\n        const bottomDashedStyle = 'solid';\n        const triggerColor = item.highlighted \n            ? theme.palette.custom.main\n            : 'rgba(0,0,0,0.15)';\n        // Dim non-highlighted cards when chatbox is focused\n        const rowHighlightSx = (chatboxFocused && hasHighlighting && !item.highlighted) ? { opacity: 0.35 } : {};\n\n        // Triggers: agent icon on the timeline\n        if (isTrigger) {\n            return (\n                <Box key={`timeline-row-${item.key}`} sx={{ display: 'flex', flexDirection: 'row', position: 'relative', ...rowHighlightSx }}>\n                    <Box sx={{ \n                        width: TIMELINE_WIDTH, flexShrink: 0, \n                        display: 'flex', flexDirection: 'column', alignItems: 'center',\n                    }}>\n                        <Box sx={{ width: 0, flex: '1 1 0', minHeight: 2, borderLeft: `${dashedWidth} ${dashedStyle} ${dashedColor}` }} />\n                        <Box sx={{ flexShrink: 0, zIndex: 1, position: 'relative', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n                            <AgentIcon sx={{ width: 14, height: 14, color: triggerColor }} />\n                        </Box>\n                        {!isLast && <Box sx={{ width: 0, flex: '1 1 0', minHeight: 2, borderLeft: `${bottomDashedWidth} ${bottomDashedStyle} ${bottomDashedColor}` }} />}\n                        {isLast && <Box sx={{ flex: '1 1 0', minHeight: 2 }} />}\n                    </Box>\n                    <Box sx={{ flex: 1, minWidth: 0, py: CARD_PY, pl: TIMELINE_GAP }}>\n                        {item.element}\n                    </Box>\n                </Box>\n            );\n        }\n\n        // Charts: chart-type icon on the timeline\n        if (isChart) {\n            return (\n                <Box key={`timeline-row-${item.key}`} sx={{ display: 'flex', flexDirection: 'row', position: 'relative', ...rowHighlightSx }}>\n                    <Box sx={{\n                        width: TIMELINE_WIDTH, flexShrink: 0,\n                        display: 'flex', flexDirection: 'column', alignItems: 'center',\n                    }}>\n                        <Box sx={{ width: 0, flex: '1 1 0', borderLeft: `${dashedWidth} ${dashedStyle} ${dashedColor}` }} />\n                        <Box sx={{ flexShrink: 0, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n                            {getTimelineDot(item)}\n                        </Box>\n                        {!isLast && <Box sx={{ width: 0, flex: '1 1 0', minHeight: 2, borderLeft: `${bottomDashedWidth} ${bottomDashedStyle} ${bottomDashedColor}` }} />}\n                        {isLast && <Box sx={{ flex: '1 1 0', minHeight: 2 }} />}\n                    </Box>\n                    <Box sx={{ flex: 1, minWidth: 0, py: CARD_PY, pl: TIMELINE_GAP }}>\n                        {item.element}\n                    </Box>\n                </Box>\n            );\n        }\n\n        // Tables (primary nodes): settings icon on the timeline, more vertical spacing\n        const tableForItem = item.tableId ? tableById.get(item.tableId) : undefined;\n        return (\n            <Box key={`timeline-row-${item.key}`} sx={{ display: 'flex', flexDirection: 'row', position: 'relative', ...rowHighlightSx }}>\n                <Box sx={{ \n                    width: TIMELINE_WIDTH, flexShrink: 0, \n                    display: 'flex', flexDirection: 'column', alignItems: 'center',\n                    position: 'relative',\n                }}>\n                    {(index > 0 || !hideLabel) && (() => {\n                        // When connecting to the header (index 0, label visible), match the header's highlight state\n                        const useHeader = index === 0 && !hideLabel;\n                        const topColor = useHeader ? (headerHL ? alpha(theme.palette.primary.main, 0.6) : 'rgba(0,0,0,0.1)') : dashedColor;\n                        const topWidth = useHeader ? (headerHL ? '2px' : '1px') : dashedWidth;\n                        const topStyle = 'solid';\n                        return <Box sx={{ width: 0, flex: '1 1 0', minHeight: 6, borderLeft: `${topWidth} ${topStyle} ${topColor}` }} />;\n                    })()}\n                    {index === 0 && hideLabel && <Box sx={{ flex: '1 1 0', minHeight: 6 }} />}\n                    <Box sx={{ flexShrink: 0, zIndex: 1, backgroundColor: 'white', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n                        {getTimelineDot(item)}\n                    </Box>\n                    {!isLast && (\n                        <Box sx={{ width: 0, flex: '1 1 0', minHeight: 6, borderLeft: `${bottomDashedWidth} ${bottomDashedStyle} ${bottomDashedColor}` }} />\n                    )}\n                    {isLast && <Box sx={{ flex: '1 1 0', minHeight: 6 }} />}\n                </Box>\n                <Box sx={{ flex: 1, minWidth: 0, py: item.type === 'used-table' ? '1px' : CARD_PY, pl: TIMELINE_GAP,\n                    ...(item.type === 'used-table' && { display: 'flex', alignItems: 'center' }),\n                }}>\n                    {item.element}\n                </Box>\n            </Box>\n        );\n    };\n\n\n    return <Box sx={{ ...sx, \n            '& .selected-card': { \n                boxShadow: `0 0 0 2px ${theme.palette.primary.light}`,\n                borderColor: 'transparent',\n                margin: '1px 0',\n            },\n            padding: '6px',\n            ...(chatboxFocused && focusedThreadLeafId && !shouldHighlightThread ? { opacity: 0.35 } : {}),\n        }}\n        >\n        <div style={{ padding: '2px 4px 2px 4px', marginTop: 0, direction: 'ltr' }}>\n            {!hideLabel && (() => {\n                const hlColor = theme.palette.primary.main;\n                const nhColor = 'rgba(0,0,0,0.35)';\n                const connColor = headerHL ? alpha(theme.palette.primary.main, 0.6) : 'rgba(0,0,0,0.1)';\n                const connWidth = headerHL ? '2px' : '1px';\n                const connStyle = 'solid';\n                return (\n                <Box sx={{ display: 'flex', flexDirection: 'row', ...(chatboxFocused && hasHighlighting && !headerHL ? { opacity: 0.35 } : {}) }}>\n                    <Box sx={{ \n                        width: TIMELINE_WIDTH, flexShrink: 0, \n                        display: 'flex', flexDirection: 'column', alignItems: 'center',\n                    }}>\n                        <Box sx={{ flex: '1 1 0', minHeight: 6 }} />\n                        <Box sx={{ \n                            width: 8, height: 8, borderRadius: '50%', \n                            border: `1.5px solid ${headerHL ? alpha(hlColor, 0.6) : 'rgba(0,0,0,0.15)'}`,\n                            backgroundColor: 'transparent',\n                            flexShrink: 0,\n                        }} />\n                        <Box sx={{ width: 0, flex: '1 1 0', minHeight: 10, borderLeft: `${connWidth} ${connStyle} ${connColor}` }} />\n                    </Box>\n                    <Box sx={{ flex: 1, minWidth: 0, display: 'flex', alignItems: 'center', pl: 0.5 }}>\n                        <Typography sx={{ \n                            fontSize: '11px', fontWeight: 700, \n                            textTransform: 'uppercase', letterSpacing: '0.02em',\n                            color: headerHL ? hlColor : 'rgba(0,0,0,0.55)', \n                        }}>\n                            {threadLabel || (threadIdx === -1 ? 'Thread 0' : `Thread ${threadIdx + 1}`)}\n                        </Typography>\n                    </Box>\n                </Box>\n                );\n            })()}\n            {timelineItems.map((item, index) => renderTimelineItem(item, index, index === timelineItems.length - 1, timelineItems[index + 1]?.highlighted ?? false))}\n        </div>\n        <MetadataPopup\n            open={metadataPopupOpen}\n            anchorEl={metadataAnchorEl}\n            onClose={handleCloseMetadataPopup}\n            onSave={handleSaveMetadata}\n            initialValue={selectedTableForMetadata?.attachedMetadata || ''}\n            tableName={selectedTableForMetadata?.displayId || selectedTableForMetadata?.id || ''}\n        />\n        <RenameTablePopup\n            open={renamePopupOpen}\n            anchorEl={renameAnchorEl}\n            onClose={handleCloseRenamePopup}\n            onSave={handleSaveRename}\n            initialValue={selectedTableForRename?.displayId || selectedTableForRename?.id || ''}\n            tableName={selectedTableForRename?.displayId || selectedTableForRename?.id || ''}\n        />\n\n        {/* Table actions menu */}\n        <Menu\n            anchorEl={tableMenuAnchorEl}\n            open={Boolean(tableMenuAnchorEl)}\n            onClose={handleCloseTableMenu}\n            onClick={(e) => e.stopPropagation()}\n        >\n            <MenuItem \n                onClick={(e) => {\n                    e.stopPropagation();\n                    if (selectedTableForMenu) {\n                        handleOpenRenamePopup(selectedTableForMenu, tableMenuAnchorEl!);\n                    }\n                    handleCloseTableMenu();\n                }}\n                sx={{ fontSize: '12px', display: 'flex', alignItems: 'center', gap: 1 }}\n            >\n                <EditIcon sx={{ fontSize: 16, color: 'text.secondary' }}/>\n                Rename\n            </MenuItem>\n            {/* Pin option - only for derived tables */}\n            {selectedTableForMenu?.derive != undefined && (\n                <MenuItem \n                    onClick={(e) => {\n                        e.stopPropagation();\n                        if (selectedTableForMenu) {\n                            dispatch(dfActions.updateTableAnchored({tableId: selectedTableForMenu.id, anchored: !selectedTableForMenu.anchored}));\n                        }\n                        handleCloseTableMenu();\n                    }}\n                    sx={{ fontSize: '12px', display: 'flex', alignItems: 'center', gap: 1 }}\n                >\n                    <AnchorIcon sx={{ fontSize: 16, color: selectedTableForMenu?.anchored ? 'primary.main' : 'text.secondary' }}/>\n                    {selectedTableForMenu?.anchored ? \"Unpin table\" : \"Pin table\"}\n                </MenuItem>\n            )}\n            {/* Non-derived table options */}\n            {selectedTableForMenu?.derive == undefined && (\n                <MenuItem \n                    onClick={(e) => {\n                        e.stopPropagation();\n                        if (selectedTableForMenu) {\n                            handleOpenMetadataPopup(selectedTableForMenu, tableMenuAnchorEl!);\n                        }\n                        handleCloseTableMenu();\n                    }}\n                    sx={{ fontSize: '12px', display: 'flex', alignItems: 'center', gap: 1 }}\n                >\n                    <AttachFileIcon sx={{ \n                        fontSize: 16,\n                        color: selectedTableForMenu?.attachedMetadata ? 'secondary.main' : 'text.secondary',\n                    }}/>\n                    {selectedTableForMenu?.attachedMetadata ? \"Edit metadata\" : \"Attach metadata\"}\n                </MenuItem>\n            )}\n            {/* Refresh settings - shown for stream/database sources to configure auto-refresh interval */}\n            {selectedTableForMenu && \n             selectedTableForMenu.derive == undefined &&\n             (selectedTableForMenu.source?.type === 'stream' || selectedTableForMenu.source?.type === 'database') && (\n                <MenuItem \n                    onClick={(e) => {\n                        e.stopPropagation();\n                        if (selectedTableForMenu) {\n                            handleOpenStreamingSettingsPopup(selectedTableForMenu, tableMenuAnchorEl!);\n                        }\n                        handleCloseTableMenu();\n                    }}\n                    sx={{ fontSize: '12px', display: 'flex', alignItems: 'center', gap: 1 }}\n                >\n                    <StreamIcon sx={{ fontSize: 16, color: selectedTableForMenu.source?.autoRefresh ? 'success.main' : 'text.secondary' }}/>\n                    {selectedTableForMenu.source?.autoRefresh ? 'Refresh settings' : 'Watch for updates'}\n                </MenuItem>\n            )}\n            {/* Refresh data - hidden for database tables and derived tables */}\n            {selectedTableForMenu?.derive == undefined && selectedTableForMenu?.source?.type !== 'database' && (\n                <MenuItem \n                    onClick={(e) => {\n                        e.stopPropagation();\n                        if (selectedTableForMenu) {\n                            handleOpenRefreshDialog(selectedTableForMenu);\n                        }\n                    }}\n                    sx={{ fontSize: '12px', display: 'flex', alignItems: 'center', gap: 1 }}\n                >\n                    <RefreshIcon sx={{ fontSize: 16, color: 'primary.main' }}/>\n                    Replace data\n                </MenuItem>\n            )}\n            <MenuItem \n                onClick={(e) => {\n                    e.stopPropagation();\n                    if (selectedTableForMenu) {\n                        dispatch(dfActions.deleteTable(selectedTableForMenu.id));\n                    }\n                    handleCloseTableMenu();\n                }}\n                disabled={selectedTableForMenu \n                    ? (!selectedTableForMenu.derive && tables.some(t => t.derive?.trigger.tableId === selectedTableForMenu.id)) \n                    : true}\n                sx={{ fontSize: '12px', display: 'flex', alignItems: 'center', gap: 1, color: 'warning.main' }}\n            >\n                <DeleteIcon sx={{ fontSize: 16 }} color='warning'/>\n                Delete table\n            </MenuItem>\n        </Menu>\n\n        {/* Refresh data dialog */}\n        {selectedTableForRefresh && (\n            <RefreshDataDialog\n                open={refreshDialogOpen}\n                onClose={handleCloseRefreshDialog}\n                table={selectedTableForRefresh}\n                onRefreshComplete={handleRefreshComplete}\n            />\n        )}\n\n        {/* Streaming settings popup */}\n        {selectedTableForStreamingSettings && (\n            <StreamingSettingsPopup\n                open={streamingSettingsPopupOpen}\n                anchorEl={streamingSettingsAnchorEl}\n                onClose={handleCloseStreamingSettingsPopup}\n                table={selectedTableForStreamingSettings}\n                onUpdateSettings={handleUpdateStreamingSettings}\n                onRefreshNow={() => manualRefresh(selectedTableForStreamingSettings.id)}\n            />\n        )}\n    </Box>\n    }\n\n/** Lightweight chart thumbnail — shows cached PNG, skeleton, or status icon. */\nconst ChartThumbnail: FC<{\n    chart: Chart;\n    table: DictTable;\n    status: 'available' | 'pending' | 'unavailable';\n    onChartClick: (chartId: string, tableId: string) => void;\n    onDelete: (chartId: string) => void;\n}> = ({ chart, table, status, onChartClick, onDelete }) => {\n\n    let deleteButton = <Box className='data-thread-chart-card-action-button'\n        sx={{ zIndex: 10, color: 'blue', position: \"absolute\", right: 1, background: 'rgba(255, 255, 255, 0.95)' }}>\n        <Tooltip title=\"delete chart\">\n            <IconButton size=\"small\" color=\"warning\" onClick={(event) => {\n                event.stopPropagation();\n                onDelete(chart.id);\n            }}><DeleteIcon fontSize=\"small\" /></IconButton>\n        </Tooltip>\n    </Box>\n\n    const pendingOverlay = status == 'pending' ? <Box sx={{\n        position: \"absolute\", top: 0, left: -8, right: -8, bottom: 0, zIndex: 20,\n        backgroundColor: \"rgba(243, 243, 243, 0.8)\", cursor: \"pointer\",\n        borderRadius: '6px', display: 'flex', flexDirection: 'column',\n    }}>\n        <LinearProgress sx={{ width: \"100%\", height: \"100%\", opacity: 0.05 }} />\n    </Box> : null;\n\n    if (['Auto', '?'].includes(chart.chartType)) {\n        return <Box \n            className=\"vega-thumbnail-box\"\n            onClick={() => onChartClick(chart.id, table.id)}\n            sx={{ width: \"100%\", color: 'text.secondary', height: 48, display: \"flex\", backgroundColor: \"white\", position: 'relative', flexDirection: \"column\" }}>\n            {pendingOverlay}\n            <InsightIcon sx={{ margin: 'auto', color: 'darkgray' }}  fontSize=\"medium\" />\n            {deleteButton}\n        </Box>;\n    }\n\n    if (status == 'unavailable' || chart.chartType == \"Table\") {\n        let chartTemplate = getChartTemplate(chart.chartType);\n        return <Box key={`unavailable-${chart.id}`} width={\"100%\"}\n            className={\"vega-thumbnail vega-thumbnail-box\"}\n            onClick={() => onChartClick(chart.id, table.id)}\n            sx={{ display: \"flex\", backgroundColor: \"white\", position: 'relative', flexDirection: \"column\" }}>\n            {pendingOverlay}\n            <Box sx={{ display: \"flex\", flexDirection: \"column\", margin: \"auto\", height: 48}}>\n                <Box sx={{ margin: \"auto\", transform: chart.chartType == 'Table' ? \"rotate(15deg)\" : undefined }} >\n                    {generateChartSkeleton(chartTemplate?.icon, 32, 32, chart.chartType == 'Table' ? 1 : 0.5)} \n                </Box>\n                {deleteButton}\n            </Box>\n        </Box>;\n    }\n\n    // ---- Thumbnail path: use cached PNG from ChartRenderService ----\n    if (chart.thumbnail) {\n        return (\n            <Box\n                onClick={() => onChartClick(chart.id, table.id)}\n                className=\"vega-thumbnail-box\"\n                style={{ width: \"100%\", position: \"relative\", cursor: \"pointer\" }}\n            >\n                <Box sx={{ margin: \"auto\" }}>\n                    {chart.saved && <Typography sx={{ position: \"absolute\", margin: \"5px\", zIndex: 2 }}>\n                        <StarIcon sx={{ color: \"gold\" }} fontSize=\"small\" />\n                    </Typography>}\n                    {pendingOverlay}\n                    {deleteButton}\n                    <Box className={\"vega-thumbnail\"}\n                        sx={{\n                            display: \"flex\",\n                            backgroundColor: chart.saved ? \"rgba(255,215,0,0.05)\" : \"white\",\n                            justifyContent: 'center',\n                            alignItems: 'center',\n                            minHeight: 48,\n                            minWidth: 60,\n                        }}\n                    >\n                        <img \n                            src={chart.thumbnail} \n                            alt={`${chart.chartType} chart`}\n                            style={{ maxWidth: 120, maxHeight: 100, objectFit: 'contain' }} \n                        />\n                    </Box>\n                </Box>\n            </Box>\n        );\n    }\n\n    // ---- Fallback: skeleton while ChartRenderService is still processing ----\n    let chartTemplate = getChartTemplate(chart.chartType);\n    return (\n        <Box\n            onClick={() => onChartClick(chart.id, table.id)}\n            className=\"vega-thumbnail-box\"\n            style={{ width: \"100%\", position: \"relative\", cursor: \"pointer\" }}\n        >\n            <Box sx={{ margin: \"auto\" }}>\n                {chart.saved && <Typography sx={{ position: \"absolute\", margin: \"5px\", zIndex: 2 }}>\n                    <StarIcon sx={{ color: \"gold\" }} fontSize=\"small\" />\n                </Typography>}\n                {pendingOverlay}\n                {deleteButton}\n                <Box className={\"vega-thumbnail\"}\n                    sx={{\n                        display: \"flex\",\n                        backgroundColor: chart.saved ? \"rgba(255,215,0,0.05)\" : \"white\",\n                        justifyContent: 'center',\n                        alignItems: 'center',\n                        minHeight: 60,\n                    }}\n                >\n                    {generateChartSkeleton(chartTemplate?.icon, 48, 48, 0.3)}\n                </Box>\n            </Box>\n        </Box>\n    );\n};\n\n// Height estimation constants (px) – per-type heights + py:4px (8px) gap per row\nconst LAYOUT_TABLE_HEIGHT = 28 + 8;     // table card + row padding\nconst LAYOUT_TRIGGER_HEIGHT = 43 + 8;   // trigger card (2 lines) + row padding\nconst LAYOUT_CHART_HEIGHT = 90 + 8;     // chart card (~70-110) + row padding\nconst LAYOUT_THREAD_OVERHEAD = 52;      // header divider + thread padding\nconst LAYOUT_THREAD_GAP = 8;            // my: 0.5 = 4px top + 4px bottom between threads\n\nfunction estimateThreadHeight(\n    tableCount: number, triggerCount: number, chartCount: number\n): number {\n    return LAYOUT_THREAD_OVERHEAD\n        + tableCount * LAYOUT_TABLE_HEIGHT\n        + triggerCount * LAYOUT_TRIGGER_HEIGHT\n        + chartCount * LAYOUT_CHART_HEIGHT;\n}\n\n/**\n * Compute a balanced column layout for threads.\n *\n * @param heights  – Estimated pixel height for each thread (in display order).\n * @param numColumns – Maximum number of columns to distribute into.\n * @param flexOrder – When true, threads may be reordered across columns for\n *                    better balance (LPT heuristic). When false, the original\n *                    order is preserved (optimal contiguous partitioning via\n *                    binary-search on the maximum column height).\n * @returns An array of columns, where each column is an array of original\n *          thread indices.  Empty columns are omitted.\n */\nfunction computeThreadColumnLayout(\n    heights: number[],\n    numColumns: number,\n    flexOrder: boolean = false,\n): number[][] {\n    if (heights.length === 0) return [];\n    if (heights.length === 1) return [[0]];\n\n    const cols = Math.min(numColumns, heights.length);\n    if (cols <= 1) return [heights.map((_, i) => i)];\n\n    return flexOrder\n        ? layoutFlexOrder(heights, cols)\n        : layoutPreserveOrder(heights, cols);\n}\n\n/**\n * Balanced layout *with* reordering (LPT – Longest Processing Time first).\n * Assigns the tallest unplaced thread to whichever column is currently shortest.\n */\nfunction layoutFlexOrder(heights: number[], numColumns: number): number[][] {\n    const indexed = heights.map((h, i) => ({ idx: i, h }));\n    indexed.sort((a, b) => b.h - a.h);                // tallest first\n\n    const columns: number[][] = Array.from({ length: numColumns }, () => []);\n    const colH: number[] = new Array(numColumns).fill(0);\n\n    for (const item of indexed) {\n        let minCol = 0;\n        for (let c = 1; c < numColumns; c++) {\n            if (colH[c] < colH[minCol]) minCol = c;\n        }\n        columns[minCol].push(item.idx);\n        colH[minCol] += item.h;\n    }\n\n    return columns.filter(c => c.length > 0);\n}\n\n/**\n * Balanced layout *preserving* thread order.\n *\n * Uses binary-search on the maximum column height to find the tightest\n * contiguous partitioning of threads into ≤ numColumns groups.\n */\nfunction layoutPreserveOrder(heights: number[], numColumns: number): number[][] {\n    const maxH = Math.max(...heights);\n    const totalH = heights.reduce((s, h) => s + h, 0);\n\n    // Can we fit all threads into `numColumns` columns with no column > target?\n    const canPartition = (target: number): boolean => {\n        let cols = 1, cur = 0;\n        for (const h of heights) {\n            if (cur + h > target && cur > 0) {\n                cols++;\n                cur = h;\n                if (cols > numColumns) return false;\n            } else {\n                cur += h;\n            }\n        }\n        return true;\n    };\n\n    // Binary-search for the minimum feasible max-column height\n    let lo = maxH, hi = totalH;\n    while (lo < hi) {\n        const mid = Math.floor((lo + hi) / 2);\n        if (canPartition(mid)) hi = mid; else lo = mid + 1;\n    }\n\n    // Build the actual partition with the optimal target\n    const target = lo;\n    const columns: number[][] = [[]];\n    let cur = 0;\n    for (let i = 0; i < heights.length; i++) {\n        if (cur + heights[i] > target && columns[columns.length - 1].length > 0) {\n            columns.push([]);\n            cur = 0;\n        }\n        columns[columns.length - 1].push(i);\n        cur += heights[i];\n    }\n\n    return columns;\n}\n\n/**\n * Choose the best column layout that balances scroll burden vs whitespace.\n *\n * 1. If a single column fits within SCROLL_TOLERANCE × viewportHeight,\n *    use one column — the small scroll is preferable to the whitespace\n *    of an extra column (e.g. one long thread + one tiny thread).\n * 2. Otherwise, evaluate layouts for 1 … maxColumns and pick the smallest\n *    column count whose tallest column fits within viewportHeight.\n * 3. If nothing eliminates scrolling, pick the layout that minimises the\n *    tallest column (least scrolling).\n */\nconst SCROLL_TOLERANCE = 1.5; // allow up to 50% overflow before adding columns\n\nfunction chooseBestColumnLayout(\n    heights: number[],\n    maxColumns: number,\n    viewportHeight: number,\n    flexOrder: boolean = false,\n    minColumns: number = 1,\n): number[][] {\n    if (heights.length === 0) return [];\n\n    const cap = Math.min(maxColumns, heights.length);\n    const start = Math.min(Math.max(minColumns, 1), cap);\n    const tolerantHeight = viewportHeight * SCROLL_TOLERANCE;\n\n    // Compute effective column height including gaps between threads\n    const columnEffectiveHeight = (col: number[]) => {\n        const contentH = col.reduce((sum, idx) => sum + heights[idx], 0);\n        const gapH = Math.max(0, col.length - 1) * LAYOUT_THREAD_GAP;\n        return contentH + gapH;\n    };\n\n    // Evaluate every candidate column count (start … cap).\n    // Pick the smallest n whose tallest column fits within tolerance.\n    // If none fits, pick the one with the shortest tallest column.\n    let bestLayout: number[][] = [];\n    let bestMaxH = Infinity;\n\n    for (let n = start; n <= cap; n++) {\n        const layout = computeThreadColumnLayout(heights, n, flexOrder);\n        const maxH = Math.max(...layout.map(columnEffectiveHeight));\n\n        // Smallest n that fits within tolerance → least whitespace\n        if (maxH <= tolerantHeight) {\n            return layout;\n        }\n\n        // Otherwise track the layout with the shortest tallest column\n        if (maxH < bestMaxH) {\n            bestMaxH = maxH;\n            bestLayout = layout;\n        }\n    }\n\n    return bestLayout;\n}\n\nexport const DataThread: FC<{sx?: SxProps}> = function ({ sx }) {\n\n    let tables = useSelector((state: DataFormulatorState) => state.tables);\n    let focusedId = useSelector((state: DataFormulatorState) => state.focusedId);\n    let charts = useSelector(dfSelectors.getAllCharts);\n\n    // Derive focusedTableId from focusedId for scroll/highlight logic\n    let focusedTableId = useMemo(() => {\n        if (!focusedId) return undefined;\n        if (focusedId.type === 'table') return focusedId.tableId;\n        const chartId = focusedId.chartId;\n        const chart = charts.find(c => c.id === chartId);\n        return chart?.tableRef;\n    }, [focusedId, charts]);\n\n    let chartSynthesisInProgress = useSelector((state: DataFormulatorState) => state.chartSynthesisInProgress);\n\n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n\n    const scrollRef = useRef<null | HTMLDivElement>(null)\n    const containerRef = useRef<null | HTMLDivElement>(null)\n    const suppressScrollRef = useRef(false);\n    const [expandedColumns, setExpandedColumns] = useState(false);\n    const [containerWidth, setContainerWidth] = useState(0);\n    const [chatboxFocused, setChatboxFocused] = useState(false);\n    const [chatMode, setChatMode] = useState(false);\n\n    // Re-attach ResizeObserver whenever chatMode changes (containerRef moves to a different element)\n    useEffect(() => {\n        const el = containerRef.current;\n        if (!el) return;\n        const ro = new ResizeObserver((entries) => {\n            for (const entry of entries) {\n                setContainerWidth(entry.contentRect.width);\n            }\n        });\n        ro.observe(el);\n        return () => ro.disconnect();\n    }, [chatMode]);\n\n    const theme = useTheme();\n\n    const executeScroll = (smooth: boolean = true, block: ScrollLogicalPosition = 'center') => { \n        if (scrollRef.current != null) {\n            scrollRef.current.scrollIntoView({ \n                behavior: smooth ? 'smooth' : 'auto', \n                block\n            }) \n        }\n    }\n\n    const dispatch = useDispatch();\n\n    // Track previous table/chart counts to detect agent additions\n    const prevCountsRef = useRef({ tables: tables.length, charts: charts.length });\n\n    useEffect(() => {\n        // Only auto-scroll when new tables or charts are added (e.g., by the agent),\n        // not when the user simply changes focus by clicking.\n        const prevCounts = prevCountsRef.current;\n        const isNewItem = tables.length > prevCounts.tables || charts.length > prevCounts.charts;\n        prevCountsRef.current = { tables: tables.length, charts: charts.length };\n\n        if (focusedTableId && isNewItem) {\n            executeScroll(true);\n        }\n    }, [focusedTableId]);\n\n    // When the chatbox panel expands, scroll the focused table above the overlay if needed\n    useEffect(() => {\n        if (chatboxFocused && focusedTableId && scrollRef.current && containerRef.current) {\n            setTimeout(() => {\n                if (!scrollRef.current || !containerRef.current) return;\n                const container = containerRef.current;\n                const el = scrollRef.current;\n                const containerRect = container.getBoundingClientRect();\n                const elRect = el.getBoundingClientRect();\n                // The overlay panel is ~220px from bottom; ensure the focused element's bottom\n                // is at least 240px above the container's bottom\n                const safeZone = 400;\n                const elBottomInContainer = elRect.bottom - containerRect.top;\n                const visibleHeight = containerRect.height - safeZone;\n                if (elBottomInContainer > visibleHeight) {\n                    // Scroll so the element top is near the top of the container\n                    el.scrollIntoView({ behavior: 'smooth', block: 'start' });\n                }\n            }, 100);\n        }\n    }, [chatboxFocused]);\n\n    // O(1) table lookup by ID\n    const tableById = useMemo(() => new Map(tables.map(t => [t.id, t])), [tables]);\n\n    // Cached getTriggers — avoids repeated chain walks within a single render\n    const _tCache = new Map<string, Trigger[]>();\n    const getCachedTriggers = (lt: DictTable): Trigger[] => {\n        if (_tCache.has(lt.id)) return _tCache.get(lt.id)!;\n        const triggers = getTriggers(lt, tables);\n        _tCache.set(lt.id, triggers);\n        return triggers;\n    };\n\n    // Now use useMemo to memoize the chartElements array\n    let chartElements = useMemo(() => {\n        return charts.filter(c => c.source == \"user\").map((chart) => {\n            const table = getDataTable(chart, tables, charts, conceptShelfItems);\n            let status: 'available' | 'pending' | 'unavailable' = chartSynthesisInProgress.includes(chart.id) ? 'pending' : \n                checkChartAvailability(chart, conceptShelfItems, table.rows) ? 'available' : 'unavailable';\n            let element = <ChartThumbnail\n                chart={chart}\n                table={table}\n                status={status}\n                onChartClick={() => {\n                    dispatch(dfActions.setFocused({ type: 'chart', chartId: chart.id }));\n                }}\n                onDelete={() => {dispatch(dfActions.deleteChartById(chart.id))}}\n            />;\n            return { chartId: chart.id, tableId: table.id, element };\n        });\n    }, [charts, tables, conceptShelfItems, chartSynthesisInProgress]);\n\n    // anchors are considered leaf tables to simplify the view\n\n    let isLeafTable = (table: DictTable) => {\n        let children = tables.filter(t => t.derive?.trigger.tableId == table.id);\n        if (children.length == 0 || children.every(t => t.anchored)) {\n            return true;\n        }\n        return false;\n    }\n    let leafTables = [ ...tables.filter(t => isLeafTable(t)) ];\n\n    // Split long derivation chains by promoting intermediate tables as additional \"leaves\".\n    // If a chain has more than MAX_CHAIN_TABLES tables, we add a split point every\n    // MAX_CHAIN_TABLES steps. The sort (shorter chains first) ensures the intermediate\n    // leaf is processed before the real leaf, so its tables get claimed — making the\n    // real leaf's thread show only the remaining (new) tables.\n    // When counting chain length, exclude \"used\" tables (already claimed by an earlier\n    // chain) so that shared ancestors don't inflate the count. The first chain to\n    // contain a table still counts it as owned.\n    const MAX_CHAIN_TABLES = 5;\n\n    // Process leaves in order, tracking claimed tables to simulate the later claim loop.\n    // A table is \"used\" for a chain only if a *previous* chain already claimed it.\n    const claimedForSplit = new Set<string>();\n    const extraLeaves: DictTable[] = [];\n    for (const lt of leafTables) {\n        const triggers = getCachedTriggers(lt);\n        const allChainIds = [lt.id, ...triggers.map(t => t.tableId)];\n        // Tables not yet claimed by an earlier chain count as owned\n        const ownedIds = allChainIds.filter(id => !claimedForSplit.has(id));\n        if (ownedIds.length > MAX_CHAIN_TABLES) {\n            // Walk only owned (unclaimed) triggers for split positions\n            const ownedTriggers = triggers.filter(t => !claimedForSplit.has(t.tableId));\n            for (let pos = MAX_CHAIN_TABLES - 1; pos < ownedTriggers.length; pos += MAX_CHAIN_TABLES) {\n                const midId = ownedTriggers[pos].tableId;\n                const midTable = tableById.get(midId);\n                if (midTable && !leafTables.includes(midTable) && !extraLeaves.includes(midTable)) {\n                    extraLeaves.push(midTable);\n                }\n            }\n        }\n        // Claim all tables in this chain for subsequent chains\n        allChainIds.forEach(id => claimedForSplit.add(id));\n    }\n    if (extraLeaves.length > 0) {\n        leafTables.push(...extraLeaves);\n    }\n\n    // we want to sort the leaf tables by the order of their ancestors\n    // for example if ancestor of list a is [0, 3] and the ancestor of list b is [0, 2] then b should come before a\n    // when tables are anchored, we want to give them a higher order (so that they are displayed after their peers)\n    let tableOrder = Object.fromEntries(tables.map((table, index) => [table.id, index + (table.anchored ? 1 : 0) * tables.length]));\n    let getAncestorOrders = (leafTable: DictTable) => {\n        let triggers = getCachedTriggers(leafTable);\n        return [...triggers.map(t => tableOrder[t.tableId]), tableOrder[leafTable.id]];\n    }\n\n    leafTables.sort((a, b) => {\n        let aOrders = getAncestorOrders(a);\n        let bOrders = getAncestorOrders(b);\n        \n        // If lengths are equal, compare orders in order\n        for (let i = 0; i < Math.min(aOrders.length, bOrders.length); i++) {\n            if (aOrders[i] !== bOrders[i]) {\n                return aOrders[i] - bOrders[i];\n            }\n        }\n        \n        // If all orders are equal, compare the leaf tables themselves\n        return aOrders.length - bOrders.length;\n    });\n\n    // Compute global highlighted table IDs from the focused table's full ancestor chain\n    let globalHighlightedTableIds: string[] = useMemo(() => {\n        if (!focusedTableId) return [];\n        let focusedTable = tableById.get(focusedTableId);\n        if (!focusedTable) return [];\n        // Walk up the trigger chain from the focused table to collect all ancestor IDs\n        let ids: string[] = [focusedTableId];\n        let current = focusedTable;\n        while (current.derive && !current.anchored) {\n            let parentId = current.derive.trigger.tableId;\n            ids.unshift(parentId);\n            let parent = tableById.get(parentId);\n            if (!parent) break;\n            current = parent;\n        }\n        return ids;\n    }, [focusedTableId, tableById]);\n\n    // Determine which leaf table's thread the focused table belongs to\n    let focusedThreadLeafId: string | undefined = useMemo(() => {\n        if (!focusedTableId) return undefined;\n        // Check if focused table IS a leaf table\n        let directLeaf = leafTables.find(lt => lt.id === focusedTableId);\n        if (directLeaf) return directLeaf.id;\n        // Otherwise, find the leaf table whose ancestor chain includes the focused table\n        for (const lt of leafTables) {\n            const triggers = getCachedTriggers(lt);\n            const chainIds = [...triggers.map(t => t.tableId), lt.id];\n            if (chainIds.includes(focusedTableId)) {\n                return lt.id;\n            }\n        }\n        return undefined;\n    }, [focusedTableId, leafTables, tables]);\n\n    let hasContent = leafTables.length > 0 || tables.length > 0;\n\n    // Collect all tables (including derived ones) for the workspace panel.\n    let baseTables = tables;\n    // Threaded tables: leaf tables that have a derivation chain\n    let threadedTables = leafTables.filter(lt => {\n        const triggers = getTriggers(lt, tables);\n        return triggers.length + 1 > 1;\n    });\n\n    // Build thread entries and their estimated heights for layout\n    type ThreadEntry = { key: string; groupId: string; leafTables: DictTable[]; threadIdx: number; threadLabel?: string; isSplitThread?: boolean; usedTableIds?: string[]; hideLabel?: boolean };\n    let allThreadEntries: ThreadEntry[] = [];\n    let allThreadHeights: number[] = [];\n\n    // Track which leaf tables are promoted (split) vs real leaves\n    const extraLeafIds = new Set(extraLeaves.map(t => t.id));\n\n    // Track which table IDs have been claimed by earlier threads\n    let claimedTableIds = new Set<string>();\n\n    // Hanging tables: source tables with no children — displayed as a group before thread 1\n    let hangingTables = leafTables.filter(lt => !lt.derive);\n    if (hangingTables.length > 0) {\n        hangingTables.forEach(lt => claimedTableIds.add(lt.id));\n        let hangingChartCount = hangingTables.reduce((sum, lt) => sum + chartElements.filter(ce => ce.tableId === lt.id).length, 0);\n        allThreadEntries.push({\n            key: 'hanging-tables',\n            groupId: 'hanging-tables',\n            leafTables: hangingTables,\n            threadIdx: -1,\n            hideLabel: true,\n        });\n        allThreadHeights.push(estimateThreadHeight(hangingTables.length, 0, hangingChartCount));\n    }\n\n    // Regular threads: one per threaded leaf table\n    // Assign sub-thread numbering: split (promoted) threads get the main index (1, 2, ...),\n    // real leaf tables whose chain was split get a sub-index (1.1, 1.2, ...)\n    let realThreadIdx = 0; // counter for main threads\n    // Pre-scan: find which real leaf each extra leaf belongs to\n    let extraLeafToRealLeaf = new Map<string, string>();\n    // Also build reverse: real leaf -> list of extra leaves in its chain\n    let realLeafToExtraLeaves = new Map<string, string[]>();\n    for (const lt of threadedTables) {\n        if (!extraLeafIds.has(lt.id)) {\n            // This is a real leaf — find all extra leaves that are ancestors of it\n            const triggers = getCachedTriggers(lt);\n            const chainIds = triggers.map(t => t.tableId);\n            const myExtras: string[] = [];\n            for (const extraId of extraLeafIds) {\n                if (chainIds.includes(extraId)) {\n                    if (!extraLeafToRealLeaf.has(extraId)) {\n                        extraLeafToRealLeaf.set(extraId, lt.id);\n                    }\n                    myExtras.push(extraId);\n                }\n            }\n            if (myExtras.length > 0) {\n                realLeafToExtraLeaves.set(lt.id, myExtras);\n            }\n        }\n    }\n    // Map from extra leaf id -> its assigned main thread index\n    let extraLeafToThreadIdx = new Map<string, number>();\n    // Track sub-index counters per chain (keyed by first extra leaf's thread idx)\n    let subThreadCounters = new Map<number, number>();\n\n    threadedTables.forEach((lt, i) => {\n        const triggers = getCachedTriggers(lt);\n\n        // Collect all table IDs in this thread's chain\n        let threadTableIds = new Set<string>();\n        triggers.forEach(t => threadTableIds.add(t.tableId));\n        threadTableIds.add(lt.id);\n\n        // Only new (unclaimed) tables contribute to this thread's height\n        let newTableIds = [...threadTableIds].filter(id => !claimedTableIds.has(id));\n\n        let newTriggerCount = triggers.filter(t => newTableIds.includes(t.resultTableId)).length;\n        let chartCount = newTableIds.reduce((sum, tid) => sum + chartElements.filter(ce => ce.tableId === tid).length, 0);\n\n        // +1 table and +1 trigger for the leaf table itself\n        let totalTables = newTableIds.length + 1;\n        let totalTriggers = newTriggerCount + 1;\n\n        // Claim this thread's tables for subsequent threads\n        threadTableIds.forEach(id => claimedTableIds.add(id));\n\n        // Determine thread label and whether this is a split sub-thread\n        const isSplit = extraLeafIds.has(lt.id);\n        // A real leaf is a \"continuation\" if it has extra leaves in its chain\n        const isContinuation = !isSplit && realLeafToExtraLeaves.has(lt.id);\n        let threadLabel: string;\n        let threadIdxForEntry: number;\n\n        if (isSplit) {\n            // Promoted intermediate — gets a main thread index\n            realThreadIdx++;\n            extraLeafToThreadIdx.set(lt.id, realThreadIdx);\n            threadLabel = `thread - ${realThreadIdx}`;\n            threadIdxForEntry = realThreadIdx - 1;\n        } else if (isContinuation) {\n            // Real leaf whose chain was split — gets sub-index under the last extra leaf's index\n            const myExtras = realLeafToExtraLeaves.get(lt.id) || [];\n            // Use the last extra leaf's thread index (the one closest to this leaf in the chain)\n            const lastExtra = myExtras[myExtras.length - 1];\n            const parentIdx = extraLeafToThreadIdx.get(lastExtra) ?? realThreadIdx;\n            const subIdx = (subThreadCounters.get(parentIdx) || 0) + 1;\n            subThreadCounters.set(parentIdx, subIdx);\n            threadLabel = `thread - ${parentIdx}.${subIdx}`;\n            threadIdxForEntry = i;\n        } else {\n            // Normal thread (no splitting involved)\n            realThreadIdx++;\n            threadLabel = `thread - ${realThreadIdx}`;\n            threadIdxForEntry = realThreadIdx - 1;\n        }\n\n        allThreadEntries.push({\n            key: `thread-${lt.id}-${i}`,\n            groupId: lt.id,\n            leafTables: [lt],\n            threadIdx: threadIdxForEntry,\n            threadLabel,\n            isSplitThread: isContinuation,\n        });\n        allThreadHeights.push(estimateThreadHeight(totalTables, totalTriggers, chartCount));\n    });\n\n    // Pre-compute usedTableIds for each entry (avoids quadratic recomputation in renderThreadEntry)\n    {\n        let accumulated: string[] = [];\n        for (const entry of allThreadEntries) {\n            entry.usedTableIds = [...accumulated];\n            for (const lt of entry.leafTables) {\n                const triggers = getCachedTriggers(lt);\n                accumulated.push(...triggers.map(t => t.tableId), lt.id);\n            }\n        }\n    }\n\n    // Pick the best column layout: dynamically based on container width.\n    const availableHeight = containerRef.current?.clientHeight ?? 600;\n    const hasMultipleThreads = allThreadEntries.length > 1;\n\n    const CARD_GAP = 12; // padding + spacing between cards in a column\n    const PANEL_PADDING = 16;\n    const CARD_WIDTH = 220;\n    const COLUMN_WIDTH = CARD_WIDTH + CARD_GAP;\n\n    // Determine how many columns fit in the available container width (1-3)\n    const fittableColumns = Math.max(1, Math.min(3, Math.floor((containerWidth - PANEL_PADDING) / COLUMN_WIDTH)));\n    const MAX_COLUMNS = fittableColumns;\n    const columnLayout: number[][] = chooseBestColumnLayout(\n        allThreadHeights, MAX_COLUMNS, availableHeight, /* flexOrder */ false,\n        /* minColumns */ Math.min(fittableColumns, hasMultipleThreads ? 2 : 1)\n    );\n    const actualColumns = columnLayout.length || 1;\n\n    let renderThreadEntry = (entry: ThreadEntry) => {\n        let usedTableIds = entry.usedTableIds || [];\n\n        return <SingleThreadGroupView\n            key={entry.key}\n            scrollRef={scrollRef}\n            threadIdx={entry.threadIdx}\n            threadLabel={entry.threadLabel}\n            isSplitThread={entry.isSplitThread}\n            hideLabel={entry.hideLabel}\n            leafTables={entry.leafTables}\n            chartElements={chartElements}\n            usedIntermediateTableIds={usedTableIds}\n            globalHighlightedTableIds={globalHighlightedTableIds}\n            focusedThreadLeafId={focusedThreadLeafId}\n            chatboxFocused={chatboxFocused}\n            sx={{\n                backgroundColor: 'white',\n                borderRadius: radius.md,\n                padding: 1,\n                my: 0.5,\n                flex: 'none',\n                display: 'flex',\n                flexDirection: 'column',\n                height: 'fit-content',\n                width: CARD_WIDTH,\n                transition: transition.fast,\n            }} />;\n    };\n\n    // Let content fill available width; column count driven by container size\n    const panelWidth = '100%';\n\n    let view = hasContent ? (\n        <Box sx={{ \n            overflowY: 'auto',\n            overflowX: 'hidden',\n            position: 'relative',\n            direction: 'ltr',\n            height: 'calc(100% - 16px)',\n            width: panelWidth,\n        }}>\n            <Box sx={{\n                display: 'flex',\n                flexDirection: 'row',\n                flexWrap: 'nowrap',\n                justifyContent: 'center',\n                gap: `${CARD_GAP}px`,\n                py: 1,\n                pb: chatboxFocused ? '180px' : 1,\n                pl: `${PANEL_PADDING / 2}px`,\n                pr: 0,\n            }}>\n                {/* First column: workspace panel + first batch of threads */}\n                <Box key=\"thread-column-0\" sx={{\n                    display: 'flex',\n                    flexDirection: 'column',\n                    alignItems: 'center',\n                    gap: 0,\n                    width: CARD_WIDTH,\n                    flexShrink: 0,\n                }}>\n                    {(columnLayout[0] || []).map((idx: number) => {\n                        const entry = allThreadEntries[idx];\n                        return entry ? renderThreadEntry(entry) : null;\n                    })}\n                </Box>\n                {/* Remaining columns */}\n                {columnLayout.slice(1).map((columnIndices: number[], colIdx: number) => (\n                    <Box key={`thread-column-${colIdx + 1}`} sx={{\n                        display: 'flex',\n                        flexDirection: 'column',\n                        alignItems: 'center',\n                        gap: 0,\n                        width: CARD_WIDTH,\n                        flexShrink: 0,\n                    }}>\n                        {columnIndices.map((idx: number) => {\n                            const entry = allThreadEntries[idx];\n                            return entry ? renderThreadEntry(entry) : null;\n                        })}\n                    </Box>\n                ))}\n            </Box>\n        </Box>\n    ) : null;\n\n    return (\n        <Box className=\"data-thread\" sx={{ ...sx, position: 'relative', display: 'flex', flexDirection: 'column' }}>\n            {/* Mode toggle button — floats on top-right corner */}\n            <Box sx={{ position: 'absolute', top: 4, right: 16, zIndex: 5 }}>\n                <Tooltip title={chatMode ? 'Switch to thread view' : 'Switch to chat view'}>\n                    <IconButton\n                        size=\"small\"\n                        onClick={() => setChatMode(m => !m)}\n                        sx={{ p: 0.5, color: theme.palette.text.secondary,\n                            backgroundColor: alpha(theme.palette.action.selected, 0.04),\n                            borderRadius: '6px',\n                            '&:hover': { color: theme.palette.primary.main, backgroundColor: alpha(theme.palette.primary.main, 0.08) } }}\n                    >\n                        {chatMode ? <AccountTreeIcon sx={{ fontSize: 18 }} /> : <ForumOutlinedIcon sx={{ fontSize: 18 }} />}\n                    </IconButton>\n                </Tooltip>\n            </Box>\n            {chatMode ? (\n                <Box ref={containerRef} sx={{ flex: 1, minHeight: 0, overflow: 'hidden', display: 'flex', flexDirection: 'column' }}>\n                    <ChatThreadView />\n                </Box>\n            ) : (\n                <Box ref={containerRef} sx={{\n                        overflow: 'hidden', \n                        direction: 'rtl', \n                        display: 'block', \n                        flex: 1,\n                        minHeight: 0,\n                    }}>\n                    {view}\n                </Box>\n            )}\n            <SimpleChartRecBox />\n        </Box>\n    );\n}\n\n"
  },
  {
    "path": "src/views/DataThreadCards.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { memo } from 'react';\n\nimport {\n    Box,\n    Typography,\n    Stack,\n    Card,\n    IconButton,\n    Tooltip,\n    ButtonGroup,\n    useTheme,\n} from '@mui/material';\n\nimport { dfActions } from '../app/dfSlice';\nimport { Chart, DictTable, Trigger } from \"../components/ComponentType\";\n\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { AnchorIcon } from '../icons';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport AddchartIcon from '@mui/icons-material/Addchart';\n\nimport { TriggerCard } from './EncodingShelfCard';\nimport { ComponentBorderStyle, shadow, transition } from '../app/tokens';\n\n\n// ─── Chart Card ──────────────────────────────────────────────────────────────\n\nexport let buildChartCard = (\n    chartElement: { tableId: string, chartId: string, element: any },\n    focusedChartId?: string,\n) => {\n    let selectedClassName = focusedChartId == chartElement.chartId ? 'selected-card' : '';\n    return <Card className={`data-thread-card ${selectedClassName}`} elevation={0}\n        sx={{\n            width: 'fit-content',\n            display: 'flex',\n            position: 'relative',\n            border: 'none',\n            borderRadius: '6px',\n            backgroundColor: 'white',\n            px: 1,\n        }}>\n        {chartElement.element}\n    </Card>\n}\n\n// ─── Trigger Card Wrapper ────────────────────────────────────────────────────\n\nexport let buildTriggerCard = (\n    trigger: Trigger,\n    focusedChartId: string | undefined,\n    highlighted: boolean = false,\n) => {\n    let selectedClassName = trigger.chart?.id == focusedChartId ? 'selected-card' : '';\n    \n    let triggerCard = <div key={'thread-card-trigger-box'}>\n        <Box sx={{ flex: 1 }} >\n            <TriggerCard className={selectedClassName} trigger={trigger} \n                hideFields={trigger.instruction != \"\"} \n                highlighted={highlighted}\n                sx={{\n                    '& .MuiBox-root': { mx: 0.5, my: 0.25 },\n                    '& .MuiSvgIcon-root': { width: '12px', height: '12px' },\n                }}\n            />\n        </Box>\n    </div>;\n\n    return <Box sx={{ display: 'flex', flexDirection: 'column' }} key={`trigger-card-${trigger.chart?.id}`}>\n        {triggerCard}\n    </Box>;\n}\n\n// ─── Table Card ──────────────────────────────────────────────────────────────\n\nexport interface BuildTableCardProps {\n    tableId: string;\n    tables: DictTable[];\n    charts: Chart[];\n    chartElements: { tableId: string, chartId: string, element: any }[];\n    usedIntermediateTableIds: string[];\n    highlightedTableIds: string[];\n    focusedTableId: string | undefined;\n    focusedChartId: string | undefined;\n    focusedChart: Chart | undefined;\n    parentTable: DictTable | undefined;\n    tableIdList: string[];\n    collapsed: boolean;\n    scrollRef: any;\n    dispatch: any;\n    handleOpenTableMenu: (table: DictTable, anchorEl: HTMLElement) => void;\n    primaryBgColor: string | undefined;\n}\n\nexport let buildTableCard = (props: BuildTableCardProps) => {\n    const {\n        tableId, tables, charts, chartElements, usedIntermediateTableIds,\n        highlightedTableIds, focusedTableId, focusedChartId, focusedChart,\n        parentTable, tableIdList, collapsed, scrollRef, dispatch,\n        handleOpenTableMenu, primaryBgColor,\n    } = props;\n\n    if (parentTable && tableId == parentTable.id && parentTable.anchored && tableIdList.length > 1) {\n        let table = tables.find(t => t.id == tableId);\n        return <Typography sx={{ background: 'transparent', }} >\n            <Box \n                sx={{ \n                    margin: '0px', \n                    width: 'fit-content',\n                    display: 'flex', \n                    cursor: 'pointer',\n                    padding: '2px 4px',\n                    borderRadius: '4px',\n                    '&:hover': {\n                        backgroundColor: 'rgba(0, 0, 0, 0.04)',\n                        boxShadow: shadow.sm\n                    }\n                }}\n                onClick={(event) => {\n                    event.stopPropagation();\n                    dispatch(dfActions.setFocused({ type: 'table', tableId }));\n                }}\n            >\n                <Stack direction=\"row\" sx={{ marginLeft: 0.25, marginRight: 'auto', fontSize: 12 }} alignItems=\"center\" gap={\"2px\"}>\n                    <AnchorIcon sx={{ fontSize: 14, color: 'rgba(0,0,0,0.5)' }} />\n                    <Typography fontSize=\"inherit\" sx={{\n                        textAlign: 'center',\n                        color: 'rgba(0,0,0,0.7)', \n                        maxWidth: '100px',\n                        wordWrap: 'break-word',\n                        whiteSpace: 'normal'\n                    }}>\n                        {table?.displayId || tableId}\n                    </Typography>\n                </Stack>\n            </Box>\n        </Typography>\n    }\n\n    // filter charts relevant to this\n    let relevantCharts = chartElements.filter(ce => ce.tableId == tableId && !usedIntermediateTableIds.includes(tableId));\n\n    let table = tables.find(t => t.id == tableId);\n\n    let selectedClassName = tableId == focusedTableId ? 'selected-card' : '';\n\n    let collapsedProps = collapsed ? { width: '50%', \"& canvas\": { width: 60, maxHeight: 50 } } : { width: '100%' }\n\n    let releventChartElements = relevantCharts.map((ce, j) =>\n        <Box key={`relevant-chart-${ce.chartId}`}\n            sx={{ \n                display: 'flex', padding: 0, ...collapsedProps }}>\n            {buildChartCard(ce, focusedChartId)}\n        </Box>)\n\n    const isHighlighted = highlightedTableIds.includes(tableId);\n\n    let regularTableBox = <Box key={`regular-table-box-${tableId}`} ref={relevantCharts.some(c => c.chartId == focusedChartId) ? scrollRef : null} \n        sx={{ padding: '0px' }}>\n        <Card className={`data-thread-card ${selectedClassName}`} elevation={0}\n            sx={{ width: '100%', \n                backgroundColor: primaryBgColor,\n                ...ComponentBorderStyle,\n                ...(isHighlighted ? { borderLeft: '2px solid', borderLeftColor: 'primary.main' } : {}),\n                borderRadius: '6px',\n                }}\n            onClick={() => {\n                dispatch(dfActions.setFocused({ type: 'table', tableId }));\n            }}>\n            <Box sx={{ margin: '0px', display: 'flex', minWidth: 0 }}>\n                <Stack direction=\"row\" sx={{ marginLeft: 0.5, marginRight: 'auto', fontSize: 12, flex: 1, minWidth: 0, overflow: 'hidden' }} alignItems=\"center\" gap={\"2px\"}>\n                    <Box sx={{ margin: '4px 8px 4px 2px', display: 'flex', alignItems: 'center', minWidth: 0, flex: 1 }}>\n                        <Typography fontSize=\"inherit\" sx={{\n                            color: 'text.primary', \n                            fontWeight: 500,\n                            display: '-webkit-box',\n                            WebkitLineClamp: 2,\n                            WebkitBoxOrient: 'vertical',\n                            overflow: 'hidden',\n                            wordBreak: 'break-all',\n                        }}>{table?.displayId || tableId}</Typography>\n                    </Box>\n                </Stack>\n                <ButtonGroup aria-label=\"Basic button group\" variant=\"text\" sx={{ textAlign: 'end', margin: \"auto 2px auto auto\", flexShrink: 0 }}>\n                    <Tooltip key=\"create-chart-btn-tooltip\" title=\"create chart\">\n                        <IconButton className=\"create-chart-btn\" color=\"primary\" aria-label=\"create chart\" size=\"small\" sx={{ padding: 0.25, '&:hover': {\n                            transform: 'scale(1.2)',\n                            transition: transition.fast\n                            } }}\n                            onClick={(event) => {\n                                event.stopPropagation();\n                                dispatch(dfActions.setFocused({ type: 'table', tableId }));\n                            }}\n                        >\n                            <AddchartIcon fontSize=\"small\" sx={{ fontSize: 16 }} />\n                        </IconButton>\n                    </Tooltip>\n                    <Tooltip key=\"more-options-btn-tooltip\" title=\"more options\">\n                        <IconButton className=\"more-options-btn\" color=\"primary\" aria-label=\"more options\" size=\"small\" sx={{ padding: 0.25, '&:hover': {\n                            transform: 'scale(1.2)',\n                            transition: transition.fast\n                            } }}\n                            onClick={(event) => {\n                                event.stopPropagation();\n                                handleOpenTableMenu(table!, event.currentTarget);\n                            }}\n                        >\n                            <MoreVertIcon fontSize=\"small\" sx={{ fontSize: 16 }} />\n                        </IconButton>\n                    </Tooltip>\n\n                </ButtonGroup>\n            </Box>\n        </Card>\n    </Box>\n\n    return [\n        regularTableBox,\n        ...releventChartElements,\n    ]\n}\n"
  },
  {
    "path": "src/views/DataView.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { FC, useEffect, useMemo } from 'react';\n\nimport _ from 'lodash';\n\nimport { Typography, Box, Link, Breadcrumbs, useTheme, Fade } from '@mui/material';\nimport { alpha } from '@mui/material/styles';\n\nimport '../scss/DataView.scss';\n\nimport { DictTable } from '../components/ComponentType';\nimport { DataFormulatorState, dfActions, dfSelectors, FocusedId } from '../app/dfSlice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Type } from '../data/types';\nimport { SelectableDataGrid } from './SelectableDataGrid';\n\nexport interface FreeDataViewProps {\n}\n\nexport const FreeDataViewFC: FC<FreeDataViewProps> = function DataView() {\n\n    const dispatch = useDispatch();\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    \n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n    const focusedId = useSelector((state: DataFormulatorState) => state.focusedId);\n    const allCharts = useSelector(dfSelectors.getAllCharts);\n\n    // Derive the table to display based on focusedId\n    const focusedTableId = React.useMemo(() => {\n        if (!focusedId) return undefined;\n        if (focusedId.type === 'table') return focusedId.tableId;\n        // Chart focused: show the chart's backing table\n        const chartId = focusedId.chartId;\n        const chart = allCharts.find(c => c.id === chartId);\n        return chart?.tableRef;\n    }, [focusedId, allCharts]);\n\n    useEffect(() => {\n        if(focusedId == undefined && tables.length > 0) {\n            dispatch(dfActions.setFocused({ type: 'table', tableId: tables[0].id }))\n        }\n    }, [tables])\n\n    // given a table render the table\n    let renderTableBody = (targetTable: DictTable | undefined) => {\n\n        let rowData = [];\n        if (targetTable) {\n            if (targetTable.virtual) {\n                rowData = targetTable.rows;\n            } else {\n                rowData = targetTable.rows;\n                rowData = rowData.map((r: any, i: number) => ({ ...r, \"#rowId\": i }));\n            }\n        }\n\n        // Randomly sample up to 29 rows for column width calculation\n        const sampleSize = Math.min(29, rowData.length);\n        const sampledRows = _.sampleSize(rowData, sampleSize);\n        \n        // Calculate appropriate column widths based on content\n        const calculateColumnWidth = (name: string) => {\n            if (name === \"#rowId\") return { minWidth: 10, width: 40 }; // Default for row ID column\n            \n            // Get all values for this column from sampled rows\n            const values = sampledRows.map(row => String(row[name] || ''));\n            \n            // Estimate width based on content length (simple approach)\n            const avgLength = values.length > 0 \n                ? values.reduce((sum, val) => sum + val.length, 0) / values.length \n                : 0;\n                \n            // Adjust width based on average content length and column name length\n            const nameSegments = name.split(/[\\s-]+/); // Split by whitespace or hyphen\n            const maxNameSegmentLength = nameSegments.length > 0 \n                ? nameSegments.reduce((max, segment) => Math.max(max, segment.length), 0)\n                : name.length;\n            const contentLength = Math.max(maxNameSegmentLength, avgLength);\n            const minWidth = Math.max(60, contentLength * 8 > 240 ? 240 : contentLength * 8) + 50; // 8px per character with 50px padding\n            const width = minWidth;\n            \n            return { minWidth, width };\n        };\n\n        let colDefs = targetTable ? targetTable.names.map((name, i) => {\n            const { minWidth, width } = calculateColumnWidth(name);\n            return {\n                id: name, \n                label: name, \n                minWidth, \n                width, \n                align: undefined, \n                format: (value: any) => <Typography fontSize=\"inherit\">{`${value}`}</Typography>, \n                dataType: targetTable?.metadata[name].type as Type,\n                source: conceptShelfItems.find(f => f.name == name)?.source || \"original\", \n            };\n        }) : [];\n\n        if (colDefs && !targetTable?.virtual) {\n            colDefs = [{\n                id: \"#rowId\", label: \"#\", minWidth: 10, align: undefined, width: 40,\n                format: (value: any) => <Typography fontSize=\"inherit\" color=\"rgba(0,0,0,0.65)\">{value}</Typography>, \n                dataType: Type.Number,\n                source: \"original\", \n            }, ...colDefs]\n        }\n\n        return  <Fade in={true} timeout={600} key={targetTable?.id}>\n            <Box sx={{height: '100%'}}>\n                <SelectableDataGrid\n                    tableId={targetTable?.id || \"\"}\n                    tableName={targetTable?.displayId || targetTable?.id || \"table\"} \n                    rows={rowData} \n                    columnDefs={colDefs}\n                    rowCount={targetTable?.virtual?.rowCount || targetTable?.rows.length || 0}\n                    virtual={targetTable?.virtual ? true : false}\n                />\n            </Box>\n        </Fade>\n    }\n\n    return (\n        <Box sx={{height: \"100%\", display: \"flex\", flexDirection: \"column\", background: \"rgba(0,0,0,0.02)\"}}>\n            {renderTableBody(tables.find(t => t.id == focusedTableId))}\n        </Box>\n    );\n}"
  },
  {
    "path": "src/views/EncodingBox.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { FC, useEffect, useState } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { DataFormulatorState, dfActions, dfSelectors } from '../app/dfSlice';\nimport { LinearProgress, styled, TextField, Tooltip } from '@mui/material';\n\nimport { useTheme } from '@mui/material/styles';\nimport { alpha } from \"@mui/material\";\n\nimport {\n    Chip,\n    Box,\n    Typography,\n    Button,\n    FormControl,\n    Select,\n    MenuItem,\n    Card,\n    IconButton,\n    FormLabel,\n    RadioGroup,\n    Radio,\n    FormControlLabel,\n    CardContent,\n    ClickAwayListener,\n    Popper,\n} from '@mui/material';\n\nimport Autocomplete, { createFilterOptions } from '@mui/material/Autocomplete';\n\nimport { useDrag, useDrop } from 'react-dnd'\n\nimport React from 'react';\n\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport BarChartIcon from '@mui/icons-material/BarChart';\nimport CategoryIcon from '@mui/icons-material/Category';\nimport CalendarMonthIcon from '@mui/icons-material/CalendarMonth';\nimport QuestionMarkIcon from '@mui/icons-material/QuestionMark';\n\nimport { FieldItem, Channel, EncodingItem, AggrOp, Chart, EncodingDropResult } from \"../components/ComponentType\";\n\nimport _ from 'lodash';\n\nimport '../scss/EncodingShelf.scss';\nimport AnimateHeight from 'react-animate-height';\nimport { getIconFromDtype, getIconFromType, groupConceptItems } from './ViewUtils';\nimport { getUrls, fetchWithIdentity } from '../app/utils';\nimport { Type } from '../data/types';\n\n\n\nlet getChannelDisplay = (channel: Channel) => {\n    if (channel == \"x\") {\n        return \"x-axis\";\n    } else if (channel == \"y\") {\n        return \"y-axis\";\n    }\n    return channel;\n}\n\nexport interface LittleConceptCardProps {\n    channel: Channel,\n    field: FieldItem,\n    encoding: EncodingItem,\n    handleUnbind: () => void,\n    tableMetadata: {[key: string]: {type: Type, semanticType: string, levels?: any[]}}\n}\n\nexport const LittleConceptCard: FC<LittleConceptCardProps> = function LittleConceptCard({ channel, field, encoding, handleUnbind, tableMetadata }) {\n    // concept cards are draggable cards that can be dropped into encoding shelf\n\n    let theme = useTheme();\n\n    const [{ isDragging }, drag] = useDrag(() => ({\n        type: \"concept-card\",\n        item: { type: \"concept-card\", channel: channel, fieldID: field.id, source: \"encodingShelf\", encoding: encoding },\n        collect: (monitor) => ({\n            isDragging: monitor.isDragging(),\n            handlerId: monitor.getHandlerId(),\n        })\n    }));\n\n    const opacity = isDragging ? 0.4 : 1;\n    const cursorStyle = isDragging ? \"grabbing\" : \"grab\";\n\n    let fieldClass = \"encoding-active-item \";\n\n    let backgroundColor = alpha(theme.palette.primary.main, 0.05);\n\n    if (field.source == \"original\") {\n        backgroundColor = alpha(theme.palette.primary.main, 0.05);\n    } else if (field.source == \"custom\") {\n        backgroundColor = alpha(theme.palette.custom.main, 0.05);\n    }\n\n    return (\n        <Chip\n            ref={drag}\n            className={`${fieldClass}`}\n            color={'default'}\n            label={field.name}\n            size=\"small\"\n            sx={{\n                backgroundColor,\n                opacity: opacity,\n                cursor: cursorStyle,\n                \".MuiChip-label\":\n                    { /*width: \"calc(100% - 36px)\", maxWidth: \"94px\"*/ flexGrow: 1, flexShrink: 1, width: 0 }, \".MuiSvgIcon-root\": { fontSize: \"inherit\" }\n            }}\n            variant=\"filled\"\n            onClick={(event) => {}}\n            onDelete={handleUnbind}\n            icon={getIconFromType(tableMetadata[field.name]?.type || Type.Auto)}\n        />\n    )\n}\n\n// The property of an encoding box\nexport interface EncodingBoxProps {\n    channel: Channel;\n    chartId: string;\n    tableId: string;\n}\n\n// the encoding boxes, allows \nexport const EncodingBox: FC<EncodingBoxProps> = function EncodingBox({ channel, chartId, tableId }) {\n    let theme = useTheme();\n\n    // use tables for infer domains\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n\n    let allCharts = useSelector(dfSelectors.getAllCharts);\n    let activeModel = useSelector(dfSelectors.getActiveModel);\n    \n    let chart = allCharts.find(c => c.id == chartId) as Chart;\n    let activeTable = tables.find(t => t.id == tableId);\n    \n    let encoding = chart.encodingMap[channel]; \n\n    let handleSwapEncodingField = (channel1: Channel, channel2: Channel) => {\n        dispatch(dfActions.swapChartEncoding({chartId, channel1, channel2}))\n    }\n    \n    let handleResetEncoding = () => {\n        dispatch(dfActions.updateChartEncoding({chartId, channel, encoding: { }}));\n    }\n\n    // updating a property of the encoding\n    let updateEncProp = (prop: keyof EncodingItem, value: any) => {\n        dispatch(dfActions.updateChartEncodingProp({chartId, channel, prop: prop as string, value}));\n    }\n\n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n\n    let field = conceptShelfItems.find((x: FieldItem) => x.id == encoding.fieldID);\n    let fieldMetadata = field?.name && activeTable?.metadata[field?.name] ? activeTable?.metadata[field?.name] : undefined;\n\n    let [autoSortResult, setAutoSortResult] = useState<any[] | undefined>(fieldMetadata?.levels);\n    let [autoSortInferRunning, setAutoSortInferRunning] = useState<boolean>(false);\n\n    const dispatch = useDispatch();\n\n    useEffect(() => { \n        if (field?.name && activeTable?.metadata[field?.name]) {\n            let levels = activeTable?.metadata[field?.name].levels;\n            setAutoSortResult(levels);\n\n            if (!chart.chartType.includes(\"Area\") && levels && levels.length > 0) {\n                updateEncProp('sortBy', JSON.stringify(levels));\n            }\n        }\n    }, [encoding.fieldID, activeTable])\n\n    // make this a drop element for concepts\n    const [{ canDrop, isOver }, drop] = useDrop(() => ({\n        accept: [\"concept-card\", \"operator-card\"], // accepts only concept card items\n        drop: (item: any): EncodingDropResult => {\n            if (item.type === \"concept-card\") {\n                if (item.source === \"conceptShelf\") {\n                    handleResetEncoding();\n                    updateEncProp('fieldID', item.fieldID);\n                } else if (item.source === \"encodingShelf\") {\n                    handleSwapEncodingField(channel, item.channel);\n                } else {\n                    console.log(\"field error\")\n                }\n            }\n\n            if (item.type === 'operator-card') {\n                dispatch(dfActions.updateChartEncodingProp({chartId, channel, prop: 'aggregate', value: item.operator as AggrOp}));\n            }\n\n            return { channel: channel }\n        },\n        collect: (monitor) => ({\n            isOver: monitor.isOver(),\n            canDrop: monitor.canDrop(),\n        }),\n    }), [chartId, encoding]); // add dependency\n\n    //useEffect(() => {resetConfigOptions()}, [encoding]);\n\n    // items that control the editor panel popover\n    const [editMode, setEditMode] = React.useState<boolean>(false);\n\n\n    const isActive = canDrop && isOver;\n    let backgroundColor = '';\n    if (isActive) {\n        backgroundColor = 'rgba(204, 239, 255, 0.5)';\n    } else if (canDrop) {\n        backgroundColor = 'rgba(255, 251, 204, 0.5)';\n    }\n\n    let fieldComponent = field === undefined ? \"\" : (\n        <LittleConceptCard channel={channel} key={`${channel}-${field.name}`} \n            tableMetadata={activeTable?.metadata || {}}\n            field={field} encoding={encoding} \n            handleUnbind={() => {\n            handleResetEncoding();\n        }} />\n    )\n\n    // define anchor open\n    let channelDisplay = getChannelDisplay(channel);\n\n    let radioLabel = (label: string | React.ReactNode, value: any, key: string, width: number = 80, disabled: boolean = false, tooltip: string = \"\") => {\n        let comp = <FormControlLabel sx={{ width: width, margin: 0 }} key={key}\n                    disabled={disabled}\n                    value={value} control={<Radio size=\"small\" sx={{ padding: \"4px\" }} />} label={<Box sx={{display: 'flex', alignItems: 'center', gap: '4px'}}>\n                        {label}\n                </Box>} />\n        if (tooltip != \"\") {\n            comp = <Tooltip key={`${key}-tooltip`} title={tooltip} arrow slotProps={{\n                tooltip: {\n                    sx: { bgcolor: 'rgba(255, 255, 255, 0.95)', color: 'rgba(0,0,0,0.95)', border: '1px solid darkgray' },\n                },\n            }}>{comp}</Tooltip>\n        }\n        return comp;\n    }\n\n    \n\n\n    let dataTypeOpt = [\n        <FormLabel key={`enc-box-${channel}-data-type-label`} sx={{ fontSize: \"inherit\" }} id=\"data-type-option-radio-buttons-group\" >Data Type</FormLabel>,\n        <FormControl\n            key={`enc-box-${channel}-data-type-form-control`}\n            sx={{\n                paddingBottom: \"2px\", '& .MuiTypography-root': { fontSize: \"inherit\" }, flexDirection: \"row\",\n                '& .MuiFormLabel-root': { fontSize: \"inherit\" }\n            }}>\n            <RadioGroup\n                row\n                aria-labelledby=\"data-type-option-radio-buttons-group\"\n                name=\"data-type-option-radio-buttons-group\"\n                value={encoding.dtype || \"auto\"}\n                sx={{ width: 160 }}\n                onChange={(event) => { \n                    if (event.target.value == \"auto\") {\n                        updateEncProp(\"dtype\", undefined);\n                    } else {\n                        updateEncProp(\"dtype\", event.target.value as \"quantitative\" | \"qualitative\" | \"temporal\");\n                    }\n                }}\n            >\n                {radioLabel(getIconFromDtype(\"auto\"), \"auto\", `dtype-auto`, 40, false, \"auto\")}\n                {radioLabel(getIconFromDtype(\"quantitative\"), \"quantitative\", `dtype-quantitative`, 40, false, \"quantitative\")}\n                {radioLabel(getIconFromDtype(\"nominal\"), \"nominal\", `dtype-nominal`, 40, false, \"nominal\")}\n                {radioLabel(getIconFromDtype(\"temporal\"), \"temporal\", `dtype-temporal`, 40, false, \"temporal\")}\n            </RadioGroup>\n        </FormControl>\n    ];\n\n    let stackOpt: any[] = [];\n\n    let domainItems = (field && activeTable) ? activeTable.rows.map(row => row[field!.name]) : [];\n    domainItems = [...new Set(domainItems)];\n\n    let autoSortEnabled = field && fieldMetadata?.type == Type.String && domainItems.length < 200;\n\n    let autoSortFunction = () => {\n        let token = domainItems.map(x => String(x)).join(\"--\");\n        setAutoSortInferRunning(true);\n        let message = {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json', },\n            body: JSON.stringify({\n                token: token,\n                items: domainItems,\n                field: field?.name,\n                model: activeModel\n            }),\n        };\n\n        fetchWithIdentity(getUrls().SORT_DATA_URL, message)\n            .then((response) => response.json())\n            .then((data) => {\n                setAutoSortInferRunning(false);\n\n                if (data[\"status\"] == \"ok\") {\n                    if (data[\"token\"] == token) {\n                        let candidate = data[\"result\"][0];\n                        \n                        if (candidate['status'] == 'ok') {\n                            let sortRes = {values: candidate['content']['sorted_values'], reason: candidate['content']['reason']}\n                            setAutoSortResult(sortRes.values);\n                        }\n                    }\n                } else {\n                    // TODO: add warnings to show the user\n                    dispatch(dfActions.addMessages({\n                        \"timestamp\": Date.now(),\n                        \"component\": \"EncodingBox\",\n                        \"type\": \"error\",\n                        \"value\": \"unable to perform auto-sort.\"\n                    }));\n                    setAutoSortResult(undefined);\n                }\n            }).catch((error) => {\n                setAutoSortInferRunning(false);\n                setAutoSortResult(undefined);\n               \n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"component\": \"EncodingBox\",\n                    \"type\": \"error\",\n                    \"value\": \"unable to perform auto-sort due to server issue.\"\n                }));\n            });\n    }\n\n    let sortByOptions = [\n        radioLabel(\"auto\", \"auto\", `sort-by-auto`)\n    ]\n    // TODO: check sort options\n    if (channel == \"x\" && (fieldMetadata?.type == Type.String || fieldMetadata?.type == Type.Auto)) {\n        sortByOptions.push(radioLabel(\"x\", \"x\", `sort-x-by-x-ascending`, 80));\n        sortByOptions.push(radioLabel(\"y\", \"y\", `sort-x-by-y-ascending`, 80));\n        sortByOptions.push(radioLabel(\"color\", \"color\", `sort-x-by-color-ascending`, 80));\n    }\n    if (channel == \"y\" && (fieldMetadata?.type == Type.String || fieldMetadata?.type == Type.Auto)) {\n        sortByOptions.push(radioLabel(\"x\", \"x\", `sort-y-by-x-ascending`, 80));\n        sortByOptions.push(radioLabel(\"y\", \"y\", `sort-y-by-y-ascending`, 80));\n        sortByOptions.push(radioLabel(\"color\", \"color\", `sort-y-by-color-ascending`, 80));\n    }\n \n    if (autoSortEnabled) {\n        if (autoSortInferRunning) {\n            sortByOptions = [\n                ...sortByOptions,\n                <FormControlLabel sx={{ width: 180, margin: 0 }} key={\"auto-btn\"}\n                    disabled={autoSortInferRunning || !autoSortResult}\n                    value={JSON.stringify(autoSortResult)} control={<Radio size=\"small\" sx={{ padding: \"4px\" }} />}\n                    label={<LinearProgress color=\"primary\" sx={{ width: \"120px\", opacity: 0.4 }} />} />\n            ]\n        } else {\n            if (autoSortResult != undefined && autoSortResult.length > 0) {\n\n                let autoSortOptTitle = <Box>\n                        <Box>\n                            <Typography sx={{fontWeight: 'bold'}} component='span' fontSize='inherit'>Sort Order: </Typography> \n                             {autoSortResult.map(x => x ? x.toString() : 'null').join(\", \")}\n                        </Box>\n                    </Box>\n\n                let autoSortOpt = \n                    <Tooltip title={autoSortOptTitle} arrow componentsProps={{\n                        tooltip: {\n                          sx: {\n                            bgcolor: 'rgba(255, 255, 255, 0.95)',\n                            color: 'rgba(0,0,0,0.95)',\n                            border: '1px solid darkgray'\n                          },\n                        },\n                      }}>\n                        <Typography className=\"auto-sort-option-label\">\n                            {autoSortResult.map(x => x ? x.toString() : 'null').join(\", \")}\n                        </Typography>\n                    </Tooltip>;\n\n                sortByOptions = [\n                    ...sortByOptions,\n                    <FormControlLabel sx={{ width: 180, margin: 0 }} key={\"auto\"}\n                        disabled={autoSortInferRunning || !autoSortResult}\n                        value={JSON.stringify(autoSortResult)} control={<Radio size=\"small\" sx={{ padding: \"4px\" }} />}\n                        label={<Box sx={{width: '100%', display:'flex'}}>\n                                    {autoSortOpt}\n                                    <Tooltip title='rerun smart sort'>\n                                        <IconButton onClick={autoSortFunction} size='small' color='primary'>\n                                            <RefreshIcon />\n                                        </IconButton>\n                                    </Tooltip>\n                                </Box>} />\n                ]\n            } else {\n                sortByOptions = [\n                    ...sortByOptions,\n                    <FormControlLabel sx={{ width: 180, margin: 0 }} key={\"auto-btn\"}\n                        disabled={autoSortInferRunning || !autoSortResult}\n                        value={JSON.stringify(autoSortResult)} control={<Radio size=\"small\" sx={{ padding: \"4px\" }} />}\n                        label={<Button size=\"small\" variant=\"text\"\n                                    sx={{ textTransform: \"none\", padding: \"2px 4px\", marginLeft: \"0px\", minWidth: 0 }}\n                                    onClick={autoSortFunction}>infer smart sort order</Button>} />\n                ]\n            }\n        }\n    }\n\n    let sortByOpt = [\n        <FormLabel sx={{ fontSize: \"inherit\" }} key={`enc-box-${channel}-sort-label`} id=\"sort-option-radio-buttons-group\" >Sort By</FormLabel>,\n        <FormControl\n            key={`enc-box-${channel}-sort-form-control`}\n            sx={{\n                paddingBottom: \"4px\", '& .MuiTypography-root': { fontSize: \"inherit\" }, flexDirection: \"row\",\n                '& .MuiFormLabel-root': { fontSize: \"inherit\" }\n            }}>\n            <RadioGroup\n                row\n                aria-labelledby=\"sort-option-radio-buttons-group\"\n                name=\"sort-option-radio-buttons-group\"\n                value={encoding.sortBy ||  'auto'}\n                sx={{ width: 180 }}\n                onChange={(event) => { updateEncProp(\"sortBy\", event.target.value) }}\n            >\n                {sortByOptions}\n            </RadioGroup>\n        </FormControl>\n    ]\n\n    let sortOrderOpt = [\n        <FormLabel sx={{ fontSize: \"inherit\" }} key={`enc-box-${channel}-sort-order-label`} \n                   id=\"sort-option-radio-buttons-group\" >Sort Order</FormLabel>,\n        <FormControl\n            key={`enc-box-${channel}-sort-order-form-control`}\n            sx={{\n                paddingBottom: \"2px\", '& .MuiTypography-root': { fontSize: \"inherit\" }, flexDirection: \"row\",\n                '& .MuiFormLabel-root': { fontSize: \"inherit\" }\n            }}>\n            <RadioGroup\n                row\n                aria-labelledby=\"sort-option-radio-buttons-group\"\n                name=\"sort-option-radio-buttons-group\"\n                value={encoding.sortOrder || \"auto\"}\n                sx={{ width: 180 }}\n                onChange={(event) => { updateEncProp(\"sortOrder\", event.target.value) }}\n            >\n                {radioLabel(\"auto\", \"auto\", `sort-auto`, 60)}\n                {radioLabel(\"↑ asc\", \"ascending\", `sort-ascending`, 60)}\n                {radioLabel(\"↓ desc\", \"descending\", `sort-descending`, 60)}\n            </RadioGroup>\n        </FormControl>\n    ]\n    \n    let colorSchemeList = [\n        \"category10\",\n        \"category20\",\n        \"tableau10\",\n        \"blues\",\n        \"oranges\",\n        \"reds\",\n        \"greys\",\n        \"goldgreen\",\n        \"bluepurple\",\n        \"blueorange\",\n        \"redyellowblue\",\n        \"spectral\"\n    ]\n    let colorSchemeOpt = channel == \"color\" ? [\n            <FormLabel sx={{ fontSize: \"inherit\" }} key={`enc-box-${channel}-color-scheme-label`} id=\"scheme-option-radio-buttons-group\">Color scheme</FormLabel>,\n            <FormControl key=\"color-sel-form\" fullWidth size=\"small\" sx={{textAlign: \"initial\", fontSize: \"12px\"}}>\n                <Select\n                    labelId=\"color-scheme-select-label\"\n                    variant=\"standard\"\n                    id=\"color-scheme-select\"\n                    label=\"\"\n                    sx={{'& .MuiSelect-select': {fontSize: \"12px\", paddingLeft: '6px'}}}\n                    value={encoding.scheme || \"default\"}\n                    onChange={(event)=>{ updateEncProp(\"scheme\", event.target.value) }}\n                >\n                    <MenuItem value={\"default\"} key={\"color-scheme--1\"}><em>default</em></MenuItem>\n                    {colorSchemeList.map((t, i) => (\n                        <MenuItem value={t} key={`color-scheme-${i}`}>{t}</MenuItem>\n                    ))}\n                </Select>\n            </FormControl>\n    ] : []\n\n    let encodingConfigCard = (\n        <CardContent sx={{\n            display: \"flex\", '& svg': { fontSize: \"inherit\" }, '&:last-child': { pb: \"12px\", pt: \"12px\" },\n            margin: '0px 12px', padding: \"6px\", fontSize: \"12px\"\n        }} >\n            <Box sx={{margin: 'auto', display: \"flex\",  width: \"fit-content\", textAlign: \"center\", flexDirection: \"column\", alignItems: \"flex-start\" }}>\n                {dataTypeOpt}\n                {stackOpt}\n                {sortByOpt}\n                {sortOrderOpt}\n                {colorSchemeOpt}\n            </Box>\n        </CardContent>\n    )\n\n    let optBackgroundColor = alpha(theme.palette.secondary.main, 0.07);\n\n    let aggregateDisplay = encoding.aggregate ? (<Chip key=\"aggr-display\" className=\"encoding-prop-chip\"  \n        sx={{  backgroundColor: optBackgroundColor, width: field == undefined ? \"100%\" : \"auto\" }}\n        onDelete={() => updateEncProp(\"aggregate\", undefined)} color=\"default\" //deleteIcon={<RemoveIcon />}\n        label={encoding.aggregate == \"average\" ? \"avg\" : encoding.aggregate} size=\"small\" />) : \"\";\n    let normalizedDisplay = \"\";\n    \n    let handleSelectOption = (option: string) => {\n        if (conceptShelfItems.map(f => f.name).includes(option)) {\n            //console.log(`yah-haha: ${option}`);\n            updateEncProp(\"fieldID\", (conceptShelfItems.find(f => f.name == option) as FieldItem).id);\n        } else {\n            if (option == \"\") {\n                console.log(\"nothing happens\")\n            } else {\n                let newConept = {\n                    id: `concept-${Date.now()}`, name: option,\n                    source: \"custom\", tableRef: \"custom\",\n                } as FieldItem;\n                dispatch(dfActions.updateConceptItems(newConept));\n                updateEncProp(\"fieldID\", newConept.id);\n            }\n            \n        }\n    }\n\n\n    let conceptGroups = groupConceptItems(conceptShelfItems, tables);\n\n    let groupNames = [...new Set(conceptGroups.map(g => g.group))];\n    conceptGroups.sort((a, b) => {\n        if (groupNames.indexOf(a.group) < groupNames.indexOf(b.group)) {\n            return -1;\n        } else if (groupNames.indexOf(a.group) > groupNames.indexOf(b.group)) {\n            return 1;\n        } else {\n            return activeTable && activeTable.names.includes(a.field.name) && !activeTable.names.includes(b.field.name) ? -1 : 1;\n        }\n    })\n\n    // Smart Popper component that switches between bottom-end and top-end\n    const CustomPopper = (props: any) => {\n        return (\n            <Popper \n                {...props} \n                placement=\"bottom-end\"\n                modifiers={[\n                    {\n                        name: 'flip',\n                        enabled: true,\n                        options: {\n                            fallbackPlacements: ['top-end'], // Only flip to top-end\n                        },\n                    },\n                    {\n                        name: 'preventOverflow',\n                        enabled: true,\n                        options: {\n                            boundary: 'viewport',\n                            padding: 8,\n                        },\n                    },\n                    {\n                        name: 'offset',\n                        options: {\n                            offset: [0, 8], // [horizontal, vertical] offset\n                        },\n                    },\n                ]}\n                style={{\n                    zIndex: 1300, // Ensure it's above other elements\n                }}\n            />\n        );\n    };\n\n    let createConceptInputBox = <Autocomplete\n        key=\"concept-create-input-box\"\n        slots={{\n            popper: CustomPopper // Try changing to: CustomPopperCSS\n        }}\n        onChange={(event, value) => {\n            if (value != null) {\n                handleSelectOption(value)\n            }\n        }}\n        // value={tempValue}\n        filterOptions={(options, params) => {\n            const filtered = filter(options, params);\n            const { inputValue } = params;\n            // Suggest the creation of a new value\n            const isExisting = options.some((option) => inputValue === option);\n            if (!isExisting) {\n                return [`${inputValue}`, ...filtered,  ]\n            } else {\n                return [...filtered];\n            }\n        }}\n        sx={{ \n            flexGrow: 1, \n            flexShrink: 1, \n            \"& .MuiInput-input\": { padding: \"0px 8px !important\"},\n            \"& .MuiAutocomplete-listbox\": {\n                maxHeight: '600px !important'\n            }\n        }}\n        fullWidth\n        selectOnFocus\n        clearOnBlur\n        handleHomeEndKeys\n        autoHighlight\n        id={`autocomplete-${chartId}-${channel}`}\n        options={conceptGroups.map(g => g.field.name).filter(name => name != \"\")}\n        getOptionLabel={(option) => {\n            // Value selected with enter, right from the input\n            return option;\n        }}\n        groupBy={(option) => {\n            let groupItem = conceptGroups.find(item => item.field.name == option);\n            if (groupItem && groupItem.field.name != \"\") {\n                return `${groupItem.group}`;\n            } else {\n                return \"create a new field\"\n            }         \n        }}\n        renderGroup={(params) => (\n            <Box key={params.key}>\n              <Box className=\"GroupHeader\">{params.group}</Box>\n              <Box className=\"GroupItems\" sx={{ \n                display: 'grid', \n                gridTemplateColumns: 'repeat(2, 1fr)', \n                padding: '4px'\n              }}>\n                {params.children}\n              </Box>\n            </Box>\n        )}\n        renderOption={(props, option) => {\n            let renderOption = (conceptShelfItems.map(f => f.name).includes(option)) ? option : `${option}`;\n            let otherStyle = option == `` ? {color: \"darkgray\", fontStyle: \"italic\"} : {}\n\n            // Find the field item for this option\n            const fieldItem = conceptShelfItems.find(f => f.name === option);\n            \n            if (fieldItem) {\n                // Create a mini concept card\n                let backgroundColor = theme.palette.primary.main;\n                if (fieldItem.source == \"original\") {\n                    backgroundColor = theme.palette.primary.light;\n                } else if (fieldItem.source == \"custom\") {\n                    backgroundColor = theme.palette.custom.main;\n                }\n\n                // Add overlay logic similar to ConceptCard - make fields not in focused table more transparent\n                let draggleCardHeaderBgOverlay = 'rgba(255, 255, 255, 0.9)';\n                \n                // Add subtle tint for non-focused fields\n                if (activeTable && !activeTable.names.includes(fieldItem.name)) {\n                    draggleCardHeaderBgOverlay = 'rgba(255, 255, 255, 1)';\n                }\n\n                // Extract only the compatible props for Card\n                const { key, ...cardProps } = props;\n\n                return (\n                    <Card \n                        key={key}\n                        onClick={() => handleSelectOption(option)}\n                        sx={{ \n                            minWidth: 80, \n                            backgroundColor, \n                            position: \"relative\",\n                            border: \"none\",\n                            cursor: \"pointer\",\n                            margin: '2px 4px',\n                            \"&:hover\": {\n                                boxShadow: \"0 2px 4px 0 rgb(0 0 0 / 20%)\"\n                            }\n                        }}\n                        variant=\"outlined\"\n                        className={`data-field-list-item draggable-card`}\n                    >\n                        <Box sx={{ \n                                cursor: \"pointer\", \n                                background: draggleCardHeaderBgOverlay,\n                                display: 'flex',\n                                alignItems: 'center',\n                                minHeight: '20px',\n                                ml: 0.5\n                            }}\n                            className={`draggable-card-inner ${fieldItem.source}`}\n                        >\n                            <Typography sx={{\n                                margin: '0px 4px',\n                                fontSize: 10, \n                                width: \"100%\",\n                                display: 'flex',\n                                alignItems: 'center',\n                                gap: '4px',\n                            }} component={'span'}>\n                                {getIconFromType(activeTable?.metadata[fieldItem.name]?.type || Type.Auto)}\n                                <span style={{\n                                    whiteSpace: \"nowrap\",\n                                    overflow: \"hidden\", \n                                    textOverflow: \"ellipsis\",\n                                    flexShrink: 1\n                                }}>\n                                    {fieldItem.name}\n                                </span>\n                            </Typography>\n                        </Box>\n                    </Card>\n                );\n            } else {\n                // For non-existing options (like new field creation)\n                return (\n                    <Typography \n                        {...props} \n                        onClick={() => handleSelectOption(option)}\n                        sx={{\n                            fontSize: \"10px\", \n                            padding: '4px 6px',\n                            margin: '2px 4px',\n                            cursor: 'pointer',\n                            border: '1px dashed #ccc',\n                            borderRadius: '4px',\n                            backgroundColor: 'rgba(0,0,0,0.02)',\n                            height: '24px',\n                            display: 'flex',\n                            alignItems: 'center',\n                            \"&:hover\": {\n                                backgroundColor: 'rgba(0,0,0,0.05)'\n                            },\n                            ...otherStyle\n                        }}\n                    >\n                        {renderOption || \"type a new field name\"}\n                    </Typography>\n                );\n            }\n        }}\n        freeSolo\n        renderInput={(params) => (\n            <TextField {...params} variant=\"standard\" autoComplete='off' placeholder='field'\n                sx={{height: \"24px\", \"& .MuiInput-root\": {height: \"24px\", fontSize: \"small\"}}} />\n        )}\n        slotProps={{\n            paper: { // Use paper instead of popper for styling\n                sx: {\n                    width: '300px',\n                    maxWidth: '300px',\n                    '& .MuiAutocomplete-listbox': {\n                        maxHeight: '600px !important'\n                    },\n                }\n            }\n        }}\n    />\n\n    const filter = createFilterOptions<string>();\n    // when there is no field added, allow users to directly type concepts here, and it will be created on the fly.\n    const encContent = field == undefined ? \n        (encoding.aggregate == 'count' ? [ aggregateDisplay ] : [\n            normalizedDisplay,\n            aggregateDisplay,\n            createConceptInputBox\n        ]) \n        : \n        [\n            normalizedDisplay,\n            aggregateDisplay,\n            fieldComponent\n        ]\n\n    let encodingComp = (\n        <ClickAwayListener\n            mouseEvent=\"onMouseUp\"\n            touchEvent=\"onTouchStart\"\n            onClickAway={() => { setEditMode(false) }}\n        >\n            <Box sx={{ display: 'flex', flexDirection: \"column\", alignItems: 'flex-start', width: \"100%\", marginBottom: \"4px\" }}\n                component=\"form\" className=\"channel-shelf-box encoding-item\">\n                <Card sx={{ width: \"100%\" }} variant=\"outlined\">\n                    <Box ref={drop} className=\"channel-encoded-field\">\n                        <IconButton //className=\"encoding-shelf-action-button\"\n                            onClick={() => { setEditMode(!editMode) }} color=\"default\"\n                            aria-label=\"axis settings\" component=\"span\"\n                            size=\"small\" sx={{\n                                padding: \"0px\", borderRadius: 0, textAlign: \"left\", fontSize: \"inherit\", height: \"auto\",\n                                position: \"relative\", borderRight: \"1px solid lightgray\", width: '64px', \n                                display: \"flex\", justifyContent: \"space-between\"\n                            }}>\n                            <Typography variant=\"caption\" component=\"span\" sx={{ padding: \"0px 0px 0px 6px\" }}>{channelDisplay}</Typography>\n                            <ArrowDropDownIcon sx={{ position: \"absolute\", right: \"0\", \n                                paddingLeft: \"2px\", transform: editMode ? \"rotate(180deg)\" : \"\" }} fontSize=\"inherit\" />\n                        </IconButton>\n                        <Box sx={{\n                            backgroundColor: backgroundColor, width: \"calc(100% - 64px)\",\n                            display: \"flex\", borderBottom: (editMode ? \"1px solid rgba(0, 0, 0, 0.12)\" : undefined)\n                        }}>\n                            {encContent}\n                        </Box>\n                    </Box>\n                    <AnimateHeight\n                        duration={200}\n                        height={editMode ? \"auto\" : 0} // see props documentation below\n                    >\n                        {encodingConfigCard}\n                    </AnimateHeight>\n                </Card>\n            </Box>\n        </ClickAwayListener>\n    )\n\n    return encodingComp;\n}"
  },
  {
    "path": "src/views/EncodingShelfCard.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { FC, useEffect, useState } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { DataFormulatorState, dfActions, dfSelectors, generateFreshChart } from '../app/dfSlice';\n\nimport embed from 'vega-embed';\n\nimport {\n    Box,\n    Typography,\n    FormControl,\n    InputLabel,\n    Select,\n    MenuItem,\n    ListSubheader,\n    ListItemIcon,\n    ListItemText,\n    IconButton,\n    Tooltip,\n    TextField,\n    Card,\n    Chip,\n    Autocomplete,\n    Menu,\n    Divider,\n    alpha,\n    useTheme,\n    SxProps,\n    Theme,\n    Slider,\n    CircularProgress,\n    Button,\n    Collapse,\n    Dialog,\n    DialogTitle,\n    DialogContent,\n    DialogActions,\n} from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\n\nimport React from 'react';\nimport { useDragLayer } from 'react-dnd';\nimport { ThinkingBufferEffect } from '../components/FunComponents';\nimport { Channel, Chart, FieldItem, Trigger, duplicateChart } from \"../components/ComponentType\";\n\nimport _ from 'lodash';\n\nimport '../scss/EncodingShelf.scss';\nimport { DictTable } from \"../components/ComponentType\";\n\nimport { resolveChartFields, assembleVegaChart, resolveRecommendedChart } from '../app/utils';\nimport { EncodingBox } from './EncodingBox';\n\nimport { channelGroups, CHART_TEMPLATES, getChartChannels, getChartTemplate } from '../components/ChartTemplates';\nimport { checkChartAvailability, getDataTable } from './VisualizationView';\nimport { TableIcon, AgentIcon as PrecisionManufacturing } from '../icons';\nimport ChangeCircleOutlinedIcon from '@mui/icons-material/ChangeCircleOutlined';\nimport AddIcon from '@mui/icons-material/Add';\nimport CheckIcon from '@mui/icons-material/Check';\nimport { ThinkingBanner } from './DataThread';\n\nimport { AppDispatch } from '../app/store';\nimport { borderColor, radius, transition } from '../app/tokens';\n\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport TipsAndUpdatesIcon from '@mui/icons-material/TipsAndUpdates';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport { IdeaChip } from './ChartRecBox';\nimport { useFormulateData } from '../app/useFormulateData';\n\n// Property and state of an encoding shelf\nexport interface EncodingShelfCardProps { \n    chartId: string;\n    trigger?: Trigger;\n    noBorder?: boolean;\n}\n\n\n\n// Add this utility function before the TriggerCard component\nexport const renderTextWithEmphasis = (text: string | any, highlightChipSx?: SxProps<Theme>) => {\n    \n    if (typeof text !== 'string') {\n        text = text == null ? '' : String(text);\n    }\n    text = text.replace(/_/g, '_\\u200B');\n    // Split the prompt by ** patterns and create an array of text and highlighted segments\n    const parts = text.split(/(\\*\\*.*?\\*\\*)/g);\n    \n    return parts.map((part, index) => {\n        if (part.startsWith('**') && part.endsWith('**')) {\n            // This is a highlighted part - remove the ** and wrap with styled component\n            const content = part.slice(2, -2).replaceAll('_', ' ');\n            return (\n                <Typography\n                    key={index}\n                    component=\"span\"\n                    sx={{\n                        color: 'inherit',\n                        padding: '0px 2px',\n                        borderRadius: radius.sm,\n                        ...highlightChipSx\n                    }}\n                >\n                    {content}\n                </Typography>\n            );\n        }\n        return part;\n    });\n};\n\nexport const TriggerCard: FC<{\n    className?: string, \n    trigger: Trigger, \n    hideFields?: boolean, \n    mini?: boolean,\n    highlighted?: boolean,\n    sx?: SxProps<Theme>}> = function ({ className, trigger, hideFields, mini = false, highlighted = false, sx }) {\n\n    let theme = useTheme();\n\n    let fieldItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n\n    const dispatch = useDispatch<AppDispatch>();\n\n    let handleClick = () => {\n        if (trigger.chart) {\n            dispatch(dfActions.setFocused({ type: 'chart', chartId: trigger.chart.id }));\n        }\n    }\n\n    let encodingComp : any = '';\n    let encFields = [];\n\n    if (trigger.chart) {\n\n        let chart = trigger.chart;\n        let encodingMap = chart?.encodingMap;\n\n        encFields = Object.entries(encodingMap)\n            .filter(([channel, encoding]) => {\n                return encoding.fieldID != undefined;\n            })\n            .map(([channel, encoding], index) => {\n                let field = fieldItems.find(f => f.id == encoding.fieldID) as FieldItem;\n                return field.name;\n            });\n\n        encodingComp = <Typography component=\"span\" key=\"enc-fields\" sx={{ fontSize: 'inherit', color: 'inherit' }}>\n            {Object.entries(encodingMap)\n                .filter(([channel, encoding]) => encoding.fieldID != undefined)\n                .map(([channel, encoding], index) => {\n                    let field = fieldItems.find(f => f.id == encoding.fieldID) as FieldItem;\n                    return <React.Fragment key={`trigger-${channel}-${field?.id}`}>\n                        {index > 0 ? <span style={{ margin: '0 2px', opacity: 0.5 }}> × </span> : ''}\n                        <span>{field?.name}</span>\n                    </React.Fragment>;\n                })}\n        </Typography>\n    }\n\n    let prompt: string = trigger.displayInstruction;\n    if (trigger.instruction == '' && encFields.length > 0) {\n        prompt = '';\n    } else if (!trigger.displayInstruction || (trigger.instruction != '' && trigger.instruction.length <= trigger.displayInstruction.replace(/\\*\\*/g, '').length)) {\n        prompt = trigger.instruction;\n    }\n\n    // Process the prompt to highlight content in ** **\n    const processedPrompt = renderTextWithEmphasis(prompt, {\n        fontSize: mini ? 10 : 11, padding: '1px 4px',\n        borderRadius: radius.sm,\n        background: alpha(theme.palette.custom.main, 0.08), \n    });\n\n    if (mini) {\n        return <Typography component=\"div\" sx={{\n            fontSize: '10px', color: theme.palette.text.secondary,\n            my: '2px', textWrap: 'balance',\n            '&:hover': {\n                cursor: 'pointer',\n                color: theme.palette.text.primary,\n            },\n            '& .MuiChip-label': { px: 0.5, fontSize: \"10px\"},\n            ...sx,\n        }} onClick={handleClick}>\n            {processedPrompt} \n            {hideFields ? \"\" : encodingComp}\n        </Typography> \n    }\n\n    return  <Typography component=\"div\" className={`${className}`}\n        sx={{\n            cursor: 'pointer', \n            fontSize: '11px',\n            color: 'rgba(0,0,0,0.75)',\n            textAlign: 'left',\n            py: 0.5,\n            px: 1,\n            borderRadius: radius.sm,\n            backgroundColor: theme.palette.custom.bgcolor,\n            border: `1px solid ${borderColor.component}`,\n            ...(highlighted ? { borderLeft: `2px solid ${theme.palette.custom.main}` } : {}),\n            '& .MuiChip-label': { px: 0.5, fontSize: \"10px\"},\n            ...sx,\n        }} \n        onClick={handleClick}>\n            {processedPrompt}\n            {hideFields ? \"\" : <>{\" \"}{encodingComp}</>}\n    </Typography>\n}\n\n\nexport const EncodingShelfCard: FC<EncodingShelfCardProps> = function ({ chartId }) {\n    const theme = useTheme();\n\n    // reference to states\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const config = useSelector((state: DataFormulatorState) => state.config);\n    const agentRules = useSelector((state: DataFormulatorState) => state.agentRules);\n    const focusedId = useSelector((state: DataFormulatorState) => state.focusedId);\n\n    let activeModel = useSelector(dfSelectors.getActiveModel);\n    let allCharts = useSelector(dfSelectors.getAllCharts);\n\n    // The table the user is currently looking at (from focused state)\n    const focusedTableId = (() => {\n        if (!focusedId) return undefined;\n        if (focusedId.type === 'table') return focusedId.tableId;\n        const focusedChart = allCharts.find(c => c.id === focusedId.chartId);\n        return focusedChart?.tableRef;\n    })();\n\n    let chart = allCharts.find(c => c.id == chartId) as Chart;\n    let trigger = chart.source == \"trigger\" ? tables.find(t => t.derive?.trigger?.chart?.id == chartId)?.derive?.trigger : undefined;\n\n    let [prompt, setPrompt] = useState<string>(trigger?.instruction || \"\");\n\n    useEffect(() => {\n        setPrompt(trigger?.instruction || \"\");\n    }, [chartId]);\n\n    let encodingMap = chart?.encodingMap;\n\n    const dispatch = useDispatch<AppDispatch>();\n    const { streamIdeas, formulateData } = useFormulateData();\n\n    const [chartTypeMenuOpen, setChartTypeMenuOpen] = useState<boolean>(false);\n    const [encodingHovered, setEncodingHovered] = useState<boolean>(false);\n\n    // Auto-expand encoding shelf when dragging a concept or operator card\n    const { isDraggingField } = useDragLayer((monitor) => ({\n        isDraggingField: monitor.isDragging() && \n            (monitor.getItemType() === 'concept-card' || monitor.getItemType() === 'operator-card'),\n    }));\n\n    const shouldExpand = encodingHovered || isDraggingField;\n\n    // When no fields are assigned to any channel, show all channels expanded\n    const hasAnyField = Object.values(encodingMap).some(enc => enc?.fieldID);\n    const shouldExpandAll = !hasAnyField || shouldExpand;\n    \n\n    let handleUpdateChartType = (newChartType: string) => {\n        dispatch(dfActions.updateChartType({chartId, chartType: newChartType}));\n        // Close the menu after selection\n        setChartTypeMenuOpen(false);\n    }\n\n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n\n    let currentTable = getDataTable(chart, tables, allCharts, conceptShelfItems);\n\n    // Check if chart is available\n    let isChartAvailable = checkChartAvailability(chart, conceptShelfItems, currentTable.rows);\n\n\n    // Consolidated chart state - maps chartId to its ideas, thinkingBuffer, and loading state\n    const [chartState, setChartState] = useState<Record<string, {\n        ideas: {text: string, goal: string, difficulty: 'easy' | 'medium' | 'hard'}[],\n        thinkingBuffer: string,\n        isLoading: boolean\n    }>>({});\n    \n    // Get current chart's state\n    const currentState = chartState[chartId] || { ideas: [], thinkingBuffer: \"\", isLoading: false };\n    const currentChartIdeas = currentState.ideas;\n    const thinkingBuffer = currentState.thinkingBuffer;\n    const isLoadingIdeas = currentState.isLoading;\n    \n    // Helper functions to update current chart's state\n    const setIdeas = (ideas: {text: string, goal: string, difficulty: 'easy' | 'medium' | 'hard'}[]) => {\n        setChartState(prev => ({\n            ...prev,\n            [chartId]: { ...prev[chartId] || { thinkingBuffer: \"\", isLoading: false }, ideas }\n        }));\n    };\n    \n    const setThinkingBuffer = (thinkingBuffer: string) => {\n        setChartState(prev => ({\n            ...prev,\n            [chartId]: { ...prev[chartId] || { ideas: [], isLoading: false }, thinkingBuffer }\n        }));\n    };\n    \n    const setIsLoadingIdeas = (isLoading: boolean) => {\n        setChartState(prev => ({\n            ...prev,\n            [chartId]: { ...prev[chartId] || { ideas: [], thinkingBuffer: \"\" }, isLoading }\n        }));\n    };\n    \n    let encodingBoxGroups = Object.entries(channelGroups)\n        .filter(([group, channelList]) => channelList.some(ch => Object.keys(encodingMap).includes(ch)))\n        .map(([group, channelList]) => {\n            let channels = channelList.filter(channel => Object.keys(encodingMap).includes(channel));\n            let occupiedChannels = channels.filter(ch => encodingMap[ch as Channel]?.fieldID);\n            let unoccupiedChannels = channels.filter(ch => !encodingMap[ch as Channel]?.fieldID);\n\n            let hasVisibleContent = occupiedChannels.length > 0 || shouldExpandAll;\n\n            let component = <Box key={`encoding-group-box-${group}`} sx={{ mt: (group && shouldExpandAll) ? '6px' : 0 }}>\n                {channels.map(channel => {\n                    const isOccupied = encodingMap[channel as Channel]?.fieldID;\n                    const box = <EncodingBox key={`shelf-${channel}`} channel={channel as Channel} chartId={chartId} tableId={currentTable.id} />;\n                    return isOccupied ? box : (\n                        <Collapse key={`collapse-${channel}`} in={shouldExpandAll} timeout={200}>\n                            {box}\n                        </Collapse>\n                    );\n                })}\n            </Box>\n            return component;\n        });\n\n    // derive active fields from encoding map so that we can keep the order of which fields will be visualized\n    let activeFields = Object.values(encodingMap).map(enc => enc.fieldID).filter(fieldId => fieldId && conceptShelfItems.map(f => f.id)\n                                .includes(fieldId)).map(fieldId => conceptShelfItems.find(f => f.id == fieldId) as FieldItem);\n    let activeSimpleEncodings: { [key: string]: string } = {};\n    for (let channel of getChartChannels(chart.chartType)) {\n        if (chart.encodingMap[channel as Channel]?.fieldID) {\n            activeSimpleEncodings[channel] = activeFields.find(f => f.id == chart.encodingMap[channel as Channel].fieldID)?.name as string;\n        }\n    }\n    \n    let activeCustomFields = activeFields.filter(field => field.source == \"custom\");\n\n    // check if the current table contains all fields already exists a table that fullfills the user's specification\n    let existsWorkingTable = activeFields.length == 0 || activeFields.every(f => currentTable.names.includes(f.name));\n    \n    // All root/anchored tables, with current source tables ordered first for context priority\n    let rootTables = tables.filter(t => t.derive === undefined || t.anchored);\n    let priorityIds = (currentTable.derive && !currentTable.anchored)\n        ? currentTable.derive.source\n        : [currentTable.id];\n    let actionTableIds = [\n        ...priorityIds.filter(id => rootTables.some(t => t.id === id)),\n        ...rootTables.map(t => t.id).filter(id => !priorityIds.includes(id))\n    ];\n\n    let getIdeasForVisualization = async () => {\n        if (!currentTable || isLoadingIdeas) return;\n\n        let chartAvailable = checkChartAvailability(chart, conceptShelfItems, currentTable.rows);\n        let currentChartPng = chartAvailable ? await vegaLiteSpecToPng(assembleVegaChart(\n            chart.chartType, chart.encodingMap, activeFields, currentTable.rows,\n            currentTable.metadata, 100, 80, false, chart.config)) : undefined;\n\n        await streamIdeas({\n            actionTableIds,\n            currentTable,\n            onIdeas: setIdeas,\n            onThinkingBuffer: setThinkingBuffer,\n            onLoadingChange: setIsLoadingIdeas,\n            currentChartImage: currentChartPng,\n            currentDataSample: currentTable.rows.slice(0, 10),\n            filterByType: true,\n        });\n    }\n\n    // Function to handle idea chip click\n    const handleIdeaClick = (ideaText: string) => {\n        setPrompt(ideaText);\n        // Automatically start the data formulation process\n        deriveNewData(ideaText, 'ideate');\n    };\n\n\n    let deriveNewData = async (\n        instruction: string, \n        mode: 'formulate' | 'ideate' = 'formulate', \n        overrideTableId?: string,\n    ) => {\n\n        if (actionTableIds.length == 0) return;\n\n        // Short-circuit: if all fields exist in source table, just reference it\n        if (currentTable.derive == undefined && instruction == \"\" && \n                (activeFields.length > 0 && activeCustomFields.length == 0) && \n                tables.some(t => t.derive == undefined && \n                activeFields.every(f => currentTable.names.includes(f.name)))) {\n            let tempTable = getDataTable(chart, tables, allCharts, conceptShelfItems, true);\n            dispatch(dfActions.updateTableRef({chartId: chartId, tableRef: tempTable.id}));\n            dispatch(dfActions.changeChartRunningStatus({chartId, status: true}));\n            setTimeout(function(){\n                dispatch(dfActions.changeChartRunningStatus({chartId, status: false}));\n                dispatch(dfActions.clearUnReferencedTables());\n            }, 400);\n            return;\n        }\n\n        dispatch(dfActions.clearUnReferencedTables());\n\n        let fieldNamesStr = activeFields.map(f => f.name).reduce(\n            (a: string, b: string, i, array) => a + (i == 0 ? \"\" : (i < array.length - 1 ? ', ' : ' and ')) + b, \"\");\n\n        const actionId = `deriveNewData_${String(Date.now())}`;\n        const originTableId = focusedTableId || currentTable.id;\n        const actionDescription = instruction || `Derive ${fieldNamesStr}`;\n        dispatch(dfActions.updateAgentWorkInProgress({\n            actionId, originTableId, description: actionDescription, status: 'running', hidden: false,\n            message: { content: actionDescription, role: 'user', observeTableId: originTableId }\n        }));\n\n        // Build chart visualization context\n        let chartComplete = checkChartAvailability(chart, conceptShelfItems, currentTable.rows);\n        let chartSpec = (mode == 'formulate' && Object.keys(activeSimpleEncodings).length > 0) ? {\n            chart_type: chart.chartType,\n            encodings: activeSimpleEncodings,\n            ...(chart.config ? { config: chart.config } : {})\n        } : undefined;\n\n        let currentChartImage: string | null | undefined = undefined;\n        if (chartComplete && chartSpec) {\n            currentChartImage = await vegaLiteSpecToPng(assembleVegaChart(\n                chart.chartType, chart.encodingMap, activeFields, currentTable.rows,\n                currentTable.metadata, 100, 80, false, chart.config\n            ));\n        }\n\n        let currentVisualization = (chartComplete && chartSpec) ? {\n            chart_spec: chartSpec,\n            ...(currentChartImage ? { chart_image: currentChartImage } : {})\n        } : undefined;\n        let expectedVisualization = (!chartComplete && chartSpec) ? { chart_spec: chartSpec } : undefined;\n\n        let triggerChartSpec = duplicateChart(chart);\n        triggerChartSpec.source = \"trigger\";\n\n        formulateData({\n            instruction,\n            mode,\n            actionTableIds,\n            currentTable,\n            overrideTableId,\n            currentVisualization,\n            expectedVisualization,\n            triggerChart: triggerChartSpec,\n            createChart: ({ candidateTable, refinedGoal, currentConcepts }) => {\n                let needToCreateNewChart = true;\n                let focusedChartId: string | undefined;\n                \n                if (mode != \"ideate\" && chart.chartType != \"Auto\" && overrideTableId != undefined && \n                    allCharts.filter(c => c.source == \"user\").find(c => c.tableRef == overrideTableId)) {\n                    let chartsFromOverrideTable = allCharts.filter(c => c.source == \"user\" && c.tableRef == overrideTableId);\n                    let chartsWithSameEncoding = chartsFromOverrideTable.filter(c => {\n                        let getSimpliedChartEnc = (ch: Chart) => {\n                            return ch.chartType + \":\" + Object.entries(ch.encodingMap)\n                                .filter(([channel, enc]) => enc.fieldID != undefined)\n                                .map(([channel, enc]) => `${channel}:${enc.fieldID}:${enc.aggregate}:${enc.sortOrder}:${enc.sortBy}:${enc.scheme}`)\n                                .join(\";\");\n                        }\n                        return getSimpliedChartEnc(c) == getSimpliedChartEnc(triggerChartSpec);\n                    });\n                    if (chartsWithSameEncoding.length > 0) {\n                        focusedChartId = chartsWithSameEncoding[0].id;\n                        dispatch(dfActions.setFocused({ type: 'chart', chartId: focusedChartId }));\n                        needToCreateNewChart = false;\n                    }\n                }\n                \n                if (needToCreateNewChart) {\n                    let newChart: Chart;\n                    if (mode == \"ideate\" || chart.chartType == \"Auto\") {\n                        newChart = resolveRecommendedChart(refinedGoal, currentConcepts, candidateTable);\n                    } else if (chart.chartType == \"Table\") {\n                        newChart = generateFreshChart(candidateTable.id, 'Table');\n                    } else {\n                        newChart = structuredClone(chart) as Chart;\n                        newChart.source = \"user\";\n                        newChart.id = `chart-${Date.now() - Math.floor(Math.random() * 10000)}`;\n                        newChart.saved = false;\n                        newChart.tableRef = candidateTable.id;\n                        let chartEncodings = refinedGoal['chart']?.['encodings'] || refinedGoal['chart_encodings'] || {};\n                        newChart = resolveChartFields(newChart, currentConcepts, chartEncodings, candidateTable);\n                    }\n                    focusedChartId = newChart.id;\n                    dispatch(dfActions.addAndFocusChart(newChart));\n                }\n                return focusedChartId;\n            },\n            onStarted: () => {\n                dispatch(dfActions.changeChartRunningStatus({chartId, status: true}));\n            },\n            onSuccess: ({ displayInstruction, candidateTable, focusedChartId }) => {\n                if (chart.chartType == \"Table\" || chart.chartType == \"Auto\" || (existsWorkingTable == false)) {\n                    dispatch(dfActions.deleteChartById(chartId));\n                }\n                dispatch(dfActions.clearUnReferencedTables());\n                dispatch(dfActions.clearUnReferencedCustomConcepts());\n                dispatch(dfActions.setFocused({ type: 'chart', chartId: focusedChartId as string }));\n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"component\": \"chart builder\",\n                    \"type\": \"success\",\n                    \"value\": `Data formulation for ${fieldNamesStr} succeeded.`\n                }));\n                dispatch(dfActions.updateAgentWorkInProgress({\n                    actionId, description: displayInstruction || actionDescription, status: 'completed', hidden: false,\n                    message: { content: displayInstruction || actionDescription, role: 'action', resultTableId: candidateTable.id }\n                }));\n            },\n            onError: () => {\n                dispatch(dfActions.updateAgentWorkInProgress({\n                    actionId, description: actionDescription, status: 'failed', hidden: false,\n                    message: { content: 'Data formulation failed.', role: 'error' }\n                }));\n            },\n            onFinally: () => {\n                dispatch(dfActions.changeChartRunningStatus({chartId, status: false}));\n            },\n        });\n    }\n\n\n    // zip multiple components together\n    const w: any = (a: any[], b: any[]) => a.length ? [a[0], ...w(b, a.slice(1))] : b;\n\n    let formulateInputBox = <Card key='text-input-boxes' variant='outlined' sx={{\n        display: 'flex', flexDirection: 'column',\n        px: 1, pt: 0.5, pb: 0.25,\n        borderWidth: 1,\n        borderColor: alpha(theme.palette.text.primary, 0.2),\n        borderRadius: '8px',\n        overflow: 'visible',\n        flexShrink: 0,\n        transition: transition.fast,\n        '&:hover': {\n            borderWidth: 1,\n            borderColor: alpha(theme.palette.primary.main, 0.6),\n        },\n        '&:focus-within': {\n            borderWidth: 1,\n            borderColor: alpha(theme.palette.primary.main, 0.8),\n        },\n    }}>\n        <TextField\n            variant=\"standard\"\n            sx={{\n                flex: 1,\n                \"& .MuiInput-input\": { fontSize: '12px', lineHeight: 1.5 },\n                \"& .MuiInput-underline:before\": { borderBottom: 'none' },\n                \"& .MuiInput-underline:hover:not(.Mui-disabled):before\": { borderBottom: 'none' },\n                \"& .MuiInput-underline:after\": { borderBottom: 'none' },\n            }}\n            onChange={(event: any) => {\n                setPrompt(event.target.value);\n            }}\n            onKeyDown={(event: any) => {\n                if (event.key === 'Enter' && !event.shiftKey) {\n                    event.preventDefault();\n                    if (prompt.trim().length > 0) {\n                        deriveNewData(prompt, 'formulate');\n                    }\n                }\n            }}\n            slotProps={{\n                inputLabel: { shrink: true },\n            }}\n            value={prompt}\n            placeholder={\"follow up on this chart\"}\n            fullWidth\n            multiline\n            minRows={2}\n            maxRows={5}\n        />\n        <Box sx={{\n            display: 'flex', flexDirection: 'row', alignItems: 'center',\n            justifyContent: 'flex-end',\n        }}>\n            <Tooltip title={currentChartIdeas.length > 0 ? \"Refresh ideas\" : \"Get ideas\"}>\n                <span>\n                    <IconButton size=\"small\"\n                        disabled={isLoadingIdeas}\n                        sx={{ p: 0.5, color: theme.palette.custom.textColor || theme.palette.custom.main,\n                            '&:hover': { backgroundColor: alpha(theme.palette.custom.main, 0.08) } }}\n                        onClick={() => getIdeasForVisualization()}>\n                        {isLoadingIdeas \n                            ? <CircularProgress size={20} sx={{ color: theme.palette.custom.main }} />\n                            : <TipsAndUpdatesIcon sx={{ fontSize: 20 }} />}\n                    </IconButton>\n                </span>\n            </Tooltip>\n            {trigger ? \n                <Tooltip title={<Typography sx={{fontSize: 11}}>formulate and override <TableIcon sx={{width: 10, height: 10, marginBottom: '-1px'}}/>{trigger.resultTableId}</Typography>}>\n                    <span>\n                        <IconButton size=\"small\" color={\"warning\"} sx={{ p: 0.5 }} onClick={() => { \n                            deriveNewData(trigger!.instruction, 'formulate', trigger!.resultTableId); \n                        }}>\n                            <ChangeCircleOutlinedIcon sx={{ fontSize: 18 }} />\n                        </IconButton>\n                    </span>\n                </Tooltip>\n                : \n                <Tooltip title={`Formulate`}>\n                    <span>\n                        <IconButton size=\"small\" color={\"primary\"} sx={{ p: 0.5 }} onClick={() => { deriveNewData(prompt, 'formulate'); }}>\n                            <PrecisionManufacturing sx={{\n                                fontSize: 20,\n                                ...(isChartAvailable ? {} : {\n                                    animation: 'pulseAttention 3s ease-in-out infinite',\n                                    '@keyframes pulseAttention': {\n                                        '0%, 90%': { scale: 1 },\n                                        '95%': { scale: 1.2 },\n                                        '100%': { scale: 1 },\n                                    },\n                                }),\n                            }} />\n                        </IconButton>\n                    </span>\n                </Tooltip>\n            }           \n        </Box>\n    </Card>\n\n\n\n    let channelComponent = (\n        <Box sx={{ width: \"100%\", minWidth: \"210px\", height: '100%', display: \"flex\", flexDirection: \"column\", gap: '4px' }}>\n            <Box key='mark-selector-box' sx={{ flex: '0 0 auto', display: 'flex', alignItems: 'center' }}>\n                <FormControl sx={{ m: 1, minWidth: 120, flex: 1, margin: \"0px 0\"}} size=\"small\">\n                    <Select\n                        variant=\"standard\"\n                        labelId=\"chart-mark-select-label\"\n                        id=\"chart-mark-select\"\n                        value={chart.chartType}\n                        // Add these props to control the open state\n                        open={chartTypeMenuOpen}\n                        onOpen={() => setChartTypeMenuOpen(true)}\n                        onClose={() => setChartTypeMenuOpen(false)}\n                        MenuProps={{\n                            anchorOrigin: {\n                                vertical: 'bottom',\n                                horizontal: 'left',\n                            },\n                            transformOrigin: {\n                                vertical: 'top',\n                                horizontal: 'left',\n                            },\n                            PaperProps: {\n                                sx: {\n                                    '& .MuiList-root': {\n                                        display: 'grid',\n                                        gridTemplateColumns: '1fr 1fr',\n                                        gap: 0,\n                                        padding: '8px'\n                                    }\n                                }\n                            }\n                        }}\n                        renderValue={(value: string) => {\n                            const t = getChartTemplate(value);\n                            return (\n                                <div style={{display: 'flex', padding: \"0px 0px 0px 4px\"}}>\n                                    <ListItemIcon sx={{minWidth: \"24px\"}}>\n                                        {typeof t?.icon == 'string' ? <img height=\"24px\" width=\"24px\" src={t?.icon} alt=\"\" role=\"presentation\" /> : \n                                         <Box sx={{width: \"24px\", height: \"24px\"}}>{t?.icon}</Box>}\n                                        </ListItemIcon>\n                                    <ListItemText sx={{marginLeft: \"2px\", whiteSpace: \"initial\"}} slotProps={{primary: {fontSize: 12}}}>{t?.chart}</ListItemText>\n                                </div>\n                            )\n                        }}\n                        onChange={(event) => { }}>\n                        {Object.entries(CHART_TEMPLATES).map(([group, templates]) => {\n                            return [\n                                <ListSubheader sx={{ \n                                    color: \"text.secondary\", \n                                    lineHeight: 2, \n                                    fontSize: 12,\n                                    gridColumn: '1 / -1' // Make subheader span both columns\n                                }} key={group}>{group}</ListSubheader>,\n                                ...templates.map((t, i) => (\n                                    <MenuItem \n                                        sx={{ \n                                            fontSize: 12, \n                                            paddingLeft: 2, \n                                            paddingRight: 2,\n                                            minHeight: '32px',\n                                            margin: '1px 0'\n                                        }} \n                                        value={t.chart} \n                                        key={`${group}-${i}`}\n                                        onClick={(e) => {\n                                            console.log('MenuItem clicked:', t.chart);\n                                            // Manually trigger the chart type update (this will also close the menu)\n                                            handleUpdateChartType(t.chart);\n                                        }}\n                                    >\n                                        <Box sx={{display: 'flex'}}>\n                                            <ListItemIcon sx={{minWidth: \"20px\"}}>\n                                                {typeof t?.icon == 'string' ? \n                                                    <img height=\"20px\" width=\"20px\" src={t?.icon} alt=\"\" role=\"presentation\" /> : \n                                                    <Box sx={{width: \"20px\", height: \"20px\"}}>{t?.icon}</Box>\n                                                }\n                                            </ListItemIcon>\n                                            <ListItemText \n                                                slotProps={{primary: {fontSize: 11}}} \n                                                sx={{ margin: 0 }}\n                                            >\n                                                {t.chart}\n                                            </ListItemText>\n                                        </Box>\n                                    </MenuItem>\n                                ))\n                            ]\n                        })}\n                    </Select>\n                </FormControl>\n            </Box>\n            {/* Template-driven config property selectors */}\n            <Box key='encoding-and-config' sx={{ \n                    flex: '1 1 auto',\n                }} style={{ height: \"calc(100% - 100px)\" }} className=\"encoding-list\"\n                onMouseEnter={() => setEncodingHovered(true)}\n                onMouseLeave={() => setEncodingHovered(false)}>\n            {(() => {\n                    const template = getChartTemplate(chart.chartType);\n                    const configProps = template?.properties;\n                    if (!configProps || configProps.length === 0) return null;\n                    return (\n                        <Box sx={{ display: 'flex', flexDirection: 'column', gap: '1px', mb: '6px' }}>\n                            {configProps.map((propDef) => {\n                                // App-level visibility: hide certain properties unless relevant channels are assigned\n                                if (propDef.key === 'independentYAxis') {\n                                    const hasFacet = chart.encodingMap['column' as Channel]?.fieldID != null\n                                        || chart.encodingMap['row' as Channel]?.fieldID != null;\n                                    if (!hasFacet) return null;\n                                }\n                                if (propDef.type === 'continuous') {\n                                    const currentValue = chart.config?.[propDef.key] ?? propDef.defaultValue ?? propDef.min ?? 0;\n                                    return (\n                                        <Box key={`config-${propDef.key}`} sx={{\n                                            display: 'flex', alignItems: 'center', \n                                            borderRadius: '12px',\n                                            minHeight: '18px',\n                                            overflow: 'hidden', padding: '0px 10px 0px 0px',\n                                        }}>\n                                            <Typography variant=\"caption\" sx={{\n                                                padding: '0px 6px', color: 'text.secondary', fontSize: 10,\n                                                whiteSpace: 'nowrap', fontWeight: 500, minWidth: '40px', userSelect: 'none',\n                                            }}>\n                                                {propDef.label}\n                                            </Typography>\n                                            <Slider\n                                                size=\"small\"\n                                                value={currentValue}\n                                                min={propDef.min}\n                                                max={propDef.max}\n                                                step={propDef.step}\n                                                onChange={(_event, newValue) => {\n                                                    dispatch(dfActions.updateChartConfig({chartId, key: propDef.key, value: newValue as number}));\n                                                }}\n                                                valueLabelDisplay=\"auto\"\n                                                sx={{\n                                                    flex: 1, height: 3, mx: 0.5,\n                                                    '& .MuiSlider-thumb': { width: 10, height: 10 },\n                                                    '& .MuiSlider-valueLabel': { fontSize: 10, padding: '2px 4px', lineHeight: 1.2 },\n                                                }}\n                                            />\n                                            <Typography variant=\"caption\" sx={{ fontSize: 10, color: 'text.secondary', minWidth: '20px', textAlign: 'right' }}>\n                                                {currentValue}\n                                            </Typography>\n                                        </Box>\n                                    );\n                                }\n                                if (propDef.type === 'binary') {\n                                    const currentValue = chart.config?.[propDef.key] ?? propDef.defaultValue ?? false;\n                                    return (\n                                        <Box key={`config-${propDef.key}`} sx={{\n                                            display: 'flex', alignItems: 'center',\n                                            borderRadius: '12px',\n                                            minHeight: '18px',\n                                            overflow: 'hidden', padding: '0px 8px',\n                                            cursor: 'pointer',\n                                            '&:hover': { backgroundColor: 'rgba(0,0,0,0.04)' },\n                                        }}\n                                        onClick={() => {\n                                            dispatch(dfActions.updateChartConfig({chartId, key: propDef.key, value: !currentValue}));\n                                        }}>\n                                            <Typography variant=\"caption\" sx={{\n                                                flex: 1, color: 'text.secondary', fontSize: 10,\n                                                whiteSpace: 'nowrap', fontWeight: 500, userSelect: 'none',\n                                            }}>\n                                                {propDef.label}\n                                            </Typography>\n                                            <Box sx={{\n                                                width: 28, height: 14, borderRadius: '7px',\n                                                backgroundColor: currentValue ? theme.palette.primary.main : 'rgba(0,0,0,0.2)',\n                                                position: 'relative', transition: 'background-color 0.2s',\n                                                flexShrink: 0,\n                                            }}>\n                                                <Box sx={{\n                                                    width: 10, height: 10, borderRadius: '50%',\n                                                    backgroundColor: 'white',\n                                                    position: 'absolute', top: 2,\n                                                    left: currentValue ? 16 : 2,\n                                                    transition: 'left 0.2s',\n                                                }} />\n                                            </Box>\n                                        </Box>\n                                    );\n                                }\n                                if (propDef.type !== 'discrete' || !propDef.options) return null;\n                                const currentValue = chart.config?.[propDef.key] ?? propDef.defaultValue;\n                                const options = propDef.options;\n                                // Find the index of the current value in options (deep compare via JSON)\n                                const currentSerialized = JSON.stringify(currentValue);\n                                let selectedIndex = options.findIndex(o => JSON.stringify(o.value) === currentSerialized);\n                                if (selectedIndex < 0) selectedIndex = 0;\n                                return (\n                                    <Box key={`config-${propDef.key}`} sx={{\n                                        display: 'flex', alignItems: 'center', \n                                        borderRadius: '12px',\n                                        minHeight: '22px',\n                                        overflow: 'hidden',\n                                    }}>\n                                        <Typography variant=\"caption\" sx={{\n                                            padding: '0px 8px', color: 'text.secondary', fontSize: 10,\n                                            whiteSpace: 'nowrap', fontWeight: 500, userSelect: 'none',\n                                        }}>\n                                            {propDef.label}\n                                        </Typography>\n                                        <Select\n                                            variant=\"standard\"\n                                            id={`config-${propDef.key}-select`}\n                                            value={selectedIndex}\n                                            onChange={(event) => {\n                                                const idx = event.target.value as number;\n                                                dispatch(dfActions.updateChartConfig({chartId, key: propDef.key, value: options[idx].value}));\n                                            }}\n                                            disableUnderline\n                                            sx={{\n                                                flex: 1, fontSize: 11, height: '22px',\n                                                backgroundColor: 'rgba(0,0,0,0.04)',\n                                                borderRadius: '6px',\n                                                '&:hover': { backgroundColor: 'rgba(0,0,0,0.07)' },\n                                                '& .MuiSelect-select': { padding: '1px 20px 1px 6px !important', fontSize: 11 },\n                                                '& .MuiSvgIcon-root': { fontSize: 14, right: 2 },\n                                            }}\n                                            renderValue={(idx: number) => {\n                                                return <span style={{fontSize: 11}}>{options[idx]?.label || \"Default\"}</span>;\n                                            }}\n                                        >\n                                            {options.map((opt, i) => (\n                                                <MenuItem value={i} key={`config-${propDef.key}-${i}`} sx={{ fontSize: 11, minHeight: '28px' }}>\n                                                    {opt.label}\n                                                </MenuItem>\n                                            ))}\n                                        </Select>\n                                    </Box>\n                                );\n                            })}\n                        </Box>\n                    );\n                })()}\n                {encodingBoxGroups}\n            </Box>\n            {formulateInputBox}\n        </Box>);\n\n    const encodingShelfCard = (\n        <Box sx={{ \n            padding: '4px 6px', \n            maxWidth: \"400px\", \n            display: 'flex', \n            flexDirection: 'column', \n        }}>\n            <Box sx={{ padding: '4px 0px' }}>\n                {channelComponent}\n            </Box>\n            {/* Ideas chips shown inline below the formulate box */}\n            {(currentChartIdeas.length > 0 || (isLoadingIdeas && thinkingBuffer)) && (\n                <Box sx={{\n                    display: 'flex', \n                    flexWrap: 'wrap', \n                    gap: 0.5,\n                    pt: 0.5,\n                }}>\n                    {currentChartIdeas.map((idea, index) => (\n                        <IdeaChip\n                            mini={true}\n                            key={index}\n                            idea={idea}\n                            theme={theme}\n                            onClick={() => handleIdeaClick(idea.text)}\n                        />\n                    ))}\n                    {isLoadingIdeas && thinkingBuffer && <ThinkingBufferEffect text={thinkingBuffer.slice(-40)} sx={{ width: '100%' }} />}\n                </Box>\n            )}\n            {isLoadingIdeas && !thinkingBuffer && (\n                <Box sx={{ padding: '2px 0' }}>\n                    {ThinkingBanner('ideating...')}\n                </Box>\n            )}\n        </Box>\n    );\n\n    return encodingShelfCard;\n}\n\n// Function to convert Vega-Lite spec to PNG data URL with improved resolution\nconst vegaLiteSpecToPng = async (spec: any, scale: number = 2.0, quality: number = 1.0): Promise<string | null> => {\n    try {\n        // Create a temporary container\n        const tempId = `temp-chart-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n        const tempContainer = document.createElement('div');\n        tempContainer.id = tempId;\n        tempContainer.style.position = 'absolute';\n        tempContainer.style.left = '-9999px';\n        tempContainer.style.top = '-9999px';\n        document.body.appendChild(tempContainer);\n\n        // Embed the chart with higher resolution settings\n        const result = await embed('#' + tempId, spec, { \n            actions: false, \n            renderer: \"canvas\",\n            scaleFactor: scale // Apply scale factor for higher resolution\n        });\n\n        // Get the canvas and apply high-resolution rendering\n        const canvas = await result.view.toCanvas(scale); // Pass scale to toCanvas\n        const pngDataUrl = canvas.toDataURL('image/png', quality);\n\n        // Clean up\n        document.body.removeChild(tempContainer);\n\n        return pngDataUrl;\n    } catch (error) {\n        console.error('Error converting Vega-Lite spec to PNG:', error);\n        return null;\n    }\n};\n\n// Alternative method using toImageURL for even better quality\nconst vegaLiteSpecToPngWithImageURL = async (spec: any, scale: number = 2.0): Promise<string | null> => {\n    try {\n        // Create a temporary container\n        const tempId = `temp-chart-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n        const tempContainer = document.createElement('div');\n        tempContainer.id = tempId;\n        tempContainer.style.position = 'absolute';\n        tempContainer.style.left = '-9999px';\n        tempContainer.style.top = '-9999px';\n        document.body.appendChild(tempContainer);\n\n        // Embed the chart\n        const result = await embed('#' + tempId, spec, { \n            actions: false, \n            renderer: \"canvas\",\n            scaleFactor: scale\n        });\n\n        // Use toImageURL for better quality\n        const pngDataUrl = await result.view.toImageURL('png', scale);\n\n        // Clean up\n        document.body.removeChild(tempContainer);\n\n        return pngDataUrl;\n    } catch (error) {\n        console.error('Error converting Vega-Lite spec to PNG:', error);\n        return null;\n    }\n};\n"
  },
  {
    "path": "src/views/EncodingShelfThread.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { FC } from 'react'\nimport { useSelector } from 'react-redux'\nimport { DataFormulatorState, dfSelectors } from '../app/dfSlice';\n\nimport {\n    Box,\n} from '@mui/material';\n\nimport React from 'react';\n\nimport { Chart } from \"../components/ComponentType\";\n\n\nimport '../scss/EncodingShelf.scss';\nimport { Type } from '../data/types';\n\nimport { getChartTemplate } from '../components/ChartTemplates';\nimport { checkChartAvailability, generateChartSkeleton } from './VisualizationView';\n\nimport { InsightIcon } from '../icons';\n\n\nimport { EncodingShelfCard } from './EncodingShelfCard';\n\n// Property and state of an encoding shelf\nexport interface EncodingShelfThreadProps { \n    chartId: string,\n}\n\nexport let ChartElementFC: FC<{\n    chart: Chart, \n    tableRows: any[], \n    tableMetadata: {[key: string]: {type: Type, semanticType: string, levels: any[]}}, \n    boxWidth?: number, boxHeight?: number}> = function({chart, tableRows, tableMetadata, boxWidth, boxHeight}) {\n\n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n\n    let WIDTH = boxWidth || 120;\n    let HEIGHT = boxHeight || 80;\n\n    let chartTemplate = getChartTemplate(chart.chartType);\n\n    let available = checkChartAvailability(chart, conceptShelfItems, tableRows);\n\n    if (chart.chartType == \"Auto\") {\n        return <Box sx={{ position: \"relative\", display: \"flex\", flexDirection: \"column\", margin: 'auto', color: 'darkgray' }}>\n            <InsightIcon fontSize=\"large\"/>\n        </Box>\n    }\n\n    if (!available || chart.chartType == \"Table\") {\n        return <Box sx={{ margin: \"auto\" }} >\n            {generateChartSkeleton(chartTemplate?.icon, 64, 64)}\n        </Box>\n    } \n\n    // Use cached thumbnail from ChartRenderService when available\n    if (chart.thumbnail) {\n        return (\n            <Box sx={{ margin: \"auto\", display: 'flex', justifyContent: 'center', alignItems: 'center',\n                       backgroundColor: chart.saved ? \"rgba(255,215,0,0.05)\" : \"white\" }}>\n                <img \n                    src={chart.thumbnail} \n                    alt={`${chart.chartType} chart`}\n                    style={{ maxWidth: WIDTH, maxHeight: HEIGHT, objectFit: 'contain' }} \n                />\n            </Box>\n        );\n    }\n\n    // Fallback: skeleton while ChartRenderService is processing\n    return (\n        <Box sx={{ margin: \"auto\", display: 'flex', justifyContent: 'center', alignItems: 'center',\n                   width: WIDTH, height: HEIGHT }}>\n            {generateChartSkeleton(chartTemplate?.icon, 48, 48, 0.3)}\n        </Box>\n    );\n}\n\nexport const EncodingShelfThread: FC<EncodingShelfThreadProps> = function ({ chartId }) {\n\n    const encodingShelf = (\n        <Box className=\"encoding-shelf-compact\" sx={{height: '100%',\n            width: 236,\n            overflowY: 'auto',\n            transition: 'height 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n            display: 'flex',\n            flexDirection: 'column',\n            alignItems: 'center',\n            px: '8px',\n            pt: '8px',\n        }}>\n            <EncodingShelfCard chartId={chartId}/>\n        </Box>\n    )\n\n    return encodingShelf;\n}\n"
  },
  {
    "path": "src/views/ExampleSessions.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React from 'react';\nimport {\n    Typography,\n    Box,\n    Card,\n    CardContent,\n    Chip,\n    alpha,\n    useTheme,\n} from '@mui/material';\nimport { StreamIcon } from '../icons';\n\n// Example session data for pre-built sessions\nexport interface ExampleSession {\n    id: string;\n    title: string;\n    description: string;\n    previewImage: string;\n    dataFile: string;\n    live: boolean;\n}\n\nexport const exampleSessions: ExampleSession[] = [\n    {\n        id: 'stock-prices-live',\n        title: 'Stock Prices (Live)',\n        description: 'Live stock prices for different companies',\n        previewImage: '/screenshot-stock-price-live-thumbnail.webp',\n        dataFile: '/df_stock_prices_live.json',\n        live: true,\n    },\n    {\n        id: 'gas-prices',\n        title: 'Gas Prices',\n        description: 'Weekly gas prices across different grades and formulations',\n        previewImage: '/gas_prices-thumbnail.webp',\n        dataFile: '/df_gas_prices.json',\n        live: false,\n    },\n    {\n        id: 'global-energy',\n        title: 'Global Energy',\n        description: 'Explore global energy consumption and CO2 emissions data',\n        previewImage: '/global_energy-thumbnail.webp',\n        dataFile: '/df_global_energy.json', \n        live: false,\n    },\n    {\n        id: 'movies',\n        title: 'Movies',\n        description: 'Analyze movie performance, budgets, and ratings data',\n        previewImage: '/movies-thumbnail.webp',\n        dataFile: '/df_movies.json',\n        live: false,\n    },\n    {\n        id: 'unemployment',\n        title: 'Unemployment',\n        description: 'Unemployment rates across different industries over time',\n        previewImage: '/unemployment-thumbnail.webp',\n        dataFile: '/df_unemployment.json',\n        live: false,\n    }\n];\n\n// Session card component for displaying example sessions\nexport const ExampleSessionCard: React.FC<{\n    session: ExampleSession;\n    theme: any;\n    onClick: () => void;\n    disabled?: boolean;\n}> = ({ session, theme, onClick, disabled }) => {\n    return (\n        <Card\n            variant=\"outlined\"\n            sx={{\n                cursor: disabled ? 'default' : 'pointer',\n                '&:hover': disabled ? {} : {\n                    transform: 'translateY(-2px)',\n                    borderColor: session.live ? alpha(theme.palette.secondary.main, 0.4) : alpha(theme.palette.primary.main, 0.4),\n                },\n            }}\n            onClick={disabled ? undefined : onClick}\n        >\n            <Box\n                sx={{\n                    height: 100,\n                    display: 'flex',\n                    alignItems: 'center',\n                    justifyContent: 'center',\n                    position: 'relative',\n                    overflow: 'hidden'\n                }}\n            >\n                <Box\n                    component=\"img\"\n                    src={session.previewImage}\n                    alt={session.title}\n                    sx={{\n                        width: '100%',\n                        height: '100%',\n                        objectFit: 'cover',\n                        opacity: 0.8\n                    }}\n                />\n            </Box>\n\n            {/* Content */}\n            <CardContent sx={{ display: 'flex', flexDirection: 'column', justifyContent: 'space-between', py: 1,\n                '&:last-child': { pb: 1 }\n             }}>\n                {/* Header */}\n                <Box>\n                    <Typography\n                        variant=\"subtitle2\"\n                        sx={{\n                            fontSize: '12px',\n                            color: theme.palette.text.secondary,\n                            display: '-webkit-box',\n                            WebkitLineClamp: 2,\n                            WebkitBoxOrient: 'vertical',\n                            overflow: 'hidden'\n                        }}\n                    >\n                        {session.live && <StreamIcon sx={{ fontSize: 10, color: 'success.main' }} />} <span style={{textDecoration: 'underline'}}>{session.title}:</span> {session.description}\n                    </Typography>\n                </Box>\n            </CardContent>\n        </Card>\n    );\n};\n"
  },
  {
    "path": "src/views/ExplComponents.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { FC, useState } from 'react';\nimport {\n    Box,\n    Card,\n    CardContent,\n    Typography,\n    IconButton,\n    Tooltip,\n    Chip,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { alpha } from '@mui/material/styles';\nimport { borderColor, shadow, transition, radius } from '../app/tokens';\nimport 'katex/dist/katex.min.css';\nimport { InlineMath, BlockMath } from 'react-katex';\n\nimport LightbulbIcon from '@mui/icons-material/Lightbulb';\nimport InfoIcon from '@mui/icons-material/Info';\n\n// Helper function to render text with LaTeX math expressions\nconst renderWithMath = (text: string) => {\n\n    const parts: Array<{ type: 'text' | 'inline' | 'block', content: string }> = [];\n    let currentIndex = 0;\n    let currentText = '';\n    \n    while (currentIndex < text.length) {\n        // Check for block math \\[ ... \\]\n        if (text.slice(currentIndex, currentIndex + 2) === '\\\\[') {\n            // Save any accumulated text\n            if (currentText) {\n                parts.push({ type: 'text', content: currentText });\n                currentText = '';\n            }\n            \n            // Find the closing \\]\n            let blockEnd = currentIndex + 2;\n            let braceCount = 0;\n            while (blockEnd < text.length) {\n                if (text.slice(blockEnd, blockEnd + 2) === '\\\\]') {\n                    break;\n                }\n                if (text[blockEnd] === '{') braceCount++;\n                if (text[blockEnd] === '}') braceCount--;\n                blockEnd++;\n            }\n            \n            if (blockEnd < text.length) {\n                // Found complete block math\n                const mathContent = text.slice(currentIndex + 2, blockEnd);\n                parts.push({ type: 'block', content: mathContent });\n                currentIndex = blockEnd + 2;\n            } else {\n                // No closing bracket found, treat as text\n                currentText += text[currentIndex];\n                currentIndex++;\n            }\n        }\n        // Check for inline math \\( ... \\)\n        else if (text.slice(currentIndex, currentIndex + 2) === '\\\\(') {\n            // Save any accumulated text\n            if (currentText) {\n                parts.push({ type: 'text', content: currentText });\n                currentText = '';\n            }\n            \n            // Find the closing \\)\n            let inlineEnd = currentIndex + 2;\n            let braceCount = 0;\n            while (inlineEnd < text.length) {\n                if (text.slice(inlineEnd, inlineEnd + 2) === '\\\\)') {\n                    break;\n                }\n                if (text[inlineEnd] === '{') braceCount++;\n                if (text[inlineEnd] === '}') braceCount--;\n                inlineEnd++;\n            }\n            \n            if (inlineEnd < text.length) {\n                // Found complete inline math\n                const mathContent = text.slice(currentIndex + 2, inlineEnd);\n                parts.push({ type: 'inline', content: mathContent });\n                currentIndex = inlineEnd + 2;\n            } else {\n                // No closing bracket found, treat as text\n                currentText += text[currentIndex];\n                currentIndex++;\n            }\n        }\n        // Regular character\n        else {\n            currentText += text[currentIndex];\n            currentIndex++;\n        }\n    }\n    \n    // Add any remaining text\n    if (currentText) {\n        parts.push({ type: 'text', content: currentText });\n    }\n    \n    return parts.map((part, index) => {\n        if (part.type === 'inline') {\n            try {\n                return <InlineMath key={index} math={part.content} />;\n            } catch (error) {\n                return <span key={index}>{`\\\\(${part.content}\\\\)`}</span>;\n            }\n        } else if (part.type === 'block') {\n            try {\n                return <BlockMath key={index} math={part.content} />;\n            } catch (error) {\n                return <span key={index}>{`\\\\[${part.content}\\\\]`}</span>;\n            }\n        } else {\n            return <span key={index}>{part.content}</span>;\n        }\n    });\n};\n\n// Styled components for the concept explanation cards\nconst ConceptExplanationCard = styled(Card, {\n    shouldForwardProp: (prop) => prop !== 'secondary',\n})<{ secondary: boolean }>(({ theme, secondary}) => ({\n    minWidth: 360,  // Increased from 300\n    maxWidth: 480,  // Increased from 360\n    margin: '4px',\n\n    borderRadius: '6px',\n    border: `1px solid ${borderColor.divider}`,\n    boxShadow: shadow.sm,\n    transition: transition.normal,\n    backgroundColor: alpha(theme.palette.background.paper, 0.9),\n    '&:hover': {\n        boxShadow: shadow.lg,\n        borderColor: !secondary ? theme.palette.primary.light : theme.palette.secondary.light, \n        transform: 'translateY(-1px)',\n    },\n}));\n\nconst ConceptName = styled(Typography, {\n    shouldForwardProp: (prop) => prop !== 'secondary',\n})<{ secondary: boolean }>(({ theme, secondary }) => ({\n    fontSize: '12px',\n    fontWeight: 600,\n    color: secondary ? theme.palette.secondary.main : theme.palette.primary.main,\n    marginBottom: '3px',\n    display: 'flex',\n    alignItems: 'center',\n    gap: '4px',\n}));\n\nconst ConceptExplanation = styled(Typography)(({ theme }) => ({\n    fontSize: '11px',\n    lineHeight: 1.4,\n    overflow: 'auto',\n    color: theme.palette.text.primary,\n    fontStyle: 'italic',\n    '& .katex': {\n        fontSize: '12px',\n        lineHeight: 1.2,\n    },\n    '& .katex-display': {\n        margin: '4px 0',\n    },\n}));\n\nexport interface ConceptExplanationItem {\n    field: string;\n    explanation: string;\n}\n\nexport interface ConceptExplCardsProps {\n    concepts: ConceptExplanationItem[];\n    title?: string;\n    maxCards?: number;\n}\n\nexport const ConceptExplCards: FC<ConceptExplCardsProps> = ({ \n    concepts, \n    maxCards = 8 \n}) => {\n    const [expanded, setExpanded] = useState(false);\n\n    if (!concepts || concepts.length === 0) {\n        return null;\n    }\n\n    const displayConcepts = expanded ? concepts : concepts.slice(0, maxCards);\n    const hasMoreConcepts = concepts.length > maxCards;\n\n\n    return (\n        <Box sx={{ position: 'relative', display: 'flex', justifyContent: 'center' }}>\n            {/* Concepts Grid */}\n            <Box sx={{ \n                    display: 'grid', \n                    gridTemplateColumns: 'repeat(auto-fill, minmax(360px, 1fr))',  // Increased from 180px\n                    gap: 1,\n                    overflow: 'hidden',\n                }}>\n                    {displayConcepts.map((concept, index) => {\n                        let secondary = concept.field == \"Statistical Analysis\";\n                        return (\n                        <ConceptExplanationCard key={`${concept.field}-${index}`} secondary={secondary}>\n                            <CardContent sx={{ padding: '6px !important' }}>\n                                <ConceptName secondary={secondary}>\n                                    {concept.field}\n                                </ConceptName>\n                                <ConceptExplanation>\n                                    {renderWithMath(concept.explanation)}\n                                </ConceptExplanation>\n                            </CardContent>\n                        </ConceptExplanationCard>\n                    )})}\n                </Box>\n\n                {/* Show More/Less Button */}\n                {hasMoreConcepts && (\n                    <Box sx={{ \n                        display: 'flex', \n                        justifyContent: 'center', \n                        marginTop: 1,\n                        paddingTop: 1,\n                        borderTop: `1px solid ${borderColor.divider}`,\n                    }}>\n                        <Tooltip title={expanded ? \"Show fewer concepts\" : \"Show all concepts\"}>\n                            <IconButton\n                                size=\"small\"\n                                onClick={() => setExpanded(!expanded)}\n                                sx={{\n                                    fontSize: '10px',\n                                    color: 'text.secondary',\n                                    '&:hover': {\n                                        backgroundColor: 'action.hover',\n                                    },\n                                }}\n                            >\n                                <Typography variant=\"caption\">\n                                    {expanded \n                                        ? `Show first ${maxCards} concepts` \n                                        : `Show all ${concepts.length} concepts`\n                                    }\n                                </Typography>\n                            </IconButton>\n                        </Tooltip>\n                </Box>\n            )}\n        </Box>\n    );\n};\n\n// Helper function to extract concept explanations from table derivation\nexport const extractConceptExplanations = (table: any): ConceptExplanationItem[] => {\n    if (!table?.derive?.explanation?.concepts) {\n        return [];\n    }\n\n    return table.derive.explanation.concepts.map((concept: any) => ({\n        field: concept.field,\n        explanation: concept.explanation,\n    }));\n}; \n\n\n// Shared component for data transformation cards\nexport const CodeExplanationCard: FC<{\n    title: string;\n    icon: React.ReactNode;\n    children: React.ReactNode;\n}> = ({ title, icon, children }) => (\n    <Card \n        variant=\"outlined\"\n        sx={{\n            minWidth: \"280px\", \n            maxWidth: \"1200px\", \n            display: \"flex\", \n            flexGrow: 1, \n            margin: 0,\n            borderRadius: radius.md,\n            border: `1px solid ${borderColor.divider}`,\n            boxShadow: shadow.sm,\n            transition: transition.normal,\n            '&:hover': {\n                boxShadow: shadow.lg,\n                borderColor: 'primary.main',\n            }\n        }}\n    >\n        <CardContent \n            sx={{\n                display: \"flex\", \n                flexDirection: \"column\", \n                flexGrow: 1, \n                padding: 0,\n                overflow: 'auto',\n                '&:last-child': { paddingBottom: 0 }\n            }}\n        >\n            <Typography \n                sx={{ \n                    fontSize: 14, \n                    margin: 1.5,\n                    fontWeight: 500,\n                    color: 'text.primary',\n                    display: 'flex',\n                    alignItems: 'center',\n                    gap: 0.5\n\n                }}\n                gutterBottom\n            >\n                {icon}\n                {title}\n            </Typography>\n            <Box \n                sx={{\n                    display: 'flex', \n                    flexDirection: \"row\", \n                    alignItems: \"flex-start\", \n                    flex: 'auto', \n                    padding: 1.5, \n                    background: 'background.default',\n                    borderTop: `1px solid ${borderColor.divider}`,\n                    borderRadius: '0 0 8px 8px'\n                }}\n            >\n                {children}\n            </Box>\n        </CardContent>\n    </Card>\n);\n"
  },
  {
    "path": "src/views/MessageSnackbar.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as React from 'react';\nimport Snackbar from '@mui/material/Snackbar';\nimport IconButton from '@mui/material/IconButton';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { DataFormulatorState, dfActions } from '../app/dfSlice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Alert, Box, Paper, Tooltip, Typography } from '@mui/material';\nimport { shadow, transition } from '../app/tokens';\nimport InfoIcon from '@mui/icons-material/Info';\nimport DeleteIcon from '@mui/icons-material/Delete';\n\nexport interface Message {\n    type: \"success\" | \"info\" | \"error\" | \"warning\",\n    component: string, // the component that generated the message\n    timestamp: number,\n    value: string,\n    detail?: string, // error details\n    code?: string // if this message is related to a code error, include code as well\n}\n\nconst TYPE_SYMBOLS: Record<string, string> = {\n    error: '✗',\n    warning: '⚠',\n    info: 'ℹ',\n    success: '✓',\n};\n\nconst TYPE_COLORS: Record<string, string> = {\n    error: '#d32f2f',\n    warning: '#ed6c02',\n    info: '#0288d1',\n    success: '#2e7d32',\n};\n\n// Helper function to format timestamp\nconst formatTimestamp = (timestamp: number) => {\n    const timestampMs = timestamp < 1e12 ? timestamp * 1000 : timestamp;\n    return new Date(timestampMs).toLocaleString('en-US', { \n        hour: \"2-digit\", \n        minute: \"2-digit\", \n        hour12: false\n    });\n};\n\nexport const MessageSnackbar = React.memo(function MessageSnackbar() {\n  \n    const messages = useSelector((state: DataFormulatorState) => state.messages);\n    const displayedMessageIdx = useSelector((state: DataFormulatorState) => state.displayedMessageIdx);\n    \n    const dispatch = useDispatch();\n\n    const [openLastMessage, setOpenLastMessage] = React.useState(false);\n    const [latestMessage, setLatestMessage] = React.useState<Message | undefined>();\n\n    const [openMessages, setOpenMessages] = React.useState(false);\n    const [expandedMessages, setExpandedMessages] = React.useState<Set<number>>(new Set());\n\n    const messagesScrollRef = React.useRef<HTMLDivElement>(null);\n\n    React.useEffect(()=>{\n        if (displayedMessageIdx < messages.length) {\n            setOpenLastMessage(true);\n            setLatestMessage(messages[displayedMessageIdx]);\n            dispatch(dfActions.setDisplayedMessageIndex(displayedMessageIdx + 1));\n        }\n    }, [messages])\n\n    React.useEffect(() => {\n        messagesScrollRef.current?.scrollTo({ \n            top: messagesScrollRef.current.scrollHeight,\n            behavior: 'smooth' \n        });\n    }, [messages, openMessages]);\n\n    const handleClose = (event: React.SyntheticEvent | Event, reason?: string) => {\n        if (reason === 'clickaway') { return; }\n        setOpenLastMessage(false);\n        setLatestMessage(undefined);\n    };\n\n    // Only compute grouped messages when panel is open — show latest 30 messages only\n    const MAX_DISPLAY_MESSAGES = 30;\n    const groupedMessages = React.useMemo(() => {\n        if (!openMessages) return [];\n        const groups: Array<Message & { count: number; originalIndex: number }> = [];\n        \n        // Only process the latest 30 messages\n        const startIdx = Math.max(0, messages.length - MAX_DISPLAY_MESSAGES);\n        for (let i = startIdx; i < messages.length; i++) {\n            const msg = messages[i];\n            const key = `${msg.value}|${msg.detail || ''}|${msg.code || ''}|${msg.type}`;\n            \n            const lastGroup = groups[groups.length - 1];\n            const lastKey = lastGroup ? `${lastGroup.value}|${lastGroup.detail || ''}|${lastGroup.code || ''}|${lastGroup.type}` : null;\n            \n            if (lastKey === key) {\n                lastGroup.count++;\n                if (msg.timestamp > lastGroup.timestamp) {\n                    lastGroup.timestamp = msg.timestamp;\n                }\n            } else {\n                groups.push({ ...msg, count: 1, originalIndex: i });\n            }\n        }\n        return groups;\n    }, [messages, openMessages]);\n\n    const toggleExpand = React.useCallback((index: number) => {\n        setExpandedMessages(prev => {\n            const next = new Set(prev);\n            if (next.has(index)) next.delete(index);\n            else next.add(index);\n            return next;\n        });\n    }, []);\n\n    return (\n        <Box sx={{ '& .snackbar-button': {\n            width: 36,\n            height: 36,\n            zIndex: 10,\n            backgroundColor: 'white',\n            '&:hover': {\n                transform: 'scale(1.1)',\n                backgroundColor: 'white',\n            },\n            border: '1px solid',\n            boxShadow: shadow.xl,\n            transition: transition.slow\n        }}}>\n            <Tooltip placement=\"left\" title=\"view system messages\">\n                <IconButton \n                    className='snackbar-button'\n                    color=\"warning\"\n                    sx={{position: \"absolute\", bottom: 16, right: 16 }}\n                    onClick={() => setOpenMessages(true)}\n                >\n                    <InfoIcon sx={{fontSize: 32}}/>\n                </IconButton>\n            </Tooltip>\n            <Snackbar\n                open={openMessages}\n                anchorOrigin={{vertical: 'bottom', horizontal: 'right'}}\n                sx={{maxWidth: '500px', maxHeight: '70vh'}}\n            >\n                <Paper elevation={3} sx={{\n                    width: '100%',\n                    color: 'text.primary',\n                    display: 'flex',\n                    flexDirection: 'column',\n                    minWidth: '300px',\n                    py: 1,\n                }}>\n                    {/* Header */}\n                    <Box sx={{display: 'flex', alignItems: 'center', px: 1.5}}>\n                        <Typography variant=\"subtitle1\" sx={{fontSize: 12, flexGrow: 1, color: 'text.secondary'}}>\n                            system messages ({messages.length}){messages.length > MAX_DISPLAY_MESSAGES ? ` — showing latest ${MAX_DISPLAY_MESSAGES}` : ''}\n                        </Typography>\n                        <Tooltip title=\"clear all messages\">\n                            <IconButton\n                                size=\"small\"\n                                color=\"warning\"\n                                aria-label=\"delete\"\n                                onClick={() => {\n                                    dispatch(dfActions.clearMessages());\n                                    dispatch(dfActions.setDisplayedMessageIndex(0));\n                                    setOpenMessages(false);\n                                }}\n                            >\n                                <DeleteIcon fontSize=\"small\" />\n                            </IconButton>\n                        </Tooltip>\n                        <IconButton\n                            size=\"small\"\n                            aria-label=\"close\"\n                            onClick={() => setOpenMessages(false)}\n                        >\n                            <CloseIcon fontSize=\"small\" />\n                        </IconButton>\n                    </Box>\n                    {/* Message list — plain text, no MUI Alert per row */}\n                    <div \n                        ref={messagesScrollRef}\n                        style={{\n                            overflow: 'auto',\n                            flexGrow: 1,\n                            maxHeight: '50vh',\n                            minHeight: 100,\n                            padding: '4px 12px',\n                        }}\n                    >\n                        {messages.length === 0 && (\n                            <Typography fontSize={10} sx={{ opacity: 0.5, fontStyle: 'italic' }}>No messages yet</Typography>\n                        )}\n                        {groupedMessages.map((msg, index) => {\n                            const color = TYPE_COLORS[msg.type] || '#333';\n                            const symbol = TYPE_SYMBOLS[msg.type] || '•';\n                            const hasDetails = !!(msg.detail || msg.code);\n                            const isExpanded = expandedMessages.has(index);\n                            return (\n                                <div key={index} style={{ borderBottom: '1px solid #f0f0f0', padding: '2px 0' }}>\n                                    <Typography fontSize={10} component=\"div\" sx={{ display: 'flex', alignItems: 'baseline', gap: 0.5 }}>\n                                        <span style={{ color, fontWeight: 600 }}>{symbol}</span>\n                                        <span style={{ color: '#888' }}>[{formatTimestamp(msg.timestamp)}]</span>\n                                        <span>(<span style={{ color: '#888' }}>{msg.component}</span>) {msg.value}</span>\n                                        {msg.count > 1 && (\n                                            <span style={{ \n                                                color, fontWeight: 600,\n                                                border: `1px solid ${color}`, borderRadius: 3,\n                                                padding: '0 3px', marginLeft: 2\n                                            }}>×{msg.count}</span>\n                                        )}\n                                        {hasDetails && (\n                                            <span \n                                                style={{ color: '#0288d1', cursor: 'pointer', userSelect: 'none' }}\n                                                onClick={() => toggleExpand(index)}\n                                            >\n                                                {isExpanded ? '▾ collapse' : '▸ details'}\n                                            </span>\n                                        )}\n                                    </Typography>\n                                    {hasDetails && isExpanded && (\n                                        <div style={{ marginLeft: 20, padding: '4px 0', color: '#555' }}>\n                                            {msg.detail && (\n                                                <div style={{ marginBottom: 4 }}>\n                                                    <Typography fontSize={10} sx={{ color: '#888' }}>— details —</Typography>\n                                                    <Typography fontSize={10}>{msg.detail}</Typography>\n                                                </div>\n                                            )}\n                                            {msg.code && (\n                                                <div>\n                                                    <Typography fontSize={10} sx={{ color: '#888' }}>— code —</Typography>\n                                                    <pre style={{ \n                                                        whiteSpace: 'pre-wrap', \n                                                        wordBreak: 'break-word',\n                                                        fontSize: 10,\n                                                        margin: '2px 0',\n                                                        padding: '4px 8px',\n                                                        backgroundColor: '#f8f8f8',\n                                                        borderRadius: 3,\n                                                    }}>\n                                                        {msg.code.split('\\n').filter(line => line.trim() !== '').join('\\n')}\n                                                    </pre>\n                                                </div>\n                                            )}\n                                        </div>\n                                    )}\n                                </div>\n                            );\n                        })}\n                    </div>\n                </Paper>\n            </Snackbar>\n            \n            {/* Last message toast — keep the single Alert for latest message popup */}\n            {latestMessage != undefined ? <Snackbar\n                open={openLastMessage}\n                autoHideDuration={latestMessage?.type == \"error\" ? 20000 : 10000}\n                anchorOrigin={{vertical: 'bottom', horizontal: 'right'}}\n                onClose={handleClose}\n            >\n                <Alert onClose={handleClose} severity={latestMessage?.type} sx={{ maxWidth: '400px', maxHeight: '600px', overflow: 'auto' }}>\n                    <Typography fontSize={12} component=\"span\" sx={{margin: \"auto\"}}>\n                        <b>[{formatTimestamp(latestMessage.timestamp)}] ({latestMessage.component})</b> {latestMessage?.value}\n                    </Typography> \n                    {latestMessage?.detail && <>\n                        <div style={{ borderTop: '1px solid #ddd', margin: '4px 0', fontSize: 12 }}>{latestMessage.detail}</div>\n                    </>}\n                    {latestMessage?.code && \n                        <pre style={{ whiteSpace: 'pre-wrap', wordBreak: 'break-word', fontSize: 10, opacity: 0.7, margin: '4px 0' }}>\n                            {latestMessage.code.split('\\n').filter(line => line.trim() !== '').join('\\n')}\n                        </pre>\n                    }\n                </Alert>    \n            </Snackbar> : \"\"}\n        </Box>\n    );\n});"
  },
  {
    "path": "src/views/ModelSelectionDialog.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useEffect, useState } from 'react';\nimport '../scss/App.scss';\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { \n    DataFormulatorState,\n    dfActions,\n    ModelConfig,\n    dfSelectors,\n} from '../app/dfSlice'\n\nimport _ from 'lodash';\n\nimport {\n    Button,\n    Tooltip,\n    Typography,\n    IconButton,\n    DialogTitle,\n    Dialog,\n    DialogContent,\n    DialogActions,\n    Radio,\n    TextField,\n    TableContainer,\n    TableHead,\n    Table,\n    TableCell,\n    TableRow,\n    TableBody,\n    Autocomplete,\n    CircularProgress,\n    FormControl,\n    Select,\n    SelectChangeEvent,\n    MenuItem,\n    OutlinedInput,\n    Paper,\n    Box,\n    Divider,\n    Checkbox,\n} from '@mui/material';\n\n\nimport { alpha, styled, useTheme } from '@mui/material/styles';\n\nimport AddCircleIcon from '@mui/icons-material/AddCircle';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport VisibilityOffIcon from '@mui/icons-material/VisibilityOff';\nimport CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';\nimport ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';\nimport HelpOutlineIcon from '@mui/icons-material/HelpOutline';\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\n\nimport { getUrls, fetchWithIdentity } from '../app/utils';\n\n\nconst decodeHtmlEntities = (text: string): string => {\n    const textarea = document.createElement('textarea');\n    textarea.innerHTML = text;\n    return textarea.value;\n};\n\n// Add this helper function at the top of the file, after the imports\nconst simpleHash = (str: string): string => {\n    let hash = 0;\n    for (let i = 0; i < str.length; i++) {\n        const char = str.charCodeAt(i);\n        hash = ((hash << 5) - hash) + char;\n        hash = hash & hash; // Convert to 32-bit integer\n    }\n    return Math.abs(hash).toString(36);\n};\n\nexport const ModelSelectionButton: React.FC<{}> = ({ }) => {\n    const theme = useTheme();\n\n    const dispatch = useDispatch();\n    const models = useSelector((state: DataFormulatorState) => state.models);\n    const selectedModelId = useSelector((state: DataFormulatorState) => state.selectedModelId);\n    const testedModels = useSelector((state: DataFormulatorState) => state.testedModels);\n\n    const [modelDialogOpen, setModelDialogOpen] = useState<boolean>(false);\n    const [showKeys, setShowKeys] = useState<boolean>(false);\n    const [providerModelOptions, setProviderModelOptions] = useState<{[key: string]: string[]}>({\n        'openai': [],\n        'azure': [],\n        'anthropic': [],\n        'gemini': [],\n        'ollama': []\n    });\n    const serverConfig = useSelector((state: DataFormulatorState) => state.serverConfig);\n\n    let updateModelStatus = (model: ModelConfig, status: 'ok' | 'error' | 'testing' | 'unknown', message: string) => {\n        dispatch(dfActions.updateModelStatus({id: model.id, status, message}));\n    }\n    let getStatus = (id: string | undefined) => {\n        return id != undefined ? (testedModels.find(t => (t.id == id))?.status || 'unknown') : 'unknown';\n    }\n\n    // Helper functions for slot management\n    const [tempSelectedModelId, setTempSelectedModelId] = useState<string | undefined>(selectedModelId);\n    const [newEndpoint, setNewEndpoint] = useState<string>(\"\"); // openai, azure, ollama etc\n    const [newModel, setNewModel] = useState<string>(\"\");\n    const [newApiKey, setNewApiKey] = useState<string>(\"\");\n    const [newApiBase, setNewApiBase] = useState<string>(\"\");\n    const [newApiVersion, setNewApiVersion] = useState<string>(\"\");\n\n    // Fetch available models from the API\n    useEffect(() => {\n        const fetchModelOptions = async () => {\n            try {\n                const response = await fetchWithIdentity(getUrls().CHECK_AVAILABLE_MODELS);\n                const data = await response.json();\n                \n                // Group models by provider\n                const modelsByProvider: {[key: string]: string[]} = {\n                    'openai': [],\n                    'azure': [],\n                    'anthropic': [],\n                    'gemini': [],\n                    'ollama': []\n                };\n                \n                data.forEach((modelConfig: any) => {\n                    const provider = modelConfig.endpoint;\n                    const model = modelConfig.model;\n\n                    if (provider && model && !modelsByProvider[provider]) {\n                        modelsByProvider[provider] = [];\n                    }\n                    \n                    if (provider && model && !modelsByProvider[provider].includes(model)) {\n                        modelsByProvider[provider].push(model);\n                    }\n                });\n                \n                setProviderModelOptions(modelsByProvider);\n                \n            } catch (error) {\n                console.error(\"Failed to fetch model options:\", error);\n            } \n        };\n        \n        fetchModelOptions();\n    }, []);\n\n\n    let modelExists = models.some(m => \n        m.endpoint == newEndpoint && m.model == newModel && m.api_base == newApiBase \n        && m.api_key == newApiKey && m.api_version == newApiVersion);\n\n    let testModel = (model: ModelConfig) => {\n        updateModelStatus(model, 'testing', \"\");\n        let message = {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json', },\n            body: JSON.stringify({\n                model: model,\n            }),\n        };\n        fetchWithIdentity(getUrls().TEST_MODEL, {...message })\n            .then((response) => response.json())\n            .then((data) => {\n                let status = data[\"status\"] || 'error';\n                updateModelStatus(model, status, data[\"message\"] || \"\");\n                // Auto-select the first good model if none is currently selected\n                if (status === 'ok' && !tempSelectedModelId) {\n                    setTempSelectedModelId(model.id);\n                }\n            }).catch((error) => {\n                updateModelStatus(model, 'error', error.message)\n            });\n    }\n\n    let readyToTest = newModel && (newApiKey || newApiBase);\n\n    let newModelEntry = <TableRow\n        key={`new-model-entry`}\n        sx={{ '&:last-child td, &:last-child th': { border: 0 }, \n        padding: \"6px 6px\"}}\n    >\n        <TableCell align=\"left\" sx={{ width: '120px' }}>\n            <Autocomplete\n                freeSolo\n                value={newEndpoint}\n                onChange={(event: any, newValue: string | null) => {\n                    setNewEndpoint(newValue || \"\");\n                    if (newModel == \"\" && newValue == \"openai\" && providerModelOptions.openai.length > 0) {\n                        setNewModel(providerModelOptions.openai[0]);\n                    }\n                    if (!newApiVersion && newValue == \"azure\") {\n                        setNewApiVersion(\"2024-02-15\");\n                    }\n                }}\n                options={['openai', 'azure', 'ollama', 'anthropic', 'gemini']}\n                renderOption={(props, option) => (\n                    <Typography {...props} onClick={() => setNewEndpoint(option)} sx={{fontSize: \"0.875rem\"}}>\n                        {option}\n                    </Typography>\n                )}\n                renderInput={(params) => (\n                    <TextField\n                        {...params}\n                        placeholder=\"provider\"\n                        slotProps={{\n                            input: {\n                                ...params.InputProps,\n                                style: { fontSize: \"0.75rem\" }\n                            }\n                        }}\n                        size=\"small\"\n                        onChange={(event: any) => setNewEndpoint(event.target.value)}\n                    />\n                )}\n                slotProps={{\n                    listbox: {\n                        style: { padding: 0 }\n                    },\n                }}\n                slots={{\n                    paper: (props) => {\n                        return <Paper {...props}>\n                            <Typography sx={{ p: 1, color: 'gray', fontStyle: 'italic', fontSize: '0.75rem' }}>\n                                examples\n                            </Typography>\n                            {props.children}\n                        </Paper>\n                    }\n                }}\n            />\n        </TableCell>\n        <TableCell align=\"left\" sx={{ minWidth: '180px' }}>\n            <TextField fullWidth size=\"small\" type={showKeys ? \"text\" : \"password\"} \n                slotProps={{\n                    input: {\n                        style: { fontSize: \"0.75rem\" }\n                    }\n                }}\n                placeholder='optional for keyless endpoint'\n                value={newApiKey}  \n                onChange={(event: any) => { setNewApiKey(event.target.value); }} \n                autoComplete='off'\n            />\n        </TableCell>\n        <TableCell align=\"left\">\n            <TextField\n                size=\"small\"\n                fullWidth\n                value={newModel}\n                onChange={(event) => { setNewModel(event.target.value); }}\n                placeholder=\"e.g., gpt-5.1\"\n                error={newEndpoint != \"\" && !newModel}\n                slotProps={{\n                    input: {\n                        style: { fontSize: \"0.75rem\" },\n                        'aria-label': 'Enter a model name',\n                    }\n                }}\n            />\n        </TableCell>\n        <TableCell align=\"right\">\n            <TextField size=\"small\" type=\"text\" fullWidth\n                placeholder=\"optional\"\n                slotProps={{\n                    input: {\n                        style: { fontSize: \"0.75rem\" }\n                    }\n                }}\n                value={newApiBase}  \n                onChange={(event: any) => { setNewApiBase(event.target.value); }} \n                autoComplete='off'\n            />\n        </TableCell>\n        <TableCell align=\"right\">\n            <TextField size=\"small\" type=\"text\" fullWidth\n                slotProps={{\n                    input: {\n                        style: { fontSize: \"0.75rem\" }\n                    }\n                }}\n                value={newApiVersion}  onChange={(event: any) => { setNewApiVersion(event.target.value); }} \n                autoComplete='off'\n                placeholder=\"optional\"\n            />\n        </TableCell>\n        <TableCell align=\"right\">\n            <Tooltip title={modelExists ? \"provider + model already exists\" : \"add and test model\"}>\n                <span>  \n                    <IconButton color={modelExists ? 'error' : 'primary'}\n                        disabled={!readyToTest}\n                        sx={{cursor: modelExists ? 'help' : 'pointer'}}\n                        onClick={(event) => {\n                            event.stopPropagation()\n\n                            let endpoint = newEndpoint;\n\n                            // Hash the ID to prevent API key exposure\n                            const idString = `${endpoint}-${newModel}-${newApiKey}-${newApiBase}-${newApiVersion}`;\n                            let id = simpleHash(idString);\n\n                            let model = {endpoint, model: newModel, api_key: newApiKey, api_base: newApiBase, api_version: newApiVersion, id: id};\n\n                            dispatch(dfActions.addModel(model));\n\n                            // Create a custom test function that assigns to slot on success\n                            const testAndAssignModel = (model: ModelConfig) => {\n                                updateModelStatus(model, 'testing', \"\");\n                                let message = {\n                                    method: 'POST',\n                                    headers: { 'Content-Type': 'application/json', },\n                                    body: JSON.stringify({\n                                        model: model,\n                                    }),\n                                };\n                                fetch(getUrls().TEST_MODEL, {...message })\n                                    .then((response) => response.json())\n                                    .then((data) => {\n                                        let status = data[\"status\"] || 'error';\n                                        updateModelStatus(model, status, data[\"message\"] || \"\");\n                                        // Only assign to slot if test is successful\n                                        if (status === 'ok') {\n                                            setTempSelectedModelId(id);\n                                        }\n                                    }).catch((error) => {\n                                        updateModelStatus(model, 'error', error.message)\n                                    });\n                            };\n\n                            testAndAssignModel(model); \n                            \n                            setNewEndpoint(\"\");\n                            setNewModel(\"\");\n                            setNewApiKey(\"\");\n                            setNewApiBase(\"\");\n                            setNewApiVersion(\"\");\n                        }}>\n                        <AddCircleIcon />\n                    </IconButton>\n                </span>\n            </Tooltip>\n        </TableCell>\n        <TableCell align=\"right\">\n            <Tooltip title={\"clear\"}>\n                <IconButton \n                    onClick={(event) => {\n                        event.stopPropagation()\n                        setNewEndpoint(\"\");\n                        setNewModel(\"\");\n                        setNewApiKey(\"\");\n                        setNewApiBase(\"\");\n                        setNewApiVersion(\"\");\n                    }}>\n                    <ClearIcon />\n                </IconButton>\n            </Tooltip>\n        </TableCell>\n\n    </TableRow>\n\n    let modelTable = <TableContainer>\n        <Table sx={{ minWidth: 600, \"& .MuiTableCell-root\": { padding: \"4px 8px\", borderBottom: \"none\", fontSize: '0.75rem' } }} size=\"small\" >\n            <TableHead>\n                <TableRow>\n                    <TableCell sx={{fontWeight: 'bold', width: '120px'}}>Provider</TableCell>\n                    <TableCell sx={{fontWeight: 'bold', width: '160px'}}>API Key</TableCell>\n                    <TableCell sx={{fontWeight: 'bold', width: '160px'}} align=\"left\">Model</TableCell>\n                    <TableCell sx={{fontWeight: 'bold', width: '200px'}} align=\"left\">API Base</TableCell>\n                    <TableCell sx={{fontWeight: 'bold', width: '120px'}} align=\"left\">API Version</TableCell>\n                    <TableCell sx={{fontWeight: 'bold'}} align=\"left\">Status</TableCell>\n                    <TableCell sx={{fontWeight: 'bold'}} align=\"right\"></TableCell>\n                </TableRow>\n            </TableHead>\n            <TableBody>\n                {models.map((model) => {\n                    let status =  getStatus(model.id);  \n                    \n                    let statusIcon = status  == \"unknown\" ? <HelpOutlineIcon color=\"warning\" fontSize=\"small\" /> : ( status == 'testing' ? <CircularProgress size={20} />:\n                            (status == \"ok\" ? <CheckCircleOutlineIcon color=\"success\" fontSize=\"small\"/> : <ErrorOutlineIcon color=\"error\" fontSize=\"small\"/> ))\n                    \n                    let message = \"Model is ready to use\";\n                    if (status == \"unknown\") {\n                        message = \"Click to test if this model is working\";\n                    } else if (status == \"error\") {\n                        const rawMessage = testedModels.find(t => t.id == model.id)?.message || \"Unknown error\";\n                        message = `Error: ${decodeHtmlEntities(rawMessage)}. Click to retest.`;\n                    }\n\n                    const borderStyle = ['error'].includes(status) ? '1px dashed lightgray' : undefined;\n                    const noBorderStyle = ['error'].includes(status) ? 'none' : undefined;\n                    const disabledStyle = status != 'ok' ? { cursor: 'default', opacity: 0.5 } : undefined;\n                    \n                    return (\n                        <React.Fragment key={`${model.id}`}>\n                        <TableRow\n                            key={`${model.id}`}\n                            sx={{ \n                                '& .MuiTableCell-root': { fontSize: '0.75rem' },\n                                '&:hover': { backgroundColor: '#f8f9fa' },\n                                border: tempSelectedModelId == model.id ? `2px solid ${theme.palette.primary.main}` : 'none',\n                                cursor: status == 'ok' ? 'pointer' : 'default',\n                            }}\n                            onClick={() => status == 'ok' && setTempSelectedModelId(tempSelectedModelId == model.id ? undefined : model.id)}\n                        >\n                            <TableCell align=\"left\" sx={{ borderBottom: noBorderStyle, ...disabledStyle }}>\n                                <Typography variant=\"body2\" sx={{ fontWeight: 500, fontSize: 'inherit' }}>\n                                    {model.endpoint}\n                                </Typography>\n                            </TableCell>\n                            <TableCell component=\"th\" scope=\"row\" sx={{ borderBottom: borderStyle, ...disabledStyle }}>\n                                {model.api_key ? (showKeys ? \n                                    <Typography\n                                        variant=\"body2\"\n                                        sx={{\n                                            maxWidth: '220px',\n                                            wordBreak: 'break-all',\n                                            whiteSpace: 'normal',\n                                            fontSize: '0.5rem',\n                                            fontFamily: 'monospace',\n                                            lineHeight: 1.3\n                                        }}\n                                    >\n                                        {model.api_key}\n                                    </Typography> \n                                    : <Typography variant=\"body2\" sx={{ fontSize: 'inherit', fontFamily: 'monospace', color: 'text.secondary' }}>••••••••••••</Typography>)\n                                     : <Typography sx={{color: \"text.secondary\", fontSize: 'inherit', fontStyle: 'italic'}}>None</Typography>\n                                }\n                            </TableCell>\n                            <TableCell align=\"left\" sx={{ borderBottom: borderStyle, ...disabledStyle }}>\n                                <Typography variant=\"body2\" sx={{ fontSize: 'inherit', fontWeight: 500 }}>\n                                    {model.model}\n                                </Typography>\n                            </TableCell>\n                            <TableCell align=\"left\" sx={{ borderBottom: borderStyle, ...disabledStyle }}>\n                                {model.api_base ? (\n                                    <Typography variant=\"body2\" sx={{ \n                                        fontSize: 'inherit', \n                                        maxWidth: '220px',\n                                        wordBreak: 'break-all',\n                                        lineHeight: 1.3\n                                    }}>\n                                        {model.api_base}\n                                    </Typography>\n                                ) : (\n                                    <Typography sx={{ color: \"text.secondary\", fontSize: 'inherit', fontStyle: 'italic' }}>\n                                        Default\n                                    </Typography>\n                                )}\n                            </TableCell>\n                            <TableCell align=\"left\" sx={{ borderBottom: borderStyle, ...disabledStyle }}>\n                                {model.api_version ? (\n                                    <Typography variant=\"body2\" sx={{ fontSize: 'inherit' }}>\n                                        {model.api_version}\n                                    </Typography>\n                                ) : (\n                                    <Typography sx={{ color: \"text.secondary\", fontSize: 'inherit', fontStyle: 'italic' }}>\n                                        Default\n                                    </Typography>\n                                )}\n                            </TableCell>\n                            <TableCell sx={{borderBottom: borderStyle}} align=\"left\">\n                                <Tooltip title={message}>\n                                    <Button\n                                        size=\"small\"\n                                        color={status == 'ok' ?  'success' : status == 'error' ? 'error' : 'warning'}\n                                        onClick ={() => { testModel(model)  }}\n                                        sx={{ p: 0.75, fontSize: \"0.75rem\", textTransform: \"none\" }}\n                                        startIcon={statusIcon}\n                                    >\n                                        {status == 'ok' ? 'Ready' : status == 'error' ? 'Retest' : 'Test'}\n                                    </Button>\n                                </Tooltip>\n                            </TableCell>\n                            <TableCell sx={{ borderBottom: borderStyle }} align=\"right\">\n                                <Tooltip title=\"remove model\">\n                                    <IconButton \n                                        size=\"small\"\n                                        onClick={()=>{\n                                            dispatch(dfActions.removeModel(model.id));\n                                            // Remove from all slots if assigned\n                                            if (tempSelectedModelId == model.id) {\n                                                setTempSelectedModelId(undefined);\n                                            }\n                                        }}\n                                        sx={{ p: 0.75 }}\n                                    >\n                                        <ClearIcon fontSize=\"small\"/>\n                                    </IconButton>\n                                </Tooltip>\n                            </TableCell>\n                        </TableRow>\n                        {['error'].includes(status) && (\n                            <TableRow>\n                                <TableCell colSpan={1} align=\"right\" ></TableCell>\n                                <TableCell colSpan={7}>\n                                    <Typography variant=\"caption\" color=\"#c82c2c\" sx={{fontSize: \"0.625rem\"}}>\n                                        {message} \n                                    </Typography>\n                                </TableCell>\n                            </TableRow>\n                        )}\n                        </React.Fragment>\n                    )\n                })}\n                {newModelEntry}\n                </TableBody>\n            </Table>\n    </TableContainer>\n\n    let modelNotReady = tempSelectedModelId == undefined || getStatus(tempSelectedModelId) !== 'ok';\n\n    let tempModel = models.find(m => m.id == tempSelectedModelId);\n    let tempModelName = tempModel ? `${tempModel.endpoint}/${tempModel.model}` : 'Please select a model';\n    let selectedModelName = models.find(m => m.id == selectedModelId)?.model || 'Unselected';\n\n    return <>\n        <Tooltip title=\"Select a model\">\n            <Button sx={{fontSize: \"inherit\", textTransform: \"none\"}} variant=\"text\" color={modelNotReady ? 'warning' : \"primary\"} onClick={()=>{setModelDialogOpen(true)}}>\n                {modelNotReady ? 'Select Models' : selectedModelName}\n            </Button>\n        </Tooltip>\n        <Dialog \n            maxWidth=\"lg\" \n            open={modelDialogOpen}\n            onClose={(event, reason) => {\n                if (reason !== 'backdropClick') {\n                    setModelDialogOpen(false);\n                }\n            }}\n        >\n            <DialogTitle sx={{display: \"flex\",  alignItems: \"center\"}}>Select a model</DialogTitle>\n            <DialogContent >\n            <Box sx={{\n                    display: 'flex', \n                    color: 'text.secondary',\n                    alignItems: 'flex-start', \n                    mb: 2,\n                    p: 1.5,\n                    backgroundColor: alpha(theme.palette.info.main, 0.08),\n                }}>\n                    <Box>\n                        <Typography variant=\"caption\" component=\"div\" sx={{ lineHeight: 1.6 }}>\n                            • Models with strong code generation capabilities (e.g., <code style={{ \n                                backgroundColor: alpha(theme.palette.text.primary, 0.05), \n                                padding: '1px 4px', \n                                borderRadius: 3,\n                                fontSize: '0.7rem'\n                            }}>gpt-5.1</code>, <code style={{ \n                                backgroundColor: alpha(theme.palette.text.primary, 0.05), \n                                padding: '1px 4px', \n                                borderRadius: 3,\n                                fontSize: '0.7rem'\n                            }}>claude-sonnet-4-5</code>) provide best experience.\n                        </Typography>\n                        <Typography variant=\"caption\" component=\"div\" sx={{ lineHeight: 1.6, mt: 0.5 }}>\n                            • Model configuration based on LiteLLM. <a href=\"https://docs.litellm.ai/docs/\" target=\"_blank\" rel=\"noopener noreferrer\">See supported providers</a>.\n                            Use <code style={{ \n                                backgroundColor: alpha(theme.palette.text.primary, 0.05), \n                                padding: '1px 4px', \n                                borderRadius: 3,\n                                fontSize: '0.7rem'\n                            }}>openai</code> provider for OpenAI-compatible APIs.\n                        </Typography>\n                        \n                    </Box>\n                </Box>\n                {modelTable}\n                \n            </DialogContent>\n            <DialogActions>\n                {!serverConfig.DISABLE_DISPLAY_KEYS && (\n                    <Button sx={{marginRight: 'auto'}} endIcon={showKeys ? <VisibilityOffIcon /> : <VisibilityIcon />} onClick={()=>{\n                        setShowKeys(!showKeys);}}>\n                            {showKeys ? 'hide' : 'show'} keys\n                    </Button>\n                )}\n                <Button disabled={modelNotReady} sx={{textTransform: 'none'}}\n                    variant={modelNotReady ? 'text' : 'contained'}\n                    onClick={()=>{\n                        dispatch(dfActions.selectModel(tempSelectedModelId));\n                        setModelDialogOpen(false);}}>Use {tempModelName}</Button>\n                <Button onClick={()=>{\n                    setTempSelectedModelId(selectedModelId);\n                    setModelDialogOpen(false);\n                }}>cancel</Button>\n            </DialogActions>\n        </Dialog>\n    </>;\n}\n"
  },
  {
    "path": "src/views/MultiTablePreview.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as React from 'react';\nimport { useState, useEffect } from 'react';\nimport {\n    Box,\n    Chip,\n    IconButton,\n    Typography,\n    Tooltip,\n    LinearProgress,\n    alpha,\n    Card,\n} from '@mui/material';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { DictTable } from '../components/ComponentType';\nimport { CustomReactTable } from './ReactTable';\n\nexport interface MultiTablePreviewProps {\n    /** Loading state indicator */\n    loading?: boolean;\n    /** Error message to display */\n    error?: string | null;\n    /** Single table for backwards compatibility */\n    table?: DictTable | null;\n    /** Array of tables to preview */\n    tables?: DictTable[] | null;\n    /** Label to show when no tables are available */\n    emptyLabel?: string;\n    /** Optional metadata string to display */\n    meta?: string;\n    /** Callback when a table is removed (enables delete button) */\n    onRemoveTable?: (index: number) => void;\n    /** Controlled active index */\n    activeIndex?: number;\n    /** Callback when active index changes */\n    onActiveIndexChange?: (index: number) => void;\n    /** Maximum height for the table container */\n    maxHeight?: number;\n    /** Maximum number of rows to display */\n    maxRows?: number;\n    /** Whether to use compact mode for the table */\n    compact?: boolean;\n    /** Whether to show the \"Preview\" label */\n    showPreviewLabel?: boolean;\n    /** Whether to hide the row count display */\n    hideRowCount?: boolean;\n}\n\nexport const MultiTablePreview: React.FC<MultiTablePreviewProps> = ({\n    loading = false,\n    error = null,\n    table,\n    tables,\n    emptyLabel = 'No tables to preview.',\n    meta,\n    onRemoveTable,\n    activeIndex: controlledActiveIndex,\n    onActiveIndexChange,\n    maxHeight = 200,\n    maxRows = 12,\n    compact = true,\n    hideRowCount = false,\n}) => {\n    const previewTables = tables ?? (table ? [table] : null);\n    const [internalActiveIndex, setInternalActiveIndex] = useState(0);\n    const activeIndex = controlledActiveIndex !== undefined ? controlledActiveIndex : internalActiveIndex;\n    const setActiveIndex = onActiveIndexChange || setInternalActiveIndex;\n\n    useEffect(() => {\n        if (!previewTables || previewTables.length === 0) {\n            if (onActiveIndexChange) {\n                onActiveIndexChange(0);\n            } else {\n                setInternalActiveIndex(0);\n            }\n            return;\n        }\n        if (activeIndex > previewTables.length - 1) {\n            const newIndex = previewTables.length - 1;\n            if (onActiveIndexChange) {\n                onActiveIndexChange(newIndex);\n            } else {\n                setInternalActiveIndex(newIndex);\n            }\n        }\n    }, [previewTables, activeIndex, onActiveIndexChange]);\n\n    const activeTable = previewTables && previewTables.length > 0 ? previewTables[activeIndex] : null;\n\n    return (\n        <Box\n            sx={{\n                p: 1,\n                display: 'flex',\n                flexDirection: 'column',\n                gap: 1,\n                minHeight: 120,\n            }}\n        >\n            {loading && <LinearProgress />}\n\n            {error && (\n                <Typography variant=\"caption\" color=\"error\">\n                    {error}\n                </Typography>\n            )}\n\n            {!loading && !error && (!previewTables || previewTables.length === 0) && (\n                <Typography variant=\"caption\" color=\"text.secondary\">\n                    {emptyLabel}\n                </Typography>\n            )}\n\n            {previewTables && previewTables.length > 0 && (\n                <Box>\n                    {/* Table selection chips */}\n                    <Box\n                        sx={{\n                            display: 'flex',\n                            alignItems: 'center',\n                            flexWrap: 'wrap',\n                            gap: 0.25,\n                            mb: 0.5,\n                            pb: 0.25,\n                        }}\n                    >\n                        <Typography variant=\"caption\" sx={{ mx: 0.5 }}>\n                            Preview\n                        </Typography>\n                        {previewTables.map((t, idx) => {\n                            const label = t.displayId || t.id;\n                            const isSelected = idx === activeIndex;\n                            return (\n                                <Tooltip key={`${t.id}-${idx}`} title={label} placement=\"top\" arrow>\n                                    <Chip\n                                        label={label}\n                                        size=\"small\"\n                                        onClick={() => {\n                                            if (onActiveIndexChange) {\n                                                onActiveIndexChange(idx);\n                                            } else {\n                                                setInternalActiveIndex(idx);\n                                            }\n                                        }}\n                                        sx={{\n                                            borderRadius: 1,\n                                            cursor: 'pointer',\n                                            maxWidth: 160,\n                                            backgroundColor: (theme) =>\n                                                isSelected\n                                                    ? alpha(theme.palette.primary.main, 0.12)\n                                                    : 'transparent',\n                                            borderColor: (theme) =>\n                                                isSelected\n                                                    ? alpha(theme.palette.primary.main, 0.5)\n                                                    : undefined,\n                                            color: (theme) =>\n                                                isSelected\n                                                    ? theme.palette.primary.main\n                                                    : theme.palette.text.secondary,\n                                            '& .MuiChip-label': {\n                                                fontSize: '0.625rem',\n                                                overflow: 'hidden',\n                                                textOverflow: 'ellipsis',\n                                                whiteSpace: 'nowrap',\n                                                maxWidth: 140,\n                                            },\n                                            '&:hover': {\n                                                backgroundColor: (theme) =>\n                                                    isSelected\n                                                        ? alpha(theme.palette.primary.main, 0.16)\n                                                        : alpha(theme.palette.primary.main, 0.08),\n                                            },\n                                        }}\n                                    />\n                                </Tooltip>\n                            );\n                        })}\n                        {onRemoveTable && (\n                            <Tooltip title=\"Remove table\" placement=\"top\" arrow>    \n                                <IconButton\n                                    size=\"small\"\n                                    color=\"error\"\n                                    onClick={() => onRemoveTable(activeIndex)}\n                                    sx={{ ml: 'auto', flexShrink: 0 }}\n                                    aria-label=\"Remove table\"\n                                >\n                                    <DeleteIcon fontSize=\"small\" />\n                                </IconButton>\n                            </Tooltip>\n                        )}\n                    </Box>\n\n                    {activeTable && (\n                        <Box>\n                            <Card variant=\"outlined\" sx={{ pb: 0.5 }}>\n                                <CustomReactTable\n                                    rows={activeTable.rows.slice(0, maxRows)}\n                                    columnDefs={activeTable.names.map(name => ({\n                                        id: name,\n                                        label: name,\n                                        minWidth: 60,\n                                    }))}\n                                    rowsPerPageNum={-1}\n                                    compact={compact}\n                                    isIncompleteTable={activeTable.rows.length > maxRows}\n                                    maxHeight={maxHeight}\n                                />\n                            </Card>\n                            {!hideRowCount && (\n                                <Typography variant=\"caption\" color=\"text.secondary\">\n                                    {activeTable.rows.length} rows × {activeTable.names.length} columns\n                                </Typography>\n                            )}\n                        </Box>\n                    )}\n\n                    {meta && (\n                        <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mt: 0.5, display: 'block' }}>\n                            {meta}\n                        </Typography>\n                    )}\n                </Box>\n            )}\n        </Box>\n    );\n};\n\nexport default MultiTablePreview;\n"
  },
  {
    "path": "src/views/OperatorCard.tsx",
    "content": "\n// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { FC } from 'react'\nimport { useDrag } from 'react-dnd'\n\nimport '../scss/DraggableCard.scss';\n\nimport { useTheme } from '@mui/material/styles';\n\nimport {\n    Card,\n    Box,\n    Typography,\n} from '@mui/material';\n\nimport React from 'react';\n\nexport interface OperatorCardProp {\n    operator: string\n}\n\nexport const OperatorCard: FC<OperatorCardProp> = function OperatorCard({ operator }) {\n    // concept cards are draggable cards that can be dropped into encoding shelf\n    \n    let theme = useTheme();\n\n    const [{ isDragging }, drag] = useDrag(() => ({\n        type: \"operator-card\",\n        item: { type: 'operator-card', operator, source: \"conceptShelf\" },\n        collect: (monitor) => ({\n            isDragging: monitor.isDragging(),\n            handlerId: monitor.getHandlerId(),\n        }),\n    }));\n\n    let opacity = isDragging ? 0.4 : 1;\n    let fontStyle = \"inherit\";\n    let border = \"hidden\";\n\n    const cursorStyle = isDragging ? \"grabbing\" : \"grab\";\n   \n    let backgroundColor = theme.palette.secondary.light;\n\n    let cardComponent = (\n        <Card sx={{ minWidth: 80, backgroundColor, width: 'calc(50% - 6px)' }}\n            variant=\"outlined\"\n            style={{ opacity, border, fontStyle, marginLeft: '3px', }}\n            color=\"secondary\"\n            className={`data-field-list-item draggable-card `}>\n            <Box ref={drag} sx={{ cursor: cursorStyle, background: 'rgba(255, 255, 255, 0.93)'}}\n                 className={`draggable-card-header draggable-card-inner`}>\n                <Typography className=\"draggable-card-title\" \n                    sx={{ marginLeft: '6px !important', fontSize: 12, height: 24, width: \"100%\", fontStyle: 'italic' }} component={'span'} gutterBottom>\n                    {operator}\n                </Typography>\n            </Box>\n        </Card>\n    )\n\n    return cardComponent;\n}\n"
  },
  {
    "path": "src/views/ReactTable.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as React from 'react';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TablePagination from '@mui/material/TablePagination';\nimport TableRow from '@mui/material/TableRow';\nimport { alpha, Box, useTheme } from '@mui/system';\nimport Typography from '@mui/material/Typography';\n\n\nexport interface ColumnDef {\n    id: string;\n    label: string;\n    minWidth?: number;\n    align?: 'right';\n    source?: 'original' | 'custom' ;\n    format?: (value: number) => string;\n}\n\ninterface CustomReactTableProps {\n    rows: any[];\n    columnDefs: ColumnDef[];\n    rowsPerPageNum: number;\n    compact: boolean;\n    maxCellWidth? : number;\n    isIncompleteTable?: boolean;\n    maxHeight?: number;\n}\n\nexport const CustomReactTable: React.FC<CustomReactTableProps> = ({ \n    rows, columnDefs, rowsPerPageNum, compact, maxCellWidth, isIncompleteTable, maxHeight = 340 }) => {\n\n    let theme = useTheme();\n\n    const [page, setPage] = React.useState(0);\n    const [rowsPerPage, setRowsPerPage] = React.useState(rowsPerPageNum == -1 ? (rows.length > 500 ? 100 : rows.length) : rowsPerPageNum);\n\n    const handleChangePage = (event: unknown, newPage: number) => {\n        setPage(newPage);\n    };\n\n    const handleChangeRowsPerPage = (event: React.ChangeEvent<HTMLInputElement>) => {\n        setRowsPerPage(+event.target.value);\n        setPage(0);\n    };\n\n    return (\n        <Box className=\"table-container table-container-small\"\n            sx={{\n                width: '100%',\n                \"& .MuiTableCell-root\": {\n                    fontSize: 10, maxWidth: maxCellWidth || \"60px\", padding: compact ? \"2px 4px\" : \"6px\",\n                    overflow: \"clip\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\"\n                }\n            }}>\n            <TableContainer sx={{ maxHeight: maxHeight }}>\n                <Table stickyHeader aria-label=\"sticky table\">\n                    <TableHead>\n                        <TableRow>\n                            {columnDefs.map((column, i) => {\n                                let backgroundColor = \"none\";\n                                let borderBottomColor = theme.palette.primary.main;\n                                if (column.source == \"custom\") {\n                                    backgroundColor = alpha(theme.palette.custom.main, 0.05);\n                                    borderBottomColor = theme.palette.custom.main;\n                                } \n                                return <TableCell\n                                        key={column.id}\n                                        align={column.align}\n                                        sx={{\n                                            minWidth: column.minWidth, fontSize: 12, color: \"#333\",\n                                            backgroundColor: backgroundColor,\n                                            borderBottomColor, borderBottomWidth: '1px', borderBottomStyle: 'solid'\n                                        }}\n                                    >\n                                        {column.label}\n                                    </TableCell>\n                                })\n                            }\n                        </TableRow>\n                    </TableHead>\n                    <TableBody>\n                        {rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\n                            .map((row, i) => {\n                                return (\n                                    <TableRow hover tabIndex={-1} key={i} sx={{ background: i % 2 == 0 ? '#F0F0F0' : \"none\" }}>\n                                        {columnDefs.map((column, j) => {\n                                            const value = row[column.id];\n                                            let backgroundColor = \"none\";\n                                            if (column.source == \"custom\") {\n                                                backgroundColor = alpha(theme.palette.custom.main, 0.05);\n                                            } \n                                            return (\n                                                <TableCell key={column.id} align={column.align}\n                                                    sx={{ backgroundColor }}>\n                                                    {column.format\n                                                        ? column.format(value)\n                                                        : (typeof value === \"boolean\" ? `${value}` : value)}\n                                                </TableCell>\n                                            );\n                                        })}\n                                    </TableRow>\n                                );\n                            })}\n                            {isIncompleteTable && (\n                                <TableRow>\n                                    {columnDefs.map((column, i) => (\n                                        <TableCell key={i} sx={{padding: 0}} align=\"left\">\n                                            ......\n                                        </TableCell>\n                                    ))}\n                                </TableRow> \n                            )}\n                    </TableBody>\n                </Table>\n            </TableContainer>\n            \n            {rowsPerPage < rows.length ? <TablePagination\n                sx={{\n                    \"color\": \"gray\",\n                    \"& .MuiInputBase-root\": { fontSize: 10 },\n                    \"& .MuiTablePagination-selectLabel\": { fontSize: 10 },\n                    \"& .MuiTablePagination-displayedRows\": { fontSize: 10 },\n                    \"& .MuiButtonBase-root\": { padding: 0 },\n                    \"& .MuiToolbar-root\": { minHeight: 12, height: 18},\n                    \"& .MuiTablePagination-toolbar\": { paddingRight: 0 },\n                    \"& .MuiSvgIcon-root\": { fontSize: '1rem' }\n                }}\n                SelectProps={{\n                    MenuProps: {\n                        sx: {\n                            '.MuiPaper-root': {},\n                            '.MuiTablePagination-menuItem': { fontSize: 12 },\n                        },\n                    }\n                }}\n                rowsPerPageOptions={[10]}\n                component=\"div\"\n                count={rows.length}\n                rowsPerPage={rowsPerPage}\n                page={page}\n                onPageChange={handleChangePage}\n                showFirstButton\n                showLastButton\n                //onRowsPerPageChange={handleChangeRowsPerPage}\n            /> : \"\"}\n        </Box>\n    );\n}"
  },
  {
    "path": "src/views/RefreshDataDialog.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useState, useCallback, useRef } from 'react';\nimport { borderColor, transition, radius } from '../app/tokens';\nimport {\n    Dialog,\n    DialogTitle,\n    DialogContent,\n    DialogActions,\n    Button,\n    IconButton,\n    Typography,\n    Box,\n    TextField,\n    Tabs,\n    Tab,\n    LinearProgress,\n    Input,\n    Link,\n    alpha,\n    useTheme,\n} from '@mui/material';\nimport CloseIcon from '@mui/icons-material/Close';\nimport UploadFileIcon from '@mui/icons-material/UploadFile';\nimport { useSelector } from 'react-redux';\nimport { DataFormulatorState } from '../app/dfSlice';\nimport { DictTable } from '../components/ComponentType';\nimport { createTableFromText, loadTextDataWrapper, loadBinaryDataWrapper } from '../data/utils';\n\ninterface TabPanelProps {\n    children?: React.ReactNode;\n    index: number;\n    value: number;\n}\n\nfunction TabPanel(props: TabPanelProps) {\n    const { children, value, index, ...other } = props;\n    return (\n        <div\n            role=\"tabpanel\"\n            hidden={value !== index}\n            id={`refresh-tabpanel-${index}`}\n            aria-labelledby={`refresh-tab-${index}`}\n            {...other}\n        >\n            {value === index && <Box sx={{ p: 2.5, pt: 3 }}>{children}</Box>}\n        </div>\n    );\n}\n\nexport interface RefreshDataDialogProps {\n    open: boolean;\n    onClose: () => void;\n    table: DictTable;\n    onRefreshComplete: (newRows: any[]) => void;\n}\n\nexport const RefreshDataDialog: React.FC<RefreshDataDialogProps> = ({\n    open,\n    onClose,\n    table,\n    onRefreshComplete,\n}) => {\n    const theme = useTheme();\n    const [tabValue, setTabValue] = useState(0);\n    const [pasteContent, setPasteContent] = useState('');\n    const [urlContent, setUrlContent] = useState('');\n    const [isLoading, setIsLoading] = useState(false);\n    const [error, setError] = useState<string | null>(null);\n    const fileInputRef = useRef<HTMLInputElement>(null);\n    const serverConfig = useSelector((state: DataFormulatorState) => state.serverConfig);\n\n    // Constants for content size limits\n    const MAX_DISPLAY_LINES = 20;\n    const LARGE_CONTENT_THRESHOLD = 50000;\n    const MAX_CONTENT_SIZE = 2 * 1024 * 1024; // 2MB\n\n    const [displayContent, setDisplayContent] = useState('');\n    const [isLargeContent, setIsLargeContent] = useState(false);\n    const [showFullContent, setShowFullContent] = useState(false);\n    const [isOverSizeLimit, setIsOverSizeLimit] = useState(false);\n\n    const validateColumns = (newRows: any[]): { valid: boolean; message: string } => {\n        if (!newRows || newRows.length === 0) {\n            return { valid: false, message: 'No data found in the uploaded content.' };\n        }\n\n        const newColumns = Object.keys(newRows[0]).sort();\n        const existingColumns = [...table.names].sort();\n\n        if (newColumns.length !== existingColumns.length) {\n            return {\n                valid: false,\n                message: `Column count mismatch. Expected ${existingColumns.length} columns (${existingColumns.join(', ')}), but got ${newColumns.length} columns (${newColumns.join(', ')}).`,\n            };\n        }\n\n        const missingColumns = existingColumns.filter(col => !newColumns.includes(col));\n        const extraColumns = newColumns.filter(col => !existingColumns.includes(col));\n\n        if (missingColumns.length > 0 || extraColumns.length > 0) {\n            let message = 'Column names do not match.';\n            if (missingColumns.length > 0) {\n                message += ` Missing: ${missingColumns.join(', ')}.`;\n            }\n            if (extraColumns.length > 0) {\n                message += ` Unexpected: ${extraColumns.join(', ')}.`;\n            }\n            return { valid: false, message };\n        }\n\n        return { valid: true, message: '' };\n    };\n\n    const processAndValidateData = (newRows: any[]): boolean => {\n        const validation = validateColumns(newRows);\n        if (!validation.valid) {\n            setError(validation.message);\n            return false;\n        }\n        setError(null);\n        onRefreshComplete(newRows);\n        handleClose();\n        return true;\n    };\n\n    const handleClose = () => {\n        setPasteContent('');\n        setUrlContent('');\n        setDisplayContent('');\n        setError(null);\n        setIsLoading(false);\n        setIsLargeContent(false);\n        setShowFullContent(false);\n        setIsOverSizeLimit(false);\n        onClose();\n    };\n\n    const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n        setTabValue(newValue);\n        setError(null);\n    };\n\n    // Handle paste content change with optimization for large content\n    const handlePasteContentChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n        const newContent = event.target.value;\n        setPasteContent(newContent);\n\n        const contentSizeBytes = new Blob([newContent]).size;\n        const isOverLimit = contentSizeBytes > MAX_CONTENT_SIZE;\n        setIsOverSizeLimit(isOverLimit);\n\n        const isLarge = newContent.length > LARGE_CONTENT_THRESHOLD;\n        setIsLargeContent(isLarge);\n\n        if (isLarge && !showFullContent) {\n            const lines = newContent.split('\\n');\n            const previewLines = lines.slice(0, MAX_DISPLAY_LINES);\n            const preview = previewLines.join('\\n') + (lines.length > MAX_DISPLAY_LINES ? '\\n... (truncated for performance)' : '');\n            setDisplayContent(preview);\n        } else {\n            setDisplayContent(newContent);\n        }\n    }, [showFullContent]);\n\n    const toggleFullContent = useCallback(() => {\n        setShowFullContent(!showFullContent);\n        if (!showFullContent) {\n            setDisplayContent(pasteContent);\n        } else {\n            const lines = pasteContent.split('\\n');\n            const previewLines = lines.slice(0, MAX_DISPLAY_LINES);\n            const preview = previewLines.join('\\n') + (lines.length > MAX_DISPLAY_LINES ? '\\n... (truncated for performance)' : '');\n            setDisplayContent(preview);\n        }\n    }, [showFullContent, pasteContent]);\n\n    // Handle paste submit\n    const handlePasteSubmit = () => {\n        if (!pasteContent.trim()) {\n            setError('Please paste some data.');\n            return;\n        }\n\n        setIsLoading(true);\n        try {\n            let newRows: any[] = [];\n            try {\n                const jsonContent = JSON.parse(pasteContent);\n                if (Array.isArray(jsonContent)) {\n                    newRows = jsonContent;\n                } else {\n                    setError('JSON content must be an array of objects.');\n                    setIsLoading(false);\n                    return;\n                }\n            } catch {\n                // Try parsing as CSV/TSV\n                const tempTable = createTableFromText('temp', pasteContent);\n                if (tempTable) {\n                    newRows = tempTable.rows;\n                } else {\n                    setError('Could not parse the pasted content as JSON or CSV/TSV.');\n                    setIsLoading(false);\n                    return;\n                }\n            }\n            processAndValidateData(newRows);\n        } catch (err) {\n            setError('Failed to parse the pasted content.');\n        } finally {\n            setIsLoading(false);\n        }\n    };\n\n    // Handle URL submit\n    const handleUrlSubmit = () => {\n        if (!urlContent.trim()) {\n            setError('Please enter a URL.');\n            return;\n        }\n\n        const hasValidSuffix = urlContent.endsWith('.csv') || urlContent.endsWith('.tsv') || urlContent.endsWith('.json');\n        if (!hasValidSuffix) {\n            setError('URL must point to a .csv, .tsv, or .json file.');\n            return;\n        }\n\n        setIsLoading(true);\n        fetch(urlContent)\n            .then(res => res.text())\n            .then(content => {\n                let newRows: any[] = [];\n                try {\n                    const jsonContent = JSON.parse(content);\n                    if (Array.isArray(jsonContent)) {\n                        newRows = jsonContent;\n                    } else {\n                        setError('JSON content must be an array of objects.');\n                        setIsLoading(false);\n                        return;\n                    }\n                } catch {\n                    const tempTable = createTableFromText('temp', content);\n                    if (tempTable) {\n                        newRows = tempTable.rows;\n                    } else {\n                        setError('Could not parse the URL content as JSON or CSV/TSV.');\n                        setIsLoading(false);\n                        return;\n                    }\n                }\n                processAndValidateData(newRows);\n            })\n            .catch(err => {\n                setError(`Failed to fetch data from URL: ${err.message}`);\n            })\n            .finally(() => {\n                setIsLoading(false);\n            });\n    };\n\n    // Handle file upload\n    const handleFileUpload = (event: React.ChangeEvent<HTMLInputElement>) => {\n        const files = event.target.files;\n        if (!files || files.length === 0) return;\n\n        const file = files[0];\n        setIsLoading(true);\n\n        if (file.type === 'text/csv' ||\n            file.type === 'text/tab-separated-values' ||\n            file.type === 'application/json' ||\n            file.name.endsWith('.csv') ||\n            file.name.endsWith('.tsv') ||\n            file.name.endsWith('.json')) {\n\n            const MAX_FILE_SIZE = 5 * 1024 * 1024;\n            if (file.size > MAX_FILE_SIZE) {\n                setError(`File is too large (${(file.size / (1024 * 1024)).toFixed(2)}MB). Maximum size is 5MB.`);\n                setIsLoading(false);\n                return;\n            }\n\n            file.text().then((text) => {\n                let newRows: any[] = [];\n                try {\n                    const jsonContent = JSON.parse(text);\n                    if (Array.isArray(jsonContent)) {\n                        newRows = jsonContent;\n                    } else {\n                        setError('JSON content must be an array of objects.');\n                        setIsLoading(false);\n                        return;\n                    }\n                } catch {\n                    const tempTable = loadTextDataWrapper('temp', text, file.type);\n                    if (tempTable) {\n                        newRows = tempTable.rows;\n                    } else {\n                        setError('Could not parse the file content.');\n                        setIsLoading(false);\n                        return;\n                    }\n                }\n                processAndValidateData(newRows);\n            }).catch(err => {\n                setError(`Failed to read file: ${err.message}`);\n            }).finally(() => {\n                setIsLoading(false);\n            });\n        } else if (file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||\n            file.type === 'application/vnd.ms-excel' ||\n            file.name.endsWith('.xlsx') ||\n            file.name.endsWith('.xls')) {\n\n            const reader = new FileReader();\n            reader.onload = async (e) => {\n                const arrayBuffer = e.target?.result as ArrayBuffer;\n                if (arrayBuffer) {\n                    try {\n                        const tables = await loadBinaryDataWrapper('temp', arrayBuffer);\n                        if (tables.length > 0) {\n                            processAndValidateData(tables[0].rows);\n                        } else {\n                            setError('Failed to parse Excel file.');\n                        }\n                    } catch (err) {\n                        setError('Failed to parse Excel file.');\n                    }\n                }\n                setIsLoading(false);\n            };\n            reader.readAsArrayBuffer(file);\n        } else {\n            setError('Unsupported file format. Please use CSV, TSV, JSON, or Excel files.');\n            setIsLoading(false);\n        }\n\n        // Reset file input\n        if (fileInputRef.current) {\n            fileInputRef.current.value = '';\n        }\n    };\n\n    const hasValidUrlSuffix = urlContent.endsWith('.csv') || urlContent.endsWith('.tsv') || urlContent.endsWith('.json');\n\n    return (\n        <Dialog\n            open={open}\n            onClose={handleClose}\n            maxWidth=\"md\"\n            fullWidth\n            sx={{ '& .MuiDialog-paper': { minHeight: 500 } }}\n        >\n            <DialogTitle sx={{ display: 'flex', alignItems: 'center', pb: 1 }}>\n                <Typography variant=\"h6\" component=\"span\">\n                    Refresh Data for \"{table.displayId || table.id}\"\n                </Typography>\n                <IconButton\n                    sx={{ marginLeft: 'auto' }}\n                    size=\"small\"\n                    onClick={handleClose}\n                >\n                    <CloseIcon fontSize=\"small\" />\n                </IconButton>\n            </DialogTitle>\n            <DialogContent sx={{ p: 0 }}>\n                <Box sx={{ px: 3, pt: 2.5, pb: 1.5 }}>\n                    <Typography \n                        variant=\"caption\" \n                        sx={{ \n                            display: 'block',\n                            color: 'text.secondary',\n                            fontSize: '0.75rem',\n                            mb: 2,\n                            lineHeight: 1.5\n                        }}\n                    >\n                        Upload new data to replace the current table content. Required columns: <strong style={{ color: 'inherit' }}>{table.names.join(', ')}</strong>\n                    </Typography>\n\n                    {error && (\n                        <Box \n                            sx={{ \n                                mb: 1.5,\n                                p: 1,\n                                backgroundColor: alpha(theme.palette.error.main, 0.08),\n                                borderLeft: `3px solid ${theme.palette.error.main}`,\n                                borderRadius: '4px',\n                            }}\n                        >\n                            <Typography variant=\"caption\" sx={{ color: 'error.main', fontSize: '0.75rem', lineHeight: 1.5 }}>\n                                {error}\n                            </Typography>\n                        </Box>\n                    )}\n\n                    {isLoading && <LinearProgress sx={{ mb: 2, height: 2 }} />}\n                </Box>\n\n                <Tabs value={tabValue} onChange={handleTabChange} sx={{ borderBottom: `1px solid ${borderColor.divider}`, px: 3 }}>\n                    <Tab label=\"Paste Data\" sx={{ textTransform: 'none', fontSize: '0.875rem', minHeight: 48 }} />\n                    <Tab label=\"Upload File\" sx={{ textTransform: 'none', fontSize: '0.875rem', minHeight: 48 }} />\n                    <Tab label=\"From URL\" sx={{ textTransform: 'none', fontSize: '0.875rem', minHeight: 48 }} />\n                </Tabs>\n\n                <TabPanel value={tabValue} index={0}>\n                    <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n                        {isOverSizeLimit && (\n                            <Box \n                                sx={{ \n                                    p: 1,\n                                    backgroundColor: alpha(theme.palette.error.main, 0.06),\n                                    borderLeft: `3px solid ${theme.palette.error.main}`,\n                                    borderRadius: '4px',\n                                }}\n                            >\n                                <Typography variant=\"caption\" sx={{ color: 'error.main', fontSize: '0.75rem', lineHeight: 1.5 }}>\n                                    Content exceeds {(MAX_CONTENT_SIZE / (1024 * 1024)).toFixed(0)}MB limit ({(new Blob([pasteContent]).size / (1024 * 1024)).toFixed(2)}MB)\n                                </Typography>\n                            </Box>\n                        )}\n                        {isLargeContent && !isOverSizeLimit && (\n                            <Box sx={{ \n                                display: 'flex', \n                                alignItems: 'center', \n                                gap: 1.5,\n                                p: 1, \n                                backgroundColor: alpha(theme.palette.text.secondary, 0.04), \n                                borderRadius: 1,\n                                border: `1px solid ${borderColor.divider}`\n                            }}>\n                                <Typography variant=\"caption\" sx={{ flex: 1, fontSize: '0.75rem', color: 'text.secondary' }}>\n                                    Large content ({Math.round(pasteContent.length / 1000)}KB) • {showFullContent ? 'Full view' : 'Preview'}\n                                </Typography>\n                                <Button \n                                    size=\"small\" \n                                    variant=\"text\" \n                                    onClick={toggleFullContent}\n                                    sx={{ \n                                        textTransform: 'none', \n                                        minWidth: 'auto', \n                                        fontSize: '0.75rem',\n                                        color: 'text.secondary',\n                                        '&:hover': {\n                                            backgroundColor: alpha(theme.palette.text.secondary, 0.08),\n                                        }\n                                    }}\n                                >\n                                    {showFullContent ? 'Preview' : 'Full'}\n                                </Button>\n                            </Box>\n                        )}\n                        <TextField\n                            autoFocus\n                            multiline\n                            fullWidth\n                            value={displayContent}\n                            onChange={handlePasteContentChange}\n                            placeholder=\"Paste your data here (CSV, TSV, or JSON format)\"\n                            disabled={isLoading}\n                            sx={{\n                                '& .MuiInputBase-root': {\n                                    minHeight: 240,\n                                    alignItems: 'flex-start',\n                                },\n                                '& .MuiInputBase-input': {\n                                    fontSize: 12,\n                                    fontFamily: 'monospace',\n                                    lineHeight: 1.5,\n                                }\n                            }}\n                        />\n                    </Box>\n                </TabPanel>\n\n                <TabPanel value={tabValue} index={1}>\n                    {serverConfig.DISABLE_FILE_UPLOAD ? (\n                        <Box sx={{ textAlign: 'center', py: 6 }}>\n                            <Typography color=\"text.secondary\" sx={{ mb: 1.5, fontSize: '0.875rem' }}>\n                                File upload is disabled in this environment.\n                            </Typography>\n                            <Typography variant=\"body2\" color=\"text.secondary\" sx={{ fontSize: '0.75rem' }}>\n                                Install Data Formulator locally to enable file upload. <br />\n                                <Link \n                                    href=\"https://github.com/microsoft/data-formulator\" \n                                    target=\"_blank\" \n                                    rel=\"noopener noreferrer\"\n                                    sx={{ fontSize: '0.75rem' }}\n                                >\n                                    https://github.com/microsoft/data-formulator\n                                </Link>\n                            </Typography>\n                        </Box>\n                    ) : (\n                        <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n                            <Input\n                                inputProps={{ accept: '.csv,.tsv,.json,.xlsx,.xls' }}\n                                type=\"file\"\n                                sx={{ display: 'none' }}\n                                inputRef={fileInputRef}\n                                onChange={handleFileUpload}\n                            />\n                            <Box\n                                sx={{\n                                    border: '2px dashed',\n                                    borderColor: borderColor.divider,\n                                    borderRadius: radius.md,\n                                    p: 4,\n                                    textAlign: 'center',\n                                    cursor: 'pointer',\n                                    transition: transition.normal,\n                                    '&:hover': {\n                                        borderColor: 'primary.main',\n                                        backgroundColor: alpha(theme.palette.primary.main, 0.04),\n                                    }\n                                }}\n                                onClick={() => fileInputRef.current?.click()}\n                            >\n                                <UploadFileIcon sx={{ fontSize: 40, color: 'text.secondary', mb: 1.5 }} />\n                                <Typography variant=\"subtitle1\" gutterBottom sx={{ fontSize: '0.9375rem', fontWeight: 500 }}>\n                                    Drag & drop file here\n                                </Typography>\n                                <Typography variant=\"body2\" color=\"text.secondary\" sx={{ fontSize: '0.8125rem', mb: 0.5 }}>\n                                    or <Link component=\"button\" sx={{ textDecoration: 'underline', cursor: 'pointer' }}>Browse</Link>\n                                </Typography>\n                                <Typography variant=\"caption\" color=\"text.secondary\" sx={{ fontSize: '0.75rem' }}>\n                                    Supported: CSV, TSV, JSON, Excel (xlsx, xls)\n                                </Typography>\n                            </Box>\n                        </Box>\n                    )}\n                </TabPanel>\n\n                <TabPanel value={tabValue} index={2}>\n                    <TextField\n                        fullWidth\n                        placeholder=\"Load a CSV, TSV, or JSON file from a URL, e.g. https://example.com/data.json\"\n                        value={urlContent}\n                        onChange={(e) => setUrlContent(e.target.value.trim())}\n                        disabled={isLoading}\n                        error={urlContent !== '' && !hasValidUrlSuffix}\n                        helperText={urlContent !== '' && !hasValidUrlSuffix ? 'URL should link to a .csv, .tsv, or .json file' : ''}\n                        size=\"small\"\n                        sx={{ \n                            '& .MuiInputBase-input': {\n                                fontSize: '0.875rem',\n                            },\n                            '& .MuiInputBase-input::placeholder': {\n                                fontSize: '0.875rem',\n                            },\n                            '& .MuiFormHelperText-root': {\n                                fontSize: '0.75rem',\n                            },\n                        }}\n                    />\n                </TabPanel>\n            </DialogContent>\n            <DialogActions sx={{ px: 3, py: 2, gap: 1 }}>\n                <Button \n                    onClick={handleClose} \n                    disabled={isLoading}\n                    sx={{ textTransform: 'none' }}\n                >\n                    Cancel\n                </Button>\n                {tabValue === 0 && (\n                    <Button\n                        variant=\"contained\"\n                        onClick={handlePasteSubmit}\n                        disabled={isLoading || !pasteContent.trim() || isOverSizeLimit}\n                        sx={{ textTransform: 'none' }}\n                    >\n                        Refresh Data\n                    </Button>\n                )}\n                {tabValue === 2 && (\n                    <Button\n                        variant=\"contained\"\n                        onClick={handleUrlSubmit}\n                        disabled={isLoading || !urlContent.trim() || !hasValidUrlSuffix}\n                        sx={{ textTransform: 'none' }}\n                    >\n                        Refresh Data\n                    </Button>\n                )}\n            </DialogActions>\n        </Dialog>\n    );\n};\n"
  },
  {
    "path": "src/views/ReportView.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { FC, useState, useRef, useEffect, memo, useMemo } from 'react';\nimport { borderColor, shadow, transition, radius } from '../app/tokens';\nimport {\n    Box,\n    Button,\n    Typography,\n    Checkbox,\n    IconButton,\n    Card,\n    CardContent,\n    CircularProgress,\n    Alert,\n    Link,\n    Divider,\n    Paper,\n    TableBody,\n    TableCell,\n    TableContainer,\n    TableHead,\n    TableRow,\n    ToggleButton,\n    ToggleButtonGroup,\n    Tooltip,\n    useTheme,\n    alpha,\n} from '@mui/material';\nimport Masonry from '@mui/lab/Masonry';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport CreateChartifact from '@mui/icons-material/Description';\nimport EditIcon from '@mui/icons-material/Edit';\nimport HelpOutlineIcon from '@mui/icons-material/HelpOutline';\nimport HistoryIcon from '@mui/icons-material/History';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport ShareIcon from '@mui/icons-material/Share';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport html2canvas from 'html2canvas';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { DataFormulatorState, dfActions, dfSelectors, GeneratedReport } from '../app/dfSlice';\nimport { Message } from './MessageSnackbar';\nimport { getUrls, assembleVegaChart, getTriggers, prepVisTable, fetchWithIdentity } from '../app/utils';\nimport { MuiMarkdown, getOverrides } from 'mui-markdown';\nimport embed from 'vega-embed';\nimport { getDataTable } from './VisualizationView';\nimport { DictTable } from '../components/ComponentType';\nimport { AppDispatch } from '../app/store';\nimport { Collapse } from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport ExpandLessIcon from '@mui/icons-material/ExpandLess';\nimport { convertToChartifact, openChartifactViewer } from './ChartifactDialog';\nimport { StreamIcon } from '../icons';\n\n// Typography constants\nconst FONT_FAMILY_SYSTEM = '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, \"Apple Color Emoji\", Arial, sans-serif, \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\nconst FONT_FAMILY_SERIF = 'Georgia, Cambria, \"Times New Roman\", Times, serif';\nconst FONT_FAMILY_MONO = '\"SFMono-Regular\", Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace';\n\n// Color constants\nconst COLOR_HEADING = 'rgb(37, 37, 37)';\nconst COLOR_BODY = 'rgb(55, 53, 47)';\nconst COLOR_MUTED = 'rgb(73, 73, 73)';\nconst COLOR_BG_LIGHT = 'rgba(247, 246, 243, 1)';\n\n// Social post style constants (Twitter/X style)\nconst COLOR_SOCIAL_TEXT = 'rgb(15, 20, 25)';\nconst COLOR_SOCIAL_BORDER = 'rgb(207, 217, 222)';\nconst COLOR_SOCIAL_ACCENT = 'rgb(29, 155, 240)';\n\n// Executive summary style constants (professional/business look)\nconst COLOR_EXEC_TEXT = 'rgb(33, 37, 41)';\nconst COLOR_EXEC_HEADING = 'rgb(20, 24, 28)';\nconst COLOR_EXEC_BORDER = 'rgb(108, 117, 125)';\nconst COLOR_EXEC_ACCENT = 'rgb(0, 123, 255)';\nconst COLOR_EXEC_BG = 'rgb(248, 249, 250)';\n\n\nconst HEADING_BASE = {\n    fontFamily: FONT_FAMILY_SYSTEM,\n    color: COLOR_HEADING,\n    fontWeight: 700,\n    letterSpacing: '-0.01em',\n};\n\nconst BODY_TEXT_BASE = {\n    fontFamily: FONT_FAMILY_SYSTEM,\n    fontSize: '0.9375rem',\n    lineHeight: 1.75,\n    fontWeight: 400,\n    letterSpacing: '0.003em',\n    color: COLOR_BODY,\n};\n\nconst TABLE_CELL_BASE = {\n    fontFamily: FONT_FAMILY_SYSTEM,\n    fontSize: '0.875rem',\n    py: 1.5,\n    px: 2,\n};\n\n// Notion-style markdown overrides with MUI components\nconst notionStyleMarkdownOverrides = {\n    ...getOverrides(),\n    h1: { component: Typography, props: { variant: 'h4', gutterBottom: true, \n        sx: { ...HEADING_BASE, fontSize: '1.75rem', lineHeight: 1.25, letterSpacing: '-0.02em', pb: 0.5, mb: 3, mt: 4 } } },\n    h2: { component: Typography, props: { variant: 'h5', gutterBottom: true,\n        sx: { ...HEADING_BASE, fontSize: '1.5rem', lineHeight: 1.3, pb: 0.5, mb: 2.5, mt: 3.5 } } },\n    h3: { component: Typography, props: { variant: 'h6', gutterBottom: true,\n        sx: { ...HEADING_BASE, fontWeight: 600, fontSize: '1.25rem', lineHeight: 1.4, letterSpacing: '-0.005em', mb: 2, mt: 3 } } },\n    h4: { component: Typography, props: { variant: 'h6', gutterBottom: true,\n        sx: { ...HEADING_BASE, fontWeight: 600, fontSize: '1.125rem', lineHeight: 1.4, mb: 1.5, mt: 2.5 } } },\n    h5: { component: Typography, props: { variant: 'subtitle1', gutterBottom: true,\n        sx: { ...HEADING_BASE, fontWeight: 600, fontSize: '1rem', lineHeight: 1.5, mb: 1.5, mt: 2 } } },\n    h6: { component: Typography, props: { variant: 'subtitle2', gutterBottom: true,\n        sx: { ...HEADING_BASE, fontWeight: 600, fontSize: '0.9375rem', lineHeight: 1.5, mb: 1.5, mt: 2 } } },\n    p: { component: Typography, props: { variant: 'body2', paragraph: true,\n        sx: { ...BODY_TEXT_BASE, mb: 1.75 } } },\n    a: { component: Link, props: { underline: 'hover' as const, color: 'primary' as const, \n        sx: { fontSize: 'inherit', fontWeight: 500 } } },\n    ul: { component: 'ul', props: { style: { \n        paddingLeft: '1.8em', marginTop: '0.75em', marginBottom: '1.5em', fontFamily: FONT_FAMILY_SYSTEM\n    } } },\n    ol: { component: 'ol', props: { style: { \n        paddingLeft: '1.8em', marginTop: '0.75em', marginBottom: '1.5em', fontFamily: FONT_FAMILY_SYSTEM\n    } } },\n    li: { component: Typography, props: { component: 'li', variant: 'body1',\n        sx: { ...BODY_TEXT_BASE, mb: 0.5 } } },\n    blockquote: { component: Box, props: { sx: { \n        borderLeft: '3px solid', borderColor: borderColor.component, pl: 2.5, py: 1, my: 2.5,\n        fontFamily: FONT_FAMILY_SERIF, fontStyle: 'italic', color: COLOR_MUTED, fontSize: '1rem', lineHeight: 1.7 \n    } } },\n    pre: { component: Paper, props: { elevation: 0, sx: { \n        backgroundColor: COLOR_BG_LIGHT, p: 2, borderRadius: '4px', overflow: 'auto', my: 2, \n        border: `1px solid ${borderColor.divider}`,\n        '& code': { \n            backgroundColor: 'transparent !important', padding: '0 !important', fontSize: '0.8125rem',\n            fontFamily: FONT_FAMILY_MONO, lineHeight: 1.7, color: COLOR_BODY\n        } \n    } } },\n    table: { component: TableContainer, props: { component: Paper, elevation: 0,\n        sx: { my: 2, border: `1px solid ${borderColor.divider}` } } },\n    thead: { component: TableHead, props: { sx: { backgroundColor: COLOR_BG_LIGHT } } },\n    tbody: { component: TableBody },\n    tr: { component: TableRow },\n    th: { component: TableCell, props: { sx: { \n        ...TABLE_CELL_BASE, fontWeight: 600, borderBottom: `2px solid ${borderColor.divider}`\n    } } },\n    td: { component: TableCell, props: { sx: { \n        ...TABLE_CELL_BASE, borderBottom: `1px solid ${borderColor.divider}`, lineHeight: 1.6 \n    } } },\n    hr: { component: Divider, props: { sx: { my: 3 } } }\n} as any;\n\n// Social post style markdown overrides (X/Twitter style)\nconst socialStyleMarkdownOverrides = {\n    ...notionStyleMarkdownOverrides,\n    h1: { component: Typography, props: { variant: 'h6', gutterBottom: true, \n        sx: { fontFamily: FONT_FAMILY_SYSTEM, fontWeight: 700, fontSize: '1.125rem', \n            lineHeight: 1.25, color: COLOR_SOCIAL_TEXT, mb: 1.5, mt: 1.5 } } },\n    h2: { component: Typography, props: { variant: 'h6', gutterBottom: true,\n        sx: { fontFamily: FONT_FAMILY_SYSTEM, fontWeight: 700, fontSize: '1rem', \n            lineHeight: 1.25, color: COLOR_SOCIAL_TEXT, mb: 1.25, mt: 1.5 } } },\n    h3: { component: Typography, props: { variant: 'subtitle1', gutterBottom: true,\n        sx: { fontFamily: FONT_FAMILY_SYSTEM, fontWeight: 600, fontSize: '0.9375rem', \n            lineHeight: 1.3, color: COLOR_SOCIAL_TEXT, mb: 1, mt: 1.25 } } },\n    p: { component: Typography, props: { variant: 'body2', paragraph: true,\n        sx: { fontFamily: FONT_FAMILY_SYSTEM, fontSize: '0.875rem', lineHeight: 1.4, \n            fontWeight: 400, mb: 0.75, color: COLOR_SOCIAL_TEXT } } },\n    li: { component: Typography, props: { component: 'li', variant: 'body2',\n        sx: { fontFamily: FONT_FAMILY_SYSTEM, fontSize: '0.875rem', lineHeight: 1.4, \n            fontWeight: 400, mb: 0.25, color: COLOR_SOCIAL_TEXT } } }\n} as any;\n\n// Executive summary style markdown overrides (compact serif styling)\nconst executiveSummaryMarkdownOverrides = {\n    ...getOverrides(),\n    h1: { component: Typography, props: { variant: 'h5', gutterBottom: true, \n        sx: { fontFamily: FONT_FAMILY_SERIF, fontWeight: 700, fontSize: '1.25rem', lineHeight: 1.3, color: COLOR_EXEC_HEADING, mb: 2, mt: 2.5 } } },\n    h2: { component: Typography, props: { variant: 'h6', gutterBottom: true,\n        sx: { fontFamily: FONT_FAMILY_SERIF, fontWeight: 600, fontSize: '1.125rem', lineHeight: 1.3, color: COLOR_EXEC_HEADING, mb: 1.5, mt: 2 } } },\n    h3: { component: Typography, props: { variant: 'h6', gutterBottom: true,\n        sx: { fontFamily: FONT_FAMILY_SERIF, fontWeight: 600, fontSize: '1rem', lineHeight: 1.4, color: COLOR_EXEC_HEADING, mb: 1.25, mt: 1.5 } } },\n    h4: { component: Typography, props: { variant: 'subtitle1', gutterBottom: true,\n        sx: { fontFamily: FONT_FAMILY_SERIF, fontWeight: 600, fontSize: '0.9375rem', lineHeight: 1.4, color: COLOR_EXEC_HEADING, mb: 1, mt: 1.5 } } },\n    p: { component: Typography, props: { variant: 'body2', paragraph: true,\n        sx: { fontFamily: FONT_FAMILY_SERIF, fontSize: '0.875rem', lineHeight: 1.5, fontWeight: 400, color: COLOR_EXEC_TEXT, mb: 1.25, textAlign: 'justify' } } },\n    a: { component: Link, props: { underline: 'hover' as const, color: 'primary' as const, \n        sx: { fontSize: 'inherit', fontWeight: 500, color: COLOR_EXEC_ACCENT, '&:hover': { color: 'rgb(0, 86, 179)' } } } },\n    ul: { component: 'ul', props: { style: { paddingLeft: '1.5em', marginTop: '0.5em', marginBottom: '1em', fontFamily: FONT_FAMILY_SERIF } } },\n    ol: { component: 'ol', props: { style: { paddingLeft: '1.5em', marginTop: '0.5em', marginBottom: '1em', fontFamily: FONT_FAMILY_SERIF } } },\n    li: { component: Typography, props: { component: 'li', variant: 'body2',\n        sx: { fontFamily: FONT_FAMILY_SERIF, fontSize: '0.875rem', lineHeight: 1.5, fontWeight: 400, color: COLOR_EXEC_TEXT, mb: 0.25 } } },\n    blockquote: { component: Box, props: { sx: { \n        borderLeft: '2px solid', borderLeftColor: COLOR_EXEC_ACCENT, pl: 2, py: 1, my: 1.5,\n        backgroundColor: COLOR_EXEC_BG, fontFamily: FONT_FAMILY_SERIF, fontStyle: 'italic', color: COLOR_EXEC_TEXT, fontSize: '0.875rem', lineHeight: 1.6\n    } } },\n    pre: { component: Paper, props: { elevation: 0, sx: { \n        backgroundColor: COLOR_EXEC_BG, p: 1.5, borderRadius: '4px', overflow: 'auto', my: 1.5,\n        '& code': { backgroundColor: 'transparent !important', padding: '0 !important', fontSize: '0.75rem', fontFamily: FONT_FAMILY_MONO, lineHeight: 1.5, color: COLOR_EXEC_TEXT }\n    } } },\n    table: { component: TableContainer, props: { component: Paper, elevation: 0, sx: { my: 1.5, borderRadius: '4px' } } },\n    thead: { component: TableHead, props: { sx: { backgroundColor: COLOR_EXEC_BG } } },\n    tbody: { component: TableBody },\n    tr: { component: TableRow },\n    th: { component: TableCell, props: { sx: { \n        fontFamily: FONT_FAMILY_SERIF, fontSize: '0.8125rem', py: 1, px: 1.5, fontWeight: 600, borderBottom: '1px solid', borderColor: COLOR_EXEC_BORDER, color: COLOR_EXEC_HEADING\n    } } },\n    td: { component: TableCell, props: { sx: { \n        fontFamily: FONT_FAMILY_SERIF, fontSize: '0.8125rem', py: 1, px: 1.5, borderBottom: '1px solid', borderColor: COLOR_EXEC_BORDER, lineHeight: 1.5, color: COLOR_EXEC_TEXT\n    } } },\n    hr: { component: Divider, props: { sx: { my: 2, borderColor: COLOR_EXEC_BORDER } } }\n} as any;\n\nexport const ReportView: FC = () => {\n    // Get all generated reports from Redux state\n    const dispatch = useDispatch<AppDispatch>();\n\n    const charts = useSelector((state: DataFormulatorState) => state.charts);\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const selectedModelId = useSelector((state: DataFormulatorState) => state.selectedModelId);\n    const models = useSelector((state: DataFormulatorState) => state.models);\n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n    const config = useSelector((state: DataFormulatorState) => state.config);\n    const allGeneratedReports = useSelector(dfSelectors.getAllGeneratedReports);\n    const serverConfig = useSelector((state: DataFormulatorState) => state.serverConfig);\n    const focusedId = useSelector((state: DataFormulatorState) => state.focusedId);\n    const focusedChartId = focusedId?.type === 'chart' ? focusedId.chartId : undefined;\n    const theme = useTheme();\n\n    const [selectedChartIds, setSelectedChartIds] = useState<Set<string>>(new Set(focusedChartId ? [focusedChartId] : []));\n    const [previewImages, setPreviewImages] = useState<Map<string, { url: string; width: number; height: number }>>(new Map());\n    const [isLoadingPreviews, setIsLoadingPreviews] = useState(false);\n    const [isGenerating, setIsGenerating] = useState(false);\n    const [error, setError] = useState<string>('');\n    const [style, setStyle] = useState<string>('social post');\n    const [mode, setMode] = useState<'compose' | 'post'>(allGeneratedReports.length > 0 ? 'post' : 'compose');\n\n    // Local state for current report\n    const [currentReportId, setCurrentReportId] = useState<string | undefined>(undefined);\n    const [generatedReport, setGeneratedReport] = useState<string>('');\n    const [generatedStyle, setGeneratedStyle] = useState<string>('social post');\n    const [cachedReportImages, setCachedReportImages] = useState<Record<string, { url: string; width: number; height: number }>>({});\n    const [shareButtonSuccess, setShareButtonSuccess] = useState(false);\n    const [hideTableOfContents, setHideTableOfContents] = useState(false);\n\n    const updateCachedReportImages = (chartId: string, blobUrl: string, width: number, height: number) => {\n        setCachedReportImages(prev => ({\n            ...prev,\n            [chartId]: { url: blobUrl, width, height }\n        }));\n    };\n\n    // Helper function to show messages using dfSlice\n    const showMessage = (message: string, type: 'success' | 'error' | 'info' | 'warning' = 'success') => {\n        const msg: Message = {\n            type,\n            component: 'ReportView',\n            timestamp: Date.now(),\n            value: message\n        };\n        dispatch(dfActions.addMessages(msg));\n    };\n\n    // Function to capture and share report as image\n    const shareReportAsImage = async () => {\n        if (!currentReportId) return;\n\n        try {\n            // Find the report content element\n            const reportElement = document.querySelector('[data-report-content]') as HTMLElement;\n            if (!reportElement) {\n                showMessage('Could not find report content to capture', 'error');\n                return;\n            }\n\n            // Capture the report as canvas with extra padding for borders\n            const canvas = await html2canvas(reportElement, {\n                backgroundColor: '#ffffff',\n                scale: 2, // Higher quality\n                useCORS: true,\n                allowTaint: true,\n                scrollX: 0,\n                scrollY: 0,\n                // Add extra padding to ensure borders are captured\n                width: reportElement.scrollWidth + 4,\n                height: reportElement.scrollHeight + 4,\n                logging: false // Disable console logs\n            });\n\n            // Convert canvas to blob\n            canvas.toBlob((blob: Blob | null) => {\n                if (!blob) {\n                    showMessage('Failed to generate image', 'error');\n                    return;\n                }\n\n                // Copy to clipboard\n                if (navigator.clipboard && navigator.clipboard.write) {\n                    navigator.clipboard.write([\n                        new ClipboardItem({\n                            'image/png': blob\n                        })\n                    ]).then(() => {\n                        showMessage('Report image copied to clipboard! You can now paste it anywhere to share.');\n                        setShareButtonSuccess(true);\n                        setTimeout(() => setShareButtonSuccess(false), 2000);\n                    }).catch(() => {\n                        showMessage('Failed to copy to clipboard. Your browser may not support this feature.', 'error');\n                    });\n                } else {\n                    showMessage('Clipboard API not supported in your browser. Please use a modern browser.', 'error');\n                }\n            }, 'image/png', 0.95);\n\n        } catch (error) {\n            console.error('Error generating report image:', error);\n            showMessage('Failed to generate report image. Please try again.', 'error');\n        }\n    };\n\n\n\n    // Update like this:\n    const processReport = (rawReport: string): string => {\n        const markdownMatch = rawReport.match(/```markdown\\n([\\s\\S]*?)(?:\\n```)?$/);\n        let processed = markdownMatch ? markdownMatch[1] : rawReport;\n        \n        Object.entries(cachedReportImages).forEach(([chartId, { url, width, height }]) => {\n            processed = processed.replace(\n                new RegExp(`\\\\[IMAGE\\\\(${chartId}\\\\)\\\\]`, 'g'),\n                `<img src=\"${url}\" alt=\"Chart\" width=\"${width}\" height=\"${height}\" />`\n            );\n        });\n        \n        return processed;\n    };\n\n    const loadReport = (reportId: string) => {\n        const report = allGeneratedReports.find(r => r.id === reportId);\n        if (report) {\n            setCurrentReportId(reportId);\n            setGeneratedReport(report.content);\n            setGeneratedStyle(report.style);\n\n            // load / assemble chart images for the report\n            report.selectedChartIds.forEach((chartId) => {\n                const chart = charts.find(c => c.id === chartId);\n                if (!chart) return null;\n\n                const chartTable = tables.find(t => t.id === chart.tableRef);\n                if (!chartTable) return null;\n\n                if (chart.chartType === 'Table' || chart.chartType === '?') {\n                    return null;\n                }\n                getChartImageFromVega(chart, chartTable).then(({ blobUrl, width, height }) => {\n                    if (blobUrl) {\n                        // Use blob URL for local display and caching\n                        updateCachedReportImages(chart.id, blobUrl, width, height);\n                    }\n                });\n            });\n        }\n    };\n\n    useEffect(() => {\n        if (currentReportId === undefined && allGeneratedReports.length > 0) {\n            loadReport(allGeneratedReports[0].id);\n        }\n    }, [currentReportId]);\n\n    // Auto-refresh chart images when underlying table data changes\n    // This enables real-time chart updates in reports when data is streaming\n    const tableRowSignaturesRef = useRef<Map<string, string>>(new Map());\n    \n    useEffect(() => {\n        if (!currentReportId || mode !== 'post') return;\n        \n        const currentReport = allGeneratedReports.find(r => r.id === currentReportId);\n        if (!currentReport) return;\n        \n        // Get all tables referenced by the report's charts\n        const reportChartIds = currentReport.selectedChartIds;\n        const affectedTableIds = new Set<string>();\n        \n        reportChartIds.forEach(chartId => {\n            const chart = charts.find(c => c.id === chartId);\n            if (chart) {\n                affectedTableIds.add(chart.tableRef);\n            }\n        });\n        \n        // Check if any affected tables have changed\n        let hasChanges = false;\n        affectedTableIds.forEach(tableId => {\n            const table = tables.find(t => t.id === tableId);\n            if (table) {\n                // Use contentHash if available (set by state management), otherwise fallback to lightweight rowCount\n                // This avoids expensive JSON.stringify operations on every table change during streaming updates\n                const signature = table.contentHash || `${table.rows.length}`;\n                \n                const prevSignature = tableRowSignaturesRef.current.get(tableId);\n                if (prevSignature && prevSignature !== signature) {\n                    hasChanges = true;\n                }\n                tableRowSignaturesRef.current.set(tableId, signature);\n            }\n        });\n        \n        // If data changed, regenerate chart images for the report\n        if (hasChanges) {\n            \n            reportChartIds.forEach(chartId => {\n                const chart = charts.find(c => c.id === chartId);\n                if (!chart) return;\n                \n                const chartTable = tables.find(t => t.id === chart.tableRef);\n                if (!chartTable) return;\n                \n                if (chart.chartType === 'Table' || chart.chartType === '?') {\n                    return;\n                }\n                \n                getChartImageFromVega(chart, chartTable).then(({ blobUrl, width, height }) => {\n                    if (blobUrl) {\n                        updateCachedReportImages(chart.id, blobUrl, width, height);\n                    }\n                });\n            });\n        }\n    }, [tables, currentReportId, mode, allGeneratedReports, charts]);\n\n\n    \n    // Sort charts based on data thread ordering\n    const sortedCharts = useMemo(() => {\n        // Create table order mapping (anchored tables get higher order)\n        const tableOrder = Object.fromEntries(\n            tables.map((table, index) => [\n                table.id, \n                index + (table.anchored ? 1 : 0) * tables.length\n            ])\n        );\n        \n        // Get ancestor orders for a table\n        const getAncestorOrders = (table: DictTable): number[] => {\n            const triggers = getTriggers(table, tables);\n            return [...triggers.map(t => tableOrder[t.tableId]), tableOrder[table.id]];\n        };\n        \n        // Sort charts by their associated table's ancestor orders\n        return [...charts].sort((chartA, chartB) => {\n            const tableA = getDataTable(chartA, tables, charts, conceptShelfItems);\n            const tableB = getDataTable(chartB, tables, charts, conceptShelfItems);\n            \n            const ordersA = getAncestorOrders(tableA);\n            const ordersB = getAncestorOrders(tableB);\n            \n            // Compare orders element by element\n            for (let i = 0; i < Math.min(ordersA.length, ordersB.length); i++) {\n                if (ordersA[i] !== ordersB[i]) {\n                    return ordersA[i] - ordersB[i];\n                }\n            }\n            \n            // If all orders are equal, compare by length\n            return ordersA.length - ordersB.length;\n        });\n    }, [charts, tables, conceptShelfItems]);\n\n    // Clean up Blob URLs on unmount\n    useEffect(() => {\n        return () => {\n            // Clean up preview images (these are always blob URLs)\n            previewImages.forEach(({ url }) => {\n                if (url.startsWith('blob:')) {\n                    URL.revokeObjectURL(url);\n                }\n            });\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []); // Only cleanup on unmount, not when images change\n\n    // Use existing thumbnails from ChartRenderService instead of re-rendering\n    useEffect(() => {\n        const newPreviewImages = new Map<string, { url: string; width: number; height: number }>();\n\n        // Clean up old blob URLs\n        previewImages.forEach(({ url }) => {\n            if (url.startsWith('blob:')) {\n                URL.revokeObjectURL(url);\n            }\n        });\n\n        for (const chart of sortedCharts) {\n            if (chart.chartType === 'Table' || chart.chartType === '?' || chart.chartType === 'Auto') continue;\n            if (chart.thumbnail) {\n                // Use the pre-rendered thumbnail from ChartRenderService\n                newPreviewImages.set(chart.id, {\n                    url: chart.thumbnail,\n                    width: config.defaultChartWidth,\n                    height: config.defaultChartHeight,\n                });\n            }\n        }\n\n        setPreviewImages(newPreviewImages);\n        setIsLoadingPreviews(false);\n    }, [sortedCharts, config]);\n\n    const toggleChartSelection = (chartId: string) => {\n        const newSelection = new Set(selectedChartIds);\n        if (newSelection.has(chartId)) {\n            newSelection.delete(chartId);\n        } else {\n            newSelection.add(chartId);\n        }\n        setSelectedChartIds(newSelection);\n    };\n\n    const selectAll = () => {\n        // Only select available charts (excluding Table, ?, Auto, and charts without preview images)\n        const availableChartIds = sortedCharts\n            .filter(chart => {\n                const isUnavailable = chart.chartType === 'Table' || \n                                      chart.chartType === '?' || \n                                      chart.chartType === 'Auto';\n                const hasPreview = previewImages.has(chart.id);\n                return !isUnavailable && hasPreview;\n            })\n            .map(c => c.id);\n        setSelectedChartIds(new Set(availableChartIds));\n    };\n\n    const deselectAll = () => {\n        setSelectedChartIds(new Set());\n    };\n\n    const getChartImageFromVega = async (chart: any, chartTable: any): Promise<{ dataUrl: string; blobUrl: string; width: number; height: number }> => {\n        try {\n            // Preprocess the data for aggregations\n            const processedRows = prepVisTable(chartTable.rows, conceptShelfItems, chart.encodingMap);\n            \n            // Assemble the Vega spec\n            const assembledChart = assembleVegaChart(\n                chart.chartType,\n                chart.encodingMap,\n                conceptShelfItems,\n                processedRows,\n                chartTable.metadata,\n                config.defaultChartWidth,\n                config.defaultChartHeight,\n                true,\n                chart.config,\n                1,\n                config.maxStretchFactor,\n            );\n\n            // Create a temporary container for embedding\n            const tempId = `temp-chart-${chart.id}-${Date.now()}`;\n            const tempDiv = document.createElement('div');\n            tempDiv.id = tempId;\n            tempDiv.style.position = 'absolute';\n            tempDiv.style.left = '-9999px';\n            document.body.appendChild(tempDiv);\n\n            try {\n                // Embed the chart\n                const result = await embed(`#${tempId}`, assembledChart, { \n                    actions: false,\n                    renderer: 'svg'\n                });\n\n                // Export to SVG with high resolution\n                const svgString = await result.view.toSVG(4);\n                \n                // Parse SVG to get original dimensions\n                const parser = new DOMParser();\n                const svgDoc = parser.parseFromString(svgString, 'image/svg+xml');\n                const svgElement = svgDoc.querySelector('svg');\n                \n                if (!svgElement) {\n                    throw new Error('Could not parse SVG');\n                }\n                \n                // Get original dimensions\n                const originalWidth = parseFloat(svgElement.getAttribute('width') || '0');\n                const originalHeight = parseFloat(svgElement.getAttribute('height') || '0');\n                \n                // Convert SVG to PNG using canvas\n                const { dataUrl, blobUrl } = await new Promise<{ dataUrl: string; blobUrl: string }>((resolve, reject) => {\n                    const canvas = document.createElement('canvas');\n                    const ctx = canvas.getContext('2d');\n                    if (!ctx) {\n                        reject(new Error('Could not get canvas context'));\n                        return;\n                    }\n\n                    const img = new Image();\n                    const svgBlob = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' });\n                    const svgUrl = URL.createObjectURL(svgBlob);\n\n                    img.onload = () => {\n                        canvas.width = img.width;\n                        canvas.height = img.height;\n                        ctx.drawImage(img, 0, 0);\n                        URL.revokeObjectURL(svgUrl);\n                        \n                        const dataUrl = canvas.toDataURL('image/png');\n                        \n                        canvas.toBlob((blob) => {\n                            if (blob) {\n                                const blobUrl = URL.createObjectURL(blob);\n                                resolve({ dataUrl, blobUrl });\n                            } else {\n                                resolve({ dataUrl, blobUrl: '' });\n                            }\n                        }, 'image/png');\n                    };\n\n                    img.onerror = (err) => {\n                        URL.revokeObjectURL(svgUrl);\n                        reject(err);\n                    };\n\n                    img.src = svgUrl;\n                });\n\n                document.body.removeChild(tempDiv);\n\n                return { dataUrl, blobUrl, width: originalWidth, height: originalHeight };\n            } catch (error) {\n                if (document.body.contains(tempDiv)) {\n                    document.body.removeChild(tempDiv);\n                }\n                throw error;\n            }\n        } catch (e) {\n            console.warn('Could not capture chart image:', e);\n            return { dataUrl: '', blobUrl: '', width: 0, height: 0 };\n        }\n    };\n\n    const generateReport = async () => {\n        if (selectedChartIds.size === 0) {\n            setError('Please select at least one chart');\n            return;\n        }\n\n        setIsGenerating(true);\n        setError('');\n        setGeneratedReport('');\n        setGeneratedStyle(style);\n\n        // Create a new report ID\n        const reportId = `report-${Date.now()}-${Math.floor(Math.random() * 10000)}`;\n\n        try {\n            let model = models.find(m => m.id == selectedModelId);\n\n            if (!model) {\n                throw new Error('No model selected');\n            }\n\n            const maxRows = serverConfig.MAX_DISPLAY_ROWS;\n\n            const inputTables = tables.filter(t => t.anchored).map(table => {\n                const rows = table.rows.length > maxRows ? table.rows.slice(0, maxRows) : table.rows;\n                return {\n                    name: table.id,\n                    rows,\n                    attached_metadata: table.attachedMetadata\n                };\n            });\n\n            // Check if any table data was truncated\n            const truncatedTables = tables.filter(t => t.anchored).filter(t => {\n                const totalRows = t.virtual?.rowCount || t.rows.length;\n                return totalRows > maxRows;\n            });\n            const truncationNote = truncatedTables.length > 0\n                ? `\\n\\nNote: Some tables were truncated to ${maxRows.toLocaleString()} rows for this report. ` +\n                  `Tables affected: ${truncatedTables.map(t => `\"${t.displayId || t.id}\" (${(t.virtual?.rowCount || t.rows.length).toLocaleString()} total rows)`).join(', ')}.`\n                : '';\n\n\n            const selectedCharts = await Promise.all(\n                sortedCharts\n                .filter(chart => selectedChartIds.has(chart.id))\n                .map(async (chart) => {\n\n                    const chartTable = tables.find(t => t.id === chart.tableRef);\n                    if (!chartTable) return null;\n\n                    if (chart.chartType === 'Table' || chart.chartType === '?') {\n                        return null;\n                    }\n\n                    const { dataUrl, blobUrl, width, height } = await getChartImageFromVega(chart, chartTable);\n\n                    if (blobUrl) {\n                        // Use blob URL for local display and caching\n                        updateCachedReportImages(chart.id, blobUrl, width, height);\n                    }\n\n                    return {\n                        chart_id: chart.id,\n                        code: chartTable.derive?.code || '',\n                        chart_data: {\n                            name: chartTable.id,\n                            rows: chartTable.rows.length > maxRows ? chartTable.rows.slice(0, maxRows) : chartTable.rows\n                        },\n                        chart_url: dataUrl // use data_url to send to the agent\n                    };\n                })\n            );\n\n            const validCharts = selectedCharts.filter(c => c !== null);\n\n            const requestBody = {\n                model: model,\n                input_tables: inputTables,\n                charts: validCharts,\n                style: style + truncationNote\n            };\n\n            const response = await fetchWithIdentity(getUrls().GENERATE_REPORT_STREAM, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: JSON.stringify(requestBody)\n            });\n\n            if (!response.ok) {\n                throw new Error('Failed to generate report');\n            }\n\n            const reader = response.body?.getReader();\n            if (!reader) {\n                throw new Error('No response body');\n            }\n\n            const decoder = new TextDecoder();\n            let accumulatedReport = '';\n\n            while (true) {\n                const { done, value } = await reader.read();\n                if (done) {\n                    // Create the report object for saving to Redux\n                    const report: GeneratedReport = {\n                        id: reportId,\n                        content: accumulatedReport,\n                        style: style,\n                        selectedChartIds: Array.from(selectedChartIds),\n                        createdAt: Date.now(),\n                    };\n                    // Save to Redux state\n                    dispatch(dfActions.saveGeneratedReport(report));\n                    break;\n                };\n\n                const chunk = decoder.decode(value, { stream: true });\n                \n                if (chunk.startsWith('error:')) {\n                    const errorData = JSON.parse(chunk.substring(6));\n                    throw new Error(errorData.content || 'Error generating report');\n                }\n\n                accumulatedReport += chunk;\n\n                // Update local state\n                setGeneratedReport(accumulatedReport);\n                setCurrentReportId(reportId);\n                \n                if (mode === 'compose') {\n                    setMode('post');\n                }\n            }\n\n        } catch (err) {\n            setError((err as Error).message || 'Failed to generate report');\n        } finally {\n            setIsGenerating(false);\n        }\n    };\n\n\n    const deleteReport = (reportId: string, event: React.MouseEvent) => {\n        event.stopPropagation(); // Prevent triggering the card click\n        dispatch(dfActions.deleteGeneratedReport(reportId));\n        \n        // If we're deleting the currently viewed report, switch to another report or clear the view\n        if (currentReportId === reportId) {\n            const remainingReports = allGeneratedReports.filter(r => r.id !== reportId);\n            if (remainingReports.length > 0) {\n                // Switch to the first remaining report\n                loadReport(remainingReports[0].id);\n            } else {\n                // No reports left, clear the view and go back to compose mode\n                setCurrentReportId(undefined);\n                setGeneratedReport('');\n                setGeneratedStyle('social post');\n                setMode('compose');\n            }\n        }\n    };\n\n    let displayedReport = isGenerating ? \n        `${generatedReport} <span class=\"pencil\" style=\"opacity: 0.4; margin-left: 2px;\">✏️</span>` : generatedReport;\n    displayedReport = processReport(displayedReport);\n\n    return (\n        <Box sx={{ height: '100%', width: '100%', display: 'flex', flexDirection: 'column', overflow: 'hidden' }}>\n            {mode === 'compose' ? (\n                <Box sx={{ overflowY: 'auto', position: 'relative', height: '100%' }}>\n                    <Box sx={{ p: 2, pb: 0, display: 'flex' }}>\n                        <Button\n                            variant=\"text\"\n                            size=\"small\"\n                            color='secondary'\n                            onClick={() => dispatch(dfActions.setViewMode('editor'))}\n                            sx={{ textTransform: 'none' }}\n                            startIcon={<ArrowBackIcon />}\n                        >\n                            back to explore\n                        </Button>\n                        <Divider orientation=\"vertical\" sx={{ mx: 1 }} flexItem />\n                        <Button\n                            variant=\"text\"\n                            disabled={allGeneratedReports.length === 0}\n                            size=\"small\"\n                            onClick={() => setMode('post')}\n                            sx={{ textTransform: 'none' }}\n                            endIcon={<ArrowForwardIcon />}\n                        >\n                            view reports\n                        </Button>\n                    </Box>\n                    {/* Centered Top Bar */}\n                    <Box sx={{\n                        display: 'flex',\n                        justifyContent: 'center',\n                        p: 2,\n                    }}>\n                        <Paper\n                            elevation={0}\n                            sx={{\n                                display: 'flex',\n                                alignItems: 'center',\n                                gap: 1,\n                                p: 1,\n                                borderRadius: 2,\n                                backgroundColor: 'rgba(255, 255, 255, 0.9)',\n                                backdropFilter: 'blur(12px)',\n                                border: '1px solid',\n                                borderColor: borderColor.view,\n                                boxShadow: shadow.lg,\n                                '&:hover': {\n                                    backgroundColor: 'rgba(255, 255, 255, 0.95)',\n                                    borderColor: borderColor.view,\n                                    boxShadow: shadow.xl,\n                                    transition: transition.normal\n                                },\n                                '.MuiTypography-root': {\n                                    fontSize: '1rem',\n                                }\n\n                            }}\n                        >\n                            {/* Natural Flow */}\n                            <Typography variant=\"body2\" color=\"text.primary\" sx={{ fontWeight: 500 }}>\n                                Create a\n                            </Typography>\n                            \n                            <ToggleButtonGroup\n                                value={style}\n                                exclusive\n                                onChange={(e, newStyle) => newStyle && setStyle(newStyle)}\n                                size=\"small\"\n                                sx={{ \n                                    '& .MuiToggleButtonGroup-grouped': {\n                                        border: 'none',\n                                        backgroundColor: 'action.hover',\n                                        margin: '0 2px',\n                                        borderRadius: '4px',\n                                        '&:hover': {\n                                            backgroundColor: 'action.selected',\n                                        },\n                                        '&.Mui-selected': {\n                                            backgroundColor: 'primary.main',\n                                            color: 'white',\n                                            '&:hover': {\n                                                backgroundColor: 'primary.dark',\n                                            }\n                                        },\n                                    }\n                                }}\n                            >\n                                {[\n                                    { value: 'live report', label: 'live report' },\n                                    { value: 'blog post', label: 'blog post' },\n                                    { value: 'social post', label: 'social post' },\n                                    { value: 'executive summary', label: 'executive summary' },\n                                ].map((option) => (\n                                    <ToggleButton \n                                        key={option.value}\n                                        value={option.value}\n                                        sx={{ \n                                            px: 1,\n                                            py: 0.25,\n                                            textTransform: 'none',\n                                            fontSize: '1rem',\n                                            minWidth: 'auto'\n                                        }}\n                                    >\n                                        {option.value === 'live report' ? <StreamIcon sx={{ fontSize: 16, mr: 1 }} /> : <></>} {option.label}\n                                    </ToggleButton>\n                                ))}\n                            </ToggleButtonGroup>\n\n                            <Typography variant=\"body2\" color=\"text.primary\" sx={{ fontWeight: 500 }}>\n                                from\n                            </Typography>\n                            \n                            <Typography variant=\"body2\" \n                                color={selectedChartIds.size === 0 ? \"warning.main\" : 'primary.main'} sx={{ fontWeight: 'bold' }}>\n                                {selectedChartIds.size}\n                            </Typography>\n                            \n                            <Typography variant=\"body2\" color=\"text.primary\" sx={{ fontWeight: 500 }}>\n                                {selectedChartIds.size <= 1 ? 'chart' : 'charts'}\n                            </Typography>\n\n                            {/* Generate Button */}\n                            <Button\n                                variant=\"contained\"\n                                disabled={isGenerating || selectedChartIds.size === 0}\n                                onClick={generateReport}\n                                size=\"small\"\n                                sx={{\n                                    textTransform: 'none',\n                                    ml: 2,\n                                    px: 2,\n                                    py: 0.75,\n                                    borderRadius: 1.5,\n                                    fontWeight: 500,\n                                    fontSize: '1rem',\n                                    minWidth: 'auto'\n                                }}\n                                startIcon={isGenerating ? <CircularProgress size={14} /> : <EditIcon sx={{ fontSize: 16 }} />}\n                            >\n                                {isGenerating ? 'composing...' : 'compose'}\n                            </Button>\n                        </Paper>\n                    </Box>\n                    \n                    <Box sx={{ py: 2, px: 6 }}>\n                        {error && (\n                            <Alert severity=\"error\" sx={{ mb: 2 }} onClose={() => setError('')}>\n                                {error}\n                            </Alert>\n                        )}\n\n                        {sortedCharts.length === 0 ? (\n                            <Typography color=\"text.secondary\">\n                                No charts available. Create some visualizations first.\n                            </Typography>\n                        ) : isLoadingPreviews ? (\n                            <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', py: 4 }}>\n                                <CircularProgress size={18} sx={{ color: 'text.secondary' }} />\n                                <Typography sx={{ ml: 2 }} color=\"text.secondary\">\n                                    loading chart previews...\n                                </Typography>\n                            </Box>\n                        ) : (() => {\n                            // Filter out unavailable charts (Table, ?, Auto, and charts without preview images)\n                            const availableCharts = sortedCharts.filter(chart => {\n                                const isUnavailable = chart.chartType === 'Table' || \n                                                    chart.chartType === '?' || \n                                                    chart.chartType === 'Auto';\n                                const hasPreview = previewImages.has(chart.id);\n                                return !isUnavailable && hasPreview;\n                            });\n\n                            if (availableCharts.length === 0) {\n                                return (\n                                    <Typography color=\"text.secondary\">\n                                        No available charts to display. Charts may still be loading or unavailable.\n                                    </Typography>\n                                );\n                            }\n\n                            return (\n                                <Masonry columns={{ xs: 2, sm: 3, md: 4, lg: 5 }} spacing={2}>\n                                    {availableCharts.map((chart) => {\n                                        const table = tables.find(t => t.id === chart.tableRef);\n                                        const previewImage = previewImages.get(chart.id);\n                                        \n                                        return (\n                                        <Card\n                                            key={chart.id}\n                                            variant=\"outlined\"\n                                            sx={{\n                                                cursor: 'pointer', position: 'relative', overflow: 'hidden',\n                                                backgroundColor: selectedChartIds.has(chart.id) ? alpha(theme.palette.primary.main, 0.08) : 'background.paper',\n                                                border:  selectedChartIds.has(chart.id) ? '2px solid' : '1px solid', \n                                                borderColor: selectedChartIds.has(chart.id) ? 'primary.main' : borderColor.divider,\n                                                '&:hover': { \n                                                    backgroundColor: 'action.hover', boxShadow: 3,\n                                                    transform: 'translateY(-2px)', transition: transition.normal\n                                                },\n                                            }}\n                                            onClick={() => toggleChartSelection(chart.id)}\n                                        >\n                                            <Box sx={{ position: 'relative' }}>\n                                                <Checkbox\n                                                    checked={selectedChartIds.has(chart.id)}\n                                                    onChange={() => toggleChartSelection(chart.id)}\n                                                    onClick={(e) => e.stopPropagation()}\n                                                    sx={{ \n                                                        position: 'absolute', top: 4, right: 4, p: 0.5, zIndex: 3,\n                                                        backgroundColor: 'rgba(255, 255, 255, 0.9)', borderRadius: 1,\n                                                        '&:hover': { backgroundColor: 'rgba(255, 255, 255, 1)' }\n                                                    }}\n                                                />\n                                                <Box\n                                                    component=\"img\"\n                                                    src={previewImage!.url}\n                                                    alt={chart.chartType}\n                                                    sx={{ p: 1, width: `calc(100% - 16px)`, height: 'auto', maxHeight: config.defaultChartHeight, display: 'block', objectFit: 'contain', backgroundColor: 'white' }}\n                                                />\n                                            </Box>\n                                            <CardContent sx={{ p: 1, '&:last-child': { pb: 1.5 } }}>\n                                                <Typography \n                                                    variant=\"caption\" \n                                                    sx={{ display: 'block', fontWeight: 500, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}\n                                                >\n                                                    {chart.chartType}\n                                                </Typography>\n                                                {table?.displayId && (\n                                                    <Typography \n                                                        variant=\"caption\" \n                                                        color=\"text.secondary\"\n                                                        sx={{ display: 'block', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}\n                                                    >\n                                                        {table.displayId}\n                                                    </Typography>\n                                                )}\n                                            </CardContent>\n                                        </Card>\n                                    );\n                                })}\n                            </Masonry>\n                            );\n                        })()}\n                    </Box>\n                </Box>\n            ) : mode === 'post' ? (\n                <Box sx={{ height: '100%', display: 'flex', flexDirection: 'column', overflow: 'hidden' }}>\n                    <Box sx={{ p: 2, display: 'flex', alignItems: 'center', justifyContent: 'space-between',  }}>\n                        <Button\n                            size=\"small\"\n                            disabled={isGenerating}\n                            startIcon={<ArrowBackIcon />}\n                            sx={{ textTransform: 'none' }}\n                            onClick={() => setMode('compose')}\n                        >\n                            create a new report\n                        </Button>\n                        <Typography variant=\"body2\" color=\"text.secondary\">\n                            AI generated the post from the selected charts, and it could be inaccurate!\n                        </Typography>\n                    </Box>\n                    <Box sx={{ flex: 1, display: 'flex', overflow: 'hidden', position: 'relative' }}>\n                        {/* Table of Contents Sidebar */}\n                        {allGeneratedReports.length > 0 && (\n                            <Box sx={{ \n                                position: 'absolute',\n                                top: 0,\n                                left: 8,\n                                zIndex: 1,\n                                width: 200,\n                                display: 'flex',\n                                overflowY: 'auto',\n                                flexDirection: 'column',\n                                borderRight: `1px solid ${borderColor.view}`,\n                                height: 'fit-content',\n                                background: alpha(theme.palette.background.paper, 0.9),\n                            }}>\n                                <Button size='small' color='primary' onClick={() => setHideTableOfContents(!hideTableOfContents)}\n                                sx={{\n                                    width: '100%',\n                                    justifyContent: 'flex-start',\n                                    textAlign: 'left',\n                                    borderRadius: 0,\n                                    textTransform: 'none',\n                                    fontSize: 12,\n                                    py: 1,\n                                    px: 2,\n                                }}>\n                                    {hideTableOfContents ? <ExpandMoreIcon sx={{ fontSize: 16, mr: 1 }} /> \n                                    : <ExpandLessIcon sx={{ fontSize: 16, mr: 1 }} /> } {hideTableOfContents ? 'show all reports' : 'reports'}\n                                </Button> \n                                <Collapse in={!hideTableOfContents}>{allGeneratedReports.map((report) => (\n                                    <Box key={report.id} sx={{ position: 'relative' }}>\n                                        <Button\n                                            variant=\"text\"\n                                            size=\"small\"\n                                            color='primary'\n                                            onClick={() => loadReport(report.id)}\n                                            sx={{\n                                                fontSize: 12,\n                                                textTransform: \"none\",\n                                                width: '100%',\n                                                justifyContent: 'flex-start',\n                                                textAlign: 'left',\n                                                borderRadius: 0,\n                                                py: 1,\n                                                px: 2,\n                                                color: currentReportId === report.id ? 'primary.main' : 'text.secondary',\n                                                borderRight: currentReportId === report.id ? 2 : 0,\n                                                borderColor: 'primary.main',\n                                            }}\n                                        >\n                                            <Box sx={{ flex: 1, minWidth: 0 }}>\n                                                <Typography \n                                                    variant=\"body2\" \n                                                    sx={{ \n                                                        fontSize: 'inherit',\n                                                        fontWeight: 500, \n                                                        mb: 0.25\n                                                    }}\n                                                >\n                                                    {report.content.split('\\n')[0]}\n                                                </Typography>\n                                                <Typography \n                                                    variant=\"caption\" \n                                                    color=\"text.secondary\"\n                                                    sx={{ \n                                                        fontSize: 10,\n                                                        display: 'block',\n                                                        overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap'\n                                                    }}\n                                                >\n                                                    {new Date(report.createdAt).toLocaleDateString()} • {report.style}\n                                                </Typography>\n                                            </Box>\n                                        </Button>\n                                        <Tooltip title=\"Delete report\">\n                                            <IconButton\n                                                size=\"small\"\n                                                disabled={isGenerating}\n                                                color='warning'\n                                                onClick={(e) => deleteReport(report.id, e)}\n                                                sx={{ \n                                                    position: 'absolute',\n                                                    right: 4,\n                                                    top: '50%',\n                                                    transform: 'translateY(-50%)',\n                                                    width: 20,\n                                                    height: 20,\n                                                    '&:hover': { \n                                                        transform: 'translateY(-50%) scale(1.2)', transition: 'all 0.2s ease-in-out'\n                                                    }\n                                                }}\n                                            >\n                                                <DeleteIcon sx={{ fontSize: 14 }} />\n                                            </IconButton>\n                                        </Tooltip>\n                                    </Box>\n                                ))}\n                                </Collapse>\n                            </Box>\n                        )}\n                        \n                        {/* Main Content Area */}\n                        <Box sx={{ flex: 1, overflowY: 'auto', position: 'relative' }}>\n                            {/* Action Buttons */}\n                            {currentReportId && (\n                                <Box sx={{ position: 'absolute', top: 16, right: 16, zIndex: 10, display: 'flex', gap: 1 }}>\n                                    <Tooltip title=\"Create Chartifact report\">\n                                        <Button\n                                            variant=\"contained\"\n                                            size=\"small\"\n                                            onClick={() => {\n                                                // Convert report to Chartifact markdown format\n                                                const chartifactMarkdown = convertToChartifact(\n                                                    generatedReport,\n                                                    generatedStyle,\n                                                    charts,\n                                                    tables,\n                                                    conceptShelfItems,\n                                                    config\n                                                );\n                                                openChartifactViewer(chartifactMarkdown);\n                                            }}\n                                            sx={{\n                                                textTransform: 'none',\n                                                backgroundColor: 'primary.main',\n                                                color: 'white',\n                                                '&:hover': {\n                                                    backgroundColor: 'primary.dark',\n                                                },\n                                            }}\n                                            startIcon={<CreateChartifact />}\n                                        >\n                                            Create Chartifact\n                                        </Button>\n                                    </Tooltip>\n                                    <Tooltip title=\"Share report as image\">\n                                        <Button\n                                            variant=\"contained\"\n                                            size=\"small\"\n                                            startIcon={\n                                                shareButtonSuccess ? <CheckCircleIcon /> : <ShareIcon />\n                                            }\n                                            onClick={shareReportAsImage}\n                                            sx={{\n                                                textTransform: 'none',\n                                                backgroundColor: shareButtonSuccess ? 'success.main' : 'primary.main',\n                                                color: 'white',\n                                                transition: 'all 0.4s cubic-bezier(0.4, 0, 0.2, 1)',\n                                                opacity: shareButtonSuccess ? 0.9 : 1,\n                                                transform: shareButtonSuccess ? 'scale(0.98)' : 'scale(1)',\n                                                animation: shareButtonSuccess ? 'pulse 0.6s ease-in-out' : 'none',\n                                                '@keyframes pulse': {\n                                                    '0%': { transform: 'scale(0.98)' },\n                                                    '50%': { transform: 'scale(1.05)' },\n                                                    '100%': { transform: 'scale(0.98)' }\n                                                },\n                                                '&:hover': {\n                                                    backgroundColor: shareButtonSuccess ? 'success.dark' : 'primary.dark',\n                                                },\n                                            }}\n                                        >\n                                            {shareButtonSuccess ? 'Copied!' : 'Share Image'}\n                                        </Button>\n                                    </Tooltip>\n                                </Box>\n                            )}\n                            \n                            <Box sx={{ display: 'flex', justifyContent: 'center', width: '100%', py: 3 }}>\n                                <Box\n                                    data-report-content\n                                    sx={{\n                                        // Common styles\n                                        width: '100%',\n                                        WebkitFontSmoothing: 'antialiased',\n                                        MozOsxFontSmoothing: 'grayscale',\n                                        '& em': { fontStyle: 'italic' },\n                                        \n                                        // Conditional styles\n                                        ...(generatedStyle === 'social post' || generatedStyle === 'short note' ? {\n                                            maxWidth: '520px', borderRadius: '12px',\n                                            border: '1px solid', borderColor: COLOR_SOCIAL_BORDER, p: 2.5, backgroundColor: 'white',\n                                            fontFamily: FONT_FAMILY_SYSTEM, fontSize: '0.875rem', fontWeight: 400, lineHeight: 1.4,\n                                            color: COLOR_SOCIAL_TEXT,\n                                            '& code': {\n                                                backgroundColor: `${COLOR_SOCIAL_ACCENT}1A`, color: COLOR_SOCIAL_ACCENT,\n                                                padding: '0.1em 0.25em', borderRadius: '3px',\n                                                fontSize: '0.8125rem', fontWeight: 500, fontFamily: FONT_FAMILY_MONO\n                                            },\n                                            '& strong': { fontWeight: 600, color: COLOR_SOCIAL_TEXT },\n                                            '& img': { width: '100%', maxWidth: '100%', height: 'auto', maxHeight: '280px', objectFit: 'contain', borderRadius: '8px', marginTop: '8px', marginBottom: '8px' }\n                                        } : generatedStyle === 'executive summary' ? {\n                                            maxWidth: '700px', p: 2.5, backgroundColor: 'white',\n                                            fontFamily: FONT_FAMILY_SERIF, fontSize: '0.875rem', lineHeight: 1.5, color: COLOR_EXEC_TEXT,\n                                            '& code': { backgroundColor: COLOR_EXEC_BG, color: COLOR_EXEC_ACCENT, padding: '0.1em 0.25em', borderRadius: '2px', fontSize: '0.75rem', fontFamily: FONT_FAMILY_MONO },\n                                            '& strong': { fontWeight: 600, color: COLOR_EXEC_HEADING },\n                                            '& img': { maxWidth: '70%', maxHeight: config.defaultChartHeight * 1.5, objectFit: 'contain', width: 'auto', height: 'auto', borderRadius: '3px', marginTop: '1em', marginBottom: '1em' }\n                                        } : { \n                                            maxWidth: '800px', px: 6, py: 0, backgroundColor: 'background.paper',\n                                            ...BODY_TEXT_BASE,\n                                            '& code': {\n                                                backgroundColor: 'rgba(135, 131, 120, 0.15)', color: '#eb5757',\n                                                padding: '0.2em 0.4em', borderRadius: '3px',\n                                                fontSize: '0.875rem', fontWeight: 500, fontFamily: FONT_FAMILY_MONO\n                                            },\n                                            '& strong': { fontWeight: 600, color: COLOR_HEADING },\n                                            '& img': {\n                                                maxWidth: '75%', maxHeight: config.defaultChartHeight * 1.5,\n                                                width: 'auto', height: 'auto', objectFit: 'contain', borderRadius: '4px',\n                                                marginTop: '1.75em', marginBottom: '1.75em',\n                                            }\n                                        })\n                                    }}\n                                >\n                                    <MuiMarkdown overrides={\n                                        generatedStyle === 'social post' || generatedStyle === 'short note' \n                                            ? socialStyleMarkdownOverrides \n                                            : generatedStyle === 'executive summary'\n                                            ? executiveSummaryMarkdownOverrides\n                                            : notionStyleMarkdownOverrides\n                                    }>{displayedReport}</MuiMarkdown>\n                                    \n                                    {/* Attribution */}\n                                    <Box sx={{ \n                                        mt: 3, \n                                        pt: 2, \n                                        borderTop: '1px solid #e0e0e0',\n                                        textAlign: 'center',\n                                        fontSize: '0.75rem',\n                                        color: '#666'\n                                    }}>\n                                        created with AI using{' '}\n                                        <Link \n                                            href=\"https://github.com/microsoft/data-formulator\" \n                                            target=\"_blank\" \n                                            rel=\"noopener noreferrer\"\n                                            sx={{ \n                                                color: '#1976d2',\n                                                textDecoration: 'none',\n                                                '&:hover': {\n                                                    textDecoration: 'underline'\n                                                }\n                                            }}\n                                        >\n                                            https://github.com/microsoft/data-formulator\n                                        </Link>\n                                    </Box>\n                                </Box>\n                            </Box>\n                        </Box>\n                    </Box>\n                </Box>\n            ) : null}\n        </Box>\n    );\n};\n\n"
  },
  {
    "path": "src/views/SelectableDataGrid.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as React from 'react';\nimport { shadow, transition } from '../app/tokens';\nimport { TableVirtuoso } from 'react-virtuoso';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport { Box } from '@mui/system';\n\nimport { useTheme } from '@mui/material/styles';\nimport { alpha, Paper, Tooltip, CircularProgress, Fade } from \"@mui/material\";\n\nimport { Type } from '../data/types';\nimport { getIconFromType } from './ViewUtils';\n\nimport { IconButton, TableSortLabel, Typography } from '@mui/material';\n\nimport _ from 'lodash';\nimport * as d3 from 'd3-dsv';\nimport { FieldSource, FieldItem } from '../components/ComponentType';\n\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\nimport { TableIcon } from '../icons';\nimport CasinoIcon from '@mui/icons-material/Casino';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\nimport UnfoldMoreIcon from '@mui/icons-material/UnfoldMore';\nimport { getUrls, fetchWithIdentity } from '../app/utils';\nimport { useDrag } from 'react-dnd';\nimport { useSelector } from 'react-redux';\nimport { DataFormulatorState } from '../app/dfSlice';\n\nexport interface ColumnDef {\n    id: string;\n    label: string;\n    dataType: Type;\n    minWidth?: number;\n    width?: number;\n    align?: 'right';\n    format?: (value: number) => string | JSX.Element;\n    source: FieldSource;\n}\n\ninterface SelectableDataGridProps {\n    tableId: string;\n    tableName: string;\n    rows: any[];\n    rowCount: number;\n    virtual: boolean;\n    columnDefs: ColumnDef[];\n}\n\nfunction descendingComparator<T>(a: T, b: T, orderBy: keyof T) {\n    if (b[orderBy] < a[orderBy]) {\n        return -1;\n    }\n    if (b[orderBy] > a[orderBy]) {\n        return 1;\n    }\n    return 0;\n}\n\nfunction getComparator<Key extends keyof any>(\n    order: \"asc\" | \"desc\",\n    orderBy: Key,\n): (\n    a: { [key in Key]: number | string },\n    b: { [key in Key]: number | string },\n) => number {\n    return order === 'desc'\n        ? (a, b) => descendingComparator(a, b, orderBy)\n        : (a, b) => -descendingComparator(a, b, orderBy);\n}\n\n// Get color for field source hover highlight\nfunction getColorForFieldSource(source: string | undefined, theme: any): string {\n    if (!source) {\n        return theme.palette.primary.main; // Default to primary for original fields\n    }\n    \n    switch (source) {\n        case \"custom\":\n            return theme.palette.custom.main; // Orange for custom fields\n        case \"original\":\n        default:\n            return theme.palette.primary.main; // Blue for original fields\n    }\n}\n\n// Draggable header component\ninterface DraggableHeaderProps {\n    columnDef: ColumnDef;\n    orderBy: string | undefined;\n    order: 'asc' | 'desc';\n    onSortClick: () => void;\n    tableId: string;\n}\n\nconst DraggableHeader: React.FC<DraggableHeaderProps> = ({ \n    columnDef, orderBy, order, onSortClick, tableId \n}) => {\n    const theme = useTheme();\n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    \n    // Get semantic type from table metadata\n    const table = tables.find(t => t.id === tableId);\n    const semanticType = table?.metadata?.[columnDef.id]?.semanticType;\n    \n    // Find the corresponding FieldItem for this column\n    // Try to find by name first, then by constructing the ID for original fields\n    const field = conceptShelfItems.find(f => f.name === columnDef.id) || \n                  conceptShelfItems.find(f => f.id === `original--${tableId}--${columnDef.id}`);\n    \n    // Only make draggable if we have a field\n    // react-dnd has a drag threshold, so clicks will still work for sorting\n    const [{ isDragging }, dragSource, dragPreview] = useDrag(() => ({\n        type: \"concept-card\",\n        item: field ? { \n            type: 'concept-card', \n            fieldID: field.id, \n            source: \"conceptShelf\" \n        } : undefined,\n        canDrag: !!field,\n        collect: (monitor) => ({\n            isDragging: monitor.isDragging(),\n            handlerId: monitor.getHandlerId(),\n        }),\n    }), [field]);\n\n    let backgroundColor: string;\n    let borderBottomColor = theme.palette.primary.main;\n    if (columnDef.source == \"custom\") {\n        backgroundColor = theme.palette.custom.bgcolor || alpha(theme.palette.custom.main, 0.1);\n        borderBottomColor = theme.palette.custom.main;\n    } else {\n        backgroundColor = theme.palette.primary.bgcolor || alpha(theme.palette.primary.main, 0.1);\n        borderBottomColor = theme.palette.primary.main;\n    }\n\n    const opacity = isDragging ? 0.3 : 1;\n    const cursorStyle = field ? (isDragging ? \"grabbing\" : \"grab\") : \"default\";\n    \n    // Enhanced background color on hover for draggable headers - based on field source (derived/original)\n    const hoverBackgroundColor = field \n        ? alpha(getColorForFieldSource(field.source, theme), 0.1)\n        : backgroundColor;\n    \n    // Determine sort icon\n    const getSortIcon = () => {\n        if (orderBy !== columnDef.id) {\n            return <UnfoldMoreIcon sx={{ fontSize: 16 }} />;\n        }\n        return order === 'asc' \n            ? <ArrowUpwardIcon sx={{ fontSize: 16 }} />\n            : <ArrowDownwardIcon sx={{ fontSize: 16 }} />;\n    };\n\n    return (\n        <Box \n            className=\"data-view-header-container\" \n            ref={dragPreview}\n            sx={{ \n                backgroundColor: backgroundColor, \n                borderBottomColor, \n                borderBottomWidth: '2px', \n                borderBottomStyle: 'solid',\n                opacity,\n                display: 'flex',\n                alignItems: 'center',\n                position: 'relative',\n                transition: 'background-color 0.2s ease, box-shadow 0.2s ease',\n                // Ensure cursor applies to TableSortLabel and its children, but not IconButton\n                '& .data-view-header-title, & .data-view-header-title *': {\n                    cursor: cursorStyle,\n                },\n                ...(field && {\n                    '&:hover': {\n                        backgroundColor: hoverBackgroundColor,\n                        boxShadow: shadow.md,\n                    },\n                }),\n            }}\n        >\n            {/* Main content area - draggable for concepts, using original TableSortLabel structure */}\n            <TableSortLabel\n                ref={field ? dragSource : undefined}\n                className=\"data-view-header-title\"\n                sx={{ \n                    display: \"flex\", \n                    flexDirection: \"row\", \n                    flex: 1,\n                    width: 'calc(100% - 24px)',\n                    cursor: cursorStyle, // Inherit cursor from parent\n                    '& .MuiTableSortLabel-icon': {\n                        display: 'none',\n                    },\n                }}\n                active={orderBy === columnDef.id}\n                direction={orderBy === columnDef.id ? order : 'asc'}\n                onClick={(e) => {\n                    // Prevent sort when dragging\n                    if (!isDragging) {\n                        e.stopPropagation();\n                        onSortClick();\n                    }\n                }}\n            >\n                <span role=\"img\" style={{ fontSize: \"inherit\", padding: \"2px\", display: \"inline-flex\", alignItems: \"center\" }}>\n                    {getIconFromType(columnDef.dataType)}\n                </span>\n                <Tooltip \n                    title={semanticType ? (\n                        <Typography sx={{ fontSize: 11 }}>\n                            <b>{columnDef.label}</b>: <i>{semanticType}</i>\n                        </Typography>\n                    ) : ''}\n                    arrow\n                    placement=\"top\"\n                >\n                    <Typography sx={{fontSize: 12, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap'}}>\n                        {columnDef.label}\n                    </Typography>\n                </Tooltip>\n            </TableSortLabel>\n            {/* Separate sort handler button */}\n            <Tooltip title={<Typography sx={{fontSize: 10}}>Sort by <b>{columnDef.label}</b></Typography>}>\n                <IconButton\n                    size=\"small\"\n                    onClick={(e) => {\n                        e.stopPropagation();\n                        onSortClick();\n                    }}\n                    sx={{\n                        padding: '2px',\n                        marginLeft: '4px',\n                        marginRight: '2px',\n                        opacity: orderBy === columnDef.id ? 1 : 0.5,\n                        '&:hover': {\n                            opacity: 1,\n                            backgroundColor: alpha(theme.palette.action.hover, 0.2),\n                        },\n                    }}\n                >\n                    {getSortIcon()}\n                </IconButton>\n            </Tooltip>\n        </Box>\n    );\n};\n\nexport const SelectableDataGrid: React.FC<SelectableDataGridProps> = ({ \n    tableId, rows, tableName, columnDefs, rowCount, virtual }) => {\n\n    const [orderBy, setOrderBy] = React.useState<string | undefined>(undefined);\n    const [order, setOrder] = React.useState<'asc' | 'desc'>('asc');\n\n    let theme = useTheme();\n\n    const [rowsToDisplay, setRowsToDisplay] = React.useState<any[]>(rows);\n    \n    // Initialize as true to cover the initial mount delay\n    const [isLoading, setIsLoading] = React.useState<boolean>(true);\n    \n    // Clear loading state after first render\n    React.useEffect(() => {\n        setIsLoading(false);\n    }, []);\n\n    React.useEffect(() => {\n        if (orderBy && !isLoading) {\n            setRowsToDisplay(rows.slice().sort(getComparator(order, orderBy)));\n        } else {\n            setRowsToDisplay(rows);\n        }\n    }, [rows, order, orderBy])\n\n    const TableComponents = {\n        Scroller: React.forwardRef<HTMLDivElement>((props, ref) => (\n            <TableContainer {...props} ref={ref} />\n        )),\n        Table: (props: any) => <Table {...props} />,\n        TableHead: React.forwardRef<HTMLTableSectionElement>((props, ref) => (\n            <TableHead {...props} ref={ref} className='table-header-container' />\n        )),\n        TableRow: (props: any) => {\n            const index = props['data-index'];\n            return <TableRow {...props} style={{backgroundColor: index % 2 == 0 ? \"rgba(255, 255, 255, 0.05)\" : \"rgba(0, 0, 0, 0.02)\"}}/>\n        },\n        TableBody: React.forwardRef<HTMLTableSectionElement>((props, ref) => (\n            <TableBody {...props} ref={ref} />\n        )),\n    }\n\n    const handleDownload = async (format: 'csv' | 'tsv') => {\n        const delimiter = format === 'tsv' ? '\\t' : ',';\n        const ext = format === 'tsv' ? 'tsv' : 'csv';\n        const mime = format === 'tsv' ? 'text/tab-separated-values' : 'text/csv';\n\n        if (virtual) {\n            // Virtual table: fetch full data from server\n            try {\n                const response = await fetchWithIdentity(getUrls().EXPORT_TABLE_CSV, {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application/json' },\n                    body: JSON.stringify({ table_name: tableId, delimiter }),\n                });\n                if (!response.ok) throw new Error('Export failed');\n                const blob = await response.blob();\n                const a = document.createElement('a');\n                a.href = URL.createObjectURL(blob);\n                a.download = `${tableName}.${ext}`;\n                a.click();\n                URL.revokeObjectURL(a.href);\n            } catch (error) {\n                console.error('Error downloading table:', error);\n            }\n        } else {\n            // Local table: export from in-memory rows\n            const csvContent = d3.dsvFormat(delimiter).format(rows);\n            const blob = new Blob([csvContent], { type: mime });\n            const a = document.createElement('a');\n            a.href = URL.createObjectURL(blob);\n            a.download = `${tableName}.${ext}`;\n            a.click();\n            URL.revokeObjectURL(a.href);\n        }\n    };\n\n    const fetchVirtualData = (sortByColumnIds: string[], sortOrder: 'asc' | 'desc') => {\n        // Set loading to true when starting the fetch\n        setIsLoading(true);\n\n        let message = sortByColumnIds.length > 0 ? {\n            table: tableId,\n            size: 1000,\n            method: sortOrder === 'asc' ? 'head' : 'bottom',\n            order_by_fields: sortByColumnIds\n        } : {\n            table: tableId,\n            size: 1000,\n            method: 'random'\n        }\n        \n        // Use the SAMPLE_TABLE endpoint with appropriate ordering\n        fetchWithIdentity(getUrls().SAMPLE_TABLE, {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/json',\n            },\n            body: JSON.stringify(message),\n        })\n        .then(response => response.json())\n        .then(data => {\n            if (data.status === 'success') {\n                setRowsToDisplay(data.rows);\n            }\n            // Set loading to false when done\n            setIsLoading(false);\n        })\n        .catch(error => {\n            console.error('Error fetching sorted table data:', error);\n            // Ensure loading is set to false even on error\n            setIsLoading(false);\n        });\n    };\n\n    return (\n        <Box className=\"table-container table-container-small\"\n            sx={{\n                width: '100%',\n                height: '100%',\n                position: 'relative',\n                \"& .MuiTableCell-root\": {\n                    fontSize: 12, maxWidth: \"120px\", py: '2px', cursor: \"default\",\n                    overflow: \"clip\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\"\n                }\n            }}>\n            {/* Loading Overlay */}\n            {isLoading && (\n                <Box sx={{ \n                    position: 'absolute', \n                    top: 0, \n                    left: 0, \n                    right: 0,\n                    zIndex: 10, \n                    display: 'flex', \n                    alignItems: 'center', \n                    justifyContent: 'center',\n                    backgroundColor: 'rgba(255, 255, 255, 0.7)',\n                    padding: '8px',\n                    height: '100%',\n                    borderTopLeftRadius: '4px',\n                    borderTopRightRadius: '4px'\n                }}>\n                    <CircularProgress size={24} sx={{ mr: 1, color: 'lightgray' }} />\n                    <Typography variant=\"body2\" color=\"text.secondary\">Loading ...</Typography>\n                </Box>\n            )}\n            <Fade in={!isLoading} timeout={{appear: 300, enter: 300, exit: 2000}}>\n                <Box sx={{ flex: '1 1', display: 'flex', flexDirection: 'column' }}>\n                    <TableVirtuoso\n                            style={{ flex: '1 1' }}\n                            data={rowsToDisplay}\n                            components={TableComponents}\n                            fixedHeaderContent={() => {\n                        return (\n                            <TableRow key='header-fixed' style={{ paddingRight: 0, marginRight: '17px', height: '24px'}}>\n                                {columnDefs.map((columnDef, index) => {\n                                    return (\n                                        <TableCell\n                                            className='data-view-header-cell'\n                                            key={columnDef.id}\n                                            align={columnDef.align}\n                                            sx={{p: 0, minWidth: columnDef.minWidth, width: columnDef.width,}}\n                                        >\n                                            <DraggableHeader\n                                                columnDef={columnDef}\n                                                orderBy={orderBy}\n                                                order={order}\n                                                tableId={tableId}\n                                                onSortClick={() => {\n                                                    let newOrder: 'asc' | 'desc' = 'asc';\n                                                    let newOrderBy : string | undefined = columnDef.id;\n                                                    if (orderBy === columnDef.id && order === 'asc') {\n                                                        newOrder = 'desc';\n                                                    } else if (orderBy === columnDef.id && order === 'desc') {\n                                                        newOrder = 'asc';\n                                                        newOrderBy = undefined;\n                                                    } else {\n                                                        newOrder = 'asc';\n                                                    }\n\n                                                    setOrder(newOrder);\n                                                    setOrderBy(newOrderBy);\n                                                    \n                                                    if (virtual) {\n                                                        fetchVirtualData(newOrderBy ? [newOrderBy] : [], newOrder);\n                                                    }\n                                                }}\n                                            />\n                                        </TableCell>\n                                    );\n                                })}\n                            </TableRow>\n                        )\n                    }}\n                    itemContent={(rowIndex, data) => {\n                        return (\n                            <>\n                                {columnDefs.map((column, colIndex) => {\n                                    let backgroundColor = \"rgba(255,255,255,0.05)\";\n                                    // if (column.source == \"custom\") {\n                                    //     backgroundColor = alpha(theme.palette.custom.main, 0.03);\n                                    // } else {\n                                    //     backgroundColor = \"rgba(255,255,255,0.05)\";\n                                    // }\n\n                                    return (\n                                        <TableCell\n                                            key={`col-${colIndex}-row-${rowIndex}`}\n                                            sx={{backgroundColor}}\n                                            align={column.align || 'left'}\n                                        >\n                                            {column.format ? column.format(data[column.id]) : data[column.id]}\n                                        </TableCell>\n                                    )\n                                })}\n                            </>\n                        )\n                    }}\n                />\n                </Box>\n            </Fade>\n            <Paper variant=\"outlined\"\n                sx={{ display: 'flex', flexDirection: 'row',  position: 'absolute', bottom: 6, right: 12 }}>\n                <Box sx={{display: 'flex', alignItems: 'center', mx: 1}}>\n                    <Typography sx={{display: 'flex', alignItems: 'center', fontSize: '12px'}}>\n                        {virtual && <TableIcon sx={{width: 14, height: 14, mr: 1}}/> }\n                        {`${rowCount} rows`}\n                    </Typography>\n                    {virtual && rowCount > 10000 && (\n                        <Tooltip title=\"view 10000 random rows from this table\">\n                            <IconButton \n                                size=\"small\" \n                                color=\"primary\" \n                                sx={{marginRight: 1}}\n                                onClick={() => {\n                                    fetchVirtualData([], 'asc');\n                                }}\n                            >\n                                <CasinoIcon sx={{\n                                    fontSize: 18, \n                                    '&:hover': {\n                                        transform: 'rotate(180deg)'\n                                    }\n                                }} />\n                            </IconButton>\n                        </Tooltip>\n                    )}\n                    <Tooltip title=\"Download as CSV\">\n                        <IconButton \n                            size=\"small\" \n                            color=\"primary\" \n                            onClick={() => handleDownload('csv')}\n                        >\n                            <FileDownloadIcon sx={{ fontSize: 18 }} />\n                        </IconButton>\n                    </Tooltip>\n                </Box>\n            </Paper>\n        </Box >\n    );\n}\n"
  },
  {
    "path": "src/views/SimpleChartRecBox.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { FC, useState, useCallback, useRef, useEffect } from 'react';\n\nimport {\n    Box,\n    IconButton,\n    Tooltip,\n    Typography,\n    useTheme,\n    TextField,\n    CircularProgress,\n    Card,\n    LinearProgress,\n    Button,\n} from '@mui/material';\n\nimport { useDispatch, useSelector } from 'react-redux';\nimport { DataFormulatorState, dfActions, dfSelectors, fetchCodeExpl, fetchFieldSemanticType, fetchChartInsight, generateFreshChart } from '../app/dfSlice';\nimport { AppDispatch } from '../app/store';\nimport { resolveRecommendedChart, getUrls, fetchWithIdentity, getTriggers } from '../app/utils';\nimport { Chart, DictTable, FieldItem, createDictTable } from \"../components/ComponentType\";\n\nimport { alpha } from '@mui/material/styles';\nimport SendIcon from '@mui/icons-material/Send';\nimport CloseIcon from '@mui/icons-material/Close';\nimport AddIcon from '@mui/icons-material/Add';\nimport TipsAndUpdatesIcon from '@mui/icons-material/TipsAndUpdates';\nimport CancelOutlinedIcon from '@mui/icons-material/CancelOutlined';\nimport StopCircleOutlinedIcon from '@mui/icons-material/StopCircleOutlined';\nimport SmartToyOutlinedIcon from '@mui/icons-material/SmartToyOutlined';\n\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport { renderTextWithEmphasis } from './EncodingShelfCard';\nimport { UnifiedDataUploadDialog } from './UnifiedDataUploadDialog';\nimport { Theme } from '@mui/material/styles';\n\nconst AgentWorkingOverlay: FC<{ relevantAgentActions: any[]; theme: Theme; onCancel?: () => void }> = ({ relevantAgentActions, theme, onCancel }) => {\n    const runningAction = relevantAgentActions.find(a => a.status === 'running');\n    const latestMessage = runningAction?.description || 'thinking...';\n    return (\n        <Box sx={{\n            position: 'absolute',\n            top: 0, left: 0, right: 0, bottom: 0,\n            backgroundColor: alpha(theme.palette.background.paper, 0.88),\n            backdropFilter: 'blur(3px)',\n            display: 'flex',\n            flexDirection: 'column',\n            alignItems: 'center',\n            justifyContent: 'center',\n            gap: 0.5,\n            zIndex: 2,\n            borderRadius: 'inherit',\n            px: 2,\n            overflow: 'hidden',\n        }}>\n            <Box sx={{ display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 1 }}>\n                <Typography sx={{\n                    fontSize: 10,\n                    animation: 'agentWriting 1.2s ease-in-out infinite',\n                    '@keyframes agentWriting': {\n                        '0%, 100%': { transform: 'rotate(-15deg) translate(0, 0)' },\n                        '25%': { transform: 'rotate(-8deg) translate(2px, 1px)' },\n                        '50%': { transform: 'rotate(-15deg) translate(0, 0)' },\n                        '75%': { transform: 'rotate(-20deg) translate(-2px, 1px)' },\n                    },\n                    transformOrigin: 'bottom right',\n                }}>\n                    ✏️\n                </Typography>\n                <Typography variant=\"body2\" color=\"text.secondary\" sx={{ fontWeight: 500, fontSize: 10 }}>\n                    Agent is working...\n                </Typography>\n            </Box>\n            {onCancel && (\n                <IconButton\n                    size=\"small\"\n                    onClick={onCancel}\n                    sx={{ position: 'absolute', bottom: 6, right: 6, p: 1.5, width: 16, height: 16, color: theme.palette.warning.main }}\n                >\n                    <StopCircleOutlinedIcon sx={{ fontSize: 14 }} />\n                </IconButton>\n            )}\n            <Typography variant=\"caption\" sx={{\n                color: 'text.disabled',\n                fontSize: 10,\n                textAlign: 'center',\n                display: '-webkit-box',\n                WebkitLineClamp: 3,\n                WebkitBoxOrient: 'vertical',\n                overflow: 'hidden',\n                lineHeight: 1.3,\n                wordBreak: 'break-word',\n            }}>\n                {latestMessage}\n            </Typography>\n            <LinearProgress sx={{ position: 'absolute', bottom: 0, left: 0, right: 0, height: 2, borderRadius: '0 0 8px 8px' }} />\n        </Box>\n    );\n};\n\nexport const SimpleChartRecBox: FC = function () {\n\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const focusedId = useSelector((state: DataFormulatorState) => state.focusedId);\n    const charts = useSelector(dfSelectors.getAllCharts);\n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n    const config = useSelector((state: DataFormulatorState) => state.config);\n    const agentRules = useSelector((state: DataFormulatorState) => state.agentRules);\n    const activeModel = useSelector(dfSelectors.getActiveModel);\n    const agentActions = useSelector((state: DataFormulatorState) => state.agentActions);\n\n    const theme = useTheme();\n    const dispatch = useDispatch<AppDispatch>();\n\n    const [chatPrompt, setChatPrompt] = useState(\"\");\n    const [isChatFormulating, setIsChatFormulating] = useState(false);\n    const [ideas, setIdeas] = useState<{text: string, goal: string, difficulty: 'easy' | 'medium' | 'hard'}[]>([]);\n    const [isLoadingIdeas, setIsLoadingIdeas] = useState(false);\n    const [thinkingBuffer, setThinkingBuffer] = useState('');\n    const [uploadDialogOpen, setUploadDialogOpen] = useState(false);\n    const agentAbortRef = useRef<AbortController | null>(null);\n    const ideasAbortRef = useRef<AbortController | null>(null);\n\n    // pendingClarification is now derived from Redux (stored on the agentAction itself)\n    // so it persists when user clicks away and comes back.\n\n    // On mount, clean up any stale \"running\" agent actions left over from a page refresh.\n    // The streaming connection is lost on refresh, so these will never complete.\n    // Only mark actions whose lastUpdate predates the current page load as stale.\n    useEffect(() => {\n        const pageLoadTime = performance.timeOrigin; // ms timestamp of when the page was loaded\n        const staleRunning = agentActions.filter(a => a.status === 'running' && a.lastUpdate < pageLoadTime);\n        if (staleRunning.length === 0) return;\n        // The last stale action gets the visible message; others are silently marked warning\n        const lastStale = staleRunning[staleRunning.length - 1];\n        for (const action of staleRunning) {\n            dispatch(dfActions.updateAgentWorkInProgress({\n                actionId: action.actionId,\n                description: action === lastStale ? 'Interrupted by page refresh' : action.description,\n                status: 'warning',\n                hidden: false,\n                ...(action === lastStale ? { message: { content: 'Interrupted by page refresh', role: 'clarify' } } : {}),\n            }));\n        }\n    }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n    const inputCardRef = useRef<HTMLDivElement>(null);\n\n    const focusedTableId = useCallback(() => {\n        if (!focusedId) return undefined;\n        if (focusedId.type === 'table') return focusedId.tableId;\n        const chartId = focusedId.chartId;\n        const chart = charts.find(c => c.id === chartId);\n        return chart?.tableRef;\n    }, [focusedId, charts])();\n\n    // Clear ideas when focused table changes — ideas are scoped per table\n    useEffect(() => {\n        setIdeas([]);\n        setIsLoadingIdeas(false);\n    }, [focusedTableId]);\n\n    // Root tables and priority ordering for API calls\n    const rootTables = tables.filter(t => t.derive === undefined || t.anchored);\n    const currentTable = tables.find(t => t.id === focusedTableId);\n    const priorityIds = (currentTable?.derive && !currentTable.anchored)\n        ? currentTable.derive.source\n        : focusedTableId ? [focusedTableId] : [];\n    const selectedTableIds = [\n        ...priorityIds.filter(id => rootTables.some(t => t.id === id)),\n        ...rootTables.map(t => t.id).filter(id => !priorityIds.includes(id))\n    ];\n\n    // Collect table IDs from root up to (and including) the focused table for agent action matching\n    const threadTableIds = React.useMemo(() => {\n        if (!focusedTableId) return new Set<string>();\n        const ids = new Set<string>();\n\n        // Walk up from focused table to root — only ancestors, not descendants\n        let current = tables.find(t => t.id === focusedTableId);\n        while (current) {\n            ids.add(current.id);\n            if (current.derive && !current.anchored && current.derive.trigger) {\n                const parentId = current.derive.trigger.tableId;\n                if (ids.has(parentId)) break;\n                current = tables.find(t => t.id === parentId);\n            } else {\n                break;\n            }\n        }\n\n        return ids;\n    }, [focusedTableId, tables]);\n\n    // Agent actions relevant to all tables in this thread, sorted by creation time\n    // Agent actions relevant to the focused table's thread.\n    // An action is relevant if:\n    //  - its originTableId is in the ancestor chain, AND\n    //  - it produced a table in the ancestor chain (resultTableId ∈ threadTableIds),\n    //    OR is still running, OR the focused table is the originTableId itself.\n    const relevantAgentActions = React.useMemo(() => {\n        if (threadTableIds.size === 0) return [];\n        return agentActions\n            .filter(a => {\n                if (a.hidden) return false;\n                if (!threadTableIds.has(a.originTableId)) return false;\n                // Include if still running or waiting for clarification (live progress)\n                if (a.status === 'running' || a.status === 'warning') return true;\n                // Include if any message produced a table in the ancestor chain\n                if (a.messages?.some(m => m.resultTableId && threadTableIds.has(m.resultTableId))) return true;\n                // Include if the focused table IS the origin (user is at the starting table)\n                if (focusedTableId === a.originTableId) return true;\n                return false;\n            })\n            .sort((a, b) => (a.messages?.[0]?.timestamp || a.lastUpdate) - (b.messages?.[0]?.timestamp || b.lastUpdate));\n    }, [agentActions, threadTableIds, focusedTableId]);\n\n    const hasRunningAgent = relevantAgentActions.some(a => a.status === 'running');\n\n    // Derive pending clarification from the current thread's relevant actions (stored in Redux)\n    const pendingClarification = React.useMemo(() => {\n        const action = relevantAgentActions.find(a => a.pendingClarification);\n        if (!action || !action.pendingClarification) return null;\n        return { ...action.pendingClarification, actionId: action.actionId };\n    }, [relevantAgentActions]);\n\n    // Extract the clarification question text from the last 'clarify' message\n    const clarificationQuestion = React.useMemo(() => {\n        if (!pendingClarification) return null;\n        const action = agentActions.find(a => a.actionId === pendingClarification.actionId);\n        if (!action?.messages) return null;\n        const clarifyMsgs = action.messages.filter(m => m.role === 'clarify');\n        return clarifyMsgs.length > 0 ? clarifyMsgs[clarifyMsgs.length - 1].content : null;\n    }, [pendingClarification, agentActions]);\n\n    const getIdeasFromAgent = useCallback(async () => {\n        if (!currentTable || isLoadingIdeas) return;\n        setIsLoadingIdeas(true);\n        setIdeas([]);\n        setThinkingBuffer('');\n\n        try {\n            let explorationThread: any[] = [];\n            const sourceTables = selectedTableIds.map(id => tables.find(t => t.id === id) as DictTable);\n\n            if (currentTable.derive && !currentTable.anchored) {\n                const triggers = getTriggers(currentTable, tables);\n                explorationThread = triggers.map(trigger => ({\n                    name: trigger.resultTableId,\n                    rows: tables.find(t2 => t2.id === trigger.resultTableId)?.rows,\n                    description: `Derive from ${tables.find(t2 => t2.id === trigger.resultTableId)?.derive?.source} with instruction: ${trigger.instruction}`,\n                }));\n            }\n\n            const messageBody = JSON.stringify({\n                token: String(Date.now()),\n                model: activeModel,\n                mode: 'interactive',\n                input_tables: sourceTables.map(t => ({\n                    name: t.virtual?.tableId || t.id.replace(/\\.[^/.]+$/, \"\"),\n                    rows: t.rows,\n                    attached_metadata: t.attachedMetadata\n                })),\n                exploration_thread: explorationThread,\n                agent_exploration_rules: agentRules.exploration\n            });\n\n            const controller = new AbortController();\n            ideasAbortRef.current = controller;\n            const timeoutId = setTimeout(() => controller.abort(), config.formulateTimeoutSeconds * 1000);\n\n            const response = await fetchWithIdentity(getUrls().GET_RECOMMENDATION_QUESTIONS, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: messageBody,\n                signal: controller.signal\n            });\n            clearTimeout(timeoutId);\n\n            if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\n            const reader = response.body?.getReader();\n            if (!reader) throw new Error('No response body reader available');\n\n            const decoder = new TextDecoder();\n            let buffer = '';\n            let lines: string[] = [];\n\n            try {\n                while (true) {\n                    const { done, value } = await reader.read();\n                    if (done) break;\n                    buffer += decoder.decode(value, { stream: true });\n                    const newLines = buffer.split('data: ').filter(l => l.trim() !== '');\n                    buffer = newLines.pop() || '';\n                    if (newLines.length > 0) {\n                        lines.push(...newLines);\n                        const parsed = lines\n                            .map(l => { try { return JSON.parse(l.trim()); } catch { return null; } })\n                            .filter(Boolean)\n                            .map(b => ({ text: b.text, goal: b.goal, difficulty: b.difficulty }));\n                        setIdeas(parsed);\n                    }\n                    setThinkingBuffer(buffer.replace(/^data: /, ''));\n                }\n            } finally {\n                reader.releaseLock();\n            }\n            lines.push(buffer);\n            const finalIdeas = lines\n                .map(l => { try { return JSON.parse(l.trim()); } catch { return null; } })\n                .filter(Boolean)\n                .map(b => ({ text: b.text, goal: b.goal, difficulty: b.difficulty }));\n            setIdeas(finalIdeas);\n        } catch (error) {\n            console.error('Error getting ideas:', error);\n        } finally {\n            setIsLoadingIdeas(false);\n            setThinkingBuffer('');\n            ideasAbortRef.current = null;\n        }\n    }, [currentTable, isLoadingIdeas, selectedTableIds, tables, activeModel, agentRules, config, dispatch]);\n\n    const exploreFromChat = useCallback((prompt: string, clarificationContext?: {\n        trajectory: any[];\n        completedStepCount: number;\n        actionId: string;\n        lastCreatedTableId: string | null;\n    }) => {\n        if (!focusedTableId || prompt.trim() === \"\") return;\n\n        const rootTables = tables.filter(t => t.derive === undefined || t.anchored);\n        const currentTable = tables.find(t => t.id === focusedTableId);\n        const priorityIds = (currentTable?.derive && !currentTable.anchored)\n            ? currentTable.derive.source\n            : [focusedTableId];\n        const selectedTableIds = [\n            ...priorityIds.filter(id => rootTables.some(t => t.id === id)),\n            ...rootTables.map(t => t.id).filter(id => !priorityIds.includes(id))\n        ];\n        if (selectedTableIds.length === 0) return;\n\n        const isResume = !!clarificationContext;\n        const actionId = isResume ? clarificationContext!.actionId : `exploreDataFromNL_${String(Date.now())}`;\n        const actionTables = selectedTableIds.map(id => tables.find(t => t.id === id) as DictTable);\n\n        setIsChatFormulating(true);\n\n        if (isResume) {\n            // Show user's clarification reply in the thread; clear pendingClarification in Redux\n            dispatch(dfActions.updateAgentWorkInProgress({ actionId, description: prompt, status: 'running', hidden: false,\n                    message: { content: prompt, role: 'user' }, pendingClarification: null }));\n        } else {\n            // User instruction with source table context\n            dispatch(dfActions.updateAgentWorkInProgress({ actionId, originTableId: focusedTableId, description: prompt, status: 'running', hidden: false,\n                message: { content: prompt, role: 'user' } }));\n        }\n\n        // Collect previous conversation messages for context (only for fresh starts)\n        let conversationHistory: { role: string; content: string }[] | undefined = undefined;\n        if (!isResume) {\n            const history: { role: string; content: string }[] = [];\n            for (const action of relevantAgentActions) {\n                if (action.messages) {\n                    for (const m of action.messages) {\n                        if (m.role === 'user') {\n                            history.push({ role: 'user', content: m.content });\n                        } else if (m.role === 'thinking' || m.role === 'completion') {\n                            history.push({ role: 'assistant', content: m.content });\n                        }\n                    }\n                }\n            }\n            if (history.length > 0) conversationHistory = history;\n        }\n\n        const token = String(Date.now());\n        const requestBody: any = {\n            token,\n            input_tables: actionTables.map(t => ({\n                name: t.virtual?.tableId || t.id.replace(/\\.[^/.]+$/, \"\"),\n                rows: t.rows,\n                attached_metadata: t.attachedMetadata\n            })),\n            model: activeModel,\n            max_iterations: 5,\n            agent_exploration_rules: agentRules.exploration,\n            agent_coding_rules: agentRules.coding\n        };\n\n        if (isResume) {\n            // Stateless resume: send back trajectory + user answer\n            requestBody.trajectory = clarificationContext!.trajectory;\n            requestBody.clarification_response = prompt;\n            requestBody.completed_step_count = clarificationContext!.completedStepCount;\n        } else {\n            requestBody.user_question = prompt;\n            if (conversationHistory) requestBody.conversation_history = conversationHistory;\n        }\n\n        const messageBody = JSON.stringify(requestBody);\n\n        const controller = new AbortController();\n        agentAbortRef.current = controller;\n        const timeoutId = setTimeout(() => controller.abort(), config.formulateTimeoutSeconds * 6 * 1000);\n\n        let allResults: any[] = [];\n        let createdTables: DictTable[] = [];\n        let createdCharts: Chart[] = [];\n        let allNewConcepts: FieldItem[] = [];\n        let isCompleted = false;\n        let lastCreatedTableId: string | null = isResume ? clarificationContext!.lastCreatedTableId : null;\n\n        const genTableId = () => {\n            let tableSuffix = Number.parseInt((Date.now() - Math.floor(Math.random() * 10000)).toString().slice(-6));\n            let tId = `table-${tableSuffix}`;\n            while (tables.find(t => t.id === tId) !== undefined) {\n                tableSuffix += 1;\n                tId = `table-${tableSuffix}`;\n            }\n            return tId;\n        };\n\n        const processStreamingResult = (result: any) => {\n            // Agent thinking / choosing next action\n            if (result.type === \"action\" && result.action === \"visualize\") {\n                const thinkingMsg = result.thought || \"Thinking...\";\n                const currentObserveId = lastCreatedTableId || focusedTableId;\n                dispatch(dfActions.updateAgentWorkInProgress({ actionId, description: thinkingMsg, status: 'running', hidden: false,\n                    message: { content: thinkingMsg, role: 'thinking', observeTableId: currentObserveId } }));\n            }\n            // Visualization result (same shape as old data_transformation)\n            if (result.type === \"result\" && result.status === \"success\") {\n                const transformResult = result.content.result;\n                if (!transformResult || transformResult.status !== 'ok') return;\n\n                const transformedData = transformResult.content;\n                const code = transformResult.code;\n                const dialog = transformResult.dialog;\n                const refinedGoal = transformResult.refined_goal;\n                const question = result.content.question;\n                if (!transformedData || !transformedData.rows || transformedData.rows.length === 0) return;\n\n                const rows = transformedData.rows;\n                const candidateTableId = transformedData.virtual?.table_name || genTableId();\n                const displayInstruction = refinedGoal?.display_instruction || `Exploration step ${createdTables.length + 1}: ${question}`;\n\n                // Chain from last created table, or focused table if first\n                const triggerTableId = lastCreatedTableId || focusedTableId!;\n\n                const candidateTable = createDictTable(candidateTableId, rows, undefined);\n                candidateTable.derive = {\n                    code: code || `# Exploration step ${createdTables.length + 1}`,\n                    codeSignature: result.content?.result?.code_signature,\n                    outputVariable: refinedGoal?.output_variable || 'result_df',\n                    source: selectedTableIds,\n                    dialog: dialog || [],\n                    trigger: {\n                        tableId: triggerTableId,\n                        instruction: question,\n                        displayInstruction,\n                        chart: undefined,\n                        resultTableId: candidateTableId\n                    }\n                };\n                if (transformedData.virtual) {\n                    candidateTable.virtual = { tableId: transformedData.virtual.table_name, rowCount: transformedData.virtual.row_count };\n                }\n\n                // Bootstrap metadata from agent field_metadata (temporary until fetchFieldSemanticType completes)\n                const fieldMetadata = refinedGoal?.['field_metadata'];\n                if (fieldMetadata && typeof fieldMetadata === 'object') {\n                    for (const [fieldName, meta] of Object.entries(fieldMetadata)) {\n                        if (!candidateTable.metadata[fieldName]) continue;\n                        if (typeof meta === 'string') {\n                            // Plain string format: { \"field\": \"SemanticType\" }\n                            candidateTable.metadata[fieldName].semanticType = meta;\n                        } else if (typeof meta === 'object' && meta !== null) {\n                            // Dict format: { \"field\": { \"semantic_type\": \"...\", \"unit\": \"...\", ... } }\n                            const m = meta as Record<string, any>;\n                            if (m['semantic_type']) {\n                                candidateTable.metadata[fieldName].semanticType = m['semantic_type'];\n                            }\n                            if (m['unit']) {\n                                candidateTable.metadata[fieldName].unit = m['unit'];\n                            }\n                            if (m['intrinsic_domain']) {\n                                candidateTable.metadata[fieldName].intrinsicDomain = m['intrinsic_domain'];\n                            }\n                        }\n                    }\n                }\n\n                createdTables.push(candidateTable);\n                const observedTableId = lastCreatedTableId || focusedTableId; // table the agent was looking at before this step\n                lastCreatedTableId = candidateTableId;\n\n                dispatch(dfActions.updateAgentWorkInProgress({ actionId, description: displayInstruction, status: 'running', hidden: false,\n                    message: { content: displayInstruction, role: 'action', observeTableId: observedTableId, resultTableId: candidateTableId } }));\n\n                const names = candidateTable.names;\n                const missingNames = names.filter(name =>\n                    !conceptShelfItems.some(field => field.name === name) &&\n                    !allNewConcepts.some(concept => concept.name === name)\n                );\n                const conceptsToAdd = missingNames.map(name => ({\n                    id: `concept-${name}-${Date.now()}-${Math.random()}`,\n                    name,\n                    source: \"custom\",\n                    tableRef: \"custom\",\n                } as FieldItem));\n                allNewConcepts.push(...conceptsToAdd);\n\n                let triggerChart = generateFreshChart(actionTables[0].id, 'Auto') as Chart;\n                triggerChart.source = 'trigger';\n                if (candidateTable.derive) {\n                    candidateTable.derive.trigger.chart = triggerChart;\n                }\n\n                // DataRecAgent always returns a refined_goal (with chart info),\n                // so we can rely on it to create the chart for every step.\n                const currentConcepts = [...conceptShelfItems.filter(c => names.includes(c.name)), ...allNewConcepts, ...conceptsToAdd];\n                let newChart = resolveRecommendedChart(refinedGoal, currentConcepts, candidateTable);\n                createdCharts.push(newChart);\n                dispatch(dfActions.addChart(newChart));\n                dispatch(dfActions.setFocused({ type: 'chart', chartId: newChart.id }));\n\n                if (conceptsToAdd.length > 0) {\n                    dispatch(dfActions.addConceptItems(conceptsToAdd));\n                }\n                dispatch(dfActions.insertDerivedTables(candidateTable));\n                dispatch(fetchFieldSemanticType(candidateTable));\n                dispatch(fetchCodeExpl(candidateTable));\n\n                if (createdCharts.length > 0) {\n                    const lastChart = createdCharts[createdCharts.length - 1];\n                    setTimeout(() => {\n                        dispatch(fetchChartInsight({ chartId: lastChart.id, tableId: candidateTable.id }) as any);\n                    }, 1500);\n                }\n            }\n            // Agent asks for clarification — pause and let user respond\n            if (result.type === \"clarify\") {\n                const clarifyMsg = result.message || \"Could you clarify?\";\n                dispatch(dfActions.updateAgentWorkInProgress({ actionId, description: clarifyMsg, status: 'warning', hidden: false,\n                    message: { content: clarifyMsg, role: 'clarify' },\n                    pendingClarification: {\n                        trajectory: result.trajectory || [],\n                        completedStepCount: result.completed_step_count || 0,\n                        lastCreatedTableId,\n                    }\n                }));\n                setIsChatFormulating(false);\n                agentAbortRef.current = null;\n                clearTimeout(timeoutId);\n                setChatPrompt(\"\");\n                isCompleted = true; // prevent handleCompletion from firing\n            }\n        };\n\n        const handleCompletion = () => {\n            if (isCompleted) return;\n            isCompleted = true;\n            setIsChatFormulating(false);\n            agentAbortRef.current = null;\n            clearTimeout(timeoutId);\n\n            const completionResult = allResults.find((r: any) => r.type === \"completion\");\n            if (completionResult) {\n                const summary = completionResult.content.summary || completionResult.content.message || \"\";\n                const status: \"completed\" | \"warning\" = completionResult.status === \"success\" ? \"completed\" : \"warning\";\n                dispatch(dfActions.updateAgentWorkInProgress({ actionId, description: summary, status, hidden: false,\n                    message: { content: summary, role: 'completion' } }));\n                setChatPrompt(\"\");\n            } else {\n                dispatch(dfActions.updateAgentWorkInProgress({ actionId, description: \"The agent got lost in the data.\", status: 'warning', hidden: false,\n                    message: { content: \"The agent got lost in the data.\", role: 'clarify' } }));\n            }\n        };\n\n        fetchWithIdentity(getUrls().DATA_AGENT_STREAMING, {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json' },\n            body: messageBody,\n            signal: controller.signal\n        })\n        .then(async (response) => {\n            if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\n            const reader = response.body?.getReader();\n            if (!reader) throw new Error('No response body reader available');\n\n            const decoder = new TextDecoder();\n            let buffer = '';\n\n            try {\n                while (true) {\n                    const { done, value } = await reader.read();\n                    if (done) { handleCompletion(); break; }\n                    buffer += decoder.decode(value, { stream: true });\n                    const lines = buffer.split('\\n');\n                    buffer = lines.pop() || '';\n\n                    for (let line of lines) {\n                        if (line.trim() !== \"\") {\n                            try {\n                                const data = JSON.parse(line);\n                                if (data.token === token) {\n                                    if (data.status === \"ok\" && data.result) {\n                                        allResults.push(data.result);\n                                        processStreamingResult(data.result);\n                                        if (data.result.type === \"completion\" || data.result.type === \"clarify\") { handleCompletion(); return; }\n                                    } else if (data.status === \"error\") {\n                                        setIsChatFormulating(false);\n                                        clearTimeout(timeoutId);\n                                        dispatch(dfActions.updateAgentWorkInProgress({ actionId, description: data.error_message || \"Error during exploration\", status: 'failed', hidden: false,\n                                            message: { content: data.error_message || \"Error during exploration\", role: 'error' } }));\n                                        return;\n                                    }\n                                }\n                            } catch (parseError) {\n                                console.warn('Failed to parse streaming response:', parseError);\n                            }\n                        }\n                    }\n                }\n            } finally {\n                reader.releaseLock();\n            }\n        })\n        .catch((error) => {\n            setIsChatFormulating(false);\n            agentAbortRef.current = null;\n            clearTimeout(timeoutId);\n            const isCancelled = error.name === 'AbortError' && !isCompleted;\n            const errorMessage = isCancelled ? \"Exploration cancelled\" : error.name === 'AbortError' ? \"Exploration timed out\" : `Exploration failed: ${error.message}`;\n            dispatch(dfActions.updateAgentWorkInProgress({ actionId, description: errorMessage, status: isCancelled ? 'warning' : 'failed', hidden: false,\n                    message: { content: errorMessage, role: isCancelled ? 'clarify' : 'error' } }));\n        });\n    }, [focusedTableId, tables, activeModel, agentRules, config, conceptShelfItems, dispatch, relevantAgentActions]);\n\n    const cancelAgent = useCallback(() => {\n        if (agentAbortRef.current) {\n            agentAbortRef.current.abort();\n            agentAbortRef.current = null;\n        }\n        // Also dismiss any pending clarification\n        if (pendingClarification) {\n            dispatch(dfActions.updateAgentWorkInProgress({\n                actionId: pendingClarification.actionId,\n                description: \"Conversation ended by user.\",\n                status: 'completed',\n                hidden: false,\n                message: { content: \"Conversation ended by user.\", role: 'completion' },\n                pendingClarification: null,\n            }));\n        }\n    }, [pendingClarification, dispatch]);\n\n    const gradientBorder = `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.6)}, ${alpha(theme.palette.secondary.main, 0.55)})`;\n    const workingBorder = `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.3)}, ${alpha(theme.palette.secondary.main, 0.25)})`;\n\n    const inputBox = (\n        <Card ref={inputCardRef} variant=\"outlined\" sx={{\n            display: 'flex', flexDirection: 'column',\n            mx: 1, mb: 1, mt: 0.5,\n            px: 1, pt: 0.5, pb: 0.25,\n            borderRadius: '8px',\n            border: 'none',\n            outline: 'none',\n            position: 'relative',\n            overflow: isChatFormulating ? 'hidden' : 'visible',\n            flexShrink: 0,\n            transition: 'box-shadow 0.2s ease, background-color 0.2s ease',\n            ...(isChatFormulating ? { backgroundColor: alpha(theme.palette.action.disabledBackground, 0.06) } : {}),\n            // Gradient border via pseudo-element (works with border-radius)\n            '&::before': {\n                content: '\"\"',\n                position: 'absolute',\n                inset: 0,\n                borderRadius: 'inherit',\n                padding: '1.5px',\n                background: isChatFormulating \n                    ? workingBorder \n                    : gradientBorder,\n                WebkitMask: 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n                WebkitMaskComposite: 'xor',\n                maskComposite: 'exclude',\n                pointerEvents: 'none',\n                zIndex: 3,\n            },\n        }}\n        >\n            {/* Show clarification question above input when agent is asking */}\n            {clarificationQuestion && pendingClarification && !isChatFormulating && (\n                <Box sx={{\n                    display: 'flex', alignItems: 'flex-start', gap: '6px',\n                    px: 0.5, py: '6px',\n                    borderBottom: `1px solid ${alpha(theme.palette.warning.main, 0.2)}`,\n                    backgroundColor: alpha(theme.palette.warning.main, 0.05),\n                    borderRadius: '8px 8px 0 0',\n                    mx: '-8px', mt: '-4px', mb: '4px', pt: '8px', pb: '6px',\n                }}>\n                    <SmartToyOutlinedIcon sx={{ fontSize: 14, color: theme.palette.warning.main, mt: '1px', flexShrink: 0 }} />\n                    <Typography sx={{ fontSize: 12, color: theme.palette.text.primary, lineHeight: 1.5, whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n                        {clarificationQuestion}\n                    </Typography>\n                </Box>\n            )}\n            {/* Idea chips inline */}\n            {ideas.length > 0 && !isChatFormulating && (\n                <Box sx={{\n                    display: 'flex', flexDirection: 'column', gap: '4px',\n                    borderBottom: `1px solid ${alpha(theme.palette.secondary.main, 0.15)}`,\n                    backgroundColor: alpha(theme.palette.secondary.main, 0.03),\n                    borderRadius: clarificationQuestion ? 0 : '8px 8px 0 0',\n                    mx: '-8px', mt: clarificationQuestion ? 0 : '-4px', mb: '4px', px: '10px', pt: '6px', pb: '6px',\n                }}>\n                    <Box sx={{ display: 'flex', alignItems: 'center', gap: '4px', mb: '2px' }}>\n                        <TipsAndUpdatesIcon sx={{ fontSize: 12, color: theme.palette.secondary.main }} />\n                        <Typography sx={{ fontSize: 11, fontWeight: 600, color: theme.palette.secondary.main, flex: 1 }}>Ideas</Typography>\n                        <Tooltip title=\"Regenerate ideas\">\n                            <IconButton size=\"small\" onClick={() => getIdeasFromAgent()}\n                                sx={{ p: '2px', color: theme.palette.text.secondary, '&:hover': { color: theme.palette.primary.main } }}>\n                                <RefreshIcon sx={{ fontSize: 12 }} />\n                            </IconButton>\n                        </Tooltip>\n                        <Tooltip title=\"Clear ideas\">\n                            <IconButton size=\"small\" onClick={() => setIdeas([])}\n                                sx={{ p: '2px', color: theme.palette.text.secondary, '&:hover': { color: theme.palette.error.main } }}>\n                                <ClearIcon sx={{ fontSize: 12 }} />\n                            </IconButton>\n                        </Tooltip>\n                    </Box>\n                    <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: '4px' }}>\n                        {ideas.map((idea, idx) => {\n                            const color = idea.difficulty === 'easy' ? theme.palette.success.main\n                                : idea.difficulty === 'hard' ? theme.palette.warning.main\n                                : theme.palette.primary.main;\n                            return (\n                                <Box key={idx} sx={{\n                                    px: '6px', py: '3px',\n                                    borderRadius: '4px',\n                                    border: `1px solid ${alpha(color, 0.2)}`,\n                                    backgroundColor: alpha(color, 0.04),\n                                    cursor: 'pointer',\n                                    transition: 'all 0.15s ease',\n                                    '&:hover': { borderColor: alpha(color, 0.6), backgroundColor: alpha(color, 0.08) },\n                                }} onClick={() => { setChatPrompt(idea.text); exploreFromChat(idea.text); }}>\n                                    <Typography component=\"div\" sx={{ fontSize: 10, lineHeight: 1.3, color }}>\n                                        {renderTextWithEmphasis(idea.goal, {\n                                            borderRadius: '0px', borderBottom: '1px solid',\n                                            borderColor: alpha(color, 0.4), fontSize: '10px', lineHeight: 1.3,\n                                            backgroundColor: alpha(color, 0.05),\n                                        })}\n                                    </Typography>\n                                </Box>\n                            );\n                        })}\n                    </Box>\n                </Box>\n            )}\n            <TextField\n                variant=\"standard\"\n                sx={{\n                    flex: 1,\n                    \"& .MuiInput-input\": { fontSize: '12px', lineHeight: 1.5 },\n                    \"& .MuiInput-underline:before\": { borderBottom: 'none !important' },\n                    \"& .MuiInput-underline:hover:not(.Mui-disabled):before\": { borderBottom: 'none !important' },\n                    \"& .MuiInput-underline:after\": { borderBottom: 'none !important' },\n                    \"& .MuiInputBase-root\": { borderBottom: 'none !important' },\n                    ...(isChatFormulating ? {\n                        \"& .MuiInput-input\": { fontSize: '12px', lineHeight: 1.5, color: 'text.disabled' },\n                    } : {}),\n                }}\n                onChange={(event: any) => { if (!isChatFormulating) setChatPrompt(event.target.value); }}\n                onKeyDown={(event: any) => {\n                    if (event.key === 'Tab' && !event.shiftKey && chatPrompt.trim() === '' && !isChatFormulating) {\n                        event.preventDefault();\n                        setChatPrompt('help me suggest some exploration directions from this thread');\n                    }\n                    if (event.key === 'Enter' && !event.shiftKey) {\n                        event.preventDefault();\n                        if (chatPrompt.trim().length > 0 && !isChatFormulating) {\n                            if (pendingClarification) {\n                                exploreFromChat(chatPrompt, pendingClarification);\n                            } else {\n                                exploreFromChat(chatPrompt);\n                            }\n                        }\n                    }\n                }}\n                onFocus={() => {\n                    // Scroll to the focused table card, positioning it near the bottom of the visible area\n                    const el = document.querySelector('.data-thread-card.selected-card') as HTMLElement | null;\n                    if (el) {\n                        // Find nearest scrollable ancestor\n                        let scrollContainer: HTMLElement | null = el.parentElement;\n                        while (scrollContainer) {\n                            const ov = getComputedStyle(scrollContainer).overflowY;\n                            if (ov === 'auto' || ov === 'scroll') break;\n                            scrollContainer = scrollContainer.parentElement;\n                        }\n                        if (scrollContainer) {\n                            const containerRect = scrollContainer.getBoundingClientRect();\n                            const elRect = el.getBoundingClientRect();\n                            // Place the element so its bottom sits ~80px above the container's bottom edge\n                            const targetBottom = containerRect.bottom - 80;\n                            const offset = elRect.bottom - targetBottom;\n                            scrollContainer.scrollBy({ top: offset, behavior: 'smooth' });\n                        } else {\n                            el.scrollIntoView({ behavior: 'smooth', block: 'end' });\n                        }\n                    }\n                }}\n                slotProps={{ \n                    inputLabel: { shrink: true },\n                    input: { readOnly: isChatFormulating },\n                }}\n                value={chatPrompt}\n                placeholder={pendingClarification ? \"Reply to agent's question...\" : \"Ask agent to explore a new direction\"}\n                fullWidth\n                multiline\n                minRows={2}\n                maxRows={4}\n            />\n            <Box sx={{ display: 'flex', flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', gap: 0.5 }}>\n                {/* Action buttons */}\n                <Box sx={{ display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 0.5, overflow: 'hidden', flex: 1 }}>\n                    <Tooltip title=\"Add more data to the workspace\">\n                        <IconButton\n                            size=\"small\"\n                            onClick={(e) => { e.stopPropagation(); setUploadDialogOpen(true); }}\n                            sx={{ p: 0, width: 18, height: 18, color: theme.palette.text.secondary,\n                                borderRadius: '4px',\n                                '&:hover': { color: theme.palette.primary.main, borderColor: alpha(theme.palette.primary.main, 0.5) } }}\n                        >\n                            <AddIcon sx={{ fontSize: 12 }} />\n                        </IconButton>\n                    </Tooltip>\n                </Box>\n                <Box sx={{ display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 0.25, flexShrink: 0 }}>\n                {isChatFormulating ? (\n                    <CircularProgress size={18} sx={{ m: 0.5 }} />\n                ) : (\n                    <>\n                        <Tooltip title=\"Get idea suggestions\">\n                            <span>\n                                <IconButton\n                                    size=\"small\"\n                                    sx={{ p: 0.5, color: theme.palette.secondary.main }}\n                                    disabled={!focusedTableId || isLoadingIdeas}\n                                    onClick={() => { \n                                        if (ideas.length > 0) {\n                                            setIdeas([]);\n                                        } else {\n                                            getIdeasFromAgent(); \n                                        }\n                                    }}\n                                >\n                                    {isLoadingIdeas\n                                        ? <CircularProgress size={18} sx={{ color: theme.palette.warning.main }} />\n                                        : <TipsAndUpdatesIcon sx={{ fontSize: 18 }} />}\n                                </IconButton>\n                            </span>\n                        </Tooltip>\n                        {pendingClarification && !isChatFormulating && (\n                            <Tooltip title=\"End conversation\">\n                                <IconButton\n                                    size=\"small\"\n                                    sx={{ p: 0.5, color: theme.palette.warning.main }}\n                                    onClick={() => cancelAgent()}\n                                >\n                                    <StopCircleOutlinedIcon sx={{ fontSize: 18 }} />\n                                </IconButton>\n                            </Tooltip>\n                        )}\n                        <Tooltip title={pendingClarification ? \"Send reply\" : \"Explore\"}>\n                            <span>\n                                <IconButton\n                                    size=\"small\"\n                                    color=\"primary\"\n                                    sx={{ p: 0.5 }}\n                                    disabled={chatPrompt.trim().length === 0 || !focusedTableId}\n                                    onClick={() => {\n                                        if (pendingClarification) {\n                                            exploreFromChat(chatPrompt, pendingClarification);\n                                        } else {\n                                            exploreFromChat(chatPrompt);\n                                        }\n                                    }}\n                                >\n                                    <SendIcon sx={{ fontSize: 18 }} />\n                                </IconButton>\n                            </span>\n                        </Tooltip>\n                    </>\n                )}\n                </Box>\n            </Box>\n            {/* Agent working overlay */}\n            {(isChatFormulating || isLoadingIdeas) && (\n                <AgentWorkingOverlay \n                    relevantAgentActions={isLoadingIdeas && !isChatFormulating \n                        ? [{ status: 'running', description: 'Generating exploration ideas...' }] \n                        : relevantAgentActions}\n                    theme={theme}\n                    onCancel={isLoadingIdeas && !isChatFormulating ? () => { ideasAbortRef.current?.abort(); ideasAbortRef.current = null; setIsLoadingIdeas(false); setIdeas([]); } : cancelAgent}\n                />\n            )}\n        </Card>\n    );\n\n    return (\n        <Box>\n            {/* The input box */}\n            {inputBox}\n            <UnifiedDataUploadDialog\n                open={uploadDialogOpen}\n                onClose={() => setUploadDialogOpen(false)}\n                initialTab=\"menu\"\n            />\n        </Box>\n    );\n};\n"
  },
  {
    "path": "src/views/TableSelectionView.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as React from 'react';\nimport { useEffect, useState, useMemo } from 'react';\n\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { Button, Chip } from '@mui/material';\nimport { borderColor } from '../app/tokens';\nimport { StreamIcon } from '../icons';\nimport { createTableFromFromObjectArray } from '../data/utils';\nimport { MultiTablePreview } from './MultiTablePreview';\nimport { DictTable } from '../components/ComponentType';\n\n// Update the interface to support multiple tables per dataset\nexport interface DatasetMetadata {\n    name: string;\n    description: string;\n    source: string;\n    tables: {\n        table_name: string;\n        url: string;\n        format: string;\n        sample: any[];\n    }[];\n    // Live/streaming dataset properties\n    live?: boolean;\n    refreshIntervalSeconds?: number;\n}\n\nexport interface DatasetSelectionViewProps {\n    datasets: DatasetMetadata[];\n    handleSelectDataset: (datasetMetadata: DatasetMetadata) => void;\n    hideRowNum?: boolean;\n}\n\nexport const DatasetSelectionView: React.FC<DatasetSelectionViewProps> = function DatasetSelectionView({ datasets, handleSelectDataset, hideRowNum  }) {\n\n    const [selectedDatasetName, setSelectedDatasetName] = useState<string | undefined>(undefined);\n    const [tableActiveIndex, setTableActiveIndex] = useState<number>(0);\n\n    useEffect(() => {\n        if (datasets.length > 0) {\n            setSelectedDatasetName(datasets[0].name);\n        }\n    }, [datasets]);\n\n    // Reset table active index when dataset changes\n    useEffect(() => {\n        setTableActiveIndex(0);\n    }, [selectedDatasetName]);\n\n    const handleDatasetSelect = (index: number) => {\n        setSelectedDatasetName(datasets[index].name);\n    };\n\n    let datasetTitles : string[] = [];\n    for (let i = 0; i < datasets.length; i ++) {\n        let k = 0;\n        let title = datasets[i].name;\n        while (datasetTitles.includes(title)) {\n            k = k + 1;\n            title = `${title}_${k}`;\n        }\n        datasetTitles.push(title);\n    }\n\n    // Convert dataset tables to DictTable objects for the preview\n    const selectedDataset = datasets.find(d => d.name === selectedDatasetName);\n    const previewTables: DictTable[] = useMemo(() => {\n        if (!selectedDataset) return [];\n        return selectedDataset.tables.map((table) => {\n            const dictTable = createTableFromFromObjectArray(table.table_name, table.sample, true);\n            // Use the table name from URL as displayId for better labeling\n            const displayName = table.url.split(\"/\").pop()?.split(\".\")[0]?.split(\"?\")[0] || table.table_name;\n            return {\n                ...dictTable,\n                displayId: displayName,\n            };\n        });\n    }, [selectedDataset]);\n\n    return (\n        <Box sx={{ bgcolor: 'background.paper', display: 'flex', height: '100%', borderRadius: 2, overflow: 'hidden' }} >\n            {/* Button navigation */}\n            <Box sx={{ \n                minWidth: 180,\n                maxWidth: 180,\n                width: 180,\n                display: 'flex',\n                flexDirection: 'column',\n                borderRight: `1px solid ${borderColor.view}`,\n                overflow: 'hidden',\n                height: '100%'\n            }}>\n                <Box sx={{ \n                    display: 'flex',\n                    flexDirection: 'column',\n                    overflowY: 'auto',\n                    overflowX: 'hidden',\n                    flex: 1,\n                    minHeight: 0,\n                    height: '100%',\n                    position: 'relative',\n                    overscrollBehavior: 'contain'\n                }}>\n                    {datasetTitles.map((title, i) => (\n                        <Button\n                            key={i}\n                            variant=\"text\"\n                            size=\"small\"\n                            color='primary'\n                            onClick={() => handleDatasetSelect(i)}\n                            sx={{\n                                fontSize: 12,\n                                textTransform: \"none\",\n                                width: 180,\n                                justifyContent: 'flex-start',\n                                textAlign: 'left',\n                                borderRadius: 0,\n                                py: 1,\n                                px: 2,\n                                color: selectedDatasetName === title ? 'primary.main' : 'text.secondary',\n                                borderRight: selectedDatasetName === title ? 2 : 0,\n                                borderColor: 'primary.main',\n                            }}\n                        >\n                            <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n                                {datasets[i]?.live && (\n                                    <StreamIcon sx={{ fontSize: 14, color: 'success.main' }} />\n                                )}\n                                <span>{title}</span>\n                            </Box>\n                        </Button>\n                    ))}\n                </Box>\n            </Box>\n\n            {/* Content area */}\n            <Box sx={{ flex: 1, overflow: 'hidden', minWidth: 0, minHeight: 0, height: '100%', position: 'relative' }}>\n                <Box sx={{ height: '100%', overflowY: 'auto', overflowX: 'hidden', p: 2, minWidth: 0, overscrollBehavior: 'contain' }}>\n                    {selectedDataset && (\n                        <Box>\n                            <Box sx={{mb: 1, gap: 1, maxWidth: 800, display: \"flex\", alignItems: \"center\", flexWrap: \"wrap\"}}>\n                                <Typography sx={{fontSize: 12, flex: 1, minWidth: 200}}>\n                                    {selectedDataset.description} <Typography variant=\"caption\" sx={{color: \"primary.light\", fontSize: 10, mx: 0.5}}>[from {selectedDataset.source}]</Typography>\n                                </Typography>\n                            </Box>\n                            <Box sx={{ maxWidth: 800 }}>\n                                <MultiTablePreview\n                                    tables={previewTables}\n                                    emptyLabel=\"No tables available.\"\n                                    activeIndex={tableActiveIndex}\n                                    onActiveIndexChange={setTableActiveIndex}\n                                    maxHeight={280}\n                                    maxRows={12}\n                                    compact={false}\n                                    showPreviewLabel={false}\n                                    hideRowCount={hideRowNum}\n                                />\n                            </Box>\n                            <Box sx={{display: 'flex', justifyContent: 'center', mt: 2}} >\n                                <Button variant=\"contained\" sx={{ width: 240 }}\n                                        onClick={(event: React.MouseEvent<HTMLElement>) => {\n                                            handleSelectDataset(selectedDataset);\n                                        }}>\n                                    load dataset\n                                </Button>\n                            </Box>\n                        </Box>\n                    )}\n                </Box>\n            </Box>\n        </Box>\n    );\n}\n"
  },
  {
    "path": "src/views/TestPanel.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React from 'react';\n\nimport {\n    Box,\n    Button,\n    Typography,\n} from '@mui/material';\n\nimport embed from 'vega-embed';\n\nimport '../scss/VisualizationView.scss';\n\nexport interface TestPanelProps {\n}\n\nexport interface TestPanelState {\n    vgSpecs: any[]\n}\n\nexport default class TestPanel extends React.Component<TestPanelProps, TestPanelState> {\n\n    constructor(props: TestPanelProps) {\n        super(props);\n        this.state = {\n            vgSpecs: []\n        };\n    }\n\n    private processText(reader: any, state: any) : any {\n        // Result objects contain two properties:\n        // done  - true if the stream has already given you all its data.\n        // value - some data. Always undefined when done is true.\n\n        let { done, value } = state;\n\n        if (done) {\n            console.log(\"Stream complete\");\n            return;\n        }\n    \n        // value for fetch streams is a Uint8Array\n        const chunk = value;\n        console.log(`Current chunk = ${chunk}`);\n\n        if (value) {\n            let vgObj = JSON.parse(value);\n            let vgSpecs = this.state.vgSpecs;\n            vgSpecs.push(vgObj);\n            this.setState({\n                vgSpecs\n            });\n        }\n    \n        // Read some more, and call this function again\n        return reader.read().then((state: any) => this.processText(reader, state));\n    }\n\n    private testStreamingChart = () => {\n        fetch('http://127.0.0.1:5000/stream')\n            // Retrieve its body as ReadableStream\n            .then((response) => response.body)\n            // Create a gray-scaled PNG stream out of the original\n            .then((body) => (body as ReadableStream).pipeThrough(new TextDecoderStream()).getReader())\n            .then((reader) => {\n                reader.read().then((state: any) => this.processText(reader, state))\n            })\n    }\n\n    public render = () => {\n        return (\n            <Box className=\"visualization-container\">\n                <Typography variant=\"subtitle1\" component=\"h2\">\n                    TestPanel\n                </Typography>\n                <Button variant=\"contained\" onClick={()=>{this.testStreamingChart()}}>Contained</Button>\n                <Box className=\"vega-container\">\n                    {this.state.vgSpecs.map((spec: any, index: any) => {\n                        const id = `chart-element-${index}`;\n                        const element = <div id={id} key={`chart-${index}`}></div>;\n                        embed('#' + id, spec);\n                        return element;\n                    })}\n                </Box>\n            </Box>);\n    };\n}"
  },
  {
    "path": "src/views/UnifiedDataUploadDialog.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as React from 'react';\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { borderColor, transition, radius } from '../app/tokens';\nimport {\n    Box,\n    Button,\n    Chip,\n    Dialog,\n    DialogContent,\n    DialogTitle,\n    IconButton,\n    TextField,\n    Typography,\n    Tooltip,\n    Link,\n    Input,\n    alpha,\n    useTheme,\n} from '@mui/material';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport UploadFileIcon from '@mui/icons-material/UploadFile';\nimport ContentPasteIcon from '@mui/icons-material/ContentPaste';\nimport LinkIcon from '@mui/icons-material/Link';\nimport { StreamIcon } from '../icons';\nimport StorageIcon from '@mui/icons-material/Storage';\nimport ImageSearchIcon from '@mui/icons-material/ImageSearch';\nimport ExploreIcon from '@mui/icons-material/Explore';\nimport RestartAltIcon from '@mui/icons-material/RestartAlt';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport Paper from '@mui/material/Paper';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Backdrop from '@mui/material/Backdrop';\n\nimport { useDispatch, useSelector } from 'react-redux';\nimport { DataFormulatorState, dfActions, fetchFieldSemanticType } from '../app/dfSlice';\nimport { AppDispatch } from '../app/store';\nimport { loadTable } from '../app/tableThunks';\nimport { DataSourceConfig, DictTable } from '../components/ComponentType';\nimport { createTableFromFromObjectArray, createTableFromText, loadTextDataWrapper, loadBinaryDataWrapper } from '../data/utils';\nimport { DataLoadingChat } from './DataLoadingChat';\nimport { DatasetSelectionView, DatasetMetadata } from './TableSelectionView';\nimport { getUrls, fetchWithIdentity } from '../app/utils';\nimport { DBManagerPane } from './DBTableManager';\nimport { MultiTablePreview } from './MultiTablePreview';\nimport { \n    ToggleButton, \n    ToggleButtonGroup,\n    FormControlLabel,\n    Switch,\n} from '@mui/material';\nimport FolderOpenIcon from '@mui/icons-material/FolderOpen';\nimport CloudIcon from '@mui/icons-material/Cloud';\nimport OpenInNewIcon from '@mui/icons-material/OpenInNew';\nimport LanguageIcon from '@mui/icons-material/Language';\n\nexport type UploadTabType = 'menu' | 'upload' | 'paste' | 'url' | 'database' | 'extract' | 'explore';\n\ninterface TabPanelProps {\n    children?: React.ReactNode;\n    index: UploadTabType;\n    value: UploadTabType;\n}\n\nfunction TabPanel(props: TabPanelProps) {\n    const { children, value, index, ...other } = props;\n\n    return (\n        <div\n            role=\"tabpanel\"\n            hidden={value !== index}\n            id={`data-upload-tabpanel-${index}`}\n            aria-labelledby={`data-upload-tab-${index}`}\n            style={{ height: '100%', overflow: 'auto', boxSizing: 'border-box' }}\n            {...other}\n        >\n            {value === index && children}\n        </div>\n    );\n}\n\n// Data source menu card component\ninterface DataSourceCardProps {\n    icon: React.ReactNode;\n    title: string;\n    description: string;\n    onClick: () => void;\n    disabled?: boolean;\n}\n\nconst DataSourceCard: React.FC<DataSourceCardProps> = ({ \n    icon, \n    title, \n    description, \n    onClick, \n    disabled = false,\n}) => {\n    const theme = useTheme();\n    \n    const card = (\n        <Paper\n            elevation={0}\n            onClick={disabled ? undefined : onClick}\n            sx={{\n                p: 1.5,\n                cursor: disabled ? 'not-allowed' : 'pointer',\n                border: `1px solid ${borderColor.divider}`,\n                borderRadius: radius.sm,\n                opacity: disabled ? 0.5 : 1,\n                transition: transition.fast,\n                display: 'flex',\n                alignItems: 'center',\n                gap: 1.5,\n                '&:hover': disabled ? {} : {\n                    borderColor: 'primary.main',\n                    backgroundColor: alpha(theme.palette.primary.main, 0.04),\n                }\n            }}\n        >\n            <Box sx={{ \n                color: disabled ? 'text.disabled' : 'primary.main',\n                display: 'flex',\n                alignItems: 'center',\n                justifyContent: 'center',\n                width: 32,\n                height: 32,\n                borderRadius: 1,\n                backgroundColor: alpha(theme.palette.primary.main, 0.08),\n                flexShrink: 0,\n                '& .MuiSvgIcon-root': { fontSize: 18 }\n            }}>\n                {icon}\n            </Box>\n            <Box sx={{ flex: 1, minWidth: 0 }}>\n                <Typography \n                    variant=\"body2\" \n                    sx={{ \n                        fontWeight: 500,\n                        color: disabled ? 'text.disabled' : 'text.primary',\n                    }}\n                >\n                    {title}\n                </Typography>\n                <Typography\n                    variant=\"caption\"\n                    sx={{\n                        color: disabled ? 'text.disabled' : 'text.secondary',\n                        display: '-webkit-box',\n                        WebkitLineClamp: 2,\n                        WebkitBoxOrient: 'vertical',\n                        overflow: 'hidden',\n                        lineHeight: 1.3,\n                        mt: 0.25,\n                    }}\n                >\n                    {description}\n                </Typography>\n            </Box>\n        </Paper>\n    );\n\n    return card;\n};\n\nconst getUniqueTableName = (baseName: string, existingNames: Set<string>): string => {\n    let uniqueName = baseName;\n    let counter = 1;\n    while (existingNames.has(uniqueName)) {\n        uniqueName = `${baseName}_${counter}`;\n        counter++;\n    }\n    return uniqueName;\n};\n\n// Reusable Data Load Menu Component\nexport interface DataLoadMenuProps {\n    onSelectTab: (tab: UploadTabType) => void;\n    serverConfig?: { DISABLE_DATABASE?: boolean };\n    variant?: 'dialog' | 'page'; // 'dialog' uses smaller cards, 'page' uses larger cards\n}\n\nexport const DataLoadMenu: React.FC<DataLoadMenuProps> = ({ \n    onSelectTab, \n    serverConfig = { DISABLE_DATABASE: false },\n    variant = 'dialog'\n}) => {\n    const theme = useTheme();\n    // Data source configurations\n    const regularDataSources = [\n        { \n            value: 'explore' as UploadTabType, \n            title: 'Sample Datasets', \n            description: 'Explore and load curated example datasets',\n            icon: <ExploreIcon />, \n            disabled: false\n        },\n        { \n            value: 'upload' as UploadTabType, \n            title: 'Upload File', \n            description: 'Upload local files (CSV, TSV, JSON, Excel)',\n            icon: <UploadFileIcon />, \n            disabled: false\n        },\n        { \n            value: 'paste' as UploadTabType, \n            title: 'Paste Data', \n            description: 'Paste tabular data directly from clipboard',\n            icon: <ContentPasteIcon />, \n            disabled: false\n        },\n        { \n            value: 'extract' as UploadTabType, \n            title: 'Extract Unstructured Data', \n            description: 'Extract tables from images or text using AI',\n            icon: <ImageSearchIcon />, \n            disabled: false\n        },\n    ];\n\n    const liveDataSources = [\n        { \n            value: 'url' as UploadTabType, \n            title: 'Load from URL', \n            description: 'Load data from a URL with optional auto-refresh',\n            icon: <LinkIcon />, \n            disabled: false\n        },\n        { \n            value: 'database' as UploadTabType, \n            title: 'Database', \n            description: 'Connect to databases or data services',\n            icon: <StorageIcon />, \n            disabled: false\n        },\n    ];\n\n    if (variant === 'page') {\n        // Page variant: 3-column grid, first column for liveDataSources, second 2 columns for regularDataSources\n        return (\n            <Box sx={{ \n                width: '100%',\n                display: 'grid',\n                gridTemplateColumns: 'minmax(0, 1fr) repeat(2, minmax(0, 1fr))',\n                gridTemplateRows: 'auto repeat(2, auto)',\n                gap: 1.5,\n                rowGap: 2,\n                mx: 0,\n                textAlign: 'left',\n            }}>\n                {/* Section Titles */}\n                <Typography \n                    variant=\"body2\" \n                    color=\"text.secondary\" \n                    sx={{ \n                        gridColumn: 1,\n                        gridRow: 1,\n                        textAlign: 'left',\n                        letterSpacing: '0.02em',\n                        display: 'flex',\n                        alignItems: 'center',\n                        gap: 1,\n                        position: 'relative',\n                        zIndex: 1,\n                        marginRight: 3, // Extra space between first column and other columns\n                    }}\n                >\n                    <StreamIcon sx={{ fontSize: 14, animation: 'pulse 2s infinite', '@keyframes pulse': {\n                        '0%': { opacity: 1, color: 'primary.main' },\n                        '50%': { opacity: 0.5, color: 'primary.light' },\n                        '100%': { opacity: 1, color: 'primary.main' },\n                    }, }} /> Connect to live data sources\n                </Typography>\n                <Typography \n                    variant=\"body2\" \n                    color=\"text.secondary\" \n                    sx={{ \n                        gridColumn: '2 / 3',\n                        gridRow: 1,\n                        textAlign: 'left',\n                        letterSpacing: '0.02em'\n                    }}\n                >\n                    Load local data\n                </Typography>\n                \n                {/* Background for Live Data Column */}\n                <Box\n                    sx={{\n                        gridColumn: 1,\n                        gridRow: '1 / -1',\n                        backgroundColor: alpha(theme.palette.primary.main, 0.03),\n                        borderRadius: 1,\n                        position: 'relative',\n                        zIndex: 0,\n                        // Extend into gaps to create continuous background\n                        marginTop: '-16px', // Extend into row gaps (2 * 8px = 16px)\n                        marginBottom: '-16px',\n                        marginLeft: '-12px', // Extend into left column gap (1.5 * 8px = 12px)\n                        marginRight: '12px', // Extra space between first column and other columns (3 * 8px = 24px total)\n                        paddingTop: '16px',\n                        paddingBottom: '16px',\n                        paddingLeft: '12px',\n                        paddingRight: '12px',\n                    }}\n                />\n                \n                {/* Live Data Sources - fill last column, 2 rows */}\n                {liveDataSources.map((source, index) => (\n                    <Box\n                        key={source.value}\n                        sx={{\n                            gridColumn: 1,\n                            gridRow: index + 2, // Start from row 2 (after title row)\n                            position: 'relative',\n                            zIndex: 1,\n                            marginRight: 3, // Extra space between first column and other columns\n                        }}\n                    >\n                        <DataSourceCard\n                            icon={source.icon}\n                            title={source.title}\n                            description={source.description}\n                            onClick={() => onSelectTab(source.value)}\n                            disabled={source.disabled}\n                        />\n                    </Box>\n                ))}\n                {/* Regular Data Sources - fill first 2 columns, 2 rows */}\n                {regularDataSources.map((source, index) => (\n                    <Box\n                        key={source.value}\n                        sx={{\n                            gridColumn: (index % 2) + 2,\n                            gridRow: Math.floor(index / 2) + 2, // Start from row 2 (after title row)\n                        }}\n                    >\n                        <DataSourceCard\n                            icon={source.icon}\n                            title={source.title}\n                            description={source.description}\n                            onClick={() => onSelectTab(source.value)}\n                            disabled={source.disabled}\n                        />\n                    </Box>\n                ))}\n                \n            </Box>\n        );\n    }\n\n    // Dialog variant: original two-section layout\n    return (\n        <Box sx={{ \n            width: '100%',\n            maxWidth: 860,\n            display: 'flex',\n            flexDirection: 'column',\n            gap: 2,\n            mx: 0,\n            textAlign: 'left',\n        }}>\n            {/* Local Data Sources */}\n            <Typography \n                variant=\"body2\" \n                color=\"text.secondary\" \n                sx={{ \n                    textAlign: 'left',\n                    mb: 1,\n                    mt: 1,\n                    opacity: 0.6,\n                    fontSize: '0.75rem',\n                    letterSpacing: '0.02em'\n                }}\n            >\n                Local data\n            </Typography>\n\n            <Box sx={{ \n                display: 'grid', \n                gridTemplateColumns: 'repeat(2, minmax(0, 1fr))',\n                gap: 1.5,\n                mb: 0,\n            }}>\n                {regularDataSources.map((source) => (\n                    <DataSourceCard\n                        key={source.value}\n                        icon={source.icon}\n                        title={source.title}\n                        description={source.description}\n                        onClick={() => onSelectTab(source.value)}\n                        disabled={source.disabled}\n                    />\n                ))}\n            </Box>\n\n            {/* Live Data Sources */}\n            <Typography \n                variant=\"body2\" \n                color=\"text.secondary\" \n                sx={{ \n                    textAlign: 'left',\n                    my: 1,\n                    opacity: 0.6,\n                    fontSize: '0.75rem',\n                    letterSpacing: '0.02em',\n                    display: 'flex',\n                    alignItems: 'center',\n                    gap: 1,\n                }}\n            >\n                <StreamIcon sx={{ fontSize: 14, animation: 'pulse 2s infinite', '@keyframes pulse': {\n                    '0%': { opacity: 1, color: 'primary.main' },\n                    '50%': { opacity: 0.5, color: 'primary.light' },\n                    '100%': { opacity: 1, color: 'primary.main' },\n                }, }} /> Or connect to a data source (with optional auto-refresh)\n            </Typography>\n\n            <Box sx={{ \n                display: 'grid', \n                gridTemplateColumns: 'repeat(2, minmax(0, 1fr))',\n                gap: 1.5,\n            }}>\n                {liveDataSources.map((source) => (\n                    <DataSourceCard\n                        key={source.value}\n                        icon={source.icon}\n                        title={source.title}\n                        description={source.description}\n                        onClick={() => onSelectTab(source.value)}\n                        disabled={source.disabled}\n                    />\n                ))}\n            </Box>\n        </Box>\n    );\n};\n\nexport interface UnifiedDataUploadDialogProps {\n    open: boolean;\n    onClose: () => void;\n    initialTab?: UploadTabType;\n}\n\nexport const UnifiedDataUploadDialog: React.FC<UnifiedDataUploadDialogProps> = ({\n    open,\n    onClose,\n    initialTab = 'menu',\n}) => {\n    const theme = useTheme();\n    const dispatch = useDispatch<AppDispatch>();\n    const existingTables = useSelector((state: DataFormulatorState) => state.tables);\n    const serverConfig = useSelector((state: DataFormulatorState) => state.serverConfig);\n    const dataCleanBlocks = useSelector((state: DataFormulatorState) => state.dataCleanBlocks);\n    const frontendRowLimit = useSelector((state: DataFormulatorState) => state.config?.frontendRowLimit ?? 50000);\n    const existingNames = new Set(existingTables.map(t => t.id));\n\n    const [activeTab, setActiveTab] = useState<UploadTabType>(initialTab === 'menu' ? 'menu' : initialTab);\n    const fileInputRef = useRef<HTMLInputElement>(null);\n    const urlInputRef = useRef<HTMLInputElement>(null);\n\n    // Store on server toggle (forced off when DISABLE_DATABASE)\n    const diskPersistenceDisabled = serverConfig.DISABLE_DATABASE;\n    const [storeOnServer, setStoreOnServer] = useState<boolean>(!diskPersistenceDisabled);\n\n    // When serverConfig loads and database is enabled, default to store on server\n    useEffect(() => {\n        if (!diskPersistenceDisabled) {\n            setStoreOnServer(true);\n        }\n    }, [diskPersistenceDisabled]);\n\n    // Paste tab state\n    const [pasteContent, setPasteContent] = useState<string>(\"\");\n    const [isLargeContent, setIsLargeContent] = useState<boolean>(false);\n    const [showFullContent, setShowFullContent] = useState<boolean>(false);\n    const [isOverSizeLimit, setIsOverSizeLimit] = useState<boolean>(false);\n    \n    // File preview state\n    const [filePreviewTables, setFilePreviewTables] = useState<DictTable[] | null>(null);\n    const [filePreviewLoading, setFilePreviewLoading] = useState<boolean>(false);\n    const [filePreviewError, setFilePreviewError] = useState<string | null>(null);\n    const [filePreviewFiles, setFilePreviewFiles] = useState<File[]>([]);\n    const [filePreviewActiveIndex, setFilePreviewActiveIndex] = useState<number>(0);\n\n    // URL tab state (separate from file upload)\n    const [tableURL, setTableURL] = useState<string>(\"\");\n    const [urlAutoRefresh, setUrlAutoRefresh] = useState<boolean>(false);\n    const [urlRefreshInterval, setUrlRefreshInterval] = useState<number>(60); // default 60 seconds\n    const [urlPreviewTables, setUrlPreviewTables] = useState<DictTable[] | null>(null);\n    const [urlPreviewLoading, setUrlPreviewLoading] = useState<boolean>(false);\n    const [urlPreviewError, setUrlPreviewError] = useState<string | null>(null);\n    const [urlPreviewActiveIndex, setUrlPreviewActiveIndex] = useState<number>(0);\n    \n    // Example URLs state\n    const [exampleUrls, setExampleUrls] = useState<Array<{ label: string; url: string; refreshSeconds: number; resetUrl?: string }>>([]); \n\n    // Sample datasets state\n    const [datasetPreviews, setDatasetPreviews] = useState<DatasetMetadata[]>([]);\n\n    // Loading state for dataset loading\n    const [datasetLoading, setDatasetLoading] = useState<boolean>(false);\n    const [datasetLoadingLabel, setDatasetLoadingLabel] = useState<string>('');\n\n    // Constants\n    const MAX_DISPLAY_LINES = 20;\n    const LARGE_CONTENT_THRESHOLD = 50000;\n    const MAX_CONTENT_SIZE = 2 * 1024 * 1024;\n\n    // Update active tab when initialTab changes\n    useEffect(() => {\n        if (open) {\n            setActiveTab(initialTab === 'menu' ? 'menu' : initialTab);\n        }\n    }, [initialTab, open]);\n\n\n    // Load sample datasets\n    useEffect(() => {\n        if (open && activeTab === 'explore') {\n            fetchWithIdentity(`${getUrls().EXAMPLE_DATASETS}`)\n            .then((response) => response.json())\n            .then((result) => {\n                let datasets: DatasetMetadata[] = result.map((info: any) => {\n                    let tables = info[\"tables\"].map((table: any) => {\n                        if (table[\"format\"] == \"json\") {\n                            return {\n                                table_name: table[\"name\"],\n                                url: table[\"url\"],\n                                format: table[\"format\"],\n                                sample: table[\"sample\"],\n                            }\n                        }\n                        else if (table[\"format\"] == \"csv\" || table[\"format\"] == \"tsv\") {\n                            const delimiter = table[\"format\"] === \"csv\" ? \",\" : \"\\t\";\n                            const rows = table[\"sample\"]\n                                .split(\"\\n\")\n                                .map((row: string) => row.split(delimiter));\n                            \n                            if (rows.length > 0) {\n                                const headers = rows[0];\n                                const dataRows = rows.slice(1);\n                                const sampleData = dataRows.map((row: string[]) => {\n                                    const obj: any = {};\n                                    headers.forEach((header: string, index: number) => {\n                                        obj[header] = row[index] || '';\n                                    });\n                                    return obj;\n                                });\n                                \n                                return {\n                                    table_name: table[\"name\"],\n                                    url: table[\"url\"],\n                                    format: table[\"format\"],\n                                    sample: sampleData,\n                                };\n                            }\n                            \n                            return {\n                                table_name: table[\"name\"],\n                                url: table[\"url\"],\n                                format: table[\"format\"],\n                                sample: [],\n                            };\n                        }\n                    })\n                    return { \n                        tables: tables, \n                        name: info[\"name\"], \n                        source: info[\"source\"],\n                        live: info[\"live\"],\n                        refreshIntervalSeconds: info[\"refreshIntervalSeconds\"]\n                    }\n                }).filter((t: DatasetMetadata | undefined) => t != undefined);\n                setDatasetPreviews(datasets);\n            });\n        } else if (open && activeTab === 'url') {\n            fetchWithIdentity(`${window.location.origin}/api/demo-stream/info`)\n            .then(res => res.json())\n            .then(data => {\n                const demoExamples = data.demo_examples\n                    .map((ex: any) => ({\n                        label: ex.name,\n                        url: ex.url,\n                        refreshSeconds: ex.refresh_seconds || 60,\n                        resetUrl: ex.reset_url || undefined,\n                }));\n                \n                setExampleUrls(demoExamples);\n            })\n            .catch((err) => {\n                console.error('Failed to load examples:', err);\n            })\n            .finally(() => { });\n        }\n    }, [open, activeTab]);\n\n    const handleClose = useCallback(() => {\n        // Reset state when closing\n        setPasteContent(\"\");\n        setIsLargeContent(false);\n        setIsOverSizeLimit(false);\n        setShowFullContent(false);\n        setFilePreviewTables(null);\n        setFilePreviewLoading(false);\n        setFilePreviewError(null);\n        setFilePreviewFiles([]);\n        // Reset URL tab state\n        setTableURL(\"\");\n        setUrlAutoRefresh(false);\n        setUrlRefreshInterval(60);\n        setUrlPreviewTables(null);\n        setUrlPreviewLoading(false);\n        setUrlPreviewError(null);\n        setUrlPreviewActiveIndex(0);\n        setExampleUrls([]);\n        onClose();\n    }, [onClose]);\n\n    // File upload handler\n    const handleFileUpload = (event: React.ChangeEvent<HTMLInputElement>): void => {\n        const files = event.target.files;\n\n        if (files && files.length > 0) {\n            const selectedFiles = Array.from(files);\n            setFilePreviewFiles(selectedFiles);\n            setFilePreviewError(null);\n            setFilePreviewTables(null);\n            setFilePreviewLoading(true);\n\n            const MAX_FILE_SIZE = 5 * 1024 * 1024;\n            const previewTables: DictTable[] = [];\n            const errors: string[] = [];\n\n            const processFiles = async () => {\n                for (const file of selectedFiles) {\n                    const uniqueName = getUniqueTableName(file.name, existingNames);\n                    const isTextFile = file.type === 'text/csv' || \n                        file.type === 'text/tab-separated-values' || \n                        file.type === 'application/json' ||\n                        file.name.endsWith('.csv') || \n                        file.name.endsWith('.tsv') || \n                        file.name.endsWith('.json');\n                    const isExcelFile = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||\n                        file.type === 'application/vnd.ms-excel' ||\n                        file.name.endsWith('.xlsx') || \n                        file.name.endsWith('.xls');\n\n                    if (file.size > MAX_FILE_SIZE && isTextFile) {\n                        errors.push(`File ${file.name} is too large (${(file.size / (1024 * 1024)).toFixed(2)}MB). Use Database for large files.`);\n                        continue;\n                    }\n\n                    if (isTextFile) {\n                        try {\n                            const text = await file.text();\n                            const table = loadTextDataWrapper(uniqueName, text, file.type);\n                            if (table) {\n                                previewTables.push(table);\n                            } else {\n                                errors.push(`Failed to parse ${file.name}.`);\n                            }\n                        } catch {\n                            errors.push(`Failed to read ${file.name}.`);\n                        }\n                        continue;\n                    }\n\n                    if (isExcelFile) {\n                        try {\n                            const arrayBuffer = await file.arrayBuffer();\n                            const tables = await loadBinaryDataWrapper(uniqueName, arrayBuffer);\n                            if (tables.length > 0) {\n                                previewTables.push(...tables);\n                            } else {\n                                errors.push(`Failed to parse Excel file ${file.name}.`);\n                            }\n                        } catch {\n                            errors.push(`Failed to parse Excel file ${file.name}.`);\n                        }\n                        continue;\n                    }\n\n                    errors.push(`Unsupported file format: ${file.name}.`);\n                }\n\n                setFilePreviewTables(previewTables.length > 0 ? previewTables : null);\n                setFilePreviewError(errors.length > 0 ? errors.join(' ') : null);\n                setFilePreviewLoading(false);\n            };\n\n            processFiles();\n        }\n        if (fileInputRef.current) {\n            fileInputRef.current.value = '';\n        }\n    };\n\n    // Reset activeIndex when tables change\n    useEffect(() => {\n        if (filePreviewTables && filePreviewTables.length > 0) {\n            if (filePreviewActiveIndex >= filePreviewTables.length) {\n                setFilePreviewActiveIndex(filePreviewTables.length - 1);\n            }\n        } else {\n            setFilePreviewActiveIndex(0);\n        }\n    }, [filePreviewTables, filePreviewActiveIndex]);\n\n    const handleFileLoadSingleTable = (): void => {\n        if (!filePreviewTables || filePreviewTables.length === 0) {\n            return;\n        }\n        const table = filePreviewTables[filePreviewActiveIndex];\n        if (table) {\n            const sourceConfig: DataSourceConfig = { type: 'file', fileName: filePreviewFiles[0]?.name };\n            const tableWithSource = { ...table, source: sourceConfig };\n            dispatch(loadTable({\n                table: tableWithSource,\n                storeOnServer,\n                file: storeOnServer ? filePreviewFiles[filePreviewActiveIndex] || filePreviewFiles[0] : undefined,\n            }));\n            handleClose();\n        }\n    };\n\n    const handleFileLoadAllTables = (): void => {\n        if (!filePreviewTables || filePreviewTables.length === 0) {\n            return;\n        }\n        for (let i = 0; i < filePreviewTables.length; i++) {\n            const table = filePreviewTables[i];\n            const sourceConfig: DataSourceConfig = { type: 'file', fileName: filePreviewFiles[i]?.name || filePreviewFiles[0]?.name };\n            const tableWithSource = { ...table, source: sourceConfig };\n            dispatch(loadTable({\n                table: tableWithSource,\n                storeOnServer,\n                file: storeOnServer ? filePreviewFiles[i] || filePreviewFiles[0] : undefined,\n            }));\n        }\n        handleClose();\n    };\n\n    const handleRemoveFilePreviewTable = (index: number): void => {\n        setFilePreviewTables((prev) => {\n            if (!prev) return prev;\n            const next = prev.filter((_, i) => i !== index);\n            return next.length > 0 ? next : null;\n        });\n    };\n\n    // Paste content handler\n    const handleContentChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n        const newContent = event.target.value;\n        setPasteContent(newContent);\n        \n        const contentSizeBytes = new Blob([newContent]).size;\n        const isOverLimit = contentSizeBytes > MAX_CONTENT_SIZE;\n        setIsOverSizeLimit(isOverLimit);\n        \n        const isLarge = newContent.length > LARGE_CONTENT_THRESHOLD;\n        setIsLargeContent(isLarge);\n        \n        // If switching from large to small content, ensure full content is shown\n        if (!isLarge) {\n            setShowFullContent(true);\n        }\n    }, []);\n\n    const toggleFullContent = useCallback(() => {\n        setShowFullContent(!showFullContent);\n    }, [showFullContent]);\n\n    const handlePasteSubmit = (): void => {\n        let table: undefined | DictTable = undefined;\n        \n        const defaultName = (() => {\n            const hashStr = pasteContent.substring(0, 100) + Date.now();\n            const hashCode = hashStr.split('').reduce((acc, char) => {\n                return ((acc << 5) - acc) + char.charCodeAt(0) | 0;\n            }, 0);\n            const shortHash = Math.abs(hashCode).toString(36).substring(0, 4);\n            return `data-${shortHash}`;\n        })();\n\n        const uniqueName = getUniqueTableName(defaultName, existingNames);\n\n        try {\n            let content = JSON.parse(pasteContent);\n            table = createTableFromFromObjectArray(uniqueName, content, true);\n        } catch (error) {\n            table = createTableFromText(uniqueName, pasteContent);\n        }\n        if (table) {\n            // Add source info for paste data\n            const tableWithSource = { ...table, source: { type: 'paste' as const } };\n            dispatch(loadTable({ table: tableWithSource, storeOnServer }));\n            handleClose();\n        }\n    };\n\n\n    const handleURLPreview = (urlToUse: string): void => {\n        if (!urlToUse) {\n            return;\n        }\n        setUrlPreviewLoading(true);\n        setUrlPreviewError(null);\n        setUrlPreviewTables(null);\n\n\n        // Support relative URLs by constructing full URL\n        let fullUrl = urlToUse;\n        if (urlToUse.startsWith('/')) {\n            fullUrl = window.location.origin + urlToUse;\n        }\n\n        let parts = urlToUse.split('/');\n        const baseName = parts[parts.length - 1]?.split('?')[0] || 'dataset';\n        const tableName = getUniqueTableName(baseName.replace(/\\.[^.]+$/, ''), existingNames);\n\n        fetch(fullUrl)\n            .then(res => {\n                if (!res.ok) {\n                    throw new Error(`HTTP ${res.status}: ${res.statusText}`);\n                }\n                return res.text();\n            })\n            .then(content => {\n                let table: undefined | DictTable = undefined;\n                try {\n                    // Try parsing as JSON first\n                    let jsonContent = JSON.parse(content);\n                    if (!Array.isArray(jsonContent)) {\n                        throw new Error('JSON content must be an array of objects.');\n                    }\n                    table = createTableFromFromObjectArray(tableName, jsonContent, true);\n                } catch (jsonError) {\n                    // If JSON parsing fails, try JSONL (JSON Lines) format\n                    try {\n                        const lines = content.trim().split('\\n').filter(line => line.trim() !== '');\n                        const jsonlObjects = lines.map(line => {\n                            try {\n                                return JSON.parse(line);\n                            } catch (e) {\n                                throw new Error(`Invalid JSONL line: ${line.substring(0, 50)}...`);\n                            }\n                        });\n                        if (jsonlObjects.length > 0 && typeof jsonlObjects[0] === 'object' && jsonlObjects[0] !== null) {\n                            table = createTableFromFromObjectArray(tableName, jsonlObjects, true);\n                        } else {\n                            throw new Error('JSONL must contain objects.');\n                        }\n                    } catch (jsonlError) {\n                        // If JSONL parsing fails, try CSV/TSV\n                        table = createTableFromText(tableName, content);\n                    }\n                }\n\n                if (table) {\n                    setUrlPreviewTables([table]);\n                } else {\n                    setUrlPreviewError('Unable to parse data from the provided URL. Please ensure the URL points to CSV, JSON, or JSONL data.');\n                }\n            })\n            .catch((err) => {\n                setUrlPreviewError(`Failed to fetch data: ${err.message}. Please ensure the URL points to CSV, JSON, or JSONL data.`);\n            })\n            .finally(() => {\n                setUrlPreviewLoading(false);\n            });\n    };\n\n\n    // URL tab load handlers\n    const handleURLLoadSingleTable = (): void => {\n        if (!urlPreviewTables || urlPreviewTables.length === 0) {\n            return;\n        }\n        const table = urlPreviewTables[urlPreviewActiveIndex];\n        if (table) {\n            let sourceConfig: DataSourceConfig;\n            if (urlAutoRefresh) {\n                sourceConfig = { \n                    type: 'stream', \n                    url: tableURL,\n                    autoRefresh: true,\n                    refreshIntervalSeconds: urlRefreshInterval,\n                    lastRefreshed: Date.now()\n                };\n            } else {\n                sourceConfig = { type: 'url', url: tableURL };\n            }\n            const tableWithSource = { ...table, source: sourceConfig };\n            dispatch(loadTable({ table: tableWithSource, storeOnServer }));\n            handleClose();\n        }\n    };\n\n    const handleURLLoadAllTables = (): void => {\n        if (!urlPreviewTables || urlPreviewTables.length === 0) {\n            return;\n        }\n        for (let i = 0; i < urlPreviewTables.length; i++) {\n            const table = urlPreviewTables[i];\n            let sourceConfig: DataSourceConfig;\n            if (urlAutoRefresh) {\n                sourceConfig = { \n                    type: 'stream', \n                    url: tableURL,\n                    autoRefresh: true,\n                    refreshIntervalSeconds: urlRefreshInterval,\n                    lastRefreshed: Date.now()\n                };\n            } else {\n                sourceConfig = { type: 'url', url: tableURL };\n            }\n            const tableWithSource = { ...table, source: sourceConfig };\n            dispatch(loadTable({ table: tableWithSource, storeOnServer }));\n        }\n        handleClose();\n    };\n\n    const handleRemoveUrlPreviewTable = (index: number): void => {\n        setUrlPreviewTables((prev) => {\n            if (!prev) return prev;\n            const next = prev.filter((_, i) => i !== index);\n            return next.length > 0 ? next : null;\n        });\n    };\n\n    // URL validation - allow common data file extensions and API endpoints\n    const hasValidUrl = (tableURL || '').trim() !== '' && (\n        (tableURL || '').startsWith('http://') || (tableURL || '').startsWith('https://') || (tableURL || '').startsWith('/')\n    );\n    const hasMultipleFileTables = (filePreviewTables?.length || 0) > 1;\n    const hasMultipleUrlTables = (urlPreviewTables?.length || 0) > 1;\n    const showFilePreview = filePreviewLoading || !!filePreviewError || (filePreviewTables && filePreviewTables.length > 0);\n    const showUrlPreview = urlPreviewLoading || !!urlPreviewError || (urlPreviewTables && urlPreviewTables.length > 0);\n    const hasPasteContent = (pasteContent || '').trim() !== '';\n\n    // Get current tab title for header\n    const getCurrentTabTitle = () => {\n        const tabTitles: Record<UploadTabType, string> = {\n            'menu': 'Load Data',\n            'explore': 'Sample Datasets',\n            'upload': 'Upload File',\n            'paste': 'Paste Data',\n            'extract': 'Extract from Documents',\n            'url': 'Load from URL',\n            'database': 'Database',\n        };\n        return tabTitles[activeTab] || 'Add Data';\n    };\n\n    return (\n        <Dialog\n            open={open}\n            onClose={handleClose}\n            maxWidth={false}\n            sx={{ \n                '& .MuiDialog-paper': { \n                    width: 1100,\n                    maxWidth: '95vw',\n                    height: 600, \n                    maxHeight: '90vh',\n                    display: 'flex',\n                    flexDirection: 'column',\n                    transition: 'width 0.2s ease',\n                } \n            }}\n        >\n            <DialogTitle sx={{ display: 'flex', alignItems: 'center', gap: 1, pb: 1 }}>\n                {activeTab !== 'menu' && (\n                    <IconButton\n                        size=\"small\"\n                        onClick={() => setActiveTab('menu')}\n                        sx={{ mr: 0.5 }}\n                    >\n                        <ArrowBackIcon fontSize=\"small\" />\n                    </IconButton>\n                )}\n                <Typography variant=\"h6\" component=\"span\">\n                    {activeTab === 'menu' ? 'Load Data' : getCurrentTabTitle()}\n                </Typography>\n                {activeTab === 'extract' && dataCleanBlocks.length > 0 && (\n                    <Tooltip title=\"Reset extraction\">\n                        <IconButton \n                            size=\"small\" \n                            color='warning' \n                            sx={{\n                                '&:hover': { \n                                    transform: 'rotate(180deg)', \n                                    transition: 'transform 0.4s cubic-bezier(0.4, 0, 0.2, 1)' \n                                } \n                            }} \n                            onClick={() => dispatch(dfActions.resetDataCleanBlocks())}\n                        >\n                            <RestartAltIcon fontSize=\"small\" />\n                        </IconButton>\n                    </Tooltip>\n                )}\n                {activeTab !== 'menu' && (\n                    <Box sx={{ ml: 'auto', mr: 0, display: 'flex', alignItems: 'center', gap: 0.5 }}>\n                        <Typography variant=\"caption\" sx={{ fontSize: '0.7rem', color: 'text.secondary', mr: 0.5 }}>\n                            Load data in\n                        </Typography>\n                        <ToggleButtonGroup\n                            value={storeOnServer ? 'disk' : 'browser'}\n                            exclusive\n                            onChange={(_, val) => { if (val) setStoreOnServer(val === 'disk'); }}\n                            size=\"small\"\n                            sx={{ height: 26, '& .MuiToggleButton-root': { textTransform: 'none', fontSize: '0.7rem', px: 1, py: 0 } }}\n                        >\n                            <ToggleButton value=\"browser\">\n                                <Tooltip title={`Data stays in browser only (limited to ${frontendRowLimit.toLocaleString()} rows)`} placement=\"bottom\">\n                                    <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n                                        <LanguageIcon sx={{ fontSize: 14 }} /> Browser\n                                    </Box>\n                                </Tooltip>\n                            </ToggleButton>\n                            <ToggleButton value=\"disk\" disabled={diskPersistenceDisabled}>\n                                <Tooltip title={diskPersistenceDisabled\n                                    ? 'Install Data Formulator locally to unlock analysis for large datasets'\n                                    : serverConfig.WORKSPACE_BACKEND === 'azure_blob'\n                                        ? 'Data stored in Azure Blob Storage (supports large tables)'\n                                        : 'Data stored in workspace on disk (supports large tables)'} placement=\"bottom\">\n                                    <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n                                        {serverConfig.WORKSPACE_BACKEND === 'azure_blob'\n                                            ? <><CloudIcon sx={{ fontSize: 14 }} /> Azure</>\n                                            : <><FolderOpenIcon sx={{ fontSize: 14 }} /> Disk</>}\n                                    </Box>\n                                </Tooltip>\n                            </ToggleButton>\n                        </ToggleButtonGroup>\n                        {storeOnServer && !diskPersistenceDisabled && serverConfig.DATA_FORMULATOR_HOME\n                            && serverConfig.WORKSPACE_BACKEND !== 'azure_blob' && (\n                            <Tooltip title={`Open workspace: ${serverConfig.DATA_FORMULATOR_HOME}`} placement=\"bottom\">\n                                <IconButton\n                                    size=\"small\"\n                                    onClick={() => {\n                                        fetchWithIdentity(getUrls().OPEN_WORKSPACE, { method: 'POST' }).catch(() => {});\n                                    }}\n                                    sx={{ p: 0.5 }}\n                                >\n                                    <OpenInNewIcon sx={{ fontSize: 14, color: 'text.secondary' }} />\n                                </IconButton>\n                            </Tooltip>\n                        )}\n                    </Box>\n                )}\n                <IconButton\n                    sx={{ marginLeft: activeTab === 'menu' ? 'auto' : undefined }}\n                    size=\"small\"\n                    onClick={handleClose}\n                    aria-label=\"close\"\n                >\n                    <CloseIcon fontSize=\"small\" />\n                </IconButton>\n            </DialogTitle>\n\n            <DialogContent sx={{ flex: 1, overflow: 'hidden', p: 0 }}>\n                {/* Main Menu */}\n                <TabPanel value={activeTab} index=\"menu\">\n                    <Box sx={{ p: 2, boxSizing: 'border-box', width: '100%', height: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n                        <DataLoadMenu \n                            onSelectTab={(tab) => setActiveTab(tab)}\n                            serverConfig={serverConfig}\n                            variant=\"dialog\"\n                        />\n                    </Box>\n                </TabPanel>\n\n                {/* Upload File Tab */}\n                <TabPanel value={activeTab} index=\"upload\">\n                    <Box sx={{\n                        display: 'flex',\n                        flexDirection: 'column',\n                        height: '100%',\n                        boxSizing: 'border-box',\n                        gap: 2,\n                        p: 2,\n                        justifyContent: showFilePreview ? 'flex-start' : 'center',\n                    }}>\n                        <Box sx={{ width: '100%', maxWidth: showFilePreview ? '60%' : 760, alignSelf: 'center', display: 'flex', flexDirection: 'column', gap: 2 }}>\n                        <Input\n                            inputProps={{ \n                                accept: '.csv,.tsv,.json,.xlsx,.xls',\n                                multiple: true,\n                            }}\n                            id=\"unified-upload-data-file\"\n                            type=\"file\"\n                            sx={{ display: 'none' }}\n                            inputRef={fileInputRef}\n                            onChange={handleFileUpload}\n                        />\n                        \n                        {/* File Upload Section - only show drop zone when file upload is enabled */}\n                        {!serverConfig.DISABLE_FILE_UPLOAD ? (\n                            <Box\n                                sx={{\n                                    border: '2px dashed',\n                                    borderColor: borderColor.divider,\n                                    borderRadius: radius.md,\n                                    p: showFilePreview ? 2 : 3,\n                                    textAlign: 'center',\n                                    cursor: 'pointer',\n                                    transition: transition.normal,\n                                    '&:hover': {\n                                        borderColor: 'primary.main',\n                                        backgroundColor: alpha(theme.palette.primary.main, 0.04),\n                                    }\n                                }}\n                                onClick={() => fileInputRef.current?.click()}\n                            >\n                                <UploadFileIcon sx={{ fontSize: showFilePreview ? 28 : 36, color: 'text.secondary', mb: 1 }} />\n                                <Typography variant={showFilePreview ? \"body2\" : \"subtitle1\"} gutterBottom>\n                                    Drag & drop file here\n                                </Typography>\n                                <Typography variant=\"body2\" color=\"text.secondary\" sx={{ fontSize: showFilePreview ? '0.75rem' : '0.875rem' }}>\n                                    or <Link component=\"button\" sx={{ textDecoration: 'underline', cursor: 'pointer' }}>Browse</Link>\n                                </Typography>\n                                {!showFilePreview && (\n                                    <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mt: 1, display: 'block' }}>\n                                        Supported: CSV, TSV, JSON, Excel (xlsx, xls)\n                                    </Typography>\n                                )}\n                            </Box>\n                        ) : (\n                            <Box sx={{ textAlign: 'center', py: 4, px: 2 }}>\n                                <Typography color=\"text.secondary\" sx={{ mb: 2 }}>\n                                    File upload is disabled in this environment.\n                                </Typography>\n                                <Typography variant=\"body2\" color=\"text.secondary\">\n                                    Use \"Load from URL\" to load data from a remote source.\n                                </Typography>\n                            </Box>\n                        )}\n                        </Box>\n\n                        {showFilePreview && (\n                            <Box sx={{ width: '90%', alignSelf: 'center' }}>\n                                <MultiTablePreview\n                                    loading={filePreviewLoading}\n                                    error={filePreviewError}\n                                    tables={filePreviewTables}\n                                    emptyLabel=\"Select a file to preview.\"\n                                    onRemoveTable={handleRemoveFilePreviewTable}\n                                    activeIndex={filePreviewActiveIndex}\n                                    onActiveIndexChange={setFilePreviewActiveIndex}\n                                />\n                            </Box>\n                        )}\n\n                        {filePreviewTables && filePreviewTables.length > 0 && (\n                            <Box sx={{ display: 'flex', justifyContent: 'center', gap: 1, alignItems: 'center' }}>\n                                <Button\n                                    variant=\"outlined\"\n                                    onClick={handleFileLoadSingleTable}\n                                    disabled={filePreviewLoading}\n                                    sx={{ textTransform: 'none', width: 240 }}\n                                >\n                                    Load Table\n                                </Button>\n                                {hasMultipleFileTables && (\n                                    <Button\n                                        variant=\"contained\"\n                                        onClick={handleFileLoadAllTables}\n                                        disabled={filePreviewLoading}\n                                        sx={{ textTransform: 'none', width: 240 }}\n                                    >\n                                        Load All Tables\n                                    </Button>\n                                )}\n                            </Box>\n                        )}\n                    </Box>\n                </TabPanel>\n\n                {/* URL Tab */}\n                <TabPanel value={activeTab} index=\"url\">\n                    <Box sx={{\n                        display: 'flex',\n                        flexDirection: 'column',\n                        height: '100%',\n                        boxSizing: 'border-box',\n                        gap: 2,\n                        p: 2,\n                        justifyContent: showUrlPreview ? 'flex-start' : 'center',\n                    }}>\n                        <Box sx={{ width: '100%', maxWidth: showUrlPreview ? '80%' : 760, alignSelf: 'center', display: 'flex', flexDirection: 'column', gap: 2 }}>\n                            {/* URL Input */}\n                            <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5 }}>\n                                <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n                                    <TextField\n                                        fullWidth\n                                        placeholder=\"Enter URL: https://example.com/data.json or /api/data\"\n                                        value={tableURL || ''}\n                                        onChange={(e) => setTableURL((e.target.value || '').trim())}\n                                        inputRef={urlInputRef}\n                                        error={tableURL !== \"\" && !hasValidUrl}\n                                        helperText={tableURL !== \"\" && !hasValidUrl ? \"Enter a valid URL starting with http://, https://, or /\" : undefined}\n                                        size=\"small\"\n                                        sx={{ \n                                            flex: 1,\n                                            '& .MuiInputBase-input': {\n                                                fontSize: '0.875rem',\n                                            },\n                                            '& .MuiInputBase-input::placeholder': {\n                                                fontSize: '0.875rem',\n                                            },\n                                        }}\n                                    />\n                                    <Button\n                                        variant=\"outlined\"\n                                        size=\"small\"\n                                        onClick={() => handleURLPreview(tableURL || '')}\n                                        disabled={!hasValidUrl || urlPreviewLoading}\n                                        sx={{ textTransform: 'none', whiteSpace: 'nowrap' }}\n                                    >\n                                        Preview\n                                    </Button>\n                                </Box>\n                                <Typography variant=\"caption\" color=\"text.secondary\" sx={{ fontSize: '0.75rem', ml: 0.5 }}>\n                                    The URL must point to data in CSV, JSON, or JSONL format\n                                </Typography>\n                            </Box>\n                            \n                            {/* Watch/Auto-refresh options - always visible */}\n                            <Paper variant=\"outlined\" sx={{ p: 2, borderRadius: 1 }}>\n                                <Box sx={{ display: 'flex', flexDirection: 'row', gap: 1, alignItems: 'center', height: 24 }}>\n                                    <FormControlLabel\n                                        control={\n                                            <Switch\n                                                checked={urlAutoRefresh}\n                                                onChange={(e) => setUrlAutoRefresh(e.target.checked)}\n                                                size=\"small\"\n                                            />\n                                        }\n                                        label={\n                                            <Typography component=\"span\" variant=\"body2\" sx={{ fontWeight: 500 }}>\n                                                Watch Mode\n                                            </Typography>\n                                        }\n                                    />\n                                    {urlAutoRefresh ? (\n                                        <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, }}>\n                                            <Typography variant=\"body2\" color=\"text.secondary\" sx={{ fontSize: '0.8rem' }}>\n                                                check data updates every\n                                            </Typography>\n                                            {[\n                                                { seconds: 5, label: '5s' },\n                                                { seconds: 15, label: '15s' },\n                                                { seconds: 30, label: '30s' },\n                                                { seconds: 60, label: '1m' },\n                                                { seconds: 300, label: '5m' },\n                                                { seconds: 600, label: '10m' },\n                                                { seconds: 1800, label: '30m' },\n                                                { seconds: 3600, label: '1h' },\n                                                { seconds: 86400, label: '24h' },\n                                            ].map((opt) => (\n                                                <Chip\n                                                    key={opt.seconds}\n                                                    label={opt.label}\n                                                    size=\"small\"\n                                                    variant={urlRefreshInterval === opt.seconds ? 'filled' : 'outlined'}\n                                                    color={urlRefreshInterval === opt.seconds ? 'primary' : 'default'}\n                                                    onClick={() => setUrlRefreshInterval(opt.seconds)}\n                                                    sx={{ \n                                                        cursor: 'pointer', \n                                                        fontSize: '0.7rem',\n                                                        height: 24,\n                                                    }}\n                                                />\n                                            ))}\n                                        </Box>\n                                    ) : <Typography component=\"span\" variant=\"caption\" color=\"text.secondary\">\n                                        automatically check and refresh data from the URL at regular intervals\n                                    </Typography>}\n                                    \n                                </Box>\n                            </Paper>\n\n                            {/* Example APIs - Compact List */}\n                            {(!urlPreviewTables || urlPreviewTables.length === 0) && !urlPreviewLoading && (\n                                <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5 }}>\n                                    <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mb: 0.5 }}>\n                                        Try examples:\n                                    </Typography>\n                                    <Box component=\"ul\" sx={{ \n                                        listStyle: 'none', \n                                        padding: 0, \n                                        margin: 0,\n                                        display: 'flex',\n                                        flexDirection: 'column',\n                                        gap: 0.25,\n                                    }}>\n                                        {exampleUrls.map((example) => (\n                                            <Box\n                                                component=\"li\"\n                                                key={example.url}\n                                                onClick={() => {\n                                                    console.log('example', example);\n                                                    if (example.url) {\n                                                        \n                                                        setTableURL(example.url);\n                                                        setUrlAutoRefresh(true);\n                                                        setUrlRefreshInterval(example.refreshSeconds || 60);\n                                                        handleURLPreview(example.url);\n                                                    }\n                                                }}\n                                                sx={{\n                                                    cursor: 'pointer',\n                                                    '&::before': {\n                                                        content: '\"• \"',\n                                                        color: 'text.secondary',\n                                                        marginRight: 0.5,\n                                                    }\n                                                }}\n                                            >\n                                                <Typography \n                                                    component=\"span\"\n                                                    variant=\"caption\" \n                                                    sx={{ \n                                                        fontSize: '0.75rem',\n                                                        color: 'primary.main',\n                                                        textDecoration: 'none',\n                                                        '&:hover': {\n                                                            textDecoration: 'underline',\n                                                        }\n                                                    }}\n                                                >\n                                                    {example.label}\n                                                </Typography>\n                                                {example.resetUrl && (\n                                                    <Typography\n                                                        component=\"span\"\n                                                        variant=\"caption\"\n                                                        onClick={(e) => {\n                                                            e.stopPropagation();\n                                                            fetchWithIdentity(`${window.location.origin}${example.resetUrl}`, { method: 'POST' })\n                                                                .then(() => {\n                                                                    console.log('Reset successful');\n                                                                })\n                                                                .catch(err => console.error('Reset failed:', err));\n                                                        }}\n                                                        sx={{\n                                                            fontSize: '0.7rem',\n                                                            color: 'text.secondary',\n                                                            ml: 1,\n                                                            cursor: 'pointer',\n                                                            display: 'inline-flex',\n                                                            alignItems: 'center',\n                                                            gap: 0.25,\n                                                            '&:hover': { color: 'warning.main' },\n                                                        }}\n                                                    >\n                                                        <RestartAltIcon sx={{ fontSize: 12 }} />\n                                                        reset\n                                                    </Typography>\n                                                )}\n                                            </Box>\n                                        ))}\n                                    </Box>\n                                </Box>\n                            )}\n                        </Box>\n\n                        {showUrlPreview && (\n                            <Box sx={{ width: '90%', alignSelf: 'center' }}>\n                                <MultiTablePreview\n                                    loading={urlPreviewLoading}\n                                    error={urlPreviewError}\n                                    tables={urlPreviewTables}\n                                    emptyLabel=\"Enter a URL and click Preview to see data.\"\n                                    onRemoveTable={handleRemoveUrlPreviewTable}\n                                    activeIndex={urlPreviewActiveIndex}\n                                    onActiveIndexChange={setUrlPreviewActiveIndex}\n                                />\n                            </Box>\n                        )}\n\n                        {urlPreviewTables && urlPreviewTables.length > 0 && (\n                            <Box sx={{ display: 'flex', justifyContent: 'center', gap: 1, alignItems: 'center' }}>\n                                {urlAutoRefresh && (\n                                    <Typography variant=\"caption\" color=\"success.main\" sx={{ mr: 1 }}>\n                                        <StreamIcon sx={{ fontSize: 14, verticalAlign: 'middle', mr: 0.5 }} />\n                                        Watch mode: {urlRefreshInterval < 60 ? `${urlRefreshInterval}s` : `${Math.floor(urlRefreshInterval / 60)}m`}\n                                    </Typography>\n                                )}\n                                <Button\n                                    variant=\"contained\"\n                                    onClick={handleURLLoadSingleTable}\n                                    disabled={urlPreviewLoading}\n                                    sx={{ textTransform: 'none', width: 240 }}\n                                >\n                                    Load Table\n                                </Button>\n                                {hasMultipleUrlTables && (\n                                    <Button\n                                        variant=\"contained\"\n                                        size=\"small\"\n                                        onClick={handleURLLoadAllTables}\n                                        disabled={urlPreviewLoading}\n                                        sx={{ textTransform: 'none' }}\n                                    >\n                                        Load All Tables\n                                    </Button>\n                                )}\n                            </Box>\n                        )}\n                    </Box>\n                </TabPanel>\n\n                {/* Paste Data Tab */}\n                <TabPanel value={activeTab} index=\"paste\">\n                    <Box sx={{\n                        display: 'flex',\n                        flexDirection: 'column',\n                        height: '100%',\n                        boxSizing: 'border-box',\n                        p: 2,\n                        justifyContent: hasPasteContent ? 'flex-start' : 'center',\n                        alignItems: hasPasteContent ? 'stretch' : 'center',\n                    }}>\n                        {isOverSizeLimit && (\n                            <Box sx={{ \n                                display: 'flex', \n                                alignItems: 'center', \n                                mb: 1, \n                                p: 1, \n                                backgroundColor: 'rgba(244, 67, 54, 0.1)', \n                                borderRadius: 1, \n                                border: '1px solid rgba(244, 67, 54, 0.3)' \n                            }}>\n                                <Typography variant=\"caption\" sx={{ flex: 1, color: 'error.main', fontWeight: 500 }}>\n                                    ⚠️ Content exceeds {(MAX_CONTENT_SIZE / (1024 * 1024)).toFixed(0)}MB size limit. \n                                    Current size: {(new Blob([pasteContent]).size / (1024 * 1024)).toFixed(2)}MB. \n                                    Please use the DATABASE tab for large datasets.\n                                </Typography>\n                            </Box>\n                        )}\n                        \n                        {isLargeContent && !isOverSizeLimit && (\n                            <Box sx={{ \n                                display: 'flex', \n                                alignItems: 'center', \n                                mb: 1, \n                                p: 1, \n                                backgroundColor: 'rgba(255, 193, 7, 0.1)', \n                                borderRadius: 1 \n                            }}>\n                                <Typography variant=\"caption\" sx={{ flex: 1 }}>\n                                    Large content detected ({Math.round(pasteContent.length / 1000)}KB). \n                                    {showFullContent ? 'Showing full content (may be slow)' : 'Showing preview for performance'}\n                                </Typography>\n                                <Button \n                                    size=\"small\" \n                                    variant=\"outlined\" \n                                    onClick={toggleFullContent}\n                                    sx={{ textTransform: 'none', minWidth: 'auto' }}\n                                >\n                                    {showFullContent ? 'Show Preview' : 'Show Full'}\n                                </Button>\n                            </Box>\n                        )}\n\n                        <Box sx={{ width: '100%', maxWidth: hasPasteContent ? 'none' : 720 }}>\n                            <TextField\n                                autoFocus\n                                multiline\n                                fullWidth\n                                value={pasteContent}\n                                onChange={handleContentChange}\n                                placeholder=\"Paste your data here (CSV, TSV, or JSON format)\"\n                                InputProps={{\n                                    readOnly: isLargeContent && !showFullContent,\n                                }}\n                                sx={{\n                                    flex: hasPasteContent ? 1 : 'none',\n                                    '& .MuiInputBase-root': {\n                                        height: hasPasteContent ? '100%' : 220,\n                                        alignItems: 'flex-start',\n                                    },\n                                    '& .MuiInputBase-input': {\n                                        fontSize: 12,\n                                        fontFamily: 'monospace',\n                                        height: hasPasteContent ? '100% !important' : 'auto !important',\n                                        overflow: 'auto !important',\n                                    },\n                                    '& .MuiInputBase-input[readonly]': {\n                                        cursor: 'not-allowed',\n                                    }\n                                }}\n                            />\n                            {/* Show preview indicator when in preview mode */}\n                            {isLargeContent && !showFullContent && (\n                                <Box sx={{ \n                                    mt: 0.5, \n                                    px: 1, \n                                    py: 0.5, \n                                    backgroundColor: alpha(theme.palette.info.main, 0.08),\n                                    borderRadius: 0.5,\n                                    border: `1px solid ${alpha(theme.palette.info.main, 0.2)}`\n                                }}>\n                                    <Typography variant=\"caption\" color=\"text.secondary\" sx={{ fontSize: '0.7rem' }}>\n                                        Preview mode: Editing disabled. Click \"Show Full\" to enable editing.\n                                    </Typography>\n                                </Box>\n                            )}\n                        </Box>\n\n                        <Box sx={{ display: 'flex', justifyContent: 'flex-end', mt: 2, gap: 1 }}>\n                            <Button\n                                variant=\"contained\"\n                                onClick={handlePasteSubmit}\n                                disabled={(pasteContent || '').trim() === '' || isOverSizeLimit}\n                                sx={{ textTransform: 'none' }}\n                            >\n                                Upload Data\n                            </Button>\n                        </Box>\n                    </Box>\n                </TabPanel>\n\n                {/* Database Tab */}\n                <TabPanel value={activeTab} index=\"database\">\n                    <DBManagerPane onClose={handleClose} storeOnServer={storeOnServer} />\n                </TabPanel>\n\n                {/* Extract Data Tab */}\n                <TabPanel value={activeTab} index=\"extract\">\n                    <DataLoadingChat storeOnServer={storeOnServer} />\n                </TabPanel>\n\n                {/* Explore Sample Datasets Tab */}\n                <TabPanel value={activeTab} index=\"explore\">\n                    <Box sx={{ p: 2, height: '100%', boxSizing: 'border-box', display: 'flex', flexDirection: 'column' }}>\n                        <DatasetSelectionView \n                        datasets={datasetPreviews} \n                        hideRowNum\n                        handleSelectDataset={async (dataset) => {\n                            // Check if this is a live dataset\n                            const isLiveDataset = dataset.live === true;\n                            \n                            setDatasetLoading(true);\n                            setDatasetLoadingLabel(`Loading ${dataset.name}...`);\n                            \n                            try {\n                                const loadPromises = dataset.tables.map(async (table) => {\n                                    // For live datasets with relative URLs, construct full URL\n                                    let fullUrl = table.url;\n                                    if (table.url.startsWith('/')) {\n                                        fullUrl = window.location.origin + table.url;\n                                    }\n                                    \n                                    const res = await fetch(fullUrl);\n                                    const textData = await res.text();\n                                    let tableName = table.url.split(\"/\").pop()?.split(\".\")[0]?.split(\"?\")[0] || 'table-' + Date.now().toString().substring(0, 8);\n                                    let dictTable;\n                                    if (table.format == \"csv\") {\n                                        dictTable = createTableFromText(tableName, textData);\n                                    } else if (table.format == \"json\") {\n                                        dictTable = createTableFromFromObjectArray(tableName, JSON.parse(textData), true);\n                                    } \n                                    if (dictTable) {\n                                        // For live datasets, set up as stream source with auto-refresh\n                                        if (isLiveDataset) {\n                                            dictTable.source = { \n                                                type: 'stream', \n                                                url: fullUrl,\n                                                autoRefresh: true,\n                                                refreshIntervalSeconds: dataset.refreshIntervalSeconds || 60,\n                                                lastRefreshed: Date.now()\n                                            };\n                                        } else {\n                                            // Regular example data\n                                            dictTable.source = { type: 'example', url: table.url };\n                                        }\n                                        await dispatch(loadTable({ table: dictTable, storeOnServer }));\n                                    }\n                                });\n                                await Promise.all(loadPromises);\n                            } catch (error) {\n                                console.error('Failed to load dataset:', error);\n                            } finally {\n                                setDatasetLoading(false);\n                                setDatasetLoadingLabel('');\n                            }\n                            handleClose();\n                        }}\n                        />\n                    </Box>\n                </TabPanel>\n\n            </DialogContent>\n\n            {/* Loading overlay for dataset loading */}\n            <Backdrop\n                open={datasetLoading}\n                sx={{\n                    position: 'absolute',\n                    zIndex: (theme) => theme.zIndex.drawer + 1,\n                    backgroundColor: 'rgba(255, 255, 255, 0.85)',\n                    backdropFilter: 'blur(4px)',\n                    display: 'flex',\n                    flexDirection: 'column',\n                    gap: 2,\n                }}\n            >\n                <CircularProgress size={36} />\n                <Typography variant=\"body2\" color=\"text.secondary\">\n                    {datasetLoadingLabel || 'Loading data...'}\n                </Typography>\n                <Button\n                    variant=\"text\"\n                    size=\"small\"\n                    onClick={() => { setDatasetLoading(false); setDatasetLoadingLabel(''); }}\n                    sx={{ mt: 1, textTransform: 'none', color: 'text.secondary' }}\n                >\n                    Cancel\n                </Button>\n            </Backdrop>\n        </Dialog>\n    );\n};\n\nexport default UnifiedDataUploadDialog;\n"
  },
  {
    "path": "src/views/ViewUtils.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React from \"react\";\nimport ts from \"typescript\";\nimport { runCodeOnInputListsInVM } from \"../app/utils\";\nimport { FieldItem } from \"../components/ComponentType\";\nimport { Type } from \"../data/types\";\nimport { BooleanIcon, NumericalIcon, StringIcon, DateIcon, UnknownIcon } from '../icons';\n\nimport AutoFixHighIcon from '@mui/icons-material/AutoFixHigh';\nimport BarChartIcon from '@mui/icons-material/BarChart';\nimport CommitIcon from '@mui/icons-material/Commit';\n\nimport { DictTable } from '../components/ComponentType';\n\nexport const groupConceptItems = (conceptShelfItems: FieldItem[], tables: DictTable[])  => {\n    // group concepts based on which source table they belongs to\n    return conceptShelfItems.map(f => {\n        let group = \"\"\n        if (f.source == \"original\") {\n            group = tables.find(t => t.id == f.tableRef)?.displayId || f.tableRef;\n        } else if (f.source == \"custom\") {\n            group = \"new fields\"\n        }\n        return {group, field: f}\n    });\n}\n\n// TODO: fix Unknown icon\nexport const getIconFromType = (t: Type | undefined): JSX.Element => {\n    switch (t) {\n        case Type.Boolean:\n            return <BooleanIcon fontSize=\"inherit\" />;\n        case Type.Date:\n            return <DateIcon fontSize=\"inherit\" />;\n        case Type.Integer:\n        case Type.Number:\n            return <NumericalIcon fontSize=\"inherit\" />;\n        case Type.String:\n            return <StringIcon fontSize=\"inherit\" />;\n        case Type.Auto:\n            return <AutoFixHighIcon fontSize=\"inherit\" />;\n    }\n    return <CommitIcon sx={{opacity: 0.3}} fontSize=\"inherit\" />;\n};\n\nexport const getIconFromDtype = (t: \"quantitative\" | \"nominal\" | \"ordinal\" | \"temporal\" | \"auto\"): JSX.Element => {\n    switch (t) {\n        case \"quantitative\":\n            return <NumericalIcon fontSize=\"inherit\" />;\n        case \"nominal\":\n            return <StringIcon fontSize=\"inherit\" />;\n        case \"ordinal\":\n            return <BarChartIcon fontSize=\"inherit\" />;\n        case \"temporal\":\n            return <DateIcon fontSize=\"inherit\" />;\n        case \"auto\":\n            return <AutoFixHighIcon fontSize=\"inherit\" />;\n    }\n    return <CommitIcon sx={{opacity: 0.3}} fontSize=\"inherit\" />;\n};"
  },
  {
    "path": "src/views/VisualizationView.tsx",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n    Box,\n    Button,\n    Divider,\n    Icon,\n    IconButton,\n    Stack,\n    Tooltip,\n    Typography,\n    ListItemIcon,\n    ListItemText,\n    MenuItem,\n    LinearProgress,\n    Card,\n    ListSubheader,\n    Menu,\n    CardContent,\n    Slider,\n    Dialog,\n    DialogContent,\n    TextField,\n    CircularProgress,\n    Popover,\n    Snackbar,\n    Alert,\n    Collapse,\n    Fade,\n    Grow,\n} from '@mui/material';\n\nimport _ from 'lodash';\n\nimport { borderColor } from '../app/tokens';\n\nimport ButtonGroup from '@mui/material/ButtonGroup';\n\n\nimport '../scss/VisualizationView.scss';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { DataFormulatorState, dfActions, fetchChartInsight } from '../app/dfSlice';\nimport { assembleVegaChart, extractFieldsFromEncodingMap, getUrls, prepVisTable, fetchWithIdentity } from '../app/utils';\nimport { Chart, EncodingItem, EncodingMap, FieldItem, computeInsightKey } from '../components/ComponentType';\nimport { DictTable } from \"../components/ComponentType\";\n\nimport AddchartIcon from '@mui/icons-material/Addchart';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport StarIcon from '@mui/icons-material/Star';\nimport TerminalIcon from '@mui/icons-material/Terminal';\nimport StarBorderIcon from '@mui/icons-material/StarBorder';\nimport QuestionAnswerIcon from '@mui/icons-material/QuestionAnswer';\nimport CloseIcon from '@mui/icons-material/Close';\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\nimport ZoomInIcon from '@mui/icons-material/ZoomIn';\nimport ZoomOutIcon from '@mui/icons-material/ZoomOut';\nimport InfoIcon from '@mui/icons-material/Info';\nimport CasinoIcon from '@mui/icons-material/Casino';\nimport SaveAltIcon from '@mui/icons-material/SaveAlt';\nimport OpenInNewIcon from '@mui/icons-material/OpenInNew';\n\nimport { CHART_TEMPLATES, getChartTemplate } from '../components/ChartTemplates';\n\nimport Prism from 'prismjs'\nimport 'prismjs/components/prism-python' // Language\nimport 'prismjs/components/prism-sql' // Language\nimport 'prismjs/components/prism-markdown' // Language\nimport 'prismjs/components/prism-typescript' // Language\nimport 'prismjs/themes/prism.css'; //Example style, you can use another\n\nimport { ChatDialog } from './ChatDialog';\nimport { EncodingShelfThread } from './EncodingShelfThread';\nimport { CustomReactTable } from './ReactTable';\nimport { InsightIcon } from '../icons';\n\nimport { dfSelectors } from '../app/dfSlice';\nimport { ChartRecBox } from './ChartRecBox';\nimport { CodeExplanationCard, ConceptExplCards, extractConceptExplanations } from './ExplComponents';\nimport CodeIcon from '@mui/icons-material/Code';\n\nexport interface VisPanelProps { }\n\nexport interface VisPanelState {\n    focusedIndex: number;\n    focusUpdated: boolean;\n    viewMode: \"gallery\" | \"carousel\";\n}\n\nexport let generateChartSkeleton = (icon: any, width: number = 160, height: number = 160, opacity: number = 0.5) => (\n    <Box width={width} height={height} sx={{ display: \"flex\" }}>\n        {icon == undefined ?\n            <AddchartIcon sx={{ color: \"lightgray\", margin: \"auto\" }} /> :\n            typeof icon == 'string' ?\n                <Box width=\"100%\" sx={{ display: \"flex\", opacity: opacity }}>\n                    <img height={Math.min(64, height)} width={Math.min(64, width)}\n                         style={{ maxHeight: Math.min(height, Math.max(32, 0.5 * height)), maxWidth: Math.min(width, Math.max(32, 0.5 * width)), margin: \"auto\" }} \n                         src={icon} alt=\"\" role=\"presentation\" />\n                </Box> :\n                <Box width=\"100%\" sx={{ display: \"flex\", opacity: opacity }}>\n                    {React.cloneElement(icon, {\n                        style: { \n                            maxHeight: Math.min(height, 32),\n                            maxWidth: Math.min(width, 32), \n                            margin: \"auto\" \n                        }\n                    })}\n                </Box>}\n    </Box>\n)\n\nexport let renderTableChart = (\n    chart: Chart, conceptShelfItems: FieldItem[], extTable: any[], \n    width: number = 120, height: number = 120) => {\n\n    let fields = Object.entries(chart.encodingMap).filter(([channel, encoding]) => {\n        return encoding.fieldID != undefined;\n    }).map(([channel, encoding]) => conceptShelfItems.find(f => f.id == encoding.fieldID) as FieldItem);\n\n    if (fields.length == 0) {\n        fields = conceptShelfItems.filter(f => Object.keys(extTable[0]).includes(f.name));\n    }\n\n    let rows = extTable.map(row => Object.fromEntries(fields.filter(f => Object.keys(row).includes(f.name)).map(f => [f.name, row[f.name]])))\n\n    let colDefs = fields.map(field => {\n        let name = field.name;\n        return {\n            id: name, label: name, minWidth: 30, align: undefined, \n            format: (value: any) => `${value}`, source: field.source\n        }\n    })\n\n    return <Box sx={{ position: \"relative\", display: \"flex\", flexDirection: \"column\", margin: 'auto' }}>\n        <CustomReactTable rows={rows} columnDefs={colDefs} rowsPerPageNum={10} maxCellWidth={180} compact />\n    </Box>\n}\n\nexport let getDataTable = (chart: Chart, tables: DictTable[], charts: Chart[], \n                           conceptShelfItems: FieldItem[], ignoreTableRef = false) => {\n    // given a chart, determine which table would be used to visualize the chart\n\n    // return the table directly\n    if (chart.tableRef && !ignoreTableRef) {\n        return tables.find(t => t.id == chart.tableRef) as DictTable;\n    }\n\n    let activeFields = conceptShelfItems.filter((field) => Array.from(Object.values(chart.encodingMap)).map((enc: EncodingItem) => enc.fieldID).includes(field.id));\n\n    let workingTableCandidates = tables.filter(t => {\n        return activeFields.every(f => t.names.includes(f.name));\n    });\n    \n    let confirmedTableCandidates = workingTableCandidates.filter(t => !charts.some(c => c.saved && c.tableRef == t.id));\n    if(confirmedTableCandidates.length > 0) {\n        return confirmedTableCandidates[0];\n    } else if (workingTableCandidates.length > 0) {\n        return workingTableCandidates[0];\n    } else {\n        // sort base tables based on how many active fields are covered by existing tables\n        return tables.filter(t => t.derive == undefined).sort((a, b) => activeFields.filter(f => a.names.includes(f.name)).length \n                                        - activeFields.filter(f => b.names.includes(f.name)).length).reverse()[0];\n    }\n}\n\nexport let CodeBox : FC<{code: string, language: string, fontSize?: number}> = function  CodeBox({ code, language, fontSize = 10 }) {\n    useEffect(() => {\n        Prism.highlightAll();\n      }, [code]);\n\n    return (\n        <pre style={{fontSize: fontSize}}>\n            <code className={`language-${language}`} >{code}</code>\n        </pre>\n    );\n  }\n\n\nexport let checkChartAvailabilityOnPreparedData = (chart: Chart, conceptShelfItems: FieldItem[], visTableRows: any[]) => {\n    let visFieldsFinalNames = Object.keys(chart.encodingMap)\n            .filter(key => chart.encodingMap[key as keyof EncodingMap].fieldID != undefined)\n            .map(key => [chart.encodingMap[key as keyof EncodingMap].fieldID, chart.encodingMap[key as keyof EncodingMap].aggregate])\n            .map(([id, aggregate]) => {\n                let field = conceptShelfItems.find(f => f.id == id);\n                if (field) {\n                    if (aggregate) {\n                        return aggregate == \"count\" ? \"_count\" : `${field.name}_${aggregate}`;\n                    } else {\n                        return field.name;\n                    }\n                }\n                return undefined;\n            }).filter((f): f is string => f != undefined);\n    return visFieldsFinalNames.length > 0 && visTableRows.length > 0 && visFieldsFinalNames.every(name => Object.keys(visTableRows[0]).includes(name));\n}\n\nexport let checkChartAvailability = (chart: Chart, conceptShelfItems: FieldItem[], visTableRows: any[]) => {\n    let visFieldIds = Object.keys(chart.encodingMap)\n            .filter(key => chart.encodingMap[key as keyof EncodingMap].fieldID != undefined)\n            .map(key => chart.encodingMap[key as keyof EncodingMap].fieldID);\n    let visFields = conceptShelfItems.filter(f => visFieldIds.includes(f.id));\n    return visFields.length > 0 && visTableRows.length > 0 && visFields.every(f => Object.keys(visTableRows[0]).includes(f.name));\n}\n\nexport let SampleSizeEditor: FC<{\n    initialSize: number;\n    totalSize: number;\n    onSampleSizeChange: (newSize: number) => void;\n}> = function SampleSizeEditor({ initialSize, totalSize, onSampleSizeChange }) {\n\n    const [localSampleSize, setLocalSampleSize] = useState<number>(initialSize);\n    const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n    const open = Boolean(anchorEl);\n\n    useEffect(() => {\n        setLocalSampleSize(initialSize);\n    }, [initialSize])\n\n    let maxSliderSize = Math.min(totalSize, 30000);\n\n    const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n        setAnchorEl(event.currentTarget);\n    };\n\n    const handleClose = () => {\n        setAnchorEl(null);\n    };\n\n    return <Box component=\"span\" sx={{ display: 'flex', flexDirection: 'row', alignItems: 'center' }}>\n        <Button \n            onClick={handleClick}\n            sx={{ textTransform: 'none', fontSize: '12px' }}\n        >\n            {localSampleSize} / {totalSize}\n        </Button>\n        <Popover\n            open={open}\n            anchorEl={anchorEl}\n            onClose={handleClose}\n            anchorOrigin={{\n                vertical: 'bottom',\n                horizontal: 'left',\n            }}\n            transformOrigin={{\n                vertical: 'top',\n                horizontal: 'left',\n            }}\n        >\n            <Box sx={{ p: 2, width: 300 }}>\n                <Typography fontSize=\"small\" gutterBottom>\n                    Adjust sample size: {localSampleSize} / {totalSize} rows\n                </Typography>\n                <Box sx={{ display: 'flex', flexDirection: 'row', alignItems: 'center' }}>\n                    <Typography variant=\"caption\" color=\"text.secondary\" sx={{ mr: 1 }}>100</Typography>\n                    <Slider\n                        size=\"small\"\n                        min={100}\n                        max={maxSliderSize}\n                        sx={{ mr: 1 }}\n                        value={localSampleSize}\n                        onChange={(_, value) => setLocalSampleSize(value as number)}\n                        valueLabelDisplay=\"auto\"\n                        aria-label=\"Sample size\"\n                    />\n                    <Typography variant=\"caption\" color=\"text.secondary\" sx={{ ml: 1 }}>{maxSliderSize}</Typography>\n                    <Button sx={{ textTransform: 'none', ml: 2, fontSize: '12px' }} onClick={() => {\n                        onSampleSizeChange(localSampleSize);\n                        setAnchorEl(null);\n                    }}>\n                        Resample\n                    </Button>\n                </Box>\n            </Box>\n        </Popover>\n    </Box>\n}\n\n/**\n * Module-level caches that persist across component remounts.\n * - displayRowsCache: avoids re-fetching server data when switching back to a chart\n * - displaySvgCache: avoids re-running toSVG when chart+data haven't changed\n */\nconst displayRowsCache = new Map<string, { rows: any[], totalCount: number }>();\nconst displaySvgCache = new Map<string, { specKey: string; svg: string; spec: any }>();\n\n// Simple component that only handles Vega chart rendering — now uses headless toSVG()\nconst VegaChartRenderer: FC<{\n    chart: Chart;\n    conceptShelfItems: FieldItem[];\n    visTableRows: any[];\n    tableMetadata: any;\n    chartWidth: number;\n    chartHeight: number;\n    scaleFactor: number;\n    maxStretchFactor?: number;\n    chartUnavailable: boolean;\n    onSpecReady?: (spec: any | null) => void;\n}> = React.memo(({ chart, conceptShelfItems, visTableRows, tableMetadata, chartWidth, chartHeight, scaleFactor, maxStretchFactor, chartUnavailable, onSpecReady }) => {\n    \n    // Initialize from display SVG cache for instant display on chart switch\n    const svgCached = displaySvgCache.get(chart.id);\n    const [svgContent, setSvgContent] = useState<string | null>(svgCached?.svg ?? null);\n    const [assembledSpec, setAssembledSpec] = useState<any>(svgCached?.spec ?? null);\n\n    useEffect(() => {\n        \n        if (chart.chartType === \"Auto\" || chart.chartType === \"Table\" || chartUnavailable) {\n            setSvgContent(null);\n            setAssembledSpec(null);\n            return;\n        }\n\n        // Skip rendering when we have no data yet (data is being fetched)\n        if (visTableRows.length === 0) {\n            return;\n        }\n\n        const spec = assembleVegaChart(\n            chart.chartType, \n            chart.encodingMap, \n            conceptShelfItems, \n            visTableRows, \n            tableMetadata, \n            chartWidth, \n            chartHeight,\n            true,\n            chart.config,\n            scaleFactor,\n            maxStretchFactor,\n        );\n\n        if (!spec || spec === \"Table\") {\n            setSvgContent(null);\n            setAssembledSpec(null);\n            onSpecReady?.(null);\n            return;\n        }\n\n        spec['background'] = 'white';\n\n        // Check display SVG cache — skip toSVG entirely if spec matches\n        const specKey = JSON.stringify(spec);\n        const cached = displaySvgCache.get(chart.id);\n        if (cached && cached.specKey === specKey) {\n            setSvgContent(cached.svg);\n            setAssembledSpec(cached.spec);\n            onSpecReady?.(cached.spec);\n            return;\n        }\n\n        setAssembledSpec(spec);\n        onSpecReady?.(spec);\n\n        // Headless render via Vega: compile VL → parse → View → toSVG()\n        let cancelled = false;\n        (async () => {\n            try {\n                const { compile: vlCompile } = await import('vega-lite');\n                const vega = await import('vega');\n                const vgSpec = vlCompile(spec as any).spec;\n                const runtime = vega.parse(vgSpec);\n                const view = new vega.View(runtime, { renderer: 'none' });\n                await view.runAsync();\n                const svg = await view.toSVG();\n                view.finalize();\n                if (!cancelled) {\n                    setSvgContent(svg);\n                    // Cache the rendered SVG for instant reuse on revisit\n                    displaySvgCache.set(chart.id, { specKey, svg, spec });\n                }\n            } catch (err) {\n                console.warn('VegaChartRenderer: SVG render failed', err);\n                if (!cancelled) {\n                    setSvgContent(null);\n                }\n            }\n        })();\n\n        return () => { cancelled = true; };\n\n    }, [chart.id, chart.chartType, chart.encodingMap, chart.config, conceptShelfItems, visTableRows, tableMetadata, chartWidth, chartHeight, scaleFactor, maxStretchFactor, chartUnavailable]);\n\n    const handleSavePng = useCallback(async () => {\n        if (!assembledSpec) return;\n        try {\n            const { compile: vlCompile } = await import('vega-lite');\n            const vega = await import('vega');\n            const vgSpec = vlCompile(assembledSpec as any).spec;\n            const runtime = vega.parse(vgSpec);\n            const view = new vega.View(runtime, { renderer: 'none' });\n            await view.runAsync();\n            const pngUrl = await view.toImageURL('png', 2);\n            view.finalize();\n\n            // Trigger download\n            const link = document.createElement('a');\n            link.download = `${chart.chartType}-${chart.id}.png`;\n            link.href = pngUrl;\n            document.body.appendChild(link);\n            link.click();\n            document.body.removeChild(link);\n        } catch (err) {\n            console.error('Save PNG failed:', err);\n        }\n    }, [assembledSpec, chart.chartType, chart.id]);\n\n    const handleOpenInVegaEditor = useCallback(() => {\n        if (!assembledSpec) return;\n        // Use postMessage to pass spec to Vega Editor (same approach as vega-embed)\n        const editorUrl = 'https://vega.github.io/editor/';\n        const editor = window.open(editorUrl);\n        if (!editor) return;\n\n        const wait = 10_000;\n        const step = 250;\n        const { origin } = new URL(editorUrl);\n        let count = Math.floor(wait / step);\n\n        function listen(evt: MessageEvent) {\n            if (evt.source === editor) {\n                count = 0;\n                window.removeEventListener('message', listen, false);\n            }\n        }\n        window.addEventListener('message', listen, false);\n\n        function send() {\n            if (count <= 0) return;\n            editor!.postMessage({\n                spec: JSON.stringify(assembledSpec, null, 2),\n                mode: 'vega-lite',\n            }, origin);\n            setTimeout(send, step);\n            count -= 1;\n        }\n        setTimeout(send, step);\n    }, [assembledSpec]);\n\n    if (chart.chartType === \"Auto\") {\n        return <Box sx={{ position: \"relative\", display: \"flex\", flexDirection: \"column\", margin: 'auto', color: 'darkgray' }}>\n            <InsightIcon fontSize=\"large\"/>\n        </Box>\n    }\n\n    if (chart.chartType === \"Table\") {\n        return visTableRows.length > 0 ? renderTableChart(chart, conceptShelfItems, visTableRows) : <Box sx={{ height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }} >\n            <InsightIcon fontSize=\"large\"/>\n        </Box>;\n    }\n\n    const chartTemplate = getChartTemplate(chart.chartType);\n    if (!checkChartAvailabilityOnPreparedData(chart, conceptShelfItems, visTableRows)) {\n        return <Box sx={{ height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }} >\n            {generateChartSkeleton(chartTemplate?.icon, 48, 48)}\n        </Box>\n    }\n\n    return (\n        <Box sx={{ mx: 2, display: 'flex', flexDirection: 'column', alignItems: 'center', maxWidth: '100%', overflow: 'hidden' }}>\n            {svgContent ? (\n                <Box \n                    dangerouslySetInnerHTML={{ __html: svgContent }}\n                    sx={{\n                        maxWidth: '100%',\n                        '& svg': { display: 'block', maxWidth: '100%', height: 'auto' },\n                    }}\n                />\n            ) : (\n                <Box sx={{ \n                    width: chartWidth, height: chartHeight, \n                    display: 'flex', alignItems: 'center', justifyContent: 'center' \n                }}>\n                    {generateChartSkeleton(chartTemplate?.icon, 48, 48, 0.3)}\n                </Box>\n            )}\n\n        </Box>\n    );\n});\n\n\nexport const ChartEditorFC: FC<{}> = function ChartEditorFC({}) {\n\n    const config = useSelector((state: DataFormulatorState) => state.config);\n    const serverConfig = useSelector((state: DataFormulatorState) => state.serverConfig);\n    const componentRef = useRef<HTMLHeadingElement>(null);\n\n    // Add ref for the container box that holds all exploration components\n    const explanationComponentsRef = useRef<HTMLDivElement>(null);\n\n    let tables = useSelector((state: DataFormulatorState) => state.tables);\n    \n    let charts = useSelector(dfSelectors.getAllCharts);\n    let focusedId = useSelector((state: DataFormulatorState) => state.focusedId);\n    let focusedChartId = focusedId?.type === 'chart' ? focusedId.chartId : undefined;\n    let chartSynthesisInProgress = useSelector((state: DataFormulatorState) => state.chartSynthesisInProgress) || [];\n\n    let synthesisRunning = focusedChartId ? chartSynthesisInProgress.includes(focusedChartId) : false;\n    let handleDeleteChart = () => { focusedChartId && dispatch(dfActions.deleteChartById(focusedChartId)) }\n\n    // Track the assembled Vega-Lite spec from the renderer so we can open it in the Vega Editor\n    const [renderedSpec, setRenderedSpec] = useState<any | null>(null);\n    const handleSpecReady = useCallback((spec: any | null) => { setRenderedSpec(spec); }, []);\n\n    const handleOpenInVegaEditor = useCallback(() => {\n        if (!renderedSpec) return;\n        const editorUrl = 'https://vega.github.io/editor/';\n        const editor = window.open(editorUrl);\n        if (!editor) return;\n        const wait = 10_000;\n        const step = 250;\n        const { origin } = new URL(editorUrl);\n        let count = Math.floor(wait / step);\n        function listen(evt: MessageEvent) {\n            if (evt.source === editor) {\n                count = 0;\n                window.removeEventListener('message', listen, false);\n            }\n        }\n        window.addEventListener('message', listen, false);\n        function send() {\n            if (count <= 0) return;\n            editor!.postMessage({ spec: JSON.stringify(renderedSpec, null, 2), mode: 'vega-lite' }, origin);\n            setTimeout(send, step);\n            count -= 1;\n        }\n        setTimeout(send, step);\n    }, [renderedSpec]);\n\n    let focusedChart = charts.find(c => c.id == focusedChartId) as Chart;\n    let trigger = focusedChart.source == \"trigger\" ? tables.find(t => t.derive?.trigger?.chart?.id == focusedChartId)?.derive?.trigger : undefined;\n\n    const dispatch = useDispatch();\n\n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n\n    const [codeViewOpen, setCodeViewOpen] = useState<boolean>(false);\n    const [conceptExplanationsOpen, setConceptExplanationsOpen] = useState<boolean>(false);\n    const [insightViewOpen, setInsightViewOpen] = useState<boolean>(false);\n    \n    const [chatDialogOpen, setChatDialogOpen] = useState<boolean>(false);\n    const [localScaleFactor, setLocalScaleFactor] = useState<number>(1);\n\n    // Reset local UI state when focused chart changes\n    useEffect(() => {\n        setCodeViewOpen(false);\n        setConceptExplanationsOpen(false);\n        setInsightViewOpen(false);\n        setChatDialogOpen(false);\n        setLocalScaleFactor(1);\n    }, [focusedChartId]);\n\n    // Combined useEffect to scroll to exploration components when any of them open\n    useEffect(() => {\n        if ((conceptExplanationsOpen || codeViewOpen || insightViewOpen) && explanationComponentsRef.current) {\n            setTimeout(() => {\n                explanationComponentsRef.current?.scrollIntoView({ \n                    behavior: 'smooth', \n                    block: 'start' \n                });\n            }, 200); // Small delay to ensure the component is rendered\n        }\n    }, [conceptExplanationsOpen, codeViewOpen, insightViewOpen]);\n\n    let table = getDataTable(focusedChart, tables, charts, conceptShelfItems);\n\n    let visFieldIds = Object.keys(focusedChart.encodingMap).filter(key => focusedChart.encodingMap[key as keyof EncodingMap].fieldID != undefined).map(key => focusedChart.encodingMap[key as keyof EncodingMap].fieldID);\n    let visFields = conceptShelfItems.filter(f => visFieldIds.includes(f.id));\n    let dataFieldsAllAvailable = visFields.every(f => table.names.includes(f.name));\n\n    // Create a stable identifier for data requirements (fields + aggregations)\n    const dataRequirements = useMemo(() => {\n        let { aggregateFields, groupByFields } = extractFieldsFromEncodingMap(focusedChart.encodingMap, conceptShelfItems);\n        let sortedFields = [...aggregateFields.map(f => `${f[0]}_${f[1]}`), ...groupByFields].sort();\n\n        return JSON.stringify({\n            tableId: table.id,\n            sortedFields\n        });\n    }, [focusedChart.encodingMap, conceptShelfItems, table.id]);\n\n    let setSystemMessage = (content: string, severity: \"error\" | \"warning\" | \"info\" | \"success\") => {\n        dispatch(dfActions.addMessages({\n            \"timestamp\": Date.now(),\n            \"component\": \"Chart Builder\",\n            \"type\": severity,\n            \"value\": content\n        }));\n    }\n\n    let createVisTableRowsLocal = (rows: any[]) => {\n        if (visFields.length == 0) {\n            return rows;\n        }\n        \n        let filteredRows = rows.map(row => Object.fromEntries(visFields.filter(f => table.names.includes(f.name)).map(f => [f.name, row[f.name]])));\n        let visTable = prepVisTable(filteredRows, conceptShelfItems, focusedChart.encodingMap);\n\n        if (visTable.length > serverConfig.MAX_DISPLAY_ROWS) {\n            let rowSample = _.sampleSize(visTable, serverConfig.MAX_DISPLAY_ROWS);\n            visTable = rowSample;\n        }\n\n        visTable = structuredClone(visTable);\n\n        return visTable;\n    }\n\n    const [visTableRows, setVisTableRows] = useState<any[]>(() => createVisTableRowsLocal(table.rows));\n\n    const [visTableTotalRowCount, setVisTableTotalRowCount] = useState<number>(table.virtual?.rowCount || table.rows.length);\n\n    let { aggregateFields, groupByFields } = extractFieldsFromEncodingMap(focusedChart.encodingMap, conceptShelfItems);\n    let sortedVisDataFields = [...aggregateFields.map(f => `${f[0]}_${f[1]}`), ...groupByFields].sort();\n\n    // Track which chart+table+requiredFields the current data belongs to (prevents showing stale data during transitions)\n    const computeVersionId = () => {\n        const contentSuffix = table.contentHash ? `-${table.contentHash.slice(0, 8)}` : `-${table.rows.length}`;\n        return `${table.id}-${sortedVisDataFields.join(\"_\")}${contentSuffix}`;\n    };\n    const [dataVersion, setDataVersion] = useState<string>(computeVersionId());\n    const currentRequestRef = useRef<string>('');\n    \n    // Check if current data is stale (belongs to different table/fields — ignoring contentHash for stale check \n    // since we want to show the previous render while new data is loading)\n    const baseVersionId = `${table.id}-${sortedVisDataFields.join(\"_\")}`;\n    const isDataStale = !dataVersion.startsWith(baseVersionId);\n\n    // Use empty data if stale to avoid showing incorrect data during transitions\n    const activeVisTableRows = isDataStale ? [] : visTableRows;\n    const activeVisTableTotalRowCount = isDataStale ? 0 : visTableTotalRowCount;\n\n    async function fetchDisplayRows(sampleSize?: number) {\n        if (sampleSize == undefined) {\n            sampleSize = 1000;\n        }\n        // If all rows are already in browser memory, sample locally (no server call needed).\n        // This covers non-virtual tables and virtual tables whose rows have been fully loaded.\n        const allRowsInMemory = !table.virtual || table.rows.length >= (table.virtual.rowCount || 0);\n        if (!allRowsInMemory) {\n            // Generate unique request ID to track this specific request\n            const requestId = `${focusedChart.id}-${table.id}-${Date.now()}`;\n            currentRequestRef.current = requestId;\n            \n            let { aggregateFields, groupByFields } = extractFieldsFromEncodingMap(focusedChart.encodingMap, conceptShelfItems);\n            fetchWithIdentity(getUrls().SAMPLE_TABLE, {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application/json',\n                },\n                body: JSON.stringify({\n                    table: table.id,\n                    size: sampleSize,\n                    method: 'random',\n                    select_fields: groupByFields,\n                    aggregate_fields_and_functions: aggregateFields,\n                }),\n            })\n            .then(response => response.json())\n            .then(data => {\n                // Only update if this is still the current request (not stale)\n                if (currentRequestRef.current === requestId) {\n                    const versionId = computeVersionId();\n                    if (data.status == \"success\") {\n                        setVisTableRows(data.rows);\n                        setVisTableTotalRowCount(data.total_row_count);\n                        setDataVersion(versionId);\n                        // Cache for instant reuse on chart revisit\n                        displayRowsCache.set(versionId, { rows: data.rows, totalCount: data.total_row_count });\n                    } else {\n                        setVisTableRows([]);\n                        setVisTableTotalRowCount(0);\n                        setDataVersion(versionId);\n                        setSystemMessage(data.message, \"error\");\n                    }\n                }\n                // Else: this response is stale, ignore it\n            })\n            .catch(error => {\n                // Only show error if this is still the current request\n                if (currentRequestRef.current === requestId) {\n                    console.error('Error sampling table:', error);\n                }\n            });\n        } else {\n            // All rows available locally — use in-memory data\n            // When sample size covers all rows, preserve original order\n            // (_.sampleSize shuffles, which destroys data-driven sort order)\n            const rowsToUse = sampleSize >= table.rows.length\n                ? table.rows\n                : _.sampleSize(table.rows, sampleSize);\n            const clonedRows = structuredClone(rowsToUse);\n            const versionId = computeVersionId();\n            setVisTableRows(clonedRows);\n            setVisTableTotalRowCount(table.rows.length);\n            setDataVersion(versionId);\n            // Cache for instant reuse on chart revisit\n            displayRowsCache.set(versionId, { rows: clonedRows, totalCount: table.rows.length });\n        }\n    }\n\n    useEffect(() => {\n        const allRowsInMemory = !table.virtual || table.rows.length >= (table.virtual.rowCount || 0);\n        if (!allRowsInMemory && visFields.length > 0 && dataFieldsAllAvailable) {\n            fetchDisplayRows();\n        }\n    }, [])\n\n    useEffect(() => {\n        // Include contentHash in versionId so the cache invalidates when streaming/refreshed data changes\n        const contentSuffix = table.contentHash ? `-${table.contentHash.slice(0, 8)}` : `-${table.rows.length}`;\n        const versionId = `${table.id}-${sortedVisDataFields.join(\"_\")}${contentSuffix}`;\n\n        if (visFields.length > 0 && dataFieldsAllAvailable) {\n            // Check cache first — avoid server round-trip on chart revisit\n            const cached = displayRowsCache.get(versionId);\n            if (cached) {\n                setVisTableRows(cached.rows);\n                setVisTableTotalRowCount(cached.totalCount);\n                setDataVersion(versionId);\n            } else {\n                fetchDisplayRows();\n            }\n        } else {\n            // If no fields, just use the table rows directly\n            setVisTableRows(table.rows);\n            setVisTableTotalRowCount(table.virtual?.rowCount || table.rows.length);\n            setDataVersion(versionId);\n        }\n    }, [dataRequirements, table.rows])\n    \n\n\n    let encodingShelfEmpty = useMemo(() => {\n        return Object.keys(focusedChart.encodingMap).every(key => \n            focusedChart.encodingMap[key as keyof EncodingMap].fieldID == undefined && focusedChart.encodingMap[key as keyof EncodingMap].aggregate == undefined);\n    }, [focusedChart.encodingMap]);\n\n    // Calculate chart availability in the parent\n    const chartUnavailable = useMemo(() => {\n        if (focusedChart.chartType === \"Auto\" || focusedChart.chartType === \"Table\") {\n            return false;\n        }\n        \n        // Check if fields exist in table and table has rows\n        return !(dataFieldsAllAvailable && table.rows.length > 0);\n    }, [focusedChart.chartType, dataFieldsAllAvailable, table.rows.length]);\n\n    let resultTable = tables.find(t => t.id == trigger?.resultTableId);\n\n    // Chart insight\n    const chartInsightInProgress = useSelector((state: DataFormulatorState) => state.chartInsightInProgress) || [];\n    const insightLoading = chartInsightInProgress.includes(focusedChart.id);\n    const currentInsightKey = computeInsightKey(focusedChart);\n    const insightFresh = focusedChart.insight?.key === currentInsightKey;\n    \n    const actionBtnSx = {\n        padding: '4px',\n        borderRadius: '6px',\n        color: 'text.secondary',\n        transition: 'all 0.15s ease',\n        '&:hover': {\n            backgroundColor: 'rgba(25, 118, 210, 0.08)',\n            color: 'primary.main',\n        },\n        '&.Mui-disabled': {\n            color: 'action.disabled',\n        },\n    };\n\n    let saveButton = (\n        <Tooltip key=\"save-copy-tooltip\" title={focusedChart.saved ? \"Not anymore\" : \"I like it!\"}>\n            <span>\n                <IconButton key=\"unsave-btn\" size=\"small\" sx={actionBtnSx}\n                    onClick={() => {\n                        if (!chartUnavailable) {\n                            dispatch(dfActions.saveUnsaveChart(focusedChart.id));\n                        }\n                    }}>\n                    {focusedChart.saved ? <StarIcon sx={{ fontSize: 18, color: \"goldenrod\" }} /> : <StarBorderIcon sx={{ fontSize: 18 }} />}\n                </IconButton>\n            </span>\n        </Tooltip>\n    );\n\n    let deleteButton = (\n        <Tooltip title=\"Delete\" key=\"delete-btn-tooltip\">\n            <span>\n                <IconButton size=\"small\" disabled={trigger != undefined}\n                    sx={{ ...actionBtnSx, color: 'error.main', '&:hover': { backgroundColor: 'rgba(211, 47, 47, 0.08)', color: 'error.main' } }}\n                    onClick={() => { handleDeleteChart() }}>\n                    <DeleteIcon sx={{ fontSize: 18 }} />\n                </IconButton>\n            </span>\n        </Tooltip>\n    );\n\n    let transformCode = \"\";\n    if (table.derive?.code) {\n        transformCode = `${table.derive.code}`\n    }\n\n    // Check if concepts are available\n    const availableConcepts = extractConceptExplanations(table);\n    const hasConcepts = availableConcepts.length > 0;\n\n    let derivedTableItems = (resultTable?.derive || table.derive) ? [\n        <Box key=\"explanation-toggle-group\" sx={{ \n            display: 'flex', \n            alignItems: 'center', \n            mx: 0.5,\n            backgroundColor: 'rgba(0, 0, 0, 0.02)',\n            borderRadius: 1,\n            padding: '2px',\n            border: `1px solid ${borderColor.component}`\n        }}>\n            <ButtonGroup\n                key=\"explanation-button-group\"\n                size=\"small\"\n                sx={{\n                    '& .MuiButton-root': {\n                        textTransform: 'none',\n                        fontSize: '0.7rem',\n                        fontWeight: 500,\n                        border: 'none',\n                        borderRadius: '3px',\n                        padding: '2px 6px',\n                        minWidth: 'auto',\n                        color: 'text.secondary',\n                        '&:hover': {\n                            backgroundColor: 'rgba(25, 118, 210, 0.08)',\n                        }\n                    }\n                }}\n            >\n                <Button \n                    key=\"chat-dialog-btn\"\n                    onClick={() => { setChatDialogOpen(!chatDialogOpen) }}\n                    sx={{\n                        backgroundColor: chatDialogOpen ? 'rgba(25, 118, 210, 0.2)' : 'transparent',\n                        color: chatDialogOpen ? 'primary.main' : 'text.secondary',\n                        fontWeight: chatDialogOpen ? 600 : 500,\n                        '&:hover': {\n                            backgroundColor: chatDialogOpen ? 'rgba(25, 118, 210, 0.25)' : 'rgba(25, 118, 210, 0.08)',\n                        },\n                    }}\n                >\n                    <QuestionAnswerIcon sx={{ fontSize: '14px', mr: 0.5 }} />\n                    log\n                </Button>\n                <Button \n                    key=\"code-btn\"\n                    onClick={() => {\n                        if (codeViewOpen) {\n                            setCodeViewOpen(false);\n                        } else {\n                            setCodeViewOpen(true);\n                            setConceptExplanationsOpen(false);\n                            setInsightViewOpen(false);\n                        }\n                    }}\n                    sx={{\n                        backgroundColor: codeViewOpen ? 'rgba(25, 118, 210, 0.2)' : 'transparent',\n                        color: codeViewOpen ? 'primary.main' : 'text.secondary',\n                        fontWeight: codeViewOpen ? 600 : 500,\n                        '&:hover': {\n                            backgroundColor: codeViewOpen ? 'rgba(25, 118, 210, 0.25)' : 'rgba(25, 118, 210, 0.08)',\n                        }\n                    }}\n                >\n                    <TerminalIcon sx={{ fontSize: '14px', mr: 0.5 }} />\n                    code\n                </Button>\n                {hasConcepts && (\n                    <Button \n                        key=\"concepts-btn\"\n                        onClick={() => {\n                            if (conceptExplanationsOpen) {\n                                setConceptExplanationsOpen(false);\n                            } else {\n                                setConceptExplanationsOpen(true);\n                                setCodeViewOpen(false);\n                                setInsightViewOpen(false);\n                            }\n                        }}\n                        sx={{\n                            backgroundColor: conceptExplanationsOpen ? 'rgba(25, 118, 210, 0.2)' : 'transparent',\n                            color: conceptExplanationsOpen ? 'primary.main' : 'text.secondary',\n                            fontWeight: conceptExplanationsOpen ? 600 : 500,\n                            '&:hover': {\n                                backgroundColor: conceptExplanationsOpen ? 'rgba(25, 118, 210, 0.25)' : 'rgba(25, 118, 210, 0.08)',\n                            }\n                        }}\n                    >\n                        <InfoIcon sx={{ fontSize: '14px', mr: 0.5 }} />\n                        concepts\n                    </Button>\n                )}\n            </ButtonGroup>\n        </Box>,\n        <ChatDialog key=\"chat-dialog-button\" open={chatDialogOpen} \n                    handleCloseDialog={() => { setChatDialogOpen(false) }}\n                    code={transformCode}\n                    dialog={resultTable?.derive?.dialog || table.derive?.dialog as any[]} />\n    ] : [];\n\n    let insightButton = !chartUnavailable && focusedChart.chartType !== \"Table\" ? (\n        <Box key=\"insight-toggle-group\" sx={{ \n            display: 'flex', \n            alignItems: 'center', \n            mx: 0.5,\n            backgroundColor: 'rgba(0, 0, 0, 0.02)',\n            borderRadius: 1,\n            padding: '2px',\n            border: `1px solid ${borderColor.component}`\n        }}>\n            <Button \n                key=\"insight-btn\"\n                size=\"small\"\n                onClick={() => {\n                    if (insightViewOpen) {\n                        setInsightViewOpen(false);\n                    } else {\n                        setInsightViewOpen(true);\n                        setCodeViewOpen(false);\n                        setConceptExplanationsOpen(false);\n                        if (!insightFresh && !insightLoading) {\n                            dispatch(fetchChartInsight({ chartId: focusedChart.id, tableId: table.id }) as any);\n                        }\n                    }\n                }}\n                sx={{\n                    textTransform: 'none',\n                    fontSize: '0.7rem',\n                    fontWeight: insightViewOpen ? 600 : 500,\n                    minWidth: 'auto',\n                    padding: '2px 6px',\n                    borderRadius: '3px',\n                    backgroundColor: insightViewOpen ? 'rgba(25, 118, 210, 0.2)' : 'transparent',\n                    color: insightViewOpen ? 'primary.main' : 'text.secondary',\n                    '&:hover': {\n                        backgroundColor: insightViewOpen ? 'rgba(25, 118, 210, 0.25)' : 'rgba(25, 118, 210, 0.08)',\n                    }\n                }}\n            >\n                <InsightIcon sx={{ fontSize: '14px', mr: 0.5 }} />\n                {insightLoading ? <CircularProgress size={10} sx={{ ml: 0.5 }} /> : 'insight'}\n            </Button>\n        </Box>\n    ) : null;\n    \n    let vegaEditorButton = (\n        <Tooltip key=\"vega-editor-tooltip\" title=\"Open in Vega Editor\">\n            <span>\n                <IconButton key=\"vega-editor-btn\" size=\"small\" sx={actionBtnSx}\n                    disabled={!renderedSpec || focusedChart.chartType === \"Table\" || focusedChart.chartType === \"Auto\"}\n                    onClick={handleOpenInVegaEditor}>\n                    <OpenInNewIcon sx={{ fontSize: 18 }} />\n                </IconButton>\n            </span>\n        </Tooltip>\n    );\n\n    let chartActionButtons = [\n        ...derivedTableItems,\n        insightButton,\n        saveButton,\n        vegaEditorButton,\n        deleteButton,\n    ]\n\n\n    let chartMessage = \"\";\n    if (focusedChart.chartType == \"Table\") {\n        chartMessage = \"Tell me what you want to visualize!\";\n    } else if (focusedChart.chartType == \"Auto\") {\n        chartMessage = \"Say something to get chart recommendations!\";\n    } else if (encodingShelfEmpty) {\n        chartMessage = \"Put data fields to chart builder or describe what you want!\";\n    } else if (chartUnavailable) {\n        chartMessage = \"Formulate data to create the visualization!\";\n    } else if (chartSynthesisInProgress.includes(focusedChart.id)) {\n        chartMessage = \"Synthesis in progress...\";\n    } else if (table.derive) {\n        chartMessage = \"AI generated results can be inaccurate, inspect it!\";\n    }\n\n    let chartActionItems = isDataStale ? [] : (\n        <Box sx={{display: \"flex\", flexDirection: \"column\", flex: 1, my: 1}}>\n            {(table.virtual ? activeVisTableTotalRowCount > serverConfig.MAX_DISPLAY_ROWS : table.rows.length > serverConfig.MAX_DISPLAY_ROWS) && !(chartUnavailable || encodingShelfEmpty) ? (\n                <Box sx={{ display: 'flex', flexDirection: \"row\", margin: \"auto\", justifyContent: 'center', alignItems: 'center'}}>\n                    <Typography component=\"span\" fontSize=\"small\" color=\"text.secondary\" sx={{textAlign:'center'}}>\n                        visualizing\n                    </Typography>\n                    <SampleSizeEditor \n                        initialSize={activeVisTableRows.length}\n                        totalSize={activeVisTableTotalRowCount}\n                        onSampleSizeChange={(newSize) => {\n                            fetchDisplayRows(newSize);\n                        }}\n                    />\n                    <Typography component=\"span\" fontSize=\"small\" color=\"text.secondary\" sx={{textAlign:'center'}}>\n                        sample rows\n                    </Typography>\n                    <Tooltip title=\"sample again!\">\n                        <IconButton size=\"small\" color=\"primary\" onClick={() => {\n                            fetchDisplayRows(activeVisTableRows.length);\n                        }}>\n                            <CasinoIcon sx={{ fontSize: '14px', \n                                transition: 'transform 0.5s ease-in-out', '&:hover': { transform: 'rotate(180deg)' } }}/>\n                        </IconButton>\n                    </Tooltip>\n                </Box>\n            ) : \"\"}\n            <Typography component=\"span\" fontSize=\"small\" color=\"text.secondary\" sx={{textAlign:'center'}}>\n                {chartMessage}\n            </Typography>\n        </Box>\n    )\n    \n    let focusedComponent = [];\n\n    let focusedElement = <Fade key={`fade-${focusedChart.id}-${dataVersion}-${focusedChart.chartType}-${JSON.stringify(focusedChart.encodingMap)}`} \n                            in={!isDataStale} timeout={600}>    \n                            <Box sx={{display: \"flex\", flexDirection: \"column\", flexShrink: 0, justifyContent: 'center', justifyItems: 'center', maxWidth: '100%'}} className=\"chart-box\">\n                                {insightFresh && focusedChart.insight?.title && (\n                                    <Typography fontSize=\"small\" sx={{\n                                        fontWeight: (focusedChart.encodingMap.column?.fieldID || focusedChart.encodingMap.row?.fieldID) ? 400 : 600,\n                                        textAlign: 'center', mb: 0.5, color: 'text.secondary',\n                                    }}>\n                                        {focusedChart.insight.title}\n                                    </Typography>\n                                )}\n                                <Box sx={{m: 'auto', minHeight: 240, maxWidth: '100%', overflow: 'hidden'}}>\n                                    <VegaChartRenderer\n                                        key={focusedChart.id}\n                                        chart={focusedChart}\n                                        conceptShelfItems={conceptShelfItems}\n                                        visTableRows={activeVisTableRows}\n                                        tableMetadata={table.metadata}\n                                        chartWidth={config.defaultChartWidth}\n                                        chartHeight={config.defaultChartHeight}\n                                        scaleFactor={localScaleFactor}\n                                        maxStretchFactor={config.maxStretchFactor}\n                                        chartUnavailable={chartUnavailable}\n                                        onSpecReady={handleSpecReady}\n                                    />\n                                </Box>\n                                {chartActionItems}\n                            </Box>                        \n                        </Fade>;\n\n    focusedComponent = [\n        <Box key=\"chart-focused-element\"  sx={{ width: \"100%\", minHeight: \"calc(100% - 40px)\", margin: \"auto\", mt: 4, mb: 1, display: \"flex\", flexDirection: \"column\"}}>\n            {focusedElement}\n            <Box ref={explanationComponentsRef} sx={{width: \"100%\", mx: \"auto\"}}>\n                <Collapse in={conceptExplanationsOpen}>\n                    <Box sx={{minWidth: 440, maxWidth: 800, padding: \"0px 8px\", position: 'relative', margin: '8px auto'}}>\n                        <ConceptExplCards \n                            concepts={extractConceptExplanations(table)}\n                            title=\"Derived Concepts\"\n                            maxCards={8}\n                        />\n                    </Box>\n                </Collapse>\n                <Collapse in={codeViewOpen}>\n                    <Box sx={{minWidth: 440, maxWidth: 800, padding: \"0px 8px\", position: 'relative', margin: '8px auto'}}>\n                        <ButtonGroup sx={{position: 'absolute', right: 8, top: 1}}>\n                            <IconButton onClick={() => {\n                                setCodeViewOpen(false);\n                            }}  color='primary' aria-label=\"delete\">\n                                <CloseIcon />\n                            </IconButton>\n                        </ButtonGroup>\n                        {/* <Typography fontSize=\"small\" sx={{color: 'gray'}}>{table.derive?.source} → {table.id}</Typography> */}\n                        <CodeExplanationCard\n                            title=\"Data transformation code\"\n                            icon={<CodeIcon sx={{ fontSize: 16, color: 'primary.main' }} />}\n                        >\n                            <Box sx={{\n                                    maxHeight: '400px', \n                                    overflow: 'auto', \n                                    width: '100%', \n                                    p: 0.5\n                                }}\n                            >   \n                                <CodeBox code={transformCode.trimStart()} language={table.virtual ? \"sql\" : \"python\"} />\n                            </Box>\n                        </CodeExplanationCard>\n                    </Box>\n                </Collapse>\n                <Collapse in={insightViewOpen}>\n                    <Box sx={{minWidth: 440, maxWidth: 800, padding: \"0px 8px\", position: 'relative', margin: '8px auto'}}>\n                        <ButtonGroup sx={{position: 'absolute', right: 8, top: 0}}>\n                            <IconButton onClick={() => {\n                                setInsightViewOpen(false);\n                            }}  color='primary' aria-label=\"close\">\n                                <CloseIcon />\n                            </IconButton>\n                        </ButtonGroup>\n                        <CodeExplanationCard\n                            title=\"Chart insight\"\n                            icon={<InsightIcon sx={{ fontSize: 16, color: 'primary.main' }} />}\n                        >\n                            {insightLoading ? (\n                                <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, p: 1 }}>\n                                    <CircularProgress size={16} />\n                                    <Typography fontSize=\"small\" color=\"text.secondary\">Analyzing chart...</Typography>\n                                </Box>\n                            ) : insightFresh && focusedChart.insight ? (\n                                <Box sx={{ p: 0.5 }}>\n                                    <Typography fontSize=\"small\" sx={{ fontWeight: 600, mb: 0.5 }}>\n                                        {focusedChart.insight.title}\n                                    </Typography>\n                                    {(focusedChart.insight.takeaways || []).map((t, i) => (\n                                        <Typography key={i} fontSize=\"small\" color=\"text.secondary\" sx={{ mb: 0.25, display: 'flex', alignItems: 'baseline' }}>\n                                            <span style={{ marginRight: 4, flexShrink: 0 }}>•</span>{t}\n                                        </Typography>\n                                    ))}\n                                    <Button \n                                        size=\"small\" \n                                        sx={{ mt: 1, textTransform: 'none', fontSize: '0.7rem' }}\n                                        onClick={() => {\n                                            dispatch(fetchChartInsight({ chartId: focusedChart.id, tableId: table.id }) as any);\n                                        }}\n                                    >\n                                        regenerate\n                                    </Button>\n                                </Box>\n                            ) : (\n                                <Box sx={{ p: 0.5 }}>\n                                    <Typography fontSize=\"small\" color=\"text.secondary\">\n                                        No insight available.\n                                    </Typography>\n                                    <Button \n                                        size=\"small\" \n                                        sx={{ mt: 0.5, textTransform: 'none', fontSize: '0.7rem' }}\n                                        onClick={() => {\n                                            dispatch(fetchChartInsight({ chartId: focusedChart.id, tableId: table.id }) as any);\n                                        }}\n                                    >\n                                        generate insight\n                                    </Button>\n                                </Box>\n                            )}\n                        </CodeExplanationCard>\n                    </Box>\n                </Collapse>\n            </Box>\n            <Box key='chart-action-buttons' sx={{ \n                display: 'flex', flexShrink: 0, flexDirection: \"row\", alignItems: 'center',\n                mx: \"auto\", py: 0.5, gap: 0.25,\n            }}>\n                {chartActionButtons}\n            </Box>\n        </Box>\n    ]\n    \n    const ENCODING_SHELF_WIDTH = 200;\n\n    let content = [\n        <Box key='focused-box' className=\"vega-focused\" sx={{ display: \"flex\", overflow: 'auto', flexDirection: 'column', position: 'relative', flex: 1, pr: `${ENCODING_SHELF_WIDTH}px` }}>\n            {focusedComponent}\n        </Box>,\n        /* Floating encoding shelf panel */\n        <Box key='encoding-shelf' sx={{\n            position: 'absolute',\n            top: 0,\n            right: 0,\n            zIndex: 10,\n            height: '100%',\n            pointerEvents: 'none',\n        }}>\n            <Box sx={{ pointerEvents: 'auto' }}>\n                <EncodingShelfThread chartId={focusedChart.id} />\n            </Box>\n        </Box>\n    ]\n\n    let [scaleMin, scaleMax] = [0.2, 2.4]\n\n    // Memoize chart resizer to avoid re-creating Material-UI components on every render\n    let chartResizer = useMemo(() => <Stack spacing={1} direction=\"row\" sx={{ \n        margin: 1, width: 160, position: \"absolute\", zIndex: 10, \n        backgroundColor: 'rgba(255, 255, 255, 0.9)',\n        borderRadius: '4px',\n    }} alignItems=\"center\">\n        <Tooltip key=\"zoom-out-tooltip\" title=\"zoom out\">\n            <span>\n                <IconButton color=\"primary\" size='small' disabled={localScaleFactor <= scaleMin} onClick={() => {\n                    setLocalScaleFactor(s => Math.max(scaleMin, Math.round((s - 0.1) * 10) / 10));\n                }}>\n                    <ZoomOutIcon fontSize=\"small\" />\n                </IconButton>\n            </span>\n        </Tooltip>\n        <Slider aria-label=\"chart-resize\" size='small' defaultValue={1} step={0.1} min={scaleMin} max={scaleMax} \n                value={localScaleFactor} onChange={(event: Event, newValue: number | number[]) => {\n            setLocalScaleFactor(newValue as number);\n        }} />\n        <Tooltip key=\"zoom-in-tooltip\" title=\"zoom in\">\n            <span>\n                <IconButton color=\"primary\" size='small' disabled={localScaleFactor >= scaleMax} onClick={() => {\n                    setLocalScaleFactor(s => Math.min(scaleMax, Math.round((s + 0.1) * 10) / 10));\n                }}>\n                    <ZoomInIcon fontSize=\"small\" />\n                </IconButton>\n            </span>\n        </Tooltip>\n    </Stack>, [localScaleFactor]);\n\n    return <Box ref={componentRef} sx={{overflow: \"hidden\", display: 'flex', flex: 1, position: 'relative'}}>\n        {synthesisRunning ? <Box sx={{\n                position: \"absolute\", height: \"calc(100%)\", width: \"calc(100%)\", zIndex: 1001, \n                backgroundColor: \"rgba(243, 243, 243, 0.8)\", display: \"flex\", alignItems: \"center\"\n            }}>\n                <LinearProgress sx={{ width: \"100%\", height: \"100%\", opacity: 0.05 }} />\n            </Box> : ''}\n        {chartUnavailable ? \"\" : chartResizer}\n        {content}\n    </Box>\n}\n\nexport const VisualizationViewFC: FC<VisPanelProps> = function VisualizationView({ }) {\n\n    let allCharts = useSelector(dfSelectors.getAllCharts);\n    let focusedId = useSelector((state: DataFormulatorState) => state.focusedId);\n    let focusedChartId = focusedId?.type === 'chart' ? focusedId.chartId : undefined;\n    let focusedTableId = React.useMemo(() => {\n        if (!focusedId) return undefined;\n        if (focusedId.type === 'table') return focusedId.tableId;\n        const chartId = focusedId.chartId;\n        const chart = allCharts.find(c => c.id === chartId);\n        return chart?.tableRef;\n    }, [focusedId, allCharts]);\n    let chartSynthesisInProgress = useSelector((state: DataFormulatorState) => state.chartSynthesisInProgress) || [];\n\n    const dispatch = useDispatch();\n\n    let focusedChart = allCharts.find(c => c.id == focusedChartId) as Chart;\n    let synthesisRunning = focusedChartId ? chartSynthesisInProgress.includes(focusedChartId) : false;\n\n    // when there is no result and synthesis is running, just show the waiting panel\n    if (!focusedChart || focusedChart?.chartType == \"?\") {\n        let chartSelectionBox = <Box sx={{ display: \"flex\", flexDirection: \"row\", flexWrap: \"wrap\", gap: 2 }}>\n            {Object.entries(CHART_TEMPLATES)\n                .filter(([category, templates]) => category !== \"Custom\" && templates.some(t => t.chart !== \"Auto\"))\n                .map(([category, templates]) => (\n                    <Box key={category} sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n                        {templates\n                            .filter(t => t.chart !== \"Auto\")\n                            .map((t, index) => (\n                                <Button\n                                    disabled={synthesisRunning}\n                                    key={`${category}-${index}-${t.chart}-btn`}\n                                    sx={{ margin: '1px', padding: '2px', display: 'flex', flexDirection: 'row',\n                                        textTransform: 'none', justifyContent: 'flex-start', minWidth: 0, width: '100%' }}\n                                    onClick={() => {\n                                        let focusedChart = allCharts.find(c => c.id == focusedChartId);\n                                        if (focusedChart?.chartType == \"?\") {\n                                            dispatch(dfActions.updateChartType({ chartType: t.chart, chartId: focusedChartId as string }));\n                                        } else {\n                                            dispatch(dfActions.createNewChart({ chartType: t.chart, tableId: focusedTableId as string }));\n                                        }\n                                    }}\n                                >\n                                    <Box sx={{ opacity: synthesisRunning ? 0.5 : 1, width: 40, height: 40, display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>\n                                        {typeof t?.icon == 'string' ? <img height=\"40px\" width=\"40px\" src={t?.icon} alt=\"\" role=\"presentation\" /> : t.icon}\n                                    </Box>\n                                    <Typography sx={{ ml: '4px', whiteSpace: \"nowrap\", fontSize: '10px', lineHeight: 1.2 }}>{t?.chart}</Typography>\n                                </Button>\n                            ))\n                        }\n                    </Box>\n                ))\n            }\n        </Box>\n        return (\n            <Box sx={{  margin: \"auto\" }}>\n                {focusedTableId ? <ChartRecBox sx={{margin: 'auto'}} tableId={focusedTableId as string} placeHolderChartId={focusedChartId as string} /> : null}\n                <Divider sx={{my: 3}} textAlign='left'>\n                    <Typography sx={{fontSize: 12, color: \"text.secondary\"}}>\n                        or, start with a chart type\n                    </Typography>\n                </Divider>\n                {chartSelectionBox}\n            </Box>\n        )\n    }\n\n    let visPanel = <Box sx={{ width: \"100%\", overflow: \"hidden\", display: \"flex\", flexDirection: \"row\" }}>\n        <Box className=\"visualization-carousel\" sx={{display: \"contents\"}} >\n            <ChartEditorFC />\n        </Box>\n    </Box>\n\n    return visPanel;\n}\n"
  },
  {
    "path": "src/views/useFormulateData.ts",
    "content": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { useSelector, useDispatch } from 'react-redux';\nimport { DataFormulatorState, dfActions, dfSelectors, fetchCodeExpl, fetchChartInsight, fetchFieldSemanticType } from '../app/dfSlice';\nimport { AppDispatch } from '../app/store';\nimport { Chart, FieldItem, Trigger, createDictTable, DictTable } from '../components/ComponentType';\nimport { getUrls, getTriggers, fetchWithIdentity } from '../app/utils';\n\nexport type IdeaItem = {\n    text: string;\n    goal: string;\n    difficulty: 'easy' | 'medium' | 'hard';\n    tag?: string;\n};\n\nexport interface StreamIdeasOptions {\n    actionTableIds: string[];\n    currentTable: DictTable;\n    onIdeas: (ideas: IdeaItem[]) => void;\n    onThinkingBuffer: (buffer: string) => void;\n    onLoadingChange: (loading: boolean) => void;\n    /** Chart image (PNG data URL) for current visualization context */\n    currentChartImage?: string | null;\n    /** Sample rows from the current table */\n    currentDataSample?: any[];\n    /** Optional start question for idea generation */\n    startQuestion?: string;\n    /** If true, only blocks with type===\"question\" are included (default: false) */\n    filterByType?: boolean;\n}\n\nexport interface FormulateDataOptions {\n    instruction: string;\n    mode: 'formulate' | 'ideate';\n    actionTableIds: string[];\n    currentTable: DictTable;\n    overrideTableId?: string;\n    currentVisualization?: any;\n    expectedVisualization?: any;\n    /** The chart spec to embed in the trigger for the derived table */\n    triggerChart: Chart;\n    /**\n     * Component-specific chart creation callback.\n     * Called with the candidate table, refined goal, and resolved concepts.\n     * Should dispatch chart creation actions and return the focused chart ID (or undefined).\n     */\n    createChart: (params: {\n        candidateTable: DictTable;\n        refinedGoal: any;\n        currentConcepts: FieldItem[];\n    }) => string | undefined;\n    /** Called before the request is made */\n    onStarted?: () => void;\n    /** Called on successful formulation */\n    onSuccess?: (params: { displayInstruction: string; candidateTable: DictTable; focusedChartId?: string }) => void;\n    /** Called on error */\n    onError?: (error: any) => void;\n    /** Called after the request completes (success or error) */\n    onFinally?: () => void;\n}\n\nfunction generateTableId(tables: DictTable[]): string {\n    let tableSuffix = Number.parseInt((Date.now() - Math.floor(Math.random() * 10000)).toString().slice(-6));\n    let tableId = `table-${tableSuffix}`;\n    while (tables.find(t => t.id === tableId) !== undefined) {\n        tableSuffix += 1;\n        tableId = `table-${tableSuffix}`;\n    }\n    return tableId;\n}\n\n/**\n * Shared hook for data formulation and idea streaming.\n * Used by both EncodingShelfCard (chart-aware formulation) and ChartRecBox (NL-driven formulation).\n */\nexport function useFormulateData() {\n    const dispatch = useDispatch<AppDispatch>();\n    const tables = useSelector((state: DataFormulatorState) => state.tables);\n    const config = useSelector((state: DataFormulatorState) => state.config);\n    const agentRules = useSelector((state: DataFormulatorState) => state.agentRules);\n    const conceptShelfItems = useSelector((state: DataFormulatorState) => state.conceptShelfItems);\n    const activeModel = useSelector(dfSelectors.getActiveModel);\n\n    /**\n     * Build an exploration thread from the current table's derivation chain.\n     */\n    function buildExplorationThread(currentTable: DictTable): any[] {\n        if (!currentTable.derive || currentTable.anchored) return [];\n        const triggers = getTriggers(currentTable, tables);\n        return triggers.map(trigger => ({\n            name: trigger.resultTableId,\n            rows: tables.find(t2 => t2.id === trigger.resultTableId)?.rows,\n            description: `Derive from ${tables.find(t2 => t2.id === trigger.resultTableId)?.derive?.source} with instruction: ${trigger.instruction}`,\n        }));\n    }\n\n    /**\n     * Stream ideas/recommendations from the exploration agent via SSE.\n     */\n    async function streamIdeas(options: StreamIdeasOptions): Promise<void> {\n        const {\n            actionTableIds, currentTable,\n            onIdeas, onThinkingBuffer, onLoadingChange,\n            currentChartImage, currentDataSample,\n            startQuestion, filterByType = false,\n        } = options;\n\n        onLoadingChange(true);\n        onThinkingBuffer(\"\");\n        onIdeas([]);\n\n        try {\n            const explorationThread = buildExplorationThread(currentTable);\n            const actionTables = actionTableIds.map(id => tables.find(t => t.id === id) as DictTable);\n\n            const messageBody = JSON.stringify({\n                token: String(Date.now()),\n                model: activeModel,\n                mode: 'interactive',\n                input_tables: actionTables.map(t => ({\n                    name: t.virtual?.tableId || t.id.replace(/\\.[^/.]+$/, \"\"),\n                    rows: t.rows,\n                    attached_metadata: t.attachedMetadata,\n                })),\n                exploration_thread: explorationThread,\n                agent_exploration_rules: agentRules.exploration,\n                ...(currentDataSample ? { current_data_sample: currentDataSample } : {}),\n                ...(currentChartImage ? { current_chart: currentChartImage } : {}),\n                ...(startQuestion ? { start_question: startQuestion } : {}),\n            });\n\n            const engine = getUrls().GET_RECOMMENDATION_QUESTIONS;\n            const controller = new AbortController();\n            const timeoutId = setTimeout(() => controller.abort(), config.formulateTimeoutSeconds * 1000);\n\n            const response = await fetchWithIdentity(engine, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json' },\n                body: messageBody,\n                signal: controller.signal,\n            });\n\n            clearTimeout(timeoutId);\n\n            if (!response.ok) {\n                throw new Error(`HTTP error! status: ${response.status}`);\n            }\n\n            const reader = response.body?.getReader();\n            if (!reader) {\n                throw new Error('No response body reader available');\n            }\n\n            const decoder = new TextDecoder();\n            let lines: string[] = [];\n            let buffer = '';\n\n            const updateState = (currentLines: string[]) => {\n                const dataBlocks = currentLines\n                    .map(line => { try { return JSON.parse(line.trim()); } catch (e) { return null; } })\n                    .filter(block => block != null);\n\n                const questions = (filterByType ? dataBlocks.filter((block: any) => block.type === \"question\") : dataBlocks)\n                    .map((block: any) => ({\n                        text: block.text,\n                        goal: block.goal,\n                        difficulty: block.difficulty,\n                        tag: block.tag,\n                    }));\n\n                onIdeas(questions);\n            };\n\n            try {\n                while (true) {\n                    const { done, value } = await reader.read();\n                    if (done) break;\n\n                    buffer += decoder.decode(value, { stream: true });\n                    const newLines = buffer.split('data: ').filter(line => line.trim() !== \"\");\n                    buffer = newLines.pop() || '';\n                    if (newLines.length > 0) {\n                        lines.push(...newLines);\n                        updateState(lines);\n                    }\n                    onThinkingBuffer(buffer.replace(/^data: /, \"\"));\n                }\n            } finally {\n                reader.releaseLock();\n            }\n\n            lines.push(buffer);\n            updateState(lines);\n\n            if (lines.length === 0) {\n                throw new Error('No valid results returned from agent');\n            }\n        } catch (error) {\n            dispatch(dfActions.addMessages({\n                \"timestamp\": Date.now(),\n                \"type\": \"error\",\n                \"component\": \"chart builder\",\n                \"value\": \"Failed to get ideas from the exploration agent. Please try again.\",\n                \"detail\": error instanceof Error ? error.message : 'Unknown error',\n            }));\n        } finally {\n            onLoadingChange(false);\n        }\n    }\n\n    /**\n     * Formulate data: send instruction to derive/refine endpoint and process the result.\n     * Handles request building, dialog continuation, table/concept creation, and error handling.\n     * Chart creation is delegated to the caller via the createChart callback.\n     */\n    function formulateData(options: FormulateDataOptions): void {\n        const {\n            instruction, mode, actionTableIds, currentTable,\n            overrideTableId, currentVisualization, expectedVisualization,\n            triggerChart, createChart,\n            onStarted, onSuccess, onError, onFinally,\n        } = options;\n\n        if (actionTableIds.length === 0) return;\n\n        onStarted?.();\n\n        const actionTables = actionTableIds.map(id => tables.find(t => t.id === id) as DictTable);\n        const token = String(Date.now());\n\n        // Build input_tables payload (shared across all request variants)\n        const inputTablesPayload = actionTables.map(t => ({\n            name: t.virtual?.tableId || t.id.replace(/\\.[^/.]+$/, \"\"),\n            rows: t.rows,\n            attached_metadata: t.attachedMetadata,\n        }));\n\n        // Build base request body\n        let messageBody: any = {\n            token,\n            mode,\n            input_tables: inputTablesPayload,\n            extra_prompt: instruction,\n            model: activeModel,\n            agent_coding_rules: agentRules.coding,\n            ...(currentVisualization ? { current_visualization: currentVisualization } : {}),\n            ...(expectedVisualization ? { expected_visualization: expectedVisualization } : {}),\n        };\n        let engine = getUrls().DERIVE_DATA;\n\n        // Handle dialog continuation / refinement\n        if (currentTable.derive?.dialog && !currentTable.anchored) {\n            const sourceTableIds = currentTable.derive.source;\n            const tableIdsChanged = !sourceTableIds.every((id: string) => actionTableIds.includes(id)) ||\n                !actionTableIds.every(id => sourceTableIds.includes(id));\n\n            if (mode === 'ideate' || tableIdsChanged) {\n                // Start fresh with prior dialog as additional context\n                messageBody.additional_messages = currentTable.derive.dialog;\n                engine = getUrls().DERIVE_DATA;\n            } else {\n                // Refine: continue existing dialog\n                messageBody = {\n                    token,\n                    mode,\n                    input_tables: inputTablesPayload,\n                    dialog: currentTable.derive.dialog,\n                    latest_data_sample: currentTable.rows.slice(0, 10),\n                    new_instruction: instruction,\n                    model: activeModel,\n                    agent_coding_rules: agentRules.coding,\n                    ...(currentVisualization ? { current_visualization: currentVisualization } : {}),\n                    ...(expectedVisualization ? { expected_visualization: expectedVisualization } : {}),\n                };\n                engine = getUrls().REFINE_DATA;\n            }\n        }\n\n        const controller = new AbortController();\n        const timeoutId = setTimeout(() => controller.abort(), config.formulateTimeoutSeconds * 1000);\n\n        fetchWithIdentity(engine, {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json' },\n            body: JSON.stringify(messageBody),\n            signal: controller.signal,\n        })\n        .then((response: Response) => {\n            if (!response.ok) {\n                return response.text().then(text => {\n                    try {\n                        const errorData = JSON.parse(text);\n                        throw new Error(errorData.error_message || errorData.error || `Server error (${response.status})`);\n                    } catch (parseError) {\n                        if (parseError instanceof SyntaxError) {\n                            throw new Error(`Server error (${response.status}): The server returned an unexpected response.`);\n                        }\n                        throw parseError;\n                    }\n                });\n            }\n            return response.json();\n        })\n        .then((data) => {\n            if (data.status === \"error\" && data.error_message) {\n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"component\": \"chart builder\",\n                    \"type\": \"error\",\n                    \"value\": `Data formulation failed: ${data.error_message}`,\n                }));\n                return;\n            }\n\n            if (!data.results || data.results.length === 0) {\n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"component\": \"chart builder\",\n                    \"type\": \"error\",\n                    \"value\": \"No result is returned from the data formulation agent. Please try again.\",\n                }));\n                return;\n            }\n\n            if (data[\"token\"] !== token) return;\n\n            const candidates = data[\"results\"].filter((item: any) => item[\"status\"] === \"ok\");\n\n            if (candidates.length === 0) {\n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"type\": \"error\",\n                    \"component\": \"chart builder\",\n                    \"value\": \"Data formulation failed, please try again.\",\n                    \"code\": data.results[0].code,\n                    \"detail\": data.results[0].content,\n                }));\n                return;\n            }\n\n            // Process the best candidate\n            const candidate = candidates[0];\n            const code = candidate[\"code\"];\n            const codeSignature = candidate[\"code_signature\"]; // HMAC signature from server\n            const rows = candidate[\"content\"][\"rows\"];\n            const dialog = candidate[\"dialog\"];\n            const refinedGoal = candidate['refined_goal'];\n            const displayInstruction = refinedGoal[\"display_instruction\"];\n\n            // Determine table ID\n            let candidateTableId: string;\n            if (overrideTableId) {\n                candidateTableId = overrideTableId;\n            } else if (candidate[\"content\"][\"virtual\"]) {\n                candidateTableId = candidate[\"content\"][\"virtual\"][\"table_name\"];\n            } else {\n                candidateTableId = generateTableId(tables);\n            }\n\n            // Create trigger\n            const trigger: Trigger = {\n                tableId: currentTable.id,\n                instruction,\n                displayInstruction,\n                chart: triggerChart,\n                resultTableId: candidateTableId,\n            };\n\n            // Create candidate table with derive info\n            const candidateTable = createDictTable(candidateTableId, rows, {\n                code,\n                codeSignature,\n                outputVariable: refinedGoal['output_variable'] || 'result_df',\n                source: actionTableIds,\n                dialog,\n                trigger,\n            });\n\n            if (candidate[\"content\"][\"virtual\"]) {\n                candidateTable.virtual = {\n                    tableId: candidate[\"content\"][\"virtual\"][\"table_name\"],\n                    rowCount: candidate[\"content\"][\"virtual\"][\"row_count\"],\n                };\n            }\n\n            // Bootstrap metadata from agent field_metadata (temporary until fetchFieldSemanticType completes)\n            const fieldMetadata = refinedGoal['field_metadata'];\n            if (fieldMetadata && typeof fieldMetadata === 'object') {\n                for (const [fieldName, meta] of Object.entries(fieldMetadata)) {\n                    if (!candidateTable.metadata[fieldName]) continue;\n                    if (typeof meta === 'string') {\n                        // Plain string format: { \"field\": \"SemanticType\" }\n                        candidateTable.metadata[fieldName].semanticType = meta;\n                    } else if (typeof meta === 'object' && meta !== null) {\n                        // Dict format: { \"field\": { \"semantic_type\": \"...\", \"unit\": \"...\", ... } }\n                        const m = meta as Record<string, any>;\n                        if (m['semantic_type']) {\n                            candidateTable.metadata[fieldName].semanticType = m['semantic_type'];\n                        }\n                        if (m['unit']) {\n                            candidateTable.metadata[fieldName].unit = m['unit'];\n                        }\n                        if (m['intrinsic_domain']) {\n                            candidateTable.metadata[fieldName].intrinsicDomain = m['intrinsic_domain'];\n                        }\n                    }\n                }\n            }\n\n            // Insert or override table\n            if (overrideTableId) {\n                dispatch(dfActions.overrideDerivedTables(candidateTable));\n            } else {\n                dispatch(dfActions.insertDerivedTables(candidateTable));\n            }\n\n            // Add missing concepts\n            const names = candidateTable.names;\n            const missingNames = names.filter((name: string) => !conceptShelfItems.some(field => field.name === name));\n            const conceptsToAdd = missingNames.map((name: string) => ({\n                id: `concept-${name}-${Date.now()}`,\n                name,\n                source: \"custom\",\n                tableRef: \"custom\",\n            } as FieldItem));\n\n            dispatch(dfActions.addConceptItems(conceptsToAdd));\n            dispatch(fetchFieldSemanticType(candidateTable));\n            dispatch(fetchCodeExpl(candidateTable));\n\n            // Compute current concepts for chart creation\n            const currentConcepts = [...conceptShelfItems.filter(c => names.includes(c.name)), ...conceptsToAdd];\n\n            // Delegate chart creation to the caller\n            const focusedChartId = createChart({ candidateTable, refinedGoal, currentConcepts });\n\n            // Auto-generate chart insight after rendering\n            if (focusedChartId) {\n                const chartIdForInsight = focusedChartId;\n                setTimeout(() => {\n                    dispatch(fetchChartInsight({ chartId: chartIdForInsight, tableId: candidateTable.id }) as any);\n                }, 1500);\n            }\n\n            onSuccess?.({ displayInstruction, candidateTable, focusedChartId });\n        })\n        .catch((error) => {\n            if (error.name === 'AbortError') {\n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"component\": \"chart builder\",\n                    \"type\": \"error\",\n                    \"value\": `Data formulation timed out after ${config.formulateTimeoutSeconds} seconds. Consider breaking down the task, using a different model or prompt, or increasing the timeout limit.`,\n                    \"detail\": \"Request exceeded timeout limit\",\n                }));\n            } else {\n                console.error(error);\n                dispatch(dfActions.addMessages({\n                    \"timestamp\": Date.now(),\n                    \"component\": \"chart builder\",\n                    \"type\": \"error\",\n                    \"value\": \"Data formulation failed, please try again.\",\n                    \"detail\": error.message,\n                }));\n            }\n            onError?.(error);\n        })\n        .finally(() => {\n            clearTimeout(timeoutId);\n            onFinally?.();\n        });\n    }\n\n    return { streamIdeas, formulateData };\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\",\n      \"ESNext.Array\",\n    ],\n    \"downlevelIteration\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"jsx\": \"react\",\n  },\n  \"include\": [\n    \"src\"\n  ]\n}\n"
  },
  {
    "path": "vite.config.ts",
    "content": "import { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react-swc';\nimport path from 'path';\n\n// Get port from environment variable with fallback to 5567\nconst apiPort = process.env.API_PORT || 5567;\n\nexport default defineConfig({\n  plugins: [react()],\n  resolve: {\n    alias: {\n      '@': path.resolve(__dirname, './src'),\n    },\n  },\n  css: {\n    preprocessorOptions: {\n      scss: {\n        api: 'modern-compiler',\n      },\n    },\n  },\n  build: {\n    outDir: path.join(__dirname, 'py-src', 'data_formulator', \"dist\"),\n    rollupOptions: {\n      output: {\n        entryFileNames: `DataFormulator.js`,  // specific name for the main JS bundle\n        chunkFileNames: `assets/[name]-[hash].js`, // keep default naming for chunks\n        assetFileNames: `assets/[name]-[hash].[ext]`, // keep default naming for other assets\n        manualChunks: {\n          // Separate vendor chunks for better caching and parallel loading\n          'vendor-react': ['react', 'react-dom', 'react-redux', 'redux', '@reduxjs/toolkit'],\n          'vendor-mui': ['@mui/material', '@mui/icons-material', '@mui/lab', '@emotion/react', '@emotion/styled'],\n          'vendor-vega': ['vega', 'vega-lite', 'vega-embed', 'react-vega'],\n          'vendor-d3': ['d3'],\n          'vendor-utils': ['lodash', 'localforage', 'dompurify', 'validator'],\n          'vendor-editor': ['prismjs', 'prism-react-renderer', 'react-simple-code-editor', 'prettier'],\n          'vendor-markdown': ['markdown-to-jsx', 'mui-markdown', 'katex', 'react-katex'],\n          'vendor-misc': ['exceljs', 'html2canvas', 'allotment', 'react-dnd', 'react-dnd-html5-backend', 'react-virtuoso'],\n        }\n      }\n    },\n    chunkSizeWarningLimit: 1000, // Warn if chunks exceed 1MB\n  },\n  server: {\n    proxy: {\n      '/api': {\n        target: `http://localhost:${apiPort}`,\n        changeOrigin: true,\n      }\n    }\n  }\n});\n"
  }
]